首页 > 解决方案 > 如何在图像中对相同的法线向量进行分组(python)

问题描述

我想把墙和地板分开。现在,我有一个深度图像并在深度图像中找到表面法线。我想将相同的法线向量分组并将图像转换为二进制。

在此处输入图像描述

以下代码是我如何找到表面法线。

    d_im = depth_image.astype("float64")

    zy, zx = np.gradient(d_im)  
    normal = np.dstack((-zx, -zy, np.ones_like(d_im)))

    n = np.linalg.norm(normal, axis=2)

    normal[:, :, 0] /= n
    normal[:, :, 1] /= n
    normal[:, :, 2] /= n

    # offset and rescale values to be in 0-255
    normal += 1
    normal /= 2

    cv2.imshow("Normal Image", normal[:, :, ::-1])

我想从墙上得到法线向量。我能怎么做 ?非常感谢

深度图像文件:

http://www.wikiupload.com/20D8UHUU58FTP2S

如何在程序中获取 z 向量?

标签: pythonopencvnormals

解决方案


简单的天真解决方案是使用具有某个阈值的法线向量中的 z 分量,因为法线向量被归一化,地板的 z 分量的值接近 1,而墙壁的值接近 0,因此阈值为 0.5可能会给你一个好的开始,之后你可能需要一种去噪方法


推荐阅读