本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.Shi-Tomasi角点检测
Shi-Tomasi角点检测和Harris角点检测的原理基本一模一样,唯一的不同在于响应函数R的计算,Shi-Tomasi角点检测的作者发现角点的稳定性其实和矩阵M的较小特征值有关,于是直接用较小的那个特征值就可以,这样就不用调整k值了:
\[R=\min (\lambda_1, \lambda_2)\]2.cv::goodFeaturesToTrack
1
2
3
4
5
6
7
8
9
10
11
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
);
参数详解:
InputArray image
:输入图像,为8bit或32bit floating-point的单通道图像。OutputArray corners
:输出vector,保存检测到的角点。int maxCorners
:最多返回maxCorners个角点。如果检测到的角点数量大于maxCorners,则挑选前maxCorners个最优(strongest,个人理解就是按R值排序)的角点返回。如果maxCorners小于等于0,则没有返回数量限制,所有被检测到的角点都会被返回。double qualityLevel
:比如最优(即R值最大)的角点的R值为1500,如果qualityLevel=0.01,则R值小于$1500 \times 0.01=15$的角点都会被抛弃。double minDistance
:返回的任意两个角点之间最小的欧式距离。InputArray mask
:类型为CV_8UC1
,大小和输入图像一样。mask用于限制只检测感兴趣的区域。int blockSize
:和cv::cornerHarris
中的blockSize一样的含义。bool useHarrisDetector
:true则使用Harris角点检测,false则使用Shi-Tomasi角点检测。double k
:和cv::cornerHarris
中的k一样的含义。