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

引言

一般在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内部数据,观察作用的元素。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值