0
点赞
收藏
分享

微信扫一扫

【OpenCV--关键点检测】

谷中百合517 2022-10-31 阅读 63

一、SIFT算法

1.描述:

Harris和Shi-Tomasi角点检测具有旋转不变性,但是都不具有尺度不变性,当图象被放大后,使用同样的窗口,就会检测不到角点,此时需要尺度不变特征转换即SIFT算法,分为以下四步:

2.实现:

flags相关参数描述
cv.DRAW_MATCHES_FLAGS_DEFAULT创建输出图像,使用现存输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点
cv.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG不创建输出图像矩阵,在输出图像上绘制匹配对
cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS对每一个特征点绘制带大小和方向的关键点图形
cv.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS单点的特征点不被绘制

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift=cv.xfeatures2d.SIFT_create()
kp,des=sift.detectAndCompute(gray,None)
cv.drawKeypoints(img,kp,img,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(img[:,:,::-1])
plt.show()

 二、FAST算法

1.描述:

FAST算法是一种用于角点检测的算法,该算法原理是提取图像中检测点,以该点为圆心的周围邻域内像素点判断检测点是否为角点,即若有一个像素周围有一定数量的像素与该点像素值不同,则认为其是角点,流程如下:

2.实现:

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
fast=cv.FastFeatureDetector_create(threshold=30)
kp=fast.detect(img,None)
img2=cv.drawKeypoints(img,kp,None,color=(0,0,255))
plt.imshow(img2[:,:,::-1])
plt.show()

 三、ORB算法

1.描述:

ORB算法提出构造金字塔,为fast特征点添加了方向,使关键点具有尺度不变性和旋转不变性,改进了 Brief算法,Brief描述子不具备旋转不变性,理想的特征点描述子应该具备旋转不变性,使得图像在经过一定的旋转后仍然能够识别匹配其中的特征点,ORB算法解决了旋转一致性问题

2.实现:

3.示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
img=cv.imread('building.jpg')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
orb=cv.ORB_create(nfeatures=4000)
kp,des=orb.detectAndCompute(img,None)
img2=cv.drawKeypoints(img,kp,None,color=(0,255,0))
plt.imshow(img2[:,:,::-1])
plt.show()

举报

相关推荐

0 条评论