1. 程式人生 > >Matlab數字影象亮度變換函式

Matlab數字影象亮度變換函式

function g = intrans(f, varargin) %INTRANS Performs intensity (gray-level) transformations. %   G = INTRANS(F, 'neg') computes the negative of input image F. % %   G = INTRANS(F, 'log', C, CLASS) computes C*log(1 + F) and %   multiplies the result by (positive) constant C. If the last two %   parameters are omitted, C defaults to 1. Because the log is used %   frequently to display Fourier spectra, parameter CLASS offers the %   option to specify the class of the output as 'uint8' or %   'uint16'. If parameter CLASS is omitted, the output is of the %   same class as the input. % %   G = INTRANS(F, 'gamma', GAM) performs a gamma transformation on %   the input image using parameter GAM (a required input).  % %   G = INTRANS(F, 'stretch', M, E) computes a contrast-stretching %   transformation using the expression 1./(1 + (M./(F + %   eps)).^E).  Parameter M must be in the range [0, 1].  The default %   value for M is mean2(im2double(F)), and the default value for E %   is 4. % %   For the 'neg', 'gamma', and 'stretch' transformations, double %   input images whose maximum value is greater than 1 are scaled %   first using MAT2GRAY.  Other images are converted to double first %   using IM2DOUBLE.  For the 'log' transformation, double images are %   transformed without being scaled; other images are converted to %   double first using IM2DOUBLE. % %   The output is of the same class as the input, except if a %   different class is specified for the 'log' option. %   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins %   Digital Image Processing Using MATLAB, Prentice-Hall, 2004 %   $Revision: 1.7 $  $Date: 2003/10/13 00:45:53 $ % Verify the correct number of inputs. error(nargchk(2, 4, nargin)) % Store the class of the input for use later. classin = class(f); % If the input is of class double, and it is outside the range % [0, 1], and the specified transformation is not 'log', convert the % input to the range [0, 1]. if strcmp(class(f), 'double') & max(f(:)) > 1 & ...       ~strcmp(varargin{1}, 'log')    f = mat2gray(f); else % Convert to double, regardless of class(f).    f = im2double(f); end % Determine the type of transformation specified. method = varargin{1}; % Perform the intensity transformation specified.    switch method case 'neg'    g = imcomplement(f); case 'log'    if length(varargin) == 1        c = 1;    elseif length(varargin) == 2        c = varargin{2};    elseif length(varargin) == 3       c = varargin{2};       classin = varargin{3};    else       error('Incorrect number of inputs for the log option.')    end    g = c*(log(1 + double(f))); case 'gamma'    if length(varargin) < 2       error('Not enough inputs for the gamma option.')    end    gam = varargin{2};    g = imadjust(f, [ ], [ ], gam); case 'stretch'    if length(varargin) == 1       % Use defaults.       m = mean2(f);        E = 4.0;              elseif length(varargin) == 3       m = varargin{2};        E = varargin{3};    else error('Incorrect number of inputs for the stretch option.')    end    g = 1./(1 + (m./(f + eps)).^E); otherwise    error('Unknown enhancement method.') end % Convert to the class of the input image. g = changeclass(classin, g);