传统的中值算法:就是对一个滑动窗矩阵取中值为矩阵中心位置的像素值。
%% 中值滤波
% @输入灰度图 A;滑动窗nXn
% @输出快速中值滤波后的图像b
function b = med_filt24(A,n)
l = n*n;
m=(l+1)/2;
b = A;
[w,h] = size(A);%得到图像的长和宽
for i = 1:w-(n-1)
for j=1:h-(n-1)%h表示的个数为可完整滤波的格子数
tmp1=b(i:i+(n-1),j:j+(n-1));%取出要滤波的n*n的方阵
tmp2=tmp1(:)';
for k = 1:m
for t = 1:l-k
if tmp2(t)>tmp2(t+1)
x=tmp2(t);
tmp2(t)=tmp2(t+1);
tmp2(t+1)=x;
end
end
end
b(i+(n-1)/2,j+(n-1)/2)=tmp2(m);
end
end
快速中值滤波:
%% 快速的中值滤波
% @输入灰度图 in;滑动窗nXn
% @输出快速中值滤波后的图像out
function out=Med_filte_Fastco(in, n)<