spfilt.m
来自「Matlab數位影音處理 影像方面的處理」· M 代码 · 共 73 行
M
73 行
function f =spfilt(g, type, m, n, parameter)
if nargin == 2
m=3;n=3;Q=1.5;d=2;
elseif nargin == 5
Q=parameter;d=parameter;
elseif nargin == 4
Q=1.5;d=2;
else
error('Wrong number of inputs.');
end
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'
f=charmean(g, m, n, Q);
case 'median'
f=medfilt2(g, [m n], 'symmetric');
case 'max'
f=ordfilt2(g, m*n, 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'
if (d<0) | (d/2 ~= round(d/2))
error('d must be a nonnegative, even integer.')
end
f=alphatrim(g, m, n, d);
otherwise
error('Unknown filter type.')
end
%-------------------------------------------------------------------------%
function f = gmean(g, m, n)
inclass= class(g);
g=im2double(g);
warning off;
f=exp(imfilter(log(g), ones(m, n), 'replicate')).^(1/m/n);
warning on;
f=changeclass(inclass, f);
%-------------------------------------------------------------------------%
function f = harmean(g, m, n)
inclass= class(g);
g=im2double(g);
f=m*n./imfilter(1./(g + eps), ones(m,n), 'replicate');
f=changeclass(inclass,f);
%-------------------------------------------------------------------------%
function f= charmean(g, m, n, q)
inclass= class(g);
g=im2double(g);
f=imfilter(g.^(g+1), ones(m,n), 'replicate');
f=f./ (imfilter(g.^q, ones(m,n), 'replicate') + eps);
f = changeclass(inclass,f);
%-------------------------------------------------------------------------%
function f= alphatrim(g, m, n, d)
inclass= class(g);
g=im2double(g);
f=imfilter(g, ones(m,n), 'symmetric');
for k=1:d/2
f=imsubtract(f, ordfilt2(g,k,ones(m,n), 'symmetric'));
end
for k=(m*n-(d/2)+1):m*n
f=imsubtract(f, ordfilt2(g,k,ones(m,n), 'symmetric'));
end
f=f/(m8n-d);
f=changeclass(inclass,f);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?