2013-03-20 12 views
5

Mam obraz, który przekonwertowałem na podwójną matrycę. Chcę przesunąć go w poziomie, ale nie jestem pewien, jak to zrobić. Próbuję manipulować pozycją, ale okazuje się, że manipuluję tylko kolorem.Jak wykonać poziome przesunięcie obrazu w MATLAB?

Czy istnieje sposób, aby zamiast tego podać odniesienie do położenia piksela, a następnie dodać stałą, aby wykonać przesunięcie?

Odpowiedz

2

Say obraz jest macierz A i chcesz zawinąć x kolumny po lewej:

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

Można użyć circshift wykonać okrągły przesunięcie, im = circshift(im, [vShift hShift]).

+0

działa to tylko wtedy, gdy zmiana ma wartość całkowitą. –

+0

Niecałkowitą wersję (chyba też) można zaimplementować, biorąc dwie najbliższe zmiany i interpolując je? – jeff

8

Korzystanie z Image Processing Toolbox, można zastosować 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, co [1 0 0; 0 1 0; 50 100 1] reprezentują? Czy to jest macierz transformacji? Czy przesuwa obraz o piksel, czy o inną jednostkę miary? – user2192778

+0

@ user2192778: reprezentuje macierz transformacji afinicznej z tylko komponentem translacyjnym: http://www.mathworks.com/help/images/performing-general-2-d-spatial-transformations.html#f12-31782. Wyraża się to w kategoriach domyślnego układu współrzędnych przestrzennych; zobacz tę stronę, aby uzyskać szczegółowe wyjaśnienie: http://www.mathworks.com/help/images/image-coordinate-systems.html – Amro

Powiązane problemy