📄 all_medfilt2.m
字号:
function b=all_medfilt2(varargin)
[a,order,mn,padopt]=parse_inputs(varargin{:});
domain=ones(mn);
if order==0
if(rem(prod(mn),2)==1)
order=(prod(mn)+1)/2;
b=ordfilt2(a,order,domain,padopt);
else
order1=prod(mn)/2;
order2=order1+1;
b=ordfilt2(a,order1,domain,padopt);
b2=ordfilt2(a,order2,domain,padopt);
idx=find(b~=b2);
b(idx)=(double(b(idx))+double(b2(idx)))/2;
end
else
b=ordfilt2(a,order,domain,padopt);
end
if(isa(a,'uint8')&islogical(a))
b=logical(b);
end
function[a,order,mn,padopt]=parse_inputs(varargin)
if(nargin<1)
error('Too few inputs');
end
if(nargout>4)
error('Too many outputs');
end
a=varargin{1};
charLocation=[];
for k=2:nargin
if(ischar(varargin{k}))
charLocation=[charLocation k];
end
end
if(length(charLocation)>1)
error('Invalid input');
elseif(length(charLocation)==0)
padopt='zeros';
else
options={'indexed','zeros','symmetric'};
idx=strmatch(lower(varargin{charLocation}),options);
if(length(idx)==0)
error('Unknown option');
elseif(length(idx)>1)
error('Ambiguous option');
else
padopt=options{idx};
end
varargin(charLocation)=[];
end
if(strcmp(padopt,'indexed'))
if(isa(a,'double'))
padopt='ones';
else
padopt='zeros';
end
end
if(length(varargin)>1)
order=varargin{2};
else
order=0;
end
if(length(varargin)>2)
mn=varargin{3};
else
mn=[3 3];
end
order=min(prod(mn),order)
order=min(prod(mn),order)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -