数字图像处理课程设计
end
if Image(i+1,j)-Image(i,j)>-t&&Image(i+1,j)-Image(i,j) Image(i+1,j+1)-Image(i,j)>-t&&Image(i+1,j+1)-Image(i,j) nlike=nlike+1; end if nlike>=2&&nlike<=6 Corner(i,j)=1; end end end %-----------计算角点响应函数值---corness = det(u) - k*trace(u)^2------- CRF=zeros(nrow,ncol); CRFmax=0; %----图像中角点响应函数的最大值,作阈值用 k=0.05; for i=boundary:1:nrow-boundary+1 for j=boundary:1:ncol-boundary+1 if Corner(i,j)==1 M=[A(i,j) C(i,j); C(i,j) B(i,j)]; CRF(i,j)=det(M)-k*(trace(M))^2; if CRF(i,j)>CRFmax CRFmax=CRF(i,j); end end end 9 数字图像处理课程设计 end %--------判定当前位置是否为角点------------ count=0;%----角点个数 t=0.01; for i=boundary:1:nrow-boundary+1 for j=boundary:1:ncol-boundary+1 if Corner(i,j)==1 if CRF(i,j)>t*CRFmax&&CRF(i,j)>CRF(i-1,j-1)... &&CRF(i,j)>CRF(i-1,j)&&CRF(i,j)>CRF(i-1,j+1)... &&CRF(i,j)>CRF(i,j-1)&&CRF(i,j)>CRF(i,j+1)... &&CRF(i,j)>CRF(i+1,j-1)&&CRF(i,j)>CRF(i+1,j)... &&CRF(i,j)>CRF(i+1,j+1) count=count+1; else Corner(i,j)=0; end end end end figure,imshow(Image); hold on; for i=boundary:1:nrow-boundary+1 for j=boundary:1:ncol-boundary+1 column_ave=0; row_ave=0; k=0; if Corner(i,j)==1 for x=i-3:1:i+3 10 数字图像处理课程设计 for y=j-3:1:j+3 if Corner(x,y)==1 row_ave=row_ave+x; column_ave=column_ave+y; k=k+1; end end end end if k>0 harris_result=[harris_result;round(row_ave/k) round(column_ave/k)]; plot(column_ave/k,row_ave/k,'b.'); end end end 11 数字图像处理课程设计 5.算法的应用 为了更好地验证本文中所提出算法的有效性,利用复杂模拟图像和真实图像对算法进行了检测。输入真实的楼房图像如图6.1所示: 图5.1 原始图 12 数字图像处理课程设计 提取了角点后的图如5.2所示: 图5.2 提取了角点后的图像 因为各个图形的角点离其他图形很近,且在一张图内,各个角点相距较远,所以使用较大的抑制窗口,如果两个真角点在同一个抑制窗口内就会有一个不剔除。实验结果表明本算法可以有效提取图像中好的角点,并使角点均匀的分布在图像上。 13

