OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::cuda::SURF_CUDA 类参考

用于从图像中提取加速鲁棒特征 (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

此类的文档生成自以下文件