当前位置: 首页 > 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.dtcms.com/a/328780.html

相关文章:

  • 决策树回归:用“分而治之”的智慧,搞定非线性回归难题(附3D可视化)
  • JS 与 C++ 双向通信实战:基于 WebHostViewListener 的消息处理机制
  • Java后端面试题(含Dubbo、MQ、分布式、并发、算法)
  • 分布式与微服务宝典
  • 智能算法流程图在临床工作中的编程视角系统分析
  • 【docker①】在VS Code中使用Docker容器
  • 安全点(Safepoint)完成后唤醒暂停线程的过程
  • 解决uni-app微信小程序编译报错:unexpected character `1`
  • 机器学习实战·第三章 分类(2)
  • EI学术会议 | 虚拟现实、图像和信号处理
  • 股指期货长线还是短线好?
  • AWS Redis Serverless连接完全指南:从安装到实战
  • Notepad++插件开发实战:从入门到精通
  • oss(阿里云)前端直传
  • 使用 Milvus Operator 在 Kubernetes 中部署 Milvus记录
  • LeetCode 刷题【40. 组合总和 II】
  • 3d游戏引擎中ContentTools中的文件模型导入代码1
  • python---list.sort() 和 sorted(list)的区别
  • JVM安全点轮询汇编函数解析
  • 计算机网络---IPv6
  • 第6节 torch.nn.Module
  • 熬夜面膜赛道跑出的新物种
  • Spring Boot初级概念及自动配置原理
  • 【递归、搜索与回溯算法】综合练习
  • 系统分析师-数据库系统-并发控制数据库安全
  • 使用 UDP 套接字实现客户端 - 服务器通信:完整指南
  • HiSmartPerf使用WIFI方式连接Android机显示当前设备0.0.0.0无法ping通!设备和电脑连接同一网络,将设备保持亮屏重新尝试
  • 【android bluetooth 协议分析 05】【蓝牙连接详解3】【app侧该如何知道蓝牙设备的acl状态】
  • 【KO】Android 面试高频词
  • 从内核数据结构的角度理解socket