问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PyTorch3D渲染COLMAP重建的物体

发布网友 发布时间:2024-09-28 04:58

我来回答

1个回答

热心网友 时间:2024-10-07 07:09

本文将介绍如何在 PyTorch3D 中读取 COLMAP 生成的相机渲染重建物体结果,并获取相应的深度图和法线图。假设读者已熟悉 PyTorch3D,可参考官方文档(https://pytorch3d.org/docs/renderer_getting_started)。

注:相关代码和示例数据可在 Github (github.com/guanyingc/py...)上找到。

PyTorch3D 的坐标系

首先,让我们了解 PyTorch3D 官方文档中提到的几种坐标系定义,包括世界坐标系、相机坐标系、NDC 坐标系和屏幕坐标系。

本文还将对比 PyTorch3D 的相机坐标系与《NeRF代码解读-相机参数与坐标系变换》中讨论的常见相机坐标系的异同。

最后一列展示了 PyTorch3D 使用的是右手坐标系,方向有所不同。相机的 Z 轴向前,X 轴向左,Y 轴向上(LUF)。

注意事项

以下是编写代码时需要注意的两个重要点。

给定三维模型渲染图像

官方网站提供了一个示例,读者可以尝试运行:pytorch3d.org/tutorials...

大致流程包括导入三维模型、设置相机、光照和渲染器,然后执行渲染操作。接下来,我将简要介绍几个关键要点。

三维模型的朝向

在世界坐标系中,三维模型的朝向表现为牛模型的脸朝向负方向的 Z 轴。值得注意的是,红绿蓝(RGB)颜色通道分别对应于 XYZ 轴。

相机位姿定义

相机位姿的定义可以采用多种方式,其中一种方式是直接给定旋转矩阵和平移向量 RT(稍后会详细介绍)。另一种方式是通过样例中使用的 look_at_view_transform(distance, elevation, azimuth) 函数获得,该函数可生成一个相机位姿,使相机轴心指向原点。在此,需要设定相机与原点的距离,以及俯仰角(elevation)和方位角(azimuth)。

这里需要查阅一下 API 文档,看看这个俯仰角和方位角是相对哪个轴而言的。

可以看到方位角是相对正 z 轴方向 [0,0,1] 而言的。

这时可以看到,如果我们将俯仰角和方位角都设置为 0,将会看到模型的背面。因此样例代码是把方位角设置成 180 度。

利用 COLMAP 相机渲染重建的物体

有时候,我们希望对一个重建的三维模型进行渲染,以获得与实际拍摄视角相对应的图像以及深度等信息。

以 COLMAP 密集重建所得的三维模型为例,我们将介绍这个过程。这里并不会详细展开关于 COLMAP 的使用,有兴趣的读者可以查看 colmap.github.io/cli.ht...

总体流程包括读取三维模型、导入相机参数、配置光照和渲染器,然后进行渲染操作。下面将简要介绍几个关键要点。

读取 COLMAP 相机参数

下面是其中一个相机对应的参数:

{ 'img_name': 'IMG_20221210_112836.jpg', 'intrinsics': array([1567.46842128, 1567.11882971, 1000., 745.5 ]), 'H': 1491, 'W': 2000, 'w2c': tensor([[-0.5214, 0.5889, -0.6175, 0.6818], [-0.7234, 0.0787, 0.6859, -3.2761], [ 0.4526, 0.8043, 0.3850, 1.9347], [ 0.0000, 0.0000, 0.0000, 1.0000]])}

设置 PyTorch3D 相机参数

在这里,我们将以 PyTorch3D 中的透视相机(perspective)为例进行说明。

对于外部参数(外参),我们需要先将 COLMAP 中的相机朝向转换为 PyTorch3D 的相机朝向。

如果想要降低图像分辨率,需要调整相机的内部参数(内参)。

设置渲染器

由于 COLMAP 重建的 mesh 没有纹理贴图,这里使用 pytorch3d.renderer.SoftSilhouetteShader() 渲染 mask。

渲染深度和法线图渲染结果图

感兴趣的读者可以自己跑代码熟悉一下。如有错误,还请批评指正,谢谢!

热心网友 时间:2024-10-07 07:14

本文将介绍如何在 PyTorch3D 中读取 COLMAP 生成的相机渲染重建物体结果,并获取相应的深度图和法线图。假设读者已熟悉 PyTorch3D,可参考官方文档(https://pytorch3d.org/docs/renderer_getting_started)。

注:相关代码和示例数据可在 Github (github.com/guanyingc/py...)上找到。

PyTorch3D 的坐标系

首先,让我们了解 PyTorch3D 官方文档中提到的几种坐标系定义,包括世界坐标系、相机坐标系、NDC 坐标系和屏幕坐标系。

本文还将对比 PyTorch3D 的相机坐标系与《NeRF代码解读-相机参数与坐标系变换》中讨论的常见相机坐标系的异同。

最后一列展示了 PyTorch3D 使用的是右手坐标系,方向有所不同。相机的 Z 轴向前,X 轴向左,Y 轴向上(LUF)。

注意事项

以下是编写代码时需要注意的两个重要点。

给定三维模型渲染图像

官方网站提供了一个示例,读者可以尝试运行:pytorch3d.org/tutorials...

大致流程包括导入三维模型、设置相机、光照和渲染器,然后执行渲染操作。接下来,我将简要介绍几个关键要点。

三维模型的朝向

在世界坐标系中,三维模型的朝向表现为牛模型的脸朝向负方向的 Z 轴。值得注意的是,红绿蓝(RGB)颜色通道分别对应于 XYZ 轴。

相机位姿定义

相机位姿的定义可以采用多种方式,其中一种方式是直接给定旋转矩阵和平移向量 RT(稍后会详细介绍)。另一种方式是通过样例中使用的 look_at_view_transform(distance, elevation, azimuth) 函数获得,该函数可生成一个相机位姿,使相机轴心指向原点。在此,需要设定相机与原点的距离,以及俯仰角(elevation)和方位角(azimuth)。

这里需要查阅一下 API 文档,看看这个俯仰角和方位角是相对哪个轴而言的。

可以看到方位角是相对正 z 轴方向 [0,0,1] 而言的。

这时可以看到,如果我们将俯仰角和方位角都设置为 0,将会看到模型的背面。因此样例代码是把方位角设置成 180 度。

利用 COLMAP 相机渲染重建的物体

有时候,我们希望对一个重建的三维模型进行渲染,以获得与实际拍摄视角相对应的图像以及深度等信息。

以 COLMAP 密集重建所得的三维模型为例,我们将介绍这个过程。这里并不会详细展开关于 COLMAP 的使用,有兴趣的读者可以查看 colmap.github.io/cli.ht...

总体流程包括读取三维模型、导入相机参数、配置光照和渲染器,然后进行渲染操作。下面将简要介绍几个关键要点。

读取 COLMAP 相机参数

下面是其中一个相机对应的参数:

{ 'img_name': 'IMG_20221210_112836.jpg', 'intrinsics': array([1567.46842128, 1567.11882971, 1000., 745.5 ]), 'H': 1491, 'W': 2000, 'w2c': tensor([[-0.5214, 0.5889, -0.6175, 0.6818], [-0.7234, 0.0787, 0.6859, -3.2761], [ 0.4526, 0.8043, 0.3850, 1.9347], [ 0.0000, 0.0000, 0.0000, 1.0000]])}

设置 PyTorch3D 相机参数

在这里,我们将以 PyTorch3D 中的透视相机(perspective)为例进行说明。

对于外部参数(外参),我们需要先将 COLMAP 中的相机朝向转换为 PyTorch3D 的相机朝向。

如果想要降低图像分辨率,需要调整相机的内部参数(内参)。

设置渲染器

由于 COLMAP 重建的 mesh 没有纹理贴图,这里使用 pytorch3d.renderer.SoftSilhouetteShader() 渲染 mask。

渲染深度和法线图渲染结果图

感兴趣的读者可以自己跑代码熟悉一下。如有错误,还请批评指正,谢谢!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
福建南安都有哪些市场 端午节去南安旅行的线路有哪些值得分享? 南安有哪些特色商业街 把一个棱长是10厘米的正方体铁块熔铸成一个底面积是20厘米的圆锥形铁块... 把一块棱长10厘米的正方体铁块熔铸成一个底面直径是20厘米的圆柱形零件... 0x0438ef0指令引用的0x0438ef0内存.该内存不能为“read”的错误提示... SONY 索尼 DSC-RX100M5A 1英寸数码相机 黑色(8.8-25.7mm、F1.8) Vl... SONY 索尼 DSC-RX100M5A 1英寸数码相机 黑色(24-70mm、F1.8-F2.8)-购... 索尼RX100 M5A数码相机 索尼RX100 M5A数码相机:小巧便携,成像卓越 PyTorch3D多视角渲染.OBJ模型 使用Pytorch的3D卷积的代码实现示例 全屋定制的话,一般都用什么材质 李沁主演的锦绣南歌高开低走,热度持续下降,为什么李沁就没法大火? wow小白,想问有关战场的问题 WOW 为什么战场号都是39和49的啊 WOW 盗贼 49级战场问题 关于WOW49级战士战场小号的装备选择 阔树叶有哪些 ...提供了知道详细地址的人和电话,这样能查到吗? 我拿着身份证到法院能查到我的案子在哪个厅吗? 给法院提供银行卡号里有钱,被执行人转走了,能追查到去向吗? 怀孕42天可以做药流吗 药流后注意什么 何为半生是什么意思? 难的笔顺怎 难什么意思 装修里的低价陷阱层层盘剥最后花费更多 药物流产多少天可以做 怀孕多少天药流最合适 2022年的美客多(Mercador)值得做吗?市场前景怎么样? 基于OpenPCdet使用自己的数据集合训练Transform 模型 关于pytorch中buffer和parameters的理解 【2023-Pytorch-分类教程】手把手教你使用Pytorch训练自己的分类... 物种大爆发是什么力量推动生命的进化(过度繁殖) 寒武大爆发物种爆发 为什么会发生物种大爆发? 解释地球生命史上的悬案:寒武纪生物大爆发 ,生命物种为何爆发般出现 vivo手机如何root 啊,尝试了好多一键root都不行,刷机还没有root 的rom... 为什么我的VIVO 手机安装了360ROOT 总是ROOT失败? 为什么vivo Y13T不能root啊?试了好几个360超级Root 百度一键root Kingro... 请问vivo-Y27怎么 ROOT,试过百度,360超级,ROO大师,kingroot都不行!怎 ... ?路虎车质量怎么样路虎揽胜属于什么档次 路虎有哪些优缺点 在恐龙灭绝后,地球出现了物种大爆发,这是什么原因?希望可以说的简单一... 英雄联盟配置低怎么设置 ...原因就是我收不回账,现在领导对我有意见了,让我写一份这 ...指的比率是月/2千左右。自己有帐号都是2转120以上。 中海国际社区·御湖公馆楼盘概况 滦南吧富力城什么时候交房呀 初中课程设置有哪些科目?