⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 greytrans.m

📁 MATLAB Functions for Multiple View Geometry
💻 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 + -