形态学处理——区域填充

区域填充

   在图中,A 表示一个包含子集的集合,其子集的元素均是区域的 8 连通边界点。目的是从边界内的一个点开始,用 1 填充整个区域。 我们采用:所有非边界(背景)点标记为 0,则以将 1 赋给 p 点开始。 下列过程将整个区域用 1 填充:

                

 

 代码

clear all;
close all;
clc;

img=imread('tianchong.png');
img=img>128;
img=mat2gray(img);
imshow(img);

[m n]=size(img);
[x y]=ginput();
x=round(x);
y=round(y);

tmp=ones(m,n);
queue_head=1;       %队列头
queue_tail=1;       %队列尾
neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1];  %和当前像素坐标相加得到八个邻域坐标
%neighbour=[-1 0;1 0;0 1;0 -1];     %四邻域用的
q{queue_tail}=[y x];
queue_tail=queue_tail+1;
[ser1 ser2]=size(neighbour);

while queue_head~=queue_tail
    pix=q{queue_head};
    for i=1:ser1
        pix1=pix+neighbour(i,:);
        if pix1(1)>=1 && pix1(2)>=1 &&pix1(1)<=m && pix1(2)<=n
            if img(pix1(1),pix1(2))==1 
                img(pix1(1),pix1(2))=0;
                q{queue_tail}=[pix1(1) pix1(2)];
                queue_tail=queue_tail+1;

            end      
        end
    end

    queue_head=queue_head+1;
end

figure(1);
imshow(mat2gray(img));

原图:

 

 效果图:

 

 

 

 

 参考:https://www.cnblogs.com/tiandsp/archive/2012/12/06/2806186.html

posted @ 2021-01-14 13:16  为红颜  阅读(34)  评论(0编辑  收藏