您的位置:首页 > 其它

形态学操作实现

2016-06-23 22:34 197 查看
数学形态学的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。数学形态学的基本运算有四个:腐蚀、膨胀、开和闭。基于这些基本运算还可以推导和组合成各种数学形态学实用算法。本实验分别实现针对二值图像和灰度图像的四种形态学操作。

一、二值图像的腐蚀、膨胀、开、闭操作

function O=myimdilate(I,se,type)
%%膨胀操作
%I:输入图像(二值或灰度)
%se:结构元
%type:图像类型(gray、binary)
%O:膨胀操作结果
se=reflect(se);%结构元反射
O=zeros(size(I));
[r,c]=size(I);
[m,n]=size(se);
lm=floor(m/2);%区别于erode
ln=floor(n/2);
rm=m-lm-1;
rn=n-ln-1;
orgm=lm+1;%结构元原点
orgn=ln+1;
if(strcmp(type,'binary'))%二值图像
for i=1:r
for j=1:c
indexr=max(1,i-lm):min(r,i+rm);%边界处理
indexc=max(1,j-ln):min(c,j+rn);
if(sum(sum(se(indexr-i+orgm,indexc-j+orgn)&I(indexr,indexc)))>=1)
O(i,j)=1;
end
end
end
end
if(strcmp(type,'gray'))%灰度图像
I=double(I);
for i=1:r
for j=1:c
indexr=max(1,i-lm):min(r,i+rm);%边界处理
indexc=max(1,j-ln):min(c,j+rn);
O(i,j)=max(max(I(indexr,indexc)+se(indexr-i+orgm,indexc-j+orgn)));
end
end
end

function newse=reflect(se)
%%结构元反射操作
%se:输入结构元
%newse:反射后结构元
[m,n]=size(se);
newse=zeros(m,n);
for i=1:m
for j=1:n
newse(i,j)=se(m+1-i,n+1-j);
end
end


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: