【问题标题】:How to detect a quadrilateral shape in an image in Java?如何在 Java 中检测图像中的四边形?
【发布时间】:2012-10-24 11:40:46
【问题描述】:

我想在 Java 中检测图像中的四边形。我可以使用 OpenCV 中的 HoughLinesP 方法(使用 javaCV 进行 opencv java 绑定)来检测线段。但我不知道如何检测四边形 - 是否有另一种方法或某种使用霍夫线的方法?同样,一旦检测到四边形的角,我希望它像此类一样返回一个矩形-http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.htm-openCV 中是否有等效库?

【问题讨论】:

    标签: java opencv hough-transform homography


    【解决方案1】:

    您的输入图像看起来如何?如果您使用霍夫变换检测到大量线段,您可以尝试使用RANSAC 生成多个四边形形状假设,找到一种评估它们的适合度并返回最佳假设的方法。

    可以这样生成一个假设:

    • 从检测到的线段集中随机选择四个线段
    • 通过查找所选线段所在的线的交点来找到四个角
    • 评估由这四个点定义的四边形的适应度

    适应度可能是假设四边形的面积(请参阅Bretschneider's formula 计算凸四边形的面积)、四边形边缘与检测集中其他线段的距离,或者更好的值适合您的应用。

    这只是一个想法,我还没有尝试过使用这种方法(但我正计划实施类似的方法)。让我知道您是否认为这可行,或者为什么不可行! :)

    【讨论】:

      【解决方案2】:

      你的算法可能是这样的

      1. 处理图像以查找边缘(Canny 过滤器)
      2. 应用霍夫变换来查找线
      3. 检测以 90 度(近似)角相交的线对

      【讨论】:

      • 是的,已经意识到这一点 - 但正在寻找一种更优化的算法或现有方法来给出四边形角。另外,角点提取后需要进行四边形变换。
      • 如果线条是由 3D 四边形到 2D 表面的透视投影产生的,则不能保证相邻边之间的角度为 90 度。但是,给定一组四行,您仍然可以对它是投影四边形的可能性进行某种评估——在这种情况下,这会有点困难。
      【解决方案3】:

      如果您使用 OpenCV 库,那么您绝对应该尝试 FindChessboardCorners 函数。还有here's a good tutorial

      【讨论】:

      • 不确定这是否适用于我的情况。
      • 它在图像中检测到棋盘图案,但这里不是这种情况。它不会因为我的图像中的四边形没有任何内角/正方形而失败吗?
      • 对不起,我不知道你的问题的答案,因为我从来没有做过校准。无论如何,你想让我为你测试一下吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多