基于GPU的图像实时去雾方法与流程

文档序号:15832713发布日期:2018-11-07 07:30阅读:258来源:国知局
基于GPU的图像实时去雾方法与流程

本发明属于视觉图像处理领域,具体涉及一种基于gpu的图像实时去雾方法。

背景技术

雾霾在近几十年一直是社会上的热门词汇,国内乃至世界上遭受雾霾影响的国家不在少数。雾霾导致视觉不清晰,有时候会造成极其恶劣的影响,比如雾天驾驶,雾天演习,雾天目标识别等等。因此对去雾效果稳定且实时性好的去雾算法的研究显得格外的重要。

然而,现如今还没有可以真正应用到实际生活当中的去雾算法,究其原因,主要是因为去雾效果稳定的算法计算量较大不具备实时应用前景,而当前的一些实时去雾算法则对于视频图像无可奈何,经常会有帧间过渡不自然,去雾效果断层的情况,另外对于雾霾浓度差异较大的图像,目前的去雾算法效果并不理想,无法有效地去除雾霾浓度较大地方的雾。针对现今去雾算法对于雾霾图像去雾深度不够的问题,提出了一种一次引导滤波改善透射率图的改进算法,现有效果稳定的去雾算法有暗通道先验算法,对比度去雾算法。对比度去雾算法是一种基于成本函数的单幅图像去雾算法,通过优化图像的对比度来消除雾霾,针对过度地提高对比度时引起地一些像素值的截断,制定了一个成本函数,在提高对比度的同时衡量信息丢失情况,通过最小化成本函数为每个区域块找到最佳地传输率估测值,再将其细化到基于像素点的传输率,以更好保留其中的边缘细节。实验结果表明,该算法能够可靠地估计传输率图,有效恢复场景光照。请参见图1,图1为一种现有技术的对比度优化算法的流程示意图。第一步针对输入的雾霾图像估计大气光值;然后在假设同一局部区域块中的场景深度相同的条件下,找到每个区域块的最佳传输率,以使得待恢复图像的对比度最大,同时,最小化由于像素值的截断而造成的信息丢失;然后通过使用边缘保持滤波算法将基于区域块的图像传输率细化;最后依据估计的传输率和大气光对输入的雾霾图像进行恢复。引导图滤波是一种图像滤波技术,请参见图2a、图2b和图2c,图2a为一种现有技术的引导图滤波技术的引导图(原始图像),图2b为一种现有技术的引导图滤波技术的预估透射率图,图2c为一种现有技术的引导图滤波技术的引导滤波后透射率图。通过一张引导图g,对目标图像p(输入图像)进行滤波处理,使得最后的输出图像大体上与目标图像p相似,但是纹理部分与引导图g相似。

但是由于对比度优化算法得到的透射率图相对粗糙,导致去雾图像部分去雾效果不明显,深度不够,最终导致得到的去雾图像不够理想。请参见图3a、图3b和图3c,图3a为一种现有技术的对比度算法的引导图(原始图像),图3b为一种现有技术的对比度算法的引导滤波后的透射率图,图3c为一种现有技术的对比度算法得到的去雾图像。可以看出,在最后得到的去雾图像中,去雾效果不够理想,比如右上角的树枝,铁轨旁的柱子等,主要是雾霾图像当中这些区域的边缘信息本身就不够清楚,因此利用雾霾图像作为引导图进行滤波对于这些区域效果并不理想。而且这两种算法在cpu上的表现也不如人意,在处理大图(比如标准1080p图像)时,这两种算法在cpu上并不具备实时处理标准高清图像的能力,在计算能力更加欠缺的嵌入式设备上实时性能更差,基本不可能应用到小型化设备当中去。

因此,如何实现一种去雾效率高且去雾效果明显的方法成为目前研究的热点问题。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提供了一种基于gpu的图像实时去雾方法。本发明要解决的技术问题通过以下技术方案实现:

本发明实施例提供了一种基于gpu的图像实时去雾方法,包括以下步骤:

(a)获取原始图像和大气光值;

(b)分配第一共享内存,利用所述第一共享内存根据所述大气光值计算第一透射率图;

(c)分配第二共享内存、第三共享内存、第四共享内存和第五共享内存,利用所述第二共享内存、所述第三共享内存、所述第四共享内存和所述第五共享内存根据所述原始图像和所述第一透射率图进行两次引导滤波获得无雾图像。

在本发明的一个实施例中,采用四叉树迭代法来计算大气光值。

在本发明的一个实施例中,步骤(c)包括:

(c1)分配所述第二共享内存和所述第三共享内存,根据所述原始图像和所述第一透射率图进行第一引导滤波后获得第二透射率图;

(c2)根据所述原始图像、所述大气光值以及所述第二透射率图获得第一无雾图像;

(c3)分配第四共享内存和第五共享内存,根据所述第一无雾图像和所述第一透射率图进行第二引导滤波获得第三透射率图;

(c4)根据所述原始图像、所述大气光值以及所述第三透射率图得到第二无雾图像。

在本发明的一个实施例中,所述第一引导滤波包括如下步骤:

(x1)将所述原始图像和所述第一透射率图分别分成若干个数据块,对每个数据块分别分配一个线程块,且每个线程块分别处理对应的一个数据块;

(x2)将每个所述数据块保存在所述第二共享内存中,并同步;

(x3)同时对所述数据块的每4个相邻像素进行第一均值滤波以获取所述数据块的每一个像素的所述第一均值滤波值;

(x4)根据所述第一均值滤波获得所述第二透射率图。

在本发明的一个实施例中,所述第一均值滤波包括如下步骤:

(x31)获得所述每一个像素的滤波窗口;

(x32)计算所述滤波窗口内每一列像素的像素值的和,将所述像素值的和作为第一计算值,将所述第一计算值保存在第三共享内存中,并同步;

(x33)在所述第三共享内存中,计算所述滤波窗口内每一行像素的像素值和作为第二计算值;

(x34)根据所述第二计算值以及所述滤波窗口尺寸计算所述第一均值滤波值。

在本发明的一个实施例中,所述第二引导滤波包括如下步骤:

(y1)将所述第一无雾图像和所述第一透射率图分别分成若干个数据块,对每个数据块分别分配一个线程块,且每个线程块分别处理对应的一个数据块;

(y2)将每个所述数据块保存在所述第四共享内存中,并同步;

(y3)同时对所述数据块的每4个相邻像素进行第二均值滤波以获取所述数据块的每一个像素的所述第二均值滤波值;

(y4)根据所述第二均值滤波获得所述第三透射率图。

在本发明的一个实施例中,所述第二均值滤波包括如下步骤:

(y31)获得所述每一个像素的滤波窗口;

(y32)计算所述滤波窗口内每一列像素的像素值的和,将所述像素值的和作为第三计算值,将所述第三计算值保存在第五共享内存中,并同步;

(y33)在所述第五共享内存中,计算所述滤波窗口内每一行像素的像素值和作为第四计算值;

(y34)根据所述第四计算值以及所述滤波窗口尺寸计算所述第二均值滤波值。

在本发明的一个实施例中,所述第一共享内存存储容量为3600b。

在本发明的一个实施例中,所述第二共享内存、所述第三共享内存、所述第四共享内存和所述第五共享内存存储容量均为49152b。

在本发明的一个实施例中,所述第一引导滤波和所述第二引导滤波均采用16×16的线程模型,33×33的滤波窗口,2×2的线程工作量。

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

1.本发明通过进行二次引导滤波,利用第一次滤波后的图像作为引导图,迭代进行下一次滤波,得到的最终透射率图边缘信息更加丰富。

2.本发明得到的最终去雾效果图的层次更加分明,细节保留得更加理想,改善了现有算法去雾效果不够细致的缺点。

3.本发明通过gpu来运行该二次引导滤波的算法,提高了图像去雾的效率,具备移植到嵌入式平台实际应用的能力。

附图说明

图1为一种现有技术的图对比度优化算法的流程示意图;

图2a为一种现有技术的引导图滤波技术的引导图(原始图像);

图2b为一种现有技术的引导图滤波技术的预估透射率图;

图2c为一种现有技术的引导图滤波技术的引导滤波后透射率图;

图3a为一种现有技术的对比度算法的引导图(原始图像);

图3b为一种现有技术的对比度算法的引导滤波后的透射率图;

图3c为一种现有技术的对比度算法得到的去雾图像;

图4为本发明实施例提供的一种基于gpu的图像实时去雾方法的流程示意图;

图5为本发明实施例提供的另一种基于gpu的图像实时去雾方法的流程示意图;

图6a为本发明实施例提供的一种基于gpu的图像实时去雾方法的引导图(原始图像);

图6b为本发明实施例提供的一种基于gpu的图像实时去雾方法的一次引导滤波后的透射率图;

图6c为本发明实施例提供的一种基于gpu的图像实时去雾方法的一次去雾图像;

图6d为本发明实施例提供的一种基于gpu的图像实时去雾方法的二次引导滤波后的透射率图;

图6e为本发明实施例提供的一种基于gpu的图像实时去雾方法的二次去雾图像;

图7为本发明实施例提供的一种基于gpu的图像实时去雾方法的四叉树迭代法的示意图。

具体实施方式

下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。

实施例一

请参见图4,图4为本发明实施例提供的一种基于gpu的图像实时去雾方法的流程示意图。一种基于gpu的图像实时去雾方法,包括以下步骤:

(a)获取原始图像和大气光值;

(b)分配第一共享内存,利用所述第一共享内存根据所述大气光值计算第一透射率图;

(c)分配第二共享内存、第三共享内存、第四共享内存和第五共享内存,利用所述第二共享内存、所述第三共享内存、所述第四共享内存和所述第五共享内存根据所述原始图像和所述第一透射率图进行两次引导滤波获得无雾图像。

需要说明的是,本发明实施例中所述大气光值泛指大气光的亮度值,雾天则指的是雾的亮度值,在本发明实施例中所述大气光值指的是雾霾天的亮度值,找到雾霾图像中最灰暗的区域,然后将其中最亮的像素点的亮度作为所述大气光值。

本发明实施例中的所述第一共享内存是在进行第一透射率图计算的时候进行的共享内存分配,第二共享内存、第三共享内存、第四共享内存和第五共享内存是在进行两次引导滤波的时候进行的共享内存分配。

本发明本实施例中的所述第一透射率图是进行第一引导滤波的输入图像,第一引导滤波为第一次进行引导滤波的滤波过程。

本发明实施例,在进行第一次去雾处理后,将去雾处理后的图像更新为二次引导滤波处理的模板,进行第二次去雾处理,使得到的透射率图边缘信息更加丰富,最终得到的去雾效果图更加理想。同时,通过在gpu中并行实现滤波算法进行加速,提供了一种在嵌入式设备当中高清大分辨率视频图像去雾的实现方案,极大提高了算法效率并保证了算法的实时性。

实施例二

请同时参见图5、图6a、图6b、图6c、图6d以及图6e,图5为本发明实施例提供的另一种基于gpu的图像实时去雾方法的流程示意图;图6a为本发明实施例提供的一种基于gpu的图像实时去雾方法的引导图(原始图像);图6b为本发明实施例提供的一种基于gpu的图像实时去雾方法的一次引导滤波后的透射率图;图6c为本发明实施例提供的一种基于gpu的图像实时去雾方法的一次去雾图像;图6d为本发明实施例提供的一种基于gpu的图像实时去雾方法的二次引导滤波后的透射率图;图6e为本发明实施例提供的基于嵌入式gpu上的图像实时去雾方法的二次去雾图像。本实施例在上述实施例的基础上,重点对一种图像实时去雾的方法进行了详细描述。具体地,

(s01)输入雾霾图像,即原始图像i,计算所述原始图像i的大气光值a以及第一透射率图t1;

进一步地,采用四叉树迭代法来计算大气光值,该方法旨在找出所述原始图像i中的类天空部分,将这部分图像中最亮点的值作为大气光值的预估值。四叉树迭代法是一个基于四叉树子空间划分的层次搜索方法。请参见图7,图7为本发明实施例提供的一种图像实时去雾方法的四叉树迭代法的示意图,首先把所述原始图像i划分成四个矩形区域,然后为每个子区域进行评分,这个评分的计算方法是“用区域内像素的平均值减去这些像素的标准差”,选择得分最高的区域,并将其继续划分为更小的四个子矩形,重复这个过程直到被选中的区域小于某个提前指定的阈值。图7中的灰色方框部分就是最终被选定的区域。在这被选定的区域里,选择使得距离||(ir(p),ig(p),ib(p))-(255,255,255)||最小化的颜色(包含r,g,b三个分量)来作为大气光的参考值。这样做的意义在于希望选择那个离纯白色最近的颜色(也就是最亮的颜色)来作为大气光的参考值,也就是大气光值a。

进一步地,根据所述大气光值a计算基于所述成本函数e的所述第一透射率图t1,所述成本函数e满足:

e=econtrast+λleloss

其中,econtrast为对比度函数的负数,eloss是信息量损失函数,λl是一个权值参数,它是控制信息损失和对比度之间相对重要的一个参数;其中,

其中,c∈{r,g,b}是颜色通道的索引标签,jc(p)为无雾图像的每个像素,nb=n1,n2,……nn,n为块中像素的数量,是jc(p)的平均值,min{0,jc(p)}指的是该窗口内的所有j值小于0的值,max{0,jc(p)-255}指的是该窗口内的所有j值超过255的值。

需要说明的是,一个有雾的窗口内,对比度都是比较低的,而被恢复的窗口内的对比度则随着每个窗口的透射率的值t的变小而增大,因此需要得到一个最优的t值,从而使得去雾后的窗口能够得到最大的对比度,也就是使econtrast最小。

所述信息量损失函数越小,证明丢失的信息越少,最终得到的图像就越清晰,因此需要得到一个最优的t值,从而使得去雾后的窗口信息损失越少,也就是使eloss最小。

该方法假设同一窗口下各像素的透射率相同,本发明采用的是15﹡15的窗口,利用最大化窗口的方差以及最小化每个窗口的像素越界,即像素值小于0或者大于255来构建一个成本函数,求出每个窗口的最佳透射率值t使所述成本函数e值最小。

优选地,当所述权值为5时,去雾效果最理想。

(s02)根据所述原始图像i和所述第一透射率图t1进行第一引导滤波后得到第二透射率图t2。

需要说明的是,所述第二透射率图是第一引导滤波后得到的图像,

第一引导滤波细化所述透射率图t1,将所述原始图像i作为引导图像,所述透射率图t1作为输入图像,进行第一引导滤波后得到细化后的所述透射率图t2。

第一引导滤波过程被认为是一个在二维窗口内满足线性关系的函数,满足:

其中,t2表示第一引导滤波后得到的透射率图,i表示原始图像,i和k是像素索引,ω表示窗口大小,a和b表示当前窗口中心位于k时该线性函数的系数。

建立一个线性规划模型:

通过最小二乘法可以得出,将ak和bk带入(1)式,得到第一引导滤波后的透射率图t2。

其中,μk是i在窗口ωk中的平均值,σk2是i在窗口ωk中的方差,|ω|是窗口ωk中像素的数量,是指t1在窗口ωk中的均值。

(s03)根据所述原始图像i、所述大气光值a以及所述第二透射率图t2得到第一无雾图像j1,将引导滤波的模板更新为所述第一无雾图像j1。

需要说明的是,本发明实施例中的所述第一去雾图像j1为第一引导滤波后得到的去雾图像。

进一步地,所述第一无雾图像j1满足:

其中,j(1)为所述第一无雾图像j1,t(2)为所述第二透射率图t2。

将所述原始图像i、所述大气光值a以及所述透射率图t2带入公式中,求出所述第一无雾图像j1,然后将第二引导滤波的引导图更新为所述第一无雾图像j1。

(s04)根据所述第一无雾图像j1和所述第一透射率图t1进行第二引导滤波后得到第三透射率图t3。

需要说明的是,本发明实施例中所述第三透射率图t3是第二引导滤波后得到的图像。

重复步骤(s03),第二引导滤波过程同样满足:

其中,t3表示第二引导滤波后得到的透射率图,j1表示第一无雾图像,i和k是像素索引,ω表示窗口大小,a和b表示当前窗口中心位于k时该线性函数的系数。

建立一个线性规划模型:

得出,将ak和bk带入(2)式,得到第二引导滤波后的透射率图t3。

(s05)根据所述原始图像i、所述大气光值a以及所述第三透射率图t3得到第二无雾图像j2,完成图像去雾。

需要说明的是,所述第二去雾图像j2为第二引导滤波后得到的去雾图像,也就是本发明最终要得到的结果。

进一步地,所述第二无雾图像j2满足:

其中,j(2)为所述第二无雾图像j2,t(3)为所述第三透射率图t3。

将所述原始图像i、所述大气光值a以及所述透射率图t3带入公式中,求出所述第二无雾图像j2,完成整个图像去雾处理。

本发明实施例,通过这种方法,可以达到以下有益效果:

1.本发明实施例通过进行两次引导滤波,使得到的透射率图边缘信息更加丰富,从而使最终得到的图像更加清晰。

2.本发明实施例通过这种方法,使得到的去雾效果图层次更加分明,改善了现有方法去雾深度不够的缺点。

实施例三

本发明实施例在实施例二的基础上,详细介绍了通过gpu来实现二次引导滤波的过程。

(s201)在cpu端求取原始图像i的大气光值a,默认连续帧的大气光值a一样,所以对于视频流,a值只求一次。

(s202)所述cpu将所述原始图像i传输到gpu端,并用cudahostregister函数注册为锁页内存,加快原始图像的传输速度,一般来说锁页内存的传输速度比普通内存快30%~40%。

(s203)在所述gpu端求原始图像i的第一灰度图g1。优选参数:16*16的线程模型,1*1的线程工作量。彩色转灰度是最基本的gpu核函数,单个线程将一个rgb值更新为灰度值,采用16*16的线程模型充分利用了gpu的计算单元,能够有效地加快算法运行效率。

(s204)在所述gpu端进行第一共享内存分配,根据所述大气光值a求基于成本函数e的透射率图t1。优选参数:16*16的线程模型,15*15的滤波窗口,1*1的线程工作量,3600b的共享内存使用,算法采用估值代入计算的方式求解成本函数,即将每个窗口的透射率t从0.1开始代入求取成本函数值,然后每次t加上0.1直到t=1,使成本函数值最小的t为结果。这种计算方式需要重复计算十次成本函数值,也带来了所有数据的十次重复运算,本实施例采用共享内存储存原始图像i,共享内存的带宽在1.5tb/s左右,相比全局内存带宽一般为30~180gb/s左右,利用共享内存会使整个算法获得十倍左右的提升。

其中,成本函数满足:

e=econtrast+λleloss

其中,econtrast为对比度函数的负数,eloss是信息量损失函数,λl是一个权值参数,它是控制信息损失和对比度之间相对重要的一个参数;其中,

其中,c∈{r,g,b}是颜色通道的索引标签,jc(p)为无雾图像的每个像素,g1为原始图像i的灰度图,nb=n1,n2,……nn,n为块中像素的数量,是jc(p)的平均值,min{0,jc(p)}指的是该窗口内的所有j值小于0的值,max{0,jc(p)-255}指的是该窗口内的所有j值超过255的值。

对比实施例二,在实施例二中该公式用原始图像i来进行计算,而一个原始图像i有三个索引通道,因此,需要进行三遍计算,在本实施例中,直接将原始图像i的灰度图g1带入,节省了计算效率。

需要说明的是,共享内存实际上是可受用户控制的一级缓存。每个sm中的一级缓存与共享内存共享一个64kb的内存段。在实际中,共享内存的速度几乎在所有的gpu中都一致(大约为1.5tb/s的带宽),因为共享内存的速度受核时钟频率驱动。因此在任何显卡中,无论是否为高端显卡,除了使用寄存器外,还要更有效的使用共享内存。然而,gpu执行的是一种内存的加载-存储模型,即所有的操作都要在指令载入寄存器后才能执行。因此,加载数据到共享内存与加载数据到寄存器中不同,只有当数据重复利用、全局内存合并,或线程之间有共享数据时使用共享内存才更合适,否则,将数据直接从全局内存加载到寄存器性能会更好。

(s205)在所述gpu端进行第二共享内存和第三共享内存分配,根据所述第一灰度图g1和所述第一透射率图t1进行第一引导滤波后获得第二透射率图t2。优选参数:16*16的线程模型,33*33的滤波窗口,2*2的线程工作量,49152b的共享内存使用。根据第一引导滤波的公式,最终透射率图t1可以通过做多次均值滤波完成。

第一引导滤波过程满足:

其中,t2表示第一引导滤波后得到的透射率图,g1表示原始图像i的灰度图,i和k表示像素索引,ω表示窗口大小,a和b表示当前窗口中心位于k时该线性函数的系数。

对比实施例二,在实施例二中该公式用原始图像i来进行计算,而一个原始图像i有三个索引通道,因此,需要进行三遍计算,在本实施例中,直接将原始图像i的灰度图g1带入,节省了计算效率。

需要说明的是,本发明采用16*16的线程模型,即一个线程块计算16*16个结果,2*2的线程工作量,即一个线程计算4个相邻的4个结果。2*2的线程工作量使得一个线程计算四个输出,这样每个输出所用到的像素值可以被单个线程重复使用,避免了算法重复加载数据的时间,另外因为算法需要重复使用同一窗口中的数据,将其保存在共享内存之中能够成倍地提升算法的运行速率。

进一步地,第一引导滤波过程包括如下步骤:

(x1)将所述原始图像和所述第一透射率图分别分成若干个的数据块,对每个数据块分别分配一个线程块,且每个线程块分别处理对应的一个数据块;

(x2)将每个所述数据块保存在所述第二共享内存中,并同步;

(x3)同时对所述数据块的每4个相邻像素进行第一均值滤波以获取所述数据块的每一个像素的所述第一均值滤波值;

(x4)根据所述第一均值滤波获得所述第二透射率图。

进一步地,所述第一均值滤波包括如下步骤:

(x31)获得所述每一个像素的滤波窗口;

(x32)计算所述滤波窗口内每一列像素的像素值的和,将所述像素值的和作为第一计算值,将所述第一计算值保存在第三共享内存中,并同步;

(x33)在所述第三共享内存中,计算所述滤波窗口内每一行像素的像素值和作为第二计算值,所述第二计算值为所述像素滤波窗口内所有像素值的和;

(x34)根据所述第二计算值以及所述滤波窗口尺寸计算所述第一均值滤波值。

具体地,第一均值滤波过程包括以下步骤:

(s2051)将单个线程块所需要的全部数据保存在共享内存中;

(s2052)所述单个线程块中每个线程计算共享内存中对应列上面33(这里指滤波窗口的边长)个值的和,并将其保存在新的共享内存中;

(s2053)所述每个线程求取对应行上面33(这里指滤波窗口的边长)个值的和,根据步骤(s2052)以及步骤(s2053)求出了该像素对应窗口内所有像素(这里指33*33个像素)的和,取其平均数则为均值滤波最终结果;

(s2054)利用多次均值滤波求出最终的引导滤波结果图。

采用这种方式求均值,结果图的每一个像素值只需要进行33+33次加法运算,而相比于利用全局内存单个像素计算对应窗口内所有像素的和需要的33*33次加法,减少了十多倍的运算。并且采用一个线程计算4个结果,同一个线程中4个相邻像素所需要的数据量大部分一样,这样又避免了大量的重复加法运算。表1展示了本实施例引导滤波实现方法与一般全局内存直接计算单个窗口的实现方法的速度对比。

表1现有全局内存版引导滤波与本实施例中引导滤波实现方案的效率对比(s206)在所述gpu端根据所述原始图像i、所述大气光值a以及所述第二透射率图t2得到第一无雾图像j1,根据公式将原始图像i,大气光值a以及透射率图t2代入求解无雾图像j1。优选参数:16*16的线程模型,1*1的线程工作量。该步骤gpu算法设计同彩色转灰度一样,进行一一对应,单个线程计算单个像素。

(s207)在所述gpu端求取所述第一无雾图像j1的第二灰度图g2,并将其更新为第二滤波的引导图模板,优选参数:16*16的线程模型,1*1的线程工作量。

(s208)在所述gpu端进行所述第四共享内存和第五共享内存分配,根据所述第二灰度图g2和所述第一透射率图t1进行第二引导滤波后获得第三透射率图t3,优选参数:16*16的线程模型,33*33的滤波窗口,2*2的线程工作量,49152b的共享内存使用。第二引导滤波的引导过程与第一引导滤波相同。

第二引导滤波过程同样满足:

其中,t3表示第二引导滤波后得到的透射率图,g2表示第一无雾图像j1的灰度图,i和k是像素索引,ω表示窗口大小,a和b表示当前窗口中心位于k时该线性函数的系数。

进一步地,所述第二引导滤波包括如下步骤:

(y1)将所述第一无雾图像和所述第一透射率图分别分成若干个数据块,对每个数据块分别分配一个线程块,且每个线程块分别处理对应的一个数据块;

(y2)将每个所述数据块保存在所述第四共享内存中,并同步;

(y3)同时对所述数据块的每4个相邻像素进行第二均值滤波以获取所述数据块的每一个像素的所述第二均值滤波值;

(y4)根据所述第二均值滤波获得所述第三透射率图。

进一步地,所述第二均值滤波包括如下步骤:

(y31)获得所述每一个像素的滤波窗口;

(y32)计算所述滤波窗口内每一列像素的像素值的和,将所述像素值的和作为第三计算值,将所述第三计算值保存在第五共享内存中,并同步;

(y33)在所述第五共享内存中,计算所述滤波窗口内每一行像素的像素值和作为第四计算值,所述第四计算值为所述像素滤波窗口内所有像素值的和;

(y34)根据所述第四计算值以及所述滤波窗口尺寸计算所述第二均值滤波值。

所述第二均值滤波的具体过程和所述第一均值滤波的具体过程相同,此处不再赘述。

对比实施例二,在实施例二中该公式用第一无雾图像j1来进行计算,而一个第一无雾图像j1有三个索引通道,因此,需要进行三遍计算,在本实施例中,直接将第一无雾图像j1的灰度图g2带入,节省了计算效率。

(s209)在所述gpu端得出第二无雾图像j2,根据公式将所述原始图像i,所述大气光值a以及所述第三透射率图t3代入求出第二无雾图像j2。优选参数:16*16的线程模型,1*1的线程工作量。

(s210)在所述gpu端实现gamma校正,增强图像的整体亮度,由于去雾图像整体偏暗,本实施例将所述第二去雾图像j2通过gamma校正调节亮度。参数:16*16的线程模型,1*1的线程工作量,256b的常量内存使用。由于特定参数的gamma校正的像素值是可以提前求出的,即0~255之间的256个像素值都有一一对应的gamma校正值,所以将gamma校正表提前求出,存入256b的常量内存中,通过常量内存的线程发散特性能够加速gamma校正的运行速率。

(s211)所述gpu将处理后的所述第二无雾图像j2传输到所述cpu端。利用cudamemcpy函数实现数据交互,并用cudahostregister函数注册为锁页内存,加快去雾图像的回传速度。

实验结果请参见表2和表3,

表2nvidiajetsontx2的cpu与gpu运行本发明算法中主要算法的效率对比

表3不同cpu,gpu下本发明算法的表现情况汇总

本实施例是在nvidiajetsontx2上进行,从表2中可以看出,在内存密集型的算法(比如彩色转灰度,gamma校正)中的表现,gpu效率大概是cpu的12倍,在计算密集型的算法(比如引导滤波),gpu效率大概是cpu的40倍。

从表2中可以看出,nvidiagtx960(gpu)显卡效率大约为corei5处理器(cpu)的50倍,tx2上的gpu效率大约是cpu的43倍。而且,嵌入式平台上的tx2gpu的效率也要明显高于标准的corei5处理器,大约是其10倍左右。

根据具体的实验数据分析,本发明提出的基于gpu架构的方法显著提升了算法的运行效率,对标准1080p的视频图像进行去雾,在最新架构的gpu上可以达到150hz以上,在嵌入式平台nvidiajetsontx2上的表现可以达到25hz以上,达到了不大于1080p分辨率范围内视频图像去雾的工业级标准,具备实际应用价值。

需要说明的是,线程模型指的是gpu核函数中一个线程块的线程分配模型,线程工作量指单个线程计算的结果数量,1*1为一一对应,2*2为一个线程计算四个结果。共享内存与常量内存的合理使用能够加速算法的运行。

本发明实施例,通过gpu实现二次滤波算法,提高了图像去雾的效率,同时使图像去雾效果更加理想。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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