2012-11-21 141 views
1

如何获取图像中(绘制)线的坐标数组?坐标应该与图像边界相关。输入:* .img。输出坐标数组(固定步长)。任何第三方软件来做到这一点?例如高对比度差异 - 白色背景和彩色黑线;或红色和绿色等从图像文件中提取坐标

例子:
enter image description here

+0

你打算什么平台来做到这一点呢? –

+0

Windows 7平台 –

+1

如果您要提取高对比度的角点,OpenVC是一个不错的选择。 –

回答

1

哦,你的意思是不直的线条。你需要定义一个“行”。直观地说,您可能意味着图像的连接区域,其中轴的长度与中轴与边缘之间的距离(即相对较长且较窄,即使是四处缠绕)之间的纵横比高。可能的方法:

  • 阈值或按颜色选择。或许由颜色基于颜色直方图进行选择,或者如这里所述色调分离:Adobe Photoshop-style posterization and OpenCV,然后调用scipy.ndimage.measurements.label()

  • 对于以上各区域,skeletonize。有用的教程:“Skeletonization using OpenCV-Python”。但是,您可能还需要到边缘的距离,因此请使用skimage.morphology.medial_axis(...,return_distance = True)

  • 对骨架执行某种清理/过滤以删除短分支等。您的特定用途,并假设您的线条不会循环,您可以在骨架中找到最长的单一路径。这也是您可以根据其骨架中最长路径相对于边缘距离的时间来决定一个形状是否为“线条”的位置。不知道如何在opencv中最好地做到这一点,但斐济/ ImageJ中的“分析骨架”将允许您按分支长度进行过滤。

  • 剩下的是原始“线条”形状中最细长的medial axis。您可以重新取样是一些步骤,你喜欢,或用样条适合它,等

由于你想要做什么性质,这是很难拿出一个示例代码,将在一系列图像上工作。这可能需要仔细调整。我建议使用一小部分图像(语料库),在其上运行任何版本的算法,然后手动检查结果,直到它非常好,然后在大型语料库上尝试。

编辑:原来的答复,只适用于直线:

你可能想使用Hough transformOpenCV tutorial)。

的Python代码示例:Horizontal Line detection with OpenCV

编辑:与示例代码相关问题缩略:How can I get a full medial-axis line with its perpendicular lines crossing it?