sábado, 6 de junio de 2009

Operaciones Puntuales

Este programa ha sido desarrollado en Java, bajo la IDE NetBeans 6.1, y aplica las principales operaciones puntuales en imágenes para obtener un mejoramiento de las mismas, de tal manera que puedan ser útiles para diversas áreas, como por ejemplo: la medicina, la astronomía, la biología, la minería, la electronica entre otras mas. Las imágenes son convertidas a escales de grises, en un rango de 0 a 255.

Las operaciones puntuales desarrolladas son las siguientes:
  • Operador Identidad: Este operador nos sirve para poder generar una imagen de salida que es igual a la imagen de entrada, pero en escala de grises. En este ejemplo mostramos una imagen de una neurona en escala de grises.
  • Operador Inverso (Negativo): Este tipo de operador nos devuelve una imagen con los detalles que no son visibles en la imagen original, es decir nos devuelve una imagen que es el complemento en escala de grises de la imagen original. En este ejemplo podemos observar como algunas venas son vistas con mas detalle en la imagen resultante.
  • Operador Umbral: El operador Umbral nos permite establecer un límite(umbral) el cual establecerá que todas las intensidades de pixeles menores a ese umbral se conviertan en 0(negro) y las intensidades mayores a ese umbral se convertiran en 255(blanco). En este ejemplo mostramos la operación umbral realizada por nuestro programa, aplicada a la radiografía de una cabeza de un paciente, que luego de aplicar el umbral=150 podemos observar la desproporción que existe entre los transversales del craneo con la cara, esto es justamente lo que se diagnostico a este paciente.
  • Operador Umbral Binario: Este tipo de operador nos permite aplicar 2 umbrales, umbral1= 40 y umbral2=190, esto quiere decir que las intensidades de pixeles que sean menor a 40 o mayor a 190 se volverán 255(blanco) y los que esten dentro del rango de los umbrales se volveran 0(negro). En este ejemplo podemos observar como a la imagen inicial se le extrae solo la mano para poder apreciarla mejor.
  • Operador Umbral Binario Invertido:En esta operación tambien aplicamos 2 umbrales, umbral1= 40 y umbral2=190, con la diferencia que ahora las intensidades de pixeles que sean menor a 40 o mayor a 190 se volverán 0(negro) y los que esten dentro del rango de los umbrales se volveran 25(blanco). En este caso el resultado es una mano la cual esta sobresaltada gracias al fondo negro(0).
  • Operador Umbral de Escala de Grises:En esta operación aplicamos 2 umbrales, umbral1= 10 y umbral2=100, para que los pixeles que sean menor a 10 o mayor a 100 se volverán 255(blanco) y los que esten dentro del rango de los umbrales se quedarán con la misma intensidad en la que se encuentran en la imagen original. En este ejemplo lo que buscamos es resaltar los detalles de la casa que se encuentra en la imagen.

  • Operador Umbral de Escala de Grises Invertido: Esta operación es parecida a la anterior con 2 umbrales, umbral1= 10 y umbral2=255, pero con la diferencia que los pixeles que sean menor a 10 o mayor a 255 se volverán 255(blanco), y las intensidades de los pixeles que se encuentren dentro de los umbrales serán convertidas en sus respectivos complementos con respecto a 255. En este ejemplo la imagen ha sido capturada por el observatorio de SONNEBERG de ALEMANIA, en esta imagen lo que se busca es detectar objetos variables en imagenes astronómicas (asteroides, satelites, meteoritos,etc.), y este operador nos sirve para mostrar mas detalles en las imagenes para detectar estos objetos, para luego ser procesadas.
  • Operador Extensión: Para este tipo de operador tambien se utilizan 2 umbrales, y se trabaja de la misma forma que en el operador umbral binario invertido, es decir suprimir todos los pixeles que se encuentren fuera del rango de los umbrales, la diferencia que cuando las intensidades de los pixeles se encuentran dentro de los umbrales entonces se aplica la siguiente función:
(p-u1)*255/u2-u1

En donde p es el valor de la intensidad del pixel inicial, u1 y u2 son los umbrales. Para este ejemplo se utilizaron los umbrales u1=10, u2=210.

  • Operador Reducción de Nivel de Gris: En esta operación lo que se busca es reducir los niveles grises que tiene una imagen, como sabemos inicialmente tenemos 256 niveles de gris (0-255), entonces esta operación nos permite definir que cantidad de niveles de gris queremos tener en nuestra imagen resultante. En este ejemplo nuestra imagen resultante solo tiene 5 niveles de gris debido a que se define un incremeto de 50 en un rango de 50-200. Siendo q:
q1:0
q2:(50+100)/2
q3:(100+150)/2
q4:(150+200)/2
q5:255


  • Transformaciones Punto a Punto: Este tipo de transformación utiliza la información contenida en la misma lozalización (posición de los pixeles) de dos imagenes de entrada A y B para crear una nueva imagen C.
Suma: Esta técnica se usa para reducir el ruido en las imagenes y para producir el efecto de movimiento entre imagenes iguales que se encuentran en posiciones diferentes. En este caso las imagenes provienen de una radiografias seriadas Gastroduodenal de un órgano en movimiento, las cuales pretenden comprobar la persistencia de una imagen sospechosa. Para detectar el movimiento de dichas imagenes aplicamos la técnica de la Suma de Imágenes, donde podemos apreciar claramente dicho movimiento.


Resta: La resta de imágenes se aplica de la misma forma que la suma, esta técnica es muy útil para detectar el cambio producido en dos imágenes que han sido captadas en dos instantes de tiempo diferentes. En este caso en nuestro ejemplo podemos darnos cuenta que el resultador de la nueva imagen es una imagen que representa el cambio entre la primera y segunda imagen.

  • Operaciones de Vecindad: Las operaciones de vecindad nos permiten mejorar el contraste de una imagen que no era muy buena; además de permitirnos definir filtros para reducir el ruido que puedan presentar las imágenes, utilizando para ello una máscara. En este caso utilizamos una máscara de 3x3.
Máscara 1: La máscara 1 aplicada a esta imagen es la siguiente:

M1[0][0]=1 M1[0][1]=2 M1[0][2]=1
M1[1][0]=0 M1[1][1]=0 M1[1][2]=0
M1[2][0]=-1 M1[2][1]=-2 M1[2][2]=-1

Esta máscara se convoluciona por todos los pixeles de la imagen original obteniendo los siguientes resultados:

Máscara 2: La máscara 2 aplicada a esta imagen es la siguiente:

M2[0][0]= -0.1667 M2[0][1]=-0.6667 M2[0][2]=-0.1667
M2[1][0]=-0.6667 M2[1][1]=4.3333 M2[1][2]=-0.6667
M2[2][0]=-0.1667 M2[2][1]=-0.6667 M2[2][2]=-0.1667

Con esta máscara se obtiene un mejor contraste que la imagen original