在OpenCV中从边缘获取多边形

3
我有一张图像,我想从中提取线条(血管网络),使用霍夫线算法。首先,我对图像进行预处理,然后使用Canny边缘检测生成二进制图像。
我想获得代表血管网络形状的多边形/连通线段数组。但是,直接在此图像上应用霍夫线变换会产生平庸的结果,部分原因是边缘检测意味着每个血管在两侧都由两条线表示,而不是单条线。
我对OpenCV和图像处理一般都很陌生,所以我可能走了错误的路。有什么建议或推荐的文献吗?

也许为了将事物呈现为单行形式,您可以尝试使用腐蚀 - aspiring_sarge
双线是由Canny算法应用于细线条时创建的人工瑕疵。尝试上传原始图像以更好地理解问题。 - Miki
将轮廓进行一次膨胀。这样做会将两条平行线合并为一条,然后您就可以使用Hough算法了。 - Saransh Kejriwal
2个回答

2
我建议不要使用Canny边缘检测。
相反,首先使用二进制阈值获取血管网络的二进制图像(请参见http://docs.opencv.org/3.1.0/d7/d4d/tutorial_py_thresholding.html#gsc.tab=0以应用二进制阈值)。然后,“开”状态的像素应该是网络内部的点,“关”状态的像素应该是外部的点。
然后使用findContours方法: http://opencvexamples.blogspot.com/2013/09/find-contour.html 这种方法会给你一个轮廓数组,其中每个轮廓都是点列表。点列表将表示您正在查找的线段列表(它将表示轮廓,如果您很幸运,它可能是多边形!)。

1
Hough可能不是这项任务的最佳工具。Hough将给您直线或其他几何形状。它不适合跟随这样详细的模式。鉴于此图像,我会阅读已经解决此问题的研究论文。以下是通过Google学术搜索得到的一些示例。如果这些方法对您不起作用,请查找引用,它们应该会引导您走向其他路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接