1、SIFT
SIFT所查找的关键点都是一些十分突出,不会因光照,仿射变换和噪声等因素而变换的特征点,如角点、边缘点、暗区的亮点以及亮区的暗点等。
2、 SIFT的特性
独特性(Distinctiveness)信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
可扩展性,可以很方便的与其他形式的特征向量进行联合。
3、SIFT的应用
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pretreatment import Carry
# 导入资源
image = cv.imread(r"E:/data/1.jpg")
img1 = cv.resize(image, (400, 250))
#cv2.selectROI() 可以通过鼠标选择感兴趣的矩形区域(ROI)
roi = cv.selectROI(img1, showCrosshair=True, fromCenter=False)
# 矩形裁剪区域 (ymin:ymin+h, xmin:xmin+w) 的位置参数
xmin, ymin, w, h = roi
# 切片获得裁剪后保留的图像区域
imgROI = img1[ymin:ymin + h, xmin:xmin + w].copy()
image_copy = np.copy(imgROI)
image_copy = cv.cvtColor(image_copy, cv.COLOR_BGR2RGB)
gray = cv.cvtColor(image_copy, cv.COLOR_RGB2GRAY)
carry = Carry(gray)
# SIFT角点检测
sift = cv.xfeatures2d.SIFT_create()
# 找到关键点和描述符
keypoints, des = sift.detectAndCompute(carry, None)
# 把特征点标记到图片上
corner_image = np.copy(gray)
for point in keypoints:
cv.circle(corner_image, (int(point.pt[0]), int(point.pt[1])), 1, (0,0,255), 1)
plt.subplot(131),plt.imshow(imgROI,'autumn'),plt.title('imgROI')
plt.subplot(132),plt.imshow(carry,'autumn'),plt.title('cary')
plt.subplot(133),plt.imshow(corner_image,'autumn'),plt.title('corner_image')
plt.show()