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

三维重建线结构光之重建原理(单线结构光为例)

通过上一篇文章, 可以求得激光在空间中的光平面方程。如果以单目相机+单激光投影来进行举例。假设系统标定已完成。
当进行重建时已知:

  1. 条纹中心点P(x,y)P(x,y)P(x,y)(在归一化平面下).
  2. 光平面方程
    求:
    在相机坐标系下的三维空间点坐标Pc​(Xc​,Yc​,Zc​)P_c​(X_c​,Y_c​,Z_c​)Pc(Xc,Yc,Zc)

单线结构光重建原理

单线结构光测量系统模型包含一个用于采集图像的相机和一个单线结构光发射器,系统构成较为简单。测量过程中,结构光映射到物体表面,相机获取物体表面调制的具有一定分布的激光条纹,并提取激光条纹的中心点像素坐标,利用激光三角测量法计算得到中心点对应的三维空间坐标。(为了获取光线所对应的光平面方程)
在这里插入图片描述
激光条纹中心点 PI(u,v)P_I(u,v)PI(u,v) 对应的在相机坐标系(CCS)下的三维空间坐标Pc​(Xc​,Yc​,Zc​)P_c​(X_c​,Y_c​,Z_c​)Pc(Xc,Yc,Zc)和归一化平面中的二维坐标P(x,y)P(x,y)P(x,y)(归一化平面(normalized image plane)是一个虚拟的平面,通常位于相机坐标系Zc=1Z_c =1Zc=1 的位置。), 则在每个坐标轴上投影的坐标如图
在这里插入图片描述
两个点在坐标轴上的投影分量满足如下比例关系
xXc=yYc=1Zc(2-4) \frac{x}{X_c} = \frac{y}{Y_c} = \frac{1}{Z_c} \tag{2-4} Xcx=Ycy=Zc1(2-4)
由于激光条纹中心点在空间中属于激光平面,因此空间点PCP_CPC还满足其所在的光平面方程,(通过标定可得a b c 与 d)
L:  aXc+bYc+cZc=d(2-5) L: \; aX_c + bY_c + cZ_c = d \tag{2-5} L:aXc+bYc+cZc=d(2-5)

计算步骤如下:由方程2-4可知
x=XcZc,y=YcZc(2-6) x = \frac{X_c}{Z_c}, \quad y = \frac{Y_c}{Z_c}\tag{2-6} x=ZcXc,y=ZcYc(2-6)
将2-6带入2-5,可得
a(xZc)+b(yZc)+cZc=d(2-7) a(xZ_c) + b(yZ_c) + cZ_c = d\tag{2-7} a(xZc)+b(yZc)+cZc=d(2-7)
Zc(ax+by+c)=d(2-8) Z_c (ax + by + c) = d\tag{2-8} Zc(ax+by+c)=d(2-8)
因此,可得
Zc=dax+by+c(2-9) Z_c = \frac{d}{ax + by + c}\tag{2-9} Zc=ax+by+cd(2-9)
Xc=dxax+by+c,Yc=dyax+by+c(2-10) X_c = \frac{dx}{ax+by+c}, \quad Y_c = \frac{dy}{ax+by+c} \tag{2-10} Xc=ax+by+cdx,Yc=ax+by+cdy(2-10)
通过以上关系式可得知归一化平面中的条纹中心点与相机坐标系下的三维空间点的映射关系.


相机坐标系下的三维点与归一化平面中的坐标映射关系为:
(XcYcZc)=dax+by+c(xy1)(2-11) \begin{pmatrix} X_c \\ Y_c \\ Z_c \end{pmatrix} = \frac{d}{ax + by + c} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \tag{2-11} XcYcZc=ax+by+cdxy1(2-11)
通过相机模型, 我们知道像素坐标系与归一化平面坐标系之间的关系为摄像机的内参矩阵K。
(uv1)=K(xnyn1)=(fx0cx0fycy001)(xnyn1)(2-12) \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} =K \begin{pmatrix} x_n \\ y_n \\ 1 \end{pmatrix} =\begin{pmatrix}f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1\end{pmatrix}\begin{pmatrix} x_n \\ y_n \\ 1 \end{pmatrix}\tag{2-12} uv1=Kxnyn1=fx000fy0cxcy1xnyn1(2-12)


单线激光整体重建流程:

  1. 条纹中心提取
  2. 将像素坐标系下的点转换到归一化平面
  3. 适用光平面方程,重建在相机坐标系下的三维点坐标
http://www.xdnf.cn/news/19773.html

相关文章:

  • 避坑指南!解决Navicat运行SQL成功但没有表的问题
  • 达梦数据库在大小写不敏感的情况下,如何使查询比较中依旧可以做大小写敏感比较?
  • FFmpeg命令行音视频工具:高效实现格式转换与批量处理,支持音频提取与精准视频剪辑
  • Parasoft C/C++test如何实现开发环境内嵌的安全检测
  • 多工况切换定向:陀螺定向短节 vs 传统陀螺工具,谁的适配性更强?
  • 【单片机day01】
  • 学习React-8-useImmer
  • TDK InvenSense CH201距离传感器
  • 还在从零开发AI应用?这个项目直接给你500个现成方案!!!
  • Autosar之Det模块
  • 智慧工地如何撕掉“高危低效”标签?三大社会效益重构建筑业价值坐标
  • 贝叶斯定理
  • WAF与CDN在网络安全中的协同作用
  • GitLens VS Code插件测评:助力代码协作高效查提交记录,轻松解决分支管理与代码冲突
  • `<meter> ` 元素 无需 JavaScript/CSS 实现密码强度提示
  • esp32小智ai对话机器人
  • 【字节拥抱开源】 UXO 团队开源 USO: 通过解耦与奖励学习实现的统一风格与主题驱动生成
  • 万和电气卢宇聪:在“慢周期”做本质的事
  • GoLand IDE 无法识别 Go 工作区中的引用,如何解决?
  • 5.kafka集群安装
  • 区间DP .
  • Android U Lmkd源码解析
  • maven 常用指令
  • 二叉树的非递归遍历 | 秋招面试必备
  • Redis分布式缓存
  • RabbitMQ消息堆积问题排查:concurrentConsumers 配置的坑与解决方案
  • js设计模式-职责链模式
  • More Effective C++ 条款24:理解虚拟函数、多继承、虚继承和RTTI的成本
  • VMWare ubuntu24.04安装(安装ubuntu安装)
  • 复杂PDF文档如何高精度解析