目录
1.基本思想
为了判断图像的角点,可以利用卷积窗口滑动的思想,让以该点为中心的窗口在附近滑动。如下图是所有描述角点文章的初始图例,它表征的正是这一特性:当滑动窗口在所有方向移动时,窗口内的像素灰度出现了较大的变化,就可能是角点。
2.不同类型的角点
3.数学表达
4.优化推导
5.代码实现
# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
from numpy import *
"""
Example of detecting Harris corner points (Figure 2-1 in the book).
"""
# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"C:\windows\fonts\SimSun.ttc", size=14)
# 读入图像
im = array(Image.open('D:\JMU\computer_vision\experience2\scene1.jpg').convert('L'))
# 检测harris角点
harrisim = harris.compute_harris_response(im)
# Harris响应函数
harrisim1 = 255 - harrisim
gray()
#画出Harris响应图
subplot(221)
title(u'Harris响应图',fontproperties=font)
imshow(harrisim1)
print harrisim1.shape
print harrisim
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(2, 2, 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()
6.第一组场景结果截图与分析
注:以下图使用的均为 Harris 角点检测器检测角点:每个图的第一幅为 Harris 响应函数;二、三、四分别为使用阈值0.01、0.05 和 0.1 检测出的角点
(1)第一组场景第一幅图
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/ff57895799688c4753205f4a610e8c1d.png)
(2)第一组场景第二幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/23515b527c797bc16a053572693462f1.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/b5a9b44d485ed23bda801811fc364c44.png)
(3)第一组场景第三幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/f7e2ba08ef0fa95889f7f268351b61f7.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/c70673245eb89fddf4e54699bf866a0f.png)
(4)第一组场景第四幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/2fe7915078e782653f9da99feaeb7e3d.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/fb351e41bd4dff980c7dd67dcaf8a28b.png)
(5)第一组场景第五幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/0bb39ae39910d21c99f87256bacc0ddf.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/338ac81bac36403b6603f07bb2fadcb6.png)
(6)第一组场景结果分析
根据以上实验结果可知,其他条件不变的情况下,当使用的阈值越大,检测出来的角点越少。由上图也可知,垂直或水平边缘多的图片它所拥有的角点也比较多,比较密集。
7.第二组场景结果截图与分析
注:以下图使用的均为 Harris 角点检测器检测角点:每个图的第一幅为 Harris 响应函数;二、三、四分别为使用阈值0.01、0.05 和 0.1 检测出的角点
(1)第二组场景第一幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/1ccab4df41c8ae10fded1768cba857e9.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/3eaf61e54a2f12e8e977b81339790332.png)
(2)第二组场景第二幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/502f746bbcc256ee7b36214f296226be.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/1b77ef70178f2f7269d2017a2aa1ec3a.png)
(3)第二组场景第三幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/972709ab10f866af0195e32e2b516be2.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/b861f66e5193d9897a3228efca6d7281.png)
(4)第二组场景第四幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/f28f0fdffbeb5fee138f21dd5818510a.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/8d6180ffff133d668d8371de8a6fd324.png)
(5)第二组场景第五幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/3517892af57731e60b26965521c0eb34.png)
该图片的最佳
Harris
点为
![](https://i-blog.csdnimg.cn/blog_migrate/a7f704036c20a0a0ee43c6aecbd3a0b8.png)
(6)第二组场景结果分析
由上图可知,当图片处于远处拍摄时,角点相对较多;当处于近处拍摄时,角点相对较少。近处拍摄到的东西较少,远处的较多,因此远处更易于检测出角点,且距离的远近对检测角点有影响。
8.第三组场景结果截图与分析
注:以下图使用的均为 Harris 角点检测器检测角点:每个图的第一幅为 Harris 响应函数;二、三、四分别为使用阈值0.01、0.05 和 0.1 检测出的角点
(1)第三组场景第一幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/017aa0e546e6790b4788b6b078c00eb8.png)
该图片的最佳 Harris 点为
![](https://i-blog.csdnimg.cn/blog_migrate/5ee6684cbe914d25db80f7b96b27b4bb.png)
(2)第三组场景第二幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/9fc2e0a2cf63145f11bcb71e7c013c19.png)
该图片的最佳 Harris 点为
![](https://i-blog.csdnimg.cn/blog_migrate/acf0bfeb72ffa282642be44f5a00e17d.png)
(3)第三组场景第三幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/7e4ea4339d156a0f25b9e770c1b227d7.png)
该图片的最佳 Harris 点为
![](https://i-blog.csdnimg.cn/blog_migrate/647877765fc547f6c86c541a70396bc6.png)
(4)第三组场景第四幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/021fdbb44e3253596fe652fa32f8f630.png)
该图片的最佳 Harris 点为
![](https://i-blog.csdnimg.cn/blog_migrate/a0f0ab27ea90b8770e46fdcf8411a789.png)
(5)第三组场景第五幅图:
![](https://i-blog.csdnimg.cn/blog_migrate/c9eb04fc18be9056dce5a51eff2cfeb6.png)
该图片的最佳 Harris 点为
![](https://i-blog.csdnimg.cn/blog_migrate/73e6b922e68556783bd98d342b5d9c8b.png)
(6)第三组场景结果分析
由上图可知,当图片处于不同的亮度情况下拍出来的照片,所检测出来的角点也相对不同。当处于自然光照亮的情况下,亮度越大,角点也越多。
10.在图像间寻找对应点
(1)Harris角点检测器可以给出图像中检测到兴趣点,但它并没有提供在图像间对兴趣点进行比较的方法,我们需要在每个角点添加描述子,以及对这些描述子进行比较。
(2)代码
# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
from PCV.tools.imtools import imresize
"""
This is the Harris point matching example in Figure 2-2.
"""
# Figure 2-2上面的图
#im1 = array(Image.open("../data/crans_1_small.jpg").convert("L"))
#im2= array(Image.open("../data/crans_2_small.jpg").convert("L"))
# Figure 2-2下面的图
im1 = array(Image.open("D:\JMU\computer_vision\experience2\scene2.jpg").convert("L"))
im2 = array(Image.open("D:\JMU\computer_vision\experience2\scene3.jpg").convert("L"))
# resize加快匹配速度
im1 = imresize(im1, (im1.shape[1]/2, im1.shape[0]/2))
im2 = imresize(im2, (im2.shape[1]/2, im2.shape[0]/2))
wid = 5
harrisim = harris.compute_harris_response(im1, 5)
filtered_coords1 = harris.get_harris_points(harrisim, wid+1)
d1 = harris.get_descriptors(im1, filtered_coords1, wid)
harrisim = harris.compute_harris_response(im2, 5)
filtered_coords2 = harris.get_harris_points(harrisim, wid+1)
d2 = harris.get_descriptors(im2, filtered_coords2, wid)
print 'starting matching'
matches = harris.match_twosided(d1, d2)
figure()
gray()
harris.plot_matches(im1, im2, filtered_coords1, filtered_coords2, matches)
show()
(3)结果截图
![]() |
![]() |
![]() |
![]() |
![]() |
结果分析:
由上图可知,该算法的结果存在一些不正确匹配。上图反映出角点检测不具有尺度不变性和旋转不变性,而算法中像素块的大小也会影响对应匹配的结果。
11.实验总结
通过本次实验,使我对Harris角点的检测有了更深一步的了解,对于图片的处理也有了更深一步的了解。当然,在实验时也发现了自己的不足之处,对代码的了解并不是很深,因此花了很多的时间来研究代码。