Matlab的spfilt.m函数

该博客详细介绍了多种空间滤波器的实现,包括算术平均、几何平均、调和平均、反调和平均、中值、最大值、最小值和顺序平均滤波。通过`spfilt`函数,可以根据输入参数执行不同类型的滤波操作,如`amean`、`gmean`、`hmean`等。同时,博客还提供了一些辅助函数来处理滤波过程中的细节,如`tofloat`、` alphatrim`等。这些滤波器广泛应用于图像处理和计算机视觉领域。
摘要由CSDN通过智能技术生成

function f=spfilt(g,type,varargin)
%spfilt执行线性和非线性的空间滤波器,g为原图像,type为滤波器类型,
[m,n,Q,d]=processInputs(varargin{:});
%开始执行滤波
switch type
case ‘amean’%算数平均滤波
w=fspecial(‘average’,[m n]);
f=imfilter(g,w,‘replicate’);
case ‘gmean’%几何平均滤波
f=gmean(g,m,n);
case ‘hmean’%调和平均滤波
f=harmean(g,m,n);
case ‘chmean’%反调和平均滤波,Q的默认值是1.5
f=chmean(g,m,n,Q);
case ‘median’%中值滤波
f=medfilt2(g,[m n],‘symmetric’);
case ‘max’%最大值滤波
f=ordfilt2(g,mn,ones(m,n),‘symmetric’);
case ‘min’%最小值滤波
f=ordfilt2(g,1,ones(m,n),‘symmetric’);
case ‘midpoint’%中值滤波
f1=ordfilt2(g,1,ones(m,n),‘symmetric’);
f2=ordfilt2(g,m
n,ones(m,n),‘symmetric’);
f=imlincomb(0.5,f1,0.5,f2);
case ‘atrimmed’%顺序平均值滤波
f=alphatrim(g,m,n,d);
otherwise
error(‘Unkown filter type.’)
end

function f=gmean(g,m,n)
[g,revertClass]=tofloat(g); %tofloat在另一个.m函数
f=exp(imfilter(log(g),ones(m,n),‘replicate’)).^(1/m/n);
f=revertClass(f);

function f=harmean(g,m,n)
[g,revertClass]=tofloat(g);
f=m*n./imfilter(1./(g+eps),ones(m,n),‘replicate’);
f=revertClass(f);

function f=chmean(g,m,n,q)
[g,revertClass]=tofloat(g);
f=imfilter(g.^(q+1),ones(m,n),‘replicate’);
f=f./(imfilter(g.^q,ones(m,n),‘replicate’)+eps);
f=revertClass(f);

function f=alphatrim(g,m,n,d)
if(d<=0)||(d/2~=round(d/2))
error(‘d must be a positive,even integer’)
end
[g,revertClass]=tofloat(g);
f=imfilter(g,ones(m,n),‘symmetric’);
for k=1:d/2
f=f-ordfilt2(g,k,ones(m,n),‘symmetric’);
end
for k=(mn-d/2+1):mn
f=f-ordfilt2(g,k,ones(m,n),‘symmetric’);
end
f=f/(m*n-d);
f=revertClass(f);

function [m,n,Q,d]=processInputs(varargin)
m=3;
n=3;
Q=1.5;
d=2;
if nargin>0
m=varargin{1};
end
if nargin>1
n=varargin{2};
end
if nargin>2
Q=varargin{3};
d=varargin{3};
end

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值