我正在开发一个使用 surf 来检测图像特征的 OpenCV 项目。检测器就是这样初始化的
int minHessian = 100;
SurfFeatureDetector detector( minHessian );
有人可以解释一下粗麻布阈值的含义(以数学和实践的方式)吗?
我正在开发一个使用 surf 来检测图像特征的 OpenCV 项目。检测器就是这样初始化的
int minHessian = 100;
SurfFeatureDetector detector( minHessian );
有人可以解释一下粗麻布阈值的含义(以数学和实践的方式)吗?
在数学上,Hessian 矩阵描述了函数的二阶导数,它代表曲率。想象一下你有一个 3-D 表面 f(x,y),你怎么能找到你的局部极值?只需在一阶导数中找到您的零点。为了证明该点是局部最大值还是最小值,我们需要知道它的前两个最大绝对值(空间中的二阶导数)。如果它们的乘积为负,则该点不可能是局部极值。如果乘积为正,则该点为局部极值,而且乘积越大,局部极值越尖锐。
让我们回到代表二阶导数的 Hessian 矩阵。Hessian 最重要的是它的特征值。特征值描述 3-D 空间中的最大二阶导数(不限于 x 和 y 方向)。如前所述,他们的产品很有用。这里的棘手之处在于特征值的乘积是 Hessian 的行列式。这里的 minHessian 可以被认为是决定因素,这就是你需要的极值有多“尖锐”。如果一个点的 Det(Hessian) 大于该值,则它可能是兴趣点。
SURF 没有像 SIFT 那样使用 LoG 和 Hessian,而是使用 Det(Hessian) 来选择尺度和兴趣点。这样,SURF 可以“加速”。
但是,还有关于该行列式的更多细节,包括 Haar 小波滤波器、不同方向的权重……如果您对这些细节感兴趣,请参阅 SURF 论文。