目录
一:Harris角点检测器
1.1角点的解释
角点是一阶导数(即灰度的梯度)的局部最大所对应的像素点;也是两条及两条以上边缘的交点。角点指示了物体边缘变化不连续的方向,角点处的一阶导数最大,二阶导数为0。角点是指图像中梯度值和梯度方向的变化速率都很高的点。下图为不同类型的角点:
1.2Harris角点检测基本思想
角点定义 <- 窗口向任意方向的移动都导致图像灰度的明 显变化
从图像局部的小窗口观察图像特征:
1.3harris检测:数学表达
将图像窗口平移[u,v]产生灰度变化E(u,v)
有泰勒公式展开可得:(Ix,Iy 分别为偏导数,在图像中为图像的方向导数)
I(x+u,y+v)=I(x,y)+Ix∗u+Iy∗v+O(u^2,v^2)
E(u,v)=sum[w(x,y)[Ix∗u+Iy∗v+O(u^2,v^2)]^2]
可以近似得到:E(u,v)=sum[w(x,y)[Ix∗u+Iy∗v]^2]
即
令
因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2
当x1>>x2或者x2>>x1,则检测到的是边缘部分
当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化.
当X1,X2都很大时且相当,检测到的是角点
1.4代码部分
from PIL import Image
from numpy import *
from pylab import *
from scipy.ndimage import filters
def compute_harris_response(im, sigma=3):
#计算x方向的导数
imx = zeros(im.shape) #zeros()生成全零数组
filters.gaussian_filter(im, (sigma,sigma),(0,1),imx)
#计算x方向的导数
imy = zeros(im.shape) #zeros()生成全零数组
filters.gaussian_filter(im, (sigma,sigma),(0,1),imy)
#计算harris矩阵的分量
Wxx