Matlab - traslacion

   
Vista:

traslacion

Publicado por telne (11 intervenciones) el 03/03/2009 12:04:35
Hola,

Cómo se realiza la traslacion de una imagen?

rotacion=imrotate
escalado=resize
traslacion=??

muchisimas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:traslacion

Publicado por Angel (75 intervenciones) el 04/03/2009 12:58:16
Si por traslación quieres decir moverla de posición has de hacerlo como con un matriz cualquiera, moviendo los elementos x posiciones en horizontal e y en vertical.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por telne (11 intervenciones) el 05/03/2009 11:42:50
Muchas gracias angel,

Eso era lo que queria decir exactamente!!

me podria poner un ejemplo para verlo mas claro pra ver como podria mover los elementos de x y los de y?

muchas gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por Angel (75 intervenciones) el 05/03/2009 14:47:54
Esto es lo mio, supongamos que con la función IMREAD tu ya tienes la imagen almacenada en una matriz A, este ejemplo es independiente de si existe pala de colores o no.

desplazamientox=5;
desplazamientoy=3;
dimensiones=size(A);
B=zeros(dismensiones); %Matriz del tamaño de A pero solo de ceros

Voy a mover toda la imagen dentro de ella misma, dependiendode lo que quieras puedes hacerlo de un modo u otro.

for n=desplazamientox:dimensiones(1)
B(n)=A(n-desplazamientox+1)
end
for n=desplazamientoy:dimensiones(2)
B(n)=A(n-desplazamientoy+1)
end

Te aviso de antemano que aquí seguramente haya un error con os indices de la matriz,pero para hacerte una idea te vale, solo comprueba hasta que punto de la imagen llega y si desplaza tanto o no. En este caso al desplazar lo descubierto queda a 0, es decir a negro, eso tambien puedes modificarlo a tugusto, al igual que anidar los dos for, pero casi te da igual porque no supone un calculo numerico grande y por tanto es relativamente rápido
Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por telne (11 intervenciones) el 05/03/2009 15:05:32
Muchisimas gracias tio!!

eres la elite!!

me viene genial pal proyecto fin de carrera!!

gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por telne (11 intervenciones) el 05/03/2009 16:30:53
Un duda que me sale.He comprobado en el preogramita como, en efecto, la imagen se me desplaza,sin embargo no consigo visualizarla con el imshow ya ue me sale toda la pantalla en negro.a que crees ke puede ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por Angel (75 intervenciones) el 05/03/2009 20:57:00
posiblemente sea por los valores que se han introducido a 0, estos ceros por definición son int mientra tu imagen esta en otro formato, posiblemente debas preformatear esos valores nulos a los mismo, ahora no recuerdo, ¿son uint8? si es así haz:

B=uint8(B) antes de empezar a operar el desplazamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por telne (11 intervenciones) el 10/03/2009 10:34:42
Hola Ángel,

Mira se me sigue viendo la imagen en negro...y ya no sé que pobar.Se qué la traslación la hace porque lo he evaluado numéricamente pero me sale en negro la imagen incluso poniendo el uint(8);
¿Sabes donde podria estar el error?

im1=getimage(handles.ejes1);
Desplx=3;
Desply=3;

dimensiones=size(im1);
B=zeros(dimensiones);
B=uint8(B);

for n=Desplx:dimensiones(1);
B(n)=im1(n-Desplx+1);
end;
for n=Desply:dimensiones(2);
B(n)=im1(n-Desply+1);
end;

figure;imshow(im1);
figure;imshow(B);

muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por Angel (75 intervenciones) el 13/03/2009 16:48:55
Probemos una cosa, si no funciona enviame el codigo completo al correo electronico y te lo miro, por lo que veo parece que esta bien, salvo un sitio donde puede estar el error, y es que has creado B como int8 pero despues operas con ella, la opción es probar a pasarla de nuevo a int8 antes de dibujar, no debería dar poblema porque estas asignando un uint8 encima de otro uint8 pero es una opción.

im1=getimage(handles.ejes1);
Desplx=3;
Desply=3;

dimensiones=size(im1);
B=zeros(dimensiones);
B=uint8(B);

for n=Desplx:dimensiones(1);
B(n)=im1(n-Desplx+1);
end;
for n=Desply:dimensiones(2);
B(n)=im1(n-Desply+1);
end;

B=uint8(B);

figure;imshow(im1);
figure;imshow(B);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por telne (11 intervenciones) el 15/03/2009 12:45:29
Ya me funciono correctamente!!


im1=imread('figura.jpg');
figure;imshow(im1)
Desplx=10;
Desply=10;
dimensiones=size(im1);
B=zeros(dimensiones);
B=uint8(B);

for i=1:dimensiones(1)-Desply
for j=1:dimensiones(2)-Desplx
B(i,j+Desplx)=im1(i+Desply,j);
end
end

figure;imshow(B);

Y ya la ultima cosa:

mi tutor quiere que haga también un "rotacion" de la imagen y un "escalado", pero sin ayuda de las funciones propias de matlab sabiendo que:

traslacion: x'=x+Ax,
y'=y+Ay,

rotacion: x'=x+y*sen(alfa),
y'=y-x*cos(alfa),

escalado: x'=x*c
y'=y*c

muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por Angel (75 intervenciones) el 16/03/2009 10:09:47
El escalado es facil, solo has de tener en cuenta que si haces un aumento tienes muestras intermedias, lo que se suele hacer normalemente no es interpolar, que seria lo que mejores resultados da sino copiar el valor anterior

Lo miro y te escribo mañana, se me ha desconfigurado el teclado y no encuentro signo alguno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por Karla Palma (3 intervenciones) el 08/12/2009 01:34:17
Hola angel.......

Fijate que tengo un problema, necesito rotar una imagen pero no por medio de interpolación, ¿Podrias a yudarme acerca de como realizar esto? Por favor, gracias...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:traslacion

Publicado por fismat (391 intervenciones) el 08/12/2009 14:18:13
Hola Carla,

Una imagen es una matriz de datos, asi que puedes usar la funcion rot90 de matlab para rotar la matriz en multiplos de 90 grados en sentido antihorario.

Saludos
Fismat
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar