所需准备
库:PCV、VLfeat、Graphivz等库的安装教程
一、Harris角点检测算法
Harris角点检测算法是一个极简单的角点检测算法。该算法的主要思想是,如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点,该点便称为角点。
角点检测算法基本原理
人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,如果滑动前后窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点;如果滑动前后窗口内区域的灰度没有发生变化那么窗口内就不存在角点。
角点:局部窗口沿各方向移动,均产生明显变化的点;图像局部曲率突变的点。
→窗口向任意方向的移动都导致图像灰度的明显变化
数学表达
将图像窗口平移[u,v]产生的灰度定义为E(u,v)
我们记矩阵M的特征值为λ1,λ2
然后定义一个角点响应函数R
R=detM-k(traceM)²
detM=λ1×λ2
traceM=λ1+λ2
Harris角点的优点
- 计算简单
- 提取的点特征均匀且合理
- 稳定:Harris算子对图像旋转、亮度变化、噪声影响和视点变换不敏感
Harris 算子的局限性 - 对尺度很敏感,不具有尺度不变性
- 提取的角点精度是像素级的
- 需要设计角点匹配算法
代码实现
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
from PCV.tools.imtools import imresize
im1 = array(Image.open("9.jpg").convert("L"))
im2 = array(Image.open("12.jpg").convert("L"))
im1 = imresize(im1, (im1.shape[1]//2, im1.shape[