OpenCV中的角点检测算法主要基于Harris角点检测器和Shi-Tomasi角点检测器。这两种方法都是通过计算图像中像素的局部变化来检测角点的位置。
Harris角点检测器:
-
局部窗口计算梯度:首先,在图像中移动一个小的窗口(通常是3x3的大小),计算每个窗口内像素的梯度。通常使用Sobel等算子来计算梯度。
-
计算角点响应函数:对于每个窗口,通过计算窗口内像素的梯度乘积的和来构建一个特征向量。然后,通过计算这个特征向量的特征值和特征向量来确定窗口内是否存在角点。Harris角点检测器通过计算如下的响应函数来确定角点的位置: 2R=λ1λ2−k(λ1+λ2)2 其中,λ1 和 λ2 是特征值,k 是一个常数,用于控制角点检测的敏感度。
-
非极大值抑制:对于计算得到的角点响应函数,使用非极大值抑制来筛选出局部最大值,以确定最终的角点位置。
Shi-Tomasi角点检测器:
Shi-Tomasi角点检测器与Harris角点检测器类似,但在计算角点响应函数时使用了特征值中的最小值(λmin)来代替Harris角点检测器中的两个特征值。其响应函数如下: R=min(λmin)
相较于Harris角点检测器,Shi-Tomasi角点检测器对噪声更加鲁棒,并且在角点数目较多时有更好的性能。
总的来说,角点检测算法通过对图像中的局部梯度进行分析来确定角点的位置,从而在图像中检测出具有显著变化的位置,通常用于特征匹配、目标跟踪等计算机视觉任务中。