基于单目视觉的三维重建与测距方法研究
2020-08-31郑唯加
李 勇,郑唯加
(1.安徽财经大学 统计与应用数学学院,安徽 蚌埠 233030;2.安徽财经大学 金融学院,安徽 蚌埠 233030)
相比于多目视觉三维重建对设备要求多、精度要求高等特点,单目视觉三维重建具有图像获取便捷,后期计算简单,成本低的特性.因此,目前被广泛应用于城市规划、交通事故现场调查等领域[1-2].在单目视觉三维重建与测距领域,许多效果优良的方法被提出.然而,现有的方法往往针对特殊场景设计,较难适应其他场景特点,普适性较弱,且部分方法在标定时采用人机交互方法,自动化程度较低[3].近年来,随着人工智能的发展,在计算机视觉领域,通过一定的样本训练便可对单幅图像中的边缘实现精确的检测[4].针对单幅图像,本文提出基于单目视觉的三维重建与测距方法,该方法可以根据不同图像,自适应地实现拍摄相机的内参估计,从而实现图像的三维建模;其次,具有很高的重建与计算效率,可以推广到视频中的物体测距,进而实现视频物体测速等应用.
1 单幅图像的三维重建与测距
针对单幅图像的三维重建与测距问题,本文提出分为三个步骤来测算:①根据图像中的物体含有三个正交方向上的平行线计算对应方向上的消失点并在此基础上计算相机内参标定;②在图像场景中,指定可以估计某一边实际长度的参考矩形,利用透视投影获得另一边的实际长度并拓展至矩形所在平面上任意两点的距离;③结合消失点,充分利用已提取的三维信息和场景中的约束,完成平面测距和物体高度测量.
1.1 消失点计算
消失点是指在空间一组平行线的无穷远点经过透视投影在二维图像中形成的像的直线在图像上的投影线段的交点[5].本文消失点检测主要分为以下几个步骤:
1)通过 Canny 边缘检测检测图片边缘.图像的边缘检测是利用区域之间包括灰度、颜色、纹理等特性上的差异,将内部特征或属性不一致的区域分开,从而刻画出目标和背景的分界线[6].常见的边缘检测算子可以分为三类:①一阶导数算子:Roberts、Sobel、Prewitt;②二阶导数算子:Kirsch、Laplacian、Log;③非微分边缘检测算子:Canny.由于Canny边缘检测算子能够检测到真正的弱边缘,是同时满足信噪比准则、定位精度准则、单边缘响应准则的多级边缘检测算法.本文选择该方法进行边缘检测,其检测算法步骤包括:将彩色图像转换为灰度图像;对图像进行高斯模糊;计算图像梯度,根据梯度计算图像边缘幅值与角度;沿梯度方向进行非极大值抑制;双阈值边缘连接处理;二值化图像输出结果.
2)利用概率霍夫变换检测出直线片段.霍夫变换是平面空间到极坐标空间的转换,其拟合速度非常快,其缺点是对噪声特别敏感[7].通过将霍夫参数空间量化为有限间隔或累加器单元来实现变换.随着算法的运行,每个算法都把(xi,yi)转换为一个离散化的(r,θ)曲线,并且沿着这条曲线的累加器单元被递增,并增加该箱的投票值.换句话说,将每个交点看成一次投票,也就是说A(r,θ)=A(r,θ)+1.所有点都进行如此计算后,可以设置一个阈值,投票大于这个阈值的可以认为是找到的直线.
基于上述方法的原理,借助Python中的OpenCV工具包,可以很容易的计算出单幅图像的消失点.
1.2 相机内参标定
相机标定是指依据一组已有空间位置的点与其对应的图像点,结合针孔成像原理求解相机参数的过程[9-10].通过标定即可求得相机的内参数矩阵与外参数矩阵.相机内参矩阵是由相机交比fuv与相机主点p(u1,v0)所构成的矩阵;相机外参矩阵是实现相机坐标系与世界坐标系转换的参数矩阵.设相机的焦比为fuv,三角形Δvxvyvz的垂心为c,三角形一边上的垂足g之间满足如下关系:
相机的主点p(u0,v0)与Δvxvyvz的垂心c一致.焦比和主点确定后,相机内参K随之确定,即
1.3 三维信息提取
图像的三维重建是指在利用先验知识的前提下,采用计算机视觉方法对单视图或多视图重构三维信息的过程,是计算机视觉领域的重要研究方向[11-12].根据前文中的步骤,可以得到计算消失点和相机内参矩阵的模型.为了达到测量的目的,还需在单幅图像中指定一个参考矩阵,然后根据物体本身的几何特性可以得到相应的三维坐标,提取三维信息,实现物体的三维重建.
根据图1的成像原理[13-14],可以模拟出如图2所示的矩阵透视投影图所示 ,设空间中存在一个参考矩形A1A2A3A4且其存在一条已知长度的边长形A1A2, 其在图像平面上的投影为a1a2a3a4,则矩形A1A2A3A4的两个边长之比可以表示为:
图1 成像原理
图2 矩形透视投影图
其中:
根据上式,可以得出:如果提前知道参考矩阵一边A1A2的长度,则可通过数学中的比例关系计算另一边A2A3的长度,同时利用A1A2以及A2A3的长度,则可以更近一步的确定参考矩形A1A2A3A4所在平面内任意两点间的距离.
1.4 单幅图像中实际物体距离求解
根据前文的步骤,如果要确定待测量平面上任意两点间的距离,只要在该平面上构造一个以上述线段为一边的矩形即可.将已知参考距离和相机内参作为输入,利用Matlab进行编程,即可求得带求解的实际物体长度与距离信息.综上,本文提出的方法流程图如图3.
图3 本文提出三维重建与测距方法流程图
2 实验分析
为了验证本文提出的方法,选取2019年研究生数学建模C题中的四张单幅图像(见图4)作文测试图像,对四幅测试图中标定的距离进行求解.
根据前文建立的重建与测距算法,首先利用消失点优化方法对其进行三维重建.该方法需要输入图像的3个消失点、待计算目标的矩形4点像素坐标和图像中参照物实际尺寸.消失点计算与待计算目标检测属于计算机视觉问题,且OpenCV具有丰富高效的相关求解代码且提供了对Python的接口[15].因此,利用Python解决消失点与目标检测的相关问题.通过边缘检测与霍夫变换,可以将图中的直线聚为3类,利用实际景物中平行线在相机成像中交于一点的特性,得出消失点.对于待计算目标四点像素坐标的确定,利用已经训练好的数据集对需要计算的目标进行检测,进而得到4个像素坐标.得到消失点与待求目标的4点像素坐标后,建立数学模型,设计消失点优化方法的代码,将消失点、待求目标的4点像素坐标和参照物实际尺寸带入模型进行计算,得到世界坐标系和相机坐标系,进而对待求解目标的4点像素即图像坐标代入,即可根据选取的 参照物实际大小求得待求目标的实际大小.
具体结果如下:首先通过Canny边缘算子检测出测试图4(A)~(D)中各物体的边缘,再采用概率 霍夫变换检测出直线片段.采用人机交互的方式获取图中多组基于三个方向上的平行线,概率霍夫变换后标定的直线效果如图4所示.
图4 标定后的测试图像
将所有线段按照极坐标排序之后,选择其与相邻一定角度的线段焦点做候选点,通过层次聚类分方法选出三个消失点坐标整理,见表1.
表1 测试图消失点坐标
进而得到如下参数由此可得4幅图的相机内参矩阵分别为:
最后,在相机内参矩阵的基础上,确定参照物尺寸,利用Matlab求解图像矩形比例,得到4幅测试图中的待求距离,见表2.
表2 测试图中标定距离求解结果
3 灵敏度分析
在对距离求解过程中,算法中每一步求解均为精确求解,存在较小软件计算误差.因此误差主要来源于变量输入(消失点、待求坐标和参照物大小),其中待求坐标依赖于识别精度.随着近年来人工智能兴起,目前对目标的识别率普遍超过95%;参照物大小往往根据经验获取,本文选取能够获取具体尺寸信息的物 体作为参照,此项输入误差也可忽略不计.见图5.因此,本文距离估计误差主要来源于消失点的计算,下面对消失点进行灵敏度分析.
图5 灵敏度分析
以任务一中图1为例,求解拍照者距离道路左侧距离.在已求出消失点基础上,分别变换消失点V1V2V3的x坐标值和y坐标值,变化区间为[-10 000, 10 000], 所取间隔为200,共测试了100个不同的坐标值,其最终所求距离与前面所得结果13.67 m波动较小,具体数值范围为(13.67±3)m,说明最终估计距离结果受消失点扰动较小,对消失点容错率高,进而可以证明使用消失点优化方法进行三维重建的稳健性.综上,消失点算法在灵敏度分析中表现出了较好的稳定性,提高了模型的容错率,在保证识别和参照输入精度的前提下,保证了消失点最优化算法的精确度,大大降低了最后的距离结果误差.
4 结 语
本文提出了单幅图像的三维重建与测距方法,对于单目视觉成像的三维立体重建,本文给出了完整的理论建模体系,在三维建模的基础上,利用图中容易估计的距离即可实现测距的目的.实验分析证明,该方法借助Python与Matlab实现了高效的视觉重建与数值计算.该方法在计算图像中距离信息时,不需要提前获知相机内外参矩阵,具有良好的普适性;同时,该方法可以拓展到视频中物体的跟踪与测速,具有良好的扩展性.