我有一个点的列表,每个点都是一个 x
和 y
坐标(均为整数)。现在我正在尝试查找已知的模式,例如直线、弧或圆,但已知这些点不完全在图形上。
那么最好的方法是什么?我没有很多线索可以开始。
编辑:这些点是有序的。用户正在绘制某些东西,程序应该检测出最佳的模式。例如,如果绘制了一个三角形,它应该检测出三条直线。
我有一个点的列表,每个点都是一个 x
和 y
坐标(均为整数)。现在我正在尝试查找已知的模式,例如直线、弧或圆,但已知这些点不完全在图形上。
那么最好的方法是什么?我没有很多线索可以开始。
编辑:这些点是有序的。用户正在绘制某些东西,程序应该检测出最佳的模式。例如,如果绘制了一个三角形,它应该检测出三条直线。
请查看霍夫变换。你需要做的是:将图像转换到“圆”空间,然后只需找到亮像素。
在图像中查找亮像素非常容易,只需应用截止值。
亮像素区域的数量就是圆的数量。您可以通过应用反函数来重构它们在图像上的原始位置。
如果你从某个点 P
到其他每个点的距离,那么如果以 P
为圆心,你将得到一些非常明显的统计效应。
你可能能够反过来找到具有这些属性的点。首先,类似于距离的标准差可能有效,要找到位置,可以对其进行导数,并尝试将其最小化。一旦找到最小值,请尝试找到一组与其等距的 >3 个点。
我预计你需要一些不同于标准差的东西,更关注聚集而不是异常值。
此外,这对于线条没有什么用处。
由于您正在获取像素,并且它们是按顺序到来的,因此您可以从检查每10个绘制像素之间的斜率并查看斜率如何变化开始。不连续性会提供给您一些信息。