4 图像特征提取与描述
图像特征提取与描述
一 Harris 和 Shi-Tomas算法
1 Harris角点检测
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 1 读取图像,并转换成灰度图像 img = cv.imread('./image/chessboard.jpg') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 2 角点检测 # 2.1 输入图像必须是 float32 gray = np.float32(gray) # 2.2 最后一个参数在 0.04 到 0.05 之间 dst = cv.cornerHarris(gray,2,3,0.04) # 3 设置阈值,将角点绘制出来,阈值根据图像进行选择 img[dst>0.001*dst.max()] = [0,0,255] # 4 图像显示 plt.figure(figsize=(10,8),dpi=100) plt.imshow(img[:,:,::-1]),plt.title('Harris角点检测') plt.xticks([]), plt.yticks([]) plt.show()

2 Shi-Tomasi角点检测
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 读取图像 img = cv.imread('./image/tv.jpg') gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) # 2 角点检测 corners = cv.goodFeaturesToTrack(gray,1000,0.01,10) # 3 绘制角点 for i in corners: x,y = i.ravel() cv.circle(img,(x,y),2,(0,0,255),-1) # 4 图像展示 plt.figure(figsize=(10,8),dpi=100) plt.imshow(img[:,:,::-1]),plt.title('shi-tomasi角点检测') plt.xticks([]), plt.yticks([]) plt.show()
总结:
-
Harris算法
思想:通过图像的局部的小窗口观察图像,角点的特征是窗口沿任意方向移动都会导致图像灰度的明显变化。
API: cv.cornerHarris()
-
Shi-Tomasi算法
对Harris算法的改进,能够更好地检测角点
API: cv2.goodFeatureToTrack()
二 SIFT/SURF算法
SIFT算法在中央电视台的图片上检测关键点
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 1 读取图像 img = cv.imread('./image/tv.jpg') gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY) # 2 sift关键点检测 # 2.1 实例化sift对象 sift = cv.xfeatures2d.SIFT_create() # 2.2 关键点检测:kp关键点信息包括方向,尺度,位置信息,des是关键点的描述符 kp,des=sift.detectAndCompute(gray,None) # 2.3 在图像上绘制关键点的检测结果 cv.drawKeypoints(img,kp,img,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) # 3 图像显示 plt.figure(figsize=(8,6),dpi=100) plt.imshow(img[:,:,::-1]),plt.title('sift检测') plt.xticks([]), plt.yticks([]) plt.show()

作者:华王
博客:https://www.cnblogs.com/huahuawang/
浙公网安备 33010602011771号