标签归档:图像融合

图像拼接算法原理 2

版权声明:原创作品,欢迎转载,但转载请以超链接形式注明文章来源(planckscale.info)、作者信息和本声明,否则将追究法律责任。

2. 曲面投影

Homography_Near90Degreee

图6. 近90^{\circ}时产生越来越大的畸变

通常简单的图像拼接技术,就是如上节所示的基本原理,找出一张大概处于中间位置的图像,然后利用单应性变换把其他图像变换到该中心图像的视角下,再做一些后续的曝光补偿、图像融合等处理即可。但是这一技术有相当大的局限性,最简单的例子,不能直接用它拼出360^{\circ}的全景图。

为什么呢?让我们来考虑图6中所示情形。可见,三条光线与P^{\prime}相交的三点,原本是近乎等间距均匀分布的,而当它们映射到P平面上后,间距却产生了巨大的差异。表现在图像上,P^{\prime}上的图像变换到P上后,会产生相当大的拉伸畸变。当图中两相机的投影平面越来越趋于垂直时,这个畸变越来越大,以至于P^{\prime}上普通的一点可能会被映射到P平面的无穷远点。这时,这种简单的单应性拼接方案就彻底崩溃了。

Homography_Warp

图7. 曲面投影解决大视场角下的投影畸变问题

怎样得到更宽视场角下的拼接图?解决方法很简单。以上所出现的这种畸变源自于我们将点投影到一个平面上,设想将P掰弯,或者直接弯曲成一个圆柱面,成为图7所示的样子,那原本被投影到P平面无穷远处的点就被拉回来了。我们在圆柱面上选取一个足够均匀的坐标系,把坐标对应到像素坐标,就可以得到一个全景图了。

当然,针对不同的应用,我们还可以选取不同的投影曲面,比如选取球面用于360^{\circ} * 180^{\circ}的球面全景图,甚至也可以选择一个立方体作为投影曲面。

 

3. 后续处理

至此全景拼接的几何原理就大致说完了,虽然我们还没有给出数学表达。为了先居高临下的了解整个拼接流程,我们不妨把后续处理的梗概也在此一说。

实际应用中为了创建出完美的全景图,有很多的问题需要考虑。最典型的问题有两个,一个是如何解决不同照片中曝光不一致的问题;一个是如何在拼接缝处完美平滑的融合两张图像的问题。

第一个由曝光补偿算法来解决,大体思路是估计两张图间的曝光差异,然后进行补偿。此处不多说。

第二个问题也有众多解决方案,最为著名的大概就属Multi-Band融合算法。该算法虽然八十年代就已提出,但其效果至今仍让人赞叹。在通常图像间失配程度不大的情况下,Multi-Band可以达到肉眼几乎不可分辨的融合效果。其原理也不复杂,下面略微一提。

融合两张图像,最直接的方案是在两张图像的重合区域用一个平滑渐变的权重对二者加权叠加。该方法的效果并不理想,关键原因是我们无法兼顾拼缝附近的局域细节和大尺度上两张图片的宏观特征(如光照)。当我们希望局域细节能够完好拼接时,需要用较小的平滑渐变区;而当我们希望要宏观上平滑过渡时,又想要较大的渐变区域。这二者似乎不可调和。

但事实上并非如此。Multi-Band的成功之处就是在于它同时兼顾两种需求,当融合宏观特征时,采用一个大的平滑渐变区;融合局域细节时,则采用小的平滑渐变区。那如何才能把这两种情况分开处理呢?很简单,把图像分解为不同频带的分量之加和,图像的宏观特征在它的低频分量图里,而局域特征在高频分量图里。

所以,Multi-Band算法的过程大致就是:把图像按照频率高低展开成一个金字塔,然后高低频分量各自按照不同的方式平滑加权并叠加,最后把各频带分量重新加和,得到最终的融合结果。

该算法融合效果虽好,但对于计算量要求较大,它需要创建多座金字塔并对金字塔进行各种运算,图像像素较高时,在CPU上要达到实时基本无望。当然,GPU上情况就不一样了,我们自己就实现了实时的Multi-Band融合算法,效果很好。

 

这一系列文章主要以拼接的几何原理为主。下一节开始用数学建模前两节所述的投影模型。

(未完待续)

多路视频实时全景拼接算法

功能

本算法模块对来自多路摄像机的视频图像进行实时的无缝拼接融合,形成一路具有更宽视角的视频。特别的,可以输出360度全景视频,甚至360度*180度的球面全景。

算法分为两部分,一部分为标定过程,在进行实时拼接前,通过拍摄场景图片,计算各相机的畸变系数和相机之间的变换系数;另一部分为实时拼接过程,利用前面计算出的变换系数对来自各相机的图像进行实时去畸变、拼接,曲面投影,MultiBand融合。

根据用户需要,算法可以将全景图投影到圆柱面、球面等曲面上。

性能
模块基于CUDA实现,使用CUDA显卡完成计算,CPU开销很低。

测试环境:
GTX750Ti,I7 4790k 睿频4GHz,8G DDR3 2400MHz,Win8 64.

六路1920*1080拼接,输出6912*1024:
17fps,CPU总占用率百分之15(包含测试程序中未优化的视频解码、显示等开销)。
四路704*576拼接,输出1824*544;
80fps,CPU总占用率百分之12(包含测试程序中未优化的视频解码、显示等开销)。

适用场景与约束
首先,算法要求各相机间的相对位置、角度在实时拼接过程中保持固定,且相邻相机的视野有一定重合区域。
理论上能够变换到同一视角下进行无缝拼接的场景有两种,一种是多摄像机共中心放置,中心开花状;一种是摄像机位置任意,但场景是一个平面。当场景为远景,且场景-摄像机距离远大于摄像机之间的距离时,也可以近似看做第二种情形。上述情形之外的情况均不可拼,这是一个原则性的限制。

理论上算法对输入视频路数、输出分辨率没有限制,实际应用中这个限制来自于显卡计算能力和显存大小。
由于基于CUDA,所以算法可以扩展到多显卡并行处理(目前仍是单显卡架构),这样就可以实现大规模拼接与融合的处理。

拼接结果可参见我们的Youku主页

应用
本算法可以应用于安防监控、智能交通、卫星照片拼接、虚拟场景等领域。

优势
本模块较同类产品的突出优势是性能,由于基于CUDA显卡计算,模块具有高度的实时处理能力,能保证在简单的单显卡上实现出高分辨率多路视频拼接融合的功能,或者在多显卡计算环境下实现大规模视频/图片拼接融合的任务。
基于CUDA计算的另一个优势是,较FPGA等方案,开发周期更短,易维护且成本低廉。目前Nvidia已经推出基于Tegra的嵌入式开发组件Jetson TK1,本模块可以容易的从PC平台移植到嵌入式平台。