图像特征提取与描述
图像特征提取与描述
Harris和Shi-Tomas算法
Harris角点检测
原理:
检测的思想是通过图像的局部小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化。
API:cv.cornerHarris(src,blockSize,ksize,k)
img:数据类型为float32的输入图像。
blockSize:角点检测中药考虑的邻域大小。
ksize:sobel求导使用的核大小。
k:角点检测方程中的自由参数,取值参数为[0.04,0.06]。
Shi-Tomasi角点检测
原理:Shi-Tomasi算法是对Harris角点检测算法的改进。改进方法主要是当矩阵M的两个特征值中较小的一个大于阈值,则认为他是角点。
API:cv.goodFeaturesToTrack(image,maxcorners,qualityLevel,minDistance)
image:输入灰度图像。
maxCorners:获取角点数的数目。
qualityLevel:该参数指出最低可接受的角点质量水平,在0-1之间。
minDistance:角点之间最小的欧式距离,避免得到相邻特征点。
返回:
Corners:搜索到的角点,在这里所有低于质量水平的角点被排除掉,然后把合格的角点按质量排序,然后将质量较好的角点附近(小于最小欧式距离)的角点删掉,最后找出maxCorners个角点返回。
SIFT/SURF算法
Harris和Shi-Tomasi角点检测算法不具有尺度不变性。因此引入尺度不变特征转换即SIFT。
SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点以及亮区的暗点等。
Lowe将SIFT算法分解为如下四步:
-
尺度空间极值检测:
-
关键点定位:
-
关键点方向确定:
-
关键点描述:
SIFT在图像的不变特征提取方面拥有无语伦比的优势,但并不完美,仍然存在实时性不高,有时特征点较少,对边缘光滑的目标无法准确提取特征点等缺陷。
API:
-
实例化SIFT:cv.xfeatures2d.SIFT_create()
-
关键点检测:实例.detectAndCompute(gray,None)
gray:进行关键点检测的图像,注意是灰度图像。
返回:
kp:关键点信息,包括位置,尺度,方向信息。
des:关键点描述符,每个关键点对应128个梯度信息的特征向量。
-
将关键点检测结果绘制在图像上
cv.drawKeypoints(image,keypoints,outputimage,color,flags)
image:原始图像。
keypoints:关键点信息,将其绘制在图像上,也就是上一步返回的kp。
outputimage:输出图片,可以是原始图像。
color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
flags:绘图功能的标识设置。其中包括:DRAW_MATCHES_FLAGS_DEFAULT;DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG;DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS;DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS。
SURF原理
使用SIFT算法进行关键点检测和描述的执行速度比较慢。而SURF算法是SIFT的增强版,它的计算量小,运算速度快,提取的特征与SIFT几乎相同。
FAST算法
原理:去图像中检测点,以该点为圆心,周围邻域内像素点判断检测点是否为角点,通俗的讲就是若一个像素周围有一定数量的像素与该点像素值不同,则认为其为角点。
模型的缺点:
-
获得的候选点比较多。
-
特征点的选取不是最优的,因为它的效果取决于要解决的问题和角点的分布情况。
-
进行非特征点判别时大量的点被丢弃。
-
检测到的很多特征点都是相邻的。
前三个问题可以通过机器学习的方法进行解决,最后一个问题可以使用非最大值抑制的方法解决。
API:cv.FastFeatureDetector_create(threshold,nonmaxSupperssion)
threshold:阈值t,有默认值10.
nonmaxSupperssion:是否进行非极大值抑制,默认值True。
返回值:
Fast:创建的FastFeatureDetector对象。
利用创建的对象.detect(grayImg,None)
gray:进行关键点检测的图像,注意是灰度图像。
kp:关键点信息,包括位置,尺度,方向信息。
最后使用cv.drawKeypoints(image,keypoints,outimage,color,flags)进行关键点检测结果在图像上的绘制。
ORB
该算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋转不变性。
API:cv.xfeatures2d.orb_create(nfeatures)
nfeatures:特征点的最大数量。
利用实例.detectAndCompute(gray,None)进行关键点检测计算。
gray:进行关键点检测的图像,注意是灰度图像
返回值:
kp:关键点信息,包括位置、尺度、方向信息。
des:关键点描述符,每个关键点BRIEF特征向量,二进制字符串。

浙公网安备 33010602011771号