基於MATLAB的中值濾波均值濾波以及高斯濾波的實現
作者:lee神
1. 背景知識
中值濾波法是一種非線性平滑技術,它將每一像素點的灰度值設置為該點某鄰域窗口內的所有像素點灰度值的中值.
中值濾波是基於排序統計理論的一種能有效抑制噪聲的非線性信號處理技術,中值濾波的基本原理是把數字圖像或數字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的像素值接近的真實值,從而消除孤立的噪聲點。
方法是用某種結構的二維滑動模板,將板內像素按照像素值的大小進行排序,生成單調上升(或下降)的為二維數據序列。二維中值濾波輸出為g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分別為原始圖像和處理后圖像。W為二維模板,通常為3*3,5*5區域,也可以是不同的的形狀,如線狀,圓形,十字形,圓環形等。
|
|
|
|
|
|
2 |
4 |
8 |
|
|
1 |
3 |
9 |
|
|
5 |
7 |
6 |
|
|
|
|
|
|
g(x,y)=med{f(x-k,y-l),(k,l∈W)}
g = med[2,4,8;1,3,9;5,7,6] = 5
中值濾波后的結果
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
均值濾波是典型的線性濾波算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標像素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身),再用模板中的全體像素的平均值來代替原來像素值。
均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理后圖像在該點上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m為該模板中包含當前像素在內的像素總個數。
均值濾波本身存在着固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除噪聲點。
|
|
|
|
|
|
2 |
4 |
8 |
|
|
1 |
3 |
9 |
|
|
5 |
7 |
6 |
|
|
|
|
|
|
g(x,y)=1/m ∑f(x,y)
g = (1/8)*(2+4+8+1+9+5+7+6) = 5
均值濾波后的結果:
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
高斯濾波是一種線性平滑濾波,適用於消除高斯噪聲,廣泛應用於圖像處理的減噪過程。通俗的講,高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過加權平均后得到。高斯濾波的具體操作是:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。
- 2. MATLAB實現
源碼:
%%-------------------------------------------------------------------
%% 2018/01/03
%% lee
%% 137194782@qq.com
%% 微信公眾號:FPGA開源工作室
%%-------------------------------------------------------------------
clear all;
clc;
M = imread('timg.jpg'); %讀取MATLAB中的名為timg的圖像
figure,imshow(M); %顯示原始圖像
title('original');
gray = rgb2gray(M);
figure,imshow(gray); %顯示灰度圖像
title('gray');
P1 = imnoise(gray,'gaussian',0.02); %加入高斯躁聲
figure,imshow(P1); %加入高斯躁聲后顯示圖像
title('gaussian noise');
P2 = imnoise(gray,'salt & pepper',0.02); %加入椒鹽躁聲
figure,imshow(P2); %加入椒鹽躁聲后顯示圖像
title('salt & pepper noise');
g = medfilt2(P1); %對高斯躁聲中值濾波
figure,imshow(g);
title('medfilter gaussian');
h = medfilt2(P2); %對椒鹽躁聲中值濾波
figure,imshow(h);
title('medfilter salt & pepper noise');
a=[1 1 1 %對高斯躁聲算術均值濾波
1 1 1
1 1 1];
l=1/9*a;
k = conv2(double(P1),double(l));
figure,imshow(k,[]);
title('arithmeticfilter gaussian');
d = conv2(double(P2),double(l)); %對椒鹽躁聲算術均值濾波
figure,imshow(d,[]);
title('arithmeticfilter salt & pepper noise');
sigma=8;% 標准差大小
window=double(uint8(3*sigma)*2+1);% 窗口大小一半為3*sigma
H=fspecial('gaussian', window, sigma);% fspecial('gaussian', hsize, sigma)產生濾波模板
img_gauss=imfilter(P1,H,'replicate'); %為了不出現黑邊,使用參數'replicate'(輸入圖像的外部邊界通過復制內部邊界的值來擴展)
figure, imshow(img_gauss);
title('gaussian filting gauss noise');
img_salt=imfilter(P2,H,'replicate');
figure, imshow(img_salt);
title('gaussian filting salt pepper noise');
結果展示:
原始圖像
灰度圖像
加入高斯噪聲的灰度圖像
加入椒鹽噪聲的灰度圖像
經過中值濾波后的高斯噪聲灰度圖像
經過中值濾波后的椒鹽噪聲灰度圖像
經過均值濾波后的高斯噪聲灰度圖像
經過均值濾波后的椒鹽噪聲灰度圖像
經過高斯濾波后的高斯噪聲灰度圖像
經過高斯濾波的椒鹽噪聲的灰度圖像
結果分析:圖像經過中值濾波后,高斯噪聲沒有被完全去除,椒鹽噪聲幾乎被完全去除效果較好。經過均值濾波后不管是高斯噪聲還是椒鹽噪聲大部分都沒有被去除,只是稍微模糊化。經過高斯濾波后,高斯噪聲和椒鹽噪聲幾乎被很大程度的模糊化,原圖好像被加上了一層蒙版。
歡迎大家關注我的微信公眾號FPGA開源工作室和資源共享QQ群。(*  ̄3)(ε ̄ *)