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