测试效果
原理简介
Harris算法是一种常用的图像特征提取方法,主要用于提取图像中的关键点(角点)。这些关键点在图像匹配、目标跟踪和三维重建等计算机视觉任务中具有重要意义。以下是Harris算法提取关键点的详细过程:
一、算法原理
Harris角点检测算法基于图像灰度的局部变化来检测关键点。其基本思想是通过计算图像中每个像素点的结构相似度矩阵(也称为自相关矩阵或M矩阵),来衡量该像素点是否是角点。
二、关键步骤
- 转化为灰度图像:
-
- 将输入的彩色图像转换为灰度图像,以便后续处理。
- 计算差分图像:
-
- 使用Sobel算子等方法计算图像在x和y方向上的梯度(Ix和Iy)。这些梯度信息反映了图像在每个像素点上的亮度变化。
- 高斯平滑:
-
- 对梯度图像进行高斯平滑处理,以消除噪声和不必要的孤立点,得到平滑后的梯度图像。
- 计算局部极值:
-
- 根据平滑后的梯度图像,计算每个像素点的结构相似度矩阵M。M矩阵由Ix2、Iy2和Ix*Iy这三个元素构成。
- 确认角点:
-
- 通过计算角点响应函数R(通常基于M矩阵的特征值)来判断像素点是否为角点。R的值取决于M矩阵的特征值,对于角点,R的值通常很大;对于平坦区域,R的值很小;对于边缘,R的值可能为负。
- 设定一个阈值,当R的值大于该阈值且在该像素点的局部邻域内为极大值时,认为该像素点为角点。
三、数学表达
角点响应函数R的一种常见形式为:
[ R = \frac{Ix^2 \cdot Iy^2 - (Ix \cdot Iy)^2}{Ix^2 + Iy^2} ]
或者,经过高斯加权后的形式可能更为复杂,但基本思想相同。
四、算法特点
- 尺度不变性:Harris角点检测算法对图像尺度的变化具有一定的鲁棒性。
- 旋转不变性:由于算法基于梯度信息,因此对图像的旋转变化不敏感。
- 抗噪声影响:通过高斯平滑处理,算法能够在一定程度上抵抗噪声的干扰。
五、应用场景
Harris算法提取的关键点广泛应用于图像匹配、目标跟踪、三维重建等领域。例如,在图像匹配中,可以利用Harris角点作为特征点进行匹配;在目标跟踪中,可以跟踪这些关键点的运动轨迹来实现目标的跟踪。
六、总结
Harris算法是一种有效的图像特征提取方法,通过计算图像中每个像素点的结构相似度矩阵并判断其是否为角点来提取关键点。这些关键点在计算机视觉任务中具有重要应用价值。
代码测试
* This program illustrates how to use the Harris point detector.
*
read_image (Image, 'fabrik')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
*
SigmaGrad := 1.0
SigmaSmooth := 2.0
Threshold :=300000
*
points_harris (Image, SigmaGrad, SigmaSmooth, 0.04, Threshold, Row, Col)
gen_cross_contour_xld (Cross, Row, Col, 6, rad(45))
*
dev_set_line_width (2)
dev_display (Image)
dev_set_color ('yellow')
dev_display (Cross)