1.一种基于曼哈顿假设的场景重建方法,其特征在于该方法包括以下步骤:步骤(1)、通过深度相机拍摄采集获得室内场景的图像序列,计算图像中每个像素点法向量;
步骤(2)、通过建立球面坐标进行法向量统计,从所有像素点的法向量中提取出近似主平面法向量的法向量集合;
步骤(3)、根据近似主平面法向量的法向量集合中的所有法向量,利用主成分分析法提取这些法向量中的主要方向,得到相互正交的主平面法向量;
步骤(4)、获取每个像素点3D坐标在上述主平面法向量上的投影位置,然后利用投影位置提取主平面在法向量上的位置;
步骤(5)、根据上述步骤得到的主平面法向量与主平面在法向量上的位置信息,计算得到相机姿态变换矩阵;并通过每一帧的相机姿态变换矩阵与所有像素点的3D坐标进行场景的重建。
2.如权利要求1所述的一种基于曼哈顿假设的场景重建方法,其特征在于步骤(1)、通过深度相机拍摄采集获得室内场景的图像序列,计算图像中每个像素点法向量,具体是:首先,将图像序列中记录帧的所有像素点通过深度相机的相机模型转换为3D坐标;然后通过某像素点的相邻4个像素点的3D坐标计算获得该点法向量;
D1(u,v)=D(u+k,v)-D(u-k,v) (1)D2(u,v)=D(u,v+k)-D(u,v-k) (2)其中,k是表示两个像素点之间距离,为可调整参数;D1、D2为经过像素点D(u,v)的向量;
将D1、D2带入公式(3)中,获得D(u,v)的法向量n(u,v);
n(u,v)=ψ(D1(u,v)×D2(u,v)) (3)其中,×是交叉乘积,Ψ是将法线转换为单位向量的函数:ψ(normal)=normal·||normal-1。
3.如权利要求2所述的一种基于曼哈顿假设的场景重建方法,其特征在于步骤(2)、通过建立球面坐标进行法向量统计,从所有像素点的法向量中提取出近似主平面法向量的法向量集合,具体是:
2.1单位球形坐标建立
将步骤(1)获得的法线n=(x,y,z)转换成球坐标形式n=(α,β,γ),其中α是法线n和轴X之间的角度,β是法线n与轴线Y之间的角度,γ是法线n与轴线Z之间的角度;
2.2法向量统计
将单位球形坐标中的每个基细分为180个区间,即每个区间为1度范围;然后将三个分别属于每一个基的区间组合成一个容器,将每个法向量n存入其对应的容器中;
所述的基指代α,β,γ所在的坐标,即α,β,γ为0~180度;
2.3主法向量集合的提取
由于一帧图像中有大量属于某一主平面的像素点,因此该平面法向量对应的容器中法向量数量将远大于其他容器,故将包含法向量数量最多的容器中所有法向量设为第一个主平面的法向量集L1;
根据主平面的法向量垂直关系,第二个主平面的法向量集L2见公式(4):θ1<Θ(α1,α2)+Θ(β1,β2)+Θ(γ1,γ2)<θ2 (4)其中Θ(a,b)=cos(a)*cos(b),θ1=π*100/180,θ2=π*80/180;
第三个主平面的法向量集L3为同时距离L1和L280°到100°的法向量集。
4.如权利要求3所述的一种基于曼哈顿假设的场景重建方法,其特征在于步骤(3)具体是将3个法向量集L1、L2、L3中的所有法向量作为PCA的输入,然后PCA提取这些法向量中的主要方向,得到三个相互正交的特征向量,同时将这些向量设置为主平面的法向量n1、n2、n3;
其中PCA法输出的最小特征值所对应的特征向量为第一个主平面的法向量,反之最大特征值所对应的特征向量为第三个主平面的法向量。
5.如权利要求4所述的一种基于曼哈顿假设的场景重建方法,其特征在于步骤(4)首先计算每个像素点3D坐标在法向量n1、n2、n3上的投影位置,然后利用投影位置提取主平面在法向量上的位置d1,d2,d3,于是每个主平面可以表示成点法向量形式(n,d),具体是:
4.1通过将深度相机光学中心设置为坐标原点,计算每个像素点3D坐标D(u,v)分别位于三个主平面法向量上的投影位置
4.2在理想状态,对于法向量为ni的平面,平面距离摄像机光学中心的距离d等于平面上点在平面法向量上的投影位置,即D(u,v)·ni=d;但是由于深度相机本身噪声与精度的原因,平面上的部分点在平面法向量上的投影位置不等于平面距离相机光学中心的距离;
故对所有每个像素点的投影位置使用一维均值漂移算法提取峰值,峰值peak所对应的投影位置正是主平面到相机光学中心的距离d。
6.如权利要求5所述的一种基于曼哈顿假设的场景重建方法,其特征在于步骤(5)具体是:第f帧图像到第g帧图像的相机姿态变换矩阵可以表示成如下形式:其中R是大小为3×3的旋转矩阵,t是大小为3×1的平移向量;
将第一帧的摄像机坐标设置为全局坐标,即场景的世界坐标,使得帧f中的所有3D点Df(u,v)通过相机姿态变换矩阵还原到全局坐标Pglobal中:Df'(u,v)=T1,2·T2,3···Tf-1,f·Df(u,v) (8)将所有帧的3D点Df'(u,v)累加,得到场景的3D点云,并用OpenGL渲染最终得到场景重建后的三维模型。