1

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

例子:
在此处输入图像描述

4

1 回答 1

1

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

  • 阈值或按颜色选择。也许根据颜色直方图按颜色选择,或按照此处所述进行色调分离:Adobe Photoshop-style posterization and OpenCV,然后调用 scipy.ndimage.measurements.label()

  • 对于上面的每个区域,skeletonize。有用的教程:“使用 OpenCV-Python 进行骨架化”。但是,您可能还需要到边缘的距离,因此请使用skimage.morphology.medial_axis (..., return_distance=True)

  • 对骨架进行某种清理/过滤以删除短分支等。考虑您的特定用途,并假设您的线条不循环,您可以在骨架中找到最长的单条路径。在这里,您还可以根据其骨架中最长路径的长度(相对于到边缘的距离)来确定形状是否为“线”。不确定如何在 opencv 中最好地做到这一点,但 Fiji/ImageJ 中的“Analyze Skeleton”可以让您按分支长度进行过滤。

  • 剩下的是原始“线”形状的最细长的中轴。您可以将其重新采样到您喜欢的某个步骤,或者使用样条曲线等进行拟合。

由于您想要做的事情的性质,很难想出一个适用于一系列图像的示例代码。这可能需要一些仔细的调整。我建议使用一小组图像(语料库),在它们上运行任何版本的算法并手动检查结果,直到结果非常好,然后在大型语料库上尝试。

编辑:原始答案,仅适用于直线:

您可能想要使用霍夫变换OpenCV 教程)。

Python 示例代码:使用 OpenCV 进行水平线检测

编辑:与用于骨架化的示例代码的相关问题:如何获得一条完整的中间轴线,其垂直线穿过它?

于 2012-11-22T09:40:59.753 回答