基于OpenCL的GPU加速分片雙邊濾波方法
【專利摘要】本發(fā)明提出了一種基于OpenCL的GPU加速分片雙邊濾波方法,用于解決現(xiàn)有分片雙邊濾波方法中存在的濾波效率低和通用性差的技術(shù)問題,實(shí)現(xiàn)步驟是:1.搭建異構(gòu)架構(gòu);2.主機(jī)端讀取原始圖像到主機(jī)內(nèi)存中,為處理后圖像分配主機(jī)內(nèi)存;3.主機(jī)端生成空域高斯模板;4.主機(jī)端創(chuàng)建緩存對象;5.寫內(nèi)核函數(shù);6.主機(jī)端設(shè)置內(nèi)核參數(shù);7.主機(jī)端設(shè)置內(nèi)核入列所需參數(shù);8.主機(jī)端入列內(nèi)核函數(shù);9.設(shè)備端計(jì)算值域高斯模板;10.設(shè)備端歸一化加權(quán)平均計(jì)算,將處理后圖像數(shù)據(jù)寫入對應(yīng)緩存對象;11.獲取處理后圖像數(shù)據(jù)。本發(fā)明濾波效率高,通用性強(qiáng),可實(shí)現(xiàn)對高分辨率圖像的實(shí)時(shí)處理。
【專利說明】
基于OpenCL的GPU加速分片雙邊濾波方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明設(shè)及數(shù)字信號處理及異構(gòu)計(jì)算技術(shù)領(lǐng)域,設(shè)及一種分片雙邊濾波方法,具 體設(shè)及一種基于化en化的GPU加速分片雙邊濾波方法,可用于高分辨率數(shù)字圖像的實(shí)時(shí)空 間域?yàn)V波。
【背景技術(shù)】
[0002] 高分辨率數(shù)字圖像能夠提供豐富的場景細(xì)節(jié)信息,因而成為當(dāng)今醫(yī)學(xué)影像、遙感 遙測W及多媒體通信等應(yīng)用領(lǐng)域的迫切需求。然而數(shù)字圖像在其形成和傳輸?shù)倪^程中很容 易受到噪聲的污染,運(yùn)種帶有噪聲的數(shù)字圖像不利于對圖像進(jìn)行分析,如何有效的濾除噪 聲并最大限度地保留原始圖像的信息是數(shù)字圖像處理領(lǐng)域的重要研究課題之一。
[0003] 在高斯濾波、中值濾波、均值濾波和雙邊濾波運(yùn)些傳統(tǒng)的濾波方法,其中高斯濾 波、中值濾波和均值濾波都能夠有效去除圖像中的噪聲,但運(yùn)些方法不能保護(hù)圖像的邊緣 信息,雙邊濾波方法在考慮了距離權(quán)值的基礎(chǔ)上又增加了亮度權(quán)值,雙邊濾波方法能夠有 效去除噪聲且對圖像的邊緣信息進(jìn)行了一定程度的保護(hù)。Shimodaira H.在IEEE International Conference on Image Processing.2013:868-871 上發(fā)表了 ('Patch-based bilateral filteriAlgorithms and performance"的論文,文中提出了一種分片雙邊濾波 算法,與傳統(tǒng)雙邊濾波方法相比,在計(jì)算值域高斯模板時(shí)是通過度量待濾波像素鄰域塊與 捜索窗內(nèi)其它像素鄰域塊的結(jié)構(gòu)相似度獲取亮度權(quán)值,運(yùn)種方法能夠有效去除噪聲并很好 的保護(hù)了圖像的邊緣信息。但是,該算法計(jì)算復(fù)雜度較高,無法應(yīng)用在高分辨率圖像的實(shí)時(shí) 處理任務(wù)中。此外,現(xiàn)有分片雙邊濾波方法只能運(yùn)行在單一架構(gòu)CPU上,不能在異構(gòu)架構(gòu)上 運(yùn)行,通用性差。
[0004] Open化(Open Computing Language)是第一個(gè)面向異構(gòu)系統(tǒng)通用目的并行編程的 標(biāo)準(zhǔn),也是一個(gè)統(tǒng)一的編程環(huán)境,適用于多核屯、處理器(CPU)、圖形處理器(GPU)和現(xiàn)場可編 程邏輯器件(FPGA)等并行處理器。與傳統(tǒng)單一架構(gòu)相比,異構(gòu)架構(gòu)能夠更好的實(shí)現(xiàn)高性能 并行計(jì)算,在大數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí)和科學(xué)計(jì)算等領(lǐng)域有廣闊的前景。圖像處理中包含大量 可W并行執(zhí)行的浮點(diǎn)矩陣運(yùn)算,可W將GPU的高度并行浮點(diǎn)計(jì)算能力與CPU的復(fù)雜邏輯處理 與任務(wù)調(diào)度能力相結(jié)合來對圖像處理進(jìn)行加速。OpenCL良好的跨平臺性也可W使程序運(yùn)行 在不同的平臺上,增強(qiáng)了代碼的可移植性與通用性。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)存在的缺陷,提供了一種基于化en化的GPU 加速分片雙邊濾波方法,通過化en化標(biāo)準(zhǔn)下針對GPU多PE單元的計(jì)算作業(yè)劃分和調(diào)度,W及 存儲分配優(yōu)化,完成算法在異構(gòu)架構(gòu)下的并行加速,用于解決現(xiàn)有分片雙邊濾波方法中存 在的濾波效率低和通用性差的技術(shù)問題。
[0006] 為實(shí)現(xiàn)上述目的,本發(fā)明采取的技術(shù)方案包括如下步驟:
[0007] 步驟1,在主機(jī)端通過通用CPU,選擇異構(gòu)計(jì)算平臺和其對應(yīng)的計(jì)算設(shè)備,在該異構(gòu) 計(jì)算平臺上創(chuàng)建上下文,并在該上下文中創(chuàng)建命令隊(duì)列,得到異構(gòu)架構(gòu)。
[000引步驟2,輸入原始圖像,主機(jī)端讀取該原始圖像數(shù)據(jù)到主機(jī)內(nèi)存中,同時(shí)為處理后 的圖像數(shù)據(jù)分配主機(jī)內(nèi)存。
[0009] 步驟3,主機(jī)端利用高斯函數(shù)生成空域高斯模板,并將該模板存儲在主機(jī)內(nèi)存中。
[0010] 步驟4,主機(jī)端在步驟1得到的上下文中創(chuàng)建多個(gè)緩存對象,分別用于設(shè)備端存儲 原始圖像、處理后圖像和空域高斯模板,通過所述命令隊(duì)列將原始圖像和空域高斯模板寫 入對應(yīng)的緩存對象。
[0011] 步驟5,利用化en化標(biāo)準(zhǔn),對分片雙邊濾波算法進(jìn)行并行化編程,將并行化后的分 片雙邊濾波算法寫成內(nèi)核函數(shù)。
[0012] 步驟6,在主機(jī)端將原始圖像的寬度和高度、空域高斯模板半徑和多個(gè)緩存對象設(shè) 置為內(nèi)核函數(shù)的參數(shù)。
[0013] 步驟7,在主機(jī)端設(shè)置內(nèi)核函數(shù)入列所需的維度數(shù)、每個(gè)維度上的工作項(xiàng)數(shù)和每個(gè) 工作組處理的工作項(xiàng)數(shù)。
[0014] 步驟8,主機(jī)端根據(jù)步驟7設(shè)置的參數(shù),入列內(nèi)核函數(shù)。
[0015] 步驟9,設(shè)備端根據(jù)主機(jī)端生成的空域高斯模板確定捜索窗大小,捜索窗內(nèi)的基于 結(jié)構(gòu)相似度進(jìn)行計(jì)算的亮度權(quán)值作為值域高斯模板。
[0016] 步驟10,設(shè)備端將原始圖像對應(yīng)的緩存對象中的數(shù)據(jù)、空域高斯模板和值域高斯 模板進(jìn)行歸一化加權(quán)平均計(jì)算,得到處理后的圖像數(shù)據(jù),并將該圖像數(shù)據(jù)寫入其對應(yīng)的緩 存對象。
[0017] 步驟11,主機(jī)端讀取處理后圖像對應(yīng)的緩存對象,得到處理后的圖像數(shù)據(jù),并將該 圖像數(shù)據(jù)寫到主機(jī)內(nèi)存。
[0018] 本發(fā)明與現(xiàn)有技術(shù)相比,具有W下優(yōu)點(diǎn):
[0019] 1、本發(fā)明由于對分片雙邊濾波方法進(jìn)行了 GHJ加速,與現(xiàn)有技術(shù)中對分片雙邊濾 波方法在單一架構(gòu)CPU下計(jì)算相比,GPU對分片雙邊濾波方法進(jìn)行了并行計(jì)算,且GPU對浮點(diǎn) 的計(jì)算能力要遠(yuǎn)遠(yuǎn)高于CPU對浮點(diǎn)的計(jì)算能力,在保持分片雙邊濾波方法去噪能力不變的 情況下,大幅提高了分片雙邊濾波方法的計(jì)算速度。
[0020] 2、本發(fā)明由于采用了基于化en化的并行編程標(biāo)準(zhǔn)對分片雙邊濾波方法進(jìn)行并行 化編程,與現(xiàn)有技術(shù)相比,本發(fā)明可W實(shí)現(xiàn)分片雙邊濾波方法在不同異構(gòu)平臺下都可W運(yùn) 行,增強(qiáng)了代碼的可移植性與通用性。
【附圖說明】
[0021] 圖1是本發(fā)明的流程框圖;
[0022] 圖2是本發(fā)明及現(xiàn)有技術(shù)的濾波效果圖。
【具體實(shí)施方式】
[0023] W下結(jié)合附圖和具體實(shí)施例,對本發(fā)明作進(jìn)一步描述。
[0024] 參照圖1,本發(fā)明包括W下步驟:
[0025] 步驟1,計(jì)算平臺和其對應(yīng)的計(jì)算設(shè)備,可W采用AMD異構(gòu)開發(fā)平臺和其對應(yīng)的AMD GPU、或NVIDIA異構(gòu)開發(fā)平臺和對應(yīng)的NVIDIA GPU、或AMD異構(gòu)開發(fā)平臺和對應(yīng)的CPU,由于 實(shí)驗(yàn)主機(jī)安裝的計(jì)算設(shè)備是AMD R9 270X GPU,本實(shí)施例采用AMD異構(gòu)開發(fā)平臺和其對應(yīng)的 AMD R9 270X GPU,在AMD異構(gòu)開發(fā)平臺上創(chuàng)建上下文和命令隊(duì)列,得到異構(gòu)架構(gòu)。
[0026] 步驟2,選取8位的灰度圖像作為原始圖像,主機(jī)端讀取該原始圖像數(shù)據(jù)到主機(jī)內(nèi) 存中,同時(shí)為處理后的8位灰度圖像數(shù)據(jù)分配主機(jī)內(nèi)存。
[0027] 步驟3,主機(jī)端利用高斯函數(shù)生成空域高斯模板,空域高斯模板與具體的像素值無 關(guān),只與像素的相對位置有關(guān),對于所有像素點(diǎn)的計(jì)算,空域高斯模板都是固定的,所W在 主機(jī)端生成空域高斯模板,高斯公式為:
[002引
(1)
[0029] 其中,(x〇,y日)為圖像像素點(diǎn)的坐標(biāo),(x,y)為空域高斯模板對應(yīng)的坐標(biāo),口^為空域 高斯模板的方差。
[0030] 本實(shí)施例中設(shè)置空域高斯模板大小為7 X 7,空域高斯模板的方差0^為10,將得到 的高斯模板存儲在主機(jī)內(nèi)存中。
[0031] 步驟4,主機(jī)端在上下文中創(chuàng)建多個(gè)緩存對象,分別用于設(shè)備端存儲原始8位灰度 圖像、處理后8位灰度圖像和空域高斯模板,原始8位灰度圖像和空域高斯模板對應(yīng)的緩存 對象創(chuàng)建為只讀緩存對象,處理后8位灰度圖像對應(yīng)的緩存對象創(chuàng)建為只寫緩存對象,通過 所述命令隊(duì)列將原始8位灰度圖像和空域高斯模板寫入對應(yīng)的緩存對象。
[0032] 步驟5,利用化en化標(biāo)準(zhǔn),對分片雙邊濾波算法進(jìn)行并行化編程,將并行化后的分 片雙邊濾波算法寫成內(nèi)核函數(shù)。
[0033] 步驟6,在主機(jī)端將原始8位灰度圖像的寬度和高度、空域高斯模板半徑和多個(gè)緩 存對象設(shè)置為內(nèi)核函數(shù)的參數(shù),其中原始8位灰度圖像和處理后8位灰度圖像對應(yīng)的緩存對 象參數(shù)設(shè)置在設(shè)備的全局內(nèi)存中,空域高斯模板對應(yīng)的緩存對象參數(shù)設(shè)置在設(shè)備的常量內(nèi) 存中,原始8位灰度圖像的寬度和高度、空域高斯模板半徑對應(yīng)的參數(shù)設(shè)置在設(shè)備的私有內(nèi) 存中。
[0034] 步驟7,在主機(jī)端設(shè)定內(nèi)核函數(shù)入列所需的維度數(shù)為2,每個(gè)維度上的工作項(xiàng)數(shù)分 別為原始8位灰度圖像的寬度和高度上的像素?cái)?shù),每個(gè)工作組處理的工作項(xiàng)數(shù)設(shè)置為16X 16。
[0035] 步驟8,主機(jī)端通過命令隊(duì)列入列內(nèi)核函數(shù)。
[0036] 步驟9,設(shè)備端根據(jù)主機(jī)端生成的空域高斯模板確定的捜索窗大小為7X7,捜索窗 內(nèi)的基于結(jié)構(gòu)相似度進(jìn)行計(jì)算的亮度權(quán)值作為值域高斯模板,其公式為:
[0037] (2)
[0038] 其中,I (X,y)為圖像像素點(diǎn)坐標(biāo)所述的(X,y)處的灰度值,(化+1) X (2p+l)分片鄰 域大小,(i,j)為片內(nèi)像素點(diǎn)相對于片中屯、點(diǎn)(X,y)的坐標(biāo)偏移。
[0039] 本實(shí)施例中設(shè)置分片鄰域(2p+l) X (2p+l)的大小為3 X 3,對捜索窗內(nèi)的(X,y)的3 X3鄰域片與中屯、像素(xo,yo)的3X3鄰域片做結(jié)構(gòu)相似度計(jì)算,將計(jì)算結(jié)果作為值域高斯 模板。
[0040] 步驟10,設(shè)備端將原始圖像對應(yīng)的緩存對象中的數(shù)據(jù)、空域高斯模板和值域高斯
[0041] 嫌 模板進(jìn)行歸一化加權(quán)平均計(jì)算,其公式為:
[0042] .'4)
[0043] 其中J(xo,yo)為分片雙邊濾波處理后的坐標(biāo)為(xo,yo)的像素值,w(xo,yo)為捜索 窗,K(xo,yo)為歸一化因子。
[0044] -個(gè)像素的計(jì)算在一個(gè)工作項(xiàng)下進(jìn)行,多個(gè)工作項(xiàng)同時(shí)執(zhí)行實(shí)現(xiàn)并行計(jì)算,得到 處理后的圖像數(shù)據(jù)J(xo,yo),并將該圖像數(shù)據(jù)寫入其對應(yīng)的緩存對象。
[0045] 步驟11,主機(jī)端讀取處理后圖像對應(yīng)的緩存對象,得到處理后的圖像數(shù)據(jù),并將該 圖像數(shù)據(jù)寫到主機(jī)內(nèi)存。
[0046] W下結(jié)合附圖和具體實(shí)施例,對本發(fā)明的技術(shù)效果作進(jìn)一步詳細(xì)描述:
[0047] 1.實(shí)驗(yàn)環(huán)境:
[004引異構(gòu)平臺為AMD異構(gòu)開發(fā)平臺,其中主機(jī)端通用CPU為Intel Xeon E5410 CPU,計(jì) 算設(shè)備GPU為AMD R9 270X GPU,軟件環(huán)境為Visual SUidio 2013和AMD APP SDK v2.9,操 作系統(tǒng)為Windows 7。
[0049] 2.實(shí)驗(yàn)內(nèi)容:
[0050] 對輸入的高分辨率8位灰度噪聲圖像分別用傳統(tǒng)分片雙邊濾波方法和本發(fā)明方法 進(jìn)行濾波操作,分別對不同圖像噪聲水平和濾波速度進(jìn)行評定,其結(jié)果分別如圖2和表1所 /J、- O
[0051 ]參照圖2,圖2(a)為原始噪聲圖像,其PSNR為20.3643dB,圖2(b)為傳統(tǒng)分片雙邊濾 波方法去噪后的效果圖,其PSNR為27.0669dB,圖2(C)為本發(fā)明方法去噪后的效果圖,其 PSNR為27.0669dB。
[0052] 由圖2可W看出,本發(fā)明方法與傳統(tǒng)分片雙邊濾波方法去噪性能相同。
[0053] 表1給出了本發(fā)明方法與傳統(tǒng)分片雙邊濾波方法的計(jì)算時(shí)間,分片大小均為3X3, 捜索窗大小為5 X 5和7 X 7。
[0054] 表1不同分片雙邊濾波方法的計(jì)算時(shí)間(單位:ms)
[0化5]
[0056]由表中數(shù)據(jù)可W看出,本發(fā)明所提出的基于化en化的GPU加速分片雙邊濾波方法 能實(shí)現(xiàn)對高分辨率圖像的實(shí)時(shí)處理,且相對傳統(tǒng)分片雙邊濾波方法獲得了非常顯著的加速 效果。
【主權(quán)項(xiàng)】
1. 一種基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于包括以下步驟: (1) 、在主機(jī)端通過通用CPU,選擇異構(gòu)計(jì)算平臺和其對應(yīng)的計(jì)算設(shè)備,在該異構(gòu)計(jì)算平 臺上創(chuàng)建上下文,并在該上下文中創(chuàng)建命令隊(duì)列,得到異構(gòu)架構(gòu); (2) 、輸入原始圖像,主機(jī)端讀取該原始圖像數(shù)據(jù)到主機(jī)內(nèi)存中,同時(shí)為處理后的圖像 數(shù)據(jù)分配主機(jī)內(nèi)存; (3 )、主機(jī)端利用高斯函數(shù)生成空域高斯模板,并將該模板存儲在主機(jī)內(nèi)存中; (4) 、主機(jī)端在步驟(1)得到的上下文中創(chuàng)建多個(gè)緩存對象,分別用于設(shè)備端存儲原始 圖像、處理后圖像和空域高斯模板,通過所述命令隊(duì)列將原始圖像和空域高斯模板寫入對 應(yīng)的緩存對象; (5) 、利用OpenCL標(biāo)準(zhǔn),對分片雙邊濾波算法進(jìn)行并行化編程,將并行化后的分片雙邊 濾波算法寫成內(nèi)核函數(shù); (6) 、在主機(jī)端將原始圖像的寬度和高度、空域高斯模板半徑和多個(gè)緩存對象設(shè)置為內(nèi) 核函數(shù)的參數(shù); (7) 、在主機(jī)端設(shè)置內(nèi)核函數(shù)入列所需的維度數(shù)、每個(gè)維度上的工作項(xiàng)數(shù)和每個(gè)工作組 處理的工作項(xiàng)數(shù); (8 )、主機(jī)端根據(jù)步驟(7)設(shè)置的參數(shù),入列內(nèi)核函數(shù); (9 )、設(shè)備端根據(jù)主機(jī)端生成的空域高斯模板確定搜索窗大小,搜索窗內(nèi)的基于結(jié)構(gòu)相 似度進(jìn)行計(jì)算的亮度權(quán)值作為值域高斯模板; (10) 、設(shè)備端將原始圖像對應(yīng)的緩存對象中的數(shù)據(jù)、空域高斯模板和值域高斯模板進(jìn) 行歸一化加權(quán)平均計(jì)算,得到處理后的圖像數(shù)據(jù),并將該圖像數(shù)據(jù)寫入其對應(yīng)的緩存對象; (11) 、主機(jī)端讀取處理后圖像對應(yīng)的緩存對象,得到處理后的圖像數(shù)據(jù),并將該圖像數(shù) 據(jù)寫到主機(jī)內(nèi)存。2. 根據(jù)權(quán)利要求1所述的基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于:步驟 (3) 中所述的高斯函數(shù),其表示為:其中,(xq,y〇)為圖像像素點(diǎn)的坐標(biāo),(X,y)為空域高斯模板對應(yīng)的坐標(biāo),σ〖為空域高斯 模板的方差。3. 根據(jù)權(quán)利要求1所述的基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于:步驟 (4) 中所述的多個(gè)緩存對象,其中原始圖像和空域高斯模板對應(yīng)的緩存對象均設(shè)定為只讀 緩存對象,處理后圖像對應(yīng)緩存對象設(shè)定為只寫緩存對象。4. 根據(jù)權(quán)利要求1所述的基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于:步驟 (6)中所述的內(nèi)核函數(shù)的參數(shù),其中原始圖像和處理后圖像對應(yīng)的緩存對象參數(shù)設(shè)置在設(shè) 備的全局內(nèi)存中,空域高斯模板對應(yīng)的緩存對象參數(shù)設(shè)置在設(shè)備的常量內(nèi)存中,原始圖像 的寬度和高度、空域高斯模板半徑對應(yīng)的參數(shù)設(shè)置在設(shè)備的私有內(nèi)存中。5. 根據(jù)權(quán)利要求1所述的基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于:步驟 (9)中所述的基于結(jié)構(gòu)相似度進(jìn)行計(jì)算,其公式為:其中,I(x,y)為圖像像素點(diǎn)坐標(biāo)所述的(x,y)處的灰度值,(2p+l)X(2p+l)分片鄰域大 小,(i,j)為片內(nèi)像素點(diǎn)相對于片中心點(diǎn)(X,y)的坐標(biāo)偏移。6.根據(jù)權(quán)利要求1所述的基于OpenCL的GPU加速分片雙邊濾波方法,其特征在于:步驟 (10)中所述的歸一化加權(quán)平均計(jì)算,其公式為:其中J(XQ,yQ)為分片雙邊濾波處理后的坐標(biāo)為(XQ,yQ)的像素值,w( XQ,yQ)為搜索窗,K (x〇,y〇)為歸一化因子。
【文檔編號】G06T5/00GK105957028SQ201610260467
【公開日】2016年9月21日
【申請日】2016年4月25日
【發(fā)明人】賴睿, 李吉昌, 楊銀堂, 秦翰林, 周慧鑫, 王炳健
【申請人】西安電子科技大學(xué)