📄 greytrans.m
字号:
% GREYTRANS - Interactive greyscale manipulation of an image (RGB or greyscale)%% Usage: [newim, x, y] = greytrans(im, npts)%% Arguments% im - Image to be transformed% npts - Optional number of control points of the spline% defining the mapping function. This defaults to 4 if% not specified.%% Returns:% newim - The transformed image.% x,y - Coordinates of spline control points that define the% mapping function. These coordinates can be passed% to the function REMAPIM if you want to apply the% transformation to other images.%% 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. % Colour images are processed by first converting to HSV and then% remapping the Value component and then reconstructing new RGB values.% 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% March 2003 - modified to work with colour images.function [nim,x,y] = greytrans(im, npts) if nargin == 1 npts = 4; % default No of control points end if npts < 2 error('Number of control points must be > 2'); end x = [0:npts-1]/(npts-1); y = x; h = figure(1); clf% set(h,'Position',[150 100 800 550]), clf im = normalise(im); % rescale range 0 - 1 him1 = subplot('Position',[.025 .28 .45 .7]); him2 = subplot('Position',[.525 .28 .45 .7]); hcp = subplot('Position',[.35 .03 .25 .25]); subplot(him1), imshow(im), title('Original Image'); subplot(him2), imshow(im), title('Remapped Image'); subplot(hcp), plotcurve(x,y); if ndims(im)==3 % Assume we have a colour image colour = 1; hsv = rgb2hsv(im); v = hsv(:,:,3); % Extract the value - this is what we want to % remap else colour = 0; end fprintf('Manipulate the mapping curve by clicking with the left mouse button.\n'); fprintf('The closest control point is moved to the digitised location.\n'); fprintf('Click any other button to exit\n'); but = 1; while but==1 subplot(hcp), [xp yp but] = ginput(1); if but ~= 1 break; end ind = indexOfClosestPt(xp,yp,x,y); % Make sure control points cannot 'cross' each other and keep % x-coords of end points at 0 and 1 if ind > 1 & ind < npts if xp < x(ind-1) x(ind) = x(ind-1)+0.01; elseif xp > x(ind+1) x(ind) = x(ind+1)-0.01; else x(ind) = xp; end elseif ind == 1 x(ind) = 0; elseif ind == npts x(ind) = 1; end % Make sure you cannot put control points too high or low... if yp > 1 yp = 1; elseif yp < 0 yp = 0; end y(ind) = yp; subplot(hcp), plotcurve(x,y); if colour nv = remapim(v, x , y, 0); % Remap value component hsv(:,:,3) = nv; % Reconstruct colour image nim = hsv2rgb(hsv); else nim = remapim(im, x , y, 0); end subplot(him2), imshow(nim), title('Remapped Image'); drawnow end %----------------------------------------------------------------% Function to find control point closest to digitised locationfunction ind = indexOfClosestPt(xp,yp,x,y) dist = sqrt( (x-xp).^2 + (y-yp).^2 ); [d,ind] = min(dist);%----------------------------------------------------------------% Function to plot mapping curvefunction plotcurve(x,y) xx = [0:.01:1]; yy = spline(x,y,xx); plot(x, y,'ro'); hold on plot(xx,yy); xlabel('input grey value'); ylabel('output grey value'); title('Mapping Function'); axis([0 1 0 1]), axis square drawnow hold off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -