中值濾波 MATLAB實現

2021-08-09 01:48:29 字數 1622 閱讀 3733



1、原理

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

實現**

clear all;

clc;

%影象進行中值濾波,並顯示影象

%讀進影象

[filename, pathname] = uigetfile(, '選擇原');

%沒有影象

if filename == 0

return;

endpicture = imread([pathname, filename]);

[m, n, z] = size(picture);

%轉換為灰度圖

if z>1

picture = rgb2gray(picture);

end%給影象加高斯雜訊

j=imnoise(picture,'gaussian',0,0.01);

%給影象加椒鹽雜訊

h = imnoise(picture,'salt & pepper',0.02);

%呼叫  median_filter( )  進行處理

result = median_filter(picture, 3);

% 顯示處理後的結果

figure(1)

subplot(1,4,1);

imshow(picture);

title('原');

subplot(1,4,2);

imshow(j);

title('高斯雜訊後的');

subplot(1,4,3);

imshow(h);

title('椒鹽雜訊後的');

subplot(1,4,4);

imshow(result);

title('中值濾波後');

//**儲存為

median_filter.m

function [ img ] = median_filter( picture, m )

%中值濾波

%輸入:picture:原圖,m:模板的大小3*3的模板,此時m=3

%輸出:img:中值濾波處理後的影象

n = m;

[ height, width ] = size(picture);

x1 = double(picture);% 將圖象中的資料型別從uint8轉換儲存為double型

x2 = x1;

for i = 1: height-n+1

for j = 1:width-n+1

mb = x1( i:(i+n-1),  j:(j+n-1) );%取出模板元素

mb = mb(:);%矩陣的元素以一列輸出

mm = median(mb);%取向量中值

x2( i+(n-1)/2,  j+(n-1)/2 ) = mm;%對中心元素賦值

end

end

img = uint8(x2);% 將圖象中的資料型別從double型轉換儲存為unit8型

end

3、實驗結果

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)

中值濾波 是一種非線性數字濾波器技術,用於降噪。理解 去乙個模板,可為3 3,5 5,n n 每次從影象中取出模板大小的矩陣,將所有元素排序,取中間值放入木板的中心位置,再還原到原圖中,以此類推掃瞄整個影象。可先對影象進行填充,填充函式 b padarray a,padsize,padval,dir...

自適應中值濾波及matlab實現

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