计算多边形的最小面积矩形
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 对齐,则解决方案是微不足道的。如果你想要尽可能小的矩形,在任何角度,那么你需要做一些优化过程。
【讨论】:
感谢您的评论标记是的,我需要任何角度的矩形。能否请您详细说明优化过程 已经有几个人提到了旋转卡尺算法。基本上就是这样完成的。你做的相当于基本的最小/最大边界框,但坐标系旋转到每条边的角度。以上是关于计算多边形的最小面积矩形的主要内容,如果未能解决你的问题,请参考以下文章