-
引言
图像中的区域填充(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