二值化图像中的单独交叉段

问题描述 投票:2回答:1

我进行了一些图像处理,使我可以提取包含较厚片段的二进制图像,而且我面临着这些片段可能彼此交叉的问题。因此,我需要找到一种有效的方法来分离它们,我将不得不在C ++中实现此方法,因此任何基于OpenCV的方法都会有所帮助。这是一个示例输入图像,两个“斑点”都需要分为3个不同的部分。

input image

[到目前为止,我已经尝试了2个想法,但我都坚持了这两个想法,这就是为什么我在这里问这个明显简单的问题是否有任何“最先进的”解决方案。

  1. 我的第一个想法是计算斑点的骨架,找到相交点。这部分很简单。然后,我计划从端点开始,遍历线段,直到到达一个交叉点并“穿过交叉点”。如果查看底部斑点,则即使预期为“ T”形,骨架也可以产生怪异的“ Y”形,从而无法决定如何穿越相交。

  2. 第二个想法是计算距离变换,然后计算渐变方向,然后我仍然需要一种方法来合并方向相似的像素,并处理端点/交叉点。

image transformoriginal and transform overlapped

image opencv image-processing vision
1个回答
0
投票

使用骨架是个好主意,因为这将使处理不受笔划宽度的影响。在交叉点附近,骨骼受到干扰,因此方向局部改变。

您可以考虑骨架并在连接点处分割(连接到两个以上独立曲线)。您将构建一个图形,其中边缘是交接点之间的弧线。然后,可以通过找到距离结点一到两个厚度的点来估计弧的方向。您将对边缘进行配对,以使(绿色)点形成最佳对齐方式。您可以用贪​​婪的方式(最适合的方式)进行此操作,直到用尽所有可能的匹配,或者直到角度被认为太大为止。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.