本发明涉及图像融合
技术领域:
,尤其涉及一种基于cuda图像融合并行计算的方法。
背景技术:
:多源图像融合是以图像为研究对象的信息融合技术,它把对同一目标或场景使用不同传感器所获得的不同图像融合为一幅图像,在融合后的图像中能反映多重原始图像的信息,从而协同利用多源图像信息,使得不同形式的信息相互补充,达到对同一目标或场景的综合描述目的,使之更适合视觉感知或计算机处理。图像融合技术已经被广泛应用到目标检测、跟踪和识别以及情景感知等领域,常见的有红外图像与可见光图像的融合、遥感图像融合等。如图1所示,图像融合过程首先是将原定义在图像空间的图像通过图像变换算法转化到另一些空间,然后利用这些空间的特有性质进行处理,最后再转换回图像空间以得到所需的效果,对图像变换域系数进行的一定的处理即为融合规则;如图2所示,基于nsct算法的图像融合时,分别对图像进行分解(decompose),然后对变换后的子带系数进行融合,最后利用nsct逆变换重构(reconstruction)得到融合图像。目前用于图像融合的主流图像变换算法包括基于小波分析的变换算法、基于多分辨率非下采样理论的变换算法等,但由于包含大量的二维卷积以及大量迭代计算等,普遍存在计算效率较低、融合过程耗时长等问题,该问题也已经成为图像融合在实际使用中的主要制约因素之一。以小波变换为代表的多分辨率分析方法主要是利用人眼对局部对比度的变换比较敏感这一特性,根据一定的融合规则,在多幅原图像中选择出最显著的特征,如边缘、线段等,并将这些特征保留在最终的合成图像中,该类算法尽管具有良好的时频局部化特性,但由于需要通过卷积完成,计算复杂度高,而且不具备平移不变性,容易导致重构图像出现明显的gibbs现象;为弥补上述缺点提出的多分辨率非下采样的变换算法,如非下采样轮廓波变换算法(nsct)等,是将图像变换分为多尺度分解和方向分解两步完成,每一步由特定的滤波器完成,但由于在运算过程中引入了大量的二维卷积计算,使得融合过程耗时过长。此外,不同融合规则的融合效果也不同,对于如基于耦合脉冲神经网络(pcnn)以及非负矩阵分解(nmf)等融合规则,具有较好处理效果,但是包含大量的迭代操作,进一步制约了图像融合的性能。具体对于两幅像素为256*256的图像的融合,典型的如基于非下采样轮廓波变换算法(nsct)以及非负矩阵分解(nmf)的融合框架的耗时长将达188.23s,这严重制约了图像融合技术的实际使用。为了实现对图像融合过程的加速,一种方法是降低算法的复杂性,但同时也会导致融合效果变差;另一种方法是将算法以并行的方式实现,如采用dsp、fpga以及gpu等专门的硬件设备,其中gpu拥有优秀的并行计算能力以及更高的存储带宽,计算能力远高于cpu;cuda(computerunifieddevicearchitecture,统一计算设备架构)是在传统gpgpu的基础上推出的一种将gpu作为数据并行设备的软硬件体系,可以借助c、c++等通用语言进行开发,使得gpu的开发难度大大降低,同时利用gpu的并行计算能力获得非常可观的加速性能。但是目前基于gpu的图像融合框架对算法本身要求较高,且通常融合效果差,仅能够使用于特定的框架进行加速,即加速过程局限于单一算法,很难形成统一的对所有算法都适用的加速手段,这增加了开发的工作量以及复杂度,在实际使用中受限较多。中国专利申请cn105245841a公开一种利用cuda实现全景视频监控系统,通过对多个视频流进行拼接形成全景视频,但该方法仅局限于同类传感器获得的视频,不涉及多类传感器图像的融合处理,且是针对算法复杂度较低的拼接算法,复杂度远小于图像融合的计算复杂度。技术实现要素:本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、融合效率高且融合效果好的基于cuda图像融合并行计算的方法。为解决上述技术问题,本发明提出的技术方案为:一种基于cuda图像融合并行计算的方法,步骤包括:s1.图像分割:获取待融合的源图像并分别进行分割,得到分割后的多个子图像;s2.并行融合:将各源图像的子图像分别一一对应构成多组待融合子图像,各组所述待融合子图像分别通过不同cuda核心并行进行图像融合处理,得到多组融合后子图像;s3.图像拼接:将所述步骤s2得到的各组融合后子图像进行拼接,得到最终的融合后图像。作为本发明的进一步改进:所述步骤s1中进行分割时,具体使得相邻子图像之间具有指定大小的数据重叠;所述步骤s3中进行拼接前,去除所述数据重叠。作为本发明的进一步改进:所述步骤s1中进行分割时,具体将m*n大小的源图像等分分割为多个(m/a+1)*(n/a+1)大小的子图像,其中a为等分的数量。作为本发明的进一步改进:述步骤s1进行分割前还包括对源图像进行包括配准的预处理步骤。作为本发明的进一步改进,所述步骤s2中进行图像融合处理的具体步骤为:s21.将各组所述待融合子图像的数据存储在cuda的全局存储器中;s22.将所述全局存储器中各组待融合子图像的数据分别传输至cuda的不同线程块中;s23.各个所述线程块并行对接收到的所述待融合子图像进行包括图像变换、系数融合的图像融合处理。作为本发明的进一步改进:所述步骤s23中图像变换、系数融合时,具体将指定计算过程通过并行执行。作为本发明的进一步改进:所述步骤s23中图像变换、系数融合时,具体将二维卷积的计算过程、图像区域能量计算过程、矩阵分解计算过程中一种或多种计算过程通过并行执行。作为本发明的进一步改进:所述图像变换具体采用非下采样轮廓波变换算法;所述系数融合具体采用非负矩阵分解算法。作为本发明的进一步改进:所述待融合的源图像分别通过不同类型的传感器采集获得。与现有技术相比,本发明的优点在于:1)本发明基于cuda图像融合并行计算的方法,利用图像融合中原始数据相关性小、计算密集度高等特性,充分发挥cuda的并行计算优势,通过首先对输入源图像进行分割,可有效的降低融合过程中的计算复杂度,再结合cuda的并行能力来并行执行分割后各子图像的图像融合,将各组融合后子图像进行拼接即得到最终的融合后图像,实现方法简单,能够实现图像融合计算的加速,有效提高融合性能;2)本发明基于cuda图像融合并行计算的方法,通过首先对源图像进行分割,能够大大减少后续融合计算的计算复杂度,同时分割过程与具体的融合算法无关,能够降低对使用融合算法的要求,使得融合过程中不需要局限于特定的单一融合框架,能够适用于各种图像变换算法以及融合规则,通用性强;3)本发明基于cuda图像融合并行计算的方法,基于gpu的硬件特点,将cuda并行计算在gpu中完成,每一组待融合子图像的融合过程为一个并行函数,在不同的线程块中进行处理,不同线程块之间是并行执行,从而实现子图像之间的并行处理,提高图像融合效率;进一步利用多个线程来实现融合算法的并行,通过算法本身的并行性进一步提高融合性能。附图说明图1是传统的图像融合方法的实现流程示意图。图2是传统的基于nsct算法的图像融合方法实现原理示意图。图3是本实施例基于cuda图像融合并行计算的方法的实现流程示意图。图4是本实施例执行图像分割的实现原理示意图。图5是本发明具体实施例中对一副输入源图像进行分割的过程示意图。图6是本实施例基于cuda执行图像融合的实现原理示意图。图7是本实施例基于cuda并行计算的具体实现原理示意图。图8是本发明具体实施例中采用nsct变换算法的实现原理示意图。图9是本发明具体实施例中对红外图像与可见光图像融合得到的处理结果示意图。具体实施方式以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。以下对两幅图像进行融合为例对本发明基于cuda图像融合并行计算的方法进行具体说明,两幅以上图像融合处理时具有与本实施例相同的原理。如图3所示,本实施例基于cuda图像融合并行计算的方法,步骤包括:s1.图像分割:获取待融合的源图像并分别进行分割,得到分割后的多个子图像;s2.并行融合:将各源图像的子图像分别一一对应构成多组待融合子图像,各组待融合子图像分别通过不同cuda核心并行进行图像融合处理,得到多组融合后子图像;s3.图像拼接:将所述步骤s2得到的各组融合后子图像进行拼接,得到最终的融合后图像。本实施例利用图像融合中原始数据相关性小、计算密集度高等特性,充分发挥cuda的并行计算优势,通过首先对输入源图像进行分割,可有效的降低融合过程中的计算复杂度,再结合cuda的并行能力来并行执行分割后各子图像的图像融合,将各组融合后子图像进行拼接即得到最终的融合后图像,实现方法简单,能够实现图像融合计算的加速,有效提高融合性能;另外基于cuda并行技术实现并行图像融合,无需额外的硬件设备,支持c/c++等高级语言,图像融合框架易于实现,且相比于用如matlab语言等语言的融合算法,本实施例基于cuda的图像融合性能更高。由于原始数据相关性较小,如图4所示,本实施例在对源图像进行具体的图像变换之前,首先对源图像进行分割,即将输入的高维图像数据分割成若干个低维的子图像(g1,g2,……,gi,……,gn),其中gi为分割得到的第i个子图像,图像分割完成后再执行后续的并行计算。传统的图像融合框架都包含大量的二维卷积计算及迭代计算,且传统的基于cuda加速的图像融合中是直接对源图像进行图像变换相比,本实施例通过对源图像进行图像分割,能够大大减少后续融合计算的计算复杂度,且分割过程与具体的融合算法无关,因而相比于传统的基于cuda的加速方法,还能够降低对使用融合算法的要求,使得融合过程中不需要局限于单一的特定融合框架,能够适用于现有的各种图像变换算法以及融合规则,通用性强。本实施例中,步骤s1中进行分割时,进一步使得相邻子图像之间具有指定大小的数据重叠。如图4所示,相邻子图像数据gi之间有部分数据重叠,即每一组数据gi的开始处都包含其前一组数据gi-1的若干个值(图中阴影部分),在末尾处包含后一组数据gi+1的若干个值。通过在分割过程中保证相邻子图像的边缘处有足够的数据重叠,能够消除图像尺寸分割可能引起的对融合效果的影响。子图像尺寸中的+1即表示分割边缘的数据重叠(此处以二维卷积计算模板的尺寸为3*3为例)。本实施例中,步骤s1中进行分割时,具体将m*n大小的源图像等分分割为多个(m/a+1)*(n/a+1)大小的子图像,其中a为等分的数量。以对m*n大小的源图像进行分割为例,假设融合过程中用到的模板大小为3*3,对于m*n大小的源图像的行、列分别进行a等分得到共a2个尺寸相同的子图像,引入分割边缘重叠后,得到每个子图像为(m/a+1)*(n/a+1)大小的矩阵。二维卷积的计算复杂度可以表示为o(m*n*size),其中,m、n分别为待处理的图像的像素,size为计算二维卷积用到的计算模板的大小,size的典型值为3*3,以二维卷积计算模板的尺寸为3*3为例,本实施例通过将源图像分割成a2个大小为(m/a+1)*(n/a+1)的子图像进行计算,将分割后子图像的像素带入二维卷积的复杂度计算公式并与未分割时比较,可以获得o(a2)的速度提升,子图像尺寸中的+1即表示分割边缘的数据重叠。如图5为本发明具体实施例中对一副输入源图像进行分割的过程,其中图(a)为输入源图像,具体像素为512*512,采用上述分割方法对原始图像行、列分别进行二等分,可以获得4个相同大小的子图像,引入边缘重叠机理后,每个子图像的尺寸为257*257,后续将该4个子图像传入到gpu的不同线程块中进行并行计算。本实施例中,待融合的源图像具体分别通过不同传感器采集得到,步骤s1进行分割前还包括对源图像进行包括配准的预处理步骤,再对各配准后的源图像执行上述空间尺寸的分割,可以实现多类传感器图像的融合处理。本实施例通过步骤s1将各源图像分割为多个子图像后,再通过步骤s2将步骤s1得到的各子图像在gpu的并行运算单元进行处理,以执行图像融合并行计算。基于cuda的流计算模型可以分为三个层次,即线程格、线程块以及线程,顶层为线程格(grid),每个线程格是由若干个线程块组成,每个线程块又由若干个线程构成,线程作为最小的计算单元,线程块中的所有线程可以同时执行,且每个线程都有属于自己的私有寄存器,同时线程块内提供共享寄存器供该线程块内的所有线程使用,同一线程格内部的线程块之间可以实现并行计算。本实施例中,步骤s2中进行图像融合处理的具体步骤为:s21.将各组待融合子图像的数据存储在cuda的全局存储器中;s22.将全局存储器中各组待融合子图像的数据分别传输至cuda的不同线程块中;s23.各个线程块并行对接收到的所述待融合子图像进行包括图像变换、系数融合的图像融合处理。本实施例将步骤s1分割得到的所有的子图像数据都存储在gpu的全局存储器(globalmemory)中,全局存储器中的图像数据再以多个kernal函数的形式在不同的cuda计算核心进行计算,在每个并行运算单元内具体执行包括图像变换算法以及对图像变换系数的处理(融合规则的实现),实现不同子图像之间的并行计算。本实施例中,图像变换具体采用nsct非下采样轮廓波变换算法,系数融合具体采用nmf基于非负矩阵分解。采用上述图像变换算法以及融合规则,实现简单且所得到的融合效果好,当然还可以根据实际需求选择其他图像变换算法以及融合规则。如图6、7所示,本实施例以融合两幅图像image1、image2为例,通过主机(host)设备以及计算设备(gpu)实现图像融合并行计算,其中cuda并行计算在gpu中完成,且运行的cuda并行计算函数称为kernal函数;将步骤1)中得到的各源图像的子图像分别一一对应构成多组待融合子图像,如image1、image2的子图像g1构成第一组待融合子图像,image1、image2的子图像g2构成第二组待融合子图像,依此类推,image1、image2的子图像gn构成第n组待融合子图像,各组待融合子图像分别发送给gup中不同线程块,每组待融合子图像作为一个kernal函数在gpu的并行运算单元进行处理,将各组待融合子图像数据以多个kernal函数的形式在不同的cuda计算核心进行计算,即各组待融合子图像对应的kernal函数分别在不同的线程块中进行处理,不同线程块之间并行执行,实现了子图像之间的并行融合处理。本实施例充分考虑所采用的图像融合数据自身特性以及cuda硬件结构的特点,结合图像分割,基于cuda并行计算的方式来实现融合过程的加速,可以大大减少计算复杂度,同时提高融合效率。本实施例中,步骤s23中图像变换、系数融合时,进一步将图像变换算法、融合规则中指定计算过程通过并行执行,即在对单个子图像进行处理时引入算法的并行。在各线程块内部,由于各线程之间存在私有寄存器以及共享寄存器,本实施例进一步利用多个线程来实现融合算法的并行;步骤s1中对图像的分割处理同时还能够支持其它可行的并行执行,通过在gup各个并行计算单元内部将具体算法并行实现,可以进一步提高图像融合的整体并行性能,从而进一步提高融合速度。本实施例中,步骤s23中图像变换、系数融合时,具体将nsct图像变换算法中二维卷积的计算过程、图像re区域能量计算过程、基于非负矩阵分解nmf的系数融合算法中矩阵nmf分解过程中一种或多种过程通过并行执行,当然还可以将图像变换算法、融合规则中其他可行的计算过程并行执行。本实施例将所有源图像的第i个子图像在经过上述并行融合后,通过步骤s3将得到的所有子图像进行拼接,最终得到完整的融合图像。本实施例在拼接过程中,对分割边缘进行一定的处理,包括去除s1步骤中引入的重叠数据。具体的以矩阵形式表现为,经s2步骤处理得到的融合后子图像的像素为(m/a+1)*(n/a+1),去除重叠数据后,融合子图像像素为(m/a)*(n/a),再进行子图像的拼接,最终得到并行融合后的完整融合图像。如图8所示为本发明具体实施例中采用nsct变换算法的实现过程,其中图(a)为nsct变换算法的实现原理,图(b)为nsct中方向分解算法(nsdfb)的原理。分析方向分解算法可知,其计算过程中包含大量的二维卷积计算,同时对于变换系数的处理过程中包含大量的迭代计算,两种计算过程的共同特点都是数据相关性较小,但对数据量的大小十分敏感。nsct对图像变换的过程可以分为图像的多尺度分解以及方向分解两步完成,多尺度分解利用非下采样拉普拉斯滤波器(nlp)实现,方向分解利用非下采样方向滤波器组实现。如图(b)所示,对于方向分解算法(nsdfb),计算过程中包含大量的二维卷积操作,需要大量的矩阵卷积运算;在构造二维nsdfb时,一种高效的途径是对一维滤波器以mapping的方式进行提升,具体的表现为如下的lifting结构:其中p、q分别为一维低通滤波器和一维高通滤波器。在通过mapping方式构造二维nsdfb后,对图像数据进行方向分解的过程以如下二维卷积的形式实现:其中mr,mc,nr,nc分别为矩阵a、b的行数和列数。从上述二维卷积的计算公式可以看出,计算量与矩阵的行数与列数的乘积成正比,采用本实施例上述图像融合并行计算方法,通过对源图像进行分割后,当图像等分成a份后,通过并行计算的方式至少可以获得o(a2)的性能提升,即可以有效的降低计算量,进一步验证了本实施例上述基于cuda图像融合并行计算的方法的可行性及性能。对于系数融合的系数处理规则,如pcnn、nmf等,具有如上所述相同的加速机理。如图9所示为本发明具体实施例中采用上述方法对红外图像与可见光图像融合得到的处理结果,其中(a)图为红外传感器采集到的图像,(b)图为可见光传感器采集到的图像,(c)图为未对源图像分割时获得的图像融合效果图,(d)图为对源图像进行四等分后最终获得的融合图像,(e)图为(c)图与(d)的差图,从(e)图可以看出源图像分割对融合效果影响极小,即本实施例上述方法能够基于cuda实现有效融合加速,同时能够保证融合效果。为进一步验证本实施例上述方法的有效性,在基于matlab平台上分别进行了未对源图像做分割处理的融合、对源图像进行四等分时的融合以及对源图像进行四等分时的融合试验,输入源图像为经配准后的可见光图像和红外图像,像素为512*128。如下表1示出了对于同一融合算法采取不同分割方式时耗时、熵的对比试验结果,包括未对源图像做分割处理的融合用时、对源图像进行四等分时的融合用时以及对源图像进行十六等分时的融合用时,以及不同处理方式得到的融合图像的图像熵,由试验结果可知,在不降低融合效果的同时,本实施例上述方法还可以明显提高图像融合的速度。表1:同一融合算法不同分割方式的对比表。处理方式未分割四等分十六等分耗时(s)14.0615.12熵6.53766.53736.5373上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。当前第1页12