基于GPU的高分辨率图像实时增强方法与流程

文档序号:16885555发布日期:2019-02-15 22:36阅读:673来源:国知局
基于GPU的高分辨率图像实时增强方法与流程

本发明属于图像处理技术领域,具体涉及一种基于gpu的高分辨率图像实时增强方法。



背景技术:

近年来,随着半导体技术的快速发展,图形处理器(gpu)的计算能力得到了极大的提升,相比于cpu,其具有更强的算术运算能力和更高的存储器带宽,在细粒度并行处理方面具有很大的优势;同时,随着cuda以及opencl等开发工具的发布,并行计算的编程难度进一步降低,这使得基于gpu的并行计算在机器学习以及计算机视觉等领域受到了广泛关注,也逐渐成为图像处理领域的一个研究热点。

基于高斯曲率滤波和梯度场重构的图像增强算法通过梯度变换来增强图像对比度,采用高斯曲率滤波对重构过程中的噪声进行抑制,在增强图像细节的同时,能够有效解决噪声扩散和放大问题,具有良好的增强效果。但是算法涉及的滤波运算很多,计算量非常大,随着图像分辨率以及重构迭代次数的增加,传统的基于cpu的实现方法难以保证实时性,无法满足实际应用需求。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种基于gpu的高分辨率图像实时增强方法。

为达到上述目的,本发明的技术方案是这样实现的:

本发明实施例提供一种基于gpu的高分辨率图像实时增强方法,该方法为:对输入图像进行高斯曲率滤波,之后,根据滤波后的输入图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像,对所述重构后的输入图像进行噪声抑制获得增强图像。

上述方案中,该方法还包括对所述重构后的输入图像进行噪声抑制获得一次增强图像之后,根据一次增强图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像,对所述重构后的输入图像进行噪声抑制,如此重复至少两次后获得最终增强图像。

上述方案中,所述对输入图像进行高斯曲率滤波,具体通过以下步骤实现:

步骤101:将输入图像的每一像素视为中心像素,在邻域像素构成的8个切平面,寻找与中心像素距离最近的面,并对中心像素值进行修正使其落在该面上;

步骤102:对于(i,j)坐标处的图像像素分别计算与领域窗口内的像素构成的8个切平面的距离:

d5=ui-1,j+ui,j-1-ui-1,j-1-ui,j

d6=ui-1,j+ui,j+1-ui-1,j+1-ui,j

d7=ui,j-1+ui+1,j-ui+1,j-1-ui,j

d8=ui,j+1+ui+1,j-ui+1,j+1-ui,j

其中,ui,j表示(i,j)坐标处图像的像素值;

步骤103:根据最小距离调整法对(i,j)坐标处的图像像素值进行修正:

|dk|=min{|dl|,l=1...8};

步骤104:采用域分解方法将输入图像按照奇偶坐标划分为四组不同像素,对各组交替更新;

步骤105:经过坐标分离,其中一组像素值修正更新时,该组像素周围领域像素值不变,当一组像素更新之后,图像局部曲率有所下降,然后再依次更新其余三组像素,完成高斯曲率滤波。

上述方案中,所述根据滤波后的输入图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像,具体为:根据滤波后的输入图像确定该输入图像的梯度,基于坐标分离的并行高斯曲率滤波对所述梯度进行滤波处理,对滤波后的梯度进行非线性变换获得变换后的梯度场,根据所述变换后的梯度场重构输入图像。

上述方案中,所述对滤波后的梯度进行非线性变换获得变换后的梯度场,具体为:梯度场t的非线性变换函数采用指数变换形式:

其中,u为输入图像,t为变换后的梯度场,▽为梯度算子,▽u为图像梯度,|▽u|为图像梯度模值,g(·)为变换系数函数,变换系数函数形式为:

其中,e为自然对数的底数;

所述图像梯度和图像梯度模值通过中央差分算法表示为:

其中,ui,j表示(i,j)坐标处图像的像素值,表示(i,j)坐标处梯度的m分量。

上述方案中,所述根据滤波后的输入图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像,重构过程通过最小化一个能量泛函实现,即

其中,e(·)为能量泛函,ω为图像定义域;

所述能量泛函的极小值通过迭代偏微分方程得到,即

u′=u-δt*(δu-divt)

其中,u′表示重构输出,u表示重构输入,δt表示迭代步长,本发明中δt=0.3,δ为拉普拉斯算子,div为散度算子;

所述拉普拉斯算子和散度算子基于中央差分算法表示为:

δu=ui,j+1+ui,j-1+ui+1,j+ui-1,j-4*ui,j

其中,表示梯度场t中(i,j)坐标处的n分量。

与现有技术相比,本发明的有益效果:

第一,本发明的基于坐标分离的并行高斯曲率滤波并行实现方法,解决了相邻像素干扰问题,加快了滤波收敛速度,在同样迭代次数下,比所有像素同步更新的传统方法能够更快地去除噪声,改善图像质量;

第二,本发明的线程网络设计方法,通过分析处理器资源限制瓶颈,优化寄存器使用以及算法流程,使得并行程序中每个多处理器执行的线程束数量达到了理论最大值,充分利用计算资源;

第三,本发明的基于gpu的高分辨率图像实时增强方法,相对于cpu平台,实现200倍以上的加速效果,而且图像分辨率越高,获得的加倍速率越高,最高能够达到302倍的加速效果,实现4096×4096分辨率图像的实时处理(>20fps)。

附图说明

图1为本发明实施例提供一种基于gpu的高分辨率图像实时增强方法的流程图;

图2为本发明的一幅待增强图像;

图3为本发明的图像域分解示意图;

图4为本发明中同步更新发和坐标分离法滤波结果对比,其中,(a)为原始图像,(b)为同步更新法滤波结果,(c)为坐标分离法滤波结果;

图5为本发明中的gpu配置与线程束使用率关系图;

图6为本发明中基于cpu的图像增强算法处理结果;

图7为本发明中基于gpu的图像增强算法处理结果;

图8为本发明中cpu与gpu处理结果的残差图像;

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例提供一种基于gpu的高分辨率图像实时增强方法,如图1所示,该方法通过以下步骤实现:

步骤1:读取一幅待增强图像到主机内存;

具体地,待增强图像分辨率分别有512×512、1024×512、1024×1024、2048×1024、2048×2048、4096×2048和4096×4096,且对待增强图像添加0%-5%椒盐噪声,以验证并行算法的精度。由图2可以看出,待增强图像受到椒盐噪声干扰而变得模糊。

步骤2:对所述输入图像进行高斯曲率滤波;

具体地,所述对输入图像进行高斯曲率滤波,具体通过以下步骤实现:

步骤201:将输入图像的每一像素视为中心像素,在邻域像素构成的8个切平面中,寻找与中心像素距离最近的面,并对中心像素值进行修正使其落在该面上;

步骤202:对于(i,j)坐标处的像素,分别计算它与领域窗口内的像素构成的8个切平面的距离:

d5=ui-1,j+ui,j-1-ui-1,j-1-ui,j

d6=ui-1,j+ui,j+1-ui-1,j+1-ui,j

d7=ui,j-1+ui+1,j-ui+1,j-1-ui,j

d8=ui,j+1+ui+1,j-ui+1,j+1-ui,j

其中,ui,j表示(i,j)坐标处图像的像素值。

步骤203:根据最小距离调整法对(i,j)坐标处的图像像素值进行修正:

|dk|=min{|dl|,l=1...8}

步骤204:采用域分解方法将输入图像按照奇偶坐标划分为四组不同的像素,对各种交替更新;

具体地,由于邻域像素之间相互关联,所有像素同时更新的并行方法会破坏最优曲面,影响滤波效果和收敛速度,无法有效去除噪声。因此,本发明采用域分解方法,通过将图像按照奇偶坐标划分为四组不同像素,对各组交替更新,实现基于坐标分离的并行高斯曲率滤波,以解决这一问题,坐标分解方式如图3。

步骤205:经过坐标分离,其中一组像素值修正更新时,该组像素周围邻域像素值不变,当一组像素更新之后,图像局部曲率有所下降,然后依次更新其余三组像素,完成高斯曲率滤波。

高斯曲率滤波的核函数执行分为四个子过程(p1,p2,p3,p4),每个子过程更新一种图形(白色方块ws,黑色方块bs,白圆形wc,黑色圆形bc)对应的像素集合,即p1更新ws,p2更新bs,p3更新wc,p4更新bc,执行完四次更新即完成一次滤波操作。

将高斯曲率滤波算法的核函数进行单独封装,使得整个线程处理函数被分割成子函数,对寄存器进行分时使用,并使程序结构更加清晰,在线程子函数内部增加了对寄存器变量的重复利用,尽量减少全局内存的访问。

图4为同步更新法和坐标分离法分别进行5次迭代滤波结果对比,其中,(a)为原始图像,(b)为同步更新法滤波结果,(c)为坐标分离法滤波结果。从图4可以看出,本发明采用的基于坐标分离的并行高斯曲率滤波策略在同样迭代次数下,比所有像素同步更新的传统方法能够更快地去除噪声,改善图像质量。

步骤3:根据滤波后的输入图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像;

具体地,首先,根据滤波后的输入图像确定该输入图像的梯度;

接着,基于坐标分离的并行高斯曲率滤波对所述梯度进行滤波处理;

然后,对滤波后的梯度进行非线性变换获得变换后的梯度场;

所述梯度场t的非线性变换函数采用指数变换形式:

其中,u为输入图像,t为变换后的梯度场,▽为梯度算子,▽u为图像梯度,|▽u|为图像梯度模值,g(·)为变换系数函数,在本发明中,变换系数函数形式为:

其中,e为自然对数的底数,本发明中e=2.71828。

所述梯度算子和梯度模值通过中央差分算法表示为:

其中,ui,j表示(i,j)坐标处图像的像素值,表示(i,j)坐标处梯度的m分量。

最后,根据所述变换后的梯度场重构输入图像。

所述根据滤波后的输入图像的梯度结合基于坐标分离的并行高斯曲率滤波重构输入图像,重构过程通过最小化一个能量泛函实现,即

其中,e(·)为能量泛函,ω为图像定义域;

所述能量泛函的极小值通过迭代偏微分方程得到,即

u′=u-δt*(δu-divt)

其中,u′表示重构输出,u表示重构输入,δt表示迭代步长,本发明中δt=0.3,δ为拉普拉斯算子,div为散度算子;

所述拉普拉斯算子和散度算子基于中央差分算法表示为:

δu=ui,j+1+ui,j-1+ui+1,j+ui-1,j-4*ui,j

其中,表示梯度场t中(i,j)坐标处的n分量。

步骤4:对所述重构后的输入图像进行噪声抑制获得增强图像。

具体地,对所述重构后的输入图像进行噪声抑制获得一次增强图像之后,针对一次增强图像依次重复步骤3-4,如此重复至少两次后获得最终增强图像。

例如重复三次获得最终增强图像。

进一步地,根据对算法数值实现的分析,基于曲率滤波和梯度变换的图像增强算法涉及大量微分运算,本发明采用适合线程与图像坐标相对应的并行策略;

具体地,本发明根据线程与图像坐标相对应的并行策略,结合gpu具体参数来设计线程网络。要使gpu的资源得到最大化利用,需要每个流多处理器承载的线程束数目尽可能多,以掩盖存储器访问延迟,根据这一约束对并行计算的线程网格进行设计。

在gtx980中,每个流多处理器承载的线程束数量最多为64个,此时每个流多处理器中运行的线程数为64×32=2048个,即每2048个线程共用一个流多处理器中的共享内存和寄存器。考虑到基于曲率滤波和梯度变换的图像增强算法未使用共享内存,因此,寄存器数量限制是实现最大化资源利用的瓶颈。

为了降低线程的寄存器使用量,采取了两项措施。首先,将高斯曲率滤波算法的核函数进行单独封装,使得整个线程处理函数被分割成子函数,对寄存器进行分时使用,并使程序结构更加清晰;同时,在线程子函数内部增加了对寄存器变量的重复利用,尽量减少全局内存的访问,确保程序运行效率。

经过程序优化,本发明中各核函数种的最大寄存器使用量为31,线程块大小设计为1024,即每个线程块负责处理32×32的图像块。在此条件下,每个sm中使用的寄存器数量最多为2048×31=63488个,低于最大限制值65536,说明这一线程网格设计满足硬件限制条件。同时,图5为gpu配置与线程束使用率关系图,根据图5可知,该设计方案中的线程块大小和寄存器使用量保证了每个流多处理器承载的线程束数量达到了理论最大值64,计算资源得到了充分利用。

图6为基于cpu的图像增强算法处理结果,图7为本发明中基于gpu的图像增强算法处理结果,图8为cpu与gpu处理结果的残差图像。因此,由主观方面分析,图8中仅存在极少的残留点,说明本发明的基于gpu的图像增强算法具有很高的精度。

为了进一步客观验证本发明的精度,采用均方误差作为标准,对不同噪声水平下的灰度归一化后的均方误差进行统计,均方误差定义为

其中,m表示图像像素数,i为像素索引,yi表示gpu处理结果,xi表示cpu处理结果,均方误差代表gpu和cpu处理结果的偏差程度,数值越低表示gpu处理结果越精确,处理结果的均值方差如表1所示。

具体地,表1为cpu和gpu计算结果的均值方差。

由表1可知,归一化均方误差小于0.005,由此可知gpu处理结果精度很高。

为了验证本发明提出的并行加速方法的有效性,分别采用不同分辨率图像进行实现,并比较分析,实验中梯度下降法迭代次数设置为3,迭代步长为0.3,实验在配置为酷睿i3@3.3ghzcpu、8g内存、gtx980图形处理器,windows764位操作系统的计算机平台上,基于visualstudio2013以及cuda8.0仿真实现,每幅图像所耗时间为实验10次的平均值,结果如表2所示。

具体地,表2为不同分辨率下每帧图像耗时。

由表2可知,相对于cpu平台,本文提出的基于gpu的并行加速方法实现了200倍以上的加速效果,对512×512图像的处理速度低于1毫秒,并且图像分辨率越高,获得的加速倍率越高,这是由于数据量的增大使得gpu开启了更多的线程,从而进一步发挥了其并行处理能力,最高能够达到302倍的加速效果,实现4096×4096分辨率图像的实时处理(>20fps)。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1