Matlab - Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

 
Vista:
Imágen de perfil de Lamt

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por Lamt (6 intervenciones) el 06/04/2018 23:32:31
Como se haria una rotacion y traslacion de una imagen
sin usar las funciones de matlab sino paso a paso.

Este es mi codigo para cada cosa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
%%Rotacion de la imagen por theta grados
%%Entradas:
%%I Imagen de entrada
%%theta - angulo de rotacion
%%Salidas:
%% G- Imagen de salida
%%Bandera - Imagenbinaria con los pixeles que tienen valor
function [ G, Bandera ] = rotacion( I, theta, k )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
%%calculos previos
factorMax=round(size(I,1)*k); %%factor que se suma al final
factorCorr = 0; %5recuperar coordenadas negativas
 
if (factorMax < 0)
    factorCorr=abs(factorMax)+1;
    G=zeros(size(I,1), size(I,2) + factorCorr, size(I,3));
else
    G=zeros(size(I,1), size(I,2) + factorMax, size(I,3));
end;
 
coords=zeros(size(I,1),size(I,2),2);
coseno=cosd(theta);
seno = sind(theta);
for i=1:size(I,1) %%renglones - y 444
    for j=1:size(I,2) %%columnas - x 512
        nx=(j*coseno)-(i*seno);
        ny=(j*seno)+(i*coseno);
        coords(i,j,1)=nx;
        coords(i,j,2)=ny;
    end
end
 
coords=round(coords);
minx=min(min(coords(:,:,1)));
miny=min(min(coords(:,:,2)));
if(minx <= 0)
    coords(:,:,1)=coords(:,:,1)+abs(minx)+1;
end
if (miny <= 0)
    coords(:,:,2)=coords(:,:,2)+abs(miny)+1;
end
 
maxx=max(max(coords(:,:,1)));
maxy=max(max(coords(:,:,2)));
%%asignacion a la nueva imagen
G= zeros(maxy, maxx, size(I,3));
Bandera =zeros(maxy, maxx);
for i=1:size(I,1) %%RENGLONES - Y 
    for j=1:size(I,2) %%columnas - x
        nr=coords(i,j,2);
        nc=coords(i,j,1);
        G(nr, nc,:) = I(i,j,:);
        Bandera(nr, nc) = 1; %%si tiene calculo
    end
end
G= uint8(G);
Bandera= uint8(Bandera);
end

Traslacion.......

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
%%Traslacion de la imagen en x y y
%%Entradas:
%%I- Imagen de entrada
%%dx Desplazamiento en x
%%dy - Desplazamiento en y
%%Salidas:
%%G - Imagen de salida
function [ G ] = traslacion( I, dx, dy )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
dx = round(dx);
dy = round(dy);
G = zeros(size(I,1) + dy, size(I,2)+ dx, size(I,3));
for i=1:size(I,1)
    nr=i+dy;
    if (nr>0)
        for j=1:size(I,2)
            nc=j+dx;
            if(nc>0)
 
            G(nr,nc,:)=I(i,j,:);
            end;
        end;
    end;
end;
G=uint8(G);
 
end

Podria ser una solo fucion, pero no se como se enlazarian adecuadamente para que a la hora de ejecutar me haga ambos sin ningun error.
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
Imágen de perfil de David Correa
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por David Correa (1094 intervenciones) el 07/04/2018 09:36:49
Hola!;

Los códigos que presentas lo veo bien, ya que en la rotación estas aplicando la ecuación de rotación de coordenadas y en otra estás agregando los incremento en los ejes X y Y. Ahora para unirlos, debes crear una función en la cual pases como argumentos de entradas la imagene, el angulo de rotación y los delta de cada coordenada, y aplicarlo en una sola ecuación.

Espero que sea de alguna ayuda.

Saludos
David Correa
[email protected]
[email protected]
Servicios de Programación Matlab
http://fismatlab.org​​
​​​ https://www.facebook.com/fismatlabperu​​
http://fismatlab.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Lamt

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por Lamt (6 intervenciones) el 07/04/2018 15:37:14
Hola gracias por responder
Lo que me comentas esta bien, ahora necesitaria ver como me queda haciendo el enlace de ambas.
Gracias de nueva cuenta!!!

Cualquier cosa te comento.

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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/04/2018 15:06:37
Primeramente darte las gracias por compartir tus conocimientos en el foro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
function rotacion_traslacion_de_imagenes(I, theta, k)
if nargin==0
    dx=52; dy=10;
theta=30; k=0.5;
I=imread('imagen_in.jpg') ;
figure(1); imshow(I)
end
[ G1, Bandera ] = rotacion( I, theta, k );
figure(2); imshow(G1)
[ G2 ] = traslacion( G1, dx, dy );
figure(3); imshow(G2)
end
 
 
%%Rotacion de la imagen por theta grados
%%Entradas:
%%I Imagen de entrada
%%theta - angulo de rotacion
%%Salidas:
%% G- Imagen de salida
%%Bandera - Imagenbinaria con los pixeles que tienen valor
function [ G, Bandera ] = rotacion( I, theta, k )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
%%calculos previos
factorMax=round(size(I,1)*k); %%factor que se suma al final
factorCorr = 0; %5recuperar coordenadas negativas
 
if (factorMax < 0)
    factorCorr=abs(factorMax)+1;
    G=zeros(size(I,1), size(I,2) + factorCorr, size(I,3));
else
    G=zeros(size(I,1), size(I,2) + factorMax, size(I,3));
end;
 
coords=zeros(size(I,1),size(I,2),2);
coseno=cosd(theta);
seno = sind(theta);
for i=1:size(I,1) %%renglones - y 444
    for j=1:size(I,2) %%columnas - x 512
        nx=(j*coseno)-(i*seno);
        ny=(j*seno)+(i*coseno);
        coords(i,j,1)=nx;
        coords(i,j,2)=ny;
    end
end
 
coords=round(coords);
minx=min(min(coords(:,:,1)));
miny=min(min(coords(:,:,2)));
if(minx <= 0)
    coords(:,:,1)=coords(:,:,1)+abs(minx)+1;
end
if (miny <= 0)
    coords(:,:,2)=coords(:,:,2)+abs(miny)+1;
end
 
maxx=max(max(coords(:,:,1)));
maxy=max(max(coords(:,:,2)));
%%asignacion a la nueva imagen
G= zeros(maxy, maxx, size(I,3));
Bandera =zeros(maxy, maxx);
for i=1:size(I,1) %%RENGLONES - Y 
    for j=1:size(I,2) %%columnas - x
        nr=coords(i,j,2);
        nc=coords(i,j,1);
        G(nr, nc,:) = I(i,j,:);
        Bandera(nr, nc) = 1; %%si tiene calculo
    end
end
G= uint8(G);
Bandera= uint8(Bandera);
end
 
 
 
 
%%Traslacion de la imagen en x y y
%%Entradas:
%%I- Imagen de entrada
%%dx Desplazamiento en x
%%dy - Desplazamiento en y
%%Salidas:
%%G - Imagen de salida
function [ G ] = traslacion( I, dx, dy )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
dx = round(dx);
dy = round(dy);
G = zeros(size(I,1) + dy, size(I,2)+ dx, size(I,3));
for i=1:size(I,1)
    nr=i+dy;
    if (nr>0)
        for j=1:size(I,2)
            nc=j+dx;
            if(nc>0)
 
            G(nr,nc,:)=I(i,j,:);
            end;
        end;
    end;
end;
G=uint8(G);
 
end

Copia todo y pega en un editor de matlab y guárdalo con el nombre que te muestra por defecto y ejecútalo.

1
>> rotacion_traslacion_de_imagenes

este es la ejecución por defecto.
también puedes ingresar datos I, theta, k

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lamt

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por Lamt (6 intervenciones) el 10/04/2018 02:23:11
Muchas gracias por tu aporte, me sirvió demasiado, 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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como rotar y trasladar una imagen en matlab sin sus funciones ya hechas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/05/2018 02:31:41
Mas bien gracias a ti por compartir en el foro.
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