图像拼接已被研究并广泛应用于计算机科学的许多领域,但在特征匹配、扭曲和混合步骤中存在大量计算。从而无法满足某些应用的实时性需求。幸运的是,已经在图形处理器单元 (GPU) 上开发并实现了一些可以加快拼接过程的相关并行操作。在本文中,我们使用统一计算设备架构 (CUDA) 提出了基于 GPU 的图像拼接的并行实现。我们在执行时间方面获得了比在中央处理单元 (CPU) 上实现更好的结果。在实验中使用集成 GPU GTX745 时,我们对大输入图像实现了高达 27.6 倍的加速比。
典型的拼接过程主要包括三个不同的图像处理步骤,即配准、扭曲和插值以及混合。图像配准是图像拼接的关键任务。配准是指在描绘同一场景的一对图像之间建立几何变换,该变换由一个8自由度的平面单应性决定。
GPU以其强大的并行计算能力吸引许多领域的研究,作为一种协处理器对计算量大的算法加速已成为实践的重要途径。在前人的研究中,他们都避免了考虑两个极其耗时的步骤,即特征匹配和随机样本共识(RANSAC)。作为图像配准中的两个关键过程,在提出的 GPU 加速并行算法中应考虑它们。
使用GPU并行计算会遇到两个限制
CUDA的出现解决了上述问题,并且CUDA使用C语言,最初为CPU编写的C语言函数可以移植到CUDA内核,无需修改。
在CUDA中,一定数量的线程被分组到一个块中,一定数量的块以规则的网格模式在逻辑上排列(见图1)。每个块都映射到一个多处理器,一个多处理器可以同时运行多个线程块。由于本地资源(寄存器和共享内存)在块之间进行划分,包含在同一块中的线程可以访问相同的共享内存并快速实现同步操作。但是,不同块中的线程并不能直接实现通信和同步。除了本地寄存器和共享内存,所有线程都可以访问全局内存、常量内存和纹理内存。
A. 特征匹配
令点 经过仿射变换后得到 ,即
向量 是平移分量, 控制缩放、旋转效果。利用齐次坐标系,方程(2)也可以写为
接着计算两幅图像特征点之间的欧几里得距离,并将距离按照升序排序,比较升序排序侍雹中第一和第二的比值如果小于某个阈值,则认为是匹配点。
由于 中有六个未知参数,随机选择3对不共线的点匹配 ,使用该矩阵 计算剩余 对匹配点的误差。执行大量迭代,直到内点对最多。可以使用最小二乘估计器估计所有六个参数。
B. 变形和插值
扭曲变形过程中,可能使像素点位置出现负值或者没有数值与之对应,在这种抢矿下需要插值算法创建更平滑和准确的数值,进一步减少翘曲中产生的变形。最常用的插值方法是最近邻插值、双线性插值和双三次插值。考虑到精度和计算复杂度之间的权衡,实验采用双线性插值算法。
C. 混合
为了实现并行计算,本文采用了基于羽化的混合方法,其混合函数可以表示为:
其中 是像素 的权重函数。
A. 并行匹配
匹配分为粗匹配和精匹配。粗匹配过程中,块线程数由特征元素数决定,每个块可以实现一个关键点之间的匹配,每个线程计算两个图像两个特征向量的距离。在计算完所有距离后,使用并行计算的归并排序对距离值排序。最后,所有块得到的匹配结果存储在全局内基灶存中,然后传送到老锋帆CPU。
精匹配过程,设计内核执行RANSAC迭代,只启动一个block,线程数为 ,首先用CPU将三个非共线点计算得到的变换矩阵 ,然后将 、阈值和剩余 个点传到GPU,判断内外点。
通过内存分配,可以实现精细匹配优化。
B. 平行变形和插值
将 矩阵的逆矩阵 存放在常量内存中,由于需要频繁地调用。将待校正的图像存放在纹理内存中,纹理内存是专门为本地访问模式设计的。
为了进一步提升性能,若两个坐标小数部分小于0.2则强度值分配为整数部分,否则使用双线性插值。
C. 并行混合
由于混合数是像素和像素的混合,因此线程数等于重叠部分包含的像素。令重叠图像的列数设置为16的倍数。 gridDim.x的大小等于重叠图像的行数,gridDim.y的大小等于重叠图像的列数重叠图像除以16。
基于 CPU 的算法在配备 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 处理器上实现。基于 GPU 的算法在 NVIDIA GeForce GTX745 集成显卡上进行测试,每块最大 1024 个线程和 4096 MB 全局内存。
可以清楚地看到,这两种图像之间几乎没有差异。原因是实验中使用的GPU卡支持浮点计算,与CPU版本相比产生的误差非常小。
在本文中,我们提出了一种使用 CUDA 架构在 GPU 上运行的并行图像拼接方法。顺序算法通过几个 CUDA 内核转换为并行版本。通过使用不同类型的内存,我们实现了并行算法的优化。同时,将GPU获得的结果与CPU获得的结果进行比较,我们实现了高达27.6的加速比。尽管所提出的方法显着提高了计算性能,但仍有许多工作要做。例如,更精确的插值方法(双三次插值)和可变权重 c( x, y) 可以考虑进一步改善镶嵌结果。此外,并行镶嵌算法也可以在多个GPU平台上运行,对于大数据可以更有效地执行算法。在今后的工作中,我们将一一处理这些问题。