角点(兴趣点):在一幅图像中的某一个像素周围存在多于一个方向的边。角点可以提供唯一匹配。
角点检测器通常不会很鲁棒,所以接下来会引入另外一种算法用于改进Harris算法。
harris 算法流程:
选取角点—>筛选角点–>绘出角点–>将两幅图像拼接,用线条将两幅图像中相同的物体或者场景连接起来
①如何判断像素周围是否存在多于一个方向的边(即如何找出角点)
A.求出每个像素的半正定矩阵
C.求出局部平均像素的特征值,从而确定是否角点存在
①若两个特征值都是很大的正数,则该点为角点
②若其中一个特征值很大,另外一个特征值很小约等于0,则说明只检测到一个方向,该点不是角点
③若两个特征值都约等于0,则说明该区域为0,没有检测到方向,不是角点。
D.为了避免特征值的计算,引入响应函数,最后得出角点(如果数值存在的话,即为角点)
优化处理:在每个角点上加入描述子信息,从而匹配图像与图像之间的角点。
描述子:分给角点的一个变量(附加在角点上),可以用来描述附近的图像表现信息,从而找到对应点,而对应点则可以描述相同的物体或者场景在不同的图像上形成的像素
因此,描述子可以将图像与图像联系起来。
周围像素块对应的灰度值
描述子的组成:
用于比较的归一化互相关矩阵
归一化的互相关矩阵对图像亮度变化具有稳健性。
from PIL import Image
from scipy.ndimage import filters
from numpy import *
from pylab import *
import numpy
def computer_harris_response(im, sigma=3):
""" 在一幅灰度图像中,对每个像素计算Harris角点检测器响应函数 """
# 计算x和y方向上的方向导数
imx = zeros(im.shape)
filters.gaussian_filter(im,