,,
(浙江工业大学 理学院,浙江 杭州 310023)
三维重建是计算机视觉领域和计算机图形学的一个重要的研究方向,其应用领域十分广泛,大批学者[1-3]进行了三维重建在各个领域的应用研究。三维重建是指根据单幅图像或者多幅的图像重建三维信息的过程。基于单幅图像的三维重建避免了基于多幅图像重建的特征匹配的问题,现实中基于单幅图像的三维重建取材方便,简单的几步交互操作加以塑造,重建场景,比耗时费力的传统方法更优越。对于减少建模的成本和解放人力意义重大,所以有必要研究单幅图像的三维重建技术。灭点对应着场景的三维方向,是二维图像中的重要信息,通过灭点可以重建场景的几何信息[4],获得相机的参数[5],实现物体的三维重建。近年来,大批学者进行单幅图像的三维重建的研究。Criminsi等[6]进行了的单像量测的相关研究,并于2000年正式提出所谓单像量测(SVM,Single view metrology)的概念,即通过单张影像上的几何信息(尤其是灭点)进行测量。钱晶晶等[7]利用手动标定重要的点和平行线,利用灭点性质进行标定,但结果不够精确。Nian等[8]提出了一种利用建筑物对称性的相机标定方法。首先是利用建筑物结构的对称性进行相机标定,根据标定结果恢复出1 组三维点。然后手动标记出建筑物的各个组件,通过恢复三维点确定组件的位置和形状,但仅适用于对称物体。Tardif[9]则采用J-linkage算法生成多于3 类候选灭点的最小采样集,然后根据候选灭点与直线间的一致性度量函数有效去除外点。该算法可以解决复杂建筑物环境下的灭点检测问题,实现建筑物的三维重建,但必须给定摄像机的内参数信息。Xu等[10]提出的一种带有统计特性的一致性度量方法,综合考虑了直线端点误差、直线的长度及位置的影响,提高了灭点的检测精度。王思洁等[11]基于结构化的单幅图像建筑物,利用平行平面与包含垂直信息的任意平面的平面模型解算三维坐标,实现三维重建。
在上述研究的基础上,改进原来灭点检测算法未充分利用产生灭点的直线的参数信息的特点。先利用Canny算子提取出图像边缘,再利用Hough变换提取出图像中的长直线,分析直线特征,对不同方向的直线进行分组,根据各方向的直线满足线性分布关系,利用改进的回归算法建立直线参数的线性模型,充分利用了直线信息,剔除外点,提高了检测灭点的精度。并利用灭点的性质对摄像机的内外参数进行标定,然后交互获得最少的二维点,通过计算求得的摄像机内外参数和物体本身的几何特征计算相应的三维坐标,最后进行目标物体的三维重建。
灭点是在空间一组平行线的无穷远点经过透视投影在二维图像中形成的像的直线在图像上的投影线段的交点。获取单幅图像上的灭点一般采用自动法,因为自动法人机交互少,自动化程度高。步骤如图1所示。
图1 灭点检测算法步骤Fig.1 The steps of vanishing point detection algorithm
边缘检测有多种算子可以运用,运用各类算子进行边缘检测,实验结果如图2所示。
图2 各类算子边缘检测Fig.2 Edge detection of all kinds of operators
通过图2实验对比得出可以提取较好和较多的图片细节,提取的边缘效果很好,所以选择canny算子进行图像边缘检测。
目前获取直线较好的方法为Hough变换直线,通过Hough变换可以提取图像中的直线信息并将其转化到参数空间。坐标轴空间一条直线对应(ρ,θ)参数空间一个点(ρ0,θ0)。重构的三维物体是规则的长方体,故其在图像空间中会形成水平方向,垂直方向与纵深方向的直线,对直线进行分组的方法很多,但是由于需要分组的直线在角度上明显特征,所以根据直线的角度方向可以将图像中的直线分为对应方向上3 类,此方法有效并且快速的实现了直线的初步分组,具体做法为
第1步设置第一条直线的倾斜角为判断初始值θ0, 判断余下的直线,若直线的θ∈θ0-15°,θ0+15°, 则将直线放入第1 组。
第2步重新历遍存放直线的数组,若θ∉θ0-15°,θ0+15°, 则把检测到的第1个θ值作为新的θ1, 把满足θ∈(θ0-15,θ0+15°)的直线放在第2 组。
第3步将第1组直线的倾斜角取平均值,得到新的θ0, 重新历遍存放直线的数组,若θ∈θ0-15°,θ0+15°,则将直线放入第1 组。第2 组进行同样的操作,剩余的直线放在第3 组。
根据文献[12]证明得到对应灭点的直线束在(ρ,θ)参数空间满足线性分布关系,对于有误差样本点的数据集合,为了得到精确灭点,剔除掉无效直线,充分利用直线参数信息,采用改进的回归算法作为参数线性模型的估计算法。
假设图像某一方向有n条直线束,分别记为L(ρ(i),θ(i))(i=1,2, …,n)。那么,这n条直线束对应的参数(ρ(i),θ(i))应该满足的一般线性表达式为
ρ(i)=βTθ(i)+ε(i)i=1,2, …,n
(1)
式中:(ρ(i),θ(i))为n条直线束中第i条直线的参数;β=(β0,β1)为直线参数的线性模型参数;ε(i)为随机误差。为了抑制误差点的影响,估计出有效的参数,根据灭点直线的特征,将直线的重要性引入参数线性模型的估计算法中,对于灭点直线来说,它的重要性与其长度成正比,和该直线的倾斜角与其余倾斜角的角度差之和成反比,给每条直线分配一个W(i)(i=1,2, …,n)为
(2)
式中:α为指定直线的倾斜角与其余倾斜角的角度差之和;σ为鲁棒性阈值,设定为0.1;l为直线的长度;w1,w2为权重,其中w1=0.7,w2=0.3。
采用改进回归算法的线性拟合目标函数为
(3)
使目标函数达到最小值时的β0,β1值即为稳健回归算法所求线性模型的参数值。这样得到了直线参数模型,重新估计之前的样本点,若远离目标函数的此样本点就是无效点,则通过设立有效的阈值,距离大于阀值的即为无效点,参数空间中对应的点为图形空间中的相应直线,通过该算法就可以有效剔除了无效直线。
根据文献[13]利用最小距离法求解灭点的坐标。设灭点直线束l1,l2,…,ln对应的灭点为vp,将li和vp都表示为齐次坐标的形式(a,b,c)T,则有
Mvp=0
(4)
式中M=[l1,l2,…,ln]T,li=[Ai,Bi,Ci],对应的直线方程为Aix+Biy+Ci=0。
将利用最小距离法求解最佳灭点的问题转化为线性代数的问题,根据拉格朗日不定乘子法,将灭点的求解过程转化为数学问题,灭点为对称矩阵MTM最小特征值的特征向量。
利用灭点的性质进行相机标定,假设相机的投影点是图像的中心。摄像机的内外参数采用透视投影模型进行研究,根据文献[14]的介绍得到图像坐标系,摄像机坐标系,世界坐标系之间的转换关系。Fu,Fv是由两条互相垂直的平行线得到的灭点,Fu,Fv在摄像机坐标下的坐标分别为(xcu,ycu,f),(xcv,ycv,f),借助王建的摄像机标定方法[15]得到焦距f为
(5)
世界坐标系中,灭点为3 个方向上的无穷远点,令这3 个方向为X轴,Y轴,Z轴方向,则有:v1=(1,0,0),v2=(0,1,0),v3=(0,0,1),则有
(6)
相机的平移向量与相机坐标系相对世界坐标系的位置有关,因此,任意指定世界坐标系的原点,若其在图像上的坐标为(u,v),则平移矩阵T的表达式为
(7)
式中:λ=f;K为内参数矩阵,由焦距和投影中心坐标确定。
空间点的成像原理如图3所示,O为相机中心,ABCD为长方体的一个面,abcd为透视投影到图像平面的四边形。
图3 空间点的成像原理Fig.3 The imaging principle of space point
手动获得abcd4个顶点的图像坐标,通过固定其D点的深度坐标Z,通过AB=CD,即可确定ABCD与投影面的距离。根据图像点与空间的转换公式就可以算出其他三点的深度值,从而计算出AB和AC的相对长度。同理通过BF=DE,能求出BF的长度,确定重建长方体的长宽高。最终得到的三维模型与实际模型之间仅存在比例缩放关系,不影响其结构。
根据角度进行直线束的初步分组后,再根据改进后的稳健回归算法得到参数线性模型,利用线性模型剔除外点得到的有效直线结果如图4~6所示。
图4 图像的水平方向Fig.4 Horizontal direction of image
图5 图像的垂直方向Fig.5 The vertical direction of the image
图6 图像的纵深方向Fig.6 The depth direction of the image
图4~6中的(a)表示直线初步分组后得到的直线;图4,5中的(b)表示利用文献[12]介绍的算法得到的有效直线,图6中的(b)表示利用文献[12]介绍的算法得到的有效直线;图4~6中的(c)是根据改进后的稳健回归算法得到的有效直线。从图4~6中可以发现:改进算法有效地剔除了无效直线,优化了结果。
为验证改进算法的有效性和泛化能力,进行了实验2,3,实验结果如图7~12所示。
图7 实验2图像的水平方向Fig.7 Horizontal direction of the image
图8 实验2图像的垂直方向Fig.8 The vertical direction of the image
图9 实验2图像的纵深方向Fig.9 The depth direction of the image
图10 实验3图像的水平方向Fig.10 Horizontal direction of the image
图11 实验3图像的垂直方向Fig.11 The vertical direction of the image
图12 实验3图像的纵深方向Fig.12 The depth direction of the image
从实验结果得出改进算法比文献[12]的算法更有效,将直线的重要性引入参数线性模型的估计算法中,能最大化地利用直线的参数信息,剔除无效直线的影响,提高灭点计算精度。并且具有良好的泛化能力。
通过之前的介绍,假设图3中D点对应的深度值为2f时,手动获取图像中的部分二维点,计算出长方体的边长如表1所示。
表1物体长度测量值及误差表
Table1Themeasurementvalueanderrortableofthelengthoftheobject
盒子边长真实测量值/mm实际相对值实验计算值/像素实验计算相对值相对值误差长1511818.567 810宽800.529 8443.827 40.542 20.012 4高1691.119 2935.216 21.142 50.023 3
实际相对值是令盒子长度的相对值为1,通过比值得到宽和高的相对值,相对值误差是实际相对值与实验计算相对值之差的绝对值。由于宽和高的相对值误差都小于2.5%,故建模的整体误差在2.5%以内,符合建模要求。
根据求得的物体的长宽高,用OpenGL实现三维重建,实验结果如图13所示。
图13 原图像与三维重构后的图像Fig.13 Original image and 3D reconstructed image
介绍了利用规则物体的单幅图像三维重建,针对目前的灭点检测算法尚未充分利用产生灭点直线的参数信息,首先用canny算子和Hough变换检测出直线,根据灭点直线特征对直线进行聚类,采用改进的回归算法作为参数线性模型的估计算法剔除外点,从而得到了有效直线。此方法有效地剔除了图像中无效直线的干扰,从而可以计算出精确的灭点,根据灭点的属性得到相机的内外参数,根据长方体的几何性质实现三维重建。此方法有效地提高了模型的精度,模型整体精度在2.5%以内,符合三维重建精度要求。可试用于规则建筑物的三维重建。该方法也有一些缺陷,仅实现规则物体的重建,接下来会研究不同形状的几何体的单幅图像三维重建。因灭点检查算法还有很多方面有待提高,接下来还可以再研究如何提高灭点精度。