Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在二值化图像中分离交叉点段_Image_Opencv_Image Processing_Vision - Fatal编程技术网

Image 在二值化图像中分离交叉点段

Image 在二值化图像中分离交叉点段,image,opencv,image-processing,vision,Image,Opencv,Image Processing,Vision,我有一些图像处理,允许我提取包含厚段的二值图像,我面临的问题是这些段可能相互交叉。因此,我需要找到一种有效的方法来分离它们,我必须在C++中实现这一点,所以任何基于OpenCV的都会有所帮助。 这是一个示例输入图像,两个“blob”都需要分成3个不同的部分 到目前为止,我已经尝试了两个想法,我一直坚持这两个想法,这就是为什么我在这里问,对于这个看似简单的问题,是否有“最先进的”解决方案 我的第一个想法是计算水滴的骨架,找到交点。这部分很简单。然后我计划从一个端点开始,穿过线段,直到我到达一个交

我有一些图像处理,允许我提取包含厚段的二值图像,我面临的问题是这些段可能相互交叉。因此,我需要找到一种有效的方法来分离它们,我必须在C++中实现这一点,所以任何基于OpenCV的都会有所帮助。 这是一个示例输入图像,两个“blob”都需要分成3个不同的部分

到目前为止,我已经尝试了两个想法,我一直坚持这两个想法,这就是为什么我在这里问,对于这个看似简单的问题,是否有“最先进的”解决方案

  • 我的第一个想法是计算水滴的骨架,找到交点。这部分很简单。然后我计划从一个端点开始,穿过线段,直到我到达一个交叉点并“穿过交叉点”。如果您查看底部的水滴,骨架可能会生成奇怪的“Y”形,即使预期为“T”形,也无法决定如何穿过交点

  • 第二个想法是计算距离变换,然后是梯度方向,然后我仍然需要一种方法来合并具有相似方向的像素,以及一种处理端点/交点的方法


  • 使用骨架是个好主意,因为这将使处理独立于笔划宽度。在连接点附近,骨架会受到扰动,因此方向会发生局部变化

    你可以考虑一个骨架并在连接点处分裂(连接到两条以上的独立曲线)。您将构建一个图形,其中边是连接点之间的圆弧。确保保持联系

    然后,可以通过查找距离接合点一到两个厚度的点来估计圆弧的方向。您将配对边,以便(绿色)点形成最佳对齐。您可以通过贪婪的方式(首先是最佳拟合)进行此操作,直到用尽所有可能的匹配,或者直到角度被认为太大


    具有广角的交叉点具有挑战性,因为它们将形成一个具有两个远处交叉点的骨架。当将曲线与另一条曲线匹配时,如果有一条路径在中间,那么就可以考虑匹配的曲线,这样就可以在一条像笔划一样大的条带内进行匹配。

    你可以开始寻找交叉点。这里是一个MATLAB执行。当距离接近时,您可以尝试穿过两个紧密相交的“关键点”。对于“T”形,它看起来笔直向前。对于X形状,您可以搜索几乎平行的两条直线。您是否尝试过Hough变换来提取直线?@Rotem这会像我对骨骼所做的那样给我交集,接下来我将如何分别提取每个线段?@Meisam不,我没有尝试过Hough变换,您认为它有何帮助?据我所知,它不会返回分隔线通过适当设置Hough的阈值,它会分别估计每条线的方程(即使它们相交)。通过这种估计和一些简单的形态学操作,你可以将它们独立地分割出来。非常感谢你的建议。关于存储和遍历每条曲线的结构,您有什么建议吗?类似于从使用创建的骨架中提取链表的方法OpenCV@JulienM:这只是一张图表。