基于GPU的数字图像并行处理研究

摘要:针对像素级图像处理算法并行化程度高的特点,利用GPU的并行流处理特性和可编程性,提出了基于GPU的数字图像并行化处理方法,并对其基本执行流程和其中的关键技术问题:数据加载,结果反馈、保存等进行了详细论述。最后通过图像的卷积运算验证了GPU的并行处理能力。
关键词:GPU;片元程序;Cg;并行处理

GPU并行化处理

  可编程图形处理器(Programmable Graphic Process Unit, PGPU)是目前计算机上普遍采用的图形图像处理专用器件,具有单指令流多数据流(SIMD)的并行处理特性,而且提供了完全支持向量操作指令和符合IEEE32位浮点格式的顶点处理能力和像素处理能力,已经成为了一个强大的并行计算单元。研究人员将其应用于加速科学计算和可视化应用程序,取得了令人鼓舞的研究成果。

  与CPU相比,GPU具有以下优势:强大的并行处理能力和高效率的数据传输能力[1] [2][7]。其中,并行性主要体现了指令级、数据级和任务级三个层次。高效率的数据传输主要体现在两个方面: GPU与显存之间的带宽为:16GB/s;系统内存到显存的带宽为:4GB/s。

  总上所述,GPU比较适合处理具有下面特性的应用程序:1、大数据量;2、高并行性;3、低数据耦合;4、高计算密度;5、与CPU交互比较少。

数字图像处理的并行化分析

  数字图像处理算法多种多样,但从数据处理的层面来考虑,可以分为:像素级处理、特征级处理和目标级处理三个层次[3][4]。

(1)像素级图像处理

  像素级处理,即由一幅像素图像产生另一幅像素图像,处理数据大部分是几何的、规则的和局部的。根据处理过程中的数据相关性,像素级处理又可进一步分为点运算、局部运算和全局运算。

(2)特征级图像处理

  特征级处理是在像素图像产生的一系列特征上进行的操作。常用的特征包括:形状特征、纹理特征、梯度特征和三维特征等,一般采用统一的测度,如:均值、方差等,来进行描述和处理,具有在特征域内进行并行处理的可能性。但是,由于其特征具有象征意义和非局部特性,在局部区域并行的基础上,需要对总体进行处理。利用GPU实现并行化处理的难度比较大。

(3)目标级图像处理

  目标级处理是对由一系列特征产生的目标进行操作。由于目标信息具有象征意义和复杂性,通常是利用相关知识进行推理,得到对图像的描述、理解、解释以及识别。由于其数据之间相关性强,且算法涉及到较多的知识和人工干预,并行处理的难度也比较大。

  由此可见,整个图像处理的结构可以利用一个金字塔模型来表示。在底层,虽然处理的数据量巨大,但由于局部数据之间的相关性小,且较少的涉及知识推理和人工干预,因此大多数算法的并行化程度比较高。当沿着这个金字塔结构向高层移动时,随着抽象程度的提高,大量原始数据减少,所需的知识和算法的复杂性逐层提高,并行化处理的难度也逐渐加大。

  由于绝大部分的图像处理算法是在像素级进行的,且GPU的SIMD并行流式处理在进行像素级的图像处理时具有明显的优势,而特征级和目标级处理无论是从数据的表达还是从算法自身的实现来说,都很难实现GPU并行化。因此,本文重点研究各种像素级图像处理操作的GPU并行化实现方法。

的处理算法则被分解为一系列的执行步骤,并改写为GPU的顶点处理程序或片段处理程序,然后,调用3DAPI执行图形绘制操作,调用片段程序进行处理;最后,保存在帧缓存中的绘制结果就是算法的输出数据,如图1所示[5][6]。


图1  遥感影像GPU并行化处理基本流程

  虽然数字图像处理算法多种多样,具体实现过程也很不相同,但是在利用GPU进行并行化处理时,有一些共性的关键技术问题需要解决,如:数据的加载,计算结果的反馈、保存等。下面对这些共性的问题进行分析,并提出相应的解决思路。

数据加载

  在GPU的流式编程模型中,所有的数据都必须以“流”的形式进行加载处理,并通过抽象的3DAPI进行访问。在利用GPU进行图像处理时,最直接有效的数据加载方法是把待处理的图像打包为纹理,在绘制四边形时进行加载、处理。同时为了保证GPU上片段程序能够逐像素的对纹理图像进行处理,必须将投影变换设置为正交投影,视点变换的视区与纹理大小相同,使得光栅化后的每个片段(fragment)和每个纹理单元(texel)一一对应。

  对于图像处理算法中的其他参数,如果数据量很小,则可以直接通过接口函数进行设置;如果参数比较多,也应该将其打包为纹理的形式传输给GPU。在打包的过程中应充分利用纹理图像所具有的R、G、B、A四个通道。

计算结果的反馈、保存

  应用程序是通过调用3D API绘制带纹理的四边形,激活GPU上的片段程序进行图像处理的,而GPU片段着色器的直接渲染输出是一个帧缓冲区,它对应着计算机屏幕上的一个窗口,传统上用来容纳要显示到屏幕的像素,但是在GPU流式计算中可以用来保存计算结果。虽然CPU可以通过3DAPI直接读写这个帧缓冲区,将渲染处理的结果从帧缓存中复制到系统内存进行保存,但是帧缓存的大小受窗口大小限制,而且由于AGP总线的带宽限制(2.1GB/s),从显存到系统内存的数据回读操作效率低下。对于大幅影像的处理应用是显然不适合的,特别是在中间计算结果的保存反馈时,采用帧缓存方式将成为制约GPU性能发挥的最主要瓶颈。

  针对以上问题,笔者利用离线渲染缓存Pbuffer作为输出缓存。Pbuffer是OpenGL1.3版本的WGL_ARB_pbuffer扩展提供的输出缓存,它通过在显存中开辟一个不可见的数据缓冲区,取代帧缓存来保存片段处理器的输出结果。如果这个结果只是中间计算数据,还可以采用渲染到纹理的技术,把Pbuffer中的数据绑定到一个纹理,供下一遍绘制的片段程序取用,减少数据在显存和系统内存之间的传输,实现整个数据流在GPU芯片内部的流转,显著提高数据的反馈速度。特别是在需要GPU反复执行的情况下,可以构造两个Pbuffer,交替的作为输入或输出纹理使用,产生所谓的“Ping-Pong”方法,有效避免中间计算结果的回读操作。

图像卷积运算的GPU并行化试验

  卷积运算是一种常见的数字图像处理局部运算,通过选择不同的卷积核,可以实现不同的图像处理效果。图像卷积运算定义为:

  式中,为卷积运算以后的图像;为待处理的图像;为卷积核;T为常数,当卷积核中所有系数之和不为零时,T等于所有系数之和,否则等于1。

试验平台与数据

  硬件平台为: Intel Core2 2.0GHz CPU,1GB系统内存,NVIDIA公司的GeForce G0 7400 GPU, 512MB显存。

  软件平台:WindowsXP操作系统,CPU程序开发环境为Microsoft VisualC++2005,三维绘制接口为OpenGL及其扩展库WGL_ARB_pbuffer,GPU程序开发语言为Cg。

  所采用的试验数据有两组,如图2所示:

  第一组为:截取的新加坡部分地区QucikBird卫星影像,大小为(像素);

  第二组为:截取的黄河小浪底部分地区Spot4卫星影像,大小为(像素)。


(a)试验数据一


(b)试验数据二
图2 卷积运算试验数据

试验步骤与数据记录

  为了进行多组数据的对比试验,首先对原始图像数据进行预处理,通过裁减获得大小分别为2048×2048、1024×1024、521×512、256×256、128×128的试验数据。

  以经过预处理的10幅不同大小的图像进行卷积运算对比试验,分别运行卷积平滑和卷积锐化的CPU和GPU程序,并记录处理时间。试验所用的平滑卷积核h1为式(2),锐化卷积核h2为式(3):

 

 

试验结果与分析

  图3所示为图像数据二512×512的平滑和锐化试验的处理结果,图4为GPU加速效率对比图。


(a)卷积平滑后图像


(b)卷积锐化后图像
图3  数据二的图像平滑、锐化效果对比


图4 卷积运算GPU加速效率对比图

  从图4可以看出:随着图像的增大,特别是卷积核的变大,GPU的加速效果更加明显,例如:对2048×2048大小的图像进行5×5的卷积运算,最高加速比达到了8倍多。但是,在图像数据较小时,由于OpenGL的初始化和纹理数据的加载耗费了大量的时间,使得GPU并行处理的优势消失,甚至还没有CPU处理的速度快。

结语

  本文对GPU的并行性和数字图像处理算法的并行层次进行了简要的介绍,提出了像素级图像处理的GPU并行化实现方法,并对其基本流程和关键技术:数据的加载,计算结果的反馈与保存等问题进行了详细论述,最后通过图像的平滑和锐化的卷积运算证明了GPU在数字图像并行化处理方面的强大优势。

参考文献:

[1] 柳有权.基于物理的计算机动画及其加速技术的研究[D].北京:中国科学院研究生院博士论文,2005.
[2] 谭久宏、周维超、吴钦章.基于GPU数字图像处理[J].科教文汇,2006,4:178-179.
[3]卢丽君、廖明生、张路.分布式并行计算技术在遥感数据处理中的应用[J].测绘信息与工程,2005,30(3):1-3.
[4] DOWNTON A, CROOKES D. Parallel Architectures for ImageProcessing [J]. Electronics and Communication Engineering Journal,1998, 10(3):139-151.
[5] 龚敏敏.GPU精粹2—高性能图形芯片和通用计算编程技巧(译)[M].北京:清华大学出版社,2007.
[6]洪伟、刘亚妮、李骑、丁莲珍.Cg教程—可编程实时图形权威指南(译)[M].北京:人民邮电出版社,2004:7-10.
[7] 吴恩华.图形处理器用于通用计算的技术、现状及其挑战[J].软件学报,2004,15(10):1493-1504.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值