《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于GPU的數(shù)字圖像并行處理研究
基于GPU的數(shù)字圖像并行處理研究
摘要: 針對(duì)像素級(jí)圖像處理算法并行化程度高的特點(diǎn),,利用GPU的并行流處理特性和可編程性,提出了基于GPU的數(shù)字圖像并行化處理方法,,并對(duì)其基本執(zhí)行流程和其中的關(guān)鍵技術(shù)問題:數(shù)據(jù)加載,,結(jié)果反饋、保存等進(jìn)行了詳細(xì)論述,。最后通過圖像的卷積運(yùn)算驗(yàn)證了GPU的并行處理能力,。
關(guān)鍵詞: 圖像處理算法 GPU 并行流處理
Abstract:
Key words :

GPU并行化處理

  可編程圖形處理器(Programmable Graphic Process Unit, PGPU)是目前計(jì)算機(jī)上普遍采用的圖形圖像處理專用器件,具有單指令流多數(shù)據(jù)流(SIMD)的并行處理特性,,而且提供了完全支持向量操作指令和符合IEEE32位浮點(diǎn)格式的頂點(diǎn)處理能力和像素處理能力,,已經(jīng)成為了一個(gè)強(qiáng)大的并行計(jì)算單元。研究人員將其應(yīng)用于加速科學(xué)計(jì)算和可視化應(yīng)用程序,,取得了令人鼓舞的研究成果,。

  與CPU相比,GPU具有以下優(yōu)勢(shì):強(qiáng)大的并行處理能力和高效率的數(shù)據(jù)傳輸能力[1] [2] [7],。其中,,并行性主要體現(xiàn)了指令級(jí)、數(shù)據(jù)級(jí)和任務(wù)級(jí)三個(gè)層次,。高效率的數(shù)據(jù)傳輸主要體現(xiàn)在兩個(gè)方面: GPU與顯存之間的帶寬為:16GB/s,;系統(tǒng)內(nèi)存到顯存的帶寬為:4GB/s。

  總上所述,,GPU比較適合處理具有下面特性的應(yīng)用程序:1、大數(shù)據(jù)量,;2,、高并行性;3,、低數(shù)據(jù)耦合,;4、高計(jì)算密度,;5,、與CPU交互比較少。

數(shù)字圖像處理的并行化分析

  數(shù)字圖像處理算法多種多樣,,但從數(shù)據(jù)處理的層面來考慮,,可以分為:像素級(jí)處理、特征級(jí)處理和目標(biāo)級(jí)處理三個(gè)層次[3][4],。

(1)像素級(jí)圖像處理

  像素級(jí)處理,,即由一幅像素圖像產(chǎn)生另一幅像素圖像,處理數(shù)據(jù)大部分是幾何的,、規(guī)則的和局部的,。根據(jù)處理過程中的數(shù)據(jù)相關(guān)性,,像素級(jí)處理又可進(jìn)一步分為點(diǎn)運(yùn)算、局部運(yùn)算和全局運(yùn)算,。

(2)特征級(jí)圖像處理

  特征級(jí)處理是在像素圖像產(chǎn)生的一系列特征上進(jìn)行的操作,。常用的特征包括:形狀特征、紋理特征,、梯度特征和三維特征等,,一般采用統(tǒng)一的測(cè)度,如:均值,、方差等,,來進(jìn)行描述和處理,具有在特征域內(nèi)進(jìn)行并行處理的可能性,。但是,,由于其特征具有象征意義和非局部特性,在局部區(qū)域并行的基礎(chǔ)上,,需要對(duì)總體進(jìn)行處理,。利用GPU實(shí)現(xiàn)并行化處理的難度比較大。

(3)目標(biāo)級(jí)圖像處理

  目標(biāo)級(jí)處理是對(duì)由一系列特征產(chǎn)生的目標(biāo)進(jìn)行操作,。由于目標(biāo)信息具有象征意義和復(fù)雜性,,通常是利用相關(guān)知識(shí)進(jìn)行推理,得到對(duì)圖像的描述,、理解,、解釋以及識(shí)別。由于其數(shù)據(jù)之間相關(guān)性強(qiáng),,且算法涉及到較多的知識(shí)和人工干預(yù),,并行處理的難度也比較大。

  由此可見,,整個(gè)圖像處理的結(jié)構(gòu)可以利用一個(gè)金字塔模型來表示,。在底層,雖然處理的數(shù)據(jù)量巨大,,但由于局部數(shù)據(jù)之間的相關(guān)性小,,且較少的涉及知識(shí)推理和人工干預(yù),因此大多數(shù)算法的并行化程度比較高,。當(dāng)沿著這個(gè)金字塔結(jié)構(gòu)向高層移動(dòng)時(shí),,隨著抽象程度的提高,大量原始數(shù)據(jù)減少,,所需的知識(shí)和算法的復(fù)雜性逐層提高,,并行化處理的難度也逐漸加大。

  由于絕大部分的圖像處理算法是在像素級(jí)進(jìn)行的,,且GPU的SIMD并行流式處理在進(jìn)行像素級(jí)的圖像處理時(shí)具有明顯的優(yōu)勢(shì),,而特征級(jí)和目標(biāo)級(jí)處理無論是從數(shù)據(jù)的表達(dá)還是從算法自身的實(shí)現(xiàn)來說,,都很難實(shí)現(xiàn)GPU并行化。因此,,本文重點(diǎn)研究各種像素級(jí)圖像處理操作的GPU并行化實(shí)現(xiàn)方法,。

數(shù)字圖像GPU并行化處理的基本流程與關(guān)鍵技術(shù)

  現(xiàn)代GPU提供了頂點(diǎn)處理器和片段處理器兩個(gè)可編程并行處理部件。在利用GPU執(zhí)行圖像處理等通用計(jì)算任務(wù)時(shí),,要做的主要工作是把待求解的任務(wù)映射到GPU支持的圖形繪制流水線上,。通常的方法是把計(jì)算任務(wù)的輸入數(shù)據(jù)用頂點(diǎn)的位置、顏色,、法向量等屬性或者紋理等圖形繪制要素來表達(dá),,而相應(yīng)的處理算法則被分解為一系列的執(zhí)行步驟,并改寫為GPU的頂點(diǎn)處理程序或片段處理程序,,然后,,調(diào)用3D API執(zhí)行圖形繪制操作,調(diào)用片段程序進(jìn)行處理,;最后,,保存在幀緩存中的繪制結(jié)果就是算法的輸出數(shù)據(jù),如圖1所示[5][6],。

圖1 遙感影像GPU并行化處理基本流程

  雖然數(shù)字圖像處理算法多種多樣,,具體實(shí)現(xiàn)過程也很不相同,但是在利用GPU進(jìn)行并行化處理時(shí),,有一些共性的關(guān)鍵技術(shù)問題需要解決,,如:數(shù)據(jù)的加載,計(jì)算結(jié)果的反饋,、保存等,。下面對(duì)這些共性的問題進(jìn)行分析,并提出相應(yīng)的解決思路,。

數(shù)據(jù)加載

  在GPU的流式編程模型中,,所有的數(shù)據(jù)都必須以“流”的形式進(jìn)行加載處理,,并通過抽象的3D API進(jìn)行訪問,。在利用GPU進(jìn)行圖像處理時(shí),最直接有效的數(shù)據(jù)加載方法是把待處理的圖像打包為紋理,,在繪制四邊形時(shí)進(jìn)行加載,、處理。同時(shí)為了保證GPU上片段程序能夠逐像素的對(duì)紋理圖像進(jìn)行處理,,必須將投影變換設(shè)置為正交投影,,視點(diǎn)變換的視區(qū)與紋理大小相同,使得光柵化后的每個(gè)片段(fragment)和每個(gè)紋理單元(texel)一一對(duì)應(yīng),。

  對(duì)于圖像處理算法中的其他參數(shù),,如果數(shù)據(jù)量很小,,則可以直接通過接口函數(shù)進(jìn)行設(shè)置;如果參數(shù)比較多,,也應(yīng)該將其打包為紋理的形式傳輸給GPU,。在打包的過程中應(yīng)充分利用紋理圖像所具有的R、G,、B,、A四個(gè)通道。

計(jì)算結(jié)果的反饋,、保存

  應(yīng)用程序是通過調(diào)用3D API繪制帶紋理的四邊形,,激活GPU上的片段程序進(jìn)行圖像處理的,而GPU片段著色器的直接渲染輸出是一個(gè)幀緩沖區(qū),,它對(duì)應(yīng)著計(jì)算機(jī)屏幕上的一個(gè)窗口,,傳統(tǒng)上用來容納要顯示到屏幕的像素,但是在GPU流式計(jì)算中可以用來保存計(jì)算結(jié)果,。雖然CPU可以通過3D API直接讀寫這個(gè)幀緩沖區(qū),,將渲染處理的結(jié)果從幀緩存中復(fù)制到系統(tǒng)內(nèi)存進(jìn)行保存,但是幀緩存的大小受窗口大小限制,,而且由于AGP總線的帶寬限制(2.1GB/s),,從顯存到系統(tǒng)內(nèi)存的數(shù)據(jù)回讀操作效率低下。對(duì)于大幅影像的處理應(yīng)用是顯然不適合的,,特別是在中間計(jì)算結(jié)果的保存反饋時(shí),,采用幀緩存方式將成為制約GPU性能發(fā)揮的最主要瓶頸。

  針對(duì)以上問題,,筆者利用離線渲染緩存Pbuffer作為輸出緩存,。Pbuffer是OpenGL1.3版本的WGL_ARB_pbuffer擴(kuò)展提供的輸出緩存,它通過在顯存中開辟一個(gè)不可見的數(shù)據(jù)緩沖區(qū),,取代幀緩存來保存片段處理器的輸出結(jié)果,。如果這個(gè)結(jié)果只是中間計(jì)算數(shù)據(jù),還可以采用渲染到紋理的技術(shù),,把Pbuffer中的數(shù)據(jù)綁定到一個(gè)紋理,,供下一遍繪制的片段程序取用,減少數(shù)據(jù)在顯存和系統(tǒng)內(nèi)存之間的傳輸,,實(shí)現(xiàn)整個(gè)數(shù)據(jù)流在GPU芯片內(nèi)部的流轉(zhuǎn),,顯著提高數(shù)據(jù)的反饋速度。特別是在需要GPU反復(fù)執(zhí)行的情況下,,可以構(gòu)造兩個(gè)Pbuffer,,交替的作為輸入或輸出紋理使用,產(chǎn)生所謂的“Ping-Pong”方法,有效避免中間計(jì)算結(jié)果的回讀操作,。

圖像卷積運(yùn)算的GPU并行化試驗(yàn)

  卷積運(yùn)算是一種常見的數(shù)字圖像處理局部運(yùn)算,,通過選擇不同的卷積核,可以實(shí)現(xiàn)不同的圖像處理效果,。圖像卷積運(yùn)算定義為:

式中,,為卷積運(yùn)算以后的圖像;為待處理的圖像,;為卷積核,;T為常數(shù),當(dāng)卷積核中所有系數(shù)之和不為零時(shí),,T等于所有系數(shù)之和,,否則等于1。

試驗(yàn)平臺(tái)與數(shù)據(jù)

  硬件平臺(tái)為: Intel Core 2 2.0GHz CPU,,1GB系統(tǒng)內(nèi)存,,NVIDIA公司的GeForce G0 7400 GPU, 512MB顯存,。

  軟件平臺(tái):Windows XP操作系統(tǒng),,CPU程序開發(fā)環(huán)境為Microsoft Visual C++2005,三維繪制接口為OpenGL及其擴(kuò)展庫WGL_ARB_pbuffer,,GPU程序開發(fā)語言為Cg,。

  所采用的試驗(yàn)數(shù)據(jù)有兩組,如圖2所示:

  第一組為:截取的新加坡部分地區(qū)QucikBird衛(wèi)星影像,,大小為(像素),;

  第二組為:截取的黃河小浪底部分地區(qū)Spot4衛(wèi)星影像,大小為(像素),。

(a)試驗(yàn)數(shù)據(jù)一

(b)試驗(yàn)數(shù)據(jù)二
圖2 卷積運(yùn)算試驗(yàn)數(shù)據(jù)

試驗(yàn)步驟與數(shù)據(jù)記錄

  為了進(jìn)行多組數(shù)據(jù)的對(duì)比試驗(yàn),,首先對(duì)原始圖像數(shù)據(jù)進(jìn)行預(yù)處理,通過裁減獲得大小分別為2048×2048,、1024×1024,、521×512、256×256,、128×128的試驗(yàn)數(shù)據(jù),。

  以經(jīng)過預(yù)處理的10幅不同大小的圖像進(jìn)行卷積運(yùn)算對(duì)比試驗(yàn),分別運(yùn)行卷積平滑和卷積銳化的CPU和GPU程序,,并記錄處理時(shí)間,。試驗(yàn)所用的平滑卷積核h1為式(2),,銳化卷積核h2為式(3):


試驗(yàn)結(jié)果與分析

  圖3所示為圖像數(shù)據(jù)二512×512的平滑和銳化試驗(yàn)的處理結(jié)果,,圖4為GPU加速效率對(duì)比圖。

(a)卷積平滑后圖像

(b)卷積銳化后圖像
圖3 數(shù)據(jù)二的圖像平滑,、銳化效果對(duì)比

圖4 卷積運(yùn)算GPU加速效率對(duì)比圖

  從圖4可以看出:隨著圖像的增大,,特別是卷積核的變大,,GPU的加速效果更加明顯,例如:對(duì)2048×2048大小的圖像進(jìn)行5×5的卷積運(yùn)算,,最高加速比達(dá)到了8倍多,。但是,在圖像數(shù)據(jù)較小時(shí),,由于OpenGL的初始化和紋理數(shù)據(jù)的加載耗費(fèi)了大量的時(shí)間,,使得GPU并行處理的優(yōu)勢(shì)消失,甚至還沒有CPU處理的速度快,。

結(jié)語

  本文對(duì)GPU的并行性和數(shù)字圖像處理算法的并行層次進(jìn)行了簡(jiǎn)要的介紹,,提出了像素級(jí)圖像處理的GPU并行化實(shí)現(xiàn)方法,并對(duì)其基本流程和關(guān)鍵技術(shù):數(shù)據(jù)的加載,,計(jì)算結(jié)果的反饋與保存等問題進(jìn)行了詳細(xì)論述,,最后通過圖像的平滑和銳化的卷積運(yùn)算證明了GPU在數(shù)字圖像并行化處理方面的強(qiáng)大優(yōu)勢(shì)。 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。