function g=QuiMedFil2(f)
g=f;
t=2;
[m,n]=size(f);
for i=2:m-1
for j=2:n-1
if(j==2)
A=f(i-1:i+1,j-1:j+1);
hist=imhist(A);
mdn=median(A(:));
%mdn=Med(f(i-1:i+1,j-1:j+1))+1;
L=find(f(i-1:i+1,j-1:j+1)<mdn);%-1
Ltmdn=length(L);
g(i,j)=mdn;%-1;
else
for k=t-1:t+1
hist(f(k,j-2)+1)=hist(f(k,j-2)+1)-1;
if(f(k,j-2))<mdn
Ltmdn=Ltmdn-1;
end
end
for k=t-1:t+1
hist(f(k,j+1)+1)=hist(f(k,j+1)+1)+1;
if(f(k,j+1))<mdn
Ltmdn=Ltmdn+1;
end
end
th=4;
while Ltmdn>th
mdn=mdn-1;
Ltmdn = Ltmdn-hist(mdn+1);
end
while (Ltmdn+hist(mdn+1))<=th
Ltmdn=Ltmdn+hist(mdn+1);
mdn=mdn+1;
end
g(i,j)=mdn;
end
end
t=t+1;%t-line;
end
======================================= =========================实现过程如下
rgb=imread('Figure1.JPG'); %此处通过matlab读入任何一幅图像
>> I=rgb2gray(rgb); %将图像灰度化
>> I=imresize(I,0.1); %若图像过大可进行适当调整,或省略此步
>> g=QuiMedFil2(I) %调用所编程序执行中值滤波快速算法
figure,imshow(I),figure,imshow(g) %显示原图像和滤波后的图像
=============================================================================== ===================================================
与传统中值滤波算法的同窗口的计算时间对比
快速算法略高于一般算法
=============================================================================== =====================================================菱形5*5中值滤波程序function g=MedFilRho(f)
g=f;
g=[];
[m,n]=size(f);
for i=3:(m-2)
for j=3:(n-2)
B=[f(i,j),f(i-2,j),f(i-1,j),f(i+1,j),f(i+2,j),f(i,j-1),f(i,j-2),f(i,j+1),f(i,j+2),f(i-1,j-1),f(i+1,j+1),f(i-1,j+1),f(i+1,j-1)];
g(i,j)=median(B);
end
end
备注:程序为原创,原文地址:
/walqxlqxaw/blog/item/aabb517f877e6f190dd7daad.ht ml。