我该如何使这些线连接到目标点?这张图片是通过骨架化过程得到的结果。
我正在尝试使用分水岭变换将每条线段分割为区域。
我该如何使这些线连接到目标点?这张图片是通过骨架化过程得到的结果。
我正在尝试使用分水岭变换将每条线段分割为区域。
MikeE的答案很好:在这种情况下,使用膨胀和腐蚀形态学操作可以帮助很多。
我想提出一点改进,利用手头图像的特定结构。不要使用通用卷积核进行膨胀/腐蚀,而是建议使用水平卷积核来连接水平线的端点,但不会将相邻行连接在一起。
这是代码草图(假设输入图像存储在bw
numpy 2D数组中):
import cv2, numpy as np
kernel = np.ones((1,20), np.uint8) # note this is a horizontal kernel
d_im = cv2.dilate(bw, kernel, iterations=1)
e_im = cv2.erode(d_im, kernel, iterations=1)
请注意,间隙被关闭,同时保留了明显的水平线
为了消除膨胀/侵蚀造成的伪影,我建议再次提取骨架。
如果进一步对侵蚀后的图像应用骨架形态学操作,则可以得到以下结果:
一旦曲线连接起来,您就不需要使用分水岭分割,而是使用连通组件来标记每条曲线。