20

我使用轮廓检测​​进行矩形检测,并在调整透视投影之前使用 OpenCv 应用多边形来获取矩形的位置。而且效果很好。但我小组中的一些人建议改为霍夫变换。我想知道使用霍夫变换进行矩形检测是否有任何优势。

更新:我尝试了这两种方法。在我的示例中,这两种方法在 Canny 边缘检测后都运行良好。但是由于霍夫变换产生线,我们必须假设一些事情,例如线的长度和线的可连接性,并且应该进行额外的计算,例如搜索连接的线并从连接的线中找到角点。就个人而言,我更喜欢轮廓法,因为它的概念更简单。使用该方法,您只需搜索可以用具有 4 个角的封闭和凸多边形近似的轮廓,并调整多边形的透视投影。就是这样。

4

2 回答 2

19

到目前为止,您通过轮廓检测获得了什么样的结果?有例子吗?

霍夫变换应该适用于矩形检测IFF,您可以假设矩形的边是图像中最突出的线条。然后你可以简单地检测霍夫空间中的 4 个最大的峰,你就得到了你的矩形。

例如,这适用于深色背景前的一张白纸照片。

理想情况下,您将使用模糊、阈值、形态学运算符对图像进行预处理,以在霍夫变换之前移除任何小尺度结构。

如果图像中有多个较小的矩形或其他类型的突出线条,则轮廓检测可能是更好的选择。

霍夫变换的一些一般优势从我的脑海中消失:

  • 如果矩形的一部分被遮挡或超出框架,霍夫变换仍然可以工作。
  • 我猜霍夫变换应该比轮廓检测更快?
  • 霍夫变换将忽略任何不是直线的东西,因此您可能会在杂乱的图像上取得更大的成功。(如果矩形边是最突出的线)

最后,它可能取决于输入数据。有例子吗?

也许结合的方法是最好的?看到 结合霍夫变换和轮廓算法来检测车辆牌照

不久前我做了一些使用霍夫变换检测矩形的实验,你可以在这里看到一些初步结果: http ://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=14491&start=9

不幸的是,目前仅此而已,该项目目前处于中断状态,最终我希望在我不那么忙的时候恢复它。

相比之下,我会对你的结果非常感兴趣。

(如果你正在做透视校正,还要检查透视变形矩形的比例

于 2012-04-21T16:07:22.313 回答
8

使用霍夫变换搜索轮廓检测使我想到了这个 SO。

为了帮助未来的搜索者,这篇博文对使用 opencv 进行了很好的演练:http:
//opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/

概念:
1. 获取边缘图 - canny, sobel
2. 使用 Hough 变换检测线
3. 通过查找线之间的交点来获取角点。
4. 检查近似多边形曲线是否有 4 个顶点,approxPolyDP
5. 确定左上角、左下角、右上角和右下角。6. 使用getPerspectiveTransform
应用透视变换以获得变换矩阵,使用 warpPerspective应用变换。

于 2014-11-25T05:59:33.707 回答