Il est pas tout à fait clair ce que vous essayez de faire, ce qui est la raison pour laquelle je fais mon exemple ...
donc donné une image, Je convertis les coordonnées pixel x/y de cartésiennes à polaires avec CART2POL.
Dans la première figure, je montre les emplacements des points, et dans la seconde, je trace à la fois l'image originale et celle avec des coordonnées polaires.
Notez que j'utilise la fonction WARP à partir de Image Processing Toolbox. Sous le capot, il utilise la fonction SURF/SURFACE pour afficher une image mappée en texture.
% 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
EDIT
Comme je l'ai dit à l'origine, la question est pas claire. Vous devez décrire la cartographie que vous voulez d'une manière bien définie ...
Pour un, vous devez penser à l'emplacement de l'origine avant de convertir en coordonnées polaires. L'exemple précédent suppose que l'origine est la base des axes à (0,0)
. Supposons que vous voulez prendre le centre de l'image (w/2,h/2)
comme origine, alors vous feriez ceci:
[X,Y] = meshgrid((1:w)-floor(w/2), (1:h)-floor(h/2));
avec le reste du code inchangé. Pour mieux illustrer l'effet, considérer une image source avec concentric circles tracée en coordonnées cartésiennes, et notez comment ils correspondent aux lignes droites en coordonnées polaires lors de l'utilisation du centre des cercles comme origine:
EDIT
Voici un autre exemple d'affichage d'une image en coordonnées polaires comme demandé dans les commentaires. Notez que nous effectuons la mise en correspondance dans le sens inverse 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
Encore une fois l'effet est meilleur spectacle si vous nourrissez une image d'entrée avec des lignes droites, et voir comment ils carte en coordonnées polaires (lignes verticales deviennent des cercles et des lignes horizontales deviennent des rayons émanant de l'origine):
Il est pas clair ce que vous êtes après. Pouvez-vous ajouter une description plus claire de ce que vous voulez. Par exemple: "pour chaque pixel (i, j) dans la nouvelle image, alors je veux ..." – Nzbuu
ce que je veux est d'écrire la fonction cart2pol avec mon propre code comme la réponse ci-dessous pas utiliser celui de matlab –