ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV第十二讲:角点检测与亚像素精度

2019-08-30 14:37:38  阅读:556  来源: 互联网

标签:基于 检测 角点 像素 OpenCV Harris 灰度


1. Harris角点检测

角点检测被定义两条边的交点, 在实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点, 而不仅仅是角点。

角点: 如果某一点在任意方向的一个微小变动都会引起灰度很大的变化,那么将其称之为角点。

  • 角点的性质

    • 一阶导数(即灰度的梯度)的局部最大所对应的像素点;
    • 两条及两条以上边缘的交点;
    • 图像中梯度值和梯度方向的变化速率都很高的点;
    • 角点处的一阶导数最大, 二阶导数为0, 它指示了物体边缘变化不连续的方向;
  • 角点检测算法

    • 基于灰度图像的角点检测

      • 基于梯度

      • 基于模板
        主要考虑像素领域点的灰度变化,常见的基于模板的角点检测算法有:Kitchen-Rosenfeld, Harris, KLT以及SUSAN角点检测。

      • 基于模板梯度组合

    • 基于二值图像的角点检测

    • 基于轮廓曲线的角点检测

  • Harris角点检测: cornerHarris()函数

    harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性高,尤其对L型角点检测精度高。

		cvtColor(srcimage, grayImage, COLOR_BGR2GRAY);
	
		cornerHarris(grayImage, HarrImage, 2, 3, 0.01);
		// 这里显示没有结果, 一片黑暗
		//imshow("cornerHarris", HarrImage); 
		Mat harrisCorners;
		threshold(HarrImage, harrisCorners, 0.00001, 255, CV_THRESH_BINARY);
		imshow("cornerHarris2", harrisCorners);
  • 测试结果

2.Shi-Timasi角点检测

该方法是对Harris算法的改进。

原始定义: 将矩阵M的行列式与M的迹****相减, 再将差值同预先给定的阈值进行比较。

改进方法:若两个特征值中较小的一个大于最小阈值,则会得到强角点

  • OpenCV函数 goodFeatureToTrack()
		RNG g_rng(12345);
	
		Mat FeaturesTrack;
		Mat copyrgb = srcimage.clone();
		imshow("copyColor", copyrgb);
		vector<Point2f> corners;
		goodFeaturesToTrack(grayImage, corners, 150, 0.01, 10, Mat(), 3, false, 0.04);
		cout<<"corners.size() = "<<corners.size()<<endl;
	
		for(int i=0; i<corners.size(); i++)
		{
			circle(copyrgb, corners[i],4, Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)), 1, 8, 0);
		}
		imshow("Corners", copyrgb);
  • 测试结果

在这里插入图片描述

3. 亚像素级角点检测

上面介绍的都是用于特征点的识别, 那么如果是要进行几何测量,上述方法可能就不太适合,因为他们提供的是像素的整数坐标值,而有时候我们需要实数坐标值。

亚像素精度(sub-Pixel): 像素与像素之间的还有更细小的单元,这就是亚像素,通常会是原来像素的几分之一的大小。
在这里插入图片描述

  • OpenCV函数 cornerSubPix()

    cornerSubPix()函数用于寻找亚像素角点位置,不是整数型位置,而是更精确的浮点型位置。

相比于角点检测的位置,亚像素级的检测在点的结果上更加精确

标签:基于,检测,角点,像素,OpenCV,Harris,灰度
来源: https://blog.csdn.net/qq_29797957/article/details/100156213

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有