社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

线结构光平面标定技术全解析:从传统方法到深度学习新前沿

3DCV • 1 月前 • 82 次点击  

点击下方卡片,关注「3DCV」公众号
选择星标,干货第一时间送达

来源:3DCV

「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内有20多门3D视觉系统课程、3DGS独家系列视频讲解、顶会论文最新解读、海量3D视觉行业源码、项目承接、求职招聘等。想要入门3D视觉、做项目、搞科研,欢迎加入!图片

线结构光平面标定是线结构光三维重建的基础,通过借助靶标和算法确定结构光平面在相机坐标系下的方程,实现对被测物体的高精度测量。重点总结了传统及结合相机视觉的两类标定方法,指出了传统标定方法依赖于物理测量和几何关系获取标定点数有限且标定精度低;结合相机视觉算法的标定方法可以更快获得大量且精确的标定点有助于提高标定精度和标定效率。最后对结合深度学习算法进行线结构光平面标定的研究方向进行了展望。

作者:蔡玉强,郭小钊,李旺,张宇航

1 引言

三维重建是指通过传感器数据构建物体或场景的三维数字模型的过程,是获得三维图像信息的关键技术。近年来智能驾驶、智能制造等技术的快速发展对三维图像处理技术提出了更高的要求。三维重建技术主要有结构光法、双目视觉法、激光雷达法、飞行时间法等。其中结构光三维重建系统是一种基于激光三角法的非接触式测量方法,具有响应快、精度高、鲁棒性好、硬件成本低等优点,广泛应用于工业检测、文物保护、逆向工程等领域。

要完成线结构光三维重建,主要有系统标定、图像采集、图像处理、三维坐标计算4个环节。其中系统标定是三维重建过程的基础和关键,主要包括相机标定和结构光平面标定。进行高精度、高鲁棒性的光平面标定是线结构光三维重建的技术难点。

光平面标定可以建立光条图像与三维空间的映射关系,确定所测结构各部位的深度信息,结合二维图像信息,达到对被测物体进行三维测量的目的,主要技术难点是获取大量的高精度标定点。目前主流的标定方法有交比不变性法、拉丝法、齿形靶法。这些方法主要通过物理测量或者几何关系获得标定点,标定精度不高。基于相机标定的标定方法有基于光心的标定法、消隐点法、向量叉乘法、中心线提取直接标定法。这些方法需要借助相机标定,通过相机和算法获得所需标定点,获得的标定点精度较高,光平面标定精度较高,平均测量精度普遍小于   。另外得益于深度学习算法的突破,国内外许多研究将深度学习与传统视觉算法结合,使得线结构光标定在图像处理和结构光特征点提取方面有了新的突破,  - Net网络对图像分割去噪有效提高了图像质量、深度学习骨架提取网络使光条中心线提取更加快速精准、Transformer算法为复杂光照条件下光条纹特征提取提供新的优化方向、轻量化网络可以在保证提取精度的同时应用在低功耗的在线标定设备上。

2 传统的标定方法

线结构光平面的标定的实质是求解线结构光平面在相机坐标系下的解析方程,传统的标定方法主要通过高精度的靶标或者复杂的校准程序,对设备的要求较高过程复杂。标定原理大致是将线结构光平面投射到已知几何参数的标定靶上,利用靶标上的特殊点作为标定点,通过物理测量和计算确定其空间位置进行标定。这类标定方法通常依赖物理装置和几何约束,直接利用物理坐标计算,算法复杂度低,但获取的标定点数量有限,且标定点坐标获取依赖人工操作,容易引入误差,标定精度不高,适用于简易标定、需求精度不高的应用场景。

2.1 拉丝法

拉丝法的原理是将结构光照射在空间内多条不共面金属丝上,如图1所示,将线结构光照射在金属丝上形成亮点,该亮点即为光平面的标定点,通过坐标仪测量出亮点的世界坐标,将标定点的世界坐标转换至相机坐标系下,应用最小二乘法拟合结构光平面。拉丝法应用的设备简单,降低了标定成本,适用于狭小空间标定,此方法所得出的标定点数较少,且标定点本质是细丝上的光斑,得到的光斑与实际标定点的位置有偏差,造成拟合光平面的精度不高,测量系统为  ,被测物体长度为  时测量最大点位误差为  。

2.2 齿形靶标法

齿形靶法应用一个锯齿形的标靶与一个可一维移动的平台实现标定。如图2所示建立世界坐标系,  为齿形靶的移动方向,  为齿形靶基准面,在标定时将线结构光平面与齿形靶基准面垂直即线结构光线正对齿面,结构光平面与齿形靶相交产生一条空间折线,转折点即为标定点,通过测量可确定标定点的世界坐标。沿平行于光平面方向移动齿形靶标并测量移动的位移得到更多标定点,将标定点的世界坐标转换到相机坐标系下,对标定点进行拟合即可确定光平面与相机之间的位置关系。该方法的原理简单,操作相对方便。但需要特制靶标,且获得的标定点数有限。

2.3 交比不变性

交比不变性是指在投影变换下,长度及长度之间的比率是可以改变的,但两个关于长度的比率之间的比值具有不变性。应用交比不变性法通过共线点的交比关系直接计算标定点坐标,无需复杂的辅助设备,对图像噪声和靶标定位误差具有一定鲁棒性,尤其适用于非理想环境下的标定[2]。徐光佑和Huynh[2,2]先后提出应用交比不变性进行激光平面标定,将线结构光投射在具有尺寸信息的标定块上,如 图3(b) 所示,线结构光与标定块相交于一条空间折线,如 图3(c) 所示,通过标定块的尺寸建立三维坐标系,根据标定块尺寸信息可以确定点  、  的坐标,运用交比不变性可以求解出交线上一对标定点  和  的坐标,通过多次移动标定块获取多对标定点,对多点进行拟合求解平面方程。但该方法提取的标定点对数量有限,拟合精度有限。

魏振忠等[2]通过双重交比不变性可以求解线结构光上任意的标定点的坐标。如 图3(d) 所示,已知点  ,  ,首先通过一次交比不变性应用可以确定  和  (  ),再通过一次交比不变性的应用即可获得直线  和   直线上任意一点的坐标。此方法通过应用两次交比不变性确定了更多的标定点,提高了线结构光平标定的精度。此线结构光标定方法在标定过程中需应用专用的标定块,且标定块制造过程较为繁琐,标定门槛较高。许丽等[2]提出一种基于共面靶标的标定方法,该方法选取了更多标定点进行交比计算,通过多次计算求取均值的方法获取了更高精度的标定点,减少了交比计算过程中累积的误差。在选取标定点时通过多条直线与光平面相交和多次移动平面靶标等方法获得了更多的标定点,提高了标定精度。

2.4 总结分析

传统标定方法大多需要复杂的标定靶,结合标定靶的物理参数确定标定点的位置信息。靶标制作困难且靶标精度受人工和制造精度影响,因为需要结合物理测量所以获得的标定点位置精度较低且数量有限。传统标定方法在精度需求较低只需简易标定的场合仍有应用,但对于需求精度较高工作环境复杂的工业环境则需要精度更高,鲁棒性更好的标定方法。表1所示为传统标定方法的对比分析。

3 结合相机视觉算法的标定方法

结合相机视觉算法的线性结构光平面标定方法,本质是通过相机标定获得相机的内参矩阵和畸变参数,建立相机的成像模型,根据靶标特征选取合适的标定点,通过相机得到标定点的像素坐标,结合相机成像模型和标定参数将标定点的像素坐标转换到相机坐标系下,根据标定点的相机坐标求解光平面在相机坐标系下的方程。标定的整体思路是标定点在世界坐标系、图像坐标系、像素坐标系、相机坐标系之间的转换,借助其他约束条件将标定点的二维像素坐标转换成相机坐标系下的三维坐标,通过尽可能多的标定点拟合平面方程。

3.1 结合光束中心点的标定法

张瑞峰等提出一种通过提取光束中心点拟合光平面的方法,图4为标定流程。采用棋盘格作为靶标,图5(a) 所示将结构光投射到棋盘靶标空白部分形成光条,选取光条上一点  ,借助相机标定结果计算出相机光心和特征点  连线所在相机坐标系下的直线方程  。设定棋盘靶标所在平面在世界坐标系下的方程,结合相机的旋转和平移矩阵求得棋盘靶标平面所在相机坐标系下的方程。通过联立直线  方程与棋盘靶标所在平面方程即可确定标定点所在相机坐标系下的坐标,变换标定板位姿以同样方法确定多个不共线的标定点拟合光平面。该标定过程避免了激光线与棋盘格相交,避免了因标定点定位引起的误差,同时增加了标定点数量,提高了标定的鲁棒性和精准度。

李忠祥等通过提取光条亚像素中心点和圆形靶标圆心的像素坐标分别拟合出光条中心线的直线方程  和光条中心点与圆心连线的直线方程  ,如图5(b) 所示。直线方程  和  联立可以求解出光条中心线与圆心连线交点  的像素坐标,求解出  与光心连线的在相机坐标系下的直线方程,最后联立靶标在相机坐标系下的方程求解出标定点  ,最后利用多个不共线标定点拟合光平面方程。此方法求得的标定点都经过拟合直线相交得到,排除了直接通过获取标定点带来的干扰,提高了标定精度和鲁棒性。

于龙龙等提出了一种优化方法,以棋盘格作为靶标,借助相机提取光条纹中心点并拟合出光条在图像坐标系下的直线方程。结合相机内外参数确定光条直线方程在相机坐标系下的方程。如(图5(c)位置)所示,光条直线与相机光心可以确定一个平面  ,其方程为

式中,  为方程系数,  为该平面上的点在相机坐标系下的坐标值,  为相机焦距。将世界坐标系建立在棋盘靶标平面,得靶标所在平面的方程为  ,结合相机内外参数,将平面方程转换到相机坐标系下得到:

式中,  为相机坐标系到世界坐标系的旋转矩阵;  为相机坐标系到世界坐标系的平移矩阵。联立相机坐标系下平面  方程和靶标所在平面方程可得光条纹在相机坐标系下的直线方程。多次调整靶标位姿,获得多条交线并求解直线方程,从而获得足够多的标定点用来拟合光平面,解决了标定点数量少的问题,使标定精度得以提高。

Gao H等指出光条中心点与相机光心连线  与靶平面上的对应线  相交产生的标定点的坐标会有计算偏差。视场和传感器噪声产生的误差导致两直线处于不同平面内且没有交点。因此,取两条线公差线的中点作为标定点用来拟合光平面。通过此方法可以减小图像噪声引起的误差,进一步优化了标定方法。

3.2 消隐点法

在透视投影下,三维空间中的平行直线映射到像平面上会相交于一点,该点称为消隐点。消隐点法依靠平行、投影等几何关系确定标定点的坐标,不需要复杂的辅助设备和特殊的三维靶标,提高了标定的便捷性与普适性[33-34]。王朝旭等提出一种基于消隐点的标定方法,如图8(a) 所示,将平面靶标通过导轨沿单一方向移动至少两次,使得光平面与平面靶标相交于  形成多条平行结构光条纹线  ,将世界坐标系  的面  与光平面重合,坐标轴  与  重合,根据摄像机提取的条纹中心线像素坐标拟合出光条纹直线方程,并计算直线的斜率  。根据消隐点的原理,光平面上所有平行于  的直线在像平面上形成的结构光条纹会交于消隐点,不同斜率的结构光条纹线会在  面上处于不同的位置,根据像素坐标与世界坐标的转换关系可以求得像素坐标与世界坐标  的线性关系:

式中,  为像素点与消隐点连线的斜率,  为通过最小二乘法拟合的标定系数。沿  方向重复上过程,即可标定3个正交维度的映射关系。此标定方法通过多条结构光条纹斜率拟合消隐点,抗噪性较强。

胡增等提出一种基于消隐点的标定方法,依据消隐点原理,根据光平面上两组平行直线的消隐点可以确定光平面的法向量。通过移动光平面可以构造出两组平行直线如图8(b)所示光条纹所组成的一组平行线记为  ,光条与棋盘格的交点与靶标平面平移后其对应的点可以组成一组平行直线记为  。通过最大似然估计拟合出两组平行线的消隐点,直线方向向量与消隐点的关系:

式中,  为消隐点的齐次坐标;  为空间直线的方向向量,  为相机标定的内参矩阵,可求解出两消隐点对应的方向向量,根据两方向向量的叉积求解出光平面的法向量。通过  轴方向消隐点计算出  轴方向向量,根据标定板的方格尺寸及方向向量关系,求出光条被标定板沿  轴方向网格线截取线段  的实际尺寸。已知两相邻特征点在相机坐标系下的三维坐标,联立式子可得特征点的三维坐标表达式,特征点三维坐标仅含未知数  ,取多组特征点求平均值解出参数  的值,通过光平面的法向量和参数  的值即可确定光平面的方程。此外该方法利用工业机器人控制传感器控制平移运动,减少了人工的参与,在提高标定精度的同时提高了标定的自动化程度,有利于实现自动化标定。

3.3 向量叉乘法

邓仕超等提出一种方法,首先提取结构光条纹中心点的像素坐标并拟合直线方程,并根据相机标定结果将其转换到相机坐标系下,将光条纹中心线与相机光心点拟合平面,并求得此平面的法向量  。将世界坐标系建立在平面靶标上,  轴垂直于靶标平面,则可以设靶标平面的法向量  ,将靶平面法向量转换到相机坐标系下,因为靶平面与相机光心和光条纹中心线组成的平面相交,且交线就是光条纹中心线,所以两平面的法向量叉乘即可得到相机坐标系下光条纹中心线的方向向量。通过移动标定板获得多条空间直线,在得到的空间直线上取足够多的标定点,通过最小二乘法拟合出光平面。该方法解决了标定点少导致的标定精度低的问题,提高了标定的准确性和鲁棒性。

3.4 中心线提取直接标定法

该方法首先对相机进行标定,通过标定相机获得相机的内参。通过视觉算法直接提取光条纹中心线,选取条纹中心线上合适的点作为标定点,直接利用相机和视觉算法确定标定点像素坐标与空间坐标的转换关系。

魏一等提出一种基于平面靶标的直接标定法,通过相机标定,确定标定点从世界坐标系到相机坐标系的单应性矩阵和旋转矩阵。将光线投射在标定板上,利用检测算法得到光条纹图像坐标,拟合出直线,再从直线上均匀取点作为最终标定点。根据单应性矩阵确定标靶的重心在相机坐标系下的坐标和靶平面在相机坐标系下的法向量,然后根据重心坐标和法向量即可求出靶标平面在相机坐标系下的方程。联立针孔相机模型的约束条件和靶标平面方程求出标定点在相机坐标系下的三维坐标,最后通过最小二乘法拟合光平面方程。该方法可获得更多的标定点数据,提高了标定精度。

田雄斌等提出了基于Steger算法的改进方法,借助Steger算法可以得到条纹中心点的亚像素坐标[9-4],使中心线提取具有更高的抗噪性和提取精度。借助相机标定结果可以由标定点像素坐标得到对应的世界坐标和相机坐标,通过移动标定板获得足够多的标定点进而拟合光平面。该方法借助视觉条纹提取算法,提高了得到标定点的速度,相较于其他方法计算量更少,获得的标定点坐标精度更高,进而提升了标定精度,同时获取标定点的相机坐标更加快捷。

Li C等提出一种基于两次几何约束的直接标定优化方法,首先使用Steger算法提取光条纹中心的像素坐标,利用相机标定结果将像素坐标转换为空间坐标,通过最小二乘法拟合出初始光平面的方程。计算每一个标定点到初始光平面的距离,计算出所有距离的均值和标准差,通过正态分布原则剔除距离较大的异常点构建第一个几何约束,然后将激光器沿导轨移动多次,不同位置的光平面应相互平行。利用第一步的方法求解光平面的初始参数,将所有光平面的方向向量一致性作为优化目标,建立目标函数,用各位置光平面平行的关系构建第二个几何约束。

Wang Z等提出一种直接标定的方法,通过在空间两个垂直方向以不同的位姿上移动平面标定板获得两组相交的平行线。通过两组平行线的交点可以确定出光平面内像素坐标与光平面空间二维坐标的映射关系,沿空间另一垂直方向移动平面标定板,利用得到的三组平行线的交点可以计算出光平面的斜率,最终构建3D世界坐标与平面坐标的转换关系。该方法减少了数学变换过程中产生的积累误差,显著简化了全系统的标定流程。

3.5 基于双目相机标定法

严兴旭等提出一种基于双目相机的线结构光标定方法,首先应用张氏标定法标定双目视觉系统,获得相机内参和外参,利用Steger算法提取光条条纹中心点,获得条纹中心点的像素坐标。根据得到的像素坐标拟合右相机获得的激光条纹直线方程  。设定左光光条纹中心线一标定点,利用极线约束原理联立极线约束方程  和激光条纹直线方程  ,可以得到该点的像素坐标,根据相机标定结果将该点的像素坐标转换为三维坐标。依据上述方法获得足够多的标定点即可完成光平面标定。Wei Y等针对标定点在提取过程中容易引入误差,提取结果可能受到诸多因素的影响等问题引入模糊隶属度专家权重机制。首先按照传统最小二乘法拟合初始平面  ,计算每一个标定点  到平面  的距离,求解标定点  对平面  的隶属度:

式中,  为点  到平面  的距离,  的值描述了点  属于平面  的程度,点到平面的距离越近,隶属度值越大,专家权重系数越大,这样可减少光平面标定中的误差影响。最后通过加权最小二乘法求解平面方程系数:

式中,  是以  为对角元素的对角矩阵,  分别表示所有标定点在相机坐标系下的  坐标列向量。该方法根据标定点距离初始平面远近进行加权,减少了误差数据对激光平面方程拟合的影响,提高了标定的精度。

3.6 对比分析

表2所示是从标定精度和各方优缺点等方面对结合相机视觉算法的各标定方法进行对比总结。

4 线结构光平面标定的发展方向

4.1 结合深度学习标定

近年来,线结构光三维重建技术广泛应用于各种环境,在复杂环境下受光照和噪声影响线结构光平面标定的精度也会受到影响。在线结构光平面标定中应用深度学习算法有助于解决复杂环境下的标定困难。陈新禹等提出应用改进U2-Net网络图像分割深度模型对图像进行分割去噪,为激光条纹中心线提取提供高质量的图像,提高了激光条纹中心线的提取精度,提高了标定精度和鲁棒性。Luo S等基于深度学习骨架提取网络LuoNet可以实现激光中心线的快速准确提取,相较于传统算法提取精度高,运行时间短。在图像处理、角点提取、激光线提取的诸多方面,深度学习算法不但能提高数据提取的精度还有利于提高标定的自动化水平,减少标定时间。齐茂生提出一种基于Transformer的裂缝条纹图像分割方法,该方法实现了对裂缝局部细节的关注和全局结构的理解,在复杂的背景条件下仍能精确确定裂缝所在区域。因此,可以借鉴相关经验优化在复杂光照和噪声条件影响下的结构光条纹特征点提取,为提高结构光平面标定的鲁棒性提供新思路。仓欣提出基于模态融合Transformer的轻量化网络,解决了深度学习网络在在线识别应用中参数庞大、运行效率低下的问题。

5 总结

结构光平面标定方法多种多样,得益于近年来视觉算法研究的突破,结合视觉算法的标定方法层出不穷,但缺少相应的总结和归纳。列举了传统的标定算法,并详细总结了结合视觉算法的激光平面标定的各种方法,重点介绍了各种方法的原理以及标定过程。对各种方法分类并对比,为相关研究应用提供参考。

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

3D视觉方向论文辅导来啦!可辅导SCI期刊、CCF会议、本硕博毕设、核心期刊等。

图片图片图片图片

添加微信:cv3d001,备注:姓名+方向+单位,邀请入群。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/197712