Está en la página 1de 24

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

FACULTAD DE ESTUDIOS SUPERIORES ARAGÓN


INGENIERÍA EN COMPUTACIÓN

DR. ARTURO RODRÍGUEZ GARCÍA

Proyecto UNAM-DGAPA-PAPIME PE107420 Aplicación de modelos


matemáticos en Inteligencia
Artificial y Robótica: casos prácticos para la enseñanza de las matemáticas
en ingeniería en computación.

Semestre Cálculo Vectorial

Tema relacionado Plan 1279

Unidad 2 Derivadas parciales. Diferenciales exactas.


2.1.1 Interpretación geométrica para el caso de dos
variables

Nombre del caso Aplicaciones de las derivadas parciales en Visión


práctico Artificial: detección automática de bordes.

Trabajo realizado con el apoyo del Programa UNAM-DGAPA-PAPIME


PE107420

Integrantes del equipo


● Martinez Jimenez Luis Fernando

Objetivo
Diseñar un detector automático de bordes de imágenes aplicando el concepto de
derivadas parciales.
Introducción

¿Qué es visión artificial?


La capacidad de los equipos industriales para "ver" lo que están haciendo y tomar
decisiones rápidas en función de lo que ven. Los usos más comunes de la visión
artificial son la inspección visual y la detección de defectos, la colocación y medición
de piezas, además de identificar, clasificar y rastrear productos.

¿Por qué crees que resulta importante para un robot poder ver y entender su
entorno?
Las máquinas provistas de visión inteligente pueden utilizar el procesamiento del
lenguaje natural para leer etiquetas e interpretar señales. Los robots con visión
inteligente pueden comprender formas, calcular volúmenes, llenar a la perfección
cajas y camiones, e incluso contenedores de transporte, con el menor espacio
desperdiciado posible.

Este cambio, de máquinas capaces de automatizar tareas sencillas a máquinas


autónomas capaces de ver más allá de lo que el ojo humano puede ver, y de pensar
por sí mismas para optimizar elementos durante períodos más largos será lo que
impulse los nuevos niveles de innovación industrial.

La visión artificial aplicada al proceso de fabricación puede mejorar la calidad de los


productos y la eficiencia general del sistema, aumentar el rendimiento de su línea de
producción, reducir los costes de mano de obra y liberar al personal para que
puedan centrarse en trabajos de mayor valor.

¿Qué es la detección de bordes y cuál es su importancia?


La detección de bordes es un proceso basado en el análisis digital de imágenes que
detecta los cambios en la intensidad de luz. Estos cambios se pueden usar para
determinar la profundidad, tamaño, orientación y propiedades de la superficie dentro
de una muestra o pieza de trabajo.

La detección de bordes tiene el propósito de reducir y filtrar los datos de una


imagen, entregando su estructura de bordes representativa, lo que implica que en la
imagen probablemente hay gran cantidad de datos o píxeles no realmente
necesarios de analizar y que son solo ruido para la detección. Puede ser utilizada
para segmentar la imagen, reconocer objetos.

¿Qué es el modelo de color RGB?


El modelo RGB se basa en lo que se conoce como síntesis aditiva de color.
Empleando la luminosidad del rojo, el verde y el azul en diferentes proporciones, se
produce el resto de los colores.

¿Qué es una derivada parcial?


La derivada parcial de una función de varias variables es la derivada con respecto a
cada una de esas variables manteniendo las otras como constantes.

Definición del problema

La visión por computadora es un área de la Inteligencia Artificial en la que se


estudian algoritmos y estrategias que permiten a las máquinas ver y entender
algunos de los aspectos del mundo que les rodea.

En los últimos años han existido grandes avances, y actualmente existen muchos
algoritmos que permiten a las computadoras entender el contenido de imágenes y
videos. Por ejemplo, existen algoritmos para identificar los objetos que aparecen en
una imagen, o detectar la presencia de rostros en una fotografía, e incluso
reconocer su identidad.

En este proyecto estudiaremos uno de los problemas más básicos de la visión


artificial, que es la detección de bordes de una imagen. Esto consiste en identificar
la orilla o contorno de un objeto. Imagina que estás programando un robot para que
agarre una manzana. Sería de gran utilidad para el robot conocer el contorno de
dicha manzana.
Procedimiento

Dentro de este manual utilizaremos la siguiente imagen para realizar pruebas. Sin
embargo, tú puedes utilizar la que gustes, siempre y cuando sea de extensión jpg.

Como primer paso, deberás importar los siguientes módulos de Python mediante las
primeras cuatro líneas de código. Posteriormente, mediante plt.imread se realiza la
lectura de tu imagen.jpg, la cual se almacena con el nombre de imagen original. Es
necesario que coloques el archivo de tu imagen dentro de la misma carpeta donde
se encuentra el programa de Python. Mediante las dos últimas líneas de código se
muestra en pantalla la imagen, lo que nos da certeza que en este momento ya se
encuentra disponible para poder trabajar con ella.

Como siguiente paso, convertiremos la imagen de color a escala de grises. Para ello
emplearemos la función color.rgb2gray. Nuevamente mostramos en pantalla la
imagen resultante para estar seguros de que todo está funcionando de forma
correcta.
Para conocer el tamaño de la imagen podemos hacerlo de la siguiente forma. El
primer valor corresponde al ancho, y el segundo al largo.

El ancho y el largo de la imagen con la que estamos trabajando son dos datos que
nos serán de gran utilidad en los siguientes pasos. Por ello será conveniente
almacenarlas en dos variables por separado de la siguiente forma. Para verificar
que lo hicimos de forma correcta, imprimimos el valor de las variables.

En este momento resulta importante entender la estructura de la imagen con la que


estamos trabajando. La imagen es una matriz de 697 renglones y 1045 columnas.
Cada elemento de la matriz corresponde a un píxel, cuyo valor corresponde a la
intensidad de gris que le corresponde, con un valor en el intervalo [0,1], donde el 0
corresponde a negro y el 1 a blanco. Resulta importante tener cuidado que la
manera en que funcionan las coordenadas de la imagen no corresponde a como
estamos acostumbrados usualmente al sistema de ejes coordenados. Observe en la
siguiente figura cómo funciona en este caso. Asignaremos la variable x para
referirnos al renglón y la variable y para referirnos a la columna de la imagen.
Resulta también muy importante entender que la imagen es una función f(x,y) cuyas
variables independientes son el valor del renglón y columna de la matriz, y cuya
variable dependiente es el color correspondiente a dicho píxel en un intervalo [0,1].

Suponga que se tiene esta imagen y analizamos la columna y=2. Con el valor de
cada uno de los pixeles creamos una barra con una altura proporcional a su valor.
Recuerde que entre más negro sea el píxel, su valor es más cercano es cero y por
lo tanto tendremos una altura menor. Por otra parte, entre más blanco sea un píxel
su valor será más cercano a uno, y por lo tanto tendremos una altura mayor de su
correspondiente barra. En la siguiente figura vemos al lado derecho la
reconstrucción con barras de la columna y=2. Dicho de otra forma, vemos lo que
ocurre cuando mantenemos constante a la variable y, y únicamente trabajamos con
la variable x.

Si queremos calcular el incremento entre dos de estas barras consecutivas


haríamos lo siguiente:
Ya que estamos manteniendo a la variable y como constante, entonces en realidad
estamos calculando la derivada parcial con respecto a x de la función:

Para este problema en específico, si siempre calculamos el incremento entre pixeles


vecinos, entonces 𝑥𝑗 − 𝑥𝑖 = 1, por lo que se obtiene:

Finalmente, podemos expresar la derivada parcial con respecto a x por medio de 𝐷𝑥


y expresar a j en términos de i como j = i + 1 considerando que siempre estamos
trabajando con el píxel siguiente, con lo que obtenemos:

Con esta fórmula, podemos calcular el incremento en la intensidad entre un píxel y


otro. El signo que se genera en la derivada nos indicaría si el cambio se da de claro
a oscuro o viceversa. Sin embargo, para el problema de los bordes lo único que nos
interesa sería la magnitud, por lo que estaríamos calculando el valor absoluto.

Transformando las ideas anteriores en código obtenemos:


Siguiendo la misma lógica, ahora podemos calcular la derivada parcial con respecto
a y en cada uno de los puntos, manteniendo a x como constante:

Resultaría conveniente juntar la información de ambas derivadas parciales.


Procedemos a calcular el gradiente.

Los bordes de la imagen pueden resultar más visibles si invertimos los colores.
Actividades
Realiza los siguientes ejercicios de programación en el lenguaje de programación
que prefieras. En cada inciso, incluye en tu reporte el código realizado y el resultado
obtenido con al menos tres imágenes diferentes.

A partir de una imagen jpg muestra las imágenes resultantes de calcular la derivada
parcial con respecto a x, la derivada parcial con respecto a y, el gradiente, y el
gradiente con los colores invertidos .

IMAGEN 1 Derivada parcial con respecto a x


Derivada parcial con respecto a y Gradiente

Gradiente con los colores invertidos

IMAGEN 2 Derivada parcial con respecto a x


Derivada parcial con respecto a y Gradiente

Gradiente con los colores invertidos


IMAGEN 3 Derivada con respecto a x

Derivada parcial con respecto a y Gradiente

Gradiente con los colores invertidos


Continua con el desarrollo del código para lograr que en la imagen final se resalten
más los bordes, haciendo que tu imagen resultante esté formada únicamente por
pixeles blancos y negros.

IMAGEN 1 IMAGEN 2

IMAGEN 3
Diseña un programa que implemente la detección de bordes siguiendo la dirección
de la diagonal ↘.
IMAGEN 1 IMAGEN 2
IMAGEN 3
Diseña un programa que implemente la detección de bordes siguiendo la dirección
de la diagonal ↙.
IMAGEN 1 IMAGEN 2
IMAGEN 3

Reflexiones y conclusiones
¿Qué aplicaciones le podrías dar a la detección automática de bordes?
Se basa en muchas aplicaciones de visión por computador, como detección de
objetos, seguimiento y análisis de movimiento, reconstrucción 3D, conducción
autónoma, análisis de imagen a texto.
¿Qué sucedería si hubiéramos conservado el signo de las derivadas parciales?
Podríamos saber si el cambio se da de claro a oscuro o viceversa y los bordes no se
verían tan marcados .

¿Se te ocurre alguna aplicación de detección de bordes en la que sea de utilidad el


signo de derivada?
Determinar la profundidad, tamaño, orientación y propiedades de la superficie dentro
de una muestra o pieza de trabajo.

Fuentes de información
https://www.intel.es/content/www/es/es/manufacturing/what-is-machine-vision.html
https://definicion.de/rgb/
http://www4.ujaen.es/~satorres/practicas/practica3_vc.pdf
https://es.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/part
ial-derivative-and-gradient-articles/a/introduction-to-partial-derivatives

Comparación entre los 3 programas

IMAGEN 1

Dirección vertical y horizontal Dirección de la diagonal ↘

Dirección de la diagonal ↙
IMAGEN 2

Dirección vertical y horizontal Dirección de la diagonal ↘

Dirección de la diagonal ↙
IMAGEN 3

Dirección vertical y horizontal Dirección de la diagonal ↘

Dirección de la diagonal ↙

También podría gustarte