图像形态学处理——形态学区域填充(Matlab)

本文详细介绍了一种基于形态学的区域填充算法,通过边界提取和8连通性原理,实现了对图像中特定区域的精准填充。算法首先利用腐蚀操作提取边界,然后采用递归方式寻找并填充符合条件的对象。
clc;
clear all;
close all;
%区域填充测试图像
I=im2double(imread('D:\Gray Files\9-16.tif'));
%获得图像大小
[M,N]=size(I);

%----------------------------形态学区域填充--------------------------------
%===============================边界提取===================================
%结构元素
n=3;
B=ones(n,n);
n_B=length(find(B==1));
%这里需要B对其原点进行翻转,因为B是对称的,所以翻转后的结果与其本身相同
n_l=floor(n/2);
%腐蚀操作
%存放腐蚀后的图像
J=zeros(M,N);
I_pad=padarray(I,[n_l,n_l],'symmetric');
for x=1:M
    for y=1:N
        %从扩展图像中取出子图像
         Block=I_pad(x:x+2*n_l,y:y+2*n_l);
         %将结构元素与子图像点乘,即逻辑“与”操作
         c=B.*Block;
         %比较结构元素与c中的1的数量,如果一样多,则该点的值为1
         ind=find(c==1);
         if length(ind)==n_B
             J(x,y)=1;
         end
    end
end
Beta=I-J;
% imshow(Beta,[]);
% imwrite(Beta,'D:\Gray Files\9-14-BoundaryExtration.tif','tif');
%%
%================用8连通找出边界对象,并对符合条件的对象进行填充===========
%保存所有连通对象集
Objs={};
%对边界图进行扩充,四周各加0,目的是为了处理边界点
Beta_pad=padarray(Beta,[n_l,n_l]);
%找到所有1(白色)点
[rows,cols]=find(Beta_pad==1)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值