基于全景影像景深图的探面方法
技术领域
本发明属于可量测街景影像领域,特别是涉及一种基于全景影像景深图的探面方法。
背景技术
全景影像又称为街景或街景影像,目前,腾讯街景、百度街景提供的街景服务已被广泛认可。
根据全景图片中心坐标查找相应范围内的激光点云,按照球面投影的要求投影到全景影像中,并计算出全景中心点到各点云的距离,给全景影像中像素点的值赋上距离值即景深信息,获得全景景深图。
在鼠标移动过程中,需要实时显示地面和建筑物探面的结果,然后进行全景跳转操作。目前,街景中常用的跳转实现方法是:假设地面是水平的,鼠标在地面移动,从全景中心与鼠标位置确定的射线与地面的交点作为目标点,使用该目标点查询最近的全景点,然后跳转到目标全景上。但这种方法只能解决地面探面的问题,并且在上下坡路段不准确。在专利《一种在实景地图中基于法向量的被探测面过滤方法》中提到通过从点云半手工生成建筑立面,然后计算鼠标射线与立面的交点来搜索目标全景的方法。这种方法可以解决建立立面探面,但是需要进行半手工来获得立面数据,增加了数据生产的成本。
目前全景探面存在以下问题和不足:
1)通过水平地面交线方法探测地面地,在上下坡情况下,准确度不高,且不能解决立面的探测。
2)通过半手工建立建筑立面的方法生产成本高,不适合自动化的大规模数据生产。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种能够准确的对全景影像景深图进行地面探面和立面探面的方法。
为实现上述目的,本发明提供了一种基于全景影像景深图的探面方法,包括以下步骤:
步骤一、获取当前鼠标点在全景影像中的UV坐标(u,v),并计算当前鼠标点在全景影像景深图中的像素点(I,J),I=v(λW-1),J=(1-u)(λH-1),W、H为全景影像的宽度和高度,λ为景深图宽度与全景图宽度的比值;然后从全景影像的景深图中获取像素点(I,J)的景深L;
步骤二、计算(I,J)像素对应的全景坐标系下的三维坐标点p(x,y,z)在全景坐标系中的方位角(α,β),α=270-360u,β=180v-90,α为p点在全景坐标系XOZ平面投影与X轴之间的夹角,β为原点O、点p连线与XOZ平面的夹角;
步骤三、根据方位角(α,β)和景深L,计算全景影像UV坐标系下当前鼠标点对应的三维点p(x,y,z),x=Lcos(β)cos(α),y=Lsin(β),z=Lcos(β)sin(α);将p(x,y,z)转换到世界坐标系下,p(x’,y’,z’)为像素点(I,J)在世界坐标系中对应的三维坐标;在像素点(I,J)周边10个像素内按逆时针方向选择n个具有景深信息的像素点{(I1,J1)......(In,Jn)},n为整数且n≥2,将该n个像素点转换到世界坐标系下,得到点集合{p1,p1......pn};pi为全景点集合{p1,p1......pn}中一点,i为整数且1≤i≤n-1;
步骤四、计算n-1个方向向量,其中第i个方向向量Vi是向量与向量使用右手法则确定的方向向量;计算Vi=norm((pi-p)×(pi+1-p))得到Vi,norm表示向量的单位化;
步骤五、计算n-1个方向向量合成的向量 并计算与垂直向量V0=(0,0,1)的夹角θ;V0=(0,0,1);
步骤六、根据所述夹角θ对全景影像的景深图进行探面;如果|θ|<θ0,θ0取值在0到20度之间,则认为点(I,J)与周边点确定的面垂直向上,为地面点;如果|θ-90°|<θ0,则认为点(I,J)与周边点确定的面垂直于平面,为建筑立面,即完成地面与立面的探面。采用以上技术方案,使用景深图的地面探面,在上下坡路段探测结果更加准确。
进一步的,所述步骤六后还包括确定目标全景影像视角的步骤:
A1、设定立面探测结果的目标点pa在世界坐标系下的坐标为pa(xa,ya,za),其立面方向向量为
A2、设定位于目标点pa左右两侧的两个点p1和p2,p1和p2与目标点pa距离均为1米;
A3、寻找以目标点pa为圆心,半径为R米的范围内的全景点Pm,R<50,m为非负整数;判断m是否为0,当m=0时,则搜索结果为空,结束搜索;当m≠0时,执行步骤A4;
A4、对所述步骤A3得到的全景点集合{P1......Pm}中的任意点Pb,以Pb为顶点,计算p1、Pb和p2形成的夹角θb, b为整数且1≤b≤m。
采用以上技术方案,能够确定目标全景影像的视角范围,并能够从其中选取最大视角,对于建筑立面探面结果,目标全景计算使用最大视角,更加符合真实情况。
进一步的,所述步骤一前还包括生成全景影像的景深图的步骤:
B1、从点云文件读入点云到集合U,记为U={P1......PN};N为点云集合U中点的数量,N为正整数;设定点云集合U中第c个点为Pc(xc,yc,zc),xc,yc和zc是点Pc的三维世界坐标;c为正整数且c的初始值为1;
设定准备生成的全景影像的位置与姿态为POS=(X,Y,Z,yaw,pitch,roll),其中X、Y和Z分别为全景影像中心的三维坐标位置;yaw,pitch和roll分别为全景影像的偏航值、俯仰值、侧滚值;
记全景影像的像素宽度为W,全景影像的像素高度为H,H=W/2,将全景影像景深图的像素宽度初始化为λW、将全景影像景深图的像素高度初始化为λH,0<λ≤1;将全景影像景深图中各像素的深度值初始化为10000;
B2、设定p为Pc对应全景影像坐标系中的点坐标,计算 得到全景影像坐标系中的点坐标,x、y和z为点p的三个坐标分量;R为旋转矩阵;
B3、将全景影像坐标系中的点坐标p转换成全景影像的uv坐标:
计算方位角
计算方位角
当x<0且y>0时,计算α=180-α;
当x<0且y<0时,计算α=-180-α;
计算α=270-α,当α≥360时,计算α=α-360;
计算u=(90+β)/180和v=α/360;
B4、计算全景影像景深图中的像素点(I,J),I=v(λW-1),J=(1-u)(λH-1);
B5、当全景影像景深图的景深小于全景影像景深图中(I,J)像素代表的深度值时,把所述景深L赋给全景影像景深图中的(I,J)像素;
B6、执行c=c+1,判断是否c≤N,当c≤N时,返回执行步骤B2;否则保存全景影像的景深图。
采用以上技术方案,把海量的点云数据通过投影生成街景影像景深图,使街景影像满足可量测的要求。进一步的,所述步骤B1中还包括计算旋转矩阵的步骤;旋转矩阵R=inv(Ryaw·Rpitch·Rroll): 所述inv为矩阵逆。
较佳的,所述步骤三中,通过计算 将全景影像坐标系中的三维点p(x,y,z)转换到世界坐标系下;
通过计算 将所述n个像素点转换到世界坐标系下,得到全景点集合{p1,p1......pn};(xn,yn,zn)为像素点(In,Jn)在全景影像坐标系中的三维点坐标,pn(xn’,yn’,zn’)为像素点(In,Jn)在世界坐标系中对应的三维坐标。
本发明的有益效果是:本发明使用景深图的地面探面,在上下坡路段探测结果更加准确;同时由于使用点云自动生产景深图,自动化程度高,不需要人工干预,数据生产成本低。对于建筑立面探面结果,本发明根据最大视角原则选取目标全景,更加符合真实情况。
附图说明
图1是本发明一具体实施方式的流程示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明:
如图1所示,一种基于全景影像景深图的探面方法,包括以下步骤:
步骤一、生成全景影像的景深图。
步骤二、获取当前鼠标点在全景影像中的UV坐标(u,v),并计算当前鼠标点在全景影像景深图中的像素点(I,J),I=v(λW-1),J=(1-u)(λH-1),W、H为全景影像的宽度和高度,λ为景深图宽度与全景图宽度的比值;然后从全景影像的景深图中获取像素点(I,J)的景深L。
步骤三、计算(I,J)像素对应的全景坐标系下的三维坐标点p(x,y,z)在全景坐标系中的方位角(α,β),α=270-360u,β=180v-90,α为p点在全景坐标系XOZ平面投影与X轴之间的夹角,β为原点O、点p连线与XOZ平面的夹角。
步骤四、根据方位角(α,β)和景深L,计算全景影像UV坐标系下当前鼠标点对应的三维点p(x,y,z),x=Lcos(β)cos(α),y=Lsin(β),z=Lcos(β)sin(α);将p(x,y,z)转换到世界坐标系下,p(x’,y’,z’)为像素点(I,J)在世界坐标系中对应的三维坐标;在像素点(I,J)周边10个像素内按逆时针方向选择n个具有景深信息的像素点{(I1,J1)......(In,Jn)},n为整数且n≥2,将该n个像素点转换到世界坐标系下,得到点集合{p1,p1......pn};pi为全景点集合{p1,p1......pn}中一点,i为整数且1≤i≤n-1。
步骤五、计算n-1个方向向量,其中第i个方向向量Vi是向量与向量使用右手法则确定的方向向量;计算Vi=norm((pi-p)×(pi+1-p))得到Vi,norm表示向量的单位化。
步骤六、计算n-1个方向向量合成的向量 并计算与垂直向量V0=(0,0,1)的夹角θ;V0=(0,0,1)。
步骤七、根据所述夹角θ对全景影像的景深图进行探面:
当|θ|<θ0时,则点(I,J)与周边点确定的面垂直向上,点(I,J)为地面点;当|θ-90°|<θ0时,则点(I,J)与周边点确定的面垂直于平面,点(I,J)为建筑立面点;通过对夹角θ的判断完成地面与立面的探面。其中θ0为设定值,0≤θ0≤20°。
步骤八、确定目标全景影像视角。在完成探面后,要根据其结果搜索合适的全景数据。如果探面结果是地面平面,直接把探面结果的世界坐标点作为搜索条件,查找空间距离最近的全景点即可,如果探测结果是立面,按下面的步骤获取目标全景点:
A1、设定立面探测结果的目标点pa,在世界坐标系下的坐标为pa(xa,ya,za),其立面方向向量为该目标点pa为鼠标对应的像素点。
A2、在立面上,设定位于目标点pa左右两侧的两个点p1和p2,p1和p2与目标点pa距离均为1米;
A3、寻找以目标点pa为圆心,半径为R米的范围内的全景点Pm,R<50,m为非负整数;判断m是否为0,当m=0时,则搜索结果为空,结束搜索;当m≠0时,执行步骤A4。
A4、对所述步骤A3得到的全景点集合{P1......Pm}中的任意点Pb,以Pb为顶点,计算p1、Pb和p2形成的夹角θb, b为整数且1≤b≤m。选取最大的一个角度对应的全景点为搜索结果,其原理是p1,Pi,p2三个点形成的角度最大,即视角最大,其视角更加趋近于真实情况。
所述生成全景影像的景深图按以下步骤进行:
B1、从点云文件读入点云到集合U,记为U={P1......PN};N为点云集合U中点的数量,N为正整数;设定点云集合U中第c个点为Pc(xc,yc,zc),xc,yc和zc是点Pc的三维世界坐标;c为正整数且c的初始值为1;
设定准备生成的全景影像的位置与姿态为POS=(X,Y,Z,yaw,pitch,roll),其中X、Y和Z分别为全景影像的三维坐标位置;yaw,pitch和roll分别为全景影像的偏航值、俯仰值、侧滚值;
记全景影像的像素宽度为W,全景影像的像素高度为H,H=W/2,将全景影像景深图的像素宽度初始化为λW、将全景影像景深图的像素高度初始化为λH,0<λ≤1;将全景影像景深图中各像素的深度值初始化为10000,以表示全景影像景深图中各像素的深度值为无穷远;
计算旋转矩阵;旋转矩阵R=inv(Ryaw·Rpitch·Rroll): 所述inv为矩阵逆。
B2、设定p为Pc对应全景影像坐标系中的点坐标,计算 得到全景影像坐标系中的点坐标,x、y和z为点p的三个坐标分量;R为旋转矩阵;
B3、将全景影像坐标系中的点坐标p转换成全景影像的uv坐标:
计算方位角
计算方位角
当x<0且y>0时,计算α=180-α;
当x<0且y<0时,计算α=-180-α;
计算α=270-α,当α≥360时,计算α=α-360;
计算u=(90+β)/180和v=α/360;
B4、计算全景影像景深图中的像素点(I,J),I=v(λW-1),J=(1-u)(λH-1);
B5、当全景影像景深图的景深小于全景影像景深图中(I,J)像素代表的深度值时,把所述景深L赋给全景影像景深图中的(I,J)像素;
B6、执行c=c+1,判断是否c≤N,当c≤N时,返回执行步骤B2;否则保存全景影像的景深图。
所述步骤三中,通过计算 将全景影像坐标系中的三维点p(x,y,z)转换到世界坐标系下;
通过计算 将所述n个像素点转换到世界坐标系下,得到全景点集合{p1,p1......pn};(xn,yn,zn)为像素点(In,Jn)在全景影像坐标系中的三维点坐标,pn(xn’,yn’,zn’)为像素点(In,Jn)在世界坐标系中对应的三维坐标。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。