基于球面空间匹配的双目鱼眼全景图像生成

2020-03-11 12:51何林飞林家骏黄俊健陈旭东
计算机应用与软件 2020年2期
关键词:鱼眼双目球面

何林飞 朱 煜 林家骏 黄俊健 陈旭东

(华东理工大学信息科学与工程学院 上海 200237)

0 引 言

鱼眼镜头是视场角能达到180度甚至更高的一种超广角镜头,由于其外型与鱼的眼睛相似,因此得名鱼眼镜头。鱼眼图像是由鱼眼镜头拍摄所得的图像,其中心部分的圆形是光线经过鱼眼镜头所成的像,也是鱼眼图像中最主要的有效区域。由于鱼眼镜头拥有超广的视场角,所成图像中信息量大,因此在虚拟现实技术[1]、视频目标跟踪[2]、汽车辅助驾驶[3]、机器人定位与导航[4]等方面拥有广泛的应用价值。然而鱼眼镜头所成的图像畸变情况严重,要使用鱼眼图像,必须要先解决其畸变的问题。

将带有畸变的鱼眼图像映射为普通的平面透视图像的方法包括文献[5-6]的算法,它们通过优化由用户指定的场景信息所定义的能量函数来解决畸变问题。此外还有根据镜头成像的几何模型,先将鱼眼图像映射到球面上,再根据球面的经纬度将图像展开的经纬度映射[7]的方法。

利用鱼眼图像的超广角特点,实现双目鱼眼图像拼接生成一幅360度全景图像具有实际应用价值。典型的图像拼接方法是基于特征的二维平面图像拼接,利用SIFT[8]、SURF[9]、ORB[10]等特征,计算多幅图像之间的匹配关系,实现二维图像的拼接。但双目鱼眼图像的重合部分少,且存在对齐等问题,在接缝处的匹配拼接是一个难点。

Ho等[11]提出了一种两步修正法对双目鱼眼图像进行拼接。首先将鱼眼图像展开为平面图像,然后通过仿射变换和图像偏移两步修正图像,再进行拼接。该方法需要在平面图像上进行两次修正才能实现匹配拼接,效率不高。

本文设计实现了一套基于空间匹配的双目鱼眼镜头全景图像生成算法,流程如图1所示,主要分为展开和拼接两个部分。在展开部分,首先通过双目鱼眼镜头获取两幅鱼眼图像,然后根据镜头成像原理,将两幅鱼眼图像映射变换为两幅球面图像,再通过经纬展开的方法,将球面图像展开得到展开图像。在拼接部分,由于装配等原因,两幅球面图像不是完全对齐的,本文提出一种球面图像的空间旋转匹配方法,直接通过球面图像计算得到图像间的空间旋转关系,对齐两幅球面图像的经纬度,再拼接得到全景球面图像。求解旋转关系的过程中,使用RANSAC方法[12]以消除噪声的影响。

图1 算法总体流程图

1 鱼眼图像的展开

鱼眼图像的整个展开过程如图2所示。首先将双目鱼眼镜头所成的鱼眼图像映射到空间单位球面上得到球面图像,再将空间球面图像展开为平面展开图像。

(a) (b) (c)图2 鱼眼图像的展开

鱼眼镜头的成像原理可以用球面透视成像模型[7]来描述。如图3所示,把鱼眼镜头的表面看作一个半球面,镜头外空间景物的光线投射到球面上。光线透过镜头之后,不同的入射光线投射到位置不同的相机感光部件上,形成一幅圆形的鱼眼图像。

图3 鱼眼镜头成像模型

按照镜头成像原理,将鱼眼图像重新映射到单位球面上。首先通过变角度扫描线法获取鱼眼图像中圆形有效区域的圆周点,利用圆拟合算法[13]求解得到有效区域的中心点(xc,yc)和半径Rc。该区域中的像素点可以用(ρ,φ)来表达,其中ρ∈[0,Rc],φ∈[0,2π),其与原点在左上角的图像坐标系下的像素点(x,y)之间的关系为:

(1)

鱼眼图像的有效区域像素点与单位球面坐标系下的点(xs,ys,zs)之间的关系为:

(2)

式中:θ为光线入射角,θ与ρ的关系可以根据镜头的ρ-θ数据,利用双线性插值的方法获得所有θ∈[0,π]范围内的数据。

然后对球面图像再利用经纬度展开[14],可以得到尺寸为w×h的展开图像。

(3)

在实验中,通过双目鱼眼相机获取如图4所示的双目鱼眼图像,将其映射到单位球面上得到如图5所示的两幅球面图像。

图4 原始双目鱼眼图像

图5 两幅单位球面图像

2 基于空间旋转关系的球面匹配拼接

在理想情况下,双目鱼眼镜头的两个成像平面完全平行,得到的两幅球面图像Sl和Sr经纬度完全匹配,则可以利用式(4)的动态权重法根据图像的经纬度直接拼接融合两幅球面图像,得到完整的全景球面图像。

Sall=αSl+(1-α)Sr

(4)

但是对于实际的双目鱼眼相机,在安装的过程中,很难保证双目鱼眼相机两个鱼眼镜头的成像平面完全平行,当两个成像平面发生偏转的时候,两幅球面图像的经纬度就会有所偏差,在经纬度没有对齐时直接进行拼接,则会出现图像不连续的错误拼接结果。

对于这一问题,一般的图像拼接方法是基于平面的展开图像进行处理。从如图2(a)所示的鱼眼图像得到如图2(c)所示的展开图像后,在展开图像上确定图像之间的变换关系,即单应矩阵H。首先将两幅展开图像之间的关系定义为(xpl,ypl)=H(xpr,ypr),然后在展开图像上提取SIFT特征点,并进行匹配,通过匹配的特征点对求解得到单应矩阵H,最终通过单应矩阵匹配两幅展开图像,并完成拼接。

然而由于双鱼眼图像之间的未对准关系是由于镜头成像面的空间旋转原因导致,在空间中确定旋转关系并进行空间的匹配和拼接能获得更好的效果。因此,本文提出了球面图像的空间匹配拼接方法,直接对两幅球面图像计算空间上的旋转关系,并在空间上直接进行拼接得到球面全景图像的方法。

为了确定两幅球面图像之间的准确旋转关系,首先需要提取两幅球面图像的特征点并进行匹配。本文利用SIFT算法,提取球面上的特征点。

原始的SIFT算法是在平面图像上进行,但由于球面图像是三维空间曲面上的图像,不能直接使用该方法进行计算。因此首先通过式(3)所示的映射关系将球面图像转换为展开图像,然后利用SIFT算法在展开图像上计算得到关键点的坐标和关键点的描述子,再将关键点坐标重新映射到三维空间球面上。

在展开图像上点(xp,yp)的邻域为:

(5)

若该点映射到单位球面上得到坐标(xs,ys,zs),用球面坐标可以表示为(1,θs,φs),其中:φs为该点的经度;θs为该点的纬度。根据式(3)的关系,式(5)表达的该点在展开图像上邻域映射到球面图像上的区域为:

(6)

本文根据得到的球面图像特征点匹配对(xsl,ysl,zsl)、(xsr,ysr,zsr),利用矩阵SVD分解算法推导出求解空间旋转关系的旋转矩阵。

定义两幅单位球面上的图像之间相差一个旋转矩阵R,它们之间的旋转关系可以表达为pl=[xsl,ysl,zsl]T=R[xsr,ysr,zsr]T=Rpr。

建立优化问题求解旋转矩阵R:

(7)

式中:m为特征点对的数目。

由于旋转矩阵R是正交矩阵,式(7)的优化问题等价为:

(8)

式中:Pl=[pl1,pl2,…,plm];Pr=[pr1,pr2,…,prm]。

设W=VTRU=(wij)3×3,由于矩阵U、V、R均为正交矩阵,因此W也为正交矩阵,从而有|wij|≤1。因此:

(9)

当W=I时取最大值,得到:

R=VUT

(10)

在两球面图像旋转矩阵的求解过程中,同样使用RANSAC随机采样的方法,消除m个特征点中的噪声点对结果的影响。

至此,将本文提出的全景图像生成算法步骤总结如下:

步骤1获取双目鱼眼图像及图像的有效区域中心点(xc,yc)和半径Rc,将有效区域映射到单位球面上得到两幅单位球面图像Sl和Sr;

步骤2计算得到球面图像的SIFT特征点,并对特征点进行匹配;

步骤3利用配对特征点计算得到旋转矩阵R;

步骤6将全景球面图像Sall展开得到全景展开图像。

3 实 验

3.1 鱼眼图像的空间特征点提取与匹配

针对图5所示的两幅球面图像,利用SIFT算法,提取空间球面上的SIFT特征点并进行匹配,球面两侧匹配结果如图6所示。

图6 两幅单位球面图像特征点匹配结果

3.2 旋转矩阵的计算

根据图6得到的特征点与匹配结果,按照所述的矩阵SVD分解计算得到旋转矩阵:

使用yaw-pitch-roll的欧拉角描述方式,计算旋转矩阵对应的欧拉角,结果如表1所示。可以看出,计算得到的角度与真实角度相比,平均偏差为0.08度,各角度的误差都在0.13度以内,计算误差很小。

表1 两幅鱼眼图像旋转关系计算结果

3.3 拼接结果对比

对图5所示的两幅球面图像直接进行拼接,得到图7(a)和(c)。由于存在旋转误差,从局部放大图中可以很明显地看出图像中两侧雨棚不连续,拼接结果有很大错误。

(a) 直接拼接球面结果

(b) 球面旋转后拼接球面结果

(c) 直接拼接展开图结果

(d) 球面旋转后拼接展开图结果

(e) 基于平面展开图像匹配拼接结果图7 拼接结果对比

利用基于平面的展开图像进行处理并拼接,得到图7(e)。从局部放大图中可以看出,该方法虽然能在一定程度上减少误差,但仍然存在拼接处的较明显错误。左侧的雨棚已经连续,右侧的雨棚虽然较图7(c)有较好的连续效果,但出现了重影的现象,拼接效果仍不理想。根据本文算法,利用空间匹配关系,用旋转矩阵旋转其中一幅单位球面图像后进行拼接,得到图7(b)和(d),显然,拼接处图像的效果得到明显改善。

将直接拼接、平面匹配拼接和本文空间匹配拼接三种不同方法得到的全景展开图像与真实场景图像进行相似性对比,计算拼接部分的峰值信噪比(Peak Signal to Noise Ratio,PSNR)和结构相似性(Structural SIMilarity,SSIM),PSNR和SSIM越高,表示得到的结果与真实场景越相似,效果越好。计算结果如表2所示,可以看出,本文方法得到的全景结果与真实场景最为相似,效果最好。

表2 不同方法的全景图像与真实场景图像的相似性

3.4 移动端展示效果

整个算法验证完成后,在Android系统上实现,程序获取双目鱼眼相机的数据,并通过本文提出的算法实现全景图像和球面图像的生成与展示。双目鱼眼相机与Android手机通过Wi-Fi通信,用RTSP协议传输视频流,对分辨率为960×480的视频,使用OpenGL进行实时渲染,帧率可达30帧/秒。

Android系统上实现的全景图像的显示效果如图8所示,包括球面内部和从球面外部观看的效果。

(a) 室外球面内效果

(b) 室外球面外效果

(c) 室内球面内效果

(d) 室内球面外效果图8 球面图像展示效果

4 结 语

本文提出一种基于空间匹配的双目鱼眼镜头全景图像生成算法,对两幅鱼眼图像进行精准拼接。首先,利用双目鱼眼镜头获取两幅鱼眼图像,将双鱼眼图像映射到空间球面,再拼接为一幅完整的空间全景球面图像。在拼接的过程中,为了获得准确的全景图像,提出空间旋转匹配方案:通过SFIT提取空间特征点,得到两幅鱼眼图像的特征点配准关系,利用矩阵SVD求解两个单位球面图像的空间旋转关系。实验表明本文算法能很好地解决双鱼眼图像的匹配拼接问题。整个算法验证完成并在Android系统上实现,具有良好的实用价值。

猜你喜欢
鱼眼双目球面
面向鱼眼图像的人群密度估计
采用双目视觉和自适应Kalman滤波的作物行识别与跟踪
霜 降 苏美玲
基于双目视觉的机器人定位与导航算法
球面纹理映射方法综述
机械手的双目视觉定位抓取研究
球面距离的几种证明方法
鱼眼明目鱼头补脑是真的吗?
囊括宇内
鱼眼里的爱情