首页 > 其他分享 >结构光|一文详解相移步长的选择问题

结构光|一文详解相移步长的选择问题

时间:2022-10-05 20:02:44浏览次数:55  
标签:一文 公式 投影 选择 相移 详解 灰度 移步


结构光|一文详解相移步长的选择问题_微信

初接触到相移法的同学,很容易出现这样一个疑惑,为什么有的论文中选择三步相移,而有的论文中选择四步相移,更有甚者选择五步相移,不同的相移步长到底有什么好处,在重建时又如何根据当前的场景,选择最合适的相移步长呢?今天笔者就简单捋一捋,不同的相移步长选择究竟可能可以带来什么好处。

首先,我们需要知道,在相移公式中,我们有几个未知数,以通用公式(n步相移法)来看,在n步相移法中,第m张图片的公式表示如下:

???????? = ???? ′ + ???? ′′cos (???? + 2????????/????)

要解这个公式,我们知道????m是图片灰度,N是相移步长,m是当前图片序号,所以真正未知数是???? ′,???? ′′,????.  其中????是我们要求得真正的相位。由于我们有三个未知数,所以要得到完全解,需要三个方程,这就意味着我们的相移步长至少为三,事实上三步相移法也是最常见的相移法选择。

当相移步长增加的时候,我们会有更多的数据去求这三个未知数,从数据处理的角度说,数据越多,解出来的值对抗噪声的效果越好。然而,一般来说,如果仅仅从解数据的角度,三步相移解出来的结果就足够好了。为什么还有选择更高步长的相移呢?

事实上,这和投影仪本身自带的非线性误差有关,一般我们称这种误差是gama效应,这个影响的主要是,如果你投影一组灰度图,从亮度为0一直到亮度255,然而相机捕获到的灰度变化确不是一个线性变化的。这种灰度失真的影响,会直接影响到相移结果,从而导致结果的不准确。虽然现在有许多方法通过标定,拟合一个公式,去消除这种失真对结果的影响,我们称为伽马矫正。这种影响和我们的步长有什么关系呢?有一个简单的结论,通常情况下,相移步长越长,这种灰度失真对相移的影响越小。也就是说,选择相对高的相移步长,就可以抵消一部分这种失真带来的影响。一般来说,五步相移就可以得到一个比较好的抵消,越后面,即使图片更多,抵消的也不是那么大了。

多的相移步长不仅仅可以帮忙抵消非线性误差的影响,还可以帮助解图片中某些由于对投影光的反光造成的过曝点。不同的相移图片投影到同一点的亮度是不同的,越多的相移步长,相机上同一个点经历的投影亮度就越多,即使有一些点是饱和了(灰度直接达到255),但是也有很多没有饱和的点,所以,有以下两个思路:

思路一  当没有饱和的点大于等于3时,根据三个未知数只需要三个方程解的原则,记下没有饱和的点的相移序号,通过推没有饱和的点的公式的解来直接计算出该点的值。缺点:不同点的非饱和的序号不同,对应的公式就不同。如果相移步长太多,则穷举的情况太多,所以这种情况下通常只会使用五步或者六步相移,更多的相移步长情况太复杂。

思路二  根据论文1,当相移周期(一个相移所占的投影列数/行数)为偶数时,可以投影相移周期一半的整数倍的相移步长,比如相移周期是20时,相移步长可以是10,20,30…, 可以有效的重建出反光点的相位值。缺点:需要投影太多图片,在需要考虑重建速度的场景中不是很适用。

综上,相移步长的选择可以根据实际场景来定,如果你的场景追求高的重建速度,投影三步相移图片一般都是最佳的选择,如果你的场景对重建速度的要求不是那么高,而是希望能有更好的精度,不防考虑下四步相移或者五步相移法。如果你还想能够更好的解决下反光的问题,更高步的相移法也值得你去尝试。

论文[1], High-quality 3D shape measurement using saturated fringe patterns

本文仅做学术分享,如有侵权,请联系删文。


结构光|一文详解相移步长的选择问题_灰度_02

▲长按关注公众号



标签:一文,公式,投影,选择,相移,详解,灰度,移步
From: https://blog.51cto.com/u_14439393/5732843

相关文章

  • 【C语言_15】自定义函数和math库函数详解篇!
    一.函数的概念1.什么是函数?函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。函数可以提前保存起来,并给它起一个独一无二的名......
  • 详解js中的对象的深浅拷贝
    前言本文是整理的浅拷贝和深拷贝中涉及的知识点,在工作中是非常重要的,在面试中也是必考的,希望对小伙伴们有所帮助!为什么会产生深浅拷贝?首先我们要知道一个流程1,对象属......
  • 枚举的使用与详解
    一:枚举的引入【1】数学:枚举法:1<x<42<y<5求x+y=6枚举法:一枚一枚的列举出来。前提:有限,确定【2】在java中,类的对象是有限个,确定的。这个类我们可以定义为......
  • JavaScript中的Promise详解
    我们了解Promise之前先了解一下什么是异步,因为Promise是用来处理异步操作的一、什么是异步异步(Asynchronous,async)是与同步(Synchronous,sync)相对的概念。总所周知,Jav......
  • 一文了解JSON
    目录JSON在JavaScript中的使用。json的定义json的访问json的两个常用方法JSON在在java中的使用javaBean和和json的互转List和和json的互转map和和json......
  • Java IO详解(三)------字节输入输出流
    那么这篇博客我们讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam、FileOutStream)  1、字节输出流:Output......
  • Java IO详解(五)------包装流
    根据功能分为节点流和包装流(处理流)节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.处理流:是对一个已存在的流的连接和封装,通过所封装的流的......
  • Java IO详解(七)------随机访问文件流
    1、什么是随机访问文件流RandomAccessFile?该类的实例支持读取和写入随机访问文件。随机访问文件的行为类似于存储在文件系统中的大量字节。有一种游标,或索引到隐含......
  • MySQL的字段默认null对唯一索引的影响详解
    这篇文章主要为大家介绍了MySQL的字段默认null对唯一索引的影响详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪在日常业务开发中,会经常遇到需......
  • 传奇私服制作小地图的知识详解
    有的服务端小地图并不完整,或者有错。GM完全可以自已制作传奇小地图首先,需要准备3个工具1:Photoshop图像处理器2:乐都传奇地图编辑器3:Wil编辑工具制作方法1:打开乐都传奇编辑器......