当前位置:网站首页>结构光三维重建(二)线结构光三维重建
结构光三维重建(二)线结构光三维重建
2022-08-05 04:57:00 【伴君】
前言
在近景三维重建领域,结构光技术可以说是应用最广泛的,尤其在工业领域。该技术目前具有高精度和无视弱纹理等优点,但复杂的室外环境还是会对该技术造成一定程度的干扰。目前用的比较多的结构光分别两大类:线结构光以及条纹结构光。接下来我来简单介绍一下线结构光三维重建。
1 原理
线结构光三维重建测量系统,是基于三角测量的原理进行三维重建。整个成像系统示意图如下图所示,我们可以看到主要分为两个子系统,即激光发射器构成的激光系统和相机构成的成像系统。首先我们假定所有点的关系基于相机坐标系,成像系统基于相机标定模型,相机标定完成后得到相机内参,基于相机内参可以得到目标物体点P在成像面P’点的位置坐标(Xc,Yc,Zc)。当P’点的位置坐标已知后,Oc坐标为(0,0,0),因为空间直线OcP’直线方程可以得到。空间直线方程得到后,联立激光发射器投射的光平面方程,直线与平面的交点P(Xw,Yw,Zw)即可通过求解得到,但这一步得到的坐标为相机坐标系下的坐标,将该点坐标乘以相机标定过程中得到的相机外参即可得到该点世界坐标。
2 步骤
结构光三维重建通常分为三步:1)相机标定,标定出相机的内外参数;2)结构光条纹中心的提取即激光线的提取;3)结构光标定即光平面的标定;即将世界坐标系下的三维点转换为相机坐标系下的三维点,通过多个相机下的三维坐标点拟合出光平面,然后拟合的光平面可以用来完成三维重建。
整个过程的详细路线图如下图所示:
激光线提取算法如下所示:
光平面标定:
有直接标定和间接标定两种办法。直接标定法就是直接获取光条上特征点的世界坐标(Xw,Yw,Zw),进而求得光平面,空间平面方程(光平面方程)可以表示如下AX+BY+CZ = 1,有多个特征点的世界点坐标,通过最小二乘即可拟合出光平面方程。
间接标定法并不是在光条上直接获得特征点的世界坐标,而是首先对摄像机进行标定,通过提取标定靶上的光斑中心和对应的世界坐标,由摄像机模型确定出投影矩阵M,然后拍摄光条图像,通过图像处理和计算提取光条上各点的像素坐标,经投影矩阵进行坐标变换后,获取与该像素坐标对应的世界坐标,进而构造方程AX+BY+CZ = 1,并通过最小二乘解求出A、B、C。
3 双目线激光三维重建
是一种基于线激光扫描和双目立体视觉相结合的三维测量系统,该种线激光扫描系统可以避免传统单相机扫描技术中标定激光平面的过程,提高三维测量精度。该测量系统由两个相机、一个先激光投射器和一个旋转电机组成,如图1所示,测量时通过向被测物体投射单条线激光条纹,然后由旋转电机带动激光条纹扫描整个被测物体,扫描的同时立体视觉系统以指定的帧率拍摄被测物体;根据所拍摄的含有激光条纹的立体图像对,由立体视觉的极线约束和激光条纹特征计算出立体视觉系统之间的对应性关系;最后根据预先标定好的系统参数按照双目立体视觉的方法计算出物体的三维点云数据。简单来说,就是通过相机标定、立体校正得到行(或者列)对齐的图像,然后提取出激光线,由于每一行(或每一列)在左右图像上仅有唯一的点相对应,所以行号(或列号)相同的激光点即可认为是对应的匹配点,然后根据视差,求得三维坐标。
当然了,这是对于单条激光线而言的,如果是双目多线激光,则每一行(或每一列)在左右图像上没有唯一的点相对应,这时可以把我们的激光平面再捡回来了,即通过激光平面来约束得到唯一的匹配点。具体措施就是,左相机提取出的激光点像素坐标通过激光平面得到3D坐标,通过左右相机的旋转平移矩阵,将其转换到右相机坐标系下,然后转换到右影像的像素坐标,判断右影像上的激光点的像素坐标是否有与之重合的,重合的则为对应的匹配点,然后根据视差得到三维坐标。
4 总结
最后值得一提的是,双目多线激光还存在着一点小问题,比如,有一部分多的误匹配点难以剔除。目前论文里说到的剔除误匹配点的方法,都有很大的局限性,且效果不会很明显。
理论比较简单,这里就不放源码了。
边栏推荐
- mutillidae download and installation
- [8.2] Code Source - [Currency System] [Coins] [New Year's Questions (Data Enhanced Edition)] [Three Stages]
- Mysql's redo log detailed explanation
- 请写出SparkSQL语句
- Mvi架构浅析
- After controlling the export file in MySQL, it becomes \N. Is there any solution?
- LeetCode:1403. 非递增顺序的最小子序列【贪心】
- Excel画图
- Flutter TapGestureRecognizer 如何工作
- Paparazzi: Surface Editing by way of Multi-View Image Processing
猜你喜欢
随机推荐
dedecms报错The each() function is deprecated
mysql数据库表什么字段类型的存储长度最大?
bytebuffer internal structure
What is ASEMI photovoltaic diode, the role of photovoltaic diode
Detailed explanation of Mysql's undo log
【cesium】加载并定位 3D Tileset
Redis - 13. Development Specifications
ESP32 485光照度
C#关于set()和get()方法的理解及使用
u-boot debugging and positioning means
小程序_动态设置tabBar主题皮肤
Flutter学习-开篇
Mysql's redo log detailed explanation
uboot开启调试打印信息
[8.2] Code Source - [Currency System] [Coins] [New Year's Questions (Data Enhanced Edition)] [Three Stages]
jvm 三 之堆与栈
Feature preprocessing
仪表板展示 | DataEase看中国:数据呈现中国资本市场
程序开发的一些常规套路(一)
Some conventional routines of program development (1)

![[BJDCTF2020] EasySearch](/img/60/464de3bcdda876171b9f61ad31bff1.png)






![[Geek Challenge 2019]FinalSQL](/img/e4/0c8225ef7c5e7e5bdbaac2ef6fc867.png)
