gusucode.com > Matlab脸部识别程序源码 > code/code/scale.m

    function B = scale(A, a0, a1, b0, b1)
%
% B = scale(A, a0, a1, b0, b1); rescale A by mapping [a0,a1] -> [b0,b1].
%     values below a0 are mapped to b0
%     values above a1 are mapped to b1
%     values between a0 and a1 are linearly mapped to the range b0, b1
%
%     The b arguments may be omitted in which case they default to 0 and 1
%     Specifying a0 = -Inf will select minimum value in A as a0
%     Specifying a1 = +Inf will select maximum value in A as a1
%     It is an error if a1 < a0.  
%
if (nargin <= 3) 
  b0 = 0.0;
  b1 = 1.0;
end
%
if (isinf(a0))
  a0 = min(min(A));
end
%
if (isinf(a1))
  a1 = max(max(A));
end
%
la = (A < a0);
ra = (A >= a0) & (A <= a1);
ua = (A > a1);
B = zeros(size(A));
B(la) = b0 .* ones(sum(sum(la)),1);
B(ua) = b1 .* ones(sum(sum(ua)),1);
if (a1 > a0)
  m = (b1 - b0) / (a1 - a0);
  n = (a1 * b0 - b1 * a0) / (a1 - a0);
  B(ra) = m * A(ra) + n;
elseif (a1 == a0)
  bb = (b0 + b1) / 2.0;
  B(ra) = bb .* ones(sum(sum(ra)),1);
else
  error('scale: parameter a1 must be >= a0')
end