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:
Traslacion.......
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.
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
0