本篇内容主要讲解“OpenCV特征提取与检测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“OpenCV特征提取与检测”吧!
角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detection)是计算机视觉系统中获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别等,也可称为特征点检测。
角点检测算法的基本思想:
使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。
目前,角点检测算法还不是十分完善,许多算法需要依赖大量的训练集和冗余数据来防止和减少错误的特征的出现。对于角点检测算法的重要评价标准是:其对多幅图像中相同或者相似特征的检测能力,并且能够应对光照变化、或者图像旋转等影响。
关于角点的具体描述可以有几种:
一阶导数(即灰度的梯度)的局部最大所对应的像素点;
两条及两条以上边缘的交点;
图像中梯度值和梯度方向的变化速率都很高的点;
角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向
上一篇文章介绍了Harris角点检测器,这篇文章将介绍另一个角点检测器:Shi-Tomasi角点检测器。
Shi-Tomasi角点检测器是Harris角点检测器的优化,效果更好;
cv2.goodFeaturesToTrack(),通过Shi-Tomasi方法(或者Harris角点检测)在图像中找到N个最强的角点。并且在跟踪对象方面性能很好。
原图 VS Harris角点检测器效果如下:
原图 VS Shi-Tomasi角点检测效果图如下:
可以看出Shi-Tomasi确实效果要好一些,所有角点均被成功检测;
# Shi-Tomasi角点检测是Harris角点检测的优化,更准确,会检测出N个最强角点; import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('images/polygon.jpg') plt.subplot(1, 2, 1) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.xticks([]) plt.yticks([]) plt.title("origin") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) corners = cv2.goodFeaturesToTrack(gray, 25, 0.01, 10) corners = np.int0(corners) for i in corners: x, y = i.ravel() cv2.circle(img, (x, y), 3, 255, -1) plt.subplot(1,2,2) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.xticks([]) plt.yticks([]) plt.title("Shi-Tomasi res") plt.show()
到此,相信大家对“OpenCV特征提取与检测”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。