中值滤波(median filter)为常用图像滤波算法,用于处理椒盐噪声且能够保持边界,由于是非线性操作,传统的做法即对局部区域进行排序取中值的方法,较为耗时。
一种快速的计算法,即使用直方图取中位数代替排序,且利用相邻元素的直方图变动较少更新直方图,这样迭代获得滤波结果, 如下:
Matlab源码如下:
clc;
clear all;
close all;
image=imread('lena.jpg');
image=rgb2gray(image);
image=double(image);
[ih,iw]=size(image);
%中值滤波器尺寸
fw=5;
fh=5;
hfw=floor(fw/2);
hfh=floor(fh/2);
%1.image pad,边界拓展
src=zeros(ih+fh-1,iw+fw-1);
for i=1-hfh:1:ih+hfh
row=i;
if(i<1)
row=1;
elseif(i>ih)
row=ih;
end
for j=1-hfw:1:iw+hfw
col=j;
if(j<1)
col=1;
elseif(j>iw)
col=iw;