这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
1 引言
多边形的绘制一般包括4个步骤,即:求交,排序,配对,填色
在填色阶段,采用4-连通边界种子填充算法
种子:边界/内点表示区域内的任意一点
种子填充算法较多用于多边形填充,多边形可以采用自定义绘制,或者矩阵输入
在本文中,还考虑将一张图片作为研究对象,改变其填充色,以实现种子填充算法的进阶运用~
2 思路
算法大致思路如下,循环进行以下操作,当栈顶为空时退出循环:
- 首先指定一个种子像素,并将其出栈
- 将出栈像素置成填充色
- 检查出栈像素的4-邻接点,若其中某个像素点是边界色且未置成多边形色,则把该像素入栈
3 过程
函数参数设置为5个,分别是种子像素的X,Y坐标,多边形矩阵及其长宽seed_fill4(x,y,Pic,vm,vn)
首先初始化栈,并显示待填充的图形
1 | matlab复制代码figure(1); |
再进入循环,判断种子像素的4-邻接点,并更新多边形矩阵Pic
,当top>0
时退出循环
最后显示填充后的多边形
1 | matlab复制代码figure(2) |
完整代码请见
seed_fill4(gitee.com)
4 结果
4.1 自定义多边形及其填充结果
自定义多边形既可以在绘图软件中绘制,也可以矩阵的方式直接定义多边形。本文采用直接定义矩阵,即
1 | matlab复制代码Pic([3:99],[3:99])=1; |
由于计算机将白色像素点处理为“1”,黑色像素点处理为“0”,故初始多边形设置成边界为黑、内容为白:
填充色设置为黑色,填充效果如下:
4.2 图片及其填充结果
图片填充步骤如下:
- 使用
imread()
读取图片 - 进行灰度化
- 提取像素值大于125的矩阵,并获取长宽
- 调用种子填充函数,输入参数中的矩阵为第3步得到的矩阵
初始图片为:
填充色设置为黑色,填充效果如下:
本文转载自: 掘金