如何从点列表中找出模式(线,圆等)?

10

我有一个点的列表,每个点都是一个 xy 坐标(均为整数)。现在我正在尝试查找已知的模式,例如直线、弧或圆,但已知这些点不完全在图形上。

那么最好的方法是什么?我没有很多线索可以开始。

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


所有的点是否组成一个模式?还是你在同一个点列表中寻找多个模式? - Nosredna
我正在同一个列表中寻找多个模式。 - Burkhard
刚刚看到你的编辑。用户正在绘图。这是像素绘图吗,而你有一列像素吗?还是线段绘图,而你有一列端点? - Nosredna
5个回答

10

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

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

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


+1. 我以前用过这个来检测SICK激光球,效果非常好。 - rofrankel
此外,您可以使用变形的霍夫变换来检测线条、三角形等。虽然细节有点棘手,但是可以完成。 - rofrankel
1
我是Hough的粉丝,但另一个常见的选择是使用RANSAC。几个工业视觉系统依赖于RANSAC或RANSAC和Hough的组合。(http://en.wikipedia.org/wiki/RANSAC) - Rethunk

3
经典的识别器是神经网络。神经网络效果“还行”,需要以某种方式进行训练。
神经网络所基于的数学技术和原理可以转移到大多数其他我了解过的识别器上(例如,马尔可夫链、贝叶斯模型),只需适当修改即可。

1
只要限制在基本形状上,您可以计算当前笔画的平均“方向”,并从中创建一系列“笔画”。
基于这些信息,识别形状可能会更容易:
- 圆形具有相当恒定的二阶导数 - “七”字先向右划一笔,然后向左下方划一笔 - ...

1

如果你从某个点 P 到其他每个点的距离,那么如果以 P 为圆心,你将得到一些非常明显的统计效应。

你可能能够反过来找到具有这些属性的点。首先,类似于距离的标准差可能有效,要找到位置,可以对其进行导数,并尝试将其最小化。一旦找到最小值,请尝试找到一组与其等距的 >3 个点。

我预计你需要一些不同于标准差的东西,更关注聚集而不是异常值。

此外,这对于线条没有什么用处。


1

由于您正在获取像素,并且它们是按顺序到来的,因此您可以从检查每10个绘制像素之间的斜率并查看斜率如何变化开始。不连续性会提供给您一些信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接