10

我有一个点列表。每个点都是一个xy坐标(两者都是整数)。现在我试图找到已知的图案,例如线条、圆弧或圆,因为我知道这些点在图案上并不完美。

最好的方法是什么?我没有太多开始的线索。

编辑:点是有序的。用户正在绘制一些东西,程序应该检测到最佳模式。例如,如果绘制了一个三角形,它应该检测三条线。

4

5 回答 5

10

看看霍夫变换。你所做的是:你将你的图像转换为“圆形”空间,然后你只需要找到光像素。

在图像中找到亮像素非常容易,只需应用截止。

光像素区域的数量是圆圈的数量。您可以通过应用反函数重建它们在图像上的原始位置。

于 2009-06-02T14:05:09.943 回答
3

经典的识别器是神经网络。神经网络工作“没问题”,并且需要以某种方式进行培训。

神经网络的数学技术和原理可以转移(经过适当的修改)到我读过的大多数其他识别器;例如,马尔可夫链、贝叶斯模型。

于 2009-06-02T14:04:23.440 回答
1

只要您将其限制为基本形状,您就可以计算当前笔画的平均“方向”,并从中创建一系列“笔画”。

根据该信息识别形状可能更容易:

  • 一个圆有一个相当恒定的二阶导数
  • “七”在右边有一个笔划,然后是左下角的一个笔划
  • ...
于 2009-06-02T14:59:45.560 回答
1

我你看看从某个点P到其他每个点的距离,而不是P一个圆的中心,你会得到一些非常明显的统计效果。

您也许可以扭转这一点并找到具有这些属性的点。作为第一遍,距离的标准偏差之类的东西可能会起作用,并且要找到位置,您可以取其相对于位置的导数并尝试将其最小化。找到最小值后,尝试找到一组与其等距的 >3 个点。

我预计您将需要标准偏差以外的其他东西,即对异常值不那么感兴趣而对聚集更感兴趣的东西。

此外,这对线路没有多大好处。

于 2009-06-02T17:32:34.053 回答
1

由于您正在获取像素,并且它们是按顺序排列的,因此您可以首先检查每绘制 10 个像素之间的斜率,然后查看斜率如何变化。不连续性为您提供了一些信息。

于 2009-06-02T17:41:35.723 回答