parte - ¿Cómo cambiar una imagen de coordenadas Cartesianas a Polares en Matlab?
parte real complejo matlab (1)
No está muy claro lo que estás tratando de hacer, y es por eso que estoy haciendo mi propio ejemplo ...
Entonces, dada una imagen, estoy convirtiendo las coordenadas píxel x / y de cartesiano a polar con CART2POL .
En la primera figura, estoy mostrando las ubicaciones de los puntos, y en el segundo, trazo tanto la imagen original como la que tiene coordenadas polares.
Tenga en cuenta que estoy usando la función WARP desde la Caja de herramientas de procesamiento de imágenes. Debajo del capó, usa la función SURF / SURFACE para mostrar una imagen mapeada de textura.
% load image
load clown;
img = ind2rgb(X,map);
%img = imread(...); % or use any other image
% convert pixel coordinates from cartesian to polar
[h,w,~] = size(img);
[X,Y] = meshgrid(1:w,1:h);
[theta,rho] = cart2pol(X, Y);
Z = zeros(size(theta));
% show pixel locations (subsample to get less dense points)
XX = X(1:8:end,1:4:end);
YY = Y(1:8:end,1:4:end);
tt = theta(1:8:end,1:4:end);
rr = rho(1:8:end,1:4:end);
subplot(121), scatter(XX(:),YY(:),3,''filled''), axis ij image
subplot(122), scatter(tt(:),rr(:),3,''filled''), axis ij square tight
% show images
figure
subplot(121), imshow(img), axis on
subplot(122), warp(theta, rho, Z, img), view(2), axis square
EDITAR
Como dije originalmente, la pregunta no está clara. Debe describir la asignación que desea de una manera bien definida ...
Para empezar, debe pensar dónde se encuentra el origen antes de convertirlo en coordenadas polares. El ejemplo anterior supone que el origen es la base de los ejes en (0,0)
. Supongamos que quiere tomar el centro de la imagen (w/2,h/2)
como origen, luego debería hacer esto en su lugar:
[X,Y] = meshgrid((1:w)-floor(w/2), (1:h)-floor(h/2));
con el resto del código sin cambios. Para ilustrar mejor el efecto, considere una imagen fuente con círculos concéntricos dibujados en coordenadas cartesianas, y observe cómo se asignan a líneas rectas en coordenadas polares cuando se usa el centro de los círculos como origen:
EDITAR
Aquí hay otro ejemplo de cómo mostrar una imagen en coordenadas polares como se solicita en los comentarios. Tenga en cuenta que realizamos el mapeo en la dirección inversa pol2cart
:
[h,w,~] = size(img);
s = min(h,w)/2;
[rho,theta] = meshgrid(linspace(0,s-1,s), linspace(0,2*pi));
[x,y] = pol2cart(theta, rho);
z = zeros(size(x));
subplot(121), imshow(img)
subplot(122), warp(x, y, z, img), view(2), axis square tight off
De nuevo, el efecto es mejor si se muestra una imagen de entrada con líneas rectas, y se ve cómo se mapean en coordenadas polares (las líneas verticales se convierten en círculos y las horizontales se convierten en rayos que emanan del origen):
Estoy tratando de convertir los píxeles de una imagen de la coordenada xy a la coordenada polar y tengo un problema con ella, ya que quiero codificar la función por mi cuenta. Aquí está el código que hice hasta ahora:
function [ newImage ] = PolarCartRot
% read and show the image
image= imread(''1.jpg'');
%%imshow(image);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%change to polar coordinate
[x y z]= size(image);
r = sqrt(x*x+y*y);
theta = atan2(y,x);
for i =0:r
for j= 0:theta
newpixel = [i; j];
newImage(newpixel(1), newpixel(2),:) = image(i,j,:);
end
end
figure;
imshow (newImage);