Introducción al Procesamiento de Imágenes

por Juan Manuel Vuletich
Volver al estudio de Juan


Trabajo Práctico  2

Ejercicio 1

Introducción

Se solicitó implementar la ecualización del histograma de una imagen, y comparar imágenes e histogramas antes y después.

Desarrollo

    Implementé la ecualización del histograma para imágenes de una sola banda (monocromáticas). Se observó que el resultado es mejorar el contraste significativamente (más que haciendo stretching). Sin embargo, en imágenes que utilicen muchos de los tonos de gris disponibles, y con degradés suaves (por ejemplo Lena), puede ocurrir que el resultado sea usar una cantidad menor de tonos, haciedo que los degradés sean más toscos. Si esto ocurre con una imagen que además ya tenía un contraste adecuado (como en este caso), es posible que la imagen procesada no supere en calidad a la original. Por contrapartida, en imágenes que presentan un contraste deficiente, el realce es notable.

    Posteriormente intenté aplicar la técnica a imágenes multibanda (en color). Para ésto, ecualicé independiente el histograma de cada banda. El resultado puede no ser satisfactorio, porque las componenetes de color de cada pixel son modificadas independientemente, y el matiz de color de cada pixel puede cambiar. Por ejemplo, con imágenes que incluían personas y un cielo azul claro, al ecualizar el histograma del azul se disminuye la cantidad de este color en los rostros (por la gran cantidad de azul claro en el cielo) y se incrementa la cantidad de color rojo (debido a que casi no hay rojo en otra área de la imagen). El resultado es que la piel se vuelve rojiza. La magnitud de este efecto depende de qué objetos haya en la imagen que se verían artificiales si su color cambia, y del balance general entre los colores. De cualquier manera, si lo que se busca es mejorar el contraste, aún a costa del verdadero color de cada pixel, el resultado es satisfactorio.

    Pensé entonces que podría ser interesante una técnica similar, pero que no afecte el matiz de color de cada pixel, sino sólo su luminosidad. O sea, al modificar un color, multiplicar por el mismo factor todas sus componentes. Para ésto, obtuve el histograma de la norma (utilicé norma 2) de la imagen. La ecualización se realiza con éste histograma, afectando idénticamente todas las bandas. El resultado es una imagen en que cada pixel tiene el mismo balance entre las componenetes de color que en la imagen original, pero cuyo histograma de la norma está ecualizado. Lo que se observa es similar a la ecualización de imágenes monocromáticas: el contraste está fuertemente realzado, pero los colores aparecen todavía naturales.

    La implementación presentada incluye ambos tipos de ecualización, y la posibilidad de ver el histograma convencional y el de la norma.

Ejercicio 2

Introducción

    Se solicitó realizar la clasificación por mínimos locales de una imagen. Se pidió mostrar el histograma, indicando los mínimos encontrados; así como generar una imagen que tenga un único valor para todos los pixels incluídos en la clase.

Desarrollo

    Se obtiene el histograma "suavizado" de la imagen. El histograma suavizado se obtiene aplicando un filtro pasa bajos al histograma original. Esto es, promediando el valor de cada punto con un conjunto de vecinos. El resultado es una curva suave, sin cambios abruptos, y que presenta mínimos y máximos locales que respetan al histograma original, que sólo incluye aquellos más evidentes, que "dominan" la curva.

    Dado que estamos trabajando con una señal discreta, en vez de aproximar la derivada, considero que un punto es un mínimo local si su valor es menor que el de su vecino izquierdo y menor o igual que su vecino derecho. (Hubiera sido posible también considerar a los vecinos al revés.) Con las imágenes con las que probé el resultado fue satisfactorio.

    La técnica utilizada no funciona cuando se usa con un histograma dinámico, porque podría pasar que un mínimo local sea simplemente valores para los que no hay ningún pixel, y tomando únicamente los valores de gris para los que hay pixels, el mínimo no sea detectado, y se junten por error dos clases. Por ésto, y por problemas detectados y comentados en el ejercicio siguiente, decidí implementar los que llamé Histogramas Aproximados. Estan descritos en detalle en el ejercicio siguiente.

    La imagen de clasificación generada se hace de tipo Float, ya que mi implementación hace siempre stretching a los valores apropiados en la pantalla, y ayuda a que cada clase se distinga visualmente.

    Finalmente, no implementé la clasificación por mínimos locales par imágenes multibanda (o en color). Esto exigiría encontrar mínimos en un espacio multidimensional, con la posibilidad de que un punto se mínimo en un coordenada y no en otra. Incluso podría ser máximo en un punto de ensilladura. Este problema requiere mayor estudio para poder ser atacado.

Ejercicio 3

Introducción

Se solicitó implementar la generación de imágenes de ruido aleatorio con diversas distribuciones.

Desarrollo

    Primeramente implementé un generador de ruido de distribución normal, basado en el método de Box-Müller. A continuación implementé la generacion de imagenes de ruido. Para imágenes multibanda, la generación de ruido en cada banda es independiente. Al intentar mostrar los histogramas de imágenes Float, se hizo evidente la necesidad de los Histogramas Aproximados, ya que debido a la gran cantidad de valores distintos generados, el histograma dinámico resulta impracticable. No entraría en memoria, y cada entrada tendría quizás un único pixel. Lo que necesitamos es en realidad conocer la "densidad" del histograma en intervalos de valores.

    Un Histograma Aproximado es un híbrido entre un histograma estático y uno dinámico, y resulta de gran utilidad para imágenes de tipo Float. Se toma el rango de valores entre el mínimo y el máximo de los valores utilizados por la imagen, y se lo divide en intervalos de igual longitud. La cantidad de intervalos a tomar es proporcionada al construir el histograma. (Alternativamente, es posible informar en la longitud de cada intervalo, y la cantidad de ellos necesaria es calculada automáticamente). Los valores de los pixels se hacen corresponder con el intervalo en el que se encuentren. De esta manera, lo que se cuenta es la cantidad de pixels cuyo valor se encuentre en cada intervalo. El resultado es un histograma que al mostrarse por pantalla resulta más realista que el histograma dinámico (que es difícil de graficar, y cuya forma ideal de mostrarse por pantalla es justamente lo que hace el Histograma Aproximado, que muestra la "densidad" del histograma dinámico).

    De esta manera es posible observar que las imágenes generadas corresponden a la distribución correspondiente.

Ejercicio 4

Introducción

    Se solicitó contaminar con ruido Salt & Pepper, Aditivo y Multiplicativo y con diversas distribuciones a las imágenes de prueba. Se pidió también probar con distintos porcentajes de contaminación. A continuación se solicitó aplicar diversos filtros y sacar conclusiones.

Desarrollo

    La contaminación de una imagen con ruido Salt & Pepper toma un parámetro de la forma: #(10 0 255) donde el primer número indica el porcentaje de contaminación (cantidad total de pixels a ser afectados) y el segundo y tercer números indican dos valores de contaminación, eligiéndose aleatoriamente entre ellos para contaminar.

    Para contaminar con ruido Aditivo o Multiplicativo, primero debe generarse la imagen de ruido con la distribución deseada, y luego sumarse o multiplicarse ambas imágenes. Si se desea contaminar, por ejemplo, el 10% de la imagen, aplicar a la imagen de ruido un Salt&Pepper de #(90 0 0) si es ruido aditivo o #(90 1 1) si es multiplicativo. Debe tenerse en cuenta que la distribución de esta imagen ya no es la distribución original, y que si se está simulando el ruido producido por algún dispositivo físico es necesario saber si las características del ruido que se desea imitar realmente responden a la distribución obtenida.

Salt and Pepper

    Al aplicarle el filtro de la mediana, el ruido desaparece casi por completo. Al aplicarle un pasa bajos, cada defecto (pixel erróneo) se ‘lava’, suavizándose, pero al mismo tiempo aumentando de tamaño. Al aplicarle un pasa altos, como comenté en el trabajo práctico anterior, la imagen parece cobrar relieve. Los defectos se transforman ahora en huecos o salientes en la imagen. Al aplicale un pasa bajos primero y un pasa altos después, el resultado es similar a aplicar únicamente el pasa altos, pero la imagen queda borrosa.

Aditivo Normal

    Al aplicarle un filtro pasa bajos el ruido se suaviza bastante (más que en el Salt and Pepper). Al aplicarle el filtro de la mediana, si el porcentaje de contaminación es bajo, el ruido desaparece por completo. Pero si el porcentaje de contaminación es alto, el ruido no disminuye, y se obtienen mejores resultados con un pasa bajos. Al aplicar un pasa altos, el resultado es similar al Salt and Pepper. Al aplicarle un pasa bajos y luego un pasa altos, la imagen de "relieve" resultante parece tener rugosidad debido al ruido, pero muy suavizado.

Aditivo Uniforme

    Los resultados son intermedios entre los de Salt and Pepper y los de Aditivo Normal.

Multiplicativo Normal

    Tomando una media de 1 y una varianza de 0,3, los resultados obtenidos son en todos los casos muy similares al caso aditivo normal. Tomando en cambio una varianza de 10, los resultados son aún distinguibles a simple vista, pero ninguno de los filtros mejora la imagen. Para hacer una análisis más detallado es necesario conocer las características del ruido que es esperable tener en la práctica.