目录
一、SIFT变换
1.1理论
1、生成高斯金字塔
2、生成DOG金字塔(尺度变化的连续性),若s=3,求DOG金字塔中kσ,k^2σ,k^3σ的极值点及角点(求解角点代码及效果:https://blog.csdn.net/abcjennifer/article/details/7639488)
3、删除低对比度、不稳定的边缘响应极值点
4、求特征点(余留的极值点)的主方向,为了实现图像旋转不变性。方法是:利用特征点邻域像素的梯度分布特性来确定其方向参数,再利用图像的梯度直方图求取关键点局部结构的稳定方向,最后每个特征点可能得到多个方向。将每个特征点以(x,y,σ,θ)表示,同时确定位置信息,尺度信息和方向信息。
5、生成特征描述
- 校正旋转主方向,确保旋转不变性。
- 生成描述子,最终形成一个128维的特征向量。方法:以特征点为中心点,去16*16区域,总共有16个种子点(有4个8*8的区域。每个8*8区域生成4个种子点,每个种子点可以有8个方向的梯度强度信息)
- 归一化处理,将特征向量长度进行归一化处理,进一步去除光照的影响。
讲解:
http://www.cnblogs.com/wangguchangqing/p/4853263.html
https://blog.csdn.net/abcjennifer/article/details/7639681
代码:
https://blog.csdn.net/abcjennifer/article/details/7639681
1.2Python程序演示
import cv2
import numpy as np
from PIL import Image
#import pdb
#pdb.set_trace()#turn on the pdb prompt
#read image
img = cv2.imread('E:\\pyworkspace\\test.jpg',cv2.IMREAD_COLOR)
#if img.empty():
# print("noimage")
cv2.imshow('origin',img);
cv2.waitKey(0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#SIFT
detector = cv2.xfeatures2d.SIFT_create()
keypoints = detector.detect(gray,None) #得到特征点
img2 = cv2.drawKeypoints(image=img, outImage=img, keypoints = keypoints,
flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, color = (51, 163, 236))
#img = cv2.drawKeypoints(gray,keypoints,flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('test',img);
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
配置包注意:
1、下载
2、下载
来自:
若代码为:
import cv2
import numpy as np
from PIL import Image
#import pdb
#pdb.set_trace()#turn on the pdb prompt
#read image
img = cv2.imread('E:\\pyworkspace\\test.jpg',cv2.IMREAD_COLOR)
#if img.empty():
# print("noimage")
cv2.imshow('origin',img);
cv2.waitKey(0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#SIFT
detector = cv2.xfeatures2d.SIFT_create()
keypoints = detector.detect(gray,None) #得到特征点
img2 = cv2.drawKeypoints(gray,keypoints,img)
#img = cv2.drawKeypoints(gray,keypoints,flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('test',img);
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果为:
来自:https://blog.csdn.net/fb_941219/article/details/83502966
二、DOG角点检测
来自:
https://blog.csdn.net/abcjennifer/article/details/7639488
三、各种图像特征处理算法
OpenCV中常用的特征检测和提取算法有如下六种:
(1)Harris:用于检测角点;
(2)SIFT:用于检测斑点;
(3)SURF:用于检测斑点;
(4)FAST:用于检测角点;
(5)BRIEF:用于检测斑点;
(6)ORB:表示带方向的FAST算法与具有旋转不变性的BRIEF算法;
详细讲解来自:http://www.yyearth.com/index.php?aid=233
https://www.jianshu.com/p/7504e66e2adf
四、图像旋转角度利用sift特征进行匹配
https://www.cnblogs.com/zyly/p/9646201.html