当前位置: 首页 > news >正文

Blender模拟结构光3D Scanner(一)外参数匹配

如何使用Blender模拟FPP(Fringe Projection Profilometry) 原理的结构光3D传感器?

主要包含的工作有:

1)相机、投影仪定位与内外参数匹配;

2)投影仪投射指定Pattern图像;

3)被测物体材质属性配置等;

本篇主要关注外参数匹配。

外参数匹配的基本思路 是,添加Camera和SpotLight节点,并设置各自的变换(Transform)属性,主要是位置X/Y/Z和旋转X/Y/Z六个参数。


1 Blender中变换参数的含义

Blender中,变换参数的含义可理解为世界坐标系到当前Object坐标系的变换,用位置X/Y/Z和旋转X/Y/Z可分别表示为\boldsymbol{T}_{3 \times 1}\boldsymbol{R}_{3 \times 3}

则Object坐标系下的点\boldsymbol{P}_\textnormal{obj}与该点在世界坐标系下的坐标\boldsymbol{P}_\textnormal{W}之间的变换关系为

\boldsymbol{P}_\textnormal{obj}=\boldsymbol{R}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}\boldsymbol{T}  (1-1)


2 左相机变换参数配置

在三维测量中惯用的相机坐标系定义为,

X ——  相机画幅平面内水平向右的方向为X正方向;

Y —— 相机画幅平面内竖直向下的方向为Y正方向;

Z —— 相机观测正前方(Front)方向为Z正方向;

        但Blender中,相机坐标系的定义是不同的。具体表现为,在Blender中将相机变换参数的位置X/Y/Z和旋转X/Y/Z都设置为0,如图1所示。

图1 相机位置和旋转参数置0

图2 相机视野和方向

        此时相机的视野和方向如图2,图中和红色/绿色/蓝色线为世界坐标系XYZ三轴的轴线, 三个轴的正方向可参见右上角的坐标轴缩略图(彩色实心圆指向轴的正方向);图中橙色线段,端点标有XYZ的是相机坐标系;相机的视野前方为世界坐标系的Z负方向,相机视野的上方向为世界坐标系的Y正方向。

        为了使相机的视野前方与上方向与三维测量中惯用的相机相匹配,需要设置Blender中相机旋转变换参数,旋转Y/Z轴均设置180°,如图3所示。设置后,相机视野前方指向Z正方向,视野上方指向Y负方向。

        但注意此时Blender中相机坐标系(橙色)的各轴方向为:        

        X ——  与世界坐标系X正方向一致;

        Y —— 与世界坐标系Y正方向相反;

        Z —— 与世界坐标系Z正方向相反;

图3 旋转Y/Z轴均设置180°后的Blender相机坐标系

        根据式(1-1),此时Blender相机坐标系下点的坐标\boldsymbol{P}_{\textnormal{C}}与该点在世界坐标系下的表示\boldsymbol{P}_{\textnormal{W}}的关系为

\boldsymbol{P}_{\textnormal{C}}=\boldsymbol{R}_{\textnormal{C}}\boldsymbol{P}_{\textnormal{W}} (2-1)

式中,\boldsymbol{R}_{\textnormal{C}}对应旋转变换参数Y/Z轴均设置180°。

        但是,此时Blender相机坐标系和三维测量惯用的相机坐标系(本节开头)定义仍是不同的,若在此时Blender相机节点的位置,建立三维测量惯用的相机坐标系,设该坐标系下点的坐标为\boldsymbol{P'}_\textnormal{C},则\boldsymbol{P'}_\textnormal{C}与该点在Blender相机坐标系下的坐标\boldsymbol{P}_{\textnormal{C}}之间的变换关系为

\boldsymbol{P'}_\textnormal{C}=\boldsymbol{R}_x\boldsymbol{P}_\textnormal{c}  (2-2)

        式中,\boldsymbol{R}_x对应旋转变换参数X轴旋转180°,即Blender相机坐标系绕X轴旋转180°可构造出三维测量惯用的相机坐标系。


3 投影仪变换参数配置

        投影仪和双目系统中右相机的地位是相同的。在Blender中可通过设置聚光灯(Spot Light)+图像纹理的方式来模拟投影仪的效果。参考式(1-1),配置投影仪变换参数即确定\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}

\boldsymbol{P}_\textnormal{P}=\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}  (3-1)

        聚光灯的坐标系(即投影仪坐标系)与第2节中Blender相机坐标系的定义是类似的,也存在Blender投影仪坐标系与三维测量惯用的投影仪坐标系差距\boldsymbol{R}_x旋转的问题,即

\boldsymbol{P'}_\textnormal{P}=\boldsymbol{R}_x\boldsymbol{P}_\textnormal{P} (3-2)

        若三维测量系统标定外参数已知,即三维测量惯用的投影仪坐标系与三维测量惯用的左相机坐标系的变换关系已知,则有

\boldsymbol{P'}_\textnormal{P}=\boldsymbol{R}\boldsymbol{P'}_\textnormal{C}+\boldsymbol{T} (3-3)

        联立式(2-1)、(2-2)、(3-1)、(3-2)、(3-3)可求得投影仪变换旋转参数\boldsymbol{R}_\textnormal{P}和平移参数\boldsymbol{T}_\textnormal{P},即可对应得到Blender聚光灯的变换参数。

\boldsymbol{R}_x\boldsymbol{P}_\textnormal{P}=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{P}_\textnormal{c}+\boldsymbol{T}

\boldsymbol{R}_x(\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}-\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P})=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{P}_\textnormal{W}+\boldsymbol{T}

\boldsymbol{R}_x\boldsymbol{R}_\textnormal{P}\boldsymbol{P}_\textnormal{W}=\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{P}_\textnormal{W}

\boldsymbol{R}_\textnormal{P}=\boldsymbol{R}_x^{\top}\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}  (3-4)

-\boldsymbol{R}_x\boldsymbol{R}_\textnormal{P}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

-\boldsymbol{R}_x\boldsymbol{R}_x^{\top}\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

-\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}\boldsymbol{T}_\textnormal{P}=\boldsymbol{T}

\boldsymbol{T}_\textnormal{P}=-(\boldsymbol{R}\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C})^{\top}\boldsymbol{T}  (3-5)

注意,式中\boldsymbol{R}_x\boldsymbol{R}_\textnormal{C}可理解为分别绕XYZ三个轴各转了180°,相当于没有转!

所以有

\boldsymbol{T}_\textnormal{P}=-\boldsymbol{R}^{\top}\boldsymbol{T}  (3-6)

最终实验得到的一组投影仪变换参数和相机-投影仪位置关系如图4所示

图4 实验得到的一组投影仪变换参数和相机-投影仪位置关系

http://www.lryc.cn/news/619563.html

相关文章:

  • 解决:nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module
  • PyTorch神经网络工具箱(神经网络核心组件)
  • 第十二节:粒子系统:海量点渲染
  • 5.0.9.1 C# wpf通过WindowsFormsHost嵌入windows media player(AxInterop.WMPLib)
  • Go 1.25正式发布
  • ant-design a-from-model的校验
  • 自然语言处理的实际应用
  • OpenAI官方写的GPT-5 prompt指南
  • [C语言]第二章-从Hello World到头文件
  • 服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?
  • Vue实时刷新,比如我提交审核,审核页面还需要点查询才能看到最新数据
  • 广州健永信息科技有限公司发展历程
  • 【分布式 ID】一文详解美团 Leaf
  • ubuntu24.04安装 bpftool 以及生成 vmlinux.h 文件
  • MySQL的MVCC多版本并发控制
  • 拓扑结构图解析
  • iscc2025区域赛wp
  • GitHub宕机时的协作方案
  • 软考备考——三、操作系统
  • 【计组】指令与CPU
  • 建设有人文温度的智能社会:规划与实施路径
  • Apple 的 GPU 加速框架
  • setsockopt函数详解
  • 利用 Makefile 高效启动 VIVADO 软件:深入解析与实践
  • 哈希算法(摘要算法)
  • 超实用!ToDesk/网易UU/向日葵:远程办公文件协作效率与安全实测
  • C++冒泡、选择、快速、桶排序超超超详细解析
  • PCBA:电子产品制造的核心环节
  • 深度学习赋能汽车制造缺陷检测
  • MFC/C++ 如何弹窗选择具体文件或某种类型文件路径,又是如何选择路径