Files
orisys-sdk/tools/3d_patch_generation_blender

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。

该脚本会将所需数据导出到:

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 侧

  • numpy
  • opencv-python
  • open3d(可选,用于可视化)