OpenCV - SURF Hessian最小阈值

时间:2013-09-11 14:32:20

标签: c++ opencv feature-detection surf hessian-matrix

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

int minHessian = 100;

SurfFeatureDetector detector( minHessian );

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

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:5)

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

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

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

然而,关于该决定因素的更多细节,包括Haar小波滤波器,不同方向的权重......如果您对这些细节感兴趣,请参阅SURF论文。