目录
Harris角点检测
一、算法介绍
1.1角点定义
角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:
a. 角点可以是两个边缘的角点;
b. 角点是邻域内具有两个主方向的特征点;
1.2角点检测算法
角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。Harris角点检测是特征点检测的基础,提出了应用邻近像素点灰度差值概念,从而进行判断是否为角点、边缘、平滑区域。Harris角点检测原理是利用移动的窗口在图像中计算灰度变化值,其中关键流程包括转化为灰度图像、计算差分图像、高斯平滑、计算局部极值、确认角点。
R 只与M的特征值有关
角点:R 为大数值正数
边缘:R为大数值负数
平坦区:R为小数值
二、实验介绍
选择纹理平坦、垂直或水平边缘多(如建筑物)、纹理角点丰富的三种场景,每种场景有正面、侧面、旋转、光照变化。通过多组实验观察Harris角点检测算法的能力以及变化,检验不同的图像环境是否会对算法检测产生干扰和影响,既而进行比较。
2.1实验代码
# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
# 读入图像
im = array(Image.open('G:/QQdata/MobileFile/Image/IMG_20200225_143852.jpg').convert('L'))
# 检测harris角点
harrisim = harris.compute_harris_response(im)
# Harris响应函数
harrisim1 = 255 - harrisim
figure()
gray()
#画出Harris响应图
subplot(121)
suptitle("Harris corners")
imshow(harrisim1)
print (harrisim1.shape)
axis('off')
axis('equal')
threshold = [0.01, 0.05, 0.1]
for i, thres in enumerate(threshold):
filtered_coords = harris.get_harris_points(harrisim, 6, thres)
subplot(1, 2, 2)
imshow(im)
print (im.shape)
plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '+c')
axis('off')
show()
2.2实验过程
2.2.1 第一组纹理平坦
侧面图像:
正面图像:
角度变换:
小结:可以看到对于这样图像线条较为简单,较为平坦的图像,harris角点检测算法有着很强的检测能力。对于很多特征比较丰富的特征点无论是旋转还是亮度调整都可以很好的识别检测。
2.2.2 第二组垂直或水平边缘多
正面房屋:
图像加亮:
图像变暗:
小结:通过调整拍摄房屋,以及改变曝光度来影响亮度的措施,可以很明显的看到相对于正常照片来说降曝光也就是图片更暗对于harris角点检测有着更良好的检测能力,特征点更加明显,而对于加曝光的较亮图像则效果更差。
2.2.3 第三组纹理角点丰富
正面图像:
侧面图像:
角度调整:
小结:对于这种纹理较丰富,线条较多的图像,harris角点检测算法也有着较好的检测能力,无论是对拍摄图像进行角度变换和远近变换都比较难改变检测,但是相对来说,侧面的展示特征会比正面的较少,也就会在一定程度上影响的特征点的比对。
三、实验总结
1.对于正面图像和侧面图像的比较可以看出,正面图像的细节特征点较为丰富,也因此检测标注会更加复杂,而侧面图像则会隐藏掉很多细节特征,标注点也就更简单。
2.对于正面图像和旋转图像的比较可以看出,两者并没有太多不同,是因为图像只是经过旋转的话并不会改变特征点,只是特征点的水平位置发生改变。Harris角点检测算子使用的是角点附近的区域灰度二阶矩矩阵。而二阶矩矩阵可以表示成一个椭圆,椭圆的长短轴正是二阶矩矩阵特征值平方根的倒数。当特征椭圆转动时,特征值并不发生变化,所以判断角点响应值R也不发生变化。
3.对于正面图像和亮度变化图像的比较可以看出,亮度变化对于角点检测还是具有影响,如果是图像亮度较大,则会让图像里的特征点不明显,从而导致检测失败,图像亮度过小也是同理,只有亮度合适才能让图像细节更丰富。