中值濾波(matlab)

2021-09-11 00:23:41 字數 1868 閱讀 3131

中值濾波:是一種非線性數字濾波器技術, 用於降噪。

理解:去乙個模板,可為3 * 3, 5 * 5,n * n…每次從影象中取出模板大小的矩陣,將所有元素排序,取中間值放入木板的中心位置,再還原到原圖中,以此類推掃瞄整個影象。

可先對影象進行填充,填充函式:

b = padarray(a,padsize,padval,direction)
注釋:功能:填充影象或填充陣列。

a:輸入影象;

b:填充後的影象;

padsize:填充的行數和列數,通常用[r ,c]來表示。

padval:表示填充方法。它的具體值和描述如下:

包括:

matlab中自帶的中值濾波函式:

b=medfilt2(x0,[n,n]);
x0:需要過濾的影象;

[n,n]:模板大小

注意:此函式用於二維中值濾波,通常先灰度處理。

另一種方法程式**

x=imread('g:\matlab\1.jpg');%需要過濾的影象

n=3; %模板大小

[height, width]=size(x); %獲取影象的尺寸(n小於的寬高)

figure;

imshow(x);%顯示原圖

% x = padarray(x,[3,3]); %對影象邊緣進行填充

x = imnoise(x,'salt & pepper'); %加入椒鹽雜訊

figure;

imshow(x); %顯示加入雜訊後的

x1=double(x); %資料型別轉換

x2=x1; %轉換後的資料賦給x2

for i=1:height-n+1

for j=1:width-n+1

c=x1(i:i+(n-1),j:j+(n-1)); %在x1中從頭取模板大小的塊賦給c

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

for u=2:n %將c中的其他行元素取出來接在e後使e為乙個行矩陣

e=[e,c(u,:)];

end

med=median(e); %取一行的中值

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

end

end

d=uint8(x2); %未被賦值的元素取原值

figure;

imshow(d); %顯示過濾

x0=rgb2gray(x); %灰度處理,灰度處理後的影象是二維矩陣

b=medfilt2(x0,[n,n]); %matlab中自帶值濾波函式

figure;

imshow(b); %顯示過濾後的灰度

結果截圖:

原圖:

加入椒鹽雜訊後的圖:

手寫程式濾波後:

自帶函式濾波:

中值濾波 MATLAB實現

1 原理 中值濾波能有效抑制雜訊。主要採用灰度值排序,把數字影象中一點的值用該點的乙個鄰域中各點值的中值代替,依次取代畫素中心點的灰度值,讓原本與周圍畫素灰度值相差比較大的畫素更改為與周圍的畫素值比較接近的值,從而消除孤立的雜訊點。它可以保護影象邊緣的同時去除雜訊。實現 clear all clc ...

MATLAB實現中值濾波演算法

m,n size x m表示行數 即高度 n表示列數 即寬度 x imnoise x,salt pepper 0.02 subplot 1,2,1 imshow x title 原圖 x1 double x x2 x1 此處的演算法缺點是未對邊界值做出改變 for i 1 m 3 1 for j 1...

自適應中值濾波及matlab實現

常規的中值濾波器,在雜訊的密度不是很大的情況下 根據經驗,雜訊的出現的概率小於0.2 效果不錯。但是當概率出現的概率較高時,常規的中值濾波處理後,仍然具有雜訊點,並丟失了細節和邊緣,效果不是很好。在模板視窗sxy定義的濾波器區域內定義如下變數 zmin min sxy 模板視窗sxy中的最小灰度值 ...