从图像中提取稳健的线
Posted
技术标签:
【中文标题】从图像中提取稳健的线【英文标题】:Robust Line Extraction from Image 【发布时间】:2013-06-17 19:03:22 【问题描述】:我需要从下图中提取所有墙壁边缘(包括地板、墙壁交叉点和墙壁、门交叉点)。如果我使用 canny 检测和霍夫变换(概率)。它给了我许多多余和不必要的行。我正在寻找是否可以在对其运行霍夫变换之前对其进行细化。
输入图像
以下是canny检测算法给出的canny图像 我使用精明参数作为最小和最大阈值 0,20。我不能对最大阈值使用非常高的值,否则我会丢失墙壁边缘,但与图像的其余部分相比,那里的梯度会很低。
我想在一个窗口中识别一个高密度的点簇,如果它高于某个阈值,则将它们设置为零。
以下是之后得到的canny图片。您可以看到墙壁边缘被保留。
谁能给我建议一个更好的方法来处理这个问题?我的意思是改进精明的图像,以便我可以识别随机点簇并摆脱那些但将它们设置为零。我正在考虑检查窗口中的共线点,但不知道这会有多有效? 欢迎大家提出意见
【问题讨论】:
【参考方案1】:我认为您可以在使用霍夫变换后过滤掉最长且几乎垂直的线条。看看这个link。
SimpleCV 只是一个包含 OpenCV 函数的快捷方式库,你不需要使用它。我想你在得到这个想法之后在实现算法时不会遇到问题。
编辑:好的,我想了更多关于你的问题。将集群设置为零作为预处理步骤实际上还不错。逐步增加窗口大小怎么样?我的意思是在获得第二张图像后,应用另一个具有 2* 窗口大小、相同阈值的集群过滤器。我想你可以这样继续下去,因为墙边很难被抵消。
另一种方式,使用矩形窗口(宽度 >= 5*高度)进行聚类过滤,因为您需要垂直边缘。
另一种方式,玩腐蚀和膨胀,过滤掉大面积的斑点。
另一种方式,查看图像的顶部,只有墙壁边缘和枝形吊灯。您可以水平搜索白色图案,然后按照其邻居指定连接点的长度。然后过滤掉较长的。
【讨论】:
我什至不想失去墙壁和地板之间的交集。并且算法应该是所有房间图像的通用算法 您为什么不考虑简单的墙壁颜色检测?从左上角或右上角获取墙 HSV,然后过滤掉色调差异>某个阈值的像素。然后低通滤波器(高斯模糊)或扩张图像应该可以很好地工作。 边界不均匀=这就是为什么你应该扩张+侵蚀,形态上接近。不同的颜色 = 只要您从图像角落获取颜色,这不是问题。闪电条件 = 直方图均衡。这就是我在这里的全部:)以上是关于从图像中提取稳健的线的主要内容,如果未能解决你的问题,请参考以下文章