Harris角点检测
#harris角点检测就是利用模板来找出像素值突变的部分
一般利用自相似性来表示模板移动后的差异
对于图像l(x,y),当再点(x,y)处平移(Δx,Δy)后的自相似性:
c(x,y,Δx,Δy) = ∑w(u,v)(I(u,v)-I(u+Δx,v+Δy)_2,
其中W(x,y)是以(x,y)为中心的n*n窗口,(u,v)属于W(x,y),
公式中的w(x,y)是窗口中每个像素的权重,可以是常数,也可以是高斯加权函数。
角点检测步骤:
1 得到梯度值
2 合成相对应矩阵
3 计算矩阵的特征值
4 比较两个特征值λ1 λ2
若其中一个特征值大,一个特征值小,则说明自相似性函数数值在一个方向上大,在一个方向上小,则为边界;
若两个特征值都小且近似相等,则为平面;
若两个特征值都大,且近似相等,则为角点。
5 若角点周围也检测到其他干扰,用极大值抑制
cv示例:
cv2.cornerHarris()四个参数依次为
img:数据类型为float32的入图像
blockSize:角点检测中指定区域的大小
ksize:Sobel求导中使用的窗口的大小
k:取值参数为[0.04,0.06]
import cv2 as cv
import numpy as np
img = cv.imread('.png')#使用时需要注意图片的维度,与下边的【0,0,255】维度对应
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv.cornerHarris(gray,2,3,0.04)
img[dst>0.01*dst.max()] = [0,0,255]
cv.imshow('dst',img)
cv.waitkey(0)
cv.destroyAllWindows()
平移不变性图像特征匹配算法—SIFT
图像尺度空间
在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机却很难有相同的能力。所以要考虑让机器能够对物体在同意尺度下有一个统一的认知,就需要考虑图像在不同尺度下都存在的特点。
尺度空间的获取通常通过高斯模糊来实现
不同σ的高斯函数决定了地图想的平滑程度,σ越大,图像越模糊。
多分辨率金字塔
每一层分辨率的金字塔中,都要包含n个高斯模糊图像
高斯差分金字塔(DOG)
即将相同点忽略,找出不同点。
用从一层中,即分辨率相同的不同高斯滤波函数结果相互做差,得到n-1个结果。
DOG定义公式:
D(x,y,σ)=[G(x,y,kσ)-G(x,y,σ)] * I(x,y)
=L(x,y,kσ)-L(x,y,σ)
DoG空间极值检测:为了寻找尺度空间的极值点,每个像素点要和其图像域(统一尺度空间)和尺度域(相邻的尺度空间)的所有的相邻点进行比较,当其大于或小于所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的33邻域8个像素点,以及上下两层的29个像素点进行比较。
关键点的精确定位:
一维数据可以用泰勒级数进行拟合
三维数据使用矩阵:
消除边界响应
特征点的主方向特征点可以得到三个信息(x,y,σ,θ),即位置,尺度,和方向。具有多个方向的关键点可以被复制成多分,然乎将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但方向不同的特征点。
生成特征描述