我有一个二进制图像,我想检测不连续的线并链接它们。 我什么都不知道(坐标,角度等)。 任何人都可以指导我如何开始?假设我有这个图像:
我想加入不连续的线条。我想存储连接(在数组中)以后使用的行的信息。
答案 0 :(得分:1)
我发现你的问题很有趣,我会尝试给你一些想法,但不幸的是不是一个完整的算法(你知道,这需要时间......)。我还会给你留下一些悬而未决的问题。
我认为您发布的图像是二进制图像,即黑色像素的值为零,白色像素的值为1。我忽略了红色像素,因为我认为你画了它们以突出你想要连接虚线的位置;忽略红色像素意味着我将它们的值设置为零。
首先,我们需要一些定义。
非边界像素有8个邻居(西北,北,东北,东,东南,南,西南,西)像素:
abc
h*d
gfe
在上图中,像素由*
表示,其8邻居由a,b,c,d,e,f,g
和h
表示。
我将端点像素定义为值为1且仅为一个值为1的邻居,其余邻居的值为零,因此例如此图显示端点像素< / p>
000
011
000
因为d=1
和所有剩下的邻居都是零。
下图显示了一个不是和端点像素的像素,因为它有两个等于一的邻居(a=1
和e=1
)
100
010
001
现在我们可以开始描述一个简单算法的一部分。
在第一步中找到所有端点像素并将它们放在矢量中:在下图中,我将端点标记为1到15(请注意,端点15未在您发布的图像中突出显示)。
在第二步中,为每个端点找到最近的端点:例如,考虑端点4,其最近端点为5.现在,如果您遵循将一个端点与其最近端点连接的简单规则,您将拥有分段连接4-5,10-11,13-14,都很好。但考虑1:它的最近端点是2或者它可能是3,但我希望算法只连接2和3,同时将1连接到最左边的垂直线。我也想要6,9和12的相同行为。
现在情况不同:6,7和8怎么样?暂时忽略8,最接近的端点6然后是7,但它们已经连接,我们如何管理这种情况?
最后,考虑15:为什么没有在你发布的图片中突出显示它?也许它应该被忽略?
答案 1 :(得分:0)
可能会有所帮助。
end-point
。将这些称为reference point
。端点和参考点之间的向量将给出扩展方向。希望它有所帮助。