?? polartrans.m
字號:
% POLARTRANS - Transforms image to polar coordinates%% Usage: pim = polartrans(im, nrad, ntheta, cx, cy, linlog, shape)%% Arguments:% im - image to be transformed.% nrad - number of radius values.% ntheta - number of theta values.% cx, cy - optional specification of origin. If this is not% specified it defaults to the centre of the image.% linlog - optional string 'linear' or 'log' to obtain a% transformation with linear or logarithmic radius% values. linear is the default.% shape - optional string 'full' or 'valid'% 'full' results in the full polar transform being% returned (the circle that fully encloses the original% image). This is the default.% 'valid' returns the polar transform of the largest% circle that can fit within the image. %% Returns pim - image in polar coordinates with radius increasing% down the rows and theta along the columns. The size% of the image is nrad x ntheta. Note that theta is% +ve clockwise as x is considered +ve along the% columns and y +ve down the rows. %% When specifying the origin it is assumed that the top left pixel has% coordinates (1,1).% Copyright (c) 2002 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.% December 2002% November 2006 Correction to calculation of maxlogr (thanks to Chang Lei)function pim = polartrans(im, nrad, ntheta, cx, cy, linlog, shape)[rows, cols] = size(im);if nargin==3 % Set origin to centre. cx = cols/2+.5; % Add 0.5 because indexing starts at 1 cy = rows/2+.5;endif nargin < 7, shape = 'full'; endif nargin < 6, linlog = 'linear'; endif strcmp(shape,'full') % Find maximum radius value dx = max([cx-1, cols-cx]); dy = max([cy-1, rows-cy]); rmax = sqrt(dx^2+dy^2);elseif strcmp(shape,'valid') % Find minimum radius value rmax = min([cx-1, cols-cx, cy-1, rows-cy]);else error('Invalid shape specification');end% Increments in radius and thetadeltatheta = 2*pi/ntheta;if strcmp(linlog,'linear') deltarad = rmax/(nrad-1); [theta, radius] = meshgrid([0:ntheta-1]*deltatheta, [0:nrad-1]*deltarad); elseif strcmp(linlog,'log') maxlogr = log(rmax); deltalogr = maxlogr/(nrad-1); [theta, radius] = meshgrid([0:ntheta-1]*deltatheta, exp([0:nrad-1]*deltalogr));else error('Invalid radial transformtion (must be linear or log)');endxi = radius.*cos(theta) + cx; % Locations in image to interpolate datayi = radius.*sin(theta) + cy; % from. [x,y] = meshgrid([1:cols],[1:rows]);pim = interp2(x, y, double(im), xi, yi);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -