BM3D算法實現(xiàn)圖像降噪_第1頁
BM3D算法實現(xiàn)圖像降噪_第2頁
BM3D算法實現(xiàn)圖像降噪_第3頁
BM3D算法實現(xiàn)圖像降噪_第4頁
BM3D算法實現(xiàn)圖像降噪_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)廣東工業(yè)大學數(shù)字圖像、數(shù)字信號處理及應用實驗報告 題 目 圖像處理綜合實驗 院、系(部) 自動化學院 專業(yè)及班級 學 號 姓 名 日 期 目錄 TOC o 1-3 h z u 1 實驗目的理解圖像平滑和銳化的基本方法;了解圖像復原的基本方法;綜合使用多種方法改善圖像質(zhì)量。2 實驗要求(1)利用Photoshop之類的圖像處理工具軟件,嘗試對Moon.bmp盡量改善圖像質(zhì)量。(2)綜合采用各種合理的方法,編寫程序(C/C+/OpenCV、MATLAB、Python均可)對

2、Moon.bmp進行圖像質(zhì)量改善,實現(xiàn)以下目標的權衡折中:a降低噪聲;b. 增大對比度;c. 銳化增強。3 實驗設備安裝了VC6/VS2010、PS C6、MATLAB的PC機4 實驗原理4.1 利用拉普拉斯算子實現(xiàn)圖像銳化銳化處理的目的是突出圖像中的細節(jié)或者增強被模糊了的細節(jié)。銳化處理可以用空間微分來完成。微分算子的響應強度與圖像在該點的突變程度有關,圖像微分增強了邊緣和其他突變(如噪聲)而消弱了灰度變化緩慢的區(qū)域。由于我們處理的是數(shù)字量,最小灰度級的變化是有限的,而且變化發(fā)生的最短距離是在兩個相鄰像素之間。因此,用一階微分的差值定義一元函數(shù)f(x)的二階微分:二元圖像函數(shù)f(x,y)的拉普

3、拉斯變換定義為:離散方式:X方向:Y方向:故二維拉普拉斯數(shù)字實現(xiàn)由以上兩個分量相加:因此拉普拉斯算子用于圖像增強的基本方法如下:拉普拉斯算子處理后的圖像如下:圖 SEQ 圖 * ARABIC 1(拉普拉斯處理圖像對比圖。處理前左,處理后右)4.2利用分段線性函數(shù)實現(xiàn)對比度擴展分段線性變換函數(shù)的對比度拉伸相對于直方圖均衡(直方圖均衡只能按照統(tǒng)計特性進行變換)可以更加靈活地控制輸出灰度直方圖的分布,可以有選擇地拉伸某段灰度區(qū)間,以改善輸出圖像。如果一幅圖像灰度集中在較暗的區(qū)域而導致圖像偏暗,可以用灰度拉伸功能來擴展(斜率1)物體的灰度區(qū)間以改善圖像;如果圖像灰度集中在較亮的區(qū)域而導致圖像偏亮,也可

4、以用灰度拉伸功能來壓縮(斜率biHeight*pInfoHead-biWidth);for (i = 1; i biHeight - 1; i+) for (j = 1; j biWidth - 1; j+) /*做卷積*/G = pdatai*h_len+j*h2-(pdata(i-1)*h_len+j-1+pdata(i-1)*h_len+j+1+pdata(i + 1)*h_len+j-1+pdata(i+1)*h_len+j+1)*h1) -(pdata(i-1)*h_len+j+pdatai*h_len+j-1+pdata(i+1)*h_len+j +pdatai*h_len+j+1

5、)*h3);/*防止溢出*/if (G 255) ptempi*h_len + j = 255;else if (G 0) ptempi*h_len + j = 0;else ptempi*h_len + j = (BYTE)G;/*結(jié)果復制到輸出*/for (i = 1; i biHeight - 1; i+) for (j = 1; j biWidth - 1; j+) pdatai*h_len + j = ptempi*h_len + j;free(ptemp);2、中值、均值濾波函數(shù)雖然最后的圖像去噪算法采用的是BM3D算法,但是因為后面要把BM3D去噪算法與中值濾波算法作比較,所以在

6、這里還是給出詳細的設計。中值濾波詳細代碼及注釋如下:void medfilt(const BITMAPINFOHEADER *pInfoHead, BYTE *pdata, const DWORD h_len) int i, j, k, z, index;BYTE temp, nPixel9; /*創(chuàng)建臨時存儲空間,用于中值濾波結(jié)果*/BYTE *ptemp = (BYTE *)malloc(sizeof(BYTE)*pInfoHead-biHeight*pInfoHead-biWidth);for (i = 1;i biHeight - 1;i+) for (j = 1; j biWidth

7、 - 1; j+) /*先排列9個像素*/nPixel0 = pdata(i-1)*h_len + (j-1);nPixel1 = pdata(i-1)*h_len + j ;nPixel2 = pdata(i-1)*h_len + (j+1);nPixel3 = pdata i *h_len + (j-1);nPixel4 = pdata i *h_len + j ;nPixel5 = pdata i *h_len + (j+1);nPixel6 = pdata(i+1)*h_len + (j-1);nPixel7 = pdata(i+1)*h_len + j ;nPixel8 = pdat

8、a(i+1)*h_len + (j+1);/*找中值,這里只需找5次*/for (k = 0;k 5;k+) index = 0;for (z = 0;z 9-k;z+) if (nPixelindex nPixelz) /最大的數(shù)index = z;temp = nPixel8-k;nPixel8-k = nPixelindex;nPixelindex = temp;ptempi*h_len + j = nPixel4;/*復制結(jié)果到輸出*/for (i = 1;i biHeight - 1;i+) for (j = 1; j biWidth - 1; j+) pdatai*h_len +

9、j = ptempi*h_len + j;free(ptemp);均值濾波算法的詳細設計及代碼:void junfilt(const BITMAPINFOHEADER *pInfoHead, BYTE *pdata, const DWORD h_len) int i, j, temp; /*創(chuàng)建臨時存儲空間,用于均值濾波結(jié)果*/BYTE *ptemp = (BYTE *)malloc(sizeof(BYTE)*pInfoHead-biHeight*pInfoHead-biWidth);for (i = 1;i biHeight - 1;i+) for (j = 1; j biWidth - 1

10、; j+) temp = 0;temp += pdata(i-1)*h_len + (j-1);temp += pdata(i-1)*h_len + j ;temp += pdata(i-1)*h_len + (j+1);temp += pdata i *h_len + (j-1);temp += pdata i *h_len + j ;temp += pdata i *h_len + (j+1);temp += pdata(i+1)*h_len + (j-1);temp += pdata(i+1)*h_len + j ;temp += pdata(i+1)*h_len + (j+1);pte

11、mpi*h_len + j = (BYTE)(temp/9);/*復制結(jié)果到輸出*/for (i = 1;i biHeight - 1;i+) for (j = 1; j biWidth - 1; j+) pdatai*h_len + j = ptempi*h_len + j;free(ptemp);3、分段線性對比度增強函數(shù)因為分段線性對比度增強的詳細介紹已經(jīng)在實驗原理部分給出,所以只給出詳細代碼和注釋。/*指定對比度增強區(qū)間的結(jié)構體*/typedef struct adjust_rangedouble in_low;double in_high;double out_low;double

12、out_high; ADJ_RANGE;void adjust(const BITMAPINFOHEADER *pInfoHead,BYTE *pdata,const DWORD h_len, const ADJ_RANGE * ar)/*總共分成三段,三段的變換范圍為:第一段:(0- in_low_c) -(0- out_low_c)第二段:(in_low_c - in_high_c)-( out_low_c - out_high_c)第三段:(in_high_c -255) -( out_high_c -255) 三段的斜率分別為: 第一段:h1 第二段:h2 第三段:h3*/const

13、BYTE in_low_c = (BYTE)ar-in_low * 255;const BYTE in_high_c = (BYTE)ar-in_high * 255;const BYTE out_low_c = (BYTE)ar-out_low * 255;const BYTE out_high_c = (BYTE)ar-out_high * 255;const double h1 = ar-out_low / ar-in_low;const double h2 = (ar-out_high - ar-out_low) / (ar-in_high - ar-in_low);const dou

14、ble h3 = (1 - ar-out_high) / (1 - ar-in_high);int i, j;double temp;for (i = 1; i biHeight - 1; i+) for (j = 1; j biWidth - 1; j+) /*分段線性增強*/if (pdatai*h_len + j in_high_c)temp = out_high_c + (pdatai*h_len + j - in_high_c)*h3;elsetemp = out_low_c + (pdatai*h_len + j - in_low_c)*h2;/*防止溢出*/if (temp 25

15、5)pdatai*h_len + j = 255;else if (temp “開始執(zhí)行(不調(diào)試)”或者“Ctrl+F5”開始圖像處理。4、等待4-5分鐘,命令行顯示“total finish!”。如圖6所示。5、到工程目錄下的“BM3D”夾下打開“out.bmp”查看處理結(jié)果。圖 SEQ 圖 * ARABIC 6由于要進行彩印,對“Moon.bmp”圖像處理的結(jié)果存放于附錄中。6.2 比較中值、均值、BM3D濾波信噪比使用MATLAB測試中值、均值、BM3D濾波三個算法的信噪比提高量。信噪比提高量的公式如下:其中,c(x,y)為退化圖像;x(x,y)為原始圖像;a(x,y)為還原圖像。計算信

16、噪比提高量的代碼如下:% imgx:原始圖像% imgc:退化圖像 % imga:還原圖像function snri = snri_cal(imgx, imgc, imga) c_x = imgc - imgx; a_x = imga - imgx; S = sum(sum(c_x - mean(mean(c_x).2); N = sum(sum(a_x - mean(mean(a_x).2); snri = 10*log10(S/N);end接下來先使用MATLAB準備一幅加噪聲的圖片,編寫的MATLAB代碼如下:Img = imread(cameraman.tif);Imgn = imno

17、ise(cameraman,gaussian,0,0.002);imwrite(Imgn, cameramen.bmp);接著在VS2010環(huán)境下運行程序,分別對噪聲圖像“cameram.bmp”進行中值、均值、BM3D濾波處理。處理完成之后,編寫代碼計算信噪比提高量,代碼如下:imgx = imread(cameraman.tif);%原始圖像imgc = imnoise(imgx,gaussian);%退化圖像imga = imread(中值濾波.bmp);%還原圖像snri_cal(imgx, imgc, imga)%中值濾波的信噪比提高量imga = imread(均值濾波.bmp);

18、%還原圖像snri_cal(imgx, imgc, imga)%均值濾波的信噪比提高量imga = imread(BM3D濾波.bmp);%還原圖像snri_cal(imgx, imgc, imga)%BM3D濾波的信噪比提高量以上代碼輸出的結(jié)果如下:中值濾波均值濾波BM3D濾波信噪比提高量(db)4.90374.26815.7149從表上的數(shù)據(jù)可以看出BM3D、均值濾波、中值濾波的信噪比提高量依次遞減。其中,BM3D濾波的信噪比提高量最大,所以BM3D的濾波效果比較的好。三種算法的圖片如下圖所示。 圖 SEQ 圖 * ARABIC 7(原圖) 圖 SEQ 圖 * ARABIC 8(中值濾波)

19、 圖 SEQ 圖 * ARABIC 9(均值濾波) 圖 SEQ 圖 * ARABIC 10(BM3D濾波)從上面四個圖片的對比來看,中值濾波和均值濾波效果不僅比不上BM3D濾波,而且都使圖像模糊化了。所以不管從圖像的信噪比提高量來看,或者從圖像的處理效果來看,BM3D濾波都遠遠好于其他兩種算法。7 結(jié)論與問題討論7.1完成設計要求的程度設計要求:(1)利用Photoshop之類的圖像處理工具軟件,嘗試對Moon.bmp盡量改善圖像質(zhì)量。(2)綜合采用各種合理的方法,編寫程序(C/C+/OpenCV、MATLAB、Python均可)對Moon.bmp進行圖像質(zhì)量改善,實現(xiàn)以下目標的權衡折中:a降

20、低噪聲;b. 增大對比度;c. 銳化增強。完成設計要求的程度:(1)由于本人對PS的操作技術有限,在用PS對Moon.bmp進行處理時,老是感覺不是太過滿意,處理結(jié)果也殘差不齊。(2)綜合采用各種合理的方法,編寫程序C程序、MATLAB程序?qū)oon.bmp進行了處理。實現(xiàn)了:a降低噪聲;b. 增大對比度;c. 銳化增強。7.2遇到的問題及解決辦法問題1:普通拉普拉斯算子實現(xiàn)銳化增強時無法調(diào)整銳化強度。解決:在找了許多資料之后,突然發(fā)現(xiàn)MATLAB的銳化算子可以調(diào)整銳化強度。雖然不知道里面的原理,但是總算實現(xiàn)了調(diào)整銳化強度的效果。問題2:程序運行到free()函數(shù)時就崩潰。 解決:原因可能有兩個:1、連續(xù)free了兩次內(nèi)存。 2、訪問malloc的空間時,越界了。 3、free的指針與malloc時的指針位置發(fā)生了變化。問題3:在空域?qū)D像進行卷積操作時,結(jié)果輸出異常。解決:凡是涉及在空域?qū)D像進行卷積操作,都需要先開辟一個與圖像大小一致臨時空間,處理完之后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論