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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值