一、图像特征
1、Harris角点检测
数学原理如下
其中,w(u,v)是权重。为了化简,先泰勒展开
近似化简
把矩阵对角化成为只有特征值x1,x2。当x1、x2都比较大时,则椭圆也比较大。
R=x1x2-a*(x1+x2)
当R>0时,为角点,R≈0时,为平坦区;R<0时,为边界点。
算法实现
img=cv2.imread('chessboard.jpg') print('imgage.shape',img.shape) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray=np.float32(gray)#输入图像必须是 float32 ,最后一个参数在 0.04 到 0.05 之间dst=cv2.cornerHarris(gray,2,3,0.04) print('dst,shape',dst.shape) img[dst>0.01*dst.max()]=[0,0,255] cv2.imshow('dst',img) cv2.waitKey(0) cv2.destroyAllWindows()
二、图像特征sift(scale inVariant Feature transform)
1、图像尺度空间
关键点精确定位
运用泰勒展开对离散的店进行拟合,最后得到下面点的精确定位的公式。一般书上都是写下面的公式。
用高斯滤波可能会增加一些边界,所以要消除边界响应。
生成特征描述。一般有个很多个方向,只需要统计8个方向,每个方向45°。
然后进行旋转操作即预处理操作
sift算法实现
由于OpenCV3.5之后这个函数有专利保护,所以以后的OpenCV版本都不能用这个函数了。要用的话建议安装opencv3.4.15