python - 如何在图像中对相同的法线向量进行分组(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 向量?
解决方案
简单的天真解决方案是使用具有某个阈值的法线向量中的 z 分量,因为法线向量被归一化,地板的 z 分量的值接近 1,而墙壁的值接近 0,因此阈值为 0.5可能会给你一个好的开始,之后你可能需要一种去噪方法
推荐阅读
- linux-kernel - 从内核用户空间访问 u-boot 变量
- git - 从 github 中完全删除旧的提交(不仅仅是从历史中)
- sql - Varchar 相等性如何在 SQL 表达式中起作用?
- r - R - 如何从给定日期获取一周和一个月的结束日期?
- r - 使用循环或 `purrr::map()` 将重新排列的数据帧打印到屏幕
- ruby-on-rails - Ruby:如何在 ruby 中生成唯一的字母字符串
- python - 如何使用 pandas python 创建时间组
- angular - 'activatedRoute' 和 'route' 参数类型不兼容
- pandas - 模式返回异常:必须产生聚合值
- vb.net - 列表视图没有给出数据库中的确切值