基于 CUDA-GPU 加速的全景图像拼接
本文档主要介绍基于 CUDA-GPU 加速的全景图像拼接技术,包括全景拼接实现业务流程、特征点提取和匹配、RANSAC 算法对特征计算单应性矩阵并透射变换、算法优化及 CUDA-GPU 加速等。
一、全景拼接实现业务流程
全景拼接是将多个图像拼接成一张完整的图像,完成右半部分与左半部分重合区域的去处拼接。该过程可以分为以下几个步骤:
1. 提取图像的特征关键点描述
2. 使用 FLANN 对特征点进行匹配
3. 使用 RANSAC 算法对特征计算单应性矩阵并透射变换
二、特征点提取和匹配
特征点提取是全景拼接的核心步骤之一。通过大量的线条可以看出主观上的从左到右较直的可能为正确的特征点对,而从左下角到右上角或者相关方向的大量连线可能为误差干扰,这个可在关键点描述的匹配算法中加以去除从而达到特征点匹配。
在本文中,使用 FLANN 算法对特征点进行匹配,寻找到对应的匹配特征点,这些特征点为全景拼接提供了方位参考。
三、RANSAC 算法对特征计算单应性矩阵并透射变换
RANSAC(Random Sample Consensus)即随机采样一致性,该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC 的基本思想在于,找到正确数据点的同时摒弃噪声点。通过 RANSAC 得到的单应矩阵通过 warpPerspective 透视变换即可得到拼接好的全景图片。
四、算法优化及 CUDA-GPU 加速
OpenCV 2.4.9 版本后提供了 Stitcher 类可用于图像拼接类应用的实现,从图 5 中可以看出,第二章的基本算法做为底层框架被用于 Stitcher 类的实现,在此基础上对图片增加了曝光处理、图像 wrap 弯折、图像混合特性等 post-processing 后处理细节,保证了拼接后的图片亮色一致性、图像弯折一致性等,优化了全景图像拼接效果。
在 CUDA-GPU 加速方面,通过编译具有 CUDA 的 OpenCV 代码及第三方模块出相应 lib 和 dll 后进行测试,得出的基于 CPU 和 GPU 的实验对比如表一所示。通过表一实验数据可知,CUDA-GPU 能大幅度提高计算效率,相对于 CPU 一次 48s,GPU 加速后只需要 0.3s,大大提升性能。
五、结论
本文针对全景图像拼接场景,对其核心实现算法进行了代码验证,并在基础上提出了 CUDA-GPU 加速的实现方法,通过 GPU 加速大大提升了图像拼接性能。作为全景视频呈现的核心要素,全景图形拼接的性能一定程度上决定了全景视频呈现的主观效果,而英伟达的 VRWorks-SDK 也是利用本文提及相关特征提取算法实现的全景视频 VR 呈现。