【问题标题】:How to identify the surrounding rectangle如何识别周围的矩形
【发布时间】:2014-03-27 12:03:28
【问题描述】:

如何识别给定点的近似周围矩形?

预期输出:如下图上部所示。

输入:下半部分。

【问题讨论】:

  • 对于任何有限的点集,都有许多周围的矩形。你需要告诉你想要哪一个。最小面积?最小周长?最漂亮?
  • 构建凸包,然后以 O(n) 时间复杂度构建矩形(其中 n 是凸包中的点数)。
  • @n.m.最好找一个最漂亮的。作为人类,图像的第一印象是一个正方形,尽管它在数学上是正确的。

标签: algorithm graph-algorithm image-recognition


【解决方案1】:

好像这是minimzation problem with constraints

你需要找到4行:

l1: a1x + b1y + c1 = 0
l2: a1x + b1y + c2 = 0
l3: a2x + b2y + c3 = 0
l4: a2x + b2y + c4 = 0

所以,你有 8 个变量:a1,a2,b1,b2,c1,c2,c3,c4

您需要最小化

Sum(distance(li,point_j) | i from [1,4], j - over all points)

受约束:

l1 dot l3 = 0  [ensuring rectangle - cosine=0->angle between lines=90]
for each point j:
a1xj + b1yj + c1 >=0 ['above' l1]
a1xj + b1yj + c2 <= 0 ['below' l2]
(similarly for l3,l4)

请注意,您可以更改目标函数以匹配其他最小化标准,例如最小面积。

【讨论】:

  • 这太复杂了。
【解决方案2】:

我的建议是执行以下两个步骤:

  1. 找到convex hull的点
  2. 找到一个凸多边形的最小边界框可以在 O(n) 中求解,接下来是这个algorithm

已编辑:好的,实际上以上 2 个步骤不足以成为正确且被接受的答案。

在这两个步骤之前,您必须先对点集进行预处理。

  1. 检查是否有 3 个或更多点共线,删除两个端点以外的点。
  2. 在第 1 步之后,您现在应该得到一组没有 3 个或更多点共线的点。

检查 set 的大小:如果它只剩下 1 点或 2 点,你必须特别处理它们(对于 1 点,你可以通过你自己的方法找到任何最小的盒子来包含它;对于 2 点可能会它们成为边界框的对角线?)

如果结果集还剩下 >= 3 个点,那么只需按照我原来的 2 个步骤操作:凸包 + 旋转卡尺

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多