0% encontró este documento útil (0 votos)
18 vistas5 páginas

09 - Practica - Perspectiva 1

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas5 páginas

09 - Practica - Perspectiva 1

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

INSTITUTO POLITÉCNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERIA CAMPUS TLAXCALA

PROCESAMIENTO DIGITAL DE IMÁGENES

Nombre: Oscar Henry Sarmiento Sánchez y Ariadna Aguila Hernández


Especialidad: Inteligencia Artificial
Fecha de la práctica: 25/11/2023

Nombre de la práctica: Transformación perspectiva

Resultados de aprendizaje Propuestos (RAP’s)


Comprende los principios básicos de las transformaciones geométricas.
Analiza y aplica los algoritmos de escalado y traslación de imágenes.
Analiza y aplica el procedimiento de transformación perspectiva de una imagen.
Comprende la utilidad de los procedimientos de transformación geométrica aplicados a la
combinación de imágenes.
Comprueba de forma experimental las transformaciones afines en la combinación de imágenes de
objetos en entornos reales.

Objetivo
Adquirir un conocimiento integral sobre las transformaciones geométricas aplicadas a la
manipulación de imágenes. Incluyendo la comprensión de los principios fundamentales, la
aplicación de algoritmos para escalado y traslación, la destreza en la transformación perspectiva, la
apreciación de la utilidad en la combinación de imágenes y la validación experimental de
transformaciones afines en entornos reales.

Introducción
Las transformaciones geométricas son funciones que mapean puntos de un espacio a otros puntos
del mismo espacio. En el contexto del procesamiento de imágenes, las transformaciones
geométricas se utilizan para modificar la forma y el tamaño de una imagen.Las transformaciones
geométricas más comunes son:

• Traslación: Mueve todos los puntos de una imagen una cantidad fija en una dirección
determinada.
• Escalado: Cambia el tamaño de una imagen, manteniendo sus proporciones.
• Rotación: Gira una imagen alrededor de un punto central.
• Transformación perspectiva: Distorsiona una imagen, haciendo que los objetos que están
más lejos parezcan más pequeños.

Las transformaciones geométricas se pueden utilizar para combinar imágenes de manera efectiva.
Por ejemplo, las transformaciones geométricas se pueden utilizar para:

• Alinear imágenes para que se superpongan correctamente.


• Combinar imágenes de diferentes ángulos para crear una vista panorámica.
• Combinar imágenes de diferentes fuentes para crear una imagen composite.
Las transformaciones afines son un tipo de transformación geométrica que conserva las líneas
rectas. Las transformaciones afines se pueden utilizar para combinar imágenes de objetos en
entornos reales.

Desarrollo

1. Captura el fondo de una escena con un panel incluido. Marcar cuatro puntos de forma
cuadrangular en la hoja blanca
2. Obtén la imagen de un objeto de interés. Que sea de forma cuadrangular para evitar la
deformación de imágenes
3. Mediante un programa:
a. Carga las imágenes y obtén los puntos de las 4 esquinas.
from PIL import Image, ImageDraw

# Punto 1: Poner el panel donde irá el dibujo en la escena y capturar


una imagen desde el punto deseado.
escena = Image.open("hoja.jpg")

# Punto 2: Obtener la imagen de un objeto de interés.


objeto_interes = Image.open("gatito.png")

# Punto 4: Calibrar - Encontrar los 4 puntos del cuadrado marcado en


el rectángulo del panel
punto1 = (742, 1339)
punto2 = (1701, 1067)
punto3 = (1015, 2197)
punto4 = (2192, 1857)

b. Determina la escala y la traslación y aplícalas sobre la imagen.


# Punto 5: Determinar la escala y la traslación conforme al punto 4
y aplicarlas sobre la imagen del objeto.
escala = 1.2
traslacion = (50,100)

# Aplicar la escala y traslación


objeto_interes_transformado = objeto_interes.transform(
objeto_interes.size, Image.AFFINE, (escala, 0, traslacion[0],
0, escala, traslacion[1])
)

# Punto 6: Añadir sobre la imagen tomada el dibujo que se quiere


poner y mostrarla.
escena.paste(objeto_interes_transformado, punto1,
objeto_interes_transformado)
escena.show()
c. Determina la matriz de perspectiva y aplícala en la imagen.

d. Coloca la imagen sobre el panel y muestra la imagen resultado.


4. from PIL import Image
import numpy as np

def perspectiva_transform(imagen, puntos_origen, puntos_destino):


# Calcular la matriz de transformación
matriz_transformacion =
calcular_matriz_transformacion(puntos_origen, puntos_destino)

# Aplicar la transformación a la imagen


imagen_transformada = imagen.transform(
imagen.size, Image.PERSPECTIVE, matriz_transformacion,
Image.BICUBIC
)

return imagen_transformada

def calcular_matriz_transformacion(origen, destino):


A = []

for i in range(4):
x, y = origen[i]
u, v = destino[i]
A.append([x, y, 1, 0, 0, 0, -u*x, -u*y])
A.append([0, 0, 0, x, y, 1, -v*x, -v*y])

A = np.array(A)
B = np.array(destino).flatten()

# Resolver el sistema de ecuaciones lineales


transformacion = np.linalg.lstsq(A, B, rcond=None)[0]

return transformacion

# Punto 1: Poner el panel donde irá el dibujo en la escena y


capturar una imagen desde el punto deseado.
escena = Image.open("hoja.jpg")

# Punto 2: Obtener la imagen de un objeto de interés.


objeto_interes = Image.open("gatito.png")

# Punto 4: Calibrar - Encontrar los 4 puntos del cuadrado marcado


en el rectángulo del panel.
puntos_origen = [(0, 0), (objeto_interes.width, 0), (0,
objeto_interes.height), (objeto_interes.width,
objeto_interes.height)]
puntos_destino = [
(742, 1339), # p1
(1701, 1067), # p2
(1015, 2197), # p3
(2192, 1857) # p4
]

# Punto 5: Determinar la escala y la traslación conforme al punto 4


y aplicarlas sobre la imagen del objeto.
escala = 1.2
traslacion = (50, 100)

# Colocar "gatito" en el centro del recuadro


centro_x = sum(x for x, _ in puntos_destino) // len(puntos_destino)
centro_y = sum(y for _, y in puntos_destino) // len(puntos_destino)
punto1 = (centro_x - objeto_interes.width // 2, centro_y -
objeto_interes.height // 2)

# Aplicar la escala y traslación


objeto_interes_transformado_affine = objeto_interes.transform(
objeto_interes.size, Image.AFFINE, (escala, 0, traslacion[0],
0, escala, traslacion[1])
)

# Punto 5b: Aplicar la transformación de perspectiva


objeto_interes_transformado_perspective = perspectiva_transform(
objeto_interes_transformado_affine, puntos_origen,
puntos_destino
)

# Punto 6: Añadir sobre la imagen tomada el dibujo que se quiere


poner y mostrarla.
escena.paste(objeto_interes_transformado_perspective, punto1)
escena.show()
Conclusiones
En conclusión, el desarrollo del programa fue efectivo y logró llevar a cabo las transformaciones de
translación y escala de manera exitosa. Estos procesos demostraron ser funcionales y
proporcionaron resultados coherentes. Sin embargo, se encontraron dificultades al implementar la
transformación perspectiva, ya que la salida del programa solo presentó un rectángulo de color
negro en lugar de la representación esperada. Estas complicaciones en la aplicación de la
perspectiva constituyen un área de mejora para futuras actualizaciones, y se sugiere una revisión
detallada de este aspecto específico para optimizar la funcionalidad global del programa.

Bibliografía
TRANSFORMACIONES GEOMÉTRICAS SOBRE IMÁGENES DIGITALES - PDF descargar libre.
(s. f.). https://docplayer.es/11449377-Transformaciones-geometricas-sobre-imagenes-
digitales.html

También podría gustarte