检测图像中草率的手绘箭头

信息处理 图像处理 计算机视觉
2022-02-05 15:33:24

如何从图像中轻松有效地检测手绘箭头及其方向?

它们可能是用铅笔之类的东西在一张纸上轻轻画出来的。

如果我实现了一个将直线拟合到手绘线的系统,我可能会寻找大致共享一个端点并形成大约 45 度角的 3 条线。但是,这只是解决了一半,我不知道这是不是一个很好的方法。

我应该如何解决这个问题?

如果可能的话,我想要一个简单的解决方案而不是有效的解决方案,因为我是一名知识有限的 9 年级数学学生,但这不是必需的

1个回答

好吧,解决这个问题的最简单方法是获得霍夫变换并寻找箭头的“签名”。此外,由于这些线条是在一张纸上绘制的,因此可能需要进行一些细化,因为笔留下的痕迹不会是一条完美的直线,而是一组稍微笔直的平行线。

好的,但这一切意味着什么?

霍夫变换获得原始图像中沿轮廓的所有像素的总和(ρ) 设置在某个角度 (θ)。例如,为了产生沿上下方向的和,算法首先将第一列的所有像素值相加并产生一个值。然后它将第二列的所有值求和并产生另一个值,依此类推,直到产生每列的总和。现在,每一列的总和代表转换输出图像中的一行数据。这行数据对应某个角度(θ)。然后,算法将图像旋转一些dθ并重复该过程,从而以某个角度创建第二行数据θ+dθ等等。这就是这个图像的产生方式。

因此,霍夫变换的最终结果是将线转换为点。

因此,现在寻找箭头变成了在某个角度找到 1 个“强”像素值的任务θ和位移ρ(箭头的中线)表示箭头指向的角度和角度(大约)处少 2 个“强”像素值θ±45(这些是形成箭头点的相邻线)。因此,具有 3 个箭头的图像的 Hough 变换是具有 3 个不同的三元组点的图像。

但!这些箭头的扫描图像不会仅由三行组成。手绘箭头意味着有缺陷。这些缺陷“破坏”了霍夫变换的输出,而不是有一条线的尖点,你得到的是一个漂亮的脂肪团。

这就是变薄有帮助的地方。细化是一种形态学算子,它将“胖”线减少到最细的表示,这将在以后对 Hough 变换有很大帮助。

使用这种技术,您必须扫描一次霍夫变换的输出才能找到图像中的所有箭头。

请注意,这是假设箭头不是共线的。如果你有多个箭头指向同一方向,沿着同一条线,它们将有助于同一个累加器的总和,你必须对每个箭头的长度做出假设,以区分有多少箭头沿着从它的像素值开始的一条线。

霍夫变换完全是关于极坐标……和求和。细化是一种改进。

我想可能有一些特殊的方法来扫描图像,直到找到“墨水”区域,然后用一组约束跟踪该区域以确定它是否是一个箭头以及它指向哪个方向,但这些不会与霍夫变换方法一样简单。