update dd02 3d viewer v1
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# 3D Patch Generation Blender 工具
|
||||
|
||||
本文件夹包含 Blender 场景文件以及辅助脚本,用于导出网格体/相机数据,并将一张采集到的 2D 图像重新映射回 3D 表面。
|
||||
|
||||
## 主要文件
|
||||
|
||||
- `dd02c_v2.blend`
|
||||
DD02C 曲面与相机配置所使用的主要 Blender 工程文件。
|
||||
|
||||
- `blender_export.py`
|
||||
在 Blender 中运行,用于导出以下数据:
|
||||
- 网格几何信息
|
||||
- 与 UV 相关的 loop 数据
|
||||
- 相机内参
|
||||
- 相机位姿
|
||||
- 预计算的像素到 3D 查找表
|
||||
|
||||
- `mapto3d.py`
|
||||
读取导出的数据和一张采集图像,并生成带颜色的 PLY 格式 3D 点云。
|
||||
|
||||
## 导出 / 生成的数据
|
||||
|
||||
- `exported_data/`
|
||||
由 `blender_export.py` 生成。通常应包含以下文件:
|
||||
- `mesh.npz`
|
||||
- `camera_intrinsics.npz`
|
||||
- `world_to_cam.npy`
|
||||
- `pixel_to_xyz.npz`
|
||||
|
||||
- `captured_image.png`
|
||||
要映射回导出 3D 表面的输入图像。当前该图像由 Blender 渲染得到。
|
||||
|
||||
- `mapped_points.ply`
|
||||
由 `mapto3d.py` 生成的输出点云文件。
|
||||
|
||||
- `texture/`
|
||||
保存实验过程中生成的纹理图片。
|
||||
|
||||
## 工作流程
|
||||
|
||||
### 1. 准备 Blender 场景
|
||||
|
||||
在 Blender 中打开 `dd02c_v2.blend`。
|
||||
|
||||
请确认:
|
||||
- 已选中目标网格
|
||||
- 相机存在且位置正确
|
||||
- 渲染分辨率与采集图像分辨率一致
|
||||
|
||||
### 2. 导出几何和相机数据
|
||||
|
||||
在 Blender 的里面上面转到“scripts” 模式,然后点击运行 `blender_export.py`。
|
||||
|
||||
该脚本会将所需数据导出到:
|
||||
|
||||
```text
|
||||
exported_data/
|
||||
```
|
||||
|
||||
脚本会写出以下内容:
|
||||
- 网格顶点和面信息
|
||||
- UV loop 数据
|
||||
- OpenCV 风格的相机内参
|
||||
- world-to-camera 变换矩阵
|
||||
- 可选的逐像素 3D 查找表
|
||||
|
||||
### 3. 准备输入图像
|
||||
|
||||
将需要投影到 3D 表面的图像放到当前文件夹中,可以在Blender 渲染生成,例如:
|
||||
|
||||
```text
|
||||
captured_image.png
|
||||
```
|
||||
|
||||
`mapto3d.py` 目前在其 `__main__` 代码块中直接指定输入图像路径。
|
||||
|
||||
### 4. 将图像像素映射到 3D
|
||||
|
||||
运行:
|
||||
|
||||
```bash
|
||||
python mapto3d.py
|
||||
```
|
||||
|
||||
该脚本会:
|
||||
- 加载 Blender 导出的数据
|
||||
- 加载输入图像
|
||||
- 在需要时对图像做上下翻转,以匹配导出的像素映射顺序
|
||||
- 优先使用预计算的 `pixel_to_xyz.npz`
|
||||
- 将结果保存为 `mapped_points.ply`
|
||||
|
||||
如果缺少预计算查找表,脚本会退回到逐像素射线求交,运行速度会慢很多。
|
||||
|
||||
### 5. 查看输出结果
|
||||
|
||||
生成的点云可以使用支持 PLY 的工具打开,例如:
|
||||
- Open3D
|
||||
- MeshLab
|
||||
- CloudCompare
|
||||
|
||||
`mapto3d.py` 中也包含可选的 Open3D 可视化步骤。
|
||||
|
||||
## 说明
|
||||
|
||||
- `mapto3d.py` 目前假设导出的相机模型与输入图像分辨率一致。
|
||||
- 脚本现在默认会对加载的图像做上下翻转,以保证映射颜色与 Blender 导出的像素顺序一致。
|
||||
- 为了获得更好的性能,建议在 `exported_data/` 中保留 `pixel_to_xyz.npz`。
|
||||
|
||||
## 依赖
|
||||
|
||||
### Blender 侧
|
||||
|
||||
- Blender Python API:`bpy`
|
||||
- `numpy`
|
||||
|
||||
### Python 侧
|
||||
|
||||
- `numpy`
|
||||
- `opencv-python`
|
||||
- `open3d`(可选,用于可视化)
|
||||
|
||||
Reference in New Issue
Block a user