特征点提取及特征匹配学习笔记

特征点提取及特征匹配学习笔记

自选一张图片,利用sift和ORB,FAST以及其他特征提取方法(至少三种,越多越好),分别提取特征点。并对各种方法的原理做简要概述,对结果进行分析。

FAST提取大量的特征点,在计算时间上,比SIFT快,ORB在FAST基础上得来的,特征点的质量更高。

sift原理:

SIFT算子是把图像中检测到的特征点用一个128维的特征向量进行描述,因此一幅图像经过SIFT算法后表示为一个128维的特征向量集,该特征向量集具有对图像缩放,平移,旋转不变的特征,对于光照、仿射和投影变换也有一定的不变性

sift代码:

 import cv2 as cv
 img = cv.imread('image/letter.png')
 sift_img = img.copy()
 gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
 sift = cv.xfeatures2d.SIFT_create()
 kp = sift.detect(gray,None)
 sift_img=cv.drawKeypoints(gray,kp,sift_img)
 cv.imshow("raw", img)
 cv.imshow("sift", sift_img)
 cv.waitKey()

sift结果:

特征点提取及特征匹配学习笔记_第1张图片

orb原理:

ORB采用FAST算法来检测特征点。FAST核心思想就是找出那些卓尔不群的点,即拿一个点跟它周围的点比较,如果它和其中大部分的点都不一样就可以认为它是一个特征点。

orb代码:

 import cv2
 img = cv2.imread('image/letter.png')
 \# 实例化
 orb = cv2.ORB_create()
 \# 查询特征点
 kp = orb.detect(img, None)
 \# 使用计算描述符
 kp, des = orb.compute(img, kp)
 \# 画关键点的位置
 img2 = cv2.drawKeypoints(img, kp, None, color=(0, 255, 0), flags=0)
 cv2.imshow("raw",img)
 cv2.imshow("orb",img2)
 cv2.waitKey()

orb结果:

特征点提取及特征匹配学习笔记_第2张图片

fast原理:

Fast特征点检测feature2D原理是在圆周上按顺时针方向从1到16的顺序对圆周像素点进行编号。如果在圆周上有N个连续的像素的亮度都比圆心像素的亮度Ip加上阈值t还要亮,或者比圆心像素的亮度减去阈值还要暗,则圆心像素被称为角点。

fast代码:

 import cv2 as cv
 img = cv.imread('image/letter.png',0)
 \# 实例化
 fast = cv.FastFeatureDetector_create()
 \# 找出并画出特征点
 kp = fast.detect(img,None)
 img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
 \# 禁用 nonmaxSuppression
 fast.setNonmaxSuppression(0)
 kp = fast.detect(img,None)
 img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
 cv.imshow('raw',img)
 cv.imshow('true',img2)
 cv.imshow('false',img3)
 cv.waitKey()

fast结果:特征点提取及特征匹配学习笔记_第3张图片

你可能感兴趣的:(opencv,python)