一種基于gpu并行選擇式掩模平滑方法
【專利摘要】一種基于GPU并行選擇式掩模平滑方法,包括以下步驟:(1)將圖像像素拷貝到顯存中,并為圖像處理分配所需要網(wǎng)格和線程塊的規(guī)模;(2)啟動(dòng)kernel函數(shù),遍歷輸入圖像像素;(3)利用GPU并行計(jì)算出圖像中每一個(gè)像素在9個(gè)模板領(lǐng)域點(diǎn)中的均值與方差;(4)在kernel函數(shù)中將得到像素點(diǎn)的方差進(jìn)行排序得到最小方差,并將該最小方差對(duì)應(yīng)的均值賦值給該像素點(diǎn)。本發(fā)明實(shí)現(xiàn)了選擇式掩模平滑算法在GPU中的并行計(jì)算,加快了算法計(jì)算每一個(gè)像素在模板領(lǐng)域點(diǎn)得出均值與方差的運(yùn)算速度,有效的提高了選擇式掩模平滑算法對(duì)于圖像噪聲的處理速度。
【專利說(shuō)明】一種基于GPU并行選擇式掩模平滑方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于圖像處理【技術(shù)領(lǐng)域】,特別涉及圖像噪聲消除技術(shù)。
【背景技術(shù)】
[0002] 圖像在成像、數(shù)字化和傳輸?shù)倪^(guò)程中,難免會(huì)受到各種噪聲源的干擾和影響而使 圖像質(zhì)量變差。圖像噪聲來(lái)自多方面,有系統(tǒng)外部的干擾,如電磁波或經(jīng)電源串進(jìn)系統(tǒng)內(nèi)部 而引起的外部噪聲,也有來(lái)自系統(tǒng)內(nèi)部的干擾,如攝像機(jī)的熱噪聲、電器的機(jī)械運(yùn)動(dòng)而產(chǎn)生 的抖動(dòng)噪聲等川。這些噪聲干擾使圖像退化,質(zhì)量下降。其表現(xiàn)為圖像模糊,特征淹沒,對(duì) 圖像分析不利。因此,去除噪聲、恢復(fù)原始圖像是圖像處理中的一個(gè)重要內(nèi)容。消除噪聲的 工作稱之為圖像平滑。
[0003] 圖像平滑是一種實(shí)用的數(shù)字圖像處理技術(shù)。一個(gè)較好的平滑處理方法應(yīng)該既能消 除圖像噪聲,又不使圖像邊緣輪廓和線條變模糊,這是數(shù)字圖像平滑處理要追求的目標(biāo)。但 是由于噪聲源眾多,噪聲種類復(fù)雜,所以相應(yīng)的平滑方法也多種多樣。我們可以將圖像平滑 分為空間域圖像平滑技術(shù)和頻率域圖像平滑技術(shù)。
[0004] 針對(duì)空間域圖像平滑技術(shù),國(guó)內(nèi)外大量學(xué)者做出了大量研究,并且提出了領(lǐng)域平 均法,中值濾波法,選擇式掩模平滑法等。但是,對(duì)于這幾種方法依然有其的優(yōu)缺點(diǎn)。領(lǐng)域 平均法計(jì)算簡(jiǎn)單,計(jì)算速度快。其缺點(diǎn)是降低噪聲的同時(shí)使圖像出現(xiàn)模糊,特別是在邊緣和 細(xì)節(jié)處。而且在鄰域越大時(shí),增強(qiáng)去噪聲能力會(huì)使圖像的模糊程度變得更嚴(yán)重。中值濾波 容易去除孤立點(diǎn)、線的噪聲,同時(shí)保持圖像的邊緣,它能很好地去除二值噪聲,但對(duì)高斯噪 聲無(wú)能為力。選擇式掩模平滑法可以的減輕平滑帶的模糊效應(yīng),從而使圖像平滑邊緣細(xì)節(jié) 清晰,但是,選擇式掩模平滑法計(jì)算量大,耗時(shí)比較長(zhǎng),在處理高清圖像平滑時(shí)速度比較慢。
[0005] 因此,國(guó)內(nèi)外學(xué)者對(duì)于選擇式掩模平滑法優(yōu)化也作了大量研究。2002年,朱衛(wèi)華等 提出了一種梯形掩模代替條形掩模的改進(jìn)行選擇式平滑方法。2009年,李金紅等提出了基 于積分圖像的快速選擇掩模平滑算法。以上兩種方法都是從掩模的選擇和計(jì)算簡(jiǎn)化的角度 去對(duì)選擇掩模平滑進(jìn)行改進(jìn)。這兩種方法對(duì)于選擇式平滑方法都有一定的改進(jìn)效果,但是, 依然沒有解決處理高清圖像平滑時(shí)計(jì)算速度慢等問(wèn)題。
[0006] GPU(GraphicProcessingUnit,圖形處理單元)具有很好的并行處理能力,經(jīng)過(guò) 2001年與2002年的兩次重大變革,程序員能夠靈活地編程控制GPU的頂點(diǎn)著色器與像素著 色器,使得GPU不再局限于最初的圖形渲染加速。2006年NVIDIA公司為GPU引入統(tǒng)一的渲 染架構(gòu),自此,GPU能更加靈活方便地運(yùn)用于通用計(jì)算領(lǐng)域。利用GPU可以實(shí)現(xiàn)計(jì)算的并行 化,從而大大的縮短計(jì)算時(shí)間,提高算法的執(zhí)行效率。因此,利用GPU實(shí)現(xiàn)并行化計(jì)算已經(jīng) 慢慢應(yīng)用到圖像處理技術(shù)中。
[0007] 雖然國(guó)內(nèi)外學(xué)者已經(jīng)對(duì)于圖像的選擇式掩模平滑算法進(jìn)行了大量的研究并取得 了一定的成果。但是,對(duì)于圖像進(jìn)行選擇式掩模平滑并行計(jì)算以往學(xué)者都沒有進(jìn)行大量的 研究與優(yōu)化。因此,針對(duì)這一種情況,利用GPU對(duì)選擇式平滑濾波算法進(jìn)行并行計(jì)算可以 作為一個(gè)突破口,實(shí)現(xiàn)了加快選擇式掩模平滑算法對(duì)于圖像(特別是高清圖像)噪聲計(jì)算 速度的目的。
[0008] 由此,業(yè)界對(duì)能夠?qū)崿F(xiàn)并行化計(jì)算的選擇式掩模平滑算法有所期冀。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明的目的是提供一種基于GPU并行選擇式掩模平滑方法。所述方法基于GPU 并行化,實(shí)現(xiàn)了選擇式掩模平滑算法在GPU中的并行計(jì)算且有效的提高了選擇式掩模平滑 算法對(duì)于圖像噪聲的處理速度。
[0010] 本發(fā)明包括以下步驟:
[0011] (1)將圖像像素拷貝到顯存中,并為圖像處理分配所需要網(wǎng)格(Grid)和線程塊 (Block)的規(guī)模;
[0012] (2)啟動(dòng)kernel函數(shù),遍歷輸入圖像像素;
[0013] (3)利用GPU并行計(jì)算出圖像中每一個(gè)像素在9個(gè)模板領(lǐng)域點(diǎn)中的均值與方差;
[0014] (4)在kernel函數(shù)中將得到像素點(diǎn)的方差進(jìn)行排序得到最小方差,并將該最小方 差對(duì)應(yīng)的均值賦值給該像素點(diǎn)。
【專利附圖】
【附圖說(shuō)明】
[0015] 圖1是本發(fā)明方法之步驟的流程圖。
[0016] 圖2是9個(gè)掩模模板分布圖。
[0017] 圖3是本發(fā)明實(shí)施例之圖像的示意圖。其中,(a)是算法處理前原始圖像,(b)是 圖像(a)通過(guò)選擇式掩模算法在CPU平滑處理的圖像,(c)是本發(fā)明實(shí)施例處理后的圖像。
[0018] 圖4是不同分辨率下圖像在CPU與GPU運(yùn)行選擇式掩模算法計(jì)算速度的比較結(jié) 果。
【具體實(shí)施方式】
[0019] 結(jié)合附圖,通過(guò)下文的述詳細(xì)說(shuō)明,可更清楚地理解本發(fā)明的上述及其他特征和 優(yōu)點(diǎn)。
[0020] 參見示出本發(fā)明實(shí)施例的附圖,下文將更詳細(xì)地描述本發(fā)明。然而,本發(fā)明可以以 許多不同形式實(shí)現(xiàn),并且不應(yīng)解釋為受在此提出之實(shí)施例的限制。相反,提出這些實(shí)施例是 為了達(dá)成充分及完整公開,并且使本【技術(shù)領(lǐng)域】的技術(shù)人員完全了解本發(fā)明的范圍。
[0021] 由于本發(fā)明的方法實(shí)現(xiàn)并行選擇式掩模平滑可以達(dá)到令人滿意的效果,因此可以 實(shí)現(xiàn)加快算法計(jì)算每一個(gè)像素在模板領(lǐng)域點(diǎn)得出均值與方差的計(jì)算速度,有效的提高了選 擇式掩模平滑算法對(duì)于圖像噪聲的處理速度。
[0022] 現(xiàn)參考圖1,將圖像像素拷貝到顯存中,并且計(jì)算出所需要的線程塊和網(wǎng)格數(shù),遍 歷圖像像素并行計(jì)算出在9個(gè)掩模模板中的均值與方差,并以方差排序,將方差最小時(shí)所 對(duì)應(yīng)的均值賦予當(dāng)前點(diǎn)的像素。
[0023] 本實(shí)施例中,實(shí)現(xiàn)的具體步驟如下所示:
[0024] (1)通過(guò)函數(shù)readBmp(readPath)將圖像數(shù)據(jù)讀入內(nèi)存緩沖區(qū),采用CUDAAPI函 數(shù)cudaMallocO管理顯存的分配,并通過(guò)變量error的值判定顯存是否分配成功和函數(shù) cudaGetErrorString()返回分配失敗的錯(cuò)誤信息。
[0025] (2)對(duì)于分辨率為bmpWidthXbmpHeight的圖像,線程粗粒度需要的block的數(shù)目 可以如公式(1-1)得出:
[0026] nblock = (bimffidth/16)X(bmpHeight/16) (1-1)
[0027] Grid的大小為(bmpWidth/16,bmpHeight/16)。
[0028] (3)如圖2所示,選擇5X5窗口模板,在此窗口中以中心像素(i,j)為基準(zhǔn)點(diǎn)制 件9個(gè)掩模模板,包括邊長(zhǎng)為1的正方形,4個(gè)五邊形,4個(gè)六邊形掩模。
[0029] (4)執(zhí)行kernel函數(shù)chooseMaskGPU〈〈〈grid,block〉〉〉(d_iImageData,bmpHeig ht,bmpWidth,bmpHeight,biCount,d_oImageData)并行計(jì)算出每個(gè)掩模的均值與方差。均 值與方差的計(jì)算公式如式(1_2)與式(1-3)所不:
[0030] 均值的計(jì)算公式:
【權(quán)利要求】
1. 一種基于GPU并行選擇式掩模平滑方法,其特征是包括以下步驟:(1)將圖像像素拷 貝到顯存中,并為圖像處理分配所需要網(wǎng)格和線程塊的規(guī)模;(2)啟動(dòng)kernel函數(shù),遍歷輸 入圖像像素;(3)利用GPU并行計(jì)算出圖像中每一個(gè)像素在9個(gè)模板領(lǐng)域點(diǎn)中的均值與方 差;(4)在kernel函數(shù)中將得到像素點(diǎn)的方差進(jìn)行排序得到最小方差,并將該最小方差對(duì) 應(yīng)的均值賦值給該像素點(diǎn)。
2. 根據(jù)權(quán)利要求1所述的基于GPU并行選擇式掩模平滑方法,其特征是通過(guò)函數(shù) readBmp(readPath)將圖像數(shù)據(jù)讀入內(nèi)存緩沖區(qū),采用cudaAPI函數(shù)cudaMallocO管理顯 存的分配,并通過(guò)變量error的值判定顯存是否分配成功和函數(shù)cudaGetErrorStringO返 回分配失敗的錯(cuò)誤信息。
3. 根據(jù)權(quán)利要求1所述的基于GPU并行選擇式掩模平滑方法,其特征是在每一個(gè)線程 塊中分配16*16大小的線程數(shù),對(duì)于分辨率為bmpWidthXbmpHeight的圖像,線程粗粒度需 要的線程塊的數(shù)目可以如公式(1-1)得出: nbi〇ck= (bimffidth/16)X(bmpHeight/16) (1-1) Grid的大小為(bmpWidth/16,bmpHeight/16)。
4. 根據(jù)權(quán)利要求1所述的基于GPU并行選擇式掩模平滑方法,其特征是按如下步驟得 到圖像每個(gè)像素點(diǎn)的均值與方差: (1) 選擇5X5窗口模板,在此窗口中以中心像素(i,j)為基準(zhǔn)點(diǎn)制件9個(gè)掩模模板, 包括邊長(zhǎng)為1的正方形,4個(gè)五邊形,4個(gè)六邊形掩模。 (2) 執(zhí)行kernel函數(shù)chooseMaskGPU〈〈〈grid,block>>>(d_iImageData,bmpHeight,b mpWidth,bmpHeight,biCount,d_oImageData)并行計(jì)算出每個(gè)掩模的均值與方差;均值與 方差的計(jì)算公式如式(1_2)與式(1-3)所不: 均值的計(jì)算公式:
方差的計(jì)算公式為:
5. 根據(jù)權(quán)利要求1所述的基于GPU并行選擇式掩模平滑方法,其特征是按如下步驟得 到圖像平滑后對(duì)應(yīng)的像素值: (1) 將每一個(gè)像素在9個(gè)掩模模板的方差進(jìn)行排序,得到最小方差值,并且以最小方差 對(duì)應(yīng)的均值作為當(dāng)前像素點(diǎn)的像素值; (2) 遍歷完所有像素點(diǎn)后,該圖像的像素值均經(jīng)邊平滑處理,則將顯存中的數(shù)據(jù)拷貝至 新分配的內(nèi)存中,算法結(jié)束。
【文檔編號(hào)】G06T5/00GK104408691SQ201410652173
【公開日】2015年3月11日 申請(qǐng)日期:2014年11月17日 優(yōu)先權(quán)日:2014年11月17日
【發(fā)明者】洪向共, 劉浩, 呂向陽(yáng), 鄒建 申請(qǐng)人:南昌大學(xué)