【问题标题】:Best way to find largest square that fits in a polygon drawn on an image找到适合在图像上绘制的多边形的最大正方形的最佳方法
【发布时间】:2010-11-25 01:26:46
【问题描述】:

我正在使用 OpenCV 将一堆视点匹配成全景图。结果是一堆黑色背景上的图像(有点像多边形)。我想要做的是裁剪这个多边形,这样结果图像中就没有黑色了。有没有好的算法来做到这一点?

我想的天真的方法是从图像中间的一个小方块开始向上扩展直到我碰到黑色,然后左右扩展。

我想要的解决方案是最大化填充区域的总面积。

编辑:多边形是凹的,所以我们需要检查它——我认为尝试每个顶点对的O(N^2) 算法是可行的,因为 N 很小。但是我们需要检查区域边界是否已填充,我猜这可以通过检查每个顶点以查看它是否位于我们选择的顶点对定义的矩形边界内,从而在 O(N) 中完成。这给了我们一个O(N^3) 算法

【问题讨论】:

    标签: image graphics image-processing opencv


    【解决方案1】:

    幼稚的解决方案可能效果不佳,因为通常使矩形更高会限制其宽度,因此您不会得到最佳解决方案。

    如果多边形上没有太多顶点,以下方法可能会起作用:尝试选择顶部和底部边缘的每个组合。为简化起见,假设它们总是包含多边形的一个顶点。当指定顶部和底部时,可以确定边,因此对于每对顶部/底部,您可以计算面积。选择面积最大的解决方案。

    上面的简化可能会产生次优结果,但应该不会太糟糕。

    【讨论】:

    • 很酷的想法——但问题是对于任何给定的顶点对可能没有填充区域。多边形通常是凹的。
    • 假设任何顶点似乎都不安全。例如,多边形可以是钻石。
    【解决方案2】:

    假设多边形在离散的 XY 网格上是凸的。然后多边形的整个形状可以由 (x1,x2) 对的数组表示,网格中的每个 Y 坐标对应一个。您可以通过跟踪多边形的边缘来获得这个 (x1,x2) 对的数组。

    您知道正方形必须至少在两个对角点处接触多边形,左上-右下或左下-右上。

    在每个左边缘点,你可以找到最右边的点,直接上直接下最近的点,以及每条对角线上最近的点,上下45度。如果对角线上的距离等于或小于任何直线距离,则您有一个适合多边形的正方形。可能不止一个,所以继续寻找最大的一个。

    【讨论】:

      【解决方案3】:

      考虑到全景图中可能出现的图像数量有限,您可以使用蛮力方法并尝试所有可能的组合。用户永远无法区分,函数的编写和维护可能会更快。不过,那样就没有那么有趣了。

      【讨论】:

        【解决方案4】:

        似乎线扫描算法会很好用。例如,从左边缘的一条垂直线开始,然后一次将其向右移动一些 x 增量。在每个停靠点,查看多边形内部线的每个线段。 (当它是凹的时候可能不止一个。)考虑沿着线段的子线段。

        然后从子线段的每个端点取水平线并找到与多边形的交叉点(在两个方向上),以找到包含该子线段的最大矩形。

        性能可能为 O(nxny2),但您可以通过启发式和自适应步长来降低它。

        一个可能被太多假设或捷径遗漏的案例是:

        +------\    /---+
        |       \  /    |
        \        \/     /
         \             /
         /             \
        /      /\       \
        |     /  \      |
        +----/    \-----+
        

        【讨论】:

          【解决方案5】:

          如果使用像素,请尝试距离变换,找到最大点,然后根据该位置通过您提到的扩展正方形/矩形来找到区域内的最大正方形

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-18
            • 2013-01-29
            • 2022-08-03
            • 2011-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-08
            相关资源
            最近更新 更多