OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項

用於從影像中提取加速魯棒特徵 (SURF) 的類。: 更多...

#include <opencv2/xfeatures2d/cuda.hpp>

cv::cuda::SURF_CUDA 的協作圖

公共型別

列舉  KeypointLayout {
  X_ROW = 0 ,
  Y_ROW ,
  LAPLACIAN_ROW ,
  OCTAVE_ROW ,
  SIZE_ROW ,
  ANGLE_ROW ,
  HESSIAN_ROW ,
  ROWS_COUNT
}
 

公共成員函式

 SURF_CUDA ()
 預設建構函式
 
 SURF_CUDA (double _hessianThreshold, int _nOctaves=4, int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright=false)
 包含所有必要引數的完整建構函式
 
int defaultNorm () const
 返回預設的範數型別
 
int descriptorSize () const
 返回描述符的大小(浮點數,64 或 128)
 
void GpuMat &keypoints)
 使用 SURF 中使用的快速 Hessian 檢測器查詢關鍵點。
 
void detectWithDescriptors (const GpuMat &img, const GpuMat &mask, GpuMat &keypoints, GpuMat &descriptors, bool useProvidedKeypoints=false)
 使用 SURF 中使用的快速 Hessian 檢測器查詢關鍵點並計算其描述符。
 
void downloadDescriptors (const GpuMat &descriptorsGPU, std::vector< float > &descriptors)
 將描述符從裝置下載到主機記憶體
 
void downloadKeypoints (const GpuMat &keypointsGPU, std::vector< KeyPoint > &keypoints)
 將關鍵點從裝置下載到主機記憶體
 
void operator() (const GpuMat &img, const GpuMat &mask, GpuMat &keypoints)
 
void operator() (const GpuMat &img, const GpuMat &mask, GpuMat &keypoints, GpuMat &descriptors, bool useProvidedKeypoints=false)
 
void operator() (const GpuMat &img, const GpuMat &mask, std::vector< KeyPoint > &keypoints)
 
void operator() (const GpuMat &img, const GpuMat &mask, std::vector< KeyPoint > &keypoints, GpuMat &descriptors, bool useProvidedKeypoints=false)
 
void operator() (const GpuMat &img, const GpuMat &mask, std::vector< KeyPoint > &keypoints, std::vector< float > &descriptors, bool useProvidedKeypoints=false)
 
void releaseMemory ()
 
void uploadKeypoints (const std::vector< KeyPoint > &keypoints, GpuMat &keypointsGPU)
 將主機關鍵點上傳到裝置記憶體
 

靜態公共成員函式

static Ptr< SURF_CUDAcreate (double _hessianThreshold, int _nOctaves=4, int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright=false)
 

公共屬性

GpuMat det
 
bool extended
 
double hessianThreshold
 
float keypointsRatio
 最大關鍵點數 = min(keypointsRatio * img.size().area(), 65535)
 
GpuMat mask1
 
GpuMat maskSum
 
GpuMat maxPosBuffer
 
int nOctaveLayers
 
int nOctaves
 
GpuMat sum
 
GpuMat trace
 
bool upright
 

詳細描述

用於從影像中提取加速魯棒特徵 (SURF) 的類。

SURF_CUDA 實現了加速魯棒特徵描述符。它提供了一個快速多尺度 Hessian 關鍵點檢測器,可用於查詢關鍵點(這是預設選項)。但描述符也可以為使用者指定的關鍵點計算。僅支援 8 位灰度影像。

SURF_CUDA 可以在 GPU 和 CPU 記憶體中儲存結果。它提供了在 CPU 和 GPU 版本之間轉換結果的函式(uploadKeypoints、downloadKeypoints、downloadDescriptors)。CPU 結果的格式與 SURF 結果相同。GPU 結果儲存在 GpuMat 中。關鍵點矩陣是型別為 CV_32FC1 的 \(\texttt{nFeatures} \times 7\) 矩陣。

  • keypoints.ptr<float>(X_ROW)[i] 包含第 i 個特徵的 x 座標。
  • keypoints.ptr<float>(Y_ROW)[i] 包含第 i 個特徵的 y 座標。
  • keypoints.ptr<float>(LAPLACIAN_ROW)[i] 包含第 i 個特徵的拉普拉斯符號。
  • keypoints.ptr<float>(OCTAVE_ROW)[i] 包含第 i 個特徵的八度。
  • keypoints.ptr<float>(SIZE_ROW)[i] 包含第 i 個特徵的大小。
  • keypoints.ptr<float>(ANGLE_ROW)[i] 包含第 i 個特徵的方向。
  • keypoints.ptr<float>(HESSIAN_ROW)[i] 包含第 i 個特徵的響應。

描述符矩陣是型別為 CV_32FC1 的 \(\texttt{nFeatures} \times \texttt{descriptorSize}\) 矩陣。

SURF_CUDA 使用了一些緩衝區並提供對其的訪問。所有緩衝區都可以在函式呼叫之間安全釋放。

另請參見
SURF
注意
  • 在 opencv_source_code/samples/gpu/surf_keypoint_matcher.cpp 可以找到在 GPU 上使用 SURF 關鍵點匹配器的示例。

成員列舉文件

◆ KeypointLayout

列舉器
X_ROW 
Y_ROW 
LAPLACIAN_ROW 
OCTAVE_ROW 
SIZE_ROW 
ANGLE_ROW 
HESSIAN_ROW 
ROWS_COUNT 

建構函式 & 解構函式文件

◆ SURF_CUDA() [1/2]

cv::cuda::SURF_CUDA::SURF_CUDA ( )

預設建構函式

◆ SURF_CUDA() [2/2]

cv::cuda::SURF_CUDA::SURF_CUDA ( double _hessianThreshold,
int _nOctaves = 4,
int _nOctaveLayers = 2,
bool _extended = false,
float _keypointsRatio = 0.01f,
bool _upright = false )
顯式

包含所有必要引數的完整建構函式

成員函式文件

◆ create()

static Ptr< SURF_CUDA > cv::cuda::SURF_CUDA::create ( double _hessianThreshold,
int _nOctaves = 4,
int _nOctaveLayers = 2,
bool _extended = false,
float _keypointsRatio = 0.01f,
bool _upright = false )
static
Python
cv.cuda.SURF_CUDA.create(_hessianThreshold[, _nOctaves[, _nOctaveLayers[, _extended[, _keypointsRatio[, _upright]]]]]) -> retval
cv.cuda.SURF_CUDA_create(_hessianThreshold[, _nOctaves[, _nOctaveLayers[, _extended[, _keypointsRatio[, _upright]]]]]) -> retval
引數
_hessianThreshold用於 SURF 中的 Hessian 關鍵點檢測器的閾值。
_nOctaves關鍵點檢測器將使用的金字塔八度數量。
_nOctaveLayers每個八度內的八度層數量。
_extended擴充套件描述符標誌(true - 使用 128 元素擴充套件描述符;false - 使用 64 元素描述符)。
_keypointsRatio限制最大特徵數量
_upright直立或旋轉特徵標誌(true - 不計算特徵方向;false - 計算方向)。

◆ defaultNorm()

int cv::cuda::SURF_CUDA::defaultNorm ( ) const
Python
cv.cuda.SURF_CUDA.defaultNorm() -> retval

返回預設的範數型別

◆ descriptorSize()

int cv::cuda::SURF_CUDA::descriptorSize ( ) const
Python
cv.cuda.SURF_CUDA.descriptorSize() -> retval

返回描述符的大小(浮點數,64 或 128)

◆ detect()

void cv::cuda::SURF_CUDA::detect ( const GpuMat & img,
const GpuMat & mask,
GpuMat & keypoints )
inline
Python
cv.cuda.SURF_CUDA.detect(img, mask[, keypoints]) -> keypoints

使用 SURF 中使用的快速 Hessian 檢測器查詢關鍵點。

引數
img源影像,目前僅支援 CV_8UC1 影像。
mask與源影像大小相同且型別為 CV_8UC1 的掩碼影像。
keypoints檢測到的關鍵點。

◆ detectWithDescriptors()

void cv::cuda::SURF_CUDA::detectWithDescriptors ( const GpuMat & img,
const GpuMat & mask,
GpuMat & keypoints,
GpuMat & descriptors,
bool useProvidedKeypoints = false )
inline
Python
cv.cuda.SURF_CUDA.detectWithDescriptors(img, mask[, keypoints[, descriptors[, useProvidedKeypoints]]]) -> keypoints, descriptors

使用 SURF 中使用的快速 Hessian 檢測器查詢關鍵點並計算其描述符。

引數
img源影像,目前僅支援 CV_8UC1 影像。
mask與源影像大小相同且型別為 CV_8UC1 的掩碼影像。
keypoints檢測到的關鍵點。
descriptors關鍵點描述符。
useProvidedKeypoints為使用者提供的關鍵點計算描述符並重新計算關鍵點方向。

◆ downloadDescriptors()

void cv::cuda::SURF_CUDA::downloadDescriptors ( const GpuMat & descriptorsGPU,
std::vector< float > & descriptors )

將描述符從裝置下載到主機記憶體

◆ downloadKeypoints()

void cv::cuda::SURF_CUDA::downloadKeypoints ( const GpuMat & keypointsGPU,
std::vector< KeyPoint > & keypoints )
Python
cv.cuda.SURF_CUDA.downloadKeypoints(keypointsGPU) -> keypoints

將關鍵點從裝置下載到主機記憶體

◆ operator()() [1/5]

void cv::cuda::SURF_CUDA::operator() ( const GpuMat & img,
const GpuMat & mask,
GpuMat & keypoints )

使用 SURF 中使用的快速 Hessian 檢測器查詢關鍵點,支援 CV_8UC1 影像。關鍵點將有 nFeature 列和 6 行。keypoints.ptr<float>(X_ROW)[i] 將包含第 i 個特徵的 x 座標。keypoints.ptr<float>(Y_ROW)[i] 將包含第 i 個特徵的 y 座標。keypoints.ptr<float>(LAPLACIAN_ROW)[i] 將包含第 i 個特徵的拉普拉斯符號。keypoints.ptr<float>(OCTAVE_ROW)[i] 將包含第 i 個特徵的八度。keypoints.ptr<float>(SIZE_ROW)[i] 將包含第 i 個特徵的大小。keypoints.ptr<float>(ANGLE_ROW)[i] 將包含第 i 個特徵的方向。keypoints.ptr<float>(HESSIAN_ROW)[i] 將包含第 i 個特徵的響應。

◆ operator()() [2/5]

void cv::cuda::SURF_CUDA::operator() ( const GpuMat & img,
const GpuMat & mask,
GpuMat & keypoints,
GpuMat & descriptors,
bool useProvidedKeypoints = false )

查詢關鍵點並計算其描述符。可選地,它可以為使用者提供的關鍵點計算描述符並重新計算關鍵點方向。

◆ operator()() [3/5]

void cv::cuda::SURF_CUDA::operator() ( const GpuMat & img,
const GpuMat & mask,
std::vector< KeyPoint > & keypoints )

◆ operator()() [4/5]

void cv::cuda::SURF_CUDA::operator() ( const GpuMat & img,
const GpuMat & mask,
std::vector< KeyPoint > & keypoints,
GpuMat & descriptors,
bool useProvidedKeypoints = false )

◆ operator()() [5/5]

void cv::cuda::SURF_CUDA::operator() ( const GpuMat & img,
const GpuMat & mask,
std::vector< KeyPoint > & keypoints,
std::vector< float > & descriptors,
bool useProvidedKeypoints = false )

◆ releaseMemory()

void cv::cuda::SURF_CUDA::releaseMemory ( )

◆ uploadKeypoints()

void cv::cuda::SURF_CUDA::uploadKeypoints ( const std::vector< KeyPoint > & keypoints,
GpuMat & keypointsGPU )

將主機關鍵點上傳到裝置記憶體

成員資料文件

◆ det

GpuMat cv::cuda::SURF_CUDA::det

◆ extended

bool cv::cuda::SURF_CUDA::extended

◆ hessianThreshold

double cv::cuda::SURF_CUDA::hessianThreshold

◆ keypointsRatio

float cv::cuda::SURF_CUDA::keypointsRatio

最大關鍵點數 = min(keypointsRatio * img.size().area(), 65535)

◆ mask1

GpuMat cv::cuda::SURF_CUDA::mask1

◆ maskSum

GpuMat cv::cuda::SURF_CUDA::maskSum

◆ maxPosBuffer

GpuMat cv::cuda::SURF_CUDA::maxPosBuffer

◆ nOctaveLayers

int cv::cuda::SURF_CUDA::nOctaveLayers

◆ nOctaves

int cv::cuda::SURF_CUDA::nOctaves

◆ sum

GpuMat cv::cuda::SURF_CUDA::sum

◆ trace

GpuMat cv::cuda::SURF_CUDA::trace

◆ upright

bool cv::cuda::SURF_CUDA::upright

此類的文件生成自以下檔案