Image 在二值化图像中分离交叉点段
我有一些图像处理,允许我提取包含厚段的二值图像,我面临的问题是这些段可能相互交叉。因此,我需要找到一种有效的方法来分离它们,我必须在C++中实现这一点,所以任何基于OpenCV的都会有所帮助。 这是一个示例输入图像,两个“blob”都需要分成3个不同的部分 到目前为止,我已经尝试了两个想法,我一直坚持这两个想法,这就是为什么我在这里问,对于这个看似简单的问题,是否有“最先进的”解决方案Image 在二值化图像中分离交叉点段,image,opencv,image-processing,vision,Image,Opencv,Image Processing,Vision,我有一些图像处理,允许我提取包含厚段的二值图像,我面临的问题是这些段可能相互交叉。因此,我需要找到一种有效的方法来分离它们,我必须在C++中实现这一点,所以任何基于OpenCV的都会有所帮助。 这是一个示例输入图像,两个“blob”都需要分成3个不同的部分 到目前为止,我已经尝试了两个想法,我一直坚持这两个想法,这就是为什么我在这里问,对于这个看似简单的问题,是否有“最先进的”解决方案 我的第一个想法是计算水滴的骨架,找到交点。这部分很简单。然后我计划从一个端点开始,穿过线段,直到我到达一个交
使用骨架是个好主意,因为这将使处理独立于笔划宽度。在连接点附近,骨架会受到扰动,因此方向会发生局部变化
你可以考虑一个骨架并在连接点处分裂(连接到两条以上的独立曲线)。您将构建一个图形,其中边是连接点之间的圆弧。确保保持联系
然后,可以通过查找距离接合点一到两个厚度的点来估计圆弧的方向。您将配对边,以便(绿色)点形成最佳对齐。您可以通过贪婪的方式(首先是最佳拟合)进行此操作,直到用尽所有可能的匹配,或者直到角度被认为太大具有广角的交叉点具有挑战性,因为它们将形成一个具有两个远处交叉点的骨架。当将曲线与另一条曲线匹配时,如果有一条路径在中间,那么就可以考虑匹配的曲线,这样就可以在一条像笔划一样大的条带内进行匹配。你可以开始寻找交叉点。这里是一个MATLAB执行。当距离接近时,您可以尝试穿过两个紧密相交的“关键点”。对于“T”形,它看起来笔直向前。对于X形状,您可以搜索几乎平行的两条直线。您是否尝试过Hough变换来提取直线?@Rotem这会像我对骨骼所做的那样给我交集,接下来我将如何分别提取每个线段?@Meisam不,我没有尝试过Hough变换,您认为它有何帮助?据我所知,它不会返回分隔线通过适当设置Hough的阈值,它会分别估计每条线的方程(即使它们相交)。通过这种估计和一些简单的形态学操作,你可以将它们独立地分割出来。非常感谢你的建议。关于存储和遍历每条曲线的结构,您有什么建议吗?类似于从使用创建的骨架中提取链表的方法OpenCV@JulienM:这只是一张图表。