SurfFeatureDetector函数中的Hessian最小阈值是什么意思?

13

我正在使用surf在图像中检测特征的OpenCV项目。 探测器是通过这种方式初始化的

int minHessian = 100;

SurfFeatureDetector detector( minHessian );

请有人用数学和实践的方式解释一下Hessian阈值的含义?


2
请查看以下问题和答案:https://dev59.com/1mMm5IYBdhLWcg3wbunb - ChronoTrigger
2个回答

19

在使用SURF算法之前,建议先阅读SURF论文。该算法主要由两部分组成:兴趣点检测和描述符。在这种情况下,使用Hessian角点检测器进行兴趣点检测。阈值决定了Hessian滤波器输出必须有多大才能将点用作兴趣点。较大的值将导致较少但(理论上)更显著的兴趣点,而较小的值将导致更多但不太显著的点。


谢谢您的回复。我正在尝试SURF算法,因为我想能够在视频中识别不同的物体(很多不同的物体=数百个物体)。我还没有找到一个好的解决方案。您能帮助我指出正确的方向吗? - Fabrizio Duroni
这是一个未解决的问题。我会阅读一些论文。虽然SURF不是基本物体检测的坏方法。 - devrobf

7
从数学上讲,Hessian矩阵描述了函数的二阶导数,代表曲率。想象一下你有一个三维表面f(x,y),如何找到局部极值?只需在第一导数中找到零点即可。为了证明该点是否为局部最大值或最小值,我们需要知道其前两个最大绝对值(空间中的二阶导数)。如果它们的乘积为负,则该点不能是局部极值。如果乘积为正,则该点将是局部极值,而且乘积越大,局部极值就越尖锐。
现在回到Hessian矩阵,它代表了二阶导数。Hessian最重要的是其特征值。特征值描述了3D空间中最大的二阶导数(不仅限于x和y方向)。如前所述,它们的乘积很有用。这里的诀窍在于特征值的乘积是Hessian的行列式。minHessian可以被认为是那个行列式,它是您所需的“尖锐”的极值。如果一个点的Det(Hessian)大于该值,则它可能是感兴趣的点。
与SIFT使用LoG和Hessian不同,SURF使用Det(Hessian)来选择比例和感兴趣的点。通过这种方式,SURF可以“加速”。
然而,有关该行列式的更多细节,包括Haar小波滤波器,不同方向上的权重等等...如果您对这些细节感兴趣,请参考SURF论文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接