OpenCV 4.11.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 detect (const GpuMat &img, const GpuMat &mask, 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 释放内存 ()
 
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 中。关键点矩阵是 \(\texttt{nFeatures} \times 7\) 矩阵,类型为 CV_32FC1。

  • 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 个特征的响应。

描述符矩阵是 \(\texttt{nFeatures} \times \texttt{descriptorSize}\) 矩阵,类型为 CV_32FC1。

SURF_CUDA 类使用一些缓冲区并提供对其的访问。所有缓冲区都可以在函数调用之间安全地释放。

另请参见
SURF
注意
  • 在 GPU 上使用 SURF 关键点匹配器的示例可在 opencv_source_code/samples/gpu/surf_keypoint_matcher.cpp 中找到。

成员枚举文档

◆ 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 )
静态
Python
cv.cuda.SURF_CUDA.create(_hessianThreshold[, _nOctaves[, _nOctaveLayers[, _extended[, _keypointsRatio[, _upright]]]]]) -> 返回值
cv.cuda.SURF_CUDA_create(_hessianThreshold[, _nOctaves[, _nOctaveLayers[, _extended[, _keypointsRatio[, _upright]]]]]) -> 返回值
参数
_hessianThresholdSURF中使用的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() -> 返回值

返回默认范数类型

◆ descriptorSize()

int cv::cuda::SURF_CUDA::descriptorSize ( ) const
Python
cv.cuda.SURF_CUDA.descriptorSize() -> 返回值

返回描述符大小(以浮点数表示,64 或 128)

◆ detect()

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

使用 SURF 中使用的快速 Hessian 检测器查找关键点。

参数
img源图像,目前仅支持 CV_8UC1 图像。
mask与src大小相同且类型为CV_8UC1的掩码图像。
keypoints检测到的关键点。

◆ detectWithDescriptors()

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

使用 SURF 中使用的快速 Hessian 检测器查找关键点并计算其描述符。

参数
img源图像,目前仅支持 CV_8UC1 图像。
mask与src大小相同且类型为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

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