计算多边形的最小面积矩形

Posted

技术标签:

【中文标题】计算多边形的最小面积矩形【英文标题】:Calculate minimum area rectangle for a polygon 【发布时间】:2009-08-19 05:56:03 【问题描述】:

我需要计算多边形周围的最小面积矩形(最小可能的矩形)。

我唯一的输入是多边形中的点数。

我还有点的坐标。

【问题讨论】:

只有点数?还是你也有坐标? 多边形是任意方向还是矩形必须与坐标系正交? 你需要有坐标。或者,具有边的长度和所有边具有相同长度的限制。或者你可以回答:4.(矩形中的点数)呵呵。 是的,多边形可以是任意方向,对于矩形来说,它应该是最小的面积 你自己尝试过吗? 【参考方案1】:

这称为Minimum Bounding Box,它是 OCR 包中使用的最基本算法。您可以从OpenCV 包中找到使用旋转卡尺的实现。获得源代码后,请查看此文件,

cv/src/cvrotcalipers.cpp

你需要的方法是cvMinAreaRect2()

【讨论】:

我找不到这个方法。你能给我准确的吗?谢谢 在这里google.com/codesearch/…【参考方案2】:

对凸多边形使用rotating calipers 算法,否则使用凸包。您当然需要多边形中点的坐标,而不仅仅是点的数量。

【讨论】:

我认为它会对我有所帮助.. 更准确地说,我必须计算多边形的宽度和长度!!! 没问题:当您应用算法时,您会依次计算与每条边对齐的边界框的宽度和长度。【参考方案3】:

首先做一个grahm-scan 并得到点集的convex hull。然后你可以使用类似minimum rectangle discussed here

【讨论】:

【参考方案4】:

遵循以下算法

    将多边形旋转到 XY 平面上 选择 1 条边并将这条边与 X 轴对齐(使用 arctan)。使用最小/最大 x,y 找到边界矩形。计算区域并存储在列表中 对裁剪多边形中的剩余边执行相同操作。 选择面积最小的矩形。 将边界矩形向后旋转以实现第 1 步和第 2 步的共面反向旋转

更多详情请查看链接Minimum-Area-Rectangle

【讨论】:

【参考方案5】:

显然,您需要点的坐标才能得到答案。如果矩形与 X 和 Y ace 对齐,则解决方案是微不足道的。如果你想要尽可能小的矩形,在任何角度,那么你需要做一些优化过程。

【讨论】:

感谢您的评论标记是的,我需要任何角度的矩形。能否请您详细说明优化过程 已经有几个人提到了旋转卡尺算法。基本上就是这样完成的。你做的相当于基本的最小/最大边界框,但坐标系旋转到每条边的角度。

以上是关于计算多边形的最小面积矩形的主要内容,如果未能解决你的问题,请参考以下文章

使用Python计算四边形与拟合四边形的最大交并比IOU

OpenCV中的四边形运算(一)——最小外接矩形

旋转卡壳模板

Java求geometry的面积最小外接矩形

Java求geometry的面积最小外接矩形

TOJ 2392 Bounding box(已知正n边形三点求最小矩形覆盖面积)