我有一个手写文档的灰度图像 . 我想通过应用8路CCL算法从这个灰色图像中提取组件 . 请仅在导入OpenCV和numpy时在python中提供代码 . 如果任何人都能完成对我有用的任务,我已经设计了一个不完整的代码 .
Here is the algorithm:
-
连通分量矩阵初始化为图像矩阵的大小 .
-
为图像中的每个检测到的对象初始化并递增标记 .
-
初始化计数器以计算对象数 .
-
为整个图像启动行主扫描 .
-
如果检测到对象像素,则重复以下步骤(索引!= 0)
-
在Image中将相应的像素设置为0 .
-
用当前设置的像素的所有相邻像素更新矢量(索引) .
-
保留唯一像素并移除重复像素 .
-
将Index指示的像素设置为连接分量矩阵中的标记 .
-
增加图像中另一个对象的标记 . 6.增加图像中另一个对象的标记 .
1 回答
有一种可能的方法与您尝试的方法相差不远 . 假设背景像素被分配标签0,并且对象像素值1 .
逐行扫描图像;
遇到像素1时,设置新标签并执行填充填充操作,用新标签替换1 .
洪水灌溉可以非常简单地实施:
将起始像素设置为新标签;
递归填充八个邻居,如果他们有1 .
https://en.wikipedia.org/wiki/Flood_fill
这个版本的代码非常简单 . 但是你会发现它很容易溢出堆栈,因为挂起的填充数量可以和图像大小一样大 .
所以我建议扫描线版本,这是一个更多的参与 .
https://en.wikipedia.org/wiki/Flood_fill#Scanline_fill