4.16667

4.2 | 12 ratings Rate this file 51 Downloads (last 30 days) File Size: 46.95 KB File ID: #17933
image thumbnail

Polar To/From Rectangular Transform of Images

by Prakash Manandhar

 

08 Dec 2007 (Updated 17 Dec 2007)

converts rectangular image to polar and back

| Watch this File

File Information
Description

Conversion from Rectangular to Polar Image and back from Polar to Rectangular.

Image Processing Toolbox required only for loading and displaying images

V0.1 16 Dec 2007 (Created), Prakash Manandhar pmanandhar@umassd.edu

Required Products Image Processing Toolbox
MATLAB release MATLAB 7 (R14)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (14)
14 Jan 2008 Danny Luong

Thank you, it works great for me!

23 Jan 2008 anitha sumathi

requiring matlab codes for image normalization in iris recognition in image processing.

24 Jan 2008 Eleni Vasilaki

Thanks a lot.

19 Mar 2008 kinsam yen

thank you. i need this function

09 Apr 2009 Saif

Very nice work !! thanks !

08 Jun 2009 Petter

Lots of for-loops

06 Aug 2009 shoo chen

Thanks.

21 Jan 2010 Anna Saranti

Nice work! In PolarToIm.m at line 31 is it perhaps : y = (yi - On)/sy; instead of : y = (yi - On)/sx ?

02 Feb 2010 deepak lawrence  
22 Mar 2010 Raphael Attie

im2polar : this update will save you 1 order of magnitude of processing time, by vectorizing the code, and using interp2 (can even do better with mex file ba_interp in file exchange) :
Watch out, this might be the transpose of the original output.

rMin=0;
rMax=1;

[Mr Nr] = size(imR); % size of rectangular image
xRc = (Mr+1)/2; % co-ordinates of the center of the image
yRc = (Nr+1)/2;
sx = (Mr-1)/2; % scale factors
sy = (Nr-1)/2;

imP = zeros(M, N);

dr = (rMax - rMin)/(M-1);
dth = 2*pi/N;

% loop in radius and
r=rMin:dr:rMin+(M-1)*dr;
th=(0:dth:(N-1)*dth)';
[r,th]=meshgrid(r,th);
x=r.*cos(th);
y=r.*sin(th);
xR = x*sx + xRc;
yR = y*sy + yRc;
imP = interp2(imR, xR, yR); %interpolate (imR, xR, yR);

18 Oct 2010 Fernando VillafaƱe

For what serving the matrix (A) and how is obtained?.

function v = interpolate (imR, xR, yR)
    xf = floor(xR);
    xc = ceil(xR);
    yf = floor(yR);
    yc = ceil(yR);
    if xf == xc & yc == yf
        v = imR (xc, yc);
    elseif xf == xc
        v = imR (xf, yf) + (yR - yf)*(imR (xf, yc) - imR (xf, yf));
    elseif yf == yc
        v = imR (xf, yf) + (xR - xf)*(imR (xc, yf) - imR (xf, yf));
    else
       A = [ xf yf xf*yf 1
             xf yc xf*yc 1
             xc yf xc*yf 1
             xc yc xc*yc 1 ];
       r = [ imR(xf, yf)
             imR(xf, yc)
             imR(xc, yf)
             imR(xc, yc) ];
       a = A\double(r);
       w = [xR yR xR*yR 1];
       v = w*a;
    end

15 Sep 2011 Dhruv Agrawal

Is it correct to use different scaling factors for different axes? A circle in an image should transpose as a rectangle in polar image, but this makes it an ellipse. Could take the min of the scaling factors (sx,sy) for both, though, you might end leaving some portion of the image.

27 Mar 2012 Ruth Livingstone

Hi

Thank you, this code is great, but takes a little too long for my application. After reading the thread I wrote similar code which works ~12 times faster for the PolarToIm section. It doesn't have quite the same functionality but I thought I would share it here in case others are having the same problem

function imC = Polar2Im(imP,W,method)
%Polar2Im turns a polar image (imP) into a cartesian image (imC) of width W
%method can be: '*linear', '*cubic', '*spline', or '*nearest'.
imP(isnan(imP))=0;
w = round(W/2); [M N P]= size(imP);
xy = (1:W-w); [x y] = meshgrid(xy,xy);
n = round(N/4); rr = linspace(1,w,M);
W1 = w:-1:1; PM = [2 1 3;1 2 3;2 1 3;1 2 3];
W2 = w+1:2*w; nn = [1:n; n+1:2*n; 2*n+1:3*n; 3*n+1:N;];
w1 = [W1;W2;W2;W1]; aa = linspace(0,90*pi/180,n);
w2 = [W2;W2;W1;W1]; r = sqrt(x.^2 + y.^2);
a = atan2(y,x); imC= zeros(W,W,P);
for i=1:4 %turn each quarter into a cartesian image
    imC(w1(i,:),w2(i,:),:) = permute(interp2(rr,aa,imP(:,nn(i,:))',r,a,method),PM(i,:));
end
imC(isnan(imC))=0;

27 Mar 2012 Ruth Livingstone

Sorry, That looks a little unclear. Here it is again

function imC = Polar2Im(imP,W,method)
%Polar2Im turns a polar image (imP) into a cartesian image (imC) of width W
%method can be: '*linear', '*cubic', '*spline', or '*nearest'.
imP(isnan(imP))=0;
w = round(W/2);
xy = (1:W-w);
[M N P]= size(imP);
[x y] = meshgrid(xy,xy);
n = round(N/4);
rr = linspace(1,w,M);
W1 = w:-1:1;
PM = [2 1 3;1 2 3;2 1 3;1 2 3];
W2 = w+1:2*w;
nn = [1:n; n+1:2*n; 2*n+1:3*n; 3*n+1:N;];
w1 = [W1;W2;W2;W1];
w2 = [W2;W2;W1;W1];
aa = linspace(0,90*pi/180,n);
r = sqrt(x.^2 + y.^2);
a = atan2(y,x);
imC= zeros(W,W,P);
for i=1:4 %turn each quarter into a cartesian image
  imC(w1(i,:),w2(i,:),:)=permute(interp2(rr,aa,imP(:,nn(i,:))',r,a,method),PM(i,:));
end
imC(isnan(imC))=0;

Please login to add a comment or rating.
Updates
17 Dec 2007

Added inverse function and examples.

Tag Activity for this File
Tag Applied By Date/Time
geometric transformation Prakash Manandhar 22 Oct 2008 09:38:31
image registration Prakash Manandhar 22 Oct 2008 09:38:31
polar Prakash Manandhar 22 Oct 2008 09:38:31
rectangular Prakash Manandhar 22 Oct 2008 09:38:31
transform Prakash Manandhar 22 Oct 2008 09:38:31
polar Dinesh 07 Jul 2011 08:57:43

Contact us at files@mathworks.com