文档库 最新最全的文档下载
当前位置:文档库 › 图像边缘检测Matlab程序-使用线检测模板

图像边缘检测Matlab程序-使用线检测模板

图像边缘检测Matlab程序-使用线检测模板
图像边缘检测Matlab程序-使用线检测模板

检测图像中的边缘

利用方向梯度模板的基本思想,可以设计检测不同方向线的方向模板。对于单像素宽度线,可通过阈值检测其梯度来完成线的检测,并确定其走向。线检测模板如下所示:

计算

),(),(),(*j i j i k j i k Z W R =, k =1,2,3,4. 其中),(j i Z 是原图像中以(i,j)为中心的一个3×3小矩阵,“*”是对应元素相乘并相加。如果原图像中(i,j)像素不为0,且),(),(j i l j i k R R >, 对所有的l k ≠, 则可以说该点的方向与k W 方向一致。

%Matlab 程序-检测图像中的边缘

%使用线检测模板

clc

clear

A=imread('22.png'); %读入彩色图像,图像存放在Matlab 工作路径下

B=rgb2gray(A); %将彩色图像转为灰度图像

C=im2bw(B); %将灰度图像转为2值图像

subplot(1,2,1); %子图

imshow(C); %绘图

[m,n]=size(C);

W=zeros(3,3,4);

W(:,:,1)=[-1 -1 -1; 2 2 2; -1 -1 -1]; %竖直方向模板

W(:,:,2)=[-1 -1 2; -1 2 -1; 2 -1 -1]; %45度方向模板

W(:,:,3)=[-1 2 -1; -1 2 -1; -1 2 -1]; %水平方向模板

W(:,:,4)=[2 -1 -1; -1 2 -1; -1 -1 2]; %-45度方向模板

D=zeros(m,n); %产生全0矩阵D ,保存检测结果;如果D(i,j)为0,则该点不是边缘;为1则是竖直方向边缘;为2则是45度方向边缘;为3则是水平方向边缘;为4则是-45度方向边缘 R=zeros(4,1);

M=zeros(3,3);

for i=2:m-1

for j=2:n-1

if(C(i,j))

M(:,:)=C(i-1:i+1, j-1:j+1); %取出以i,j 为中心,大小为3*3的子矩阵 for k=1:4

R(k)=sum(sum(W(:,:,k).*M)); %与方向模板做卷积运算 end

[R,Ri]=sort(R); %排序

if(R(end)>R(end-1)) %如果最大值比次大值还大,则认为该点的方向是最大值所对应的模板方向

D(i,j)=Ri(end);

end

end

end

end

%%由检测结果D构建边缘图像E

E=zeros(m,n);

for i=2:m-1

for j=2:n-1

if(D(i,j)>0)

E(i-1:i+1, j-1:j+1) = W(:,:,D(i,j))+1;

end

end

end

subplot(1,2,2);

imshow(logical(E));%绘边缘图像

结果示例:

相关文档