您的位置:首页 > 编程语言 > MATLAB

基于可变中心任意形状结构元素的图像腐蚀及matlab实现

2017-11-13 10:17 771 查看

引言

一般在matlab中可以用imrode实现膨胀腐蚀,但是全都无法定义结构元素中心,本文编写了一个可以设定中心(x0,y0)的erode函数,实现可变中心的图像腐蚀。同时,通过设置SE不关心元素为0,实现任意形状的SE腐蚀。

原理

类似于对二值图像的模板操作,

最终的效果是使结构元素外的图像变为背景,图像范围缩小。

SE为结构元素,可以自定义任意形状,主程序中设为3*3的十字。

中心可以定义为(x0,y0)=(1,2)

%eg【0 1 0
%    1 1 1
%    0 1 0】第1行第2列元素为原点时,(x0,y0)=(1,2)


代码:

可变中心的腐蚀函数:

function K=erode(I,se,x0,y0)
[m,n]=size(I);
[m1,n1]=size(se);
J=I;
K=J;
% Q=K;
se=se;
x0=x0;
y0=y0;
num=sum(sum(se==1));
for i=(1+x0-1):(m-(m1-x0))
for j=(1+y0-1):(n-(n1-y0))
bmatch=false;
s=0;
for k=1:m1
for l=1:n1
if se(k,l)==0   %不关心的元素
continue;
end
if se(k,l)==1%相关元素
if J(i+(k-(m1-1))-(x0-(m1-1)),j+(l-(n1-1))-(y0-(n1-1)))==255  %以原点对结构元素遍历
s=s+1;
end
end
if s==num
bmatch=true;
break;
end
end
end
if bmatch
K(i,j)=255;
else
K(i,j)=0;
end
end
end


主程序

I=zeros(45,45);
I(22:33,22:33)=255;
I(12:17,12:17)=255;
I(12:14,18:22)=255;
%设置3*3结构元素的原点(x0,y0)

x0=1;
y0=2;
se=[0 1 0;1 1 1;0 1 0;];%structure element
K=erode(I,se,x0,y0);
subplot(121)
imshow(K),title('腐蚀');
subplot(122)
imshow(J),title('原图');


效果



可以看到,经过腐蚀,前景范围缩小,转折处有十字结构元素处理的单点的突出。

自己可以对照matlab的workspace内部数据,观察作用的元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息