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