中值滤波
中值滤波(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;
end
src(i+hfh,j+hfw)=image(row,col);
end
end
%2.滤波操作
th=(fw*fh)/2+1;%中值位置
dst=zeros(ih,iw);%输出
for row=1:ih
%2.1当前行先初始化直方图
imHist=zeros(256,1);
num=0;
for i=row:fh+row-1
for j=1:fw
imHist(src(i,j)+1)=imHist(src(i,j)+1)+1;%图像取值范围0~255
end
end
for i=0:255
num=imHist(i+1)+num;
if(num>th)
index=i;
break;
end
end
%2.2当前行第1个元素赋值
dst(row,1)=index;
%2.3当前行其他元素计算
for col=2:iw
%2.3.1更新直方图
for i=row:fh+row-1
imHist(src(i,col-1)+1)=imHist(src(i,col-1)+1)-1;%待输出统计元素
imHist(src(i,fw+col-1)+1)=imHist(src(i,fw+col-1)+1)+1;%待增加统计的元素
if(src(i,col-1)<=index)
num=num-1;
end
if(src(i,fw+col-1)<=index)
num=num+1;
end
end
%2.3.2寻找中值滤波结果
while(num>th)
num=num-imHist(index+1);
index=index-1;
end
while(num<th)
index=index+1;
num=num+imHist(index+1);
end
dst(row,col)=index;
end
end
figure,imshow(image,[]),title('src image');
figure,imshow(src,[]),title('pad image');
figure,imshow(dst,[]),title('filter image');
Reference
1.【图像处理】高效的中值滤波(bug 已修复)
2.中值滤波的快速算法
相关阅读
对于淘宝商家来说,在销售产品的时候会有很多的情况出现,如果宝贝比较多的话,那就会对产品不可能一一的照顾过来,所以会有滞销的产品出
所谓上星,其实主要指的就是卖家账号,因为对于淘宝卖家和买家账号,用来衡量其信誉的相关标准,是存在着一定差异的,卖家的主要是钻石、皇
excel作为功能强大的办公软件,是非常重要的。许多朋友在输入身份证号的时候,会遇到类似3.62202E+17的情况,苦恼不堪。如何迅速的在ex
我推荐新手用wordpress建站程序,该程序漏洞少且稳定,利于SEO优化,更重要的是你可以用wordpress搭建出你想要的任意样式的网站:个人博
QQ克隆,人气圈格外昌盛,沿用相当广泛,还特么免费滴。QQ空间人气圈,克隆好友无人不知,大致的方式就是克隆好友,而后删除好友(双向好友改