Estoy tratando de convertir a los píxeles de una imagen de x-coordenada a coordenada polar y tengo un problema con ella, como yo lo quiero a el código de la función por mí mismo.
Aquí está el código que he hecho 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);
  • No está claro lo que está después. Se puede añadir un texto más claro de la descripción de lo que usted desea. Por ejemplo: «para cada píxel (i,j) en la nueva imagen, entonces quiero …»
  • lo que yo quiero es escribir la función cart2pol con mi propio código como la respuesta a no usar el uno en matlab
InformationsquelleAutor hinata chan | 2011-09-28

1 Comentario

  1. 15

    No queda muy claro lo que estamos tratando de hacer, por lo que yo estoy haciendo mi propio ejemplo…

    Así que dada una imagen, me estoy convirtiendo el píxel de coordenadas x/y de Cartesianas a polares con CART2POL.

    En la primera figura, estoy mostrando las ubicaciones de los puntos, y en la segunda, me la trama tanto de la imagen original y el uno con coordenadas polares.

    Nota que estoy utilizando el WARP función de la caja de herramientas de Procesamiento de Imagen. Bajo el capó, se utiliza el SURF/SUPERFICIE función para mostrar una textura de imagen mapeada.

    % 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

    Cómo cambiar una imagen de Cartesianas a coordenadas Polares en Matlab?
    Cómo cambiar una imagen de Cartesianas a coordenadas Polares en Matlab?


    EDITAR

    Como he indicado originalmente, la pregunta no es clara. Usted tiene que describir la asignación que desea en un bien definido…

    Para que usted necesita para pensar acerca de que el origen se encuentra antes de la conversión a coordenadas polares. El ejemplo anterior, suponga que el origen de los ejes de la base en (0,0). Supongamos que usted quiere tomar el centro de la imagen (w/2,h/2) como origen, entonces usted podrí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 la posibilidad de una fuente de la imagen con círculos concéntricos dibujado en coordenadas Cartesianas, y observe cómo se asignan a las líneas rectas en coordenadas polares cuando se utiliza el centro de los círculos como origen:

    Cómo cambiar una imagen de Cartesianas a coordenadas Polares en Matlab?


    EDITAR

    Aquí es otro ejemplo de cómo mostrar una imagen en coordenadas polares, como se pide en los comentarios. Tenga en cuenta que llevamos a cabo la asignación de la inversa de la dirección 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

    Cómo cambiar una imagen de Cartesianas a coordenadas Polares en Matlab?

    De nuevo el efecto es mejor mostrar si que se alimentan de una imagen de entrada con líneas rectas, y ver cómo ellos mapa en coordenadas polares (líneas verticales convertirse en círculos, líneas horizontales y convertirse en los rayos que emanan desde el origen):

    Cómo cambiar una imagen de Cartesianas a coordenadas Polares en Matlab?

    • necesito convertir sin el uso de cart2pol
    • se trata de una muy simplemente de la función: Substituya [theta rho] = cart2pol(X, Y); con theta = atan2(Y,X); y rho = sqrt(X.^2+Y.^2); como ya hizo en su pregunta (a pesar de que estamos trabajando con matrices no escalares)
    • ¿incluso probarlo? El ejemplo es completa como es… Tanto X y map vienen de clown.mat que se suministra con MATLAB; se carga una imagen indexada y su correspondiente mapa de color. Como para el de 360 rotación asignado en la imagen, he añadido otro ejemplo, véase la edición..
    • esto es muy básico, administración de imágenes en MATLAB… he actualizado el ejemplo, así que usted puede utilizar cualquier imagen que desees. Usted puede leer más acerca de los diferentes tipos de imagen aquí (indexado, escala de grises, truecolor): mathworks.com/help/matlab/creating_plots/image-types.html
    • Por favor, puedes añadir la fuente del colorido concéntricos de la fuente de imagen en el código de ejemplo. Realmente me quieren poner a prueba sus nuevas propuestas. – – – Usted también cambiar los símbolos de la capital X,Y a los pequeños x,y en el último ejemplo. ¿Hay alguna razón para que? – – ¿Puede por favor explicar por qué los toma s como el promedio de la altura y la anchura (=min(h,w)/2) en el último ejemplo. Creo que llevas el centro de la imagen.
    • aquí está el patrón de imágenes si quieres probar a sí mismo: círculos, vlines, hlines. Tenga en cuenta que el último ejemplo es una separada; la asignación se realiza en la dirección inversa, donde se inicia con rho/theta y obtener X/Y. La variable s aquí controla el max radio en rho, no es el centro, realmente se puede utilizar cualquier otro valor, pero el tamaño de la matriz producida por meshgrid depende de ella. Además, no necesariamente tiene que comenzar en 0 en que linspace.
    • Me extendió la polar ejes y la cuadrícula polar caso en el hilo aquí stackoverflow.com/q/40030096/54964
    • ¿sabes cómo hacer esto warp en python. Que necesitan para lograr la parcela en donde el origen está en el medio.
    • Ver esto para empezar: stackoverflow.com/q/17142979/97160 (nota de que el warp función crea una textura asignada en la superficie como en el ejemplo). También se puede utilizar paquetes como scikit-imagen y OpenCV que han espacial transformaciones y la reasignación de funciones.
    • gracias por el aviso aunque he podido resolver mi problema haciendo algunos ajustes en torno a algunas cosas. Ahora necesito reproyectar la imagen distorsionada en el original después de aplicar algunos filtros para el warped versión.
    • suena como que usted debe crear un nuevo y separado de Python pregunta. Siéntase libre de enlace a esta 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here