我需要从下图中提取所有墙边(包括地板,墙壁交叉点和墙壁,门交叉点)。如果我使用canny检测和hough变换(概率)。它给了我许多冗余和不必要的线条。我正在寻找是否可以在运行hough变换之前改进canny图像。
输入图像
以下是由canny检测算法给出的精确图像
我使用canny参数作为最小和最大阈值的0,20。我不能使用非常高的最大阈值,否则我会失去墙边,但与图像的其余部分相比,渐变会很低。
我想在窗口中识别一个高密度点集群,如果它高于某个阈值,则将它们设置为零。
以下是之后获得的精确图像。您可以看到墙边缘被保留。
有人能建议我更好地处理这个问题吗?我的意思是改进精确的图像,这样我就可以识别出随机点的集群,然后将它们设置为零。我在考虑在窗口中检查共线点,但不知道它会有多有效? 欢迎任何评论
答案 0 :(得分:7)
我认为你可以在使用霍夫变换后过滤出最长和接近垂直的线条。看看这个link。
SimpleCV只是一个包含OpenCV函数的快捷库,你不需要使用它。我不认为在得到这个想法后你会遇到实施算法的问题。
编辑:好的,我更多地考虑了你的问题。将群集设置为零作为预处理步骤实际上并不错。如何逐步增加窗口大小?我的意思是在获得第二个图像后,应用另一个具有2 *窗口大小,相同阈值的集群过滤器。我认为你可以这样继续下去,因为墙边很难被取消。
另一种方法是,使用矩形窗口(宽度> = 5 *高度)进行群集过滤,因为您需要垂直边缘。
另一种方式,玩糜烂和扩张,过滤掉大面积的斑点。
另一种方法,检查图像的顶部,只有墙边和枝形吊灯。您可以水平搜索白色图案,然后按照其邻居指定连接点的长度。然后过滤掉更长的。