检测图像中矩形的最简单*正确*方法是啥?

Posted

技术标签:

【中文标题】检测图像中矩形的最简单*正确*方法是啥?【英文标题】:What is the simplest *correct* method to detect rectangles in an image?检测图像中矩形的最简单*正确*方法是什么? 【发布时间】:2011-12-14 21:36:47 【问题描述】:

我正在考虑检测图像中矩形的最佳方法。

我最初的想法是使用Hough transform 作为线条,并选择线条组合,其中两条线在下部和上部都被相同的两条线相交,但这还不够。

将corner detector 与霍夫变换一起使用吗?

【问题讨论】:

不够,你的意思是没有效率,对吧?这实际上取决于您的应用程序 - 除非您实时为高清视频执行此操作,否则 Hough 变换可能就足够了。 【参考方案1】:

查看您的 OpenCV 发行版中的 /samples/c/squares.c。这个例子提供了一个方形检测器,它应该是一个很好的开始。

我的回答 here 也适用。

【讨论】:

【参考方案2】:

我认为目前还没有一种简单而可靠的方法来检测图像中的矩形。您必须处理许多问题,例如矩形不是完全矩形而是近似矩形、部分遮挡、光照变化等。

一个可能的方向是对图像进行分段,然后检查每个分段与矩形的接近程度。由于您不能信任您的分割算法,您可以使用不同的参数多次运行它。

另一个方向是尝试将一个矩形参数化地拟合到图像中,使得沿轮廓的图像梯度幅度最大化。

如果您选择使用参数化方法,请注意,虽然参数化矩形的简单方法是通过四个角的位置(即 8 个参数),但还有一些其他表示需要更少的参数。

【讨论】:

对于一个简单的几何形状,霍夫变换回答了这些问题 - 对于更复杂的东西,比如一张脸,你是完全正确的。 其实我在检测矩形方面做了一些工作,我也遇到过这些问题。显然,如果您使用合成图像,那么 Hough 方法将非常有效,但如果您想“在野外”找到矩形,那就完全不同了。【参考方案3】:

Hough 的一个扩展很有用。http://en.wikipedia.org/wiki/Generalised_Hough_transform

【讨论】:

以上是关于检测图像中矩形的最简单*正确*方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

计算图像中给定矩形内所有像素总和的最有效方法是啥?

从终端检测脚本中键盘输入的最简单方法是啥?

在 Linux 中检测 CDROM 介质移除/插入的最简单方法是啥

在 OpenCV 中选择图像的非矩形 ROI 的最有效方法是啥?

C++ OpenCV:应用二维卷积的最简单方法是啥

为 C/C++ 编写检测分析器的最简单方法是啥?