function g=gscale(f,varargin)
if length(varargin)==0
method='full8';
else method=varargin{1};
end
if strcmp(class(f),'double')&(max(f(:))>1 | min(f(:))<0)
f=mat2gray(f);
end
switch method
case 'full8'
g=im2uint8(mat2gray(double(f)));
case 'full16'
g=im2uint16(mat2gray(double(f)));
case 'minmax'
low = varargin{2};high = varargin{3};
if low>1 | low<0 |high>1 | high<0
error('Parameters low and high must be in the range [0,1]')
end
if strcmp(class(f),'double')
low_in=min(f(:));
high_in=max(f(:));
elseif strcmp(class(f),'uint8')
low_in=double(min(f(:)))./255;
high_in=double(max(f(:)))./255;
elseif strcmp(class(f),'uint16')
low_in=double(min(f(:)))./65535;
high_in=double(max(f(:)))./65535;
end
g=imadjust(f,[low_in high_in],[low high]);
otherwise
error('Unknown method')
end
函数gscale的语法为:
g = gscale(f, method, low, high)
其中,f是将标定的图像。method的有效值是‘full8’(默认)和‘full16’,‘full8’把输出标定为全范围[0,255],而'full16'把输出标定为全范围[0,65535].如果使用这两个值之一,参数low和high在这两种变换中被忽略。method的第三个参数有效值是‘minmax’,在这种情况下,必须提供其值在[0,1]范围内的参数low和high。选中‘minmax’时,灰度级被映射到范围[low,high]内。尽管这些值指定在[0,1]范围内,但程序本身会根据输入的类别做出适当的标定,然后将输出转为与输入相同的类。例如,若f是uint8类,且将'minmax'限定在[0,0.5]范围内,则输出图像同样为uint8类,其值在[0,128]范围内。如f是浮点型图像,且其值在[0,1]范围以外,则程序在运行之前会将其转换到[0,1]范围内。