Image processing 基于透视投影的矩形识别的Hough变换与轮廓检测

Image processing 基于透视投影的矩形识别的Hough变换与轮廓检测,image-processing,opencv,Image Processing,Opencv,在调整透视投影之前,我将矩形检测与轮廓检测结合起来,并使用OpenCv应用多边形来获取矩形的位置。而且效果很好。但我的团队中有些人建议用霍夫变换来代替。我想知道使用Hough变换进行矩形检测是否有好处 更新:我尝试了这两种方法。在我的例子中,两种方法在Canny边缘检测后都很好地工作。但是,由于Hough变换产生直线,我们必须假设直线的长度和直线的连通性,并且应该进行额外的计算,例如搜索连通直线和从连通直线中找到角点。就我个人而言,我更喜欢轮廓法,因为它的概念更简单。使用该方法,您只需搜索可以用

在调整透视投影之前,我将矩形检测与轮廓检测结合起来,并使用OpenCv应用多边形来获取矩形的位置。而且效果很好。但我的团队中有些人建议用霍夫变换来代替。我想知道使用Hough变换进行矩形检测是否有好处


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

到目前为止,轮廓检测的结果是什么?有什么例子吗

如果可以假设矩形的边是图像中最突出的线,那么Hough变换应该可以很好地用于矩形检测。 然后,你可以简单地检测出hough空间中的4个最大峰值,得到你的矩形

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

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

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

hough变换在我脑海中的一些一般优势:

  • 如果矩形的一部分被阻挡或超出框架,Hough变换仍然可以工作
  • 我想Hough变换应该比轮廓检测快吧
  • Hough变换将忽略任何非直线的内容,因此在处理杂乱图像时可能会取得更大的成功。(如果矩形边是最突出的线)
最后,它可能取决于输入数据。有什么例子吗

也许一种综合的方法是最好的?看见

不久前,我做了一些使用hough变换检测矩形的实验,您可以在这里看到一些初步结果:

不幸的是,这就是目前存在的一切,该项目目前处于暂停状态,最终我希望在我不那么忙的时候恢复它

我对你的对比结果很感兴趣


(如果您正在进行透视校正,也请查看)

使用hough变换搜索轮廓检测使我想到了这一点

为了帮助未来的搜索者,这篇博客文章提供了一个很好的使用opencv的演练:

概念:
1.获取边缘地图-精明,索贝尔
2.使用Hough变换检测线
3.通过查找线之间的交点来获取拐角。
4.使用approxPolyDP检查近似多边形曲线是否有4个顶点
5.确定左上角、左下角、右上角和右下角。

6.使用getPerspectiveTransform应用透视变换以获得变换矩阵,并使用warpPerspective应用变换

谢谢你的回答。实际上,我的代码与opencv sample[squares]()没有太大区别。我怀疑的是,如何用Hough变换检测矩形,因为这种方法基本上是用于直线检测的。我想我必须检查所有线路,找到连接的线路,看看它们是否闭合。是的,我加了一条关于这一点的注释。如果矩形是图片中最大且最突出的结构,则使用hough进行矩形检测效果良好。该链接现在指向垃圾邮件网站,请尝试