基于cuda的快速雙邊濾波方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及圖形圖像處理以及并行計(jì)算領(lǐng)域,特別是一種基于CUDA的快速雙邊 濾波方法。
【背景技術(shù)】
[0002] 圖像傳感器在工作的過(guò)程中會(huì)受到各種各樣的因素影響,如圖像獲取圖像的環(huán) 境,傳感元器件自身質(zhì)量等等,因此,數(shù)字圖像在形成的過(guò)程中會(huì)受到多種噪聲的污染。這 些噪聲會(huì)對(duì)對(duì)圖像后期處理造成很大的影響。如何在能夠保持圖像原本信息的同時(shí)濾除這 些噪聲就顯得十分重要。傳統(tǒng)的濾波器在去除噪聲的同時(shí)也會(huì)對(duì)圖像的邊緣造成模糊。為 了解決這個(gè)問(wèn)題,Tomasi和Manduchi在1998年提出了雙邊濾波算法。與高斯濾波類似, 雙邊濾波也采用了局部加權(quán)平均的思想,不同的是雙邊濾波在計(jì)算權(quán)重的過(guò)程中加入了像 素值相似度這一項(xiàng)。因此雙邊濾波在去噪的過(guò)程中能夠很好地保留圖像的邊緣信息,更加 符合人眼的視覺(jué)習(xí)慣,在解決圖像處理領(lǐng)域中的一些實(shí)際問(wèn)題時(shí)取得了很好的效果,目前 廣泛應(yīng)用在圖像去噪,圖像分割,圖像復(fù)原,光流估計(jì)等領(lǐng)域。雙邊濾波算法通過(guò)實(shí)踐證明 是非常有效的,但它的計(jì)算時(shí)間較長(zhǎng),無(wú)法應(yīng)用到很多需要實(shí)時(shí)處理的圖像任務(wù)當(dāng)中。如何 快速實(shí)現(xiàn)雙邊濾波算法就變得十分重要。
[0003] CUDA (Compute Unified Device Architecture)統(tǒng)一計(jì)算設(shè)備架構(gòu),是 NVIDIA 公 司推出的一種利用GPU(Graphic Processing Unit)圖形處理器,進(jìn)行通用并行計(jì)算的架 構(gòu)。相比較于CPU(Central Processing Unit)中央處理器,GPU專為密集型、高度并行化 的計(jì)算而設(shè)計(jì),且在浮點(diǎn)運(yùn)算方面能力更強(qiáng),這樣巨大的優(yōu)勢(shì)使得CUDA在矩陣計(jì)算,圖像 視頻處理,機(jī)器學(xué)習(xí),計(jì)算機(jī)可視化等領(lǐng)域都有著良好的應(yīng)用前景。在圖像處理領(lǐng)域,近些 年來(lái)有很多國(guó)內(nèi)外很多學(xué)者都嘗試?yán)肅UDA來(lái)優(yōu)化自己的算法。在醫(yī)學(xué)圖像方面,Anders Eklund認(rèn)為GPU可以大大加速并行計(jì)算,而且價(jià)格低廉,高效節(jié)能,非常適合用于解決需要 大量計(jì)算的醫(yī)療成像問(wèn)題,在視頻圖像處理方面,Yu-Shan Pai等人利用CUDA來(lái)加速LDPC 解碼,最終可以實(shí)現(xiàn)46. 52的加速比。在目前對(duì)雙邊濾波進(jìn)行加速的研宄當(dāng)中都沒(méi)有考慮 到雙邊濾波算法中存在大量可以并行計(jì)算的部分以及利用CUDA在并行計(jì)算方面巨大的優(yōu) 勢(shì)。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于提供一種基于CUDA的快速雙邊濾波方法,旨在解決雙邊濾波 算法復(fù)雜度較高,無(wú)法滿足圖像實(shí)時(shí)處理的要求。在本方法中,根據(jù)CUDA的特性對(duì)算法進(jìn) 行優(yōu)化,最終實(shí)現(xiàn)在不改變雙邊濾波去噪性能的情況下,大幅加速雙邊濾波計(jì)算速度,從而 可以滿足圖像實(shí)時(shí)處理的要求。
[0005] 本發(fā)明主要利用CUDA對(duì)雙邊濾波進(jìn)行并行化加速,同時(shí)根據(jù)架構(gòu)本身的特性對(duì) 算法進(jìn)行優(yōu)化,最高加速比能達(dá)到75以上。
[0006] 實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案為:一種基于CUDA的快速雙邊濾波方法,包括以下步 驟:
[0007] 步驟1、計(jì)算空域高斯模板,模板大小定義為(2N+1) X (2N+1)其中N為自然數(shù),一 般取N為1、2、3。
[0008] 步驟2、由CPU獲取圖像數(shù)據(jù),并將數(shù)據(jù)保存在主機(jī)Host內(nèi)存中;
[0009] 步驟3、申請(qǐng)GPU內(nèi)存空間,用于保存濾波計(jì)算所需的空域高斯模板、圖像數(shù)據(jù)和 完成濾波計(jì)算之后的圖像數(shù)據(jù);
[0010] 步驟4、將Host內(nèi)存中的圖像數(shù)據(jù)和高斯模板數(shù)據(jù)復(fù)制到GPU的內(nèi)存中;
[0011] 步驟5、計(jì)算所需要的Thread線程數(shù),然后設(shè)定計(jì)算所需的Block線程塊數(shù)。
[0012] 步驟6、啟動(dòng)CUDA多線程,對(duì)圖像數(shù)據(jù)做并行卷積模板運(yùn)算,卷積模板分為兩個(gè)部 分,空域高斯模板和值域高斯模板。并根據(jù)GPU計(jì)算特性來(lái)優(yōu)化運(yùn)算。
[0013] 步驟7、完成濾波計(jì)算,將計(jì)算結(jié)果從GPU中復(fù)制到Host內(nèi)存中。
[0014] 步驟1中所述的計(jì)算空域高斯模板矩陣,其公式為
[0015]
【主權(quán)項(xiàng)】
1. 一種基于CUDA的快速雙邊濾波方法,其特征在于包括以下步驟: 步驟1、計(jì)算空域高斯模板,模板大小定義為:(2N+1) X (2N+1),其中N為自然數(shù); 步驟2、由CPU獲取圖像數(shù)據(jù),并將數(shù)據(jù)保存在主機(jī)Host內(nèi)存中; 步驟3、申請(qǐng)GPU內(nèi)存空間,用于保存實(shí)現(xiàn)濾波方法所需的空域高斯模板、圖像數(shù)據(jù)和 結(jié)果圖像數(shù)據(jù); 步驟4、將Host內(nèi)存中的圖像數(shù)據(jù)和高斯模板數(shù)據(jù)復(fù)制到GPU的內(nèi)存中; 步驟5、計(jì)算所需要的Thread線程數(shù),然后設(shè)定計(jì)算所需要的Block線程塊數(shù); 步驟6、啟動(dòng)CUDA多線程,對(duì)圖像數(shù)據(jù)做并行卷積模板運(yùn)算,卷積模板包括空域高斯模 板和值域高斯模板; 步驟7、將步驟6的計(jì)算結(jié)果從GPU中復(fù)制到Host內(nèi)存中。
2. 根據(jù)權(quán)利要求1基于CUDA的快速雙邊濾波方法,其特征在于:步驟1中所述的計(jì)算 空域高斯模板矩陣,其公式為
空域高斯模板矩陣數(shù)據(jù)在CPU中完成計(jì)算,其中X,y表示圖像像素點(diǎn)的坐標(biāo),i,j表示 空域高斯模板對(duì)應(yīng)的坐標(biāo),σ (1表示空域高斯模板的標(biāo)準(zhǔn)差。
3. 根據(jù)權(quán)利要求1基于CUDA的快速雙邊濾波方法,其特征在于:步驟3中所述的申請(qǐng) GPU內(nèi)存空間,申請(qǐng)GPU中紋理內(nèi)存用于保存計(jì)算所需的空域高斯模板,申請(qǐng)GPU全局內(nèi)存 用于保存圖像數(shù)據(jù)。
4. 根據(jù)權(quán)利要求1基于CUDA的快速雙邊濾波方法,其特征在于:步驟4中所述的將 Host內(nèi)存中的圖像數(shù)據(jù)和高斯模板數(shù)據(jù)復(fù)制到GPU的內(nèi)存中,對(duì)于灰度圖像直接調(diào)用CUDA 函數(shù)完成數(shù)據(jù)的復(fù)制,對(duì)于彩色圖像,將三個(gè)顏色通道作為三個(gè)圖像矩陣數(shù)據(jù),利用CUDA 事件流的機(jī)制,進(jìn)行圖像數(shù)據(jù)的復(fù)制和傳輸。
5. 根據(jù)權(quán)利要求1基于CUDA的快速雙邊濾波方法,其特征在于:步驟5中所述的計(jì)算 Thread線程數(shù)和Block線程塊數(shù),利用CUDA的函數(shù)來(lái)查詢當(dāng)前計(jì)算顯卡中每一個(gè)Block 中所包含的最大線程數(shù),設(shè)其為C,設(shè)圖像像素點(diǎn)個(gè)數(shù)為MXN,則Thread數(shù)為MXN,Block 數(shù)為甲。
6. 根據(jù)權(quán)利要求1基于CUDA的快速雙邊濾波方法,其特征在于:步驟6中所述的卷積 模板運(yùn)算,其公式為
w(x,y,i,j)表示鄰域內(nèi)每個(gè)像素點(diǎn)的權(quán)重系數(shù),在雙邊濾波中,權(quán)重系數(shù)是值域高斯 模板t(x,y,i,j)和空域高斯模板wd(x,y,i,j)的乘積,計(jì)算公式如下 w(x, y, i, j) = wd (x, y, i, j) Xwr(x, y, i, j) ? .
. I . . τ Λ 定義并行卷積運(yùn)算公式如下
其中f'表示完成濾波計(jì)算后的圖像數(shù)據(jù),1表示圖像數(shù)據(jù)像素點(diǎn)的數(shù)量,G表示卷積模 板,i表示線程ID號(hào),一個(gè)線程完成一個(gè)像素點(diǎn)的卷積運(yùn)算。
【專利摘要】本發(fā)明公開(kāi)了一種基于CUDA的快速雙邊濾波方法,主要解決標(biāo)準(zhǔn)雙邊濾波算法在運(yùn)算速度上的不足。本方法將原始雙邊濾波算法做并行化處理,然后將圖像數(shù)據(jù)從主機(jī)內(nèi)存中復(fù)制到GPU的內(nèi)存中,通過(guò)CUDA(Compute Unified Device Architecture)統(tǒng)一計(jì)算設(shè)備架構(gòu)來(lái)調(diào)用GPU(Graphic Processing Unit)圖形處理器進(jìn)行濾波計(jì)算,對(duì)于所有像素點(diǎn)的計(jì)算都是并行執(zhí)行的。與現(xiàn)有的雙邊濾波算法相比,本發(fā)明能夠在保持雙邊濾波去噪性能不變的情況下,大幅提高雙邊濾波的計(jì)算速度,使之能夠滿足實(shí)時(shí)處理的要求。
【IPC分類】G06T5-00, G06T1-20
【公開(kāi)號(hào)】CN104732490
【申請(qǐng)?zhí)枴緾N201410727796
【發(fā)明人】陳強(qiáng), 曾炫杰, 孫權(quán)森, 譚海鵬, 朱文斌
【申請(qǐng)人】南京理工大學(xué)
【公開(kāi)日】2015年6月24日
【申請(qǐng)日】2014年12月3日