in trance

2
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'

Upload: mohammed-al-maaitah

Post on 11-Apr-2016

215 views

Category:

Documents


2 download

DESCRIPTION

image

TRANSCRIPT

Page 1: In Trance

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 methodcase 'neg' g = imcomplement(f);

case 'log'

Page 2: In Trance

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);