题目要求如下图所示:
1 | import matplotlib.pyplot as plt |
首先输入一张图,转换成灰度形式,代码如下:
1 | image_input = Image.open('test.jpg') |
然后是梯度计算定义,如下所示:
1 | def Convolution_gradient(image,kernel): |
x,y方向上的算子,以及灰度图的在x方向和y方向上的计算如下所示:
1 | edge_x = [[-1,0,1], |
然后是构建LOG算子,并对图像做LOG处理,如下所示:
1 | edge_LOG=[[0,0,1,0,0], |
然后是构建M相关矩阵,并计算角点响应函数,如下所示:
1 | def compute_Harris(image_xx,image_yy,image_xy): |
然后进行非极大值抑制,阈值设为0.03,输出角点数为204,如下所示:
1 | T =0.03*np.max(Harris_ori) |
204
最后找到极大值所对应的坐标值,并标出在图像中的位置:
1 | Harris_location = np.where(Harris_final) |
阈值设为0.01时,输出角点数为278(这是本人的最大角点数),如下所示:
1 | T =0.01*np.max(Harris_ori) |
278
对应的图如下:
1 | Harris_location = np.where(Harris_final) |
将上述两张图和姚明德同学的Harris算子在此图上的结果进行对比(阈值0.1),他的结果如下图所示:
结论,可见与他的harris算子相比,其检测更为全面彻底,将整张图中的角点基本都标出来了,而我的harris检测算子只能检测很小的突出部分,这反映我的算法设计有严重缺陷,稳定性和敏感程度都有严重的问题,需要进行改进。