OpenCV - SURF Hessian最小阈值

Fab*_*oni 8 c++ opencv surf feature-detection hessian-matrix

我正在开发一个OpenCV项目,使用surf来检测图像中的特征.以这种方式初始化检测器

int minHessian = 100;

SurfFeatureDetector detector( minHessian );
Run Code Online (Sandbox Code Playgroud)

有人能解释一下hessian阈值的含义(以数学和实践的方式)吗?

dev*_*obf 16

这在SURF论文中有解释,在使用之前你应该阅读它.SURF算法实际上包含两部分:兴趣点检测和描述符.在这种情况下,Hessian角点检测用于兴趣点检测.阈值确定来自Hessian滤波器的输出必须有多大才能将点用作兴趣点.较大的值将导致更少但(理论上)更显着的兴趣点,而较小的值将导致更多但不太突出的点.


小智 6

在数学上,Hessian矩阵描述了函数的二阶导数,它代表曲率.想象一下你有一个三维表面f(x,y),你怎么能找到你当地的极值?只需在一阶导数中找到零点即可.为证明该点是局部最大值还是最小值,我们需要知道它的前两个最大的abs(空间中的二阶导数).如果他们的产品是负面的,那么这一点不可能是局部极端.如果产品是积极的,那么这一点将是局部极端,此外,产品越大,局部极端越尖锐.

让我们回到Hessian矩阵,它代表二阶导数.Hessian最重要的是它的特征值.特征值描述了3-D空间中的最大二阶导数(不限于x和y方向).如前所述,他们的产品很有用.这里很棘手的是特征值的乘积是Hessian的决定因素.minHessian在这里可以被认为是决定因素,这是你需要的极端"锐利".如果一个点的Det(Hessian)大于该值,则可能是兴趣点.

而不是像SIFT一样使用LoG和Hessian,SURF使用Det(Hessian)来选择比例和兴趣点.通过这种方式,SURF可以"加速".

但是,有关该行列式的更多细节,包括Haar小波滤波器,不同方向的权重......如果您对这些细节感兴趣,请参阅SURF文章.