如何在Java中检测图像中的四边形?

时间:2012-10-24 11:40:47

标签: java opencv hough-transform homography

我想用Java检测图像中的四边形。我可以在OpenCV中使用HoughLinesP方法(使用javaCV for opencv java binding)来检测线段。但我无法弄清楚如何检测四边形形状 - 是否有另一种方法可以使用霍夫线?此外,一旦检测到四边形的角,我希望它返回一个矩形,就像这个类一样 - http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.htm - openCV中是否有一个等效的库?

3 个答案:

答案 0 :(得分:4)

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

可以这样生成一个假设:

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

适应性可能是假设四边形的区域(参见Bretschneider's formula计算凸四边形的面积),四边形边缘与检测到的集合中其他线段的距离,或者某种东西更适合您的应用。

这只是一个想法,我还没有尝试过使用这种方法(但我正在计划实现类似的东西)。如果您认为这可行,或者为什么不行,请告诉我! :)

答案 1 :(得分:2)

您的算法可能是这样的

  1. 处理图像以查找边缘(Canny过滤器)
  2. 应用Hough Transformation来查找行
  3. 检测以90度(aprox)
  4. 的角度相交的线对

答案 2 :(得分:1)

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