GPU上图像拼接的快速计算

Fast implementation of image mosaicing on GPU

图像拼接已被研究并广泛应用于计算机科学的许多领域,但在特征匹配、扭曲和混合步骤中存在大量计算。从而无法满足某些应用的实时性需求。幸运的是,已经在图形处理器单元 (GPU) 上开发并实现了一些可以加快拼接过程的相关并行操作。在本文中,我们使用统一计算设备架构 (CUDA) 提出了基于 GPU 的图像拼接的并行实现。我们在执行时间方面获得了比在中央处理单元 (CPU) 上实现更好的结果。在实验中使用集成 GPU GTX745 时,我们对大输入图像实现了高达 27.6 倍的加速比。

Ⅰ 介绍

典型的拼接过程主要包括三个不同的图像处理步骤,即配准、扭曲和插值以及混合。图像配准是图像拼接的关键任务。配准是指在描绘同一场景的一对图像之间建立几何变换,该变换由一个8自由度的平面单应性决定。

GPU以其强大的并行计算能力吸引许多领域的研究,作为一种协处理器对计算量大的算法加速已成为实践的重要途径。在前人的研究中,他们都避免了考虑两个极其耗时的步骤,即特征匹配和随机样本共识(RANSAC)。作为图像配准中的两个关键过程,在提出的 GPU 加速并行算法中应考虑它们。

Ⅱ GPU与CUDA技术

使用GPU并行计算会遇到两个限制

  1. GPU本是为图形绘制设计的,要求用户具备一定图形编程能力,并将通用计算转化为图形计算。
  2. 并行性是通过不同数据元素执行相同程序实现的,在并行计算中设计的同步、互斥、原子操作无法有效实现。

CUDA的出现解决了上述问题,并且CUDA使用C语言,最初为CPU编写的C语言函数可以移植到CUDA内核,无需修改。

在CUDA中,一定数量的线程被分组到一个块中,一定数量的块以规则的网格模式在逻辑上排列(见图1)。每个块都映射到一个多处理器,一个多处理器可以同时运行多个线程块。由于本地资源(寄存器和共享内存)在块之间进行划分,包含在同一块中的线程可以访问相同的共享内存并快速实现同步操作。但是,不同块中的线程并不能直接实现通信和同步。除了本地寄存器和共享内存,所有线程都可以访问全局内存、常量内存和纹理内存。

图1 线栈的组织和内存访问

Ⅲ 镶嵌算法与并行化

镶嵌步骤

A. 特征匹配

令点{ \bf p} = \left(x,y \right)^T经过仿射变换后得到{\bf p}^\prime=\left(x,y\right)^T,即
\begin{align*} & p^{\prime}=Hp+t \tag{1}\\ \begin{pmatrix} x^{\prime}\\ y^{\prime} \end{pmatrix}=& \begin{pmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{pmatrix}\begin{pmatrix} x\\ y \end{pmatrix}+ \begin{pmatrix} t_{x}\\ t_{y} \end{pmatrix} \tag{2} \end{align*}
向量t是平移分量,H控制缩放、旋转效果。利用齐次坐标系,方程(2)也可以写为
\begin{equation*} \begin{pmatrix} x^{\prime}\\ y^{\prime}\\ 1\end{pmatrix}=\begin{pmatrix} a_{11}& \alpha_{12}& t_{x} \\ a_{21}& a_{22}& t_{y}\\ 0& 0& 1\end{pmatrix}\begin{pmatrix} x\\ y\\ 1 \end{pmatrix}\cdot \tag{3} \end{equation*}
接着计算两幅图像特征点之间的欧几里得距离,并将距离按照升序排序,比较升序排序中第一和第二的比值如果小于某个阈值,则认为是匹配点。

由于H中有六个未知参数,随机选择3对不共线的点匹配H,使用该矩阵H计算剩余N-3对匹配点的误差。执行大量迭代,直到内点对最多。可以使用最小二乘估计器估计所有六个参数。

B. 变形和插值

扭曲变形过程中,可能使像素点位置出现负值或者没有数值与之对应,在这种抢矿下需要插值算法创建更平滑和准确的数值,进一步减少翘曲中产生的变形。最常用的插值方法是最近邻插值、双线性插值和双三次插值。考虑到精度和计算复杂度之间的权衡,实验采用双线性插值算法。

C. 混合

为了实现并行计算,本文采用了基于羽化的混合方法,其混合函数可以表示为:
\begin{equation*} I(x,y)=c(x,y)I_{1}(x,y)+(1-c(x,y))I_{2}(x,y) \tag{4} \end{equation*}
其中c\left(x,y\right)\in[0,1]是像素I\left(x,y\right)的权重函数。

并行实现

A. 并行匹配

匹配分为粗匹配和精匹配。粗匹配过程中,块线程数由特征元素数决定,每个块可以实现一个关键点之间的匹配,每个线程计算两个图像两个特征向量的距离。在计算完所有距离后,使用并行计算的归并排序对距离值排序。最后,所有块得到的匹配结果存储在全局内存中,然后传送到CPU。

  • 不使用全局内存,将阈值存放在常量内存中;
  • 特征向量放在共享内存中;
  • 为了高效使用归并排序,优化策略也使用共享内存。

精匹配过程,设计内核执行RANSAC迭代,只启动一个block,线程数为N-3,首先用CPU将三个非共线点计算得到的变换矩阵H,然后将H、阈值和剩余N-3个点传到GPU,判断内外点。

  • 阈值和变换矩阵存放在常量内存;
  • N-3个匹配对放在共享内存中。

通过内存分配,可以实现精细匹配优化。

B. 平行变形和插值

H矩阵的逆矩阵H^{-1}存放在常量内存中,由于需要频繁地调用。将待校正的图像存放在纹理内存中,纹理内存是专门为本地访问模式设计的。

为了进一步提升性能,若两个坐标小数部分小于0.2则强度值分配为整数部分,否则使用双线性插值。

C. 并行混合

由于混合数是像素和像素的混合,因此线程数等于重叠部分包含的像素。令重叠图像的列数设置为16的倍数。 gridDim.x的大小等于重叠图像的行数,gridDim.y的大小等于重叠图像的列数重叠图像除以16。

  • 恒定权重c(x, y)存放在常量内存中。

Ⅳ 实验结果

基于 CPU 的算法在配备 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 处理器上实现。基于 GPU 的算法在 NVIDIA GeForce GTX745 集成显卡上进行测试,每块最大 1024 个线程和 4096 MB 全局内存。

cpu 和 gpu 在不同数量的关键点上的执行时间
cpu 和 gpu 在不同大小的同一图像上的执行时间(特征点为 15(图 1)和 16(图 2))
CPU和gpu获得的拼接结果。(a) 通过cpu获得;(b) 通过 gpu 获得

可以清楚地看到,这两种图像之间几乎没有差异。原因是实验中使用的GPU卡支持浮点计算,与CPU版本相比产生的误差非常小。

Ⅴ 结论

在本文中,我们提出了一种使用 CUDA 架构在 GPU 上运行的并行图像拼接方法。顺序算法通过几个 CUDA 内核转换为并行版本。通过使用不同类型的内存,我们实现了并行算法的优化。同时,将GPU获得的结果与CPU获得的结果进行比较,我们实现了高达27.6的加速比。尽管所提出的方法显着提高了计算性能,但仍有许多工作要做。例如,更精确的插值方法(双三次插值)和可变权重 c( x, y) 可以考虑进一步改善镶嵌结果。此外,并行镶嵌算法也可以在多个GPU平台上运行,对于大数据可以更有效地执行算法。在今后的工作中,我们将一一处理这些问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容