将seg.png
进行邻域连通域标记吧。
连通域标记(Connected Component Labeling)是将邻接的像素打上相同的标记的作业。
也就是说:
将相邻的白色像素打上相同的标记。
像这样的像素组成的被标记的块被称为连通区域(Connected Component)。
在这里我们为4邻域的像素打上标记。另,在这里我们使用一种被称为Lookup Table的东西。
Lookup Table是这样的:
Source | Distination |
---|---|
1 | 1 |
2 | 2 |
3 | 1 |
一开始被打上1标签的像素(即Source=1
的像素)最终被分配到的标签为1(Distination=1
);一开始被打上3标签的像素(即Source =3
的像素)最终被分配的的标签也为1(Distination=1
)。
算法如下:
- 从左上角开始进行光栅扫描。
-
如果当前遍历到的像素
i(x,y)
是黑像素的什么也不干。如果是白像素,考察该像素的上方像素i(x,y-1)
和左边像素i(x-1,y)
,如果两个的取值都为0,将该像素分配一个新的标签。在这里我们用数字做标签,即1,2。
- 如果两个像素中有一个不为0(也就是说已经分配了标签),将上方和左边的像素分配的标签中数值较小的那一个(0除外)分配给当前遍历到的像素
i(x,y)
。在这里,将上方像素和左边像素的标签写入Lookup Table
的Source
,将当前遍历的像素i(x,y)
分配的标签写入Distination
。 -
最后,对照
Lookup Table
,对像素分配的标签由Source
变为Distination
。
像这样的话,邻接像素就可以打上同样的标签了。因为这里是做邻域连通域标记,所以我们只用考察上方像素和左边像素。
python实现:
输入(seg.png):
输出: