双目立体视觉系统使用两只相机同步采集图像,通过像素匹配获得深度图像,进而获取三维点云,系统结构如下。
用下图来解释双目视觉的基本原理:
图中所示变量为:
b为基线,或者两只相机的间距,f为相机焦距,XA为相机的X轴,ZA为相机的光轴,P为坐标X、Y和Z确定的真实点,uL为真实点P在左侧相机所采集图像上的投影,uR为真实点P在右侧相机所采集图像上的投影 由于两只相机的间距大小为 “b”,所以在获得的2D图像上,两只相机看到真实点P处于不同的位置。点uL和uR的X坐标为:uL = f * X/Z和uR = f * (X-b)/Z
两个投影点之间的距离为“视差”,并且我们可以利用此视差来计算深度信息,即真实点“P”与立体视觉系统之间的距离。视差 = uL – uR = f * b/z深度 = f * b/视差。 在实际应用中,立体视觉配置要更加复杂,比较类似下图所示的典型系统,但基本原理仍是一样的。
立体视觉系统的理想假设并不适用于真实世界的立体视觉应用。即使是最好的相机和透镜,也都会给采集到的图像引入某种程度上的失真。为了进行补偿,典型立体视觉系统还需要进行校准。校准过程需要使用校准网格,此网格在不同角度处获得,用来计算图像失真以及两只相机之间的确切空间关系。图下图所示是视觉开发模块附带的校准网格。
双目标定的基本步骤如下:
1)完成左相机和右相机的内参参标定
2)完成左右相机之间的位置关系标定及变换矩阵的计算
以上都是原理,怎样完成双目的校准,LabVIEW在双目视觉例程中也有,C:Program FilesNational InstrumentsLabVIEW 2014examplesVisionStereo VisionCalibrate Stereo Vision System,但是真正用过的都会吐掉,根本标定不出结果。建议使用LabVIEW自带的标定工具NI Calibration Trianing Interface进行校准,校准步骤如下;
第一步:左右两相机同步采集至少5张图片,11张比较高质量的图片,标定精度会比较高。5个角度如下:
第二步:打开NI Calibration Trianing Interface,选择校准模式,如下图所示
第三步:加载左相机图片
第四步:提取原点坐标,有干扰的点可以利用ROI去掉干扰点
第五步:根据标定板的规格,圆心之间的距离写入x pacing和y pacing
第六步:查看标定结果,特别注意Max Error的精度。
第七步:设置图像坐标系:选取实际标定板的相同位置(默认左上角第一个点作为原点坐标,采用默认就好)
第八步:保存标定结果为Left.png该图片带有标定信息,放在配置文件中备用。
第九步:重复该标定过程,保存Right.png保存在配置文件,标定结束。这样我完成了左右相机内参的标定。接下来需要左右相机之间的位置关系标定及变换矩阵的计算,完成双目标定。通过Learn Binocular Stereo Calibration函数完成计算。
至此,完成双目系统校准。
在双目系统中比较困难的就是左右相机像素的配准问题,LabVIEW提供了两种方法,SG Block Matching和Block Matching两种方法。获取深度图像的流程如下:
直接进行匹配计算—->对深度图像进行插值运算—–>获取深度图像
这种匹配方法是根据图像特征进行匹配的,这对两相机曝光等参数要求比较高,单纯靠纹理图像进行配准是非常难的,噪音比较大。为了增加纹理通常的做法就是,用激光器+毛玻璃的组合射出散斑激光,在空间中散斑是唯一的,匹配计算前先对左右相机预处理,提取出散斑的斑点,这样大大提高了图下那个的配准精度。基于散斑的双目系统三维的采集速度和相机的采样频率一样,4D的采样就是采用类似技术实现。散斑激光图像如下:
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/221841.html