如何对图像中相同的法线向量进行分组 (python)

how to group same vector of normal in image (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])

我想从墙上获取法向量。我能怎么做 ?非常感谢

depth_image 文件:

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

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

简单的天真解决方案是使用法向量中的 z 分量和一些阈值 因为法向量被归一化了,所以地板的 z 分量的值接近 1,而墙的 z 分量的值接近 0 所以 0.5 的阈值可能是一个好的开始 在那之后你可能需要一种去噪方法