目录
一、Harris 角点检测算法简介
1.角点:①局部窗口沿各方向移动,均产生明显变化的点 ②图像局部曲率突变的点
2.Harris 角点检测算法(Harris & Stephens 角点检测器)是一个极为简单的角点检测算法。该算法是利用移动的窗口在图像中计算灰度变化值,应用邻近像素点灰度差值概念,从而进行判断是否为角点、边缘、平滑区域。
3.角点检测基本思想:
边缘:沿着边缘方向移动,无灰度变化
角点:沿任意方向移动,明显灰度变化
平坦:任意方向移动,无灰度变化
二、涉及函数
1.compute_harris_response
该函数在 harris.py 文件中,该函数在一幅灰度图像中,对每个像素计算Harris角点检测器响应函数。因在角点检测中需要抑制噪声,使用了 scipy.ndimage.filters 模块中的高斯导数滤波器来计算导数。
from pylab import *
from numpy import *
# 使用 scipy.ndimage.filters 模块中的高斯导数滤波器来计算导数
from scipy.ndimage import filters
该函数有两个参数(im, sigma),im为传入图像,sigma则定义了高斯滤波器的尺度大小,该函数返回像素值为Harris响应函数的一幅图像 。
对图像中的每一个像素,计算Harris矩阵时,Harris矩阵的特征值有三种情况:
- 都是很大的正数,则该点是角点
- 一个很大,一个约等于0,则该区域存在一个边
- 都约等于0,该区域为空
def compute_harris_response(im,sigma=3):
# 在一幅灰度图像中,对每个像素计算Harris角点检测器响应函数
# 计算导数
imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (0,1), imx)
imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (1,0), imy)
# 计算harris矩阵分量
Wxx = filters.gaussian_filter(imx*imx,sigma)
Wxy = filters.gaussian_filter(imx*imy,sigma)
Wyy = filters.gaussian_filter(imy*imy,sigma)
# 计算矩阵的特征值和迹
Wdet = Wxx*Wyy - Wxy**2
Wtr = Wxx + Wyy
# 返回像素值为 Harris 响应函数值的一幅图像
return Wdet / Wtr
2.get_harris_points
该函数同样是在 harris.py 文件中,上面的compute_harris_response函数返回了像素值为 Harris 响应函数值的一幅图像,我们需要从这幅图像中挑选出需要的信息&#x