2.9 KiB
2.9 KiB
3D Patch Generation Blender 工具
本文件夹包含 Blender 场景文件以及辅助脚本,用于导出网格体/相机数据,并将一张采集到的 2D 图像重新映射回 3D 表面。
主要文件
-
dd02c_v2.blendDD02C 曲面与相机配置所使用的主要 Blender 工程文件。 -
blender_export.py在 Blender 中运行,用于导出以下数据:- 网格几何信息
- 与 UV 相关的 loop 数据
- 相机内参
- 相机位姿
- 预计算的像素到 3D 查找表
-
mapto3d.py读取导出的数据和一张采集图像,并生成带颜色的 PLY 格式 3D 点云。
导出 / 生成的数据
-
exported_data/由blender_export.py生成。通常应包含以下文件:mesh.npzcamera_intrinsics.npzworld_to_cam.npypixel_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。
该脚本会将所需数据导出到:
exported_data/
脚本会写出以下内容:
- 网格顶点和面信息
- UV loop 数据
- OpenCV 风格的相机内参
- world-to-camera 变换矩阵
- 可选的逐像素 3D 查找表
3. 准备输入图像
将需要投影到 3D 表面的图像放到当前文件夹中,可以在Blender 渲染生成,例如:
captured_image.png
mapto3d.py 目前在其 __main__ 代码块中直接指定输入图像路径。
4. 将图像像素映射到 3D
运行:
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 侧
numpyopencv-pythonopen3d(可选,用于可视化)