【发布时间】:2013-07-17 11:50:25
【问题描述】:
我目前正在尝试找到一种在二进制图像中存储单独“分支”的简洁方法。这个小动画解释了它:
当我沿着分支走时,我需要收集构成单像素宽分支的像素索引。当我到达一个交汇点时,它应该分裂并存储新的分支。
一种方法可能是创建一个 3x3 的子区域,找出其中是否有白色像素,相应地移动它,如果有两个以上,则创建一个连接点。始终存储上一个子区域,以便可以使用它来确保我们不会移动到已扫描的区域。 不过,要弄清楚我将如何去做有点棘手。
我基本上需要根据“线/曲线”层次结构重新排序像素。然后应用程序的另一部分将重新绘制图形,其内部通过在点之间创建线来工作,因此需要将它们“排序”。
【问题讨论】:
-
这看起来像graph traversal problem,其中连接点是节点,单个像素宽的分支是图形的边缘。从任意初始点开始,您可以通过应用图遍历算法(如breadth-first search 或depth-first search
-
另外,您可以查看Connected Components Labeling
-
@pray 你需要在这里搜索吗?从分支开始并沿着分支移动是否有限制?如果您可以“看到”整个图像,则更容易对分支进行分组和标记。如果不能,那么您需要进行深度优先搜索,然后返回交叉点搜索另一个;每次都存储数据 - 正如 Alexey 现在建议的那样。
-
我可以看到整个图像,问题是需要重新排列像素。输入是手写文本,需要翻译为一组点(每个字符/数字等),稍后需要重绘(不是通过 OpenCV)。处理重绘的部分要求它是一组点,在这些点之间画线。
标签: opencv