8

我需要从下图中提取所有墙壁边缘(包括地板、墙壁交叉口和墙壁、门交叉口)。如果我使用精明检测和霍夫变换(概率)。它给了我许多多余和不必要的行。我正在寻找是否可以在对其运行霍夫变换之前改进精巧的图像。

输入图像 输入图像

以下是 canny 检测算法给出的 canny 图像,
我使用 canny 参数作为最小和最大阈值的 0,20。我不能对最大阈值使用非常高的值,否则我会丢失墙壁边缘,但与图像的其余部分相比,那里的梯度会很低。
正常的 Canny 图像

我想在一个窗口中识别一个高密度的点簇,如果它高于某个阈值,则将它们设置为零。

下面是之后得到的canny图像。您可以看到墙壁边缘被保留。 修改后的 Canny 图像

谁能建议我一个更好的方法来处理这个问题?我的意思是精炼精明的图像,以便我可以识别随机点簇并摆脱那些但将它们设置为零。我正在考虑检查窗口中的共线点,但不知道这会有多有效?欢迎任何评论

4

1 回答 1

7

我认为您可以在使用霍夫变换后过滤掉最长且几乎垂直的线条。看看这个链接

SimpleCV 只是一个包含 OpenCV 函数的快捷库,你不需要使用它。我不认为你在得到这个想法后会遇到实现算法的问题。

编辑:好的,我想了更多关于你的问题。将集群设置为零作为预处理步骤实际上还不错。逐步增加窗口大小怎么样?我的意思是在获得第二张图像后,应用另一个具有 2* 窗口大小、相同阈值的集群过滤器。我想你可以这样继续下去,因为墙边很难被抵消掉。

另一种方法是使用矩形窗口(宽度> = 5 * 高度)进行聚类过滤,因为您需要垂直边缘。

另一种方式,玩腐蚀和膨胀,过滤掉大面积的斑点。

另一种方式,查看图像的顶部,只有墙壁边缘和枝形吊灯。您可以水平搜索白色图案,然后按照其邻居指定连接点的长度。然后过滤掉更长的。

于 2013-06-20T21:37:23.837 回答