2013-03-20 10 views
5

Ho un'immagine che ho convertito in una doppia matrice. Voglio spostarlo orizzontalmente, ma non sono sicuro di come farlo. Provo a manipolare la posizione, ma scopro che sto solo manipolando il colore.Come eseguire uno spostamento orizzontale di un'immagine in MATLAB?

C'è un modo per cui posso invece fare riferimento alla posizione dei pixel e quindi aggiungere una costante per eseguire uno spostamento?

risposta

2

Di 'la tua immagine è matrice A e si vuole avvolgere colonne x verso sinistra:

A = [A(x+1:end,:) A(1:x,:)]; 
5

si potrebbe usare circshift di effettuare uno spostamento circolare, im = circshift(im, [vShift hShift]).

+0

Questo funziona solo quando lo spostamento è di valore intero. –

+0

La versione non intera può (credo) essere implementata prendendo i due turni più vicini e interpolandoli? – jeff

8

Utilizzando l'Image Processing Toolbox, è possibile applicare un spatial transformation:

img = imread('pout.tif'); 
T = maketform('affine', [1 0 0; 0 1 0; 50 100 1]); %# represents translation 
img2 = imtransform(img, T, ... 
    'XData',[1 size(img,2)], 'YData',[1 size(img,1)]); 
subplot(121), imshow(img), axis on 
subplot(122), imshow(img2), axis on 

affine translation

+1

Amro, cosa fa [1 0 0; 0 1 0; 50 100 1] rappresentano? È una matrice di trasformazione? Muove l'immagine per il pixel, o con qualche altra unità di misura? – user2192778

+0

@ user2192778: rappresenta una matrice di trasformazione affine con solo un componente di traduzione: http://www.mathworks.com/help/images/performing-general-2-d-spatial-transformations.html#f12-31782. È espresso in termini di sistema di coordinate spaziali di default; vedere questa pagina per una spiegazione dettagliata: http://www.mathworks.com/help/images/image-coordinate-systems.html – Amro

Problemi correlati