目录
一.基本原理
1.基本思想
2.数学模型
二.实现代码
三.实验结果与分析
1.场景一:纹理平坦场景
2.场景二:多水平边缘场景
3.场景三:角点丰富场景
四.实验总结
一.基本原理
1.基本思想
判断图像的角点,可以利用卷积窗口滑动的思想,让以该点为中心的窗口在附近滑动。如下图是所有描述角点文章的初始图例,当滑动窗口沿任意方向移动,灰度值都不变化则是均匀区域;如果灰度只在一个方向上变化,则可能是图像边缘。如果窗口内的像素灰度出现了较大的变化,就可能是角点。
2.数学模型
将图像窗口平移[u,v]产生灰度变化E(u,v)
二.实现代码
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris"""
Example of detecting Harris corner points (Figure 2-1 in the book).
"""# 读入图像
im = array(Image.open('shiyan/1.jpg').convert('L'))# 检测harris角点
harrisim = harris.compute_harris_response(im)# Harris响应函数
harrisim1 = 255 - harrisimfigure()
gray()#画出Harris响应图
subplot(141)
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, 4, i+2)imshow(im)print (im.shape)plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')axis('off')#原书采用的PCV中PCV harris模块
#harris.plot_harris_points(im, filtered_coords)# plot only 200 strongest
# harris.plot_harris_points(im, filtered_coords[:200])show()
三.实验结果与分析
1.场景一:纹理平坦场景
正面亮:
正面暗:
远拍:
侧拍:
旋转:
结果分析:
1.不同亮度下:两者差别比较大,在较暗的情况下,出现了大片的角点粘连。
2.远拍:无较大变化
3.侧拍:相对与正面拍角点较多,但相差不大
4.旋转:无较大变化
2.场景二:多水平边缘场景
正面亮:
正面暗:
远拍:
侧拍:
旋转:
结果分析:
1.不同亮度下:较暗的情况下,出现的角点比较多
2.远拍:出现的角点较多,但相差不是太多
3.侧拍:出现的角点较多
4.旋转:无较大变化
3.场景三:角点丰富场景
正面亮:
正面暗:
远拍:
侧拍:
旋转:
结果分析:
1.不同亮度下:亮度高的情况下检测出的角点比较多
2.远拍:较远时识别效果不是很好,检测出的角点很多
3.侧拍:侧拍与正拍检测出的角点无太大变化
4.旋转:无太大变化
四.实验总结
角点算子具有旋转不变性,所以即使在不同的场景下,正面侧面检测出的角点无太大变化。而在亮度不同的情况下,角点检测算子比较敏感,较暗较亮的情况下,检测出的角点差别就会比较大。