智能机姿态测定、全景影像生成及目标识别方法转让专利

申请号 : CN201480044865.6

文献号 : CN105474033B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘进

申请人 : 刘进

摘要 :

本发明公开了一种智能机姿态测定、全景影像生成及目标识别方法,其中智能机姿态测定方法包括以下步骤:定义局部坐标系;测定智能机姿态矩阵Rg,Rg是一个相对于局部坐标系的3x3单位正交矩阵,其根据智能机内部的不同传感器可以通过多种方法得到。根据智能机的姿态测定可实现多种应用,包括智能机的虚拟现实漫游方法、智能机的多目视觉定位、智能机的单目单点定位、智能机的全景影像生成、智能机中的目标方向选择、视频影像实时纠正、智能机单像定位以及多个相机间的相对定位等。

权利要求 :

1.一种智能机姿态测定方法,其特征在于,所述方法包括:定义局部坐标系:局部坐标系是指原点在智能机,Z轴指向地球表面方向,Y轴或X轴与纬线相平行的坐标系;或局部坐标系原点位于地球上任意一点,Z轴与重力方向一致,北代表局部坐标系X轴,西代表局部坐标系Y轴;

测定智能机姿态矩阵Rg,Rg是一个相对于局部坐标系的3x3单位正交矩阵;

所述测定智能机姿态矩阵Rg具体是采用智能机的加速度传感器,以及磁力计传感器或方向传感器,或者,采用智能机的旋转矢量传感器,或者,采用智能机的陀螺仪、加速度传感器与磁力传感器来测定;

当测定智能机姿态矩阵Rg具体是采用智能机的加速度传感器,以及磁力计传感器或方向传感器来测定时,所述测定智能机姿态矩阵Rg具体包括:用以下公式(1)计算Rg

其中

vax,vay,vaz是智能机加速度传感器测出的x,y,z三个方向的值,或是这三个值经滤波的结果;Ra是加速度传感器相对于智能机的姿态转换矩阵;

当az≤0时,s=-1,az>0时,s=1;

若采用方向传感器:通过方向传感器获取方位角 将其带入公式(1)计算Rg;若采用磁力计传感器:计算

其中Rm是磁力传感器相对于智能机的姿态转换矩阵;{vmx,vmy,vmz}是磁力传感器检测到的三个值或这三个值经滤波的结果;

再计算

利用磁力传感器计算方位角 的三角函数为:

带入公式(1)计算Rg;

当测定智能机姿态矩阵Rg具体是采用智能机的旋转矢量传感器来测定时,所述测定智能机姿态矩阵Rg具体包括:若检测到旋转矢量传感器只有3个数据values[0],values[1],values[2],则采用以下公式得到

q1=values[0],q2=values[1],q3=values[2],

若检测到旋转矢量传感器有4个数据values[0],values[1],values[2],values[3]则采用以下公式得到

q1=values[0],q2=values[1],q3=values[2],q0=values[3]则Rg0矩阵为:

根据智能机旋转矢量传感器坐标系定义的不同,得到Rg=Rg0RLT,其中RLT是局部坐标系与旋转矢量传感器坐标系之间的变换矩阵;

当测定智能机姿态矩阵Rg具体是采用智能机的陀螺仪、加速度传感器与磁力传感器来测定时,所述测定智能机姿态矩阵Rg具体包括:第1步采用智能机的加速度传感器,以及磁力计传感器或方向传感器来测定Rg的初值或采用智能机的旋转矢量传感器来测定Rg的初值,将Rg转换成4元数q0,q1,q2,q3作为以下第2-

7步迭代的初值;

第2步设定exInt,eyInt,ezInt原始值为0,即exInt=0,eyInt=0,ezInt=0;

第3步根据接收到的磁力计矢量{mx,my,mz},得到正确磁场矢量{wx,wy,wz},先将矢量{mx,my,mz}替换成将其单位化以后的矢量得到局部坐标系下磁场的正确的磁场方向矢量{bx,0,bz}, bz=hz;其中:hx=2×mx×(0.5-q2×q2-q3×q3)+2×my×(q1×q2-q0×q3)+2×mz×(q1×q3+q0×q2);

hy=2×mx×(q1×q2+q0×q3)+2×my×(0.5-q1×q1-q3×q3)+2×mz×(q2×q3-q0×q1);

hz=2×mx×(q1×q3-q0×q2)+2×my×(q2×q3+q0×q1)+2×mz×(0.5-q1×q1-q2×q2);

再转换到正确磁场矢量{wx,wy,wz},其中wx=2×bx×(0.5-q2×q2-q3×q3)+2×bz×(q1×q3-q0×q2);

wy=2×bx×(q1×q2-q0×q3)+2×bz×(q0×q1+q2×q3);

wz=2×bx×(q0×q2+q1×q3)+2×bz×(0.5-q1×q1-q2×q2);

第4步根据接收到的加速度传感器数据ax,ay,az,和{wx,wy,wz}得到误差矢量{ex,ey,ez},并计算其累计值exInt,eyInt,ezInt;

具体为:先将矢量{ax,ay,az}替换成将其单位化以后的矢量计算vx=2*(q1*q3-q0*q2);vy=2*(q0*q1+q2*q3);vz=q0*q0-q1*q1-q2*q2+q3*q3;

ex=(ay×vz-az×vy)+(my×wz-mz×wy);

ey=(az×vx-ax×vz)+(mz×wx-mx×wz);

ez=(ax×vy-ay×vx)+(mx×wy-my×wx);

计算误差累计值:将exInt替换为exInt+ex×Ki;eyInt替换为eyInt+ey×Ki;ezInt替换为ezInt+ez×Ki;其中Ki为一可调节的正系数,Ki在0.00001至0.5中任意选取;

若没有磁力计,则第3步不执行,同时将该第4步中的ex=(ay×vz-az×vy)+(my×wz-mz×wy);

ey=(az×vx-ax×vz)+(mz×wx-mx×wz);

ez=(ax×vy-ay×vx)+(mx×wy-my×wx);

改为

ex=ay×vz-az×vy;

ey=az×vx-ax×vz;

ez=ax×vy-ay×vx;

第5步根据误差矢量{ex,ey,ez}及其累计值纠正陀螺仪数据{gx0,gy0,gz0}假设智能机读出当前的一组陀螺仪数据为{gx0,gy0,gz0},gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;其中Kp为一可调节的正系数,Kp在0.000001至20.0中任意选取;

第6步根据陀螺仪数据gx,gy,gz修正4元数随着不断接收到陀螺仪数据gx,gy,gz,对4元数按如下方式修正:q0替换为q0+(-q1×gx-q2×gy–q3×gz)×halfT;q1替换为q1+(q0×gx-q3×gy+q2×gz)×halfT;q2替换为q2+(q3×gx+q0×gy-q1×gz)×halfT;q3替换为q3+(-q2×gx+q1×gy+q0×gz)×halfT;其中halfT为修正周期,halfT=0.00001~-10.0;

第7步输出Rg矩阵和4元数

将4元数{q0,q1,q2,q3}单位化成 输出;

4元数转Rg矩阵公式如下

第8步回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵和4元数。

2.一种智能机显示屏的姿态测定方法,其特征在于,所述方法包括:智能机显示屏的姿态矩阵为

rx是智能机显示屏像素阵列x轴方向在局部坐标系中的分量;

ry是智能机显示屏像素阵列y轴方向在局部坐标系中的分量;

rz是垂直于智能机显示屏表面方向向智能机显示屏内部朝前看的视线方向在局部坐标系中的分量;

1)按权利要求1所述的方法测定智能机姿态,并得到智能机的姿态矩阵Rg;

2)计算R=ΔR×Rg,ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,智能机自身Z轴定义为智能机加速度传感器的z轴方向,当显示屏观察方向和智能机自身Z轴方向刚好相反时当显示屏观察方向和智能机自身Z轴方向完全一致时否则采用摄影测量方法标定ΔR=RARg-1,RA是摄影测量后方交汇法算得的摄像头姿态矩阵,Rg是按权利要求1方法测得此时智能机的姿态矩阵。

3.一种基于智能机姿态的虚拟现实漫游方法,其特征在于,所述方法包括:

1)采用权利要求2所述的方法得到智能机显示屏的姿态矩阵R;

2)根据姿态矩阵R移动控制漫游观察者在局部坐标系中的位置:定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态且用于观察周边场景的对象;智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;

定义漫游观察者在局部坐标系中的坐标为(Xd,Yd,Zd),

3)设置漫游观察者在局部坐标系里的位置和方向;

4)在局部坐标系下渲染绘制三维场景。

4.根据权利要求3所述的方法,其特征在于:所述根据姿态矩阵R移动控制漫游观察者在局部坐标系中的位置具体包括:a)获取智能机漫游者手指在屏幕本体上的滑动数据;

b)在滑动数据是漫游者单指相对于智能机屏幕本体滑动矢量△X,△Y的情况下,如果|r33|>|r13|且|r33|>|r23|,其中rij是R矩阵的i行j列元素值,则单指滑动后,在局部坐标系中的定位坐标(Xd,Yd)的改正数(vx,vy),vx=ΔXr11+ΔYr21,vy=ΔXr12+ΔYr22;否则:

c)在滑动数据是漫游者双指做拉开或合拢操作所获得的情况下,则得到拉开和合拢之前双指之间的屏幕距离,以及拉开和合拢之后双指之间的屏幕距离;通过前后两次距离的差异修正Zd。

5.根据权利要求3所述的方法,其特征在于:所述设置漫游观察者在局部坐标系里的位置和方向具体包括:根据漫游观察者的局部坐标系坐标(Xd,Yd,Zd),以及步骤1)测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:需要设定以下几个量:

(1)漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角;

(2)漫游观察者所在的位置(Xd,Yd,Zd),并根据步骤2)的漫游方法进行修正;

(3)漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33)(4)漫游者自身向上方向的矢量{-r21,-r22,-r23}其中步骤(3)和(4)中的rij是智能机显示屏姿态R矩阵中的第i行j列,i=2或3,j=1、2或3。

6.根据权利要求3所述的方法,其特征在于:所述在局部坐标系下渲染绘制三维场景具体包括:预先在智能机的显示屏内设置一个3维渲染图层进行三维场景渲染;

被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标(Xd,Yd,Zd)在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图;

智能机摄像头的拍摄方向与屏幕观察方向一致时,可以智能机摄像头拍摄的视频图像为底图,叠加绘制三维场景中的点线面。

7.根据权利要求3所述的方法,其特征在于:在所述步骤3)和步骤4)之间还包括步骤:(a)获取智能机的高度hs,纬度θs和经度 其中θs是智能机的纬度, 是智能机的经度,由智能机上自带的GPS接收模块获取;

(b)计算智能机所在经纬度的Rv

(c)计算智能机所在纬度θs经度 高度hs的地心坐标系坐标Ts,利用大地测量学中经典的转换公式

得到Ts,

其中

hs是智能机离地面高度;

Ns是随纬度变化的卯酉圈曲率半径;

a,b是地球椭球的长短轴,是大地测量学中的已知常量;

e是偏心率,是定值;

(d)根据地球上任何一个点的经度 纬度θi和高程hi得到该点地心坐标系坐标T0i=[X0i Y0i Z0i]T

利用大地测量学中经典的转换公式

得到T0i;

其中

hi是点离地面高度;

Ni是随纬度变化的卯酉圈曲率半径;

a,b是地球椭球的长短轴,是大地测量学中的已知常量;

e是偏心率,是定值;

如果已知一个物体所在经纬度 和θi,通过本步骤计算出它的地心坐标系坐标T0i;

(e)地心坐标系坐标T0i转换为局部坐标系中的坐标(Xi Yi Zi)T

其中ΔT是局部坐标系中智能机显示屏的几何中心相对于智能机GPS接收天线的局部坐标系偏移。

8.根据权利要求3所述的方法,其特征在于:在步骤3)和步骤4)之间或在步骤4)之后,还包括步骤:将智能机的显示屏设定为二维绘图模式并设置若干个二维标签,针对每一个二维标签,按如下步骤显示:

1)首先确定二维标签的中心位置(u,v);

如果标签用于标注三维场景中局部坐标系坐标为(X,Y,Z)的目标,则根据以下公式确定目标显示的中心位置(u,v)ZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd)

式中:

(cx,cy)是智能机显示屏中心点的坐标,若显示屏是矩形,cx=屏宽/2,cy=屏高/2;

r11~r33是R矩阵对应行列的元素;

h是显示屏上下边缘垂直像素长,θ是漫游观察者自身观察的垂直视场角;

(Xd,Yd,Zd)是漫游观察者在局部坐标系中的坐标;

如果满足ZO>0且中心位置(u,v)在显示屏范围内,则中心位置(u,v)保持不变,否则需要按下法修正(u,v);

若ZO=0则将中心位置(u,v)替换为从点(cx,cy)出发按矢量{r11(X-Xd)+r12(Y-Yd)+r13(Z-Zd),r21(X-Xd)+r22(Y-Yd)+r23(Z-Zd)}方向的射线与显示屏边缘相交的2维点;

若ZO>0则将中心位置(u,v)替换成从点(cx,cy)到点(u,v)的连线与显示屏边缘相交的2维点;

若ZO<0则将中心位置(u,v)替换成从点(u,v)到点(cx,cy)延长线与显示屏边缘相交的2维点;

如果二维标签不是用于标注目标,中心位置(u,v)为显示屏范围内的一个由界面设计者设定的像素坐标,或是用户手指触摸或鼠标点击的显示屏像素坐标;

2)按下述方法(1)或(2)计算矢量{Qx,Qy}方法(1)Qx=-r23/La,Qy=r13/La其中r23,r13是权利要求1所述的方法中的R矩阵对应行列的元素,

方法(2)利用权利要求1方法(1)加速度传感器的前两个输出值ax,ay得到Qx=-ay/La,Qy=ax/La,

3)在二维平面上经过以下矩阵旋转变换以后再绘制二维标签:

二维标签上每一点X,经过上式变换到坐标X’显示出来;

式中±取+是正放显示,取-是倒放显示,标签的水平轴始终平行于地面;

即以二维标签的中心位置(u,v)为中心经过旋转变换 显示标签;

叠加的内容为静止的目标或者动态的目标;

4)得到局部坐标系坐标(Xi,Yi,Zi)的目标i的标签像坐标(ui,vi)之后,在智能机屏幕坐标(ui,vi)区域附近设置感应区,等待接收用户触摸该区域的事件,当用户在智能机上点击(ui,vi)附近区域的时候,将执行与目标i相关联的操作。

9.根据权利要求3所述的方法,其特征在于:所述三维场景为一个空心的三维形体,三维形体为空心球,空心立方体、空心柱体、空心正多面体或空心锥体,三维形体的内壁以全景图作为纹理进行渲染;所述漫游观察者在虚拟场景中位于三维形体内部的某一点,从三维形体内部观察三维形体的内壁,实现利用智能机显示屏姿态控制全景浏览。

10.一种标定智能机上的摄像头姿态矩阵的方法,其特征在于:所述方法包括:对姿态矩阵Rg进行校正,校正智能机的摄像头姿态矩阵其中R=ΔR×Rg;

ΔR为智能机的摄像头姿态矩阵R和智能机姿态矩阵Rg之间的一个固定的方向转换,当摄像头方向和智能机屏幕方向刚好相反时 摄像头方向和智能机屏幕方向完全一致时 否则采用摄影测量后方交汇法标定ΔR=RARg-1,RA是摄影测量后方交汇法算得的相机姿态矩阵,Rg是按权利要求1方法测得的此时智能机的姿态矩阵。

11.一种基于智能机姿态数据的多目视觉定位方法,其特征在于,所述方法包括:步骤1:

在N个地理位置点拍摄同一个物体X,其中N≥2,测第i个观察点的以下几个量,其中i∈(1,2,…,N):(1)在视频帧图像中显示的位置(ui,vi);

(2)拍摄点的地理位置 分别是第i个拍摄点的经度,纬度,高度;

(3)按权利要求1所述的方法测得第i个拍摄点的摄像头姿态矩阵Ri;

(4)第i个拍摄点的内部参数焦距长fi,像主点坐标(cxi,cyi);

步骤2:

计算相对于地心的N个姿态矩阵,i=1~N,R0i=RiRvi其中

步骤3:

利用公式 得

到N个拍摄点摄像头光心的地心坐标系坐标T0i={Txi,Tyi,Tzi}T i=1~N;其中{ΔTxi,ΔTxi,ΔTzi}T=RviTΔTi;ΔTi是摄像头光心相对于GPS接收天线的偏移矢量; 是将经度,纬度,高度转换成地心坐标系的X坐标的函数; 是将经度,纬度,高度转换成地心坐标系的Y坐标的函数; 是将经度,纬度,高度转换成地心坐标系的Z坐标的函数;

步骤4

根据拍摄点N的姿态矩阵R0N,位置[TxN TyN TzN],在图像中显示的位置坐标(uN,vN),摄像头焦距像素长fN,像主点坐标(cxN,cyN)都满足以下方程

其中r0iab表示姿态矩阵R0i的第a行第b列的元素值;i=1~N一共列2N个方程,解(Xx,Xy,Xz)三个未知数;或采用摄影测量前方交汇方法计算出物体X得到地心坐标系坐标(Xx,Xy,Xz);最后由大地测量学公式得到地心坐标(Xx,Xy,Xz)对应的经纬度。

12.一种基于智能机姿态数据的单目单点定位方法,其特征在于,所述方法包括:假设智能机上的相机内部参数矩阵为:

被观察物体是一个直径=D大小的物体,在智能机上成像的宽度是Δu,高度是Δv,成像中心点像坐标(u,v),

采用权利要求1所述的方法测得智能机姿态矩阵Rg,并测得智能机上的摄像头姿态矩阵R=△RRg包括以下两种情况:

(1)若已知智能机摄像头光心局部坐标系坐标是T,则单目估算出物体的局部坐标系下三维坐标:

其中

(2)若已知物体的局部坐标系下三维坐标X,则求相机坐标T

从而实现了相机的单目定位。

13.一种基于智能机姿态数据的全景影像生成方法,其特征在于,所述方法包括:步骤1、智能机在某一固定点用不同姿态拍摄n张图像,根据权利要求1所述的方法计算智能相机的姿态矩阵,根据智能相机的姿态矩阵再计算智能机摄像头姿态矩阵,分别为R0i,i为0~n-1之间的整数,n为大于等于1的整数;

步骤2、根据影像重叠区域迭代求解进行精确纠正(1)提取图像间重合区域的同名点对

定义Hij=KjRjRiTKi-1

对N张图像之间任意两张i,j进行匹配寻找图像上的同名点对,可以将第i张图像Ii经过透视Hij变换后得到图像Ii’再与第j张图像Ij作细致匹配,最后将图像Ii上的匹配点坐标经过Hij-1逆变换还原成Ii图原始的坐标;

(2)根据上一步得到的同名点对匹配关系建立误差e相对于参数集φ=[... fi qi0 qi1 qi2 qi3 ... fj qj0 qj1 qj2 qj3 ...]T的数学模型e(φ),

前面得到的智能机摄像头姿态矩阵R0i转换成4元数qi00,qi01,qi02,qi03,i=0,…,n-1以φ=φ0=[... f0i qi00 qi01 qi02 qi03 ... f0j qj00 qj01 qj02 qj03 ...]T作为初值,采用LM法通过减小误差e,逐步得到精确化相机姿态qi0,qi1,qi2,qi3和焦距参数fi;

最后将精确化的φ中的4元数qi0,qi1,qi2,qi3转化成姿态矩阵Ri,i=0,…,n-1;

步骤3、开辟一张宽w高h大小的全景影像,扫描全景影像上每一个像素,针对全景图的每一个像素(x,y)进行如下(1)(2)处理:(1)横坐标x转换成 纵坐标y转换成θ;

其中w,h是全景图像的宽,高;

(2)依据小孔成像公式

其中 fi为相机i焦距像素长度,(cix,ciy)是相机i的像主点;

利用Ri将 转换成映射到每个相机i的像坐标(ui,vi),若(ui,vi)在图像范围内,则将相机i像坐标(ui,vi)处颜色取出,加权渲染到全景图(x,y)处;权重与(ui,vi)到该图像边缘最短距离有关,距离越短权重越小;若无一个相机的(ui,vi)在其图像范围内,渲染透明色或背景色到(x,y)处;扫描完全景图像上所有点填充相应的颜色,完成全景图像的渲染;

或者,在步骤2中先将全景图像颜色值全部清0,在步骤3中针对n张图像将全景图像上的相应区每个像素扫描n轮,分n轮依次将加权颜色值累加在全景图的像素上;

步骤4全景图像的三维浏览和检索定位。

14.根据权利要求13所述的方法,其特征在于:所述全景图像的三维浏览和检索定位具体包括:(A)智能机姿态控制浏览三维全景图像在虚拟场景中以球心为观察点,球体内壁以全景图作为纹理渲染一个球;设定智能机摄像头观察方向{r31,r32r33},自身向上方向{-r21,-r22,-r23};rij是姿态矩阵R中第i行第j列元素;

(B)全景图建库、检索和定位

采用步骤3(1)中的公式或采用墨卡托转换公式,

转换成全景图像,保持建库和检索的转换方式一致;

建库

提取全景图像的特征点集合,建立与全景图像关联的特征点数据库,库中每个特征点指向其所在的全景图像;

检索

同一地点c≥1张图像合成待检索全景图像并提取渲染区特征点,对每个特征点,查询库中与其最相似特征点所指向的全景图像,按特征点相似程度对库中指向的全景图像进行加权投票,按投票总和大小排序;

将待检索全景图中已渲染区和投票得到的库中全景图对应区域的像素集进行相关匹配计算,相关系数越大越相似;输出投票排序靠前且相关系数大于预设值的结果;如果c=

1,也可根据单张拍摄姿态矩阵R,将库中全景图像映射到单张拍摄图像域与单张拍摄图像进行相关匹配;

定位

在已知GPS情况下,检索GPS附近区域的全景图像组成的子集特征库;

服务器数据库将全景图像与其地理位置坐标绑定在一起存储,检索结果是编号为i*的图像,即可在数据库中查找出i*所对应的地理位置。

15.一种基于智能机姿态数据的目标方向选择方法,其特征在于,所述方法包括:定义智能机主方向或载体主方向相对于智能机自身的矢量单位p;

采用权利要求1所述的方法获取智能机当前姿态矩阵Rg;

计算p┴=RgTp为智能机主方向或载体主方向相对于指北坐标系的矢量;

计算局部坐标系中的目标矢量vo=O-P,假设局部坐标系中智能机自身坐标为P,目标的坐标为O,则目标矢量vo=O-P;

计算矢量p┴与目标矢量vo之间夹角的余弦,或计算两个矢量之间的夹角;

如果夹角的余弦>0.9,或者夹角偏差的绝对值|dφ|很小则触发智能机与该目标O之间的某一关联事件;

通过两矢量的点积除以|vo|得到夹角dφ的余弦,cos(dφ)=(p┴点积vo)/|vo|如果该余弦cos(dφ)>cos(φa),φa为预设值,则该目标方向选择事件可触发;

在需要与用户的可视化交互情况下,在指北坐标系中实时绘制目标、智能机和矢量p┴;

计算局部坐标系中智能机主方向矢量与目标矢量之间夹角的方向余弦,根据余弦值大小判定夹角,并且在三维空间或二维空间中绘制出智能机主方向矢量与目标矢量之间的方向关系,便于人机交互。

16.一种基于智能机姿态数据的视频影像实时纠正方法,其特征在于,所述方法包括:采用权利要求1所述的方法计算智能机拍摄视频的每一帧图像对应的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R,△R是摄像头相对于智能机的转换矩阵;

将摄像头的姿态矩阵R分解为R=RτR_从而得到矩阵Rτ,相机的拍摄姿态R不规则,期待得到用虚拟姿态R_作为拍摄姿态矩阵得到的标准图像;

对智能机拍摄视频的每一帧图像I经过H=K2RτTK-1的Homograph变换得到I’;

其中 是拍摄相机的内部参数矩阵,f是焦距的像素长度,(cx,cy)是相机主点坐标;对于理想相机(cx,cy)是图像的中心点,cx=w/2,cy=h/2,w,h是原始图像I的宽和高;

是纠正以后虚拟相机的内部参数矩阵,f2是纠正以后虚拟相机的焦距的像素长度,(cx2,cy2)是纠正以后虚拟相机主点坐标。

17.一种基于姿态数据的智能机单像定位方法,其特征在于,所述方法包括:假设相机或摄像机内参数据f和(cx,cy)已知,f是焦距的像素长度,(cx,cy)是相机主点坐标,内参矩阵

搜集采集物方点,转化成局部坐标系坐标;

采用权利要求1所述的方法获取智能机的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R,△R是摄像头相对于智能机的转换矩阵;

拍摄一张图像,自动提取其中的多个特征点,通过匹配算法得到与物点对应的n对物像同名点;n个物方点的坐标是Xi=[Xix,Xiy,Xiz]T i=1,…,n,对应n个像点坐标是[ui vi]T i=1,…,n;根据无错和容错2种情况计算相机在局部坐标系下的坐标T。

18.根据权利要求17所述的方法,其特征在于:所述根据无错和容错2种情况计算相机在局部坐标系下的坐标T具体为:(1)若确认多个特征点无错误,则

采用数学模型解方程得到自身在局部坐标系下坐标Tx,Ty,Tz

其中

进而得到相机位置T,最大集ζ为n个点对组成的全集;

(2)若不确认多个特征点是否全部正确,采用Ransac容错算法,通过共线方程模型随机选取两对点n=2,根据模型式(HH2)计算相机位置T,并通过共线方程zi[u’i v’i 1]T=KR(Xi-T)验证T,通过KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程,选取符合共线方程点数最大集ζ并计算最大集ζ对应的T*,单目多点Ransac容错算法流程如下:

1)从n个像点中随机挑选出2个距离足够大的像点,至少大于容忍误差error的2倍;

2)挑选出来的2个像点与物点对应形成2对物象同名点,按式(HH2)计算智能机位置T;

3)用T验证所有n对物象同名点的共线方程对应关系,共线方程KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程,统计符合共线方程的个数i_in,如果i_in数量超过前期的数量nmax则记录本组满足共线方程容忍误差数量最大的点集ζmax,并刷新nmax=i_in;

4)更新迭代次数k+1→k

5)回到第1步,直到满足Ransac概率收敛条件(1-(nmax/n)2)k

6)将前面搜索得到的最大的点集ζmax搜集起来进行最后一次多点最小2乘计算,按公式(HH2)计算得到Tbest得到最终结果。

19.一种基于智能机姿态数据的相对定位方法,其特征在于,所述方法包括:a)两相机之间相对定位

假设相机1,2之间有i=1..n≥2对同名点u1i,v1i~u2i,v2i;

其中R1,R2是智能机相机在拍摄的1,2两个地点测出来的姿态矩阵数据;

已知相机1的内参矩阵 相机2的内参矩阵 其中(cxi,cyi)是相机i的像素主点坐标,fi是相机i的焦距像素长;

已知两相机之间的距离是L;

计算相机2相对于相机1的位移矢量T包括以下步骤:(1)用权利要求1所述的方法计算智能机上相机的姿态Rg1,Rg2计算R1=△RRg1,R2=△RRg2进一步得到R=R2R1T

(2)构建矩阵A

其中

uji*=Ki-1ui=[uji*x uji*y uji*z]T,ujiR*=Ruji*=[ujiR*x ujiR*y ujiR*z]T,i=1,2,j=1..n;

(3)如果确认n对点都是正确的,则

求约束||t3x1||=1下Anx3t3x1=0的解或采用数学SVD分解得到Anx3=UnxnWnx3VT3x3,SVD分解出来的V矩阵的最后1列的矢量,即对应于最小奇异值的特征矢量为t,T

T=-LRt得到结果,结束

否则继续进行以下步骤;

(4)设置迭代初值nmax=0,k=1;

(5).随机挑选A矩阵中的2行,构建A2x3就是求约束||t2||=1下A2x3t2=0的解或采用SVD分解得到A2x3=U2x2W2x3VT3x3,分解出来的V的最后1列的矢量即为t2;

(6)将t2=[ttx tty ttz]T代入第j=1..n个点,采用式(AB)验证点j是否是内点,(uj2*xuj1R*y-uj2*yuj1R*z)ttx+(uj2*xuj1R*z-uj2*zuj1R*x)tty+(uj2*yuj1R*x-uj2*xuj1R*y)ttz<ε(AB)其中ε表示最大容忍误差物方长度,相对于两相机之间的距离=1而言;

满足式(AB)则点j是内点,如果满足内点的数量nt超过最佳值nmax则ζt-->ζnt-->nmax(7)如果(1-(nmax/n)2)k<0.00001错误率足够小,退出迭代进入步骤9;

(8)迭代次数k增加1,回到步骤5反复迭代;

(9)最后采用最小二乘法针对最大内点集ζ重新计算一次最优t,求约束||t3x1||=1下An’x3t3x1=0的解,其中n’=nmax或采用SVD分解得到An’x3=Un’xn’Wn’x3VT3x3,分解出来的V的最后1列矢量,即对应于最小奇异值的特征矢量,即为t最终得到T=-LRTt;

b)多个相机间的相对定位

构建矩阵

U(ij)k=[U(ij)k1U(ij)k2U(ij)k3]k=1,2rc(ij)ab是指第i个点对应的第j个图像的相机的姿态矩阵的a行b列,uc(ij)是第i个点对应的第j个图像上的像点坐标,(cx,cy)是相机主点坐标,f是相机的焦距;

对矩阵A进行SVD分解得到A=UWVT,V中最后一个非零矢量T

X=[T1x T1y T1z  ... Tcx Tcy Tcz X1 Y1 Z1 ... XN YN ZN] 的每一个分量对应C个相机的位置T1x,T1y,T1z,…,Tcx,Tcy,Tcz和N个点的坐标X1,Y1,Z1,…,XN,YN,ZN。

20.一种基于智能机姿态的目标识别方法,其特征在于,所述方法包括:根据权利要求16所述的方法,通过H=K2RτTK-1对智能机拍摄视频的图像I进行纠正得到I';

对纠正后的图像I'进行目标检测、识别处理,得到I'图像上目标的外接多边形点坐标集xi,yi,i=1,...,N;

通过反纠正H-1的方法得到坐标集在原图上映射的坐标xi',yi',即

21.根据权利要求20所述的方法,其特征在于:如果采用传感器纠正目标识别,则所述方法包括:首先根据传感器得到的R矩阵对原始图I进行H=K2RτTK-1标准化纠正得到标准纠正图I’,然后对I’图像进行目标检测、跟踪,得到它对应的目标框r,目标框r相对于标准模板的平移是rx,ry,

-1

目标框r首先经过平移变换Ht映射到标准图上,然后再经过H 变换映射到原始图上,因此目标框r相对于原始图像I的H变换为r*=H-1Htr。

说明书 :

智能机姿态测定、全景影像生成及目标识别方法

技术领域

[0001] 本发明涉及信息技术领域,尤其涉及一种智能机姿态测定、全景影像生成及目标识别方法。

背景技术

[0002] 地理信息位置服务一直只强调空间定位和空间距离,却忽视了一个非常重要的数据和概念——姿态,实际上用户更关心目的地或目标相对于自身的方向,没有姿态的位置服务是不完整的位置服务。比如一款的士打车软件,司机在抢单的时候如果只考虑距离,就可能选择位于自身后方的乘客,由于车道不能逆行,导致司机无法接到乘客,乘客也无法乘坐的士。作战的时候如果只知道敌人在接近而不知道敌人从哪个方向接近,这必然会导致混乱和恐慌。因此智能机姿态的测定能实现一种真正意义上的位置服务,使得基于智能机姿态的位置服务成为可能,具有非常重要的意义,并且必将形成一种新的数据新标准而被广泛应用。
[0003] 姿态传感器的应用涉及方方面面,在很多领域都需要用到智能机自身姿态的信息,如影像、视频纠正、单目定位,3D遥控、室内导航、导弹制导。传统的姿态测量非常笨重和昂贵,一般安装在大型飞机,车船上,主要用于航天军事领域。近年来随着传感器技术的提高,各种廉价、轻小型号的用于姿态测定的传感器得以安装在小型智能机上,这为智能机姿态传感数据新标准的建立和广泛应用创造了硬件条件。
[0004] 一旦这些传感器数据通过数据融合处理得到智能机姿态数据之后就能实现各种重要的应用。表示姿态的传感数据用得最多、最传统的是航位角、俯仰角和翻滚角,主要用于无人机姿态表述和地面移动测量系统MMS,但是这样表示缺点很多:
[0005] 首先需要用大量三角函数重构姿态矩阵,导致计算速度慢;
[0006] 三个角度相对于坐标系的转角不统一;
[0007] 三个角度的转换顺序没有一个统一的标准,不同导航设备上的三个角的顺序定义是不一样的,没有统一的标准,导致针对不同导航设备的姿态数据软件不能统一接口和通用共享,因此缺少统一的姿态数据标准极大地阻碍了导航技术的发展。
[0008] 有些软件内部采用的定位算法不是基于图像的,在无GPS和wifi环境下软件是不能正常定位的,软件中的摄像头扫描界面效果给人一种图像识别定位的感觉。传统的图像定位方法是不知道姿态数据的,这样就要求至少需要三对以上的物像同名点对应关系才能进行定位计算,事实上三对同名点除了进行定位还要计算姿态,因此得到的结果很不稳定,很不准确,特别是在三点位一条直线或者三点之间距离很小都会出现很不稳定,不精确的问题,原因就是这三点除了进行定位计算以外还要负担姿态运算。

发明内容

[0009] 本发明的目的在于,提供一种智能机姿态测定方法、智能机显示屏的姿态测定方法、基于智能机姿态的虚拟现实漫游方法、标定智能机上的摄像头姿态矩阵的方法、基于智能机姿态数据的多目视觉定位方法、基于智能机姿态数据的单目单点定位、基于智能机姿态数据的全景影像生成方法、基于智能机姿态数据的目标方向选择方法、基于智能机姿态数据的视频影像实时纠正方法、基于姿态数据的智能机单像定位方法、基于智能机姿态数据的相对定位方法以及基于智能机姿态的目标识别方法。本发明解决其技术问题所采用的技术方案是:
[0010] 提供一种智能机姿态测定方法,其特征在于,包括以下步骤:
[0011] 1)定义局部坐标系:局部坐标系是指原点在智能机,Z轴指向地球表面法方向,Y轴或X轴与纬线相平行的坐标系;或局部坐标系原点位于地球上任意一点,Z轴与重力方向一致,北代表局部坐标系X轴,西代表局部坐标系Y轴;
[0012] 2)测定智能机姿态矩阵Rg,Rg是一个相对于局部坐标系的3x3单位正交矩阵,Rg由下述方法之一获得:
[0013] 方法(1)采用加速度传感器与磁力计传感器或方向传感器
[0014] 如果智能机有加速度传感器,且有磁力计传感器或方向传感器,用以下公式(1)计算Rg
[0015]
[0016] 其中
[0017]
[0018]
[0019] vax,vay,vaz是智能机加速度传感器测出的x,y,z三个方向的值,或是这三个值经滤波的结果;Ra是加速度传感器相对于智能机的姿态转换矩阵;
[0020] 当az≤0时,s=-1,az>0时,s=1;
[0021] 若采用方向传感器:通过方向传感器获取方位角 将其带入公式(1)计算Rg;若采用磁力计传感器:计算
[0022]
[0023] 其中Rm是磁力传感器相对于智能机的姿态转换矩阵;{vmx,vmy,vmz}是磁力传感器检测到的三个值或这三个值经滤波的结果;
[0024] 再计算
[0025]
[0026] 利用磁力传感器计算方位角 的三角函数为:
[0027]
[0028]
[0029] 带入公式(1)计算Rg;
[0030] 方法(2)采用旋转矢量传感器
[0031] 如果智能机配置有旋转矢量传感器,若检测到旋转矢量传感器只有3个数据values[0],
[0032] values[1],values[2],
[0033] 则采用以下公式得到
[0034] q1=values[0],q2=values[1],q3=values[2],
[0035]
[0036] 若检测到旋转矢量传感器有4个数据values[0],values[1],values[2],values[3]
[0037] 则采用以下公式得到
[0038] q1=values[0],q2=values[1],q3=values[2],q0=values[3]
[0039] 则Rg0矩阵为:
[0040]
[0041] 根据智能机旋转矢量传感器坐标系定义的不同,得到Rg=Rg0RLT,其中RLT是局部坐标系与旋转矢量传感器坐标系之间的变换矩阵;
[0042] 方法(3)采用陀螺仪、加速度传感器与磁力传感器迭代
[0043] 第1步选用方法(1)或方法(2)计算Rg的初值,将Rg转换成4元数q0,q1,q2,q3作为以下第2-7步迭代的初值;
[0044] 第2步设定exInt,eyInt,ezInt原始值为0,即exInt=0,eyInt=0,ezInt=0;
[0045] 第3步根据接收到的磁力计矢量{mx,my,mz},得到正确磁场矢量{wx,wy,wz},
[0046] 先将矢量{mx,my,mz}替换成将其单位化以后的矢量
[0047] 得到局部坐标系下磁场的正确的磁场方向矢量{bx,0,bz}, bz=hz;其中:hx=2×mx×(0.5-q2×q2-q3×q3)+2×my×(q1×q2-q0×q3)+2×mz×(q1×q3+q0×
q2);
[0048] hy=2×mx×(q1×q2+q0×q3)+2×my×(0.5-q1×q1-q3×q3)+2×mz×(q2×q3-q0×q1);
[0049] hz=2×mx×(q1×q3-q0×q2)+2×my×(q2×q3+q0×q1)+2×mz×(0.5-q1×q1-q2×q2);
[0050] 再转换到正确磁场矢量{wx,wy,wz},其中
[0051] wx=2×bx×(0.5-q2×q2-q3×q3)+2×bz×(q1×q3-q0×q2);
[0052] wy=2×bx×(q1×q2-q0×q3)+2×bz×(q0×q1+q2×q3);
[0053] wz=2×bx×(q0×q2+q1×q3)+2×bz×(0.5-q1×q1-q2×q2);
[0054] 第4步根据接收到的加速度传感器数据ax,ay,az,和{wx,wy,wz}得到误差矢量{ex,ey,ez},并计算其累计值exInt,eyInt,ezInt;
[0055] 具体为:先将矢量{ax,ay,az}替换成将其单位化以后的矢量
[0056] 计算vx=2*(q1*q3-q0*q2);vy=2*(q0*q1+q2*q3);vz=q0*q0-q1*q1-q2*q2+q3*q3;
[0057] ex=(ay×vz-az×vy)+(my×wz-mz×wy);
[0058] ey=(az×vx-ax×vz)+(mz×wx-mx×wz);
[0059] ez=(ax×vy-ay×vx)+(mx×wy-my×wx);
[0060] 计算误差累计值:将exInt替换为exInt+ex×Ki;eyInt替换为eyInt+ey×Ki;ezInt替换为ezInt+ez×Ki;其中Ki为一可调节的正系数,Ki在0.00001至0.5中任意选取;
[0061] 若没有磁力计,则第3步不执行,同时将该第4步中的
[0062] ex=(ay×vz-az×vy)+(my×wz-mz×wy);
[0063] ey=(az×vx-ax×vz)+(mz×wx-mx×wz);
[0064] ez=(ax×vy-ay×vx)+(mx×wy-my×wx);
[0065] 改为
[0066] ex=ay×vz-az×vy;
[0067] ey=az×vx-ax×vz;
[0068] ez=ax×vy-ay×vx;
[0069] 第5步根据误差矢量{ex,ey,ez}及其累计值纠正陀螺仪数据{gx0,gy0,gz0}
[0070] 假设智能机读出当前的一组陀螺仪数据为{gx0,gy0,gz0},gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;其中Kp为一可调节的正系数,Kp在
0.000001至20.0中任意选取;
[0071] 第6步根据陀螺仪数据gx,gy,gz修正4元数
[0072] 随着不断接收到陀螺仪数据gx,gy,gz,对4元数按如下方式修正:
[0073] q0替换为q0+(-q1×gx-q2×gy–q3×gz)×halfT;q1替换为q1+(q0×gx-q3×gy+q2×gz)×halfT;q2替换为q2+(q3×gx+q0×gy-q1×gz)×halfT;q3替换为q3+(-q2×gx+q1×gy+
q0×gz)×halfT;其中halfT为修正周期,halfT=0.00001~-10.0;
[0074] 第7步输出Rg矩阵和4元数
[0075] 将4元数{q0,q1,q2,q3}单位化成 输出;
[0076] 4元数转Rg矩阵公式如下
[0077]
[0078] 第8步回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵和4元数。
[0079] 本发明还提供了一种智能机显示屏的姿态测定方法,包括以下步骤:
[0080] 智能机显示屏的姿态矩阵为
[0081]
[0082] rx是智能机显示屏像素阵列x轴方向在局部坐标系中的分量;
[0083] ry是智能机显示屏像素阵列y轴方向在局部坐标系中的分量;
[0084] rz是垂直于智能机显示屏表面方向向智能机显示屏内部朝前看的视线方向在局部坐标系中的分量;
[0085] 1)按上述方法测定智能机姿态,并得到智能机的姿态矩阵Rg;
[0086] 2)计算R=ΔR×Rg,ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,智能机自身Z轴定义为智能机加速度传感器的z轴方向,
[0087] 当显示屏观察方向和智能机自身Z轴方向刚好相反时
[0088] 当显示屏观察方向和智能机自身Z轴方向完全一致时
[0089] 否则采用摄影测量方法标定ΔR=RARg-1,RA是摄影测量后方交汇法算得的摄像头姿态矩阵,Rg是上述方法测得此时智能机的姿态矩阵。
[0090] 本发明还提供了一种基于智能机姿态的虚拟现实漫游方法,包括以下步骤:
[0091] 1)采用上述方法得到智能机显示屏的姿态矩阵R;
[0092] 2)根据姿态矩阵R移动控制漫游观察者在局部坐标系中的位置:
[0093] 定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态且用于观察周边场景的对象;智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;定义漫游观察者在局部坐标系中的坐标为(Xd,Yd,Zd),
[0094] 采用以下方法控制漫游观察者在虚拟场景中移动:
[0095] a)获取智能机漫游者手指在屏幕本体上的滑动数据;
[0096] b)在滑动数据是漫游者单指相对于智能机屏幕本体滑动矢量△X,△Y的情况下,如果|r33|>|r13|且|r33|>|r23|,其中rij是R矩阵的i行j列元素值,则单指滑动后,在局部坐标系中的定位坐标(Xd,Yd)的改正数(vx,vy),vx=ΔXr11+ΔYr21vy=ΔXr12+ΔYr22;否则:
[0097]
[0098] c)在滑动数据是漫游者双指做拉开或合拢操作所获得的情况下,则得到拉开和合拢之前双指之间的屏幕距离,以及拉开和合拢之后双指之间的屏幕距离;通过前后两次距离的差异修正Zd;
[0099] 3)设置漫游观察者在局部坐标系里的位置和方向:
[0100] 根据漫游观察者的局部坐标系坐标(Xd,Yd,Zd),以及步骤1)测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:
[0101] 需要设定以下几个量:
[0102] (1)漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角;
[0103] (2)漫游观察者所在的位置(Xd,Yd,Zd),并根据步骤2)的漫游方法进行修正;
[0104] (3)漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33)[0105] (4)漫游者自身向上方向的矢量{-r21,-r22,-r23}
[0106] 其中步骤(3)和(4)中的rij是智能机显示屏姿态R矩阵中的第i行j列,i=2或3,j=1、2或3;
[0107] 4)在局部坐标系下渲染绘制三维场景
[0108] 预先在智能机的显示屏内设置一个3维渲染图层进行三维场景渲染;
[0109] 被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标(Xd,Yd,Zd)在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图;
[0110] 智能机摄像头的拍摄方向与屏幕观察方向一致时,可以智能机摄像头拍摄的视频图像为底图,叠加绘制三维场景中的点线面。
[0111] 本发明还提供了一种基于智能机姿态数据的多目视觉定位方法,包括以下步骤:
[0112] 步骤1:
[0113] 在N个地理位置点拍摄同一个物体X,其中N≥2,测第i个观察点的以下几个量,其中i∈(1,2,…,N):
[0114] (1)在视频帧图像中显示的位置(ui,vi);
[0115] (2)拍摄点的地理位置 分别是第i个拍摄点的经度,纬度,高度;
[0116] (3)按上述方法测得第i个拍摄点的摄像头姿态矩阵Ri;
[0117] (4)第i个拍摄点的内部参数焦距长fi,像主点坐标(cxi,cyi);
[0118] 步骤2:
[0119] 计算相对于地心的N个姿态矩阵,i=1~N,R0i=RiRvi
[0120] 其中
[0121] 步骤3:
[0122] 利用公式得到N个拍摄点摄像头光心的地心坐标系坐标T0i={Txi,Tyi,Tzi}T i=1~N;其中{ΔTxi,ΔTxi,ΔTzi}T=RviTΔTi;ΔTi是摄像头光心相对于GPS接收天线的偏移矢量; 是将
经度,纬度,高度转换成地心坐标系的X坐标的函数; 是将经度,纬度,高度转换
成地心坐标系的Y坐标的函数; 是将经度,纬度,高度转换成地心坐标系的Z坐标
的函数;
[0123] 步骤4
[0124] 根据拍摄点N的姿态矩阵R0N,位置[TxN TyN TzN],在图像中显示的位置坐标(uN,vN),摄像头焦距像素长fN,像主点坐标(cxN,cyN)都满足以下方程
[0125]
[0126]
[0127] 其中r0iab表示姿态矩阵R0i的第a行第b列的元素值;i=1~N一共列2N个方程,解(Xx,Xy,Xz)三个未知数;或采用摄影测量前方交汇方法计算出物体X得到地心坐标系坐标(Xx,Xy,Xz);最后由大地测量学公式得到地心坐标(Xx,Xy,Xz)对应的经纬度。
[0128] 本发明还提供了一种基于智能机姿态数据的单目单点定位方法,包括步骤:
[0129] 假设智能机上的相机内部参数矩阵为:
[0130]
[0131] 被观察物体是一个直径=D大小的物体,
[0132] 在智能机上成像的宽度是Δu,高度是Δv,
[0133] 成像中心点像坐标(u,v),
[0134] 采用上述方法测得智能机姿态矩阵Rg,并测得智能机上的摄像头姿态矩阵R=△RRg包括以下两种情况:
[0135] (1)若已知智能机摄像头光心局部坐标系坐标是T,
[0136] 可单目估算出物体的局部坐标系下三维坐标:
[0137]
[0138] 其中
[0139] (2)若已知物体的局部坐标系下三维坐标X,可以求相机坐标T
[0140]
[0141] 该情况实现了相机的单目定位。
[0142] 本发明还提供了一种基于智能机姿态数据的全景影像生成方法,包括以下步骤:
[0143] 步骤1、智能机在某一固定点用不同姿态拍摄n张图像,根据上述方法计算智能相机的姿态矩阵,根据智能相机的姿态矩阵再计算智能机摄像头姿态矩阵,分别为R0i,i为0~n-1之间的整数,n为大于等于1的整数;
[0144] 步骤2、根据影像重叠区域迭代求解进行精确纠正
[0145] (1)提取图像间重合区域的同名点对
[0146] 定义Hij=KjRjRiTKi-1
[0147] 对N张图像之间任意两张i,j进行匹配寻找图像上的同名点对,可以将第i张图像Ii经过透视Hij变换后得到图像Ii’再与第j张图像Ij作细致匹配,最后将图像Ii上的匹配点坐标经过Hij-1逆变换还原成Ii图原始的坐标;
[0148] (2)根据上一步得到的同名点对匹配关系建立误差e相对于参数集
[0149] φ=[… fi qi0 qi1 qi2 qi3 … fj qj0 qj1 qj2 qj3 …]T
[0150] 的数学模型e(φ),
[0151] 前面得到的智能机摄像头姿态矩阵R0i转换成4元数qi00,qi01,qi02,qi03,i=0,…,n-1
[0152] 以φ=φ0=[… f0i qi00 qi01 qi02 qi03 … f0j qj00 qj01 qj02 qj03 …]T作为初值,[0153] 采用LM法通过减小误差e,逐步得到精确化相机姿态qi0,qi1,qi2,qi3和焦距参数fi;
[0154] 最后将精确化的φ中的4元数qi0,qi1,qi2,qi3转化成姿态矩阵Ri,i=0,…,n-1;
[0155] 步骤3、开辟一张宽w高h大小的全景影像,扫描全景影像上每一个像素,针对全景图的每一个像素(x,y)进行如下(1)(2)处理:
[0156] (1)横坐标x转换成 纵坐标y转换成θ;
[0157] 其中w,h是全景图像的宽,高;
[0158] (2)依据小孔成像公式
[0159]
[0160] 其中 fi为相机i焦距像素长度,(cix,ciy)是相机i的像主点;
[0161] 利用Ri将 转换成映射到每个相机i的像坐标(ui,vi),若(ui,vi)在图像范围内,则将相机i像坐标(ui,vi)处颜色取出,加权渲染到全景图(x,y)处;权重与(ui,vi)到该图像边缘最短距离有关,距离越短权重越小;若无一个相机的(ui,vi)在其图像范围内,渲染透明色或背景色到(x,y)处;扫描完全景图像上所有点填充相应的颜色,完成全景图像的渲染;
[0162] 或者,在步骤2中先将全景图像颜色值全部清0,在步骤3中针对n张图像将全景图像上的相应区每个像素扫描n轮,分n轮依次将加权颜色值累加在全景图的像素上;
[0163] 步骤4全景图像的三维浏览和检索定位
[0164] (A)智能机姿态控制浏览三维全景图像
[0165] 在虚拟场景中以球心为观察点,球体内壁以全景图作为纹理渲染一个球;设定智能机摄像头观察方向{r31,r32r33},自身向上方向{-r21,-r22,-r23};rij是姿态矩阵R中第i行第j列元素;
[0166] (B)全景图建库、检索和定位
[0167] 为有效利用存储空间,除采用步骤3(1)中的公式外还可用墨卡托转换公式,
[0168]
[0169] 转换成全景图像,保持建库和检索的转换方式一致;
[0170] 建库
[0171] 提取全景图像的特征点集合,建立与全景图像关联的特征点数据库,库中每个特征点指向其所在的全景图像;
[0172] 检索
[0173] 同一地点c≥1张图像合成待检索全景图像并提取渲染区特征点,对每个特征点,查询库中与其最相似特征点所指向的全景图像,按特征点相似程度对库中指向的全景图像进行加权投票,按投票总和大小排序;
[0174] 将待检索全景图中已渲染区和投票得到的库中全景图对应区域的像素集进行相关匹配计算,相关系数越大越相似;输出投票排序靠前且相关系数大于预设值的结果;如果c=1,也可根据单张拍摄姿态矩阵R,将库中全景图像映射到单张拍摄图像域与单张拍摄图像进行相关匹配;
[0175] 定位
[0176] 在已知GPS情况下,检索GPS附近区域的全景图像组成的子集特征库;
[0177] 服务器数据库将全景图像与其地理位置坐标绑定在一起存储,检索结果是编号为i*的图像,即可在数据库中查找出i*所对应的地理位置。
[0178] 本发明还提供了一种基于智能机姿态数据的目标方向选择方法,包括以下步骤:
[0179] 1.定义智能机主方向或载体主方向相对于智能机自身的矢量单位p;
[0180] 2.采用上述方法获取智能机当前姿态矩阵Rg;
[0181] 3.计算p┴=RgTp为智能机主方向或载体主方向相对于指北坐标系的矢量;
[0182] 4.计算局部坐标系中的目标矢量vo=O-P,假设局部坐标系中智能机自身坐标为P,目标的坐标为O,则目标矢量vo=O-P;
[0183] 5.计算矢量p┴与目标矢量vo之间夹角的余弦,或计算两个矢量之间的夹角;
[0184] 如果夹角的余弦>0.9,或者夹角偏差的绝对值|dφ|很小则触发智能机与该目标O之间的某一关联事件;
[0185] 通过两矢量的点积除以|vo|得到夹角dφ的余弦,
[0186] cos(dφ)=(p┴点积vo)/|vo|
[0187] 如果该余弦cos(dφ)>cos(φa),φa为预设值,则该目标方向选择事件可触发;
[0188] 6.在需要与用户的可视化交互情况下,在指北坐标系中实时绘制目标、智能机和矢量p┴;
[0189] 计算局部坐标系中智能机主方向矢量与目标矢量之间夹角的方向余弦,根据余弦值大小判定夹角,并且在三维空间或二维空间中绘制出智能机主方向矢量与目标矢量之间的方向关系,便于人机交互。
[0190] 本发明还提供了一种基于智能机姿态数据的视频影像实时纠正方法,包括以下步骤:
[0191] 1.采用上述方法计算智能机拍摄视频的每一帧图像对应的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R,△R是摄像头相对于智能机的转换矩阵;
[0192] 2.将摄像头的姿态矩阵R分解为R=RτR_从而得到矩阵Rτ,相机的拍摄姿态R不规则,期待得到用虚拟姿态R_作为拍摄姿态矩阵得到的标准图像;
[0193] 3.对智能机拍摄视频的每一帧图像I经过H=K2RτTK-1的Homograph变换得到I’;
[0194] 其中 是拍摄相机的内部参数矩阵,f是焦距的像素长度,(cx,cy)是相机主点坐标;对于理想相机(cx,cy)是图像的中心点,cx=w/2,cy=h/2,w,h是原始图像I的宽和高;
[0195] 是纠正以后虚拟相机的内部参数矩阵,f2是纠正以后虚拟相机的焦距的像素长度,(cx2,cy2)是纠正以后虚拟相机主点坐标。
[0196] 本发明还提供了一种基于姿态数据的智能机单像定位方法,包括以下步骤:
[0197] 假设相机或摄像机内参数据f和(cx,cy)已知,f是焦距的像素长度,(cx,cy)是相机主点坐标,
[0198] 内参矩阵
[0199] 单像目标定位整体实施步骤如下:
[0200] 1.搜集采集物方点,转化成局部坐标系坐标;
[0201] 2.采用上述方法获取智能机的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R,△R是摄像头相对于智能机的转换矩阵;
[0202] 3.拍摄一张图像,自动提取其中的多个特征点,通过匹配算法得到与物点对应的n对物像同名点;n个物方点的坐标是Xi=[Xix,Xiy,Xiz]T i=1,…,n,对应n个像点坐标是[ui vi]T i=1,…,n;
[0203] 4.分无错和容错2种情况计算相机在局部坐标系下的坐标T:
[0204] (1)若确认多个特征点无错误,则
[0205] 采用数学模型解方程得到自身在局部坐标系下坐标Tx,Ty,Tz
[0206]
[0207] 其中
[0208] 进而得到相机位置T,最大集ζ为n个点对组成的全集;
[0209] (2)若不确认多个特征点是否全部正确,采用Ransac容错算法,通过共线方程模型随机选取两对点n=2,根据模型式(HH2)计算相机位置T,并通过共线方程zi[u’i v’i 1]T=KR(Xi-T)验证T,
[0210] 通过KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程,选取符合共线方程点数最大集ζ并计算最大集ζ对应的T*,单目多点Ransac容错算法流程如下:
[0211] 2.从n个像点中随机挑选出2个距离足够大的像点,至少大于容忍误差error的2倍;
[0212] 3.挑选出来的2个像点与物点对应形成2对物象同名点,按式(HH2)计算智能机位置T;
[0213] 4.用T验证所有n对物象同名点的共线方程对应关系,共线方程KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程,统计符合共线方程的个数i_in,如果i_in数量超过前期的数量nmax则记录本组满足共线方程容忍误差数量最大的点集ζmax,并刷新nmax=i_in;
[0214] 5.更新迭代次数k+1→k
[0215] 6.回到第1步,直到满足Ransac概率收敛条件(1-(nmax/n)2)k
[0216] 7.将前面搜索得到的最大的点集ζmax搜集起来进行最后一次多点最小2乘计算,按公式(HH2)计算得到Tbest得到最终结果;
[0217] 本发明还提供了一种基于智能机姿态数据的相对定位算法,包括以下步骤:
[0218] a)两相机之间相对定位
[0219] 假设相机1,2之间有i=1..n≥2对同名点u1i,v1i~u2i,v2i;
[0220] 其中R1,R2是智能机相机在拍摄的1,2两个地点测出来的姿态矩阵数据;
[0221] 已知相机1的内参矩阵 相机2的内参矩阵 其中(cxi,cyi)是相机i的像素主点坐标,fi是相机i的焦距像素长;
[0222] 已知两相机之间的距离是L;
[0223] 计算相机2相对于相机1的位移矢量T包括以下步骤:
[0224] 2.用上述方法计算智能机上相机的姿态Rg1,Rg2
[0225] 计算R1=△RRg1R2=△RRg2
[0226] 进一步得到R=R2R1T
[0227] 3.构建矩阵A
[0228]
[0229] 其中
[0230] uji*=Ki-1ui=[uji*x uji*y uji*z]T,
[0231] ujiR*=Ruji*=[ujiR*x ujiR*y ujiR*z]T,i=1,2,j=1..n;
[0232] 3.如果确认n对点都是正确的,则
[0233] 求约束||t3x1||=1下Anx3t3x1=0的解
[0234] 或采用数学SVD分解得到Anx3=UnxnWnx3VT3x3,
[0235] SVD分解出来的V矩阵的最后1列的矢量,即对应于最小奇异值的特征矢量为t,T=-LRTt得到结果,结束
[0236] 否则继续进行以下步骤;
[0237] 4.设置迭代初值nmax=0,k=1;
[0238] 5.随机挑选A矩阵中的2行,构建A2x3
[0239] 就是求约束||t2||=1下A2x3t2=0的解
[0240] 或采用SVD分解得到A2x3=U2x2W2x3VT3x3,
[0241] 分解出来的V的最后1列的矢量即为t2;
[0242] 6.将t2=[ttx tty ttz]T代入第j=1..n个点,采用式(AB)验证点j是否是内点,[0243] (uj2*zuj1R*y-uj2*yuj1R*z)ttx+(uj2*xuj1R*z-uj2*zuj1R*x)tty+(uj2*yuj1R*x-uj2*xuj1R*y)ttz<ε[0244]     (AB)[0245] 其中ε表示最大容忍误差物方长度,相对于两相机之间的距离=1而言;
[0246] 满足式(AB)则点j是内点,如果满足内点的数量nt超过最佳值nmax则ζt-->ζ nt-->nmax
[0247] 7.如果(1-(nmax/n)2)k<0.00001错误率足够小,退出迭代进入步骤9;
[0248] 8迭代次数k增加1,回到步骤5反复迭代;
[0249] 9.最后采用最小二乘法针对最大内点集ζ重新计算一次最优t,
[0250] 求约束||t3x1||=1下An’x3t3x1=0的解,其中n’=nmax
[0251] 或采用SVD分解得到An’x3=Un’xn’Wn’x3VT3x3,
[0252] 分解出来的V的最后1列矢量,即对应于最小奇异值的特征矢量,即为t最终得到T=-LRTt;
[0253] b)多个相机间的相对定位
[0254] 构建矩阵
[0255]
[0256] U(ij)k=[U(ij)k1 U(ij)k2 U(ij)k3] k=1,2
[0257]
[0258]
[0259] rc(ij)ab是指第i个点对应的第j个图像的相机的姿态矩阵的a行b列,uc(ij)是第i个点对应的第j个图像上的像点坐标,(cx,cy)是相机主点坐标,f是相机的焦距;
[0260] 对矩阵A进行SVD分解得到A=UWVT,V中最后一个非零矢量
[0261] X=[T1x T1y T1z … Tcx Tcy Tcz X1 Y1 Z1 … XN YN ZN]T的每一个分量对应C个相机的位置T1x,T1y,T1z,…,Tcx,Tcy,Tcz和N个点的坐标X1,Y1,Z1,…,XN,YN,ZN。
[0262] 本发明还提供了基于智能机姿态的目标识别算法,包括以下步骤:
[0263] 根据上述方法,通过H=K2RτTK-1对智能机拍摄视频的图像I进行纠正得到I';
[0264] 对纠正后的图像I'进行目标检测、识别处理,得到I'图像上目标的外接多边形点坐标集xi,yi,i=1,...,N;
[0265] 通过反纠正H-1的方法得到坐标集在原图上映射的坐标xi',yi',即
[0266]
[0267] 传感器纠正目标识别算法的具体实施方式:
[0268] 首先根据传感器得到的R矩阵对原始图I进行H=K2RτTK-1标准化纠正得到标准纠正图I’,然后对I’图像进行目标检测、跟踪,得到它对应的目标框r,目标框r相对于标准模板的平移是rx,ry,
[0269]
[0270] 目标框r首先经过平移变换Ht映射到标准图上,然后再经过H-1变换映射到原始图上,因此目标框r相对于原始图像I的H变换为
[0271] r*=H-1Htr。
[0272] 本发明产生的有益效果是:本发明的方法能实时得到手机在局部地理坐标系中的姿态矩阵的方法,姿态矩阵准确描述了智能机在客观三维场景中的姿态数据对于导航,方向选择,便携式控制都有及其广泛的应用;可实现3D漫游控制,游戏场景漫游,虚拟现实,增强现实,3D仿真等领域;实现多张图像对某一物体空间3维定位,或者物体3维坐标与相机3维坐标之间的相互定位。
[0273] 另外本发明还可以实现便携式智能机拍摄合成全景图像,以及根据全景图像进行空间定位以及空间目标方向选择、控制、人机交互操作;还可实现基于姿态矩阵的智能机的视频图像实时纠正,能保持生成纠正的图像中的水平线始终对应客观场景的地平线,可用于颠簸的路面,海面场景视频图像的纠正。对于接近垂直于地面拍摄的情况,生成纠正的图像中的水平朝右方向始终对应客观场景中的局部坐标系的x轴(北),可用于无人机地面图像拼接。
[0274] 本发明还可根据姿态矩阵和图像上2个点的像坐标对相机自身进行定位以及基于姿态矩阵的双目图像或多目图像之间相对定位,解决了任意姿态拍摄视频仍能准确识别目标的难题,不必考虑目标大角度旋转,仍能实现高效准确的目标检测。

附图说明

[0275] 下面将结合附图及实施例对本发明作进一步说明,附图中:
[0276] 图1是本发明实施例位置服务中同时符合位置和方向的目标位示意图;
[0277] 图2是本发明实施例的单像双点定位示意图;
[0278] 图3是本发明实施例传感器纠正目标识别算法原理示意图。

具体实施方式

[0279] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0280] 本发明实施例智能机姿态测定方法,包括以下步骤:
[0281] 1)定义局部坐标系:局部坐标系是指原点在智能机,Z轴指向地球表面方向,Y轴或X轴与纬线相平行的坐标系;或局部坐标系原点位于地球上任意一点,Z轴与重力方向一致,北代表局部坐标系X轴,西代表局部坐标系Y轴;
[0282] 2)测定智能机姿态矩阵Rg。Rg是一个相对于局部坐标系的3x3单位正交矩阵,
[0283] Rg由下法之一获得:
[0284] 方法(1)采用加速度传感器与磁力计或方向传感器
[0285] 如果智能机有加速度传感器,且有磁力计或方向传感器,用以下公式(1)计算Rg[0286]
[0287] 其中
[0288]
[0289]
[0290] vax,vay,vaz是智能机测出来的智能机加速度传感器的x,y,z三个方向的值,或是这三个值经滤波的结果;
[0291] Ra是加速度传感器相对于智能机的姿态转换矩阵;
[0292] 当az≤0时,s=-1,az>0时,s=1;
[0293] 若采用方向传感器: 带入公式(1)计算Rg;
[0294] 若采用磁力计:计算
[0295]
[0296] 其中Rm是磁力计相对于智能机的姿态转换矩阵;{vmx,vmy,vmz}是智能机上磁力计检测到的三个值或这三个值经滤波的结果;
[0297] 再计算
[0298]
[0299] 利用磁力计计算方位角 的三角函数为:
[0300]
[0301]
[0302] 带入公式(1)即可算出Rg;
[0303] 方法(2)用旋转矢量传感器
[0304] 如果智能机配置有旋转矢量传感器检测到智能机上的旋转矢量传感器只有3个数据
[0305] values[0],values[1],values[2],
[0306] 采用以下公式得到
[0307] q1=values[0],q2=values[1],q3=values[2],
[0308]
[0309] 若检测到旋转矢量传感器有4个数据values[0],values[1],values[2],values[3]
[0310] 则采用以下公式得到
[0311] q1=values[0],q2=values[1],q3=values[2],q0=values[3]
[0312] 则Rg0矩阵为:
[0313]
[0314] 根据智能机旋转矢量传感器坐标系定义的不同,得到Rg=Rg0RLT,其中RLT是局部坐标系与旋转矢量传感器坐标系之间的变换矩阵;
[0315] 根据智能机旋转矢量传感器坐标系定义的不同,采取以下几种情况之一得到Rg:
[0316] 若旋转矢量传感器的X轴指向东,Y轴指向北,则
[0317]
[0318] 若旋转矢量传感器的X轴指向北,Y轴指向西,则
[0319] Rg=Rg0;   (3)
[0320] 若旋转矢量传感器的X轴指向南,Y轴指向东,则
[0321]
[0322] 方法(3)采用陀螺仪、加速度传感器与磁力计迭代
[0323] 第1步选用方法(1)或方法(2)计算Rg的初值,将Rg转换成4元数q0,q1,q2,q3作为以下第2-7步迭代的初值
[0324] 第2步设定exInt,eyInt,ezInt原始值为0
[0325] exInt=0,eyInt=0,ezInt=0
[0326] 第3步根据接收到的磁力计矢量{mx,my,mz},得到正确磁场矢量{wx,wy,wz}
[0327] 先将矢量{mx,my,mz}替换成将其单位化以后的矢量
[0328] 得到局部坐标系下磁场的正确的磁场方向矢量{bx,0,bz}
[0329] hx=2×mx×(0.5-q2×q2-q3×q3)+2×my×(q1×q2-q0×q3)+2×mz×(q1×q3+q0×q2);
[0330] hy=2×mx×(q1×q2+q0×q3)+2×my×(0.5-q1×q1-q3×q3)+2×mz×(q2×q3-q0×q1);
[0331] hz=2×mx×(q1×q3-q0×q2)+2×my×(q2×q3+q0×q1)+2×mz×(0.5-q1×q1-q2×q2);
[0332]
[0333] bz=hz
[0334] 再转换到正确磁场矢量{wx,wy,wz}
[0335] wx=2×bx×(0.5-q2×q2-q3×q3)+2×bz×(q1×q3-q0×q2);
[0336] wy=2×bx×(q1×q2-q0×q3)+2×bz×(q0×q1+q2×q3);
[0337] wz=2×bx×(q0×q2+q1×q3)+2×bz×(0.5-q1×q1-q2×q2);
[0338] 第4步根据接收到的加速度传感器数据ax,ay,az,和{wx,wy,wz}
[0339] 得到误差矢量{ex,ey,ez}并计算其累计值exInt,eyInt,ezInt
[0340] 先将矢量{ax,ay,az}替换成将其单位化以后的矢量
[0341] vx=2*(q1*q3-q0*q2);vy=2*(q0*q1+q2*q3);vz=q0*q0-q1*q1-q2*q2+q3*q3;
[0342] ex=(ay×vz-az×vy)+(my×wz-mz×wy);
[0343] ey=(az×vx-ax×vz)+(mz×wx-mx×wz);
[0344] ez=(ax×vy-ay×vx)+(mx×wy-my×wx);
[0345] 计算误差累计值
[0346] exInt替换为exInt+ex×Ki;eyInt替换为eyInt+ey×Ki;ezInt替换为ezInt+ez×Ki;
[0347] 其中Ki为一可调节的正系数,Ki在0.00001至0.5中任意选取;
[0348] 第5步根据误差矢量{ex,ey,ez}及其累计值纠正陀螺仪数据{gx0,gy0,gz0}
[0349] 假设智能机读出当前的一组陀螺仪数据为{gx0,gy0,gz0} gx=gx0+Kp×ex+exInt;gy=gy0+Kp×ey+eyInt;gz=gz0+Kp×ez+ezInt;
[0350] 其中Kp为一可调节的正系数
[0351] Kp在0.000001至20.0中任意选取;
[0352] 第6步根据陀螺仪数据gx,gy,gz修正4元数
[0353] 随着不断接收到陀螺仪数据gx,gy,gz,对4元数按如下方式修正,halfT为修正周期,halfT=0.00001~-10.0,
[0354] q0替换为q0+(-q1×gx-q2×gy–q3×gz)×halfT;q1替换为q1+(q0×gx-q3×gy+q2×gz)×halfT;q2替换为q2+(q3×gx+q0×gy-q1×gz)×halfT;q3替换为q3+(-q2×gx+q1×gy+
q0×gz)×halfT;
[0355] 第7步输出Rg矩阵和4元数
[0356] 将4元数{q0,q1,q2,q3}单位化成 输出
[0357] 4元数转Rg矩阵公式如下
[0358]
[0359] 第8步回到第3步继续接收陀螺仪运动数据更新姿态4元数q0~q3,在循环的过程中每次到第7步都能输出当前的Rg矩阵和4元数。
[0360] 注:在没有磁力计的时候,可去掉第3步,同时第4步中的
[0361] ex=(ay×vz-az×vy)+(my×wz-mz×wy);
[0362] ey=(az×vx-ax×vz)+(mz×wx-mx×wz);
[0363] ez=(ax×vy-ay×vx)+(mx×wy-my×wx);
[0364] 改为
[0365] ex=ay×vz-az×vy;
[0366] ey=az×vx-ax×vz;
[0367] ez=ax×vy-ay×vx;
[0368] 本发明实施例的智能机显示屏的姿态测定方法,可实现各种可视化增强现实应用,包括以下步骤:
[0369] 智能机显示屏的姿态矩阵为
[0370]
[0371] rx是智能机显示屏像素阵列x轴方向在局部坐标系中的分量;
[0372] ry是智能机显示屏像素阵列y轴方向在局部坐标系中的分量;
[0373] rz是垂直于智能机显示屏表面方向向智能机显示屏内部朝前看的视线方向在局部坐标系中的分量;
[0374] 1)按上述方法测定智能机姿态,并得到智能机的姿态矩阵Rg;
[0375] 2)计算R=ΔR×Rg;得到智能机显示屏的姿态矩阵;
[0376] ΔR为智能机显示屏姿态矩阵R相对于智能机姿态矩阵Rg的一个固定的方向的转换,智能机自身Z轴定义为智能机加速度计的z轴方向,
[0377] 当显示屏观察方向和智能机自身Z轴方向刚好相反时
[0378] 当显示屏观察方向和智能机自身Z轴方向完全一致时
[0379] 否则采用摄影测量方法标定ΔR=RARg-1,RA是摄影测量后方交汇法算得的摄像头姿态矩阵,Rg是根据上述方法测得此时智能机的姿态矩阵。
[0380] 本发明实施例基于智能机姿态的虚拟现实漫游方法,可实现3D漫游控制,游戏场景漫游,虚拟现实,增强现实,3D仿真等领域,包括以下步骤:
[0381] 1)采用上述方法得到智能机显示屏的姿态矩阵R
[0382] 2)移动控制漫游观察者在局部坐标系中的位置
[0383] 定义漫游观察者是在局部坐标系中的一个具备自身位置、姿态且用于观察周边场景的对象;智能机显示屏所渲染的场景就是漫游观察者在局部坐标系中所应看到的场景图像;定义漫游观察者在局部坐标系中的坐标为Xd,Yd,Zd
[0384] 用以下三种模式之一控制漫游观察者在虚拟场景中的移动:
[0385] (1)模式1:普通二维移动
[0386] 当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,相当于局部坐标系下,Xd增加Vx=ΔXr11+ΔYr21;Yd增加Vy=ΔXr12+ΔYr22;Zd不变;
[0387] (2)模式2:智能二维移动
[0388] 当手指按{ΔX,ΔY}方向滑过智能机显示屏平面的时候,采用如下方法:
[0389] 首先选择R矩阵右侧一列中的r13,r23,r33中哪一个分量的绝对值最大,
[0390] 如果|r33|最大,Xd增加Vx=ΔXr11+ΔYr21Yd增加Vy=ΔXr12+ΔYr22
[0391] 如果|r23|最大,Xd增加Vx=ΔXr11±ΔYr31Yd增加Vy=ΔXr12±ΔYr32
[0392] r23≥0时,±取+;r23<0时±取-或者r23≥0时,±取-;r23<0时±取+
[0393] 如果|r13|最大,Xd增加Vx=±ΔXr31+ΔYr21Yd增加Vy=±ΔXr32+ΔYr22
[0394] r13≥0时,±取+;r13<0时±取-或者r13≥0时,±取-;r13<0时±取+;
[0395] (3)模式3:三维漫游移动
[0396] 因为智能机显示屏只有二维,单个手指滑动只能进行二维操作,单指划过智能机显示屏时ΔX和ΔY与滑动位移成正比;此时操作智能机的用户双指滑动触碰智能机操作实现3维操作:采用双指合拢相当于ΔZ<0,双指拉开相当于ΔZ>0,或者双指合拢相当于ΔZ>0,双指拉开相当于ΔZ<0;当智能机接收到手指控制信息{ΔX,ΔY,ΔZ}的时候,
[0397] Xd增加Vx=ΔXr11+ΔYr21+ΔZr31Yd增加Vy=ΔXr12+ΔYr22+ΔZr32Zd增加Vz=ΔXr13+ΔYr23+ΔZr33;
[0398] 3)设置漫游观察者在局部坐标系里的位置和方向:
[0399] 根据漫游观察者的局部坐标系坐标Xd,Yd,Zd,以及步骤1)测定得到的姿态矩阵R,利用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库中用于设定相机位姿的图形库函数,设置漫游观察者在局部坐标系里的位置和方向:
[0400] 需要设定以下几个量:
[0401] (1)漫游观察者自身观察的垂直视场角θ,就是智能机显示屏上边缘中点的视线方向与下边缘中点的视线方向的夹角;
[0402] (2)漫游观察者所在的位置Xd,Yd,Zd,由步骤2)漫游方法修改;
[0403] (3)漫游者观察方向{r31,r32r33}或者用户注视点坐标(Xd+r31,Yd+r32,Zd+r33)[0404] (4)漫游者自身向上方向的矢量{-r21,-r22,-r23}
[0405] 其中步骤(3)和(4)中的rij是智能机显示屏姿态R矩阵中的第i行j列,i=2或3,j=1、2或3;
[0406] 4)在局部坐标系下渲染绘制三维场景
[0407] 预先在智能机的显示屏内设置一个3维渲染图层进行三维场景渲染;
[0408] 这里被绘制的三维场景中的点、线、面和物体模型的几何坐标都要转换成局部坐标系下的坐标[Xi Yi Zi]T,即与漫游者的坐标Xd,Yd,Zd在同一个局部坐标系下;用OpenGL,OpenES,OS X OpenGL,Direct3D或osg绘图软件库实现局部坐标系下的三维绘图。
[0409] 智能机摄像头的拍摄方向与屏幕观察方向一致时,可以智能机摄像头拍摄的视频图像为底图,叠加绘制三维场景中的点线面。
[0410] 在本发明的一个实施例中,在上述实施例的基础上虚拟场景赋予真实的地理坐标,可用于地理信息浏览,地图漫游,虚拟旅游,3D真图游戏场景漫游控制,增强现实,数字城市,智慧城市漫游,房地产漫游等领域。
[0411] 在所述步骤3)和步骤4)之间可增加如下操作:
[0412] (a)获取智能机的高度hs,纬度θs和经度
[0413] θs是智能机的纬度, 是智能机的经度,由智能机上自带的GPS接收模块获取;
[0414] (b)计算智能机所在经纬度的Rv
[0415]
[0416] (c)计算智能机所在纬度θs经度 高度hs的地心坐标系坐标Ts
[0417] 利用大地测量学中经典的转换公式
[0418] 得到Ts;
[0419] 其中
[0420] hs是智能机离地面高度
[0421] Ns是随纬度变化的卯酉圈曲率半径;
[0422]
[0423] a,b是地球椭球的长短轴,是大地测量学中的已知常量;
[0424] e是偏心率,是定值;
[0425] (d)根据地球上任何一个点的经度 纬度θi和高程hi得到该点地心坐标系坐标T0i=[X0i Y0i Z0i]T
[0426] 利用大地测量学中经典的转换公式
[0427] 得到T0i;
[0428] 其中
[0429] hi是点离地面高度
[0430] Ni是随纬度变化的卯酉圈曲率半径;
[0431]
[0432] a,b是地球椭球的长短轴,是大地测量学中的已知常量;
[0433] e是偏心率,是定值;
[0434] 如果已知一个物体所在经纬度 和θi,通过本步骤计算出它的地心坐标系坐标T0i;
[0435] (e)地心坐标系坐标T0i转换为局部坐标系中的坐标(Xi Yi Zi)T
[0436]
[0437] ΔT是局部坐标系中智能机显示屏的几何中心相对于智能机GPS接收天线的局部坐标系偏移。
[0438] 在本发明的另一实施例中,可实现便携式智能机任意倾斜摆放条件下显示屏所显示的文字始终是按重力方向水平显示,这将会给用户极好的体验。具体实现为:
[0439] 在步骤3)和步骤4)之间或在步骤4)之后,将智能机的显示屏设定为二维绘图模式并设置若干个二维标签,针对每一个二维标签,按如下步骤显示:
[0440] 1)首先确定二维标签的中心位置u,v;
[0441] 如果标签用于标注三维场景中局部坐标系坐标为(X,Y,Z)的目标,则根据以下公式确定目标显示的中心位置u,v
[0442] ZO=r31(X-Xd)+r32(Y-Yd)+r33(Z-Zd)
[0443]
[0444] 式中:
[0445] cx,cy是智能机显示屏中心点的坐标,若显示屏是矩形,cx=屏宽/2,cy=屏高/2;
[0446] r11~r33是R矩阵对应行列的元素;
[0447] h是显示屏上下边缘垂直像素长,θ是漫游观察者自身观察的垂直视场角
[0448] Xd,Yd,Zd是漫游观察者在局部坐标系中的坐标;
[0449] 如果满足ZO>0且u,v在显示屏范围内,则u,v保持不变,
[0450] 否则需要按下法修正u,v
[0451] 若ZO=0则将[u v]替换为从点(cx,cy)出发
[0452] 按矢量{r11(X-Xd)+r12(Y-Yd)+r13(Z-Zd),r21(X-Xd)+r22(Y-Yd)+r23(Z-Zd)}
[0453] 方向的射线与显示屏边缘相交的2维点;
[0454] 若ZO>0则将u,v替换成从点(cx,cy)到点(u,v)的连线与显示屏边缘相交的2维点;
[0455] 若ZO<0则将u,v替换成从点(u,v)到点(cx,cy)延长线与显示屏边缘相交的2维点;
[0456] 如果二维标签不是用于标注目标,u,v为显示屏范围内的一个由界面设计者设定的像素坐标,或是用户手指触摸或鼠标点击的显示屏像素坐标;
[0457] 2)按下述方法(1)或(2)计算矢量{Qx,Qy}
[0458] 方法(1)Qx=-r23/La Qy=r13/La
[0459] 其中r23,r13是上述方法中的R矩阵对应行列的元素,
[0460]
[0461] 方法(2)利用上述智能机姿态测定方法(1)所述加速度计的前两个输出值ax,ay得到
[0462] Qx=-ay/La Qy=ax/La,
[0463] 3)在二维平面上经过以下矩阵旋转变换以后再绘制二维标签:
[0464]
[0465] 二维标签上每一点X,经过上式变换到坐标X’显示出来;
[0466] 式中±取+是正放显示,取-是倒放显示,标签的水平轴始终平行于地面。
[0467] 实际上就是以u,v为中心经过旋转变换 显示标签。
[0468] 叠加的内容可以是静止的目标如:商铺、地图上的地名,及线条围成的区域。
[0469] 也可以是动态的目标如:好友,车船等交通工具。
[0470] 4)得到局部坐标系坐标(Xi,Yi,Zi)的目标i的标签像坐标ui,vi之后,在智能机屏幕坐标ui,vi区域附近设置感应区,等待接收用户触摸该区域的事件。当用户在智能机上点击ui,vi附近区域的时候,将执行与目标i相关联的操作。
[0471] 包括以下操作之一:
[0472] 1.弹出目标i更详细的广告信息,资费信息,需求信息,人气值;
[0473] 2.向目标i发端信或者聊天或者打电话;
[0474] 3.弹出与目标i关联的菜单或对话框;
[0475] 4.向目标i发送请求;
[0476] 5.获取目标i的数据;
[0477] 6.向服务器发请求,使得目标i的人气值增加;
[0478] 7.向服务器发请求,记录本次操作。
[0479] 本发明实施例中,三维场景为一个空心的三维形体,三维形体为空心球,空心立方体、空心柱体、空心正多面体或空心锥体,三维形体的内壁以全景图作为纹理进行渲染;所述漫游观察者在虚拟场景中位于三维形体内部的某一点,从三维形体内部观察三维形体的内壁,实现利用智能机显示屏姿态控制全景浏览。该实施例实现了任意姿态拿放智能机时,浏览渲染全景始终保持正确的渲染效果。
[0480] 本发明实施例标定智能机上的摄像头姿态矩阵的方法,包括以下步骤:
[0481] 对姿态矩阵Rg进行校正,校正姿态矩阵
[0482] 其中R=ΔR×Rg;
[0483] ΔR为智能机的摄像头姿态矩阵R和智能机姿态矩阵Rg之间的一个固定的方向转换,当摄像头方向和智能机屏幕方向刚好相反时 摄像头方向和智能机屏幕方向完全一致时 否则采用摄影测量后方交汇法标定ΔR=RARg-1。RA是摄
影测量后方交汇法算得的相机姿态矩阵,Rg是根据上述方法测得此时智能机的姿态矩阵。
[0484] 本发明实施例基于智能机姿态数据的多目视觉定位方法,可实现多张图像对某一物体空间3维定位。具体包括以下步骤:
[0485] 步骤1:
[0486] 在N个地理位置点拍摄同一个物体X,其中N≥2,测第i个观察点的以下几个量,其中i∈(1,2,…,N):
[0487] (1)在视频帧图像中显示的位置(ui,vi);
[0488] (2)拍摄点的地理位置 分别是第i个拍摄点的经度,纬度,高度;
[0489] (3)按上述方法测得第i个拍摄点的姿态矩阵Ri;
[0490] (4)第i个拍摄点的内部参数焦距长fi,像主点坐标(cxi,cyi);
[0491] 步骤2:
[0492] 计算相对于地心的N个姿态矩阵,i=1~N,R0i=RiRvi
[0493] 其中
[0494] 步骤3:
[0495] 利用公式得到N个拍摄点摄像头光心的地心坐标系坐标T0i={Txi,Tyi,Tzi}T i=1~N;其中{ΔTxi,ΔTxi,ΔTzi}T=RviTΔTi;ΔTi是摄像头光心相对于GPS接收天线的偏移矢量;
是将经度,纬度,高度转换成地心坐标系的X坐标的函数; 是将经度,纬度,高度转
换成地心坐标系的Y坐标的函数; 是将经度,纬度,高度转换成地心坐标系的Z坐
标的函数;
[0496] 步骤4
[0497] 根据拍摄点N的姿态矩阵R0N,位置[TxN TyN TzN],在图像(单张图像或者视频都可以)中显示的位置坐标(uN,vN),摄像头焦距像素长fN,像主点坐标(cxN,cyN)都满足以下方程[0498]
[0499]
[0500] 其中r0iab表示姿态矩阵R0i的第a行第b列的元素值;i=1~N一共列2N个方程,解(Xx,Xy,Xz)三个未知数;或采用摄影测量前方交汇方法计算出物体X得到地心坐标系坐标(Xx,Xy,Xz);
[0501] 最后由大地测量学公式得到地心坐标(Xx,Xy,Xz)对应的经纬度。
[0502] 本发明基于智能机姿态数据的单目单点定位方法,利用姿态矩阵和物体像坐标实现物体3维坐标与相机3维坐标之间的相互定位,包括步骤:
[0503] 假设智能机上的相机内部参数矩阵为:
[0504]
[0505] 被观察物体是一个直径=D大小的物体,
[0506] 在智能机上成像的宽度是Δu,高度是Δv,
[0507] 成像中心点像坐标u,v,
[0508] 采用上述方法测得智能机姿态矩阵Rg,进一步采用上述方法测得智能机上的相机姿态R=△RRg
[0509] 以下分两种情况讨论:
[0510] 若已知智能机摄像头光心局部坐标系坐标是T,
[0511] 可单目估算出物体的局部坐标系下三维坐标:
[0512]
[0513] 其中
[0514] 反过来若已知物体的局部坐标系下三维坐标X,可以求相机坐标T
[0515]
[0516] 这种情况实现了相机的单目定位。
[0517] 本发明一种基于智能机姿态数据的全景影像生成方法,基于姿态矩阵实现便携式智能机拍摄合成全景图像,以及根据全景图像进行空间定位的方法,具体包括以下步骤:
[0518] 步骤1、智能机在某一固定点用不同姿态拍摄n张图像,根据上述方法得到智能机摄像头的姿态矩阵分别为R0i,i为0~n-1之间的整数,n为大于等于1的整数;
[0519] 步骤2、根据影像重叠区域迭代求解进行精确纠正
[0520] (1)提取图像间重合区域的同名点对。
[0521] 定义Hij=KjRjRiTKi-1
[0522] 对N张图像之间任意两张i,j进行匹配寻找图像上的同名点对,可以将第i张图像Ii经
[0523] 过透视变换Hij后得到图像Ii’再与第j张图像Ij作细致匹配,这样同名点对没有考虑旋转
[0524] 和平移的干扰,不仅找得多而且找得准。最后将图像Ii上的匹配点坐标经过Hij-1逆变换
[0525] 还原成Ii图原始的坐标即可。
[0526] (2)根据上一步得到的同名点对匹配关系建立误差e相对于参数集
[0527] φ=[… fi qi0 qi1 qi2 qi3 … fj qj0 qj1 qj2 qj3 …]T
[0528] 的数学模型e(φ),
[0529] 前面得到的R0i转换成4元数qi00,qi01,qi02,qi03,i=0,…,n-1
[0530] 以φ=φ0=[… f0i qi00 qi01 qi02 qi03 … f0j qj00 qj01 qj02 qj03 …]T作为初值,[0531] 采用LM法通过减小误差e,逐步得到精确化相机姿态qi0,qi1,qi2,qi3和焦距参数fi。
[0532] 最后将精确化的φ中的4元数qi0,qi1,qi2,qi3转化成姿态矩阵Ri,i=0,…,n-1即可。
[0533] 步骤3、开辟一张宽w高h大小的全景影像;
[0534] 步骤4、扫描全景影像上每一个像素,针对全景图的每一个像素(x,y)进行如下(1)(2)处理
[0535] (1)横坐标x转换成 纵坐标y转换成θ;
[0536] 其中w,h是全景图像的宽,高;
[0537] (2)依据小孔成像公式
[0538]
[0539] 其中 fi为相机i焦距像素长度,(cix,ciy)是相机i的像主点,利用Ri将 转换成映射到每个相机i的像坐标(ui,vi),若(ui,vi)在图像范围内,则将相机i像坐标(ui,vi)处颜色取出,加权渲染到全景图(x,y)处;权重与(ui,vi)到该图像边缘最短距离有关,距离越短权重越小;若无一个相机的(ui,vi)在其图像范围内,渲染透明色或背景色到(x,y)处;
[0540] 扫描完全景图像上所有点填充相应的颜色,即完成全景图像的渲染;
[0541] 或者在步骤2中先将全景图像颜色值全部清0,在步骤3中针对n张图像将全景图像上的相应区每个像素扫描n轮,分n轮依次将加权颜色值累加在全景图的像素上;
[0542] 步骤5全景图像的三维浏览和检索定位
[0543] (A)智能机姿态控制浏览三维全景图像
[0544] 在虚拟场景中以球心为观察点,球体内壁以全景图作为纹理渲染一个球;设定智能机摄像头观察方向{r31,r32r33},自身向上方向{-r21,-r22,-r23};rij是姿态R矩阵中第i行第j列元素;方法见上文。
[0545] (B)全景图建库、检索和定位
[0546] 为有效利用存储空间,除采用步骤3(1)中的公式外还可用墨卡托转换公式,
[0547]
[0548] 转换成全景图像,保持建库和检索的转换方式一致;
[0549] 建库
[0550] 提取全景图像的特征点集合,建立与全景图像关联的特征点数据库,库中每个特征点指向其所在的全景图像;
[0551] 检索
[0552] 同一地点c≥1张图像合成待检索全景图像并提取渲染区特征点,对每个特征点,查询库中与其最相似特征点所指向的全景图像,按特征点相似程度对库中指向的全景图像进行加权投票,按投票总和大小排序;
[0553] 将待检索全景图中已渲染区和投票得到的库中全景图对应区域的像素集进行相关匹配计算,相关系数越大越相似;输出投票排序靠前且相关系数大于预设值的结果;如果c=1,也可根据单张拍摄姿态R,将库中全景图像映射到单张拍摄图像域与单张拍摄图像进行相关匹配;
[0554] 定位
[0555] 在已知GPS情况下,检索GPS附近区域的全景图像组成的子集特征库;
[0556] 服务器数据库将全景图像与其地理位置坐标绑定在一起存储,检索结果是编号为i*的图像,即可在数据库中查找出i*所对应的地理位置。
[0557] 基于智能机姿态数据的目标方向选择方法,可实现便携式智能机空间目标方向选择、控制、人机交互操作,具体包括以下步骤:
[0558] 1.定义智能机主方向或载体主方向相对于智能机自身的矢量单位p;
[0559] 2.采用上述方法获取智能机当前姿态矩阵Rg;
[0560] 3.计算p┴=RgTp为智能机主方向或载体主方向相对于指北坐标系的矢量;
[0561] 4.计算局部坐标系中的目标矢量vo=O-P
[0562] 假设局部坐标系中智能机自身坐标为P,目标的坐标为O,则目标矢量vo=O-P;
[0563] 5.计算矢量p┴与目标矢量vo之间夹角的余弦,或计算两个矢量之间的夹角。
[0564] 如果夹角的余弦很大,余弦>0.9,接近1,或者夹角偏差的绝对值|dφ|很小则触发智能机与该目标O之间的某一关联事件。如选中该目标,击中该目标、通知该目标、联络该目标等。
[0565] 可通过两矢量的点积除以|vo|得到夹角dφ的余弦,
[0566] cos(dφ)=(p┴点积vo)/|vo|
[0567] 如果该余弦cos(dφ)>cos(φa)则该目标方向选择事件可触发。
[0568] 6.在需要与用户的可视化交互情况下,在指北坐标系中实时绘制目标,智能机,和┴矢量p 。
[0569] 计算局部坐标系中智能机主方向矢量与目标矢量之间夹角的方向余弦。根据余弦值大小判定夹角。并且在三维空间或2维空间中绘制出智能机主方向矢量与目标矢量之间方向关系便于人机交互。
[0570] 具体应用方式有以下几种类型:
[0571] 方法1姿态指向
[0572] 用户通过操作智能机所指主方向所形成的矢量与目标矢量之间的夹角保持较小角度,或夹角的余弦>cos(φa),则将触发某一事件。
[0573] 用户用智能机主方向指向某一目标,如果目标矢量与主方向矢量之间的夹角的余弦>cos(φa)可执行与该目标相关联的事件,如选中该目标,击中该目标、通知该目标、联络该目标等。Φa为最大容忍偏差角。
[0574] 在三维空间中实时绘制智能机姿态矢量rz与目标矢量vo之间的关系示意图,以便于实现用户的交互控制。
[0575] 实施方式:
[0576] 假设智能机头部定义为主方向,头部相对于智能机自身坐标系的矢量是p={0,1,0}T
[0577] 那么p┴=RTp={r21r22r23}T其中rij是R矩阵第i行j列的元素。
[0578] 假设智能机右侧定义为主方向,右侧相对于智能机自身坐标系的矢量是p={1,0,0}T
[0579] 那么p┴=RTp={r11r12r13}T
[0580] 方法2导航服务
[0581] 将智能机与某一载体,如车船,固定起来,定义载体主方向相对于智能机自身的矢量p。
[0582] 在地图中实时绘制载体主方向矢量p┴=RTp与目标矢量vo之间的关系示意图。
[0583] 计算夹角的余弦cos(dφ)>cos(φa)说明方向吻合,再结合距离约束可触发某一事件。
[0584] 导航位置服务中同时符合位置和方向的目标位于图1中的阴影区。
[0585] 本方法也可以与运动方向形成的轨迹矢量结合智能机主方向进行融合,进而计算与目标矢量之间的夹角。
[0586] 实施方式:
[0587] 摄像头拍摄方向朝前固定安装在车船上,摄像头拍摄方向相对于智能机自身坐标系的矢量是p={0,0,-1}T
[0588] 那么p┴=RTp={-r31-r32-r33}T其中rij是R矩阵第i行j列的元素。
[0589] p┴与vo之间的夹角的余弦=(p┴点积vo)/|vo|
[0590] 方法3 2D导航服务
[0591] 上述方法可简化到2维情况,在2维地图上实现2D导航。
[0592] 这种方法要求智能机水平放置,利用方向传感器的第一个值value[0]得出主方向角矢量与智能机到目标矢量之间的夹角。或两者之间的点积。
[0593] 在地图中实时绘制智能机主矢量{cosφ,sinφ}与目标矢量vo=O-P示意图。
[0594] 其中φ=value[0]+△φvalue[0]是方向传感器的第一个值,value[0]=0表示智能机头部指北,value[0]=90表示智能机头部指东,△φ是在地图平面上,用户定义的主方向相对于智能机主方向之间夹角。
[0595] O是局部坐标系中X,Y平面上目标的2维坐标,P是局部坐标系中X,Y平面上的智能机2维坐标。或者建立一个以北x轴,西y轴的2维地图坐标系,O是目标在2维地图上的坐标,P是智能机在2维地图上的坐标。
[0596] {cosφ,sinφ}与目标矢量vo之间的夹角<φa说明方向吻合。
[0597] 或者{cosφ,sinφ}与目标矢量vo点积除以|vo|的结果>cosφa则说明方向吻合。
[0598] 实施方式:
[0599] 应用:导航,顺路方向的的士叫车抢单,司机将智能机固定在车上,智能机软件只可选择cos(dφ)>cos(φa)的乘客,选出来的都是顺路乘客。
[0600] 2D导航的具体实施方式:
[0601] 要求智能机水平放置,利用方向传感器的第一个值value[0]得出主方向角矢量与智能机到目标矢量之间的夹角,或两者之间的点积。
[0602] 计算2维地图上的目标矢量vo={vox,voy}的方位角φvo可调用反三角函数atan2(voy,vox)实现,计算φ角与φvo角形成的矢量在平面上的夹角
[0603] 实施方法,采用但不局限于以下方法:
[0604] φ角与φvo之间的夹角可以按以下方式计算:
[0605]
[0606] 一般采用2维点积的方式计算φ角与φvo之间的夹角余弦=({cosφ,sinφ}点积vo)/|vo|,若该余弦值>cos(φa)认定为方向一致。
[0607] 本发明实施例基于智能机姿态数据的视频影像实时纠正方法,实现了基于姿态矩阵的智能机的视频图像实时纠正,能保持生成纠正的图像中的水平线始终对应客观场景的地平线,可用于颠簸的路面,海面场景视频图像的纠正。对于接近垂直于地面拍摄的情况,生成纠正的图像中的水平朝右方向始终对应客观场景中的局部坐标系的x轴(北),可用于无人机地面图像拼接。该方法主要包括以下步骤:
[0608] 1.采用上述方法获取智能机拍摄视频的每一帧对应的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R。△R是摄像头相对于智能机的转换矩阵。
[0609] 2.根据实际应用需求R矩阵分解为R=RτR_从而得到矩阵Rτ,相机的拍摄姿态R不规则,期待得到用虚拟姿态R_作为拍摄姿态矩阵得到的标准图像。计算矩阵Rτ的方法有三类[0610] (a)根据实际应用中R_的特性直接得到,再通过Rτ=R R_T得出Rτ
[0611] 详见下文:标准对地坐标系下的影像正射纠正
[0612] (b)根据实际应用中Rτ和R_的特性列方程Rτ=R R_T或R=RτR_求解得到Rτ中的几个重要元素的值,从而构建Rτ。
[0613] 详见下文:任意R矩阵的Z轴旋转分解出水平矩阵
[0614] (c)根据Rτ和R_的性质列方程Rτ=R R_T或R=RτR_求解得到R_中的几个重要元素的值,从而构建R_,最后通过Rτ=R R_T得出Rτ
[0615] 详见下文:对地坐标系下的影像正射纠正
[0616] 3.对图像I经过H=K2RτTK-1的Homograph变换得到I’
[0617] 其中 是拍摄相机的内部参数矩阵,f是焦距的像素长度,cx,cy是相机主点坐标。对于理想相机cx,cy是图像的中心点,cx=w/2,cy=h/2,w,h是原始图像I的宽和高。
[0618] 是纠正以后虚拟相机的内部参数矩阵,f2是纠正以后虚拟相机的焦距的像素长度,cx2,cy2是纠正以后虚拟相机主点坐标。
[0619] 注:
[0620] -对于理想相机cx2,cy2是纠正以后虚拟相机图像的中心点,cx2=H/2,cy2=H/2,W,H是图像纠正以后虚拟相机的宽高。
[0621] -通常f2选取与f相等,而W,H的大小根据实际应用需求选取,有时为避免纠正后图像出界而选取W>w H>h
[0622] -如果H=K2RτTK-1中的第三行元素是[0 0 1],那么Homograph透视变换可简化成仿射变换从而提高图像变换速度。
[0623] 下面具体给出前述三类计算矩阵Rτ的应用案例和方法
[0624] (a)标准对地坐标系下的影像正射纠正
[0625] 视频摄像机往下拍地面上的场景,但由于各种原因,视线不可能完全垂直于地面。为得到垂直于地面的图像,先通过以下方法计算Rτ
[0626] R=RτR_中的
[0627] 最后根据公式H=K2RτTK-1实时将原始视频帧影像纠正成垂直于地面拍摄的效果,这个变换效果是图像I┴始终是垂直于地面往下拍的效果,若姿态矩阵R是相对于局部指北坐标系的,图像I┴的右侧始终指向北,下侧始终指东。垂直于地面的图像实际上可直接映射到地理信息系统地图平面上,因此本技术实现了从视频图像到地理信息系统地图平面上的实时映射。
[0628] (b)任意R矩阵的Z轴旋转分解出水平矩阵
[0629] 对于红外末制导导引头图像获取,或者在颠簸的车、船、飞机上安装有摄像头的视频捕获到视频帧图像的同时,将该帧对应的姿态数据保留并加以处理,保证载体获取的图像始终是保持水平正方的,这样目标识别程序就不用考虑目标的旋转了,这会极大提高目标识别的效率和准确性,也能使得用户获取的视频更稳定更准确。本方法涉及第(b)类计算R的方法如下:
[0630] 首先设
[0631] 由R_=RτTR列方程得到
[0632]
[0633] 针对矩阵第1行第3列元素等于0列方程
[0634] r13cosτ+r23sinτ=0
[0635] 再考虑到{cosτ,sinτ}是2维单位向量,解得
[0636]
[0637] 有两个解是正常的,因为旋转两个角度(还有一个相机底朝天,两者刚好相差180度)都能保证本体x轴保持水平于地面。因此必须保证本体y轴朝下,也就是R_的第2行第3列元素值<0,即列约束不等式:
[0638] -r13sinτ+r23cosτ<0
[0639] 解得 代入上式得到
[0640] 另一个解不满足条件舍去。
[0641] 最后根据公式H=K2RτTK-1实时将原始视频帧影像纠正成水平于地平面拍摄的效果。
[0642] (c)对地坐标系下的影像正射纠正
[0643] 方法(a)得到的垂直纠正图像不会跟随摄像头绕垂直于地面方向轴的旋转而旋转,为了实现这个效果采用如下方法:
[0644] 假设摄像头旋转了τ角,
[0645] R=RτR_中的
[0646] 列方程
[0647]
[0648] 解得:
[0649] (d)最终得到:
[0650] (e)
[0651] 最后根据公式H=K2RτTK-1实时将原始视频帧影像纠正成垂直于地面拍摄的效果,这个变换效果是图像I┴会跟随摄像头绕垂直于地面方向轴的旋转而旋转。
[0652] 本发明实施例基于姿态数据的智能机单像定位方法,实现了根据姿态矩阵和图像上2个点的像坐标对相机自身进行定位,具体包括以下步骤:
[0653] 假设相机或摄像机内参数据f和cx,cy已知,f是焦距的像素长度,cx,cy是相机主点坐标。内参矩阵
[0654] 单像目标定位整体实施步骤如下:
[0655] 1.搜集采集物方点,转化成局部坐标系坐标,如指北为x轴,指西为y轴;
[0656] 2.采用上述方法获取智能机的姿态矩阵Rg,R=△RRg得到智能机上摄像头的姿态矩阵R。△R是摄像头相对于智能机的转换矩阵;
[0657] 3.拍摄一张图像,自动提取其中的多个特征点,通过匹配算法得到与物点对应的n对物像同名点。
[0658] n个物方点的坐标是Xi=[Xix,Xiy,Xiz]T i=1,…,n
[0659] 对应n个像点坐标是[ui vi]T i=1,…,n
[0660] 4.分无错和容错2种情况计算相机在局部坐标系下的坐标T:
[0661] (1)若确认多个特征点无错误,则
[0662] 采用数学模型解方程得到自身在局部坐标系下坐标Tx,Ty,Tz
[0663]
[0664] 其中
[0665] 进而得到相机位置T,最大集ζ为n个点对组成的全集。
[0666] (2)若不确认多个特征点是否全部正确,采用Ransac容错算法,通过共线方程模型随机选取两对点n=2,根据模型式(HH2)计算相机位置T,并通过共线方程zi[u’i v’i 1]T=KR(Xi-T)验证T,
[0667] 通过KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程。选取符合共线方程点数最大集ζ并计算最大集ζ对应的T*。单目多点容错RANSAC算法流程如下:
[0668] <1>从n个像点中随机挑选出2个距离足够大的像点,一般至少要大于容忍误差error的2倍;
[0669] <2>挑选出来的2个像点与物点对应形成2对物象同名点,按式(HH2)计算智能机位置T;
[0670] <3>用T验证所有n对物象同名点的共线方程对应关系,共线方程KR(Xi-T)算出的u’i,v’I与ui,vi之间的误差距离小于error像素认为是符合共线方程,统计符合共线方程的个数i_in,如果i_in数量超过前期的数量nmax则记录本组满足共线方程容忍误差数量最大的点集ζmax,并刷新nmax=i_in;
[0671] <4>更新迭代次数k+1→k
[0672] <5>回到第1步,直到满足ransac概率收敛条件(1-(nmax/n)2)k
[0673] <6>将前面搜索得到的最优内点集合ζmax搜集起来进行最后一次多点最小2乘计算,按公式(HH2)计算得到Tbest得到最终结果。
[0674] 5.如需进一步提高精度,可基于数学模型式(HH2)对ζ集中多点进行LM优化。以期望得到更精确的解。
[0675] LM优化中一般是固定所有物点坐标Xix,Xiy,Xiz,i=1,…,n优化相机的位置T和姿态R
[0676] 6.如需要得出目标的经纬度,可根据局部坐标系原点的经纬度将相机在局部坐标系下的坐标Tx,Ty,Tz转换成大地经纬度。
[0677] 单像双点定位如图2所示。
[0678] 说明:
[0679] 真正实现了基于场景图像的室内定位,用于商场室内定位,导航,基于位姿的电子商务商铺广告发布。
[0680] 本发明基于智能机姿态数据的相对定位方法,实现了基于姿态矩阵的双目图像或多目图像之间相对定位,传统的方法缺少相机姿态信息需要给初值,而本方法不需要给初值直接SVD解方程得到结果。包括以下步骤:
[0681] 假设相机1,2之间有i=1..n≥2对同名点u1i,v1i~u2i,v2i。
[0682] 其中R1,R2是智能机相机在拍摄的1,2两个地点测出来的姿态矩阵数据。
[0683] 已知相机1的内参矩阵 相机2的内参矩阵 其中cxi,cyi是相机i的像素主点坐标,fi是相机i的焦距像素长。
[0684] 已知两相机之间的距离是L;
[0685] 可以计算相机2相对于相机1的位移矢量T。
[0686] 方法步骤如下:
[0687] 1.用上述方法计算智能机上相机的姿态Rg1,Rg2
[0688] 计算R1=△RRg1R2=△RRg2
[0689] 进一步得到R=R2R1T
[0690] 2.构建矩阵A
[0691]
[0692] 其中
[0693] uji*=Ki-1ui=[uji*x uji*y uji*z]T i=1,2 j=1..n
[0694] ujiR*=Ruji*=[ujiR*x ujiR*y ujiR*z]T
[0695] 3.如果确认n对点都是正确的,则
[0696] 求约束||t3x1||=1下Anx3t3x1=0的解
[0697] 或采用SVD分解得到Anx3=UnxnWnx3VT3x3,
[0698] 分解出来的V的最后1列的矢量,即对应于最小奇异值的特征矢量,即为t
[0699] T=-LRTt得到结果,结束
[0700] 否则继续进行以下步骤
[0701] 4.设置迭代初值nmax=0k=1
[0702] 5.随机挑选A矩阵中的2行,构建A2x3
[0703] 就是求约束||t2||=1下A2x3t2=0的解
[0704] 或采用SVD分解得到A2x3=U2x2W2x3VT3x3,
[0705] 分解出来的V的最后1列的矢量即为t2
[0706] 6.将t2=[ttx tty ttz]T代入第j=1..n个点,采用式(AB)验证点j是否是内点,[0707] (uj2*zuj1R*y-uj2*yuj1R*z)ttx+(uj2*xuj1R*z-uj2*zuj1R*x)tty+(uj2*yuj1R*x-uj2*xuj1R*y)ttz<ε[0708]     (AB)[0709] 其中ε表示最大容忍误差物方长度,暂且相对于两相机之间的距离=1而言。
[0710] 满足式(AB)则点j是内点,如果满足内点的数量nt超过最佳值nmax则ζt-->ζ nt-->nmax
[0711] 7.如果(1-(nmax/n)2)k<0.00001错误率足够小,退出迭代进入步骤9.
[0712] 8迭代次数k增加1,回到步骤5反复迭代;
[0713] 9.最后采用最小二乘法针对最大内点集ζ重新计算一次最优t,
[0714] 求约束||t3x1||=1下An’x3t3x1=0的解其中n’=nmax
[0715] 或采用SVD分解得到An’x3=Un’xn’Wn’x3VT3x3,
[0716] 分解出来的V的最后1列矢量,即对应于最小奇异值的特征矢量,即为t最终得到T=-LRTt。
[0717] 本方法推广到C个相机,N个点的情况,构建矩阵
[0718]
[0719] U(ij)k=[U(ij)k1 U(ij)k2 U(ij)k3] k=1,2
[0720]
[0721]
[0722] Rc(ij)ab是指第i个点对应的第j个像片的相机的姿态矩阵的a行b列uc(ij)是第i个点对应的第j个像片上的像点坐标。cx,cy是相机主点坐标,f是相机的焦距。
[0723] 对矩阵A进行SVD分解得到A=UWVT,V中最后一个非零矢量
[0724] X=[T1x T1y T1z … Tcx Tcy Tcz X1 Y1 Z1 … XN YN ZN]T的每一个分量对应C个相机的位置T1x,T1y,T1z,…,Tcx,Tcy,Tcz和N个点的坐标X1,Y1,Z1,…,XN,YN,ZN。
[0725] 说明,或研究背景
[0726] 以前在未知相机姿态数据的情况下,两相机之间相对定向计算是需要至少5对点的,而本发明中在已知相机姿态的前提下,只需要至少2对即可计算相对位置了,可应用于,序列图像三维重建,基于图像的室内外定位等领域。

具体实施方式

[0727] 本算法在得到相对姿态T以后可进一步虚拟出物方点,然后通过多相机LM算法优化R,T数据,使得精度进一步提高。
[0728] 本发明基于智能机姿态的目标识别方法,可解决任意姿态拍摄视频仍能准确识别目标的难题,而不必考虑目标大角度旋转,仍能实现高效准确的目标检测。
[0729] 该方法包括以下步骤:
[0730] 通过H=K2RτTK-1对原图像I进行纠正得到I'然后对纠正图像I'进行处理,处理得到I'图像上的坐标集xi,yi,i=1,...,N再通过反纠正H-1的方法得到坐标集在原图上映射的坐标xi',yi,'
[0731]
[0732] I'图像处理的方式一般是目标识别,摄影测量,坐标检测。
[0733] 具体实施方式:
[0734] 传感器纠正目标识别算法
[0735] 首先根据传感器得到的R矩阵对原始图I进行H=K2RτTK-1标准化纠正得到标准纠正图I’,然后对I’图像进行目标检测、跟踪(如采用行扫描box方法)得到它对应的目标框r,目标框r相对于标准模板的平移是rx,ry,
[0736]
[0737] 矩形块r首先经过平移变换Ht映射到标准图上,然后再经过H-1变换映射到原始图上。
[0738] 因此目标框r相对于原始图像I的H变换为
[0739] r*=H-1Htr
[0740] 算法原理示意图如图3所示,由此定义H=H-1Ht实现了从标准目标矩形框r(计量单位像素)到原始图像4边形r*。
[0741] 学习的时候扣选目标一定要从纠正标准图里选择矩形框。这样就能保证匹配识别都是在纠正标准图域进行的,这不需要考虑大角度旋转,大大减轻了图像目标检测的计算负荷。
[0742] 应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。