junio 14, 2022 10:00 am

Jesús

El término visión por computadora significa la capacidad de un ordenador para ver y percibir el entorno. Sabemos que está presente en muchas aplicaciones: detección y reconocimiento de objetos, coches autoconducidos, reconocimiento facial, seguimiento de pelotas, etiquetado de fotos y muchas más. Antes de adentrarnos en la jerga técnica, hablemos primero de todo el proceso de visión por computadora. 

Todo el proceso se divide en 5 pasos básicos, cada uno con una función específica. En primer lugar, se necesita la entrada para que el algoritmo la procese, que puede tener la forma de una imagen o de un flujo de imágenes (cuadros de imagen). El siguiente paso es el preprocesamiento. En este paso, se aplican funciones a la(s) imagen(es) entrante(s) para que el algoritmo pueda entender mejor la imagen.

Algunas de las funciones incluyen la reducción de ruido, la escala de la imagen, la dilatación y la erosión, la eliminación de manchas de color, etc. El siguiente paso es seleccionar el área de interés o la región de interés. Debajo de esto se encuentran los algoritmos de detección de objetos y de segmentación de la imagen. Además, tenemos la extracción de características, es decir, la recuperación de información/características relevantes de las imágenes que son necesarias para lograr el objetivo final.

El último paso es el reconocimiento o la predicción, en el que se reconocen los objetos en un marco de imágenes determinado o se predice la probabilidad del objeto en un marco de imágenes determinado.

Ejemplo

Veamos una aplicación del mundo real de la visión por ordenador. El reconocimiento de la expresión facial es una aplicación de la visión por computadora que se utiliza en muchos laboratorios de investigación para hacerse una idea del efecto que tiene un determinado producto en sus usuarios. De nuevo, tenemos datos de entrada a los que aplicamos los algoritmos de preprocesamiento.

El siguiente paso consiste en detectar las caras en un fotograma concreto y recortar esa parte del fotograma. Una vez hecho esto, se identifican los puntos de referencia faciales, como la boca, los ojos, la nariz, etc., características clave para el reconocimiento de emociones.

Algoritmos

Antes de empezar a mencionar los algoritmos de la visión por computadora, quiero hacer hincapié en el término "Frecuencia". La frecuencia de una imagen es la tasa de cambio de intensidad. Las imágenes de alta frecuencia tienen grandes cambios de intensidad. Una imagen de baja frecuencia tiene un brillo relativamente uniforme o la intensidad cambia lentamente.

Al aplicar la transformada de Fourier a una imagen obtenemos un espectro de magnitudes que arroja la información de la frecuencia de la imagen. Un punto concentrado en el centro de la imagen en el dominio de la frecuencia significa que hay muchos componentes de baja frecuencia en la imagen. Los componentes de alta frecuencia incluyen: bordes, esquinas, rayas, etc. Sabemos que una imagen es una función de x e y f(x,y). Para medir el cambio de intensidad, basta con tomar la derivada de la función f(x,y).


Filtro de Sobel

El operador Sobel se utiliza en el procesamiento de imágenes y en la visión por computadora para los algoritmos de detección de bordes. El filtro crea una imagen de bordes enfatizados. Calcula una aproximación de la pendiente/gradiente de la función de intensidad de la imagen. En cada píxel de la imagen, la salida del operador Sobel es tanto el vector de gradiente correspondiente como la norma de este vector.

El operador Sobel convoluciona la imagen con un pequeño filtro de valor entero en las direcciones horizontal y vertical. Esto hace que el operador sea poco costoso en términos de complejidad de cálculo. El filtro Sx detecta los bordes en la dirección horizontal y el filtro Sy detecta los bordes en la dirección vertical. Es un filtro de paso alto. 

 Aplicando Sx a la imagen

Aplicar Sy a la imagen

Filtro de aproximación

El filtro de aproximación es un filtro normalizado que se utiliza para determinar el brillo o la oscuridad de una imagen. El filtro de promedio se desplaza por la imagen píxel a píxel sustituyendo cada valor del píxel por el valor medio de los píxeles vecinos, incluido él mismo.

El filtro promedio (o media) suaviza las imágenes reduciendo la cantidad de variación de la intensidad entre los píxeles vecinos. 

Filtro de desenfoque gaussiano

El filtro de desenfoque gaussiano es un filtro de paso bajo y tiene las siguientes funciones:

  1. 1
    Disminuye la intensidad de la imagen.
  2. 2
    Bloquea las partes de alta frecuencia de una imagen.
  3. 3
    Preserva los bordes.

Matemáticamente, al aplicar un desenfoque gaussiano a una imagen estamos básicamente convolucionando la imagen con una función gaussiana.

En la fórmula anterior, x es la distancia horizontal desde el punto de origen, y es la distancia vertical desde el punto de origen y σ es la desviación estándar de la distribución gaussiana. En dos dimensiones, la fórmula representa una superficie cuyos perfiles son círculos concéntricos con una distribución gaussiana desde el punto de origen. 

Una cosa que hay que tener en cuenta aquí es la importancia de elegir un tamaño de núcleo adecuado. Es importante porque si la dimensión del núcleo es demasiado grande, las pequeñas características presentes en la imagen pueden desaparecer y la imagen se verá borrosa. Si es demasiado pequeño, no se eliminará el ruido de la imagen.


Detector de bordes Canny

Es un algoritmo que hace uso de cuatro filtros para detectar los bordes horizontales, verticales y diagonales en la imagen borrosa. El algoritmo realiza las siguientes funciones:

  1. 1
    Es un algoritmo de detección de bordes muy utilizado y preciso.
  2. 2
    Filtra el ruido utilizando el desenfoque gaussiano.
  3. 3
    Encuentra la fuerza y la dirección de los bordes utilizando el filtro Sobel.
  4. 4
    Aplica la supresión no máxima para aislar los bordes más fuertes y reducirlos a una línea de píxeles.
  5. 5
    Utiliza la histéresis (método de doble “umbralización”) para aislar los mejores bordes.

Cascada de Haar

Se trata de un enfoque basado en el aprendizaje automático en el que se entrena una función en cascada para resolver problemas de clasificación binaria. La función se entrena a partir de una plétora de imágenes positivas y negativas y se utiliza además para detectar objetos en otras imágenes. Detecta lo siguiente:

  1. 1
    Bordes
  2. 2
    Líneas
  3. 3
    Patrones rectangulares

Para detectar los patrones anteriores, se utilizan las siguientes características:


Capas convolucionales

En este enfoque, la red neuronal aprende las características de un grupo de imágenes que pertenecen a la misma categoría. El aprendizaje se realiza actualizando los pesos de las neuronas mediante la técnica de retropropagación y el descenso de gradiente como optimizador.

Se trata de un proceso iterativo que tiene como objetivo disminuir el error entre la salida real y la verdad fundamental. Las capas/bloques de convolución así obtenidos en el proceso actúan como capas de características que se utilizan para distinguir una imagen positiva de una negativa. A continuación se presenta un ejemplo de capa de convolución.

Las capas totalmente conectadas, junto con una función SoftMax al final, clasifican la imagen entrante en una de las categorías en las que se ha entrenado. La puntuación de salida es una puntuación probabilística con un rango entre 0 y 1.

En este blog se ha cubierto una visión general de los algoritmos más comunes utilizados en la Visión por Computador junto con un pipeline general. No obstante, estos algoritmos forman la base de algoritmos más complicados (que pronto abordaremos) como SIFT, SURF, ORB, y muchos más. Por lo pronto, hasta aquí el artículo de hoy, espero que te haya gustado. 

¡Hasta luego! 

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.