特征检测 特征提取 特征匹配
关键点检测+描述符
SIFT: DoG + SIFT
SURF: Hessian + SURF
ORB: FAST + BRIEF
关键点keypoints的属性:
1.pt: 点xy坐标
2.size: 特征直径
3.angle: 特征方向
4.response: 特征强度 评估特征好坏
5.octave: 特征所在金字塔层级
6.class_id: 关键点ID
关键点检测+描述符
SIFT: DoG + SIFT
SURF: Hessian + SURF
ORB: FAST + BRIEF
暴力匹配
FLANN匹配法
一、SIFT
Different of Gaussian(DoG) 对同一图像使用不同高斯滤波器
DoG得到感兴趣区域(关键点),通过SIFT进行说明
import cv2
import sys
import numpy as np
imgpath = sys.argv[1]
img = cv2.imread(imgpath)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()#
keypoints, descriptor = sift.detectAndCompute(gray,None)#返回关键点和描述符
img = cv2.drawKeypoints(image=img, outImg=img, keypoints=keypoints,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINT,
color=(51,163,236))#
#cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINT每个关键点绘制圆和方向
cv2.imshow('sift_keypoints',img)
while True:
if cv2.waitKey(1000/12) & 0xff == ord("c"):
break
cv2.destoryAllWindow()
关键点keypoints的属性:
1.pt: 点xy坐标
2.size: 特征直径
3.angle: 特征方向
4.response: 特征强度 评估特征好坏
5.octave: 特征所在金字塔层级
6.class_id: 关键点ID
二、SURF
surf = cv2.xfeatures2d.SURF_create(8000)#阈值越小特征点越多
keypoints, descriptor = surf.detectAndCompute(gray,None)#返回关键点和描述符
img = cv2.drawKeypoints(image=img, outImg=img, keypoints=keypoints,
flags=4,
color=(51,163,236))#
三、ORB特征检测与特征匹配
import numpy as np
import cv2
from matplotlib import pyplot as plt
cv2.ocl.setUseOpenCL(False)
# query and test image