Shi-Tomasi算法是Harris算法的改进。
原理:
由于Harris算法的稳定性和k值有关,Shi-Tomasi发现,角点的稳定性和矩阵M的较小特征值有关,改进的Harris算法即直接计算出矩阵M的特征值,用较小的特征值与阈值比较,大于最小阈值的即为强特征点(强角点)。
确定图像强角点:goodFeaturesToTrack() 函数 结合Shi-Tomasi算子
void goodFeaturesToTrack (InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask = noArray(), int blockSize = 3, bool useHarrisDetector = false, double k = 0.04 )参数1,InputArray类型的image,输入图像,为8位或浮点型32位单通道图像。
参数2,OutputArray类型的corners,检测到的角点的输出向量。
参数3,int类型的maxCorners,角点的最大数量。
参数4,double类型的qualityLevel,角点检测可接受的最小特征值。实际用于过滤角点的最
小特征值是qualityLevel 与图像中最大特征值的乘积。所以qualityLevel通常不会超过
1(常用的值为0.10或者0.01)。而检测完所有的角点后,还要进一步剔除掉一些距离
较近的角点。
参数5,double类型的 minDistance,角点之间的最小距离,用于保证返回的角点之间的距离
不小于minDistance个像素。
参数6,InputArray类型的mask,可选参数,表示感兴趣区域,有默认值noArray()。
若此参数非空(需为CV_8UC1类型,且和第一个参数image有相同的尺寸),便用于指定
角点检测区域。
参数7,int类型的blockSize,有默认值3,是计算导数自相关矩阵时指定的邻域范围。
参数8,bool类型的useHarrisDetector,默认值 false,指是否使用Harris角点检测。
参数9,double类型的k,默认值0.04,为用于设置Hessian自相关矩阵行列式的相对权重的
权重系数。