【计算机图形学】种子填充算法进阶运用——MATLAB实现

1,604 阅读2分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

1 引言

多边形的绘制一般包括4个步骤,即:求交,排序,配对,填色

在填色阶段,采用4-连通边界种子填充算法

种子:边界/内点表示区域内的任意一点

种子填充算法较多用于多边形填充,多边形可以采用自定义绘制,或者矩阵输入

在本文中,还考虑将一张图片作为研究对象,改变其填充色,以实现种子填充算法的进阶运用~

2 思路

算法大致思路如下,循环进行以下操作,当栈顶为空时退出循环:

  1. 首先指定一个种子像素,并将其出栈

  2. 将出栈像素置成填充色

  3. 检查出栈像素的4-邻接点,若其中某个像素点是边界色且未置成多边形色,则把该像素入栈

3 过程

函数参数设置为5个,分别是种子像素的X,Y坐标,多边形矩阵及其长宽seed_fill4(x,y,Pic,vm,vn)

首先初始化栈,并显示待填充的图形

figure(1);
imshow(Pic); %显示待填充的图形,用于与填充后的图形对比
a=[];
b=[];
top=0;
top=top+1;
a(1,top)=x;
b(1,top)=y;
Pic(x,y)=0;

再进入循环,判断种子像素的4-邻接点,并更新多边形矩阵Pic,当top>0时退出循环

最后显示填充后的多边形

figure(2)
imshow(Pic);

完整代码请见 seed_fill4(gitee.com)

4 结果

4.1 自定义多边形及其填充结果

自定义多边形既可以在绘图软件中绘制,也可以矩阵的方式直接定义多边形。本文采用直接定义矩阵,即

Pic([3:99],[3:99])=1;
Pic([2:99],[99:100])=0;
Pic([99:100],[1:100])=0;
seed_fill4(95,80,Pic,100,100);

由于计算机将白色像素点处理为“1”,黑色像素点处理为“0”,故初始多边形设置成边界为黑、内容为白:

填充色设置为黑色,填充效果如下:

4.2 图片及其填充结果

图片填充步骤如下:

  1. 使用imread()读取图片

  2. 进行灰度化

  3. 提取像素值大于125的矩阵,并获取长宽

  4. 调用种子填充函数,输入参数中的矩阵为第3步得到的矩阵

初始图片为:

填充色设置为黑色,填充效果如下: