中值濾波原理及MATLAB實現

2022-10-18 09:06:05 字數 4629 閱讀 2950

中值濾波是一種典型的低通濾波器,屬於非線性濾波技術,它的目的是保護影象邊緣的同時去除雜訊。所謂中值濾波,是指把以某點(x,y)為中心的小視窗內的所有象素的灰度按從大到小的順序排列,若視窗中的象素為奇數個,則將中間值作為(x,y)處的灰度值。若視窗中的象素為偶數個,則取兩個中間值的平均值作為(x,y)處的灰度值。

中值濾波對去除椒鹽雜訊很有效。中值濾波器的缺點是對所有象素點採用一致的處理,在濾除雜訊的同時有可能改變真正象素點的值,引入誤差,損壞影象的邊緣和細節。該演算法對高斯雜訊和均勻分布雜訊就束手無策。

2.1中值濾波基本原理

中值濾波是一種非線性濾波,由於它在實際運算過程中並不需要影象的統計特性,所以比較方便。中值濾波首先是被應用在一維訊號處理技術中,後來被二維影象訊號處理技術所應用。在一定的條件下,可以克服線性濾波器所帶來的影象細節模糊,而且對濾除脈衝干擾及影象掃瞄雜訊最為有效。

但是對一些細節多,特別是點、線、尖頂細節多的影象不宜採用中值濾波的方法。

中值濾波的基本原理是把數字影象或數字序列中一點的值用該點的乙個鄰域中各點值的中值代替。

設有乙個一維序列,,…,,取視窗長度為m(m為奇數),對此序列進行中值濾波,就是從輸入序列中相繼抽出m個數其中為視窗的中心位置,,再將這m個點按其數值大小排列,取其序號為正中間的那作為輸出。用數學公式表示為:

2-2)

例如:有乙個序列為,則中值濾波為重新排序後的序列中間的值為3。此例若用平均濾波,視窗也是取5,那麼平均濾波輸出為。因此平均濾波的一般輸出為:

2-3)

對於二維序列進行中值濾波時,濾波視窗也是二維的,但這種二維視窗可以有各種不同的形狀,如線狀、方形、圓形、十字形、圓環形等。二維資料的中值濾波可以表示為

2-4)

在實際使用視窗時,視窗的尺寸一般先用再取逐漸增大,直到其濾波效果滿意為止。對於有緩變的較長輪廓線物體的影象,採用方形或圓形視窗為宜,對於包含尖頂角物體的影象,適宜用十字形視窗。使用二維中值濾波最值得注意的是保持影象中有效的細線狀物體。

與平均濾波器相比,中值濾波器從總體上來說,能夠較好地保留原影象中的躍變部分。

2.2 中值濾波的去噪過程

本文給定的影象為二維訊號,在訊號中加入指定的椒鹽雜訊,然後利用中值濾波進行去噪。雖然有關中值濾波的函式是在matlab函式庫中已經提供,但在影象處理中利用中值濾波去除影象中的椒鹽雜訊雜訊卻是一種有效的方法,利用中值濾波函式去除影象中的雜訊過程如下:

(1)使用imread()讀入原始的彩色影象。

(2)因為使用中值濾波器只能對灰度影象進行處理,所以利用rgb2gray()將彩色影象轉化為灰度影象。

(3)用imnoise()在灰度影象中加入椒鹽雜訊。

(4)利用medfilt2()函式進行中值濾波,並在matlab環境下執行。

相應的matlab主程式如下:

clcclear all;

close all;

img=imread('3_');

img_0=rgb2gray(img);

img_1=imnoise(img_0,'salt & pepper',0.02);

img_2=medfilt2(img_1);

subplot(2,2,1);imshow(img);title('原始影象');

subplot(2,2,2);imshow(img_0);title('灰度影象');

subplot(2,2,3);imshow(img_1);title('加入雜訊後影象');

subplot(2,2,4);imshow(img_2);title('中值濾波後影象');

matlab自編的均值濾波、中值濾波、高斯濾波影象處理函式。

%自編的均值濾波函式。x是需要濾波的影象,n是模板大小(即n×n)

function d=**efilt(x,n)

a(1:n,1:n)=1; %a即n×n模板,元素全是1

p=size(x); %輸入影象是p×q的,且p>n,q>n

x1=double(x);

x2=x1;

%a(a:b,c:d)表示a矩陣的第a到b行,第c到d列的所有元素

for i=1:p(1)-n+1

for j=1:p(2)-n+1

c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中從(i,j)開始的n行n列元素與模板相乘

s=sum(sum(c)); %求c矩陣(即模板)中各元素之和

x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %將模板各元素的均值賦給模板中心位置的元素

endend%未被賦值的元素取原值

d=uint8(x2);

%自編的中值濾波函式。x是需要濾波的影象,n是模板大小(即n×n)

function d=midfilt(x,n)

p=size(x); %輸入影象是p×q的,且p>n,q>n

x1=double(x);

x2=x1;

for i=1:p(1)-n+1

for j=1:p(2)-n+1

c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中從(i,j)開始的n行n列元素,即模板(n×n的)

e=c(1,:); %是c矩陣的第一行

for u=2:n

e=[e,c(u,:)]; %將c矩陣變為乙個行矩陣

endmm=median(e); %mm是中值

x2(i+(n-1)/2,j+(n-1)/2)=mm; %將模板各元素的中值賦給模板中心位置的元素

endend%未被賦值的元素取原值

d=uint8(x2);

%自編的高斯濾波函式,s是需要濾波的圖象,n是均值,k是方差

function d=gaussfilt(k,n,s)

img = double(s);

n1=floor((n+1)/2);%計算圖象中心

for i=1:n

for j=1:n

b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*k))/(4*pi*k);

endend%生成高斯序列b。

img1=conv2(img,b,'same'); %用生成的高斯序列卷積運算,進行高斯濾波

d=uint8(img1);

%此為程式主檔案,包含主要功能單元,以及對子函式進行呼叫

try%實驗步驟一:彩色、灰度變換

h=imread(''); %讀入彩色**

c=rgb2gray(h); %把彩色**轉化成灰度**,256級

figure,imshow(c),title('原始圖象'); %顯示原始圖象

g=imnoise(c,'gaussian',0.1,0.002); %加入高斯雜訊

figure,imshow(g),title('加入高斯雜訊之後的圖象'); %顯示加入高斯雜訊之後的圖象

%實驗步驟二:用系統預定義濾波器進行均值濾波

n=input('請輸入均值濾波器模板大小\n');

a=fspecial('**erage',n); %生成系統預定義的3x3濾波器

y=filter2(a,g)/255; %用生成的濾波器進行濾波,並歸一化

figure,imshow(y),title('用系統函式進行均值濾波後的結果'); %顯示濾波後的圖象

%實驗步驟三:用自己的編寫的函式進行均值濾波

y2=**efilt(g,n); %呼叫自編函式進行均值濾波,n為模板大小

figure,imshow(y2),title('用自己的編寫的函式進行均值濾波之後的結果'); %顯示濾波後的圖象

%實驗步驟四:用matlab系統函式進行中值濾波

n2=input('請輸入中值濾波的模板的大小\n');

y3=medfilt2(g,[n2 n2]); %呼叫系統函式進行中值濾波,n2為模板大小

figure,imshow(y3),title('用matlab系統函式進行中值濾波之後的結果'); %顯示濾波後的圖象

%實驗步驟五:用自己的編寫的函式進行中值濾波

y4=midfilt(g,n2); %呼叫自己編寫的函式進行中值濾波,

figure,imshow(y4),title('用自己編寫的函式進行中值濾波之後的結果');

%實驗步驟六:用matlab系統函式進行高斯濾波

n3=input('請輸入高斯濾波器的均值\n');

k=input('請輸入高斯濾波器的方差\n');

a2=fspecial('gaussian',k,n3); %生成高斯序列

y5=filter2(a2,g)/255; %用生成的高斯序列進行濾波

figure,imshow(y5),title('用matlab函式進行高斯濾波之後的結果'); %顯示濾波後的圖象

%實驗步驟七:用自己編寫的函式進行高斯濾波

y6=gaussfilt(n3,k,g); %呼叫自己編寫的函式進行高斯濾波,n3為均值,k為方差

figure,imshow(y6),title('用自編函式進行高斯濾波之後的結果'); %顯示濾波後的圖象

catch %捕獲異常

disp(lasterr); %如果程式有異常,輸出

end分享到搜狐微博

\*高斯雜訊去噪

[thr,sorh,keepapp] = ddencmp('den','wv',x);

x1= wdencmp('gbl',j1,'sym4',2,thr,sorh,keepapp);

%x為要處理得原始影象

%x1為處理後的影象

電源濾波器的作用及原理

電源濾波器就是對電源線中特定頻率的頻點或該頻點以外的頻率進行有效濾除的電器裝置。電源濾波器的功能就是通過在電源線中接入電源濾波器,得到乙個特定頻率的電源訊號,或消除乙個特定頻率後的電源訊號。利用電源濾波器的這個特性,可以將通過電源濾波器後的乙個方波群或復合噪波,變成乙個特定頻率的正弦波。工作原理 電...

基於MATLAB的影象平滑演算法實現及應用

1.3 影象雜訊 一幅影象在獲取和傳輸等過程中,會受到各種各樣雜訊的干擾,其主要 有三 一為在光電 電磁轉換過程中引入的人為雜訊 二為大氣層電 磁 暴 閃電 電壓 浪湧等引起的強脈衝性衝激雜訊的干擾 三為自然起伏性雜訊,由物理量的不連續性或粒子性所引起,這類雜訊又可分成熱雜訊 散粒雜訊等。一般在影象...

直流電源濾波電路及電子濾波器原理分析

山西陽泉市交通職業學校閆愷福 整流電路是將交流電變成直流電的一種電路,但其輸出的直流電的脈動成分較大,而一般電子裝置所需直流電源的脈動係數要求小於0 01 故整流輸出的電壓必須採取一定的措施 盡量降低輸出電壓中的脈動成分,同時要盡量儲存輸出電壓中的直流成分,使輸出電壓接近於較理想的直流電,這樣的電路...