我是OpenCV和DIP的新手,目前我需要从低质量图片中找到一个矩形区域,该区域只有背景之外的矩形区域。
我使用canny探测器来获取许多微小的边缘,这些边缘组成了几个矩形区域,还有一些其他独立的噪声边缘。
那么,专家们,我如何处理这个中间输出图像来定位那些有意义的矩形区域的位置?
非常感谢!
答案 0 :(得分:0)
首先要做的就是丢弃任何不属于矩形的边。最好的情况是你的矩形都朝向与摄像机相同的方向。在这种情况下,丢弃任何不是南北或东西的边缘。如果矩形都具有相同的方向,但相机没有,则找到主导方向模块90度,并丢弃任何异常边缘。最坏的情况是矩形都有不同的方向。在这种情况下,您仍然期望边缘方向聚类:对于每个边缘,应该至少有一个平行边和两个正交边。丢弃任何无与伦比的优势。 (这假设您发现边缘长度超过几个像素;很难确定较短边缘的角度。)
在按方向消除虚假边缘后,下一步是查看是否可以连接它们。您应该仍然按照上一步的角度对它们进行分组。现在,假设对齐的边属于同一个矩形,并用一个长边替换它们。这可能会导致对齐矩形之间出现假边缘。这可能不是一个主要问题,但如果是,请在最后通过验证步骤进行修复。
你的边缘取景器很可能在角落附近不能很好地工作,因为真正的边缘在那里突然改变了方向。因此,您应该将您找到的边缘扩展几个像素。
扩展的边缘现在会产生一大堆交叉。再次,利用你按方向订购边缘的事实。只需检查几乎正交边缘的交叉点。如果找到它们,请创建一个“交叉”对象并将其与两条边相关联。他们是试探性的角落。
完成此操作后,查找至少有2个交叉点的边缘,看看是否可以匹配它们。根据数据的质量,当您有3个或4个角时,您可能想要确定找到了一个矩形。如果在单个边上发现过多的交叉,则可能已连接两个对齐矩形的边。如果您有两侧对齐的矩形,这可能会特别困难:
_ _
|_|_|