一、图像特征-harris角点检测
平、边界、角点
函数:
cv2.cornerHarris()
img:数据类型为float32的图像
blockSize:角点检测中指定区域大小
ksize:Sobel求导使用的窗口大小
k:取值参数为[0.06,0.04]
import cv2
import numpy as np
img = cv2.imread('car.jpg')
print('img.shape',img.shape)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=np.float32(gray)
dst=cv2.cornerHarris(gray,2,3,0.04)
print(dst.shape)
#dst相当于变化程度,变成程度大于最大值的0.1时,标红
img[dst>0.1*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、SIFT算法(尺度不变特征变换)
2.1 图像尺度空间
在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,所以要让计算机能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同尺度下都存在的特点。
(高斯模糊)不同的参数决定图像的平滑程度,越大的参数对应的图像越模糊
2.1.1多分辨率图像金字塔
2.1.2高斯差分金字塔(选出有价值的点)
2.2 极值点检测(比较每个点周围8个点,上下层18个点,共26个点。结果是离散的,需对各点进行拟合,计算极值点)
2.3 消除边界相应
2.4 特征点的主方向
2.5 生成特征描述
import cv2
import numpy as np
img = cv2.imread('car.jpg')
#print('img.shape',img.shape)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#实例化SIFT
sift=cv2.SIFT_create()
#得到关键点
kp=sift.detect(gray,None)
#绘制关键点函数:drawKeypoints
img=cv2.drawKeypoints(gray,kp,img)
cv2.imshow('drawKeypoints',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#计算特征,返回值kp:关键点,des特征
kp,des=sift.compute(gray,kp)
#查看有多少个关键点,kp是list格式,转换成array计算
print(np.array(kp).shape) #(1368,)
des.shape #(1368, 128) 128维向量