彩色图像区域填充算法及代码实现

时间:2024-04-04 09:16:17
  • 引言

图像中的区域填充(fill)过程是给定一个封闭区域,然后在区域内部填上想要的颜色。matlab上有相关函数进行,好像有点难,这里讲的是图像区域填充,图像图像图像

  • 方法

1、matlab自带的imfill函数。

需要化成二值图,填充的颜色也是二值图,有局限。但是,可以用这个做彩色图填充。如下方法:

在空白图像上绘制轮廓(建议是一个区域一个区域来填充),画完转成二值图,用如下代码提取该区域:

Om=im2bw(Om);%二值化
%imwrite(1-Om,'Om.bmp');
ms=imfill(Om,'holes'); % make flood fill
%取出区域
[idxy,idxx]=find(ms==1);
cur=sub2ind(size(ms),idxy,idxx);

cur就是该区域包括轮廓所有的点了,然后用这些点进行定点赋值RGB值就完事了。代码实现方法如下:

%比如像这样,把每个区域的点都扔进curs中,然后idzz是对应每个区域的(idxx,idxy)的像素值,分为RGB三通道
curs=[curs;cur];
IR=[IR;idzz(:,1)];
IG=[IG;idzz(:,2)];
IB=[IB;idzz(:,3)];

%彩色图像填充
II(curs)=IR;
I(:,:,1)=II;

II(curs)=IG;
I(:,:,2)=II;

II(curs)=IB;
I(:,:,3)=II;

%可以显示I看看效果
imshow(I);

 

2、扫描线算法填充(flood fill)

这部分我不太懂,大家可以自行去找这方面知识去看,这种方法有个缺点:时间有点慢。我这在mathworks上搜到一份代码。链接如下:

扫描线区域填充算法

具体动态图是这样子的:

彩色图像区域填充算法及代码实现

end