Software Realizar un algoritmo que gire la imagen 360º con animación en pausas de 10º
Enviado por Vane Chulde • 11 de Junio de 2017 • Apuntes • 557 Palabras (3 Páginas) • 162 Visitas
CORRECCION PRUEBA
EJERCICIO 1
- Declaración del problema
Realizar un algoritmo que gire la imagen 360º con animación en pausas de 10º
- Teoria
Para la resolucion de este ejercicio vamos a necesitar calcular una matriz de zeros en la que sabemos va a alcanzar la imagen mientras se vaya rotando, lo haremos utilizando el siguiente principio.
[pic 1]
[pic 2]
2[pic 3]
[pic 4]
[pic 5][pic 6]
[pic 7]
1[pic 8]
[pic 9][pic 10]
L1= cn=(ceil(filas*abs(sind(angulo)) + columnas*abs(cosd(angulo))));
L2= fn=(ceil(filas*abs(cosd(angulo)) + columnas*abs(sind(angulo))));
Creamos esta matriz con este numero de columnas y filas.
Luego necesitamos calcular el centro original de la imagen como también el nuevo centro respecto al vamos a rotar la imagen.
Para cada calculo aplicamos la función ceil que nos permitirá redondear el numero al entero mas cercano.
Con dos lazos for vamos recorriendo la matriz de zeros creada para pasar pixel a pixel la imagen leida mientras se va rotando.
Colocamos el X y Y nuevos.
x=ceil((e-Xn)*(cosd(angulo)) + (d-Yn)*(sind(angulo)));
y=ceil(-(e-Xn)*(sind(angulo)) + (d-Yn)*(cosd(angulo)));
Con un condicional pasamos pixel a pixel a la imagen si cumplen ciertas condiciones necesarias:
(x>=1 && y>=1 && x
- Simulacion
clc, clear all, close all
%Animación de giro de una imagen cada 10º
%Leyendo la imagen y mostrándola
I = im2double(imread('fruits.jpg'));
figure
imshow(I)
%Obtengo las dimensiones de la imagen leída
[filas columnas z]=size(I);
for i=0:10:360
angulo=i;
fn=(ceil(filas*abs(cosd(angulo)) + columnas*abs(sind(angulo))));
cn=(ceil(filas*abs(sind(angulo)) + columnas*abs(cosd(angulo))));
C =zeros([fn cn 3]);
%Medio de la imagen leída
Xo=ceil(filas/2);
Yo=ceil(columnas/2);
%Medio hipermatriz de zeros
Xn=ceil(fn/2);
Yn=ceil(cn/2);
%Recorro pixel a pixel la hipermatriz de zeros y copio allí los pixeles
%de la imagen leída
for e=1:1:fn
for d=1:1:cn
x=ceil((e-Xn)*(cosd(angulo)) + (d-Yn)*(sind(angulo)));
y=ceil(-(e-Xn)*(sind(angulo)) + (d-Yn)*(cosd(angulo)));
x=(x+Xo);
y=(y+Yo);
if(x>=1 && y>=1 && x
...