jueves, 14 de febrero de 2013

Laboratorio 2: Ruido Sal y Pimienta, Detección de Bordes

Link al repositorio: https://github.com/synnick/viscomp

Ruido Sal y Pimienta

El ruido sal y pimienta consiste en generar ruido aleatorio en una imagen, en forma de puntos blancos y negros con cierta intensidad, por esto el nombre. 

La forma en la que lo generé, fue obteniendo primero dos números aleatorios x, y. Estos números deben ser, x de tamaño 0 < x < largo, y de tamaño 0 < y < ancho. Estos números serán las coordenadas donde se colocará el ruido. Para determinar si será un punto blanco ("sal") o un punto negro("pimienta"), se obtiene un tercer número aleatorio entre 0 y 1, para decidir de que color será el punto en cuestión. 

Todo lo anterior se repite un número de veces, que depende de la intensidad que se da como parámetro. La intensidad es un porcentaje de la imagen(en pixeles) al cual se colocará ruido, redondeado para poder tener pixeles enteros. Además, los pixeles no serán completamente negros ni completamente blancos, sino contarán con una "polarización", que igualmente será un porcentaje de que tan blanco o negro es el punto. Entre más cercano al 100, más cercano a negro y blanco. 

Aquí algunos ejemplos de imagenes con ruido sal y pimienta, utilizando una intensidad de 0.5 y una polarización de 30 (pixeles blancos 255 a 225, pixeles negros de 0 a 30):




Eliminación de Ruido Sal y Pimienta

Para eliminar el ruido en la forma más básica (puntos totalmente negros o totalmente blancos) basta con recorrer la imagen y buscar dichos puntos. Al localizarlos, se obtiene un promedio de sus vecinos, y el ruido queda eliminado. Esto debe aplicarse solamente en los pixeles localizados, ya que al no ser así, estaríamos haciendo difusa la imagen.

Ahora, tomando en cuenta que los pixeles contarán con una polarización como se mencionó anteriormente, debemos de poder buscar dicha polarización añadiendo un umbral de decisión que nos pueda decir de que rango tomaremos como pixel sal a un punto blanco y de que rango tomaremos como pimienta a un punto negro, para aplicarles promedio. En base a esto podremos arreglar la imagen(o no) dependiendo del umbral escogido.

Las imagenes anteriores, con el ruido parcialmente eliminado, usando la misma polarización como umbral:



Es posible que en algunas imagenes queden rastros del ruido sal y pimienta(sobre todo cuando el ruido aparece muy cerca uno a otro), pero en sí la eliminación del ruido es aceptable.



Detección de bordes

En la materia, utilizamos una forma para detectar los bordes usando una matriz de convolución sobre una imagen determinada. En caso del laboratorio, se utilizó un método completamente diferente, que se menciona a continuación. La imagen usada fue:
Diferencia entre imagen original y difusa


Para poder obtener los bordes de una imagen, podemos obtener una imagen difusa usando el filtro de promedio usado en el post anterior de laboratorio y la imagen original. Primero obtenemos una diferencia entre la imagen origina y la difusa, es decir, restamos el valor del pixel en las coordenadas i, j de la  imagen original, menos el valor del pixel en las coordenadas i, j de la imagen difusa.

Esto debe hacer que solo algunos bordes queden visibles. La razón por la cual esto ocurre es que los bordes de los objetos es donde más cambios hay, y al hacerlos difusos este cambio se hace un poco más notable. Por ejemplo si tenemos una imagen de una silueta de una persona, y detrás un fondo de diferentes colores, al promediar la imagen para hacerla difusa, los bordes resultaran con los promedios más diferentes a los de la silueta y el fondo.

Esto se puede observar en la siguiente imagen:

Normalizado

Al normalizar la imagen, colocamos los valores de las pixeles dentro de un rango entre su pixel mayor y su pixel menor. Esto nos da un contorno de la imagen:



Binarizado

Al final, realizamos un corte, colocando los pixeles que no son negros(0) en blancos(1), para poder resaltar los bordes. Si queremos, podemos entonces colocar los pixeles que encontramos blancos aquí, dentro de la imagen original como rojos o algún otro color, para mostrar si en verdad se detectaron bordes o que se encontró. El binarizado puede observarse a continuación:


1 comentario: