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