【三维重建】相移法+格雷码

本篇文章介绍一种稠密点云的获取方式------条纹结构光三维重建算法。

在学习此算法前,我们需要对基于视觉的三维重建算法有一定了解。

需要了解什么是相机模型、相机标定以及三角化的相关知识。

【三维重建】摄像机几何-CSDN博客

【三维重建】摄像机标定(张正友相机标定法)_相机内参矩阵和外参矩阵怎么获取-CSDN博客

【三维重建】三角化-CSDN博客

当我们得到两个相机的内参、外参后,就能通过两个视图的匹配点计算出该点的三维坐标。但是一般的特征匹配算法(SIFT、SURF)只能提取特征点,并且只有正确匹配才能得到正确的三维坐标。因为两个视图上能够成功匹配的点比较少, 因此通过这种方式获得的点云是稀疏的。

结构光的重建算法和三角化是一样的,不一样的是结构光算法通过向物体主投影带有特殊编码的图案,提高了两个视图成匹配点的个数,可以得到更多的三维点。

下面介绍一种常见的结构光算法:相移法+格雷码

单目结构光系统由一个相机和一个投影仪组成。我们可以把投影仪看作是一个逆相机,双目视觉中,需要成功得到两个相机视图中的匹配点对儿,那么在单目结构光系统我们就需要得到相机和投影视图的匹配点对儿。

知道了做什么,接下我们介绍一下怎么做?如何得到相机和投影视图的匹配点对儿?

相移法

首先,需要先生成待写入投影仪的理想N步相移条纹

通常对于N步相移来说,生成第k幅条纹图案的公式如下:

这个公式是一个正弦函数,k的增加可以看作正弦函数向左移动的过程。

对这个曲线的值进行repeat操作,就能生成下面幅图,图的每一行对应的就是正弦函数的值

根据实际需要设置相应的参数就能生成理想的相移图。

将相移图投影到物体上,再由相机捕获的图叫做实际相移图。

通过N幅相移图,就能计算出每个像素点的相位值

相机与投影仪就能通过相位值建立联系

格雷码

通过相移法解出的相位值是成周期状的,我们需要的是每一行的相位值是唯一的。

通过格雷码进行相位展开,得到唯一的相位值。

通过投影格雷码就能够计算出每一个像素的阶次k,阶次反映的是当前像素在第几个周期。

通过阶次可以计算出绝对相位 :

绝对相位在每一行中是唯一的。

重建

通过归一化,将相位值的取值范围变成0-1之间,知道当前像素的相位值,就能知道当前像素在投影仪中是哪一列。

通过相机-投影仪标定可以得到相机与投影仪的投影矩阵

投影矩阵反应了世界坐标到像素坐标的映射关系。

通过绝对相位图能够知道,相机视图的像素坐标 以及投影仪视图的像素的横坐标

通过联立前面两个公式即可求得三维坐标:

相关推荐
TechLee27 分钟前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法
月华路2 小时前
G1 新生代对象晋升老年代:实现机制与 GC 日志
java·jvm·算法
万法若空2 小时前
排列组合恒等式
c++·算法
Nil2083 小时前
leetcode 105从前序和中序遍历序列构造二叉树
算法·leetcode·职场和发展
一直C3 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
淡海水3 小时前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
戴西软件3 小时前
国内有哪些数据轻量化格式转换软件?
数据库·算法·安全·信息可视化·自动化·rpa
老洋葱Mr_Onion3 小时前
【C++】CSP-J初赛模拟卷七错题整理(作者自用)
c++·算法·深度优先
土星云SaturnCloud3 小时前
Real-ESRGAN超分辨率算法原理与边缘侧部署实践
服务器·算法·ai·边缘计算·real-esrgan
cz07104 小时前
hot100_搜索二维矩阵 II
算法·leetcode