Shi-Tomasi角点检测

前文中我们介绍了Harris角点检测,后来有人提出了它的改进版——Shi-Tomasi角点检测。
Harris角点检测中的响应 R R R计算如下: R = λ 1 λ 2 − k ( λ 1 + λ 2 ) 2 R=\lambda_1\lambda_2-k(\lambda_1+\lambda_2)^2 R=λ1λ2k(λ1+λ2)2
k取值为0.04-0.07。由于Harris角点检测算法的稳定性和k值有关,而k是个经验值,不好设定最佳值。
Shi-Tomasi发现,角点的稳定性其实和较小的特征值有关,于是直接用较小的那个特征值作为分数,这样就与k无关。
Shi-Tomasi响应公式如下: R = m i n ( λ 1 , λ 2 ) R=min(\lambda_1,\lambda_2) R=min(λ1,λ2)
如果该响应系数R大于设定的阈值,它就是一个角点。
具体的Opencv中涉及到的函数在此博客中查看。
C++实现的demo的代码如下:

void trackBar(int, void*);
int maxCorners = 0;
Mat src, dst;
int main()
{
    src = imread("bw.png");
    if (src.empty())
    {
        printf("can not load image \n");
        return -1;
    }
    imshow("input", src);
    cvtColor(src, dst, COLOR_BGR2GRAY);

    namedWindow("output");
    createTrackbar("MaxCorners:", "output", &maxCorners, 100, trackBar);
    waitKey();
    return 0;
}

void trackBar(int, void*)
{
    src = imread("bw.png");
    std::vector<Point2f> corners;
    goodFeaturesToTrack(dst, corners, maxCorners, 0.01, 10);
    for (int i = 0; i < corners.size(); i++)
    {
        circle(src, corners[i], 2, Scalar(0, 255, 255), 2);
    }
    imshow("output", src);
}

你可能感兴趣的:(图像特征,opencv,图像处理,计算机视觉)