天天看點

均值濾波、中值濾波【MATLAB】【圖像處理】

不放過每一個學習的機會,關注微信公衆号:AI算法愛好者

或掃描二維碼:

均值濾波、中值濾波【MATLAB】【圖像處理】

1. 均值濾波:即線性濾波,有:  a.鄰域平均, b. 權重平均兩種。

a. 鄰域平均:用一個像素鄰域平均值作為濾波結果,此時濾波器模闆的所系數都取1,為保證輸出圖仍在原來的灰階值範圍,在算得R後要将其除以系數總個數再進行指派,對3*3的模闆來說,在算得R後要将其除以系數9。

b. 權重平均:對同一尺寸的模闆,可對不同位置的系數采用不同的數值,一般認為離對應模闆中心像素近的像素應對濾波結果又較大貢獻,是以接近模闆中心的系數可比較大而模闆邊界附近的系數應比較小。

以3*3模闆為例:

f = imread('F:\matlab_ex\imageProcessing\wx.jpg');
n = 3;
template = ones(n);
[height, width] = size(f);
x1 = double(f);
x2 = x1;
for i = 1:height-n+1
    for j = 1:width-n+1
        c = x1(i:i+n-1,j:j+n-1).*template;
        s = sum(sum(c));
        x2(i+(n-1)/2,j+(n-1)/2) = s/(n*n);
    end
end

g = uint8(x2);
imshow(g);
           

2. 中值濾波:是一種非線性濾波方式,也靠模闆來實作。首先确定一個以某個像素為中心的鄰域,一般為方形鄰域,也可為圓形、十字形等,然後将鄰域中各像素的灰階值排序,取其中間值作為中心像素灰階的新值。

f = imread('F:\matlab_ex\imageProcessing\wx.jpg');
[height, width] = size(f);
x1 = double(f);
x2 = x1;
for i = 1:height-n+1
    for j = 1:width-n+1
        c = x1(i:i+n-1,j:j+n-1);
        e = c(1,:);
        for k = 2:n
            e = [e, c(k, :)];
        end
        tmp = median(e);
        x2(i+(n-1)/2,j+(n-1)/2) = tmp;
    end
end

g = uint8(x2);
imshow(g);
           

3. 使用自帶函數濾波:

try
%實驗步驟一:彩色、灰階變換
h=imread('<span style="font-family: Arial, Helvetica, sans-serif;">F:\matlab_ex\imageProcessing\wx.jpg</span><span style="font-family: Arial, Helvetica, sans-serif;">'); %讀入彩色圖檔</span>
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('average',n); %生成系統預定義的3X3濾波器
Y=filter2(A,g)/255;           %用生成的濾波器進行濾波,并歸一化
figure,imshow(Y),title('用系統函數進行均值濾波後的結果'); %顯示濾波後的圖象

%實驗步驟三:用Matlab系統函數進行中值濾波
n2=input('請輸入中值濾波的模闆的大小\n');
Y3=medfilt2(g,[n2 n2]);   %調用系統函數進行中值濾波,n2為模闆大小 
figure,imshow(Y3),title('用Matlab系統函數進行中值濾波之後的結果'); %顯示濾波後的圖象

%實驗步驟四:用matlab系統函數進行高斯濾波
n3=input('請輸入高斯濾波器的均值\n');
k=input('請輸入高斯濾波器的方差\n');
A2=fspecial('gaussian',k,n3);      %生成高斯序列
Y5=filter2(A2,g)/255;              %用生成的高斯序列進行濾波
figure,imshow(Y5),title('用Matlab函數進行高斯濾波之後的結果');    %顯示濾波後的圖象

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

以上

繼續閱讀