结构光三维测量(数字光栅投影)
结构光三维测量(数字光栅投影)
结构光三维测量(数字光栅投影)
结构光三维测量(数字光栅投影)
- 结构光三维测量系统
- 单目测量系统
- 双目测量系统
- 单目系统测量实例
- 光栅生成
- 三维点云重建
目前对于三维视觉来说,有很多种技术,例如双目/多目视觉法、TOF法、散斑法、结构光等等,不同的方法有着各自不同的应用场景和范围。对于工业的产品测量、识别,检测来说,结构光方法是目前比较主流的方法。结构光方法拥有高精度、高密集点云、高速的优点,适用于三维重建、缺陷检测、智能抓取、人脸识别、视觉导航等一系列工作。
结构光主要分为点、线、面三类测量结构,本博客主要从面结构光(数字光栅投影测量)阐述其测量原理和重建效果,面结构光主要投影光栅图像到测量物体表面,然后光栅经过物体面型调制之后被相机采集,通过一系列解相位,然后经过系统标定好的参数,将相位转换为三维点云。
单目测量系统
单目测量系统,就是一个相机+一个投影仪的测量结构,该方法需要对投影仪进行标定,首先对光栅进行投影,然后求解相位信息,再把相位转换到三维点云。对于求解相位信息有很多种成熟的方法:例如(1)格雷码方法(2)多频外差方法(3)倍频法(4)phase-coding法等等。将相位转化为三维点云也有很多经典的方法,例如(1)相位差法(2)东南大学达飞鹏老师的8参数方法(3)反向相机方法。后两种方法最为灵活,应用相对也更为广泛,下面会具体进行描述。下图改自南理工左老师的论文图。
双目测量系统
双目测量系统,就是双目相机+一个投影仪的测量系统,该方法主要利用相位信息进行双目匹配,然后实现三维重建。该方法的好处就是对投影仪无需进行标定,且现有双目测量有很多优秀的库函数可以调用,例如Opencv中包含很多标定、匹配、畸变校正、立体校正的代码。
单目系统测量实例
下面结合具体的测量实例进行详细介绍,包含光栅生成,相位解包,和三维点云转换。
光栅生成
本次我们采用四步相移+格雷码的方法进行物体测量,四步相移为了求解包裹相位,但是包裹相位是一个一对多的映射函数,因此需要利用格雷码将包裹相位展开,求取一个一对一映射函数的绝对相位。四步相移的光栅的形式如下:
I
1
(
x
,
y
)
I_1(x,y)
I1?(x,y) =
a
(
x
,
y
)
a(x,y)
a(x,y) +
b
(
x
,
y
)
b(x,y)
b(x,y)cos[
?
(
x
,
y
)
\phi(x,y)
?(x,y)]
I
2
(
x
,
y
)
I_2(x,y)
I2?(x,y) =
a
(
x
,
y
)
a(x,y)
a(x,y) +
b
(
x
,
y
)
b(x,y)
b(x,y)cos[
?
(
x
,
y
)
\phi(x,y)
?(x,y)-
π
/
2
\pi/2
π/2]
I
3
(
x
,
y
)
I_3(x,y)
I3?(x,y) =
a
(
x
,
y
)
a(x,y)
a(x,y) +
b
(
x
,
y
)
b(x,y)
b(x,y)cos[
?
(
x
,
y
\phi(x,y
?(x,y)-
π
\pi
π]
I
4
(
x
,
y
)
I_4(x,y)
I4?(x,y) =
a
(
x
,
y
)
a(x,y)
a(x,y) +
b
(
x
,
y
)
b(x,y)
b(x,y)cos[
?
(
x
,
y
)
\phi(x,y)
?(x,y)-3
π
/
2
\pi/2
π/2]
利用四步相位我们可以求解包裹相位,
?
(
x
,
y
)
\phi(x,y)
?(x,y) = atan2[
I
1
(
x
,
y
)
I_1(x,y)
I1?(x,y)-
I
3
(
x
,
y
)
I_3(x,y)
I3?(x,y),
I
2
(
x
,
y
)
I_2(x,y)
I2?(x,y)-
I
4
(
x
,
y
)
I_4(x,y)
I4?(x,y)]
其中atan2[]是一个四象限反正切函数,于是我们就得到了包裹相位,其具体形式如下图所示,
可以看出x与y是一个一对多的函数,我们需要进行展开,此时我们需要一个条纹阶次
k
(
x
,
y
)
k(x,y)
k(x,y),然后通过下面的公式,完成相位展开
Φ
(
x
,
y
)
\Phi(x,y)
Φ(x,y) =
?
(
x
,
y
)
\phi(x,y)
?(x,y) + 2
π
×
k
(
x
,
y
)
\pi\times k(x,y)
π×k(x,y)
其展开的过程如下图所示,格雷码的作用就是为了求解这个条纹阶次
k
(
x
,
y
)
k(x,y)
k(x,y)。
格雷码是由0或1的码字构成的,因此每张格雷码可以区分出两个周期的阶次
k
(
x
,
y
)
k(x,y)
k(x,y),因此为了获取求解更多的阶次信息,更多的格雷码就需要,格雷码的数量n与阶次的关系为
2
n
2^n
2n。例如如下图的方式是三张格雷码光栅,第一个阶次的格雷码字为000,第二个为100,以此类推各个周期的格雷码都不相同,因此可以确定出8个阶次,结合包裹相位于是这样我们就可以得到绝对相位信息。
三维点云重建
本博客采用反向相机法将相位信息转化为三维点云,首先对圆形标定板进行了重建,其效果如下图所示,
利用50w分辨率相机对瓶盖进行三维重建,其纹理信息清晰可见
然后采用500w高分辨率相机对雕像进行三维重建,
如需了解更多,交流合作可以联系QQ:1091454117。
结构光三维测量(数字光栅投影)相关教程
-
Vue第2章Vue目录结构分析常用指令-数据绑定属性绑定渲染数据循环
Vue【第2章】:Vue目录结构分析,常用指令-数据绑定、属性绑定、渲染数据、循环渲染数据... Vue目录结构分析 常用指令:数据绑定、属性绑定、数据渲染 1.整体目录说明: 2. .vue文件说明: .vue的文件称为组件,里面有三部分组成:template、script、style
-
【数据结构·考研】Floyd算法
【数据结构·考研】Floyd算法 Floyd算法 Floyed 算法与 Dijkstra 算法的思想完全一样,遍历整个邻接矩阵,比较每一条边可否加入循环中的两边之间来短接。 Floyed 算法基于动态规划算法,可以允许有负权值,但不可以有带负权值的边存在。 首先,初始化一个邻接
-
MyISAM 和 InnoDB存储引擎(二者和表结构有关系)
MyISAM 和 InnoDB存储引擎(二者和表结构有关系) MyIsAm :是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的 也就是说: InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引
-
【数据结构·考研】Prim算法
【数据结构·考研】Prim算法 Prim算法 Prim 算法和 Dijkstra 算法很相似,都是从一个点开始把点不停加入到点集合。 Prim算法适合于边疏密的图。 首先定义邻接矩阵、标志数组和一个不断更新的 minCost 数组用来求当前点集到其他点的最小权值。 #define N 6 vec
-
LeetCode 剑指Offer 09. 用两个栈实现队列(数据结构)
LeetCode 剑指Offer 09. 用两个栈实现队列(数据结构) 题目链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/ 思路: 如图所示,我们用第一个栈支持插入操作,第二个栈支持删除操作。 根据栈先进后出的特性,我们把要插入
-
设备管理
设备管理 Java学习笔记 设备管理 磁盘结构 磁盘调度算法 本文转载自 计算机操作系统之设备管理,如有侵权,联系博主速删! 设备管理 盘面(Platter):一个磁盘有多个盘面; 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; 扇区(Track Sect
-
Python中三维矩阵图像的解释
Python中三维矩阵图像的解释 对于一个有m*n个像素的图片,表示为三维矩阵就是(m, n, 3),其中m表示高,n表示宽,3表示该元素的RGB色彩值。也就是下面这个矩阵: 每个蓝色的框代表的就是一个像素,该像素的值为rgb色彩值,如可以是[70 69 64],该像素的R值为7
-
计算机体系结构知识笔记
计算机体系结构知识笔记 计算机体系结构结构:计算机的概念结构、功能和性能特性,它从一个更高的层次对计算机的结构特征等宏观特征进行研究。 1、计算机体系结构分类 2、CISC和RISC 指令体系结构(ISA):一个处理器支持的指令和指令的字节级编码,不同的处