% REMAPIM - Remaps image intensity values % % Usage: newim = remapim(im, x, y, rescale) % \ % optional % Arguments % im - Image to be transformed. % x,y - Coordinates of spline control points that define the % mapping function. These coordinates are in the range % 0-1 and are typically obtained experimentally via the % function GREYTRANS % rescale - An optional flag (0 or 1) indicating whether image % values should be normalised to the range 0-1. % This is only provided for speed when called % by GREYTRANS. By default the input image will % be normalised to the range 0-1. % % Image intensity values are remapped to new values via a mapping % function defined by a series of spline points. The mapping function is % defined over the range 0-1, accordingly the input image is normalised % to the range 0-1. The output image will also lie in this range. % Copyright (c) 2002-2003 Peter Kovesi % School of Computer Science & Software Engineering % The University of Western Australia % http://www.csse.uwa.edu.au/ % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % The Software is provided "as is", without warranty of any kind. % April 2002 - original version. % March 2003 - modified to work with colour images. function nim = remapim(im, x, y, rescale) if nargin < 4 rescale = 1; end if ndims(im)==3 % Assume we have a colour image hsv = rgb2hsv(im); % Apply remapping just to the value component hsv(:,:,3) = remap(hsv(:,:,3), x, y, rescale); nim = hsv2rgb(hsv); else % Assume we have a 2D greyscale image nim = remap(im, x, y, rescale); end % Internal function that does the work function nim = remap(im, x, y, rescale) if rescale im = normalise(im); end nim = spline(x,y,im); % Remap image values % clamp image values within bounds 0 - 1 gt0 = nim > 0; nim = nim.*gt0; % values < 0 become 0 lt1 = nim < 1; nim = nim.*lt1 + ~lt1; % values > 1 become 1