一种基于gpu的并行拉普拉斯图像锐化方法

文档序号:8528684阅读:856来源:国知局
一种基于gpu的并行拉普拉斯图像锐化方法
【技术领域】
[0001]本发明涉及一种图像处理方法,尤其涉及一种基于GPU的并行拉普拉斯图像锐化方法,属于图像处理领域。
【背景技术】
[0002]随着各种技术及应用的出现,在各个领域都出现了急剧膨胀的海量数据趋势。在数字图像处理领域,随着图像的分辨率不断提高,其包含的数据量急剧膨胀,并且,新的图像处理算法不断提出,这些因素使得图像处理的计算越来越复杂。在这样的背景下,对大规模图像进行加速处理的研宄就显得十分迫切,GPU作为一种高度并行的流处理器,具有更强的浮点计算能力。随着GPU通用计算的普及和CUDA的推出,GPU不再局限于传统的图像渲染任务,在通用计算方面也发挥着越来越重要的作用。目前,主流GPU都采用了统一架构单元,凭借强大的可编程流处理器数量,GPU在单精度浮点运算方面相对于CPU确立了巨大的优势。CUDA最为重要的是其线程模型和内存组织,一条线程处理一个元素,若干线程同时计算。这若干条线程以线程、线程块、线程网格的形式组织,一个线程块包含若干条线程,一个线程网格包含若干线程块,线程之间互不干扰,一个线程块内的线程可以通信。CUDA包含若干种内存,如全局内存、共享内存、纹理内存、常量内存等,各种内存有各自不同的特点,如全局内存容量最大,速度最慢,共享内存速度快于全局内存,但容量小于全局内存,各个块里的线程只能访问该块拥有的共享内存。
[0003]图像锐化就是加强图像中景物的细节和轮廓,使图像变得较清晰。拉普拉斯算子是一个刻画图像灰度的二阶商算子,它是最简单的各向同性微分算子,具有旋转不变性,比较适用于改善因为光线的漫反射造成的图像模糊在传统拉普拉斯锐化中,需要对像素点进行逐个处理,并且它们之间没有相关性,不存在先后顺序,这样特点使得拉普拉斯锐化特别适合于GPU并行化,大大提高其锐化效率。
[0004]目前已有若干研宄者致力于研宄基于GPU的图像处理加速领域。李英敏对耗时的三维医学图像同质滤波算法进行数据并行性分析,优化存储器访问,且实现了 Canny算子的并行加速。对Canny算子进行数据并行性分析,针对每一步骤都选择合适的并行优化策略,最大限度地实现了程序总体的加速。冯煌采用了频率抽取算法在GPU上实现了快速傅里叶变换FFT算法,同时实现了空间域上的卷积运算的并行算法,其所采用的图像都为灰度图像,在实时图像处理方面将FFT和卷积算法就性能和GPU实现的适应性方面进行了比较,结果显示无论是卷积还是FFT,在GPU上的性能都远远强于其在CPU上的实现版本。张巍等针对低清晰度照片或图像放大后边界模糊、画质差及人们对高清图像的实际需求,基于CUDA提出了一个两层结构的图像并行锐化方法,第一层采用并行线性插值法,反复对图像非边界部分进行计算以及边缘区域锐化处理,第二层采用改进的梯度法对图像进一步优化,该算法在效率和画质上都优于目前流行的算法,提出的方法可应用于现有图像及照片放大后处理。

【发明内容】

[0005]本发明所要解决的技术问题是针对【背景技术】的不足提供了一种基于GPU的并行拉普拉斯图像锐化方法。
[0006]本发明为解决上述技术问题采用以下技术方案
[0007]一种基于GPU的并行拉普拉斯图像锐化方法,具体包括以下步骤:
[0008]步骤I),输入待处理图像;
[0009]步骤2),获取待处理图像每个像素点的灰度值;
[0010]步骤3),定义图形处理器GPU端参数、定义线程块与线程网格;
[0011 ] 步骤4),将步骤2获取的灰度值数据从CPU端传送至GPU端;
[0012]步骤5),定义拉普拉斯锐化模版;
[0013]步骤6),为每个线程计算索引;
[0014]步骤7),每条线程按照拉普拉斯锐化的公式重新计算其所负责的像素点的灰度值,并存储在新的数组中;
[0015]步骤8),将步骤7)中重新计算的像素点的灰度值传回CPU端,进而得出锐化后的图像。
[0016]作为本发明基于GPU的并行拉普拉斯图像锐化方法的进一步优选方案,在步骤2)中,按照行优先顺序获取各像素点灰度值,并存于一维数组中。
[0017]作为本发明基于GPU的并行拉普拉斯图像锐化方法的进一步优选方案,在步骤3)中,将线程块和线程网络均定义成一维形式。
[0018]作为本发明基于GPU的并行拉普拉斯图像锐化方法的进一步优选方案,在步骤4)中,通过cudaMemcpy函数将像素点的灰度值从CPU端传输至GPU端。
[0019]作为本发明基于GPU的并行拉普拉斯图像锐化方法的进一步优选方案,在步骤6)中,一个线程一次负责一个像素点的灰度值,所有线程同时并行计算。
[0020]作为本发明基于GPU的并行拉普拉斯图像锐化方法的进一步优选方案,在步骤7)中,采用共享内存进行像素点的灰度值的读取,进而完成锐化计算。
[0021]本发明采用以上技术方案与现有技术相比,具有以下技术效果:
[0022]1、本发明首先读取原始图像,将各个像素点的灰度值读出并存于某一数组,将像素点的灰度值数组传至GPU端,在GPU端执行锐化计算过程,在进行锐化计算时,由于对一个像素点灰度值的更新需要读取周围若干像素点灰度值,根据对像素的访问顺序及规则,充分利用存取速度较快的共享内存;
[0023]2、本发明利用GPU强大的并行计算能力,将对所有像素点的串行处理转变为并行处理,时间复杂度大大降低,并在此基础上,结合拉普拉斯计算过程以及共享内存的特点设计合理的像素点存取策略,进一步提高算法执行效率。
【附图说明】
[0024]图1是基于GPU的并行拉普拉斯图像锐化算法的流程图;
[0025]图2是大小为8*8的图片的两种块划分方式示意图;
[0026]图3是将连续的像素点划分到一个线程块的示意图;
[0027]图4是将不连续的像素点划分到一个线程块的示意图;
[0028]图5是像素点更多的图像的块划分效果示意图。
【具体实施方式】
[0029]下面结合附图对本发明的技术方案做进一步的详细说明:
[0030]一种基于GPU的并行拉普拉斯图像锐化方法,具体包括以下步骤:
[0031]步骤I),输入待处理图像;
[0032]步骤2),获取待处理图像每个像素点的灰度值;
[0033]步骤3),定义图形处理器GPU端参数、定义线程块与线程网格;
[0034]步骤4),将步骤2获取的灰度值数据从CPU端传送至GPU端;
[0035]步骤5),定义拉普拉斯锐化模版;
[0036]步骤6),为每个线程计算索引;
[0037]步骤7),每条线程按照拉普拉斯锐化的公式重新计算其所负责的像素点的灰度值,并存储在新的数组中;
[0038]步骤8),将步骤7)中重新计算的像素点的灰度值传回CPU端,进而得出锐化后的图像。
[0039]其中,本发明的基于GPU的并行拉普拉斯图像锐化算法,步骤3)中,需要定义GPU端的参数,并为GPU端参数分配空间。根据经验,当一个块中包含256或者512条线程时,计算效率较高,在本发明中将线程块和线程网格均定义成一维形式,可根据图片大小设计不同的线程块大小。
[0040]本发明的基于GPU的并行拉普拉斯图像锐化算法,步骤4)中,使用cudaMemcpy (A,B, C,cudaMemcpyHostToDevice)函数将灰度值数组从CPU端传输至GPU端,其中,A是GPU端参数,B是CPU端参数,C代表传输数组的大小,cudaMemcpyHostToDevice代表数据传输方向,Host端指CPU端,Device指GPU端。
[0041 ] 本发明的基于GPU的并行拉普拉斯图像锐化算法,步骤7)中,为提高计算速度,使用速度较快的共享内存,每个线程块定义其共享内存数组各个线程根据所属线程块不同,将其对应的存于全局内存数组中的灰度值读入共享内存数组,随后,各条线程从共享内存数组中读取所需要的灰度值来进行锐化计算;
[0042]本发明的基于GPU的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1