从一组点中找到四边形的角点

时间:2013-03-12 01:14:54

标签: algorithm math trigonometry corner-detection

我试图通过一组点来获得四边形的角点。

  • 订购点数并描述大纲
  • 有时候轮廓有些噪音(见第2张图片)
  • 搜索的角点不一定是给定点之外的点数(见左下角的第3张图)
  • 搜索的角点描述凸四边形,不一定是矩形

example1 example2 example3

第二张照片有点极端,但我的一套点的“质量”位于第一张照片和第二张照片之间。

首先,我想到制作超过1-360°和长度的直方图,以下两点描述。四个最高峰将描述每条线的长度。但是由于iam失去了订单点数,只知道度数和长度或一条线,并且不知道一条线属于哪个位置。

然后我考虑合并两个以下的行,如果他们的程度大致相同,但我不知道如何处理这里的噪音或预测角落。

有没有人知道处理这个问题或类似问题的算法?

1 个答案:

答案 0 :(得分:3)

您可以将此视为群集问题,其中群集“中心”实际上是直线。要计算聚类,您可以使用k-means算法:

  1. 选择4对随机点。为每条线安装一条线,这样就有4条线穿过点云。
  2. 重复直到解决方案似乎已收敛:
    1. 对于每个点,计算到4条线中每条线的距离。
    2. 将该点指定给与其最接近的行对应的存储桶。
    3. 在4个桶中的每个桶中安装4条新线(可以使用线性回归或SVD)
  3. 为了改进第一步,您可以考虑在角度上绘制直方图,并将每个点最初分配到与最近峰值对应的桶。然后将线条装到四个桶中,然后开始迭代。

    您还可以将此视为优化问题:选择4个点以使差异区域(内部的白色区域和四边形外部的黑色区域)尽可能小。通用优化算法可能有效,但为了加快速度,您需要一个合理的算法来计算区域。