我在这里、SO 和各种网站上看到了很多关于如何检测图像中的矩形的帖子,使用 Matlab、OpenCV 等。我自己也做过,使用Matlab。我通常的步骤是:
- 灰度图像(如果未完成)
- 模糊图像(如果需要)
- 应用边缘检测器(例如 Canny、LoG 等,尝试了很多)
- 应用霍夫变换的各个步骤来查找线
- 使用一些逻辑来判断哪些线组合正在形成矩形
我对这些没有问题。问题是(以及我发现的大多数其他帖子)它适用于相对简单的图像,通常是合成的图像,纹理很少,或者对比度高(如白纸上围绕文本的黑色矩形)。好吧,也许这只是我,但我不能让它与更复杂的图像一起工作,边缘图可能很嘈杂,我无法手动调整所有类型的参数和阈值来“让它工作”。
这是一个虚拟项目来说明我想要解决的那种情况。想象一下,我有很多书(几十本)分层重叠在一张桌子上,我在上面有一个相机,在合适的距离可以查看所有场景,并且只能查看场景。镜头没有失真,灯光没有模糊,分辨率相当不错。这些书可以以任何角度旋转,它们可能具有不同的尺寸(尽管可以假设有最小和最大尺寸),它们的封面可能彼此不同,也可能不同,可能有图像、文本等,但是没有颜色信息。
我希望能够识别该场景中每本书的位置。然后,知道他们的位置,我将能够提取他们封面的外观,并可能使用这些封面从数据库中检索他们的名字(只是一个例子,这部分现在不重要)。哦,我无法扭转问题并使用数据库来搜索给定书籍的存在(这会很长,我试图将此示例限制为矩形检测)。
现在,想象一下,鉴于手头问题的所有已知信息,我得出结论,最好的解决方案是搜索场景中是否存在矩形,知道书籍确实是矩形并且找到所有矩形可以给我一个好的开始。哦,我想实时进行。
你会怎么办?我看过一些文献中的论文,很多人都在做轮廓检测来检测马、杯子、瓶子,但是它们检测形状的速度很慢,而且我注意到通常只是简单的简单矩形也是如此简单,不足以让算法找到。
我不是在寻找现成的答案。我只是想知道是否有人对此有想法。我没有包含我测试的论文或实现的列表,部分原因是这个问题足够长,而且我不想确定答案的方向。请记住,这个例子是虚构的,我真正想要的是检测矩形。而且,披露,最终在我的职业生涯中,我认为我将不得不检测矩形(或其他形状),所以我很惭愧我无法用我现在所拥有的知识在真实图像上做到这一点:S
谢谢