吳粉俠,李 紅
(咸陽師范學院 信息工程學院,陜西 咸陽 712000)
圖像融合是一門綜合了傳感器、圖像處理、信號處理、人工智能等的技術,它是將不同傳感器或相同傳感器得到的多幅圖像經過一定的融合算法進行處理,最終得到一幅包含多幅圖像的特征和信息的高質量圖像。圖像融合充分利用了多個待融合圖像中冗余信息和互補信息,是信息融合的一個有力工具,廣泛應用于軍事、遙感、醫(yī)學圖像處理、制造業(yè)等領域。
目前圖像融合的算法主要分為3個層次,像素級圖像融合,特征級圖像融合,決策級圖像融合。像素級圖像融合是在基礎數據層面上進行的信息融合,準確性高,細節(jié)信息多,但處理的信息量最大。特征級圖像融合是對預處理和特征提取后獲取的圖像信息如邊緣,形狀和區(qū)域等信息進行綜合與處理,它既保留了足夠的重要信息,又可對信息進行壓縮,利于實時處理。決策級融合是根據一定的準則以及每個決策的可信度做出最優(yōu)決策,此種融合實時性好,并且具有一定的容錯能力。像素級圖像融合的算法有最大值最小值融合法,均值融合法,區(qū)域能量最大值融合算法,邊緣強度最大融合算法等[1]。
隨著圖像的規(guī)模的增大及圖像融合算法復雜度和提高,圖像融合面臨著新的處理速度的挑戰(zhàn)。傳統(tǒng)的圖像融合加速算法多用CPU并行處理模式,如ChaverD等基于通用多處理機系統(tǒng)研究圖像融合過程中大規(guī)模圖像的并行分解算法[2];其處理速度也僅是常數倍的提高。GPU(Grahic Process Unit)從其誕生之日起,處理能力就以超越摩爾定律[3]的速度增長,使用GPU進行加速,其處理速度是以數量級增長的。
本文分析了邊緣強度最大融合算法的并行特性,提出了一種改進的邊緣強度最大的圖像融合策略,并在GPU上實現了該算法。首先分別計算兩幅圖像對應像素的邊緣強度并以邊緣強度作為圖像融合規(guī)則對圖像進行融合,需要處理的數據量大,而對這些數據處理操作基本相同,本質上是一種局部的鄰域算法,易于并行化,因此利用GPU對其進行了并行加速。實驗結果表明本文算法得到的融合圖像包含了源圖像中較多信息,邊緣保持度好,從客觀評價指標上總體較好,并且與在CPU上處理速度相比最大加速比達到近6 000倍。
圖像的邊緣包含了圖像的重要紋理信息,邊緣強度是圖像邊緣的客觀描述。邊緣強度的計算公式如式1[4]所示。
其中 Edge(x,y)表示像素的邊緣強度,f(x+m,y+n)為鄰域像素的灰度,窗口大小為M×N,一般取3×3或5×5,mean(x-m:x+m,y-n:y+n)為區(qū)域均值。
邊緣強度最大的融合規(guī)則指的是,對應像素的邊緣強度計算以后,選擇邊緣強度絕對值最大的圖像的當前像素的灰度作為融合后的圖像的灰度[4]。由于邊緣強度值較大的像素的灰度對應圖像中對比度變化較大的邊緣特征,所以,邊緣強度最大法能夠較好地融合源圖像的高頻信息。
本文對邊緣強度最大的融合規(guī)則進行了改進,對應像素的邊緣強度計算以后,計算兩幅圖像的邊緣強度差,依據其差值確定融合結果,融合規(guī)則如式2所示。
本文所提出的圖像的融合算法首先分別計算圖像1和圖像2對應像素M×N為鄰域的均值,再依據式(1)計算對應位置的邊緣強度,最后再依據式(2)圖像邊緣強度最大的融合策略對圖像進行融合,獲得融合結果圖像對應像素的灰度。
圖1 GPU硬件模型Fig.1 GPU hardware model
圖2 CUDA編程模型Fig.2 CUDA Programming model
GPU(Graphics Processing Unit)即圖形處理器,是一種專用的圖形渲染設備,是顯卡的計算核心,它分擔了中央處理器(CPU)的圖形處理任務。GPU的高度并行化的架構和可編程的著色器使人們將它用于計算通用任務,隨之產生了GPGPU(General Purpoise Computing on Graphics Processing Unit) 圖形處理器通用計算技術,該技術使顯卡可以進行通用計算任務,從2009年開始,利用顯卡計算已漸成主流,GPGPU也漸被GPU計算代替[5]。GPU通過單指令多數據(SIMD)指令類型來支持數據并行計算。如圖2所示,在SIMD結構中,單一控制部件向每條流水線分派指令,同樣的指令處理部件同時執(zhí)行。例如NVDIA8800GT中包含有14組多處理器(Multiprocessor),每組多處理器有8個處理器(Processor),但每組多處理器只包含一個指令單元 (Instruction Unit)。從線程角度講,每個多處理器可并行運行768個活動線程,即包含14組多處理器的GPU可并行運行10 752個活動線程。從存儲器角度講,每個多處理器有16 kB可讀寫共享內存、8 kB只讀常量內存Cache、8 kB只讀紋理內存Cache和8 192個 322 bit寄存器[6]。
CUDA是NVIDIA公司于2007年正式發(fā)布的一種不需借助圖形學API就可以使用類C語言進行通用計算的開發(fā)環(huán)境和軟件體系。它包括一個硬件驅動程序和一個應用程序接口,直接將GPU作為數據并行計算設備。它能夠利用NVIDIA GPU的并行計算引擎比CPU更高效的解決許多復雜計算任務[7]。
CUDA編程模型將CPU作為主機(Host),GPU作為協處理器(co-processor)或者設備(Device)。在一個系統(tǒng)中,可以存在一個主機和若干個設備。CPU和GPU協同工作,CPU負責進行邏輯性強的事務處理和串行計算,GPU則專注于執(zhí)行高度線程化的并行處理任務。CPU和GPU各自擁有相互獨立的存儲器地址空間:主機端的內存和設備端的顯存。運行在GPU上的CUDA并行計算函數稱為kernel(內核函數),它是整個CUDA程序中的一個可以被并行執(zhí)行的步驟,以網格(Grid)的形式執(zhí)行,不同的網格則可以執(zhí)行不同的核函數;每個網格由若干個線程塊(Block)組成,每一個線程塊又由多個線程(thread)組成[7]。屬于同一線程塊的線程擁有相同的指令地址,能夠并行執(zhí)行,并且能夠通過共享存儲器(Shared memory)進行線程塊內通信。如圖2所示,一個完整的CUDA程序是由一系列的設備端kernel函數并行步驟和主機端的串行處理步驟共同組成的,主機端調用標準C編譯器生成目標代碼,設備端則由NVIDIA的C編譯器生成相應的含有PTX(Parallel Thread Execution)的目標代碼,之后兩者鏈接生成完整的可執(zhí)行程序[7]。
算法中每一個像素點的融合都是點處理,邊緣強度的計算是以像素點為中心的鄰域處理,均可以對其進行并行加速處理。本算法的GPU實現由主機端程序和設備端程序協同工作完成。主機端程序負責I/O數據的傳輸和程序流控制,設備端內存的分配與釋放及內核函數的啟動[7]。本文中,主機端程序實現圖像數據的讀寫、主機端和設備端存儲空間的分配、主機端和設備端數據的傳輸、紋理內存的綁定與釋放、內核函數的啟動及主機端和設備端內存空間的釋放等功能。在設備端,按本文算法進行邊緣強度的計算及融合。本文算法中使用一個核函數來完成圖像融合的并行處理,使用一個線程格Grid,Grid中含有和圖像高度一致的線程塊數,每個線程塊含有的512個線程。本文算法將兩幅源圖像數據均與紋理存儲器綁定,通過讀取紋理存儲器中的數據進行快速并行訪問。
本文算法處理流如圖3所示,具體算法步驟如下:
1)通過CPU分別將將兩幅圖像數據讀取到主機端內存h_Src1,h_Src2中,并分配主機端內存h_Des以存放融合結果圖像,根據讀取的圖像的大小在GPU上分配設備空間cuArray1、cuArray2、d_Des,拷貝 h_Src1 中的數據到設備內存cuArray1中,拷貝h_Src2中的數據到設備內存cuArray2中;
2)聲明紋理引用tex1并與cuArray1綁定,聲明紋理引用tex2并與cuArray2綁定;
3)設定GPU的線程組織;
4)運行自定義的kernel函數對圖像進行融合,處理結果存放到設備端內存變量d_Des;
5)解除tex1與cuArray1紋理綁定,解除tex2與cuArray2紋理綁定;
6)從設備端向主機端拷貝結果數據d_Des到主機端h_Des中,并將h_Des保存到磁盤上;
7) 釋 放 設 備 端 cuArray1、cuArray2、d_Des 及 主 機 端h_Src1、h_Src2,h_Des的內存空間。
圖3 本文算法流程Fig.3 The process of this algorithm
實驗編程環(huán)境采用Visual Studio 2010,GPU編程語言CUDA 4.2。實驗的硬件平臺為PC機,CPU是Intel(R) Core(TM) i5-2380P,顯卡為Novidia GTX 560 SE,含有288個CUDA核心。實驗中用到了兩組不同的多聚焦圖像 (如圖4所示)。本文采用的融合算法有3種,方法一為利用像素取最大值的方法,方法二為邊緣強度取最大法,方法三為本文所用融合算法,文中選用的窗口大小為3*3計算像素點的邊緣強度。
對于融合算法的性能評價采用了熵、互信息和QAB/F,SF 4個準則[8],熵是衡量信息量豐富程度的一個重要指標,通過圖像信息熵的比較可以對比出圖像的細節(jié)表現能力,熵越大則表示融合圖像所包含的信息量越豐富,融合質量越好?;バ畔⒆鳛閮蓚€變量間的相關性的度量,用來衡量融合圖像包含源圖像中信息的多少,其值越大表明從源圖像中繼承的信息越多,融合結果越好。QAB/F利用Sobel邊緣檢測來衡量圖像邊緣信息保持度,其值越大說明邊緣保持越好。SF反映一幅圖像空間域的總體活躍程序,其值越大,圖像越清晰,即融合效果越好。
表1 不同算法圖像處理效果比較Tab.1 Comparison of different algorithms of image processing effect
從實驗結果看,與方法一相比,本文方法得到的結果從視覺效果上看圖像對比度清晰,從評價指標來看,熵的指標差不多,MI指標本文算法偏低,而后面二個指標的值本文算法明顯偏高,表明在對比度,紋理清晰度方面本文算法優(yōu)于絕對值取大融合算法,紋理清晰,邊界保持較好說明本文采用的方法對多聚焦圖像融合時效果較好;與方法二相比,熵的指標差不多,MI指標略低,第三個指標相差不多,SF指標對clock來說低了許多,對Pepsi圖像來說,相差不大。從視覺效果上看,本文算法所獲取的圖像邊緣清晰,對比度明顯,圖像自然,沒有出現法二所示的偽輪廓和邊緣??傮w上說,本文算法對多聚焦圖像融合的效果較好。
通過對圖像進行20次測試取平均值的方法對CPU上實現的算法與GPU上實現的算法的處理速度做了比較。從表2中可以看出GPU上的加速效果非常明顯,隨著圖像尺寸的增大,采用CUDA進行大規(guī)模并行計算的加速比增大,實驗中的最大加速比達到近6 000倍。
圖4 待融合圖像Fig.4 The images for fusion
圖5 像素取最大值的方法Fig.5 Method of pixel maximum value
圖6 邊緣強度最大法Fig.6 method of maximal edge strength
圖7 本文方法Fig.7 Proposed method
本文提出的基于邊緣強度匹配的圖像融合并行算法,依據圖像的邊緣強度決定采用何種融合策略,并在GPU上對其進行了實現。實驗結果表明采用本文所用算法得到的融合圖像在保持視覺效果良好及客觀評價參數較高的情況下,具有非常高效的處理速度。
表2 不同尺寸圖像處理速度比較Tab.2 Comparison of different size of the image processing speed
[1]趙娟,孫澎濤.基于像素級的圖像融合[J].長春工程學院學報,2011,12(2):106-108 ZHAO Juan,SUN Peng-tao.The image fusioin based on pixel-level[J].J.C h angchun Ins t.T ech ,2011,12(2):106-108
[2]Chaver D,Prieto M,Pinuel L,et al.Parallel Wavelet Transform for Large ScaleimageProcessing [C]//Proc of Parallel and Distributed Processing Symposium.2002:4-9.
[3]Owens J,LuebkeD,Govindaraju N.A Survey of General Purpose Computation on Graphics Hardware[J].Computer Graphics Forum,2007,26(1):80-113.
[4]李紅,吳粉俠,趙蓓娟.基于結構相似性的多源圖像融合[J].咸陽師范學院學報,2012,27(6):45-48.LI Hong,WU Fen-xia,ZHAO Pei-juan.Multi-source image fusion based on structural similarity[J].Journal of Xianyang Normal University,2012,27(6):45-48.
[5]仇德元.GPUGPU編程技術[M].北京:機械工業(yè)出版社,2012.
[6]吳粉俠,李紅.GPU實現的椒鹽噪聲自適應中值濾波算法[J].咸陽師范學院學報,2013,28(4):47-51.WU Fen-xia,LI Hong.Improved adaptive filtering algorithm based on programmable GPU[J].Journal of Xianyang Normal University,2013,28(4):47-51.
[7]CUDA programming guide Ver2.0{EB/OL}.[2009-12-29].http://developer.nvidia.com/object/cuda_2_0downloads.html.
[8]敬忠良,肖剛,李振華.圖像融合理論與應用[M].北京:高等教育出版社,2007.