Ir al contenido principal

Tarea #2 - LAB Visión - Sal y Pimienta - Procesamiento de imagenes - Python

Que tal para esta entrada se nos encargo modificar o agregar a nuestro código, una rutina que agregara degradación por adición de ruido(Sal y pimienta) base a dos parámetros:

  • Intensidad = que tanto porcentaje de la imagen se le agregara sal y pimienta
  • Polarización = que tan negros/blancos se pone un pixel seleccionado.
y otra rutina que quitara filtrara ese ruido.

Antes de comenzar
Mi programa se esta empezando a poner "FEO" son demasiados métodos y por cada tarea esta creciendo considerablemente, pese a esto, esta sera la ultima entrada que estaré modificando este código, el las siguientes trabajare por clases. 

El los avances de la tarea están en mi github.

Un poco de teoría
Les comparto información de relevante que me ayudo a despejar dudas, al final de la entrada en el apartado de REFERENCIAS pondré los links de TODA esta información.

El RUIDO en las imágenes es un deterioro que se puede producir debido a:
  • Pixeles perdidos en un sensor CCD
  • Cuando se comprime o transmite la imagen
  • Inadecuada iluminación de la escena
  • Escáner de documentos
  • Sensibilidad inadecuada de las cámaras, etc.
y su formula:

Para quitar este ruido existen varios métodos:
  • El de la Media(yo utilice este)
  • Media Contraharmonic
  • Mediana
  • Máxima
  • Media de sección
  • Laplaciano
  • Punto medio
  • y otros  
ahora que ya sabemos que es y como quitarla, estamos listos para la explicación.

Explicación

Para la rutina de generar ruido. Mi función recibe 3 parámetros:
  1. pixeles: esta una listas de listas que contienen los valores de todos los pixeles de la imagen.
  2. INTENSIDAD: es un float entre 0 y 1, este es el porcentaje de sal y pimienta en la imagen(mientras mas cerca a 1 mas sal y pimienta)
  3. POLARIZACION: es un float entre 0 y 1, este es que porcentaje de que tan negros o blancos se pone un pixel seleccionado.
En donde lo que hago es recorrer todo los pixeles de la imagen; dentro del FOR compara la INTENSIDAD con un numero RANDOM entre 0-1; si cumple la condición aplicamos POLARIZACION si no el pixel se deja como estaba.



Después aplicamos el filtro de la MEDIA, este método trata de sacar la MEDIA de los pixeles vecinos incluyendo también el pixel actual, las definiciones siempre se entienden mejor con ejemplos.

imagen de 3x3 pixeles

  • Pruebas de escritorio:
    • Para el pixel #1 y sus vecinos:
      • Media pixel #1 = 2
      • Media pixel #2 = 5
      • Media pixel #4 = 11
      • Medio pixel #5 = 14
    • Media de los seleccionados = 8(nuevo contenido del pixel #1)
    • Para el pixel #2 y sus vecinos:
      • Media pixel #2 = 5
      • Media pixel #1 = 2
      • Media pixel #3 = 8
      • Media pixel #4 = 11
      • Media pixel #5 = 14
      • Media pixel #6 = 17
    • Media de los seleccionados = 8(nuevo contenido del pixel #2)
    • Y así consecutivamente hasta terminar con los pixeles de la imagen

Una aclaración antes de mostrar mi código... tuve problemas con los vecinos en diagonal y no me dio chanse de corregirlo, únicamente tome los vecinos en forma de cruz, aunque no es tan perfecto como se esperaba los resultados son notables.


Resultados
CON SAL-PIMIENTA  =>  INTENSIDIDAD = 0.1 & POLARIZACIÓN = 1.0

SIN SAL-PIMIENTA   =>    INTENSIDAD  = 0.1 & POLARIZACIÓN = 0.0

CON SAL-PIMIENTA   =>  INTENSIDAD = 0.9 & POLARIZACIÓN = 0.9


SIN SAL-PIMIENTA  => INTENSIDAD = 0.9 & POLARIZACIÓN = 0.9

Ejecución y tiempos

argv[1] => nombre de la imagen
argv[2] => método a utilizar
argv[3] => intensididad
argv[4] => polarización



El mismo ,py funciona para ambas tareas



Puntos extras

Esta tarea es la misma que lo que hicimos en clase #2(Normalizar y binarizar) así que pongo la liga a la entrada.

Aquí encontraran la explicación detallada.
http://4imedio.blogspot.mx/2013/02/tarea-1-vision-computacional-python.html


REFERENCIAS

liga 1
liga 2
liga 3


Comentarios

  1. Pues, lo obligatorio quedó, aunque algo exótico el método de eliminación. Van 7 pts por lab 2.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Tabla de sonidos easyVR desde cero

Uno de los poderes del easyVR es reproducir sonidos. Esta entrada se encarga de despejar todas la dudas y que al final sean capaz de crear un tabla de sonido ustedes solos, asi que al "ataque". Los pasos son: 1.- Conseguir los archivos de sonidos, con las siguientes características. formato: WAV    22050 Hz  Canal: Mono (o Monoaural)   2.- Agregar los archivos .WAV al quick synthesis 5 3.- Agregar proyecto a la memoria del easyVR  4.- Codigo 5 .- Fin Paso 1/5 - Conseguir los archivos de sonidos Esta parte es la mas tediosa sobre todo si quieres conseguir un tabla de calidad, a que me refiero con calidad, a que lo sonidos se escuchen perfectos sin ningún tipo de ruido. Con el programa Audacity , puedes grabar todo lo que pasa por tu tarjeta de sonido, esto es muy recomendable cuando quieres hacer tus propios sonidos. También puedes editarlos para que se escuchen un poco mejor. Solo no olvides guardar tus soni...

Prueba de Frecuencia (Monobit)

La entrada para esta semana era hacer un programa que evaluara si nuestras claves eran realmente random.   Pero ¿porque es importante saber si es realmente random? Bueno, unos de los problemas mas comunes en criptografía es que un mensaje se puede descubrir con ataques de frecuencia, haciendo este método nos aseguramos y hacemos que nos ataquen de otra forma mas complicada, en otras palabras, se las ponemos mas difícil. Existen como 8 pruebas (de lo que alcance a ver, checa el link de las referencias) para evaluar si tus números o caracteres son realmente random, en mi programa use la de prueba de frecuencia monobit; pero ¿cual es el propósito o como funciona esta prueba? El propósito de esta prueba, es determinar si el número de unos y ceros en una secuencia son aproximadamente la misma que sería de esperar para una secuencia verdaderamente aleatoria. La aparición de un cero o un uno en la secuencia debería ser igualmente probables, de modo que el defecto detectado por ...