域的大小可W根據(jù)GPU 中處理器的數(shù)量進(jìn)行調(diào)整,W保證并行效率。各個(gè)線程塊并行執(zhí)行。在上述4個(gè)計(jì)算方向 中,并行處理其中一個(gè)計(jì)算方向上的所有濾波計(jì)算,內(nèi)存讀寫都在共享內(nèi)存中進(jìn)行。每個(gè) 線程計(jì)算圖像中沿該計(jì)算方向的一行,它依次讀取該一行中在鄰域大小范圍內(nèi)的兩個(gè)像素 點(diǎn),按照濾波公式進(jìn)行計(jì)算,并將計(jì)算結(jié)果累加到輸出圖像相應(yīng)的兩個(gè)像素點(diǎn)的結(jié)果中。
[0046] 如圖3A所示,在圖3A所示的方向(即圖2A中的A方向)的計(jì)算中,一個(gè)線程塊中 的每個(gè)線程如箭頭直線所示,并行計(jì)算沿y方向的1列,線程1計(jì)算第1列,線程2計(jì)算第2 列,線程32處理第32列,即完成2維圖像A方向的計(jì)算。其中,每個(gè)線程分別針對(duì)圖像中 的一行像素(在此為y方向的一列),例如從該行的起始像素開始直到該行的最終像素為止 依次作為對(duì)象像素,在對(duì)象像素與該對(duì)象像素在該計(jì)算方向(A方向)上的各鄰域像素之間 進(jìn)行濾波計(jì)算,并將濾波計(jì)算的結(jié)果分別W累加的方式保存為該對(duì)象像素和各鄰域像素的 濾波結(jié)果。例如,可W利用下式計(jì)算濾波后像素灰度值U' :
[0047]
[0048]
[004引如圖3B所示,在圖3B所示的方向(即圖2A中的B方向)的計(jì)算中,每個(gè)線程并行 計(jì)算沿X方向的1行,并行方法類似于A方向。例如,可W利用下式計(jì)算濾波后像素灰度值 U':
[005引如圖3C所示,在圖3C所示的方向(即圖2A中的C方向)的計(jì)算中,每個(gè)線程如箭 頭直線所示,并行計(jì)算沿斜率為45度方向的一條直線上的濾波。線程1計(jì)算點(diǎn)(32, 1)至點(diǎn)
[0050]
[0051] (1,32)連線上的各點(diǎn)。線程2計(jì)算點(diǎn)(32, 2)至點(diǎn)(2, 32)連線上的各點(diǎn),及點(diǎn)(1,2)至點(diǎn) (2, 1)連線上的各點(diǎn)。不同于A方向、B方向的是,由于矩形圖像的原因,線程2處理的兩段 直線不連續(xù),其實(shí)可W將第二段直線看做第一段直線在該矩形范圍內(nèi)的延伸。也就是說, 在計(jì)算方向確定步驟S1中確定了相對(duì)于圖像中的像素排列方向(在此為A方向、B方向)傾 斜的計(jì)算方向的情況下,在各方向?yàn)V波計(jì)算步驟S2中,按該傾斜的計(jì)算方向(例如C方向) 進(jìn)行處理時(shí),使得每個(gè)線程所計(jì)算的各行像素的像素?cái)?shù)量相等。例如,可W利用下式計(jì)算濾 波后像素灰度值y' :
[0053]
[0054]
[005引如圖3D所示,圖3D所示的方向(即圖2A中的D方向)的計(jì)算類似于C方向,每個(gè) 線程并行計(jì)算沿斜率為135度方向的一條直線上的濾波。例如,可W利用下式計(jì)算濾波后 像素灰度值y' :
[0056]
[0057]
[0058] 在上述A方向至D方向的計(jì)算中,線程塊中的每個(gè)線程優(yōu)選相互并行地進(jìn)行濾波 計(jì)算。例如,在多個(gè)線程之間,各線程同時(shí)W各自計(jì)算的各行像素中從起始像素開始次序相 同的像素(例如第n個(gè)像素)作為對(duì)象像素。該樣,在各行像素?cái)?shù)量相同的情況下,能夠?qū)崿F(xiàn) 各個(gè)線程相互并行地進(jìn)行濾波計(jì)算。
[0059] 經(jīng)過上述計(jì)算,通過各方向?yàn)V波計(jì)算步驟S2計(jì)算上述4個(gè)計(jì)算方向上的濾波結(jié) 果。然后,在圖像濾波結(jié)果獲得步驟S3中,將針對(duì)上述4個(gè)計(jì)算方向得到的濾波結(jié)果按2 維圖像的每個(gè)像素累加,從而獲得2維圖像的圖像濾波結(jié)果。最后,將全部線程塊的全部圖 像濾波結(jié)果從共享內(nèi)存寫入全局存儲(chǔ)器中,作為2維圖像的圖像濾波結(jié)果。在此,每一個(gè)線 程塊均按上述方法處理2維圖像數(shù)據(jù)中的一個(gè)矩形區(qū)域,各個(gè)線程塊并行執(zhí)行,直到所有 圖像數(shù)據(jù)處理完畢。
[0060] 接下來說明針對(duì)3維圖像進(jìn)行濾波處理的例子。在針對(duì)3維圖像進(jìn)行濾波處理、 且濾波處理的鄰域范圍的半徑r為1的情況下,如上所述,在計(jì)算方向確定步驟S1中確定 的計(jì)算方向的數(shù)量為13。在此,繼續(xù)參照?qǐng)D3A~圖3D并追加圖3E、圖4、圖5A、圖5B進(jìn)行 說明。在此,假設(shè)3維圖像的大小為料Y*Z(例如512巧12巧12),可W看成是Z個(gè)料Y的2 維圖像片。
[0061] 然后,讀入輸入圖像(3維圖像)到GPU全局存儲(chǔ)器中,全局存儲(chǔ)器中的輸出圖像初 始化為零。接下來進(jìn)行任務(wù)分配。輸入圖像在XY平面上可W分成幾個(gè)矩形區(qū)域,每個(gè)矩形 區(qū)域?qū)?yīng)的3維圖像體由一個(gè)線程塊處理。假設(shè)一個(gè)線程塊中含有32個(gè)線程,原圖像在XY 平面上可W分成256個(gè)大小為32*32的矩形區(qū)域,每個(gè)線程塊處理一個(gè)矩形區(qū)域?qū)?yīng)的圖 像體(大小為32*32*Z)。與2維圖像時(shí)相同,矩形區(qū)域的大小可W根據(jù)GPU中處理器的數(shù)量 進(jìn)行調(diào)整,w保證并行效率。各個(gè)線程塊并行執(zhí)行。
[0062] 圖4是本發(fā)明針對(duì)3維圖像的一個(gè)線程塊的并行處理流程示意圖。圖5A、圖5B是 本發(fā)明3維圖像濾波的內(nèi)存管理示意圖。在圖5A、圖5B中,下角標(biāo)U表示構(gòu)成3維圖像的 多個(gè)2維圖像中的上一片圖像的貢獻(xiàn),M表示中間圖像的貢獻(xiàn),L表示下一片圖像的貢獻(xiàn),輸 出為U+M+L。如圖4、圖5A、圖5B所示,在步驟S31中,從全局存儲(chǔ)器向多核處理器的共享內(nèi) 存巧享存儲(chǔ))讀入構(gòu)成3維圖像的多個(gè)2維圖像中的起始化+1個(gè)2維圖像,并對(duì)該化+1個(gè) 2維圖像執(zhí)行各方向?yàn)V波計(jì)算步驟S2和圖像濾波結(jié)果獲得步驟S3。在此r為1,因此從全 局存儲(chǔ)中拷貝要處理的圖像體的前3片圖像(第一片至第H片巧Ij共享內(nèi)存。此部分圖像為 該線程塊要處理的輸入圖像,并在共享內(nèi)存中分配一塊相同大小的輸出圖像,初始值為零。 在步驟S32中,在上述13個(gè)計(jì)算方向中,并行處理其中一個(gè)計(jì)算方向上的所有濾波計(jì)算,內(nèi) 存讀寫都在共享內(nèi)存中進(jìn)行。每個(gè)線程計(jì)算圖像中沿該計(jì)算方向的一行,它依次讀取該一 行中在鄰域大小范圍內(nèi)的兩個(gè)像素點(diǎn),按照濾波公式進(jìn)行計(jì)算,并將計(jì)算結(jié)果累加到輸出 圖像相應(yīng)的兩個(gè)像素點(diǎn)的結(jié)果中。
[0063] 其中,在上述13個(gè)計(jì)算方向之中,2維計(jì)算方向上的計(jì)算與上述2維圖像時(shí) 相同,例如在圖3A所示的A方向的計(jì)算中,線程1的具體操作為,首先讀取第1列的前 兩個(gè)像素,即X坐標(biāo)為1和2的兩個(gè)像素,將兩點(diǎn)像素值相減,帶入上述濾波公式,計(jì)算 N〇,i,〇餐(化1,1-化2,1),將結(jié)果累加至y'1,1,1,計(jì)算N〇-i,〇0C化2.1 -咕1丄),將結(jié)果累加至y,1,2,1,然后讀入X坐標(biāo)為3的點(diǎn),將y1,2,1與y1,3,1相減,計(jì)算如,'2,廣化3,1),將結(jié) 果累加至y'lAi,計(jì)算
[0064] N〇,-i,〇0(化3,1-Pl,2,l),將結(jié)果累加至y'1,3,1。W此類推直至完成整列計(jì)算。其 他2維方向上的計(jì)算在此不做費(fèi)述。
[0065] 對(duì)于3維計(jì)算方向上的并行方法,可W由2維計(jì)算方向上的并行方法類推得到,思 路一致,只是計(jì)算直線方向由2維變?yōu)?維。在此,舉出3維方向之中的一個(gè)計(jì)算方向?yàn)槔?進(jìn)行說明。圖3E是本發(fā)明針對(duì)3維圖像在一個(gè)3維計(jì)算方向(Z方向)上線程的任務(wù)分配 示意圖。如圖3E所示,每個(gè)線程計(jì)算沿箭頭直線所示的一行,例如從該行的起始像素開始 直到該行的最終像素為止依次作為對(duì)象像素,在對(duì)象像素與該對(duì)象像素在Z方向上的各鄰 域像素之間進(jìn)行濾波計(jì)算(例如像素值的相減),并將濾波計(jì)算的結(jié)果分別W累加的方式保 存為該對(duì)象像素和各鄰域像素的濾波結(jié)果。
[0066] 在步驟S33中,判斷是否完成了所有計(jì)算方向的計(jì)算。如果判斷結(jié)果為否,則返回 步驟S32。如果判斷結(jié)果為是,即上述13個(gè)計(jì)算方向的計(jì)算都完成之后,共享內(nèi)存中化+1 (在此為3)片圖像之間的對(duì)彼此的濾波貢獻(xiàn)計(jì)算完成。其中,前r+1片(在此為第1片和第 2片)的濾波計(jì)算已全部完成,而剩下的r片(在此為第3片)圖像還需計(jì)算第4片圖像對(duì)其 的貢獻(xiàn),因此第3片圖像的濾波計(jì)算還未完成。此時(shí),在步驟S34中,將讀入的化+1個(gè)(3 片)2維圖像中的前r+1個(gè)(第1片和第2片)2維圖像的各像素的濾波結(jié)果(1ma、2胃A)從 共享內(nèi)存寫入全局存儲(chǔ)器,而第3片圖像的中間結(jié)果(3胃)仍然保留在共享內(nèi)存中W用于 后續(xù)計(jì)算。
[0067] 接著,在步驟S35中,從全局存儲(chǔ)器向共享內(nèi)存讀入構(gòu)成3維圖像的多個(gè)2維圖像 中的后續(xù)r+1個(gè)(在此為第4片和第5片)2維圖像,并將該2片圖像的輸出圖像初始化為 0。然后,對(duì)由該后續(xù)r+1個(gè)2維圖像和之前未從共享內(nèi)存寫入全局存儲(chǔ)器的r個(gè)2維圖像 組成的化+1個(gè)(在此為第3片至第5片)2維圖像,執(zhí)行各方向?yàn)V波計(jì)算步驟S2和圖像濾 波結(jié)果獲得步驟S3。具體與步驟S32~S34相同,在此不再費(fèi)述。在步驟S36中,判斷針 對(duì)3維圖像體是否全部處理完成。如果判斷結(jié)果為否,則返回步驟S32,重復(fù)上述處理直到 Z片2維圖像處理完成,即將構(gòu)成3維圖像的全部2維圖像的圖像濾波結(jié)果從共享內(nèi)存寫入 全局存儲(chǔ)器。
[0068] 在此,每一個(gè)線程塊均按上述方法處理3維圖像數(shù)據(jù)中的一個(gè)3維圖像體,各個(gè)線 程塊并行執(zhí)行,直到所有圖像數(shù)據(jù)處理完畢。最后,結(jié)束計(jì)算,將寫入全局存儲(chǔ)器的全部圖 像濾波結(jié)果作為3維圖像的圖像濾波結(jié)果。
[0069] 接下來,參照