双目结构光系统总结
1.一般的立体匹配的方法是基于左右两幅图像各像素的灰度相似性进行同名点判断的,哈尔滨工业大学的赵焕谦2017年的硕士毕业论文《基于结构光和双目视觉的三维重建系统研究》中提出了一种基于灰度相似性的匹配优化算法。采用双目设计并投射格雷码编码图案,在进行左右图像立体匹配时,以像素点的格雷码进行辅助判断。
首先,读入左右相机采集的图像,对图像进行双目极线校正处理,得到行对齐的左右图像。然后对左相机上每一个采样点,读入该点的横坐标值,在右图像上寻找横坐标值相同的一行点(极线约束),对该行所有的点读取格雷码值,判断是否和采样点的格雷码值相同,如果相同则匹配成功。
以上这种方法比较简单,系统的标定不牵涉到投影仪的标定,采用双目系统标定的方法即可。一般在基于相位匹配的双目系统中,投射格雷码图案是用来确定折叠相位的展开级次进行相位展开的。
2.在阅读理解这篇文献的基础上,对合肥工业大学的肖亮2019年的硕士毕业论文《编码结构光投影双目视觉三维测量技术研究》进行理解。该论文中同样不是基于相位信息进行匹配的,但和《基于结构光和双目视觉的三维重建系统研究》相比,该论文中用到了投影仪标定,左右点云融合的方法,相对复杂了一点。
该文的整体思路是:左相机和投影仪组成一个单目结构光测量系统,右相机和投影仪也组成一个单目结构光系统。将左右两个子系统组合起来,就获得了双目结构光测量系统。两个子系统各自获得以自己系统中的相机为参考坐标系的点云坐标,最后将左点云和右点云重合起来的过程就是点云融合。
以左相机和投影仪组成的单目结构光系统求解左相机视点下的3D点云为例,在系统获得标定参数,并且完成格雷码解码获得左相机和投影仪上的对应点后,就可以运用空间三角法(三角视差法)求解出左相机视点下的被测物表面的三维坐标。同理,用同样的方式测出右相机视点下的被测物表面的三维坐标。
该系统标定的话,需要标定左相机和投影仪系统以及右相机和投影仪系统。不需要标定左相机和右相机的位置关系(最后左右点云融合用的是基于ICP改进的算法,本质上也是求解R和T)。以左相机和投影仪系统的标定方法为例,投影仪按照逆向相机处理,二者最终的位置关系标定按照双目相机标定进行。左相机的标定用张氏标定法即可,投影仪的标定,因为投影仪不能拍摄棋盘格,所以需要借助左相机找到棋盘格角点在投影仪图像坐标系下的坐标。这里的方法就是通过所投射的格雷码编码图案,对采集的结构光序列进行解码,此时左相机的每一个像素都对应着投影仪里的行和列。然后通过左相机拍摄3幅棋盘格图片并提取角点获得三幅以上的左相机下的棋盘格角点图,通过求解每一个在左相机图像中的角点估计一个到投影仪平面的局部的单应性矩阵建立左相机图像角点与投影仪图像角点的联系从而完成标定获取投影仪图像下的角点图进而对投影仪进行标定。同理,用同样的方法标定右相机和投影仪系统。
问题1:对于不用对投影仪进行标定的双目结构光系统,是不是不涉及到点云融合的过程?
另外,读者可以思考一下双目结构光系统什么时候需要对投影仪进行标定?(一般只有单目结构光系统需要标定投影仪;双目结构光中的投影仪只负责投射所需图案,双目进行匹配即可完成三维测量。有时根据所用系统的重建原理可以对投影仪进行标定对双目匹配进行辅助,需要根据所采用的方案具体分析。)
3. 为了保证三维测量的精度,双目立体匹配的实现通常利用相位信息进行匹配。这种方法的具体实现有很多种方法,下面仍然以双目结构光系统进行说明。
⑴以相位(这里以绝对相位为例)作为立体匹配基元的匹配方法总的来说有两种(以此原理选择投射条纹图是垂直和水平方向上的还是垂直方向上的):
1.双方向相位:向物体表面依次投射u, v两个正交方向的正弦条纹并由左右相机分别采集(即水平方向和垂直方向的条纹都需要投射),分别获得垂直方向上的相位信息和水平方向上的相位信息。可以理解为:左右视图中水平方向相位和垂直方向相位都一致的点为同名点。
2.单方向相位结合极线约束:根据极线约束,左右图像的同名点在同一条极线上,已知左图像上的点寻找右图上同名点的过程中沿极线搜索即可,假如再辅助以相位信息会大大提高匹配的效率。此时,投射一个方向的条纹图即可(问题2:垂直方向上?在csdn上通过请教某位博主,他这样答道:这与双目相机的摆放有关的,相机呈水平放置,需要垂直方向的条纹;相机呈竖直放置,需要水平方向的条纹。一般相机都是水平摆放,所以一般是垂直方向的条纹。)
以上内容在《相位辅助光学三维测量系统的标定方法》2.2.2对应点搜索章节可以查询,在《 条纹投影轮廓术的高效立体匹配方法研究》1.2.2条纹投影立体匹配研究现状章节也有介绍。在《基于双目结构光的三维测量技术研究》中,作者采用的就是投射水平和垂直两个方向上的条纹图,该论文所设计的双结构光系统不牵涉投影仪的标定。在一般的单摄像机单投影仪系统中,投影仪的标定一般采用双方向相位约束的办法从相机捕获并提取的角点信息获得投影仪对应图像坐标,然后按照对摄像机标定的方法对投影仪进行标定。具体方法在《结构光测量技术中的投影仪标定算法》中。
这里提一下在单摄像机单投影仪系统中另一种典型的相位—高度映射原理,这一原理也可用于双目结构光系统中进行辅助工作(这在接下来的讨论中会涉及)。相位—高度映射原理指的是依然通过条纹图求解出相位信息,然后不是把投影仪当做相机在两者之间进行立体匹配,直接通过相位信息和提前标定好的相位—高度映射系数即可获得被测物体的高度信息。物点的三维坐标只与相机像平面上得到的绝对相位值有关,所以对于固定的相机一投影仪模型,利用该方法在相机采集并计算出绝对相位之后通过多项式计算就可以得到物体三维坐标。在文献《相位辅助光学三维测量系统的标定方法》中的1.2.2工作原理章节有简单介绍;在文献《数字条纹投影三维测量技术研究》中的1.2.2.2三维重建效率章节有初步的原理介绍;在文献《条纹投影轮廓术的高效立体匹配方法研究》中有特定的章节对相位—高度映射进行了详细的介绍,但是考略到由浅入深,建议先看前两篇里的。此外,csdn有一篇博文《相移法中相机投影仪的标定信息如何与相位差联系》通过几何关系对该原理进行了分析,也可以查看,有助于理解。
⑵相位提取的方法:(1)中所提及的问题主要是投射条纹图的两种选择,接下来要做的是从条纹图中获取相位信息,即相位提取。对于求解一个方向如垂直方向上的相位信息:傅里叶变换法只用投射一幅图像即可实现相位提取,适用于动态低精度测量。相移法需要投射三幅以上的图像才可,适用于静态低精度测量。文献里采用相移法的很多,如如雷贯耳的三步相移法、四步相移法等,若采用单方向相位结合极线约束的方法的话,三步相移法投射3幅条纹图即可。若采用双方向相位的方法的话,三步相移法投射2*3=6幅条纹图。
⑶相位展开的方法:一般基于相位信息的立体匹配都是基于获得的左右视图下的绝对相位信息进行的。(2)中所提及的相位提取的两种方法,即傅里叶变换轮廓术和相位测量轮廓术,它们获得相位都是包裹相位(折叠相位、相对相位、相位主值),得到的相位都在(-π,π]之间,需要通过相位展开获得绝对相位。这里能采用的方法还是很多的。总的分为空间相位展开算法和时间相位展开算法,这里先以比较常见的时间相位展开算法为例进行总结,比较基础,一般的文献里都会提及,时间相位展开算法中比较常用的是多频外差法和Gray编码法,可参阅《基于数字光栅投影的结构光三维测量技术与系统研究_李中伟》。
Gray编码法的原理是确定每个像素点折叠相位的展开级次。绝对相位计算时,首先采用相位移算法计算每个空间点的相位主值和每个点的Gray编码值B(x, y),然后根据编码值对相位主值进行展开,即可得到光栅图像的绝对相位值。具体操作的话是先通过相位移算法向被测物投射多幅条纹图(或者傅里叶法投射一幅),目的是为了获得相对相位,再投射格雷码编码图案获得每个点的编码值。问题3:那么需要投射多少幅格雷码编码图案呢?在文献《结构光三维测量中相位相关技术研究》中的4.1.2章节有提到。格雷码与相移相结合的绝对相位编码法的结构光编码图总数为:格雷码位数M+相移步数N
多频外差法的话阐述起来比较复杂,相关文献里讲得都比较清楚。简单理解是投射多个频率的条纹图,结合相位提取的相位移算法进行理解。比如你要获得垂直方向上的绝对相位,通过单个频率的四步相移的方法的话,你需要以这个频率投射4幅条纹图,只能获得相对相位。根据多频外差法的原理,投射三种不同频率的四步相移图就是三频四步,总计3*4=12幅条纹图,可以获取绝对相位图。
以上两种典型的时间相位展开算法可以参阅李中伟的《基于数字光栅投影的结构光三维测量技术与系统研究》。
此外,简单的提一下空间相位展开算法。空间相位展开是在单幅折叠相位图上利用邻近像素间的相位关系展开相位。在文献《Novel method for structured light system calibration》中提到了一种办法。这篇文献说得是单目结构光系统也就是单摄像机单投影仪的标定,标定的方法在前面有提到过,采用双方向相位约束的办法从相机捕获并提取的角点信息获得投影仪对应图像坐标,同样的这里的相位信息一般也需要是绝对相位。文献《Novel method for structured light system calibration》中,先通过三步相移法获取垂直方向上和水平方向上的相对相位,然后再通过一种空间相位展开算法分别计算两个方向上的绝对相位值。
如上图,第一行左三幅图是相机拍摄到的求取水平方向上相对相位信息的CCD条纹图,第四张是用来解释实现空间相位展开的CCD图上的中心线图,第五幅是投影仪DMD条纹图、可以理解为是对应的求解的绝对相位图。以求取水平方向上的绝对相位为例,所采取的的相位展开理念是:首先,假设求得的绝对相位图水平中心线上的绝对相位值都为0。然后,求取相对相位图上水平中心线上的平均相对相位值。这样相位展开的话,这条线上的平均相对相位值展开后都变成了0。那么相对相位图上其他位置上的展开相位可以用它们的相对相位值减去相对相位图上中心线上的平均值去表示。
⑷基于包裹相位的匹配(可以理解为文献里说得立体相位展开法):上面介绍了相位提取以及相位展开的方法,一般双目系统投射条纹图利用相位信息进行的立体匹配的话都上这个流程,也就是基于绝对相位的匹配。为了增加相位信息匹配的正确率,会直接利用相对相位值(相位主值)并添加其他约束条件进行匹配(匹配时需要注意包裹相位的周期性,所谓周期性,就是根据左视图某一点的包裹相位对右视图中同名点搜索匹配的话,右视图中会出现不止一个与其包裹相位一样的点,这样的点的个数取决于投射条纹的周期数)常见的方法有基于相位信息辅助的散斑匹配方法,该方法不用标定投影仪,通过投射在相移图案中嵌入散斑的图案实现。另外若不采用散斑利用投影仪的话,可以对投影仪进行标定,利用其相位—高度映射原理进行约束,具体方法也会在下文有所提及。这里先简单介绍一下散斑。
首先介绍一下文献《基于相位信息辅助的散斑匹配三维测量方法》里的方法。该系统首先在物体表而投影随机生成的散斑图案,并利用极线约束找到左侧摄像机获得散斑图像中每一像素点在右侧散斑图像中的初始匹配像素点。再通过投影光栅相位法获得主值相位,对每一对匹配点进行亚像素的精确定位。第一步利用散斑匹配时是通过判断两点的相关性(理解该过程中的窗口),具体方法可见文献。另外,文章中分析了某一对匹配点分别位于周期首尾的情况。
然后介绍一下文献《结合极线约束和散斑相关的实时三维测量方法》里的方法。文章的思路比较清晰,以左视图中的某一点P搜索同名点的过程为例,第一步:通过相移法获取左右相机的包裹相位图;第二步:通过极线约束在右视图极线上找到与P点具有相同包裹相位的N个候选点,N为所投射条纹的周期数;第三步:对于极线上处于各个周期的候选点,分别计算左、右相机相移均值灰度图像对应像素点的光强平方差之和(SSD),保留3个候选点(参考文献理解)。第四步:利用散斑的相关性确定正确的候选点。找到了这个点,也就找到了这个点所在的周期数也就是折叠相位需要展开的级次。同理,其他点也进行此操作,都可以确定需要展开的级次,这个过程可以理解实现了相位展开。该论文中是把它当作相位展开看待的。
最后,提一下另一种双目结构光系统,不用散斑而是借助于单目投影仪的相位—高度映射原理进行辅助实现立体匹配。这种方法叫基于三视点极线约束原理的高效立体匹配(三视点:左相机+投影仪+右相机),该方法依然是基于包裹相位实现的。为了更好的理解该方法的思路,先理解一下基于相位—三维映射原理的快速立体匹配方法,这种方法是基于绝对相位进行立体匹配的。这两种方法都需要通过标定左相机和投影仪获得相位—三维映射系数。这两种方法均是在文献《 条纹投影轮廓术的高效立体匹配方法研究》中提出来的。
先说一下基于相位—三维映射原理的快速立体匹配方法。前面提到过单相机和单投影仪的相位—高度映射原理,通过标定得到系统的映射系数,已知相机平面里的一点和它的绝对相位就可以映射出该点在空间中的深度信息。这个双目结构光系统的方法就是利用这一原理进行辅助立体匹配的,利用左相机和投影仪结构的空间约束条件,缩减双目匹配时对应点的搜索范围。系统分成两个部分:第一个部分为由左相机和投影机组成的相位—三维映射系统几何模型,用来快速定位对应点搜索范围,辅助对应点查找;第二部分为由左相机和右相机组成的双目立体视觉系统几何模型,用来定为精确对应点。具体思想是:仍然以左相机平面中的点P为例,首先利用左相机和投影机组成的相位—三维映射系统,已知P点和该点的绝对相位值即可获取其空间的位置P,再将P通过投影投射到右相机平面上得到理论上与左相机平面中P对应的点P*。而真实情况下,右相机平面中与P对应的点并不会和P*重合,两者在极线上存在一定的距离误差d,所以通过标定确定d,这样在双目进行匹配时,只用在d这个范围内搜索P的对应点即(和下图中的点没有对应)。
接下来说一下基于三视点极线约束原理的高效立体匹配。在理解上面的方法的基础上再来理解这种方法就相对容易了,这种方法是基于折叠相位进行立体匹配的。
上文中有地方已经提到,折叠相位的周期性的问题。如果采用折叠相位进行立体匹配,这个问题是必须要考虑的。上图中的三视点约束原理很简单,结合住折叠相位的周期性和极线约束的知识可以在文献的详细介绍中理解。
这里先简单介绍一下该方案的大概思路:仍然以左相机视图下的一点P为例,由于折叠相位的周期性,P点在投影仪视图和右相机视图下都有多个点可以对应。首先考虑左相机和投影仪的相位—高度映射,先映射出P点在空间中的位置,而这必须要知道P点的绝对相位才可以。现在我们只知道该点的折叠相位,因为投影仪折叠相位的周期性,P点对应于投影仪视图下多个点,每个点出的折叠相位都对应一个展开级次K,根据视察约束(文中的空间相位约束)可以确定这几个点各自相对于P点出包裹相位的展开级次,这样就可以求出P点对应的多个绝对相位值,全部映射到空间中。然后,P点在右相机视图下也对应多个备选点。最后,将空间中的这几个点投影到右相机平面中,重合的点就是P点在右相机平面中要匹配的点。