1. 程式人生 > >Matlab影象去噪(中值和均值)

Matlab影象去噪(中值和均值)

簡單概念

影象去噪是數字影象處理中的重要環節和步驟。去噪效果的好壞直接影響到後續的影象處理工作如影象分割、邊緣檢測等。影象訊號在產生、傳輸過程中都可能會受到噪聲的汙染,一般數字影象系統中的常見噪聲主要有:高斯噪聲(主要由阻性元器件內部產生)、椒鹽噪聲(主要是影象切割引起的黑影象上的白點噪聲或光電轉換過程中產生的泊松噪聲)等;這裡用一個函式實現 :imnoise函式。(見文末)

這裡說明兩種影象去噪演算法:

  1. 均值濾波演算法

也稱線性濾波,主要思想為鄰域平均法,即用幾個畫素灰度的平均值來代替每個畫素的灰度。有效抑制加性噪聲,但容易引起影象模糊,可以對其進行改進,主要避開對景物邊緣的平滑處理。

  1. 中值濾波

基於排序統計理論的一種能有效抑制噪聲的非線性平滑濾波訊號處理技術。中值濾波的特點即是首先確定一個以某個畫素為中心點的鄰域,一般為方形鄰域,也可以為圓形、十字形等等,然後將鄰域中各畫素的灰度值排序,取其中間值作為中心畫素灰度的新值,這裡領域被稱為視窗,當視窗移動時,利用中值濾波可以對影象進行平滑處理。其演算法簡單,時間複雜度低,但其對點、線和尖頂多的影象不宜採用中值濾波。很容易自適應化。

話不多說附程式碼:


I=imread('C:\Users\wpc\Pictures\1.jpg');%讀取影象

I = rgb2gray(I);

J=imnoise(I,'salt & pepper'
,0.2);%加入椒鹽噪聲,密度為0.2 subplot(2,3,1);imshow(I); title('原始影象'); subplot(2,3,2); imshow(J); title('加入椒鹽噪聲之後的影象'); %採用MATLAB中的函式filter2對受噪聲干擾的影象進行均值濾波 K1= medfilt2(J);%採用二維中值濾波函式medfilt2對受椒鹽噪聲干擾的影象濾波 %採用MATLAB中的函式filter2對受噪聲干擾的影象進行中值濾波 K2=filter2(fspecial('average',3),J)/255; %模板尺寸為3 K3=filter2(fspecial
('average',5),J)/255;% 模板尺寸為5 K4= filter2(fspecial('average',9),J)/255; %模板尺寸為9 subplot(2,3,3);imshow(K1); title('中值濾波'); subplot(2,3,4); imshow(K2); title('均值濾波,尺寸3'); subplot(2,3,5);imshow(K3); title('均值濾波,尺寸5'); subplot(2,3,6);imshow(K4); title('均值濾波,尺寸9');

執行結果

分析與總結

通過目測

  • 中值濾波效果要比均值好
  • 使用均值濾波去噪效果選用的鄰域半徑越大效果越好,當然其代價也會更大。

PS:

  1. fspecial函式
    fspecial函式用於建立預定義的濾波運算元,其語法格式為:
    h = fspecial(type)
    h = fspecial(type,parameters)
    引數type制定運算元型別,parameters指定相應的引數,具體格式為:
    type=’average’,為均值濾波,引數為n,代表模版尺寸,用向量表示,預設值為[3,3]。
  2. imnoise函式
    imnoise(I,type)
    I:為處理的後的影象矩陣
    type:新增噪聲的型別
    包含 ‘gaussian’ 、’salt & pepper’…(不會自己查。。。啦啦啦)