在 OpenCV 中检测不完整的矩形(缺少角/短边)
Posted
技术标签:
【中文标题】在 OpenCV 中检测不完整的矩形(缺少角/短边)【英文标题】:Detecting incomplete rectangles (missing corners/ short endges) in OpenCV 【发布时间】:2016-02-06 23:23:33 【问题描述】:我一直在研究 opencv squares 样本的变体来检测矩形。它适用于封闭的矩形,但我想知道我可以采取什么方法来检测有开口的矩形,即缺少角,线太短。
我执行了一些膨胀,这会缩小小间隙,但不会关闭这些较大的间隙。
我曾考虑使用凸包或边界矩形来生成轮廓以进行比较,但由于矩形的边缘是断开的,因此每个边缘都将被视为单独的轮廓。
我认为第一步是检测哪些线是形成完整矩形的候选线,然后执行某种线外推。这是seems promising,但我的矩形边缘不会完全水平或垂直放置。
我正在尝试检测这张图片中最左边的三个矩形:
【问题讨论】:
这是两个问题: 1. 检测不是完美线条的线段。 2. 组线段可能以矩形结束。 您对检测不完美线段有什么建议吗?我试过 HoughLines/HoughLinesP 似乎不起作用,我认为它们的目标是更完美的线条。我目前的思路是分析点的轮廓和某种面积与弧长的比率,以猜测它是矩形的哪个“部分” 对于轮廓,您可以尝试 PCA。但是对于连接的矩形角部分它会失败......我喜欢 RANSAC 方法,但你必须自己实现它。 谢谢,我会以这些为起点(: 【参考方案1】:也许这篇论文很有趣? Rectangle Detection based on a Windowed Hough Transform
基本上,对图像进行霍夫线变换。您将在 (theta, rho) 空间中的位置获得最大值,这些位置与有线条的位置相关。值越大,线越长/越直。也许做一个门槛,只得到最好的线条。然后,我们试图寻找成对的线是
1) 并行:最大值出现在相似的 theta 值处
2) 相似长度:最大值相似
3) 与另一对线正交:theta 值与其他对的 theta 值相差 90 度
论文中有更多细节,比如在滑动窗口中进行变换,然后使用错误度量来合并多个匹配项。
【讨论】:
以上是关于在 OpenCV 中检测不完整的矩形(缺少角/短边)的主要内容,如果未能解决你的问题,请参考以下文章