Funzione per traslare immagine con Matlab
Ragazzi ho scritto il seguente codice in matlab per traslare un'immagine:
Però ottengo come output un'immagine che è traslata ma i bordi è come se fossero "spalmati"!!
per intenderci ottengo QUESTO.....ma come mai??Grazie a tutti!Per qualunque chiarimento nel codice fatemelo sapere.
I=imread(uigetfile('*.jpg','Choose a file:')); I=double(I); [m,n]=size(I); disp(size(I)); tx=input('scegli un valore di tx'); ty=input('scegli un valore di ty'); %figure,imshow(uint8(I)); T=[1 0 0;0 1 0;tx ty 1]; final=zeros(size(I)); for i=1:m for j=1:n translate=round([i j 1]*T); x=translate(1); y=translate(2); if x<=0 x=1; end if x>m x=255; end if y<=0 y=1; end if y>n y=255; end final(i,j)=I(x,y); end end figure,imshow(uint8(final));
Però ottengo come output un'immagine che è traslata ma i bordi è come se fossero "spalmati"!!
per intenderci ottengo QUESTO.....ma come mai??Grazie a tutti!Per qualunque chiarimento nel codice fatemelo sapere.
Risposte
Che cosa intendi esattamente con traslare un immagine? Ma il motivo per cui ottieni quell'effetto sono le seguenti righe:
Sono sbagliate per più di un motivo. Per prima cosa l'immagine potrebbe essere più piccola di 255x255. Immagino che i valori corretti avrebbero dovuto essere m ed n. Inoltre immagino che quello che volessi ottenere fosse:
if x<=0 x=1; end if x>m x=255; end if y<=0 y=1; end if y>n y=255; end
Sono sbagliate per più di un motivo. Per prima cosa l'immagine potrebbe essere più piccola di 255x255. Immagino che i valori corretti avrebbero dovuto essere m ed n. Inoltre immagino che quello che volessi ottenere fosse:
x = mod(x, m); y = mod(y, n);
Per traslazione intendo spostare l'immagine dati due valori tx e ty....Per intenderci se all'inizio ho QUESTO dopo aver richiamato lo script e aver assegnato i valori x e y ottengo QUESTO!!Penso che tutto ciò che c'è oltre i bordi dell'immagine o dovrei metterlo a 0 (così da avere nero attorno alla foto) oppure non dovrei proprio considerarlo!!Boo non lo so è da pochissimo che faccio script matlab e il corso è cominciato da 2 settimane!!
Comunque ho commentato la parte di codice che mi hai detto che è errata inserendo ciò che mi hai consigliato ma ogni volta, qualunque sia il valore che inserisco ottengo sempre un errore!!
Per esempio impostando tx a 21 e ty a 20:
Comunque ho commentato la parte di codice che mi hai detto che è errata inserendo ciò che mi hai consigliato ma ogni volta, qualunque sia il valore che inserisco ottengo sempre un errore!!
Per esempio impostando tx a 21 e ty a 20:
tx=21 ty=20 ??? Attempted to access I(22,0); index must be a positive integer or logical. Error in ==> PWD at 31 final(i,j)=I(x,y);
Ma tu stai cambiando gli indici, non i valori dell'immagine.. Dovresti allora scrivere qualcosa come:
if x <= 0 || x > m || y <= 0 || y > n final(i,j) = 0; else final(i,j) = I(x, y); end
QUESTO è il risultato finale......come faccio a fare la stessa cosa nelle colonne a destra dell'immagine???
Mi copieresti gli indici in un'immagine per vedere come sono messi? È strano che quel codice non aggiusti gli indici. Inoltre, che dimensione hanno le immagini (nel senso il risultato di size(I) e size(final) alla fine del codice).
Scusami se ieri non ho più risposto....comunque size(I) e size(final) hanno le stesse dimensioni proprio perché all'inizio del codice scrivo
final=zeros(size(I));Comunque entrambi hanno dimensione 512x512x3