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

Pequeño Juego con LEDS y Dip Switch

Siguiendo con los mini-proyectos, lo que quería hacer originalmente era un tipo "candado" con push-button y LEDs, el objetivo seria, meter la combinacion de botones correcta y los LEDS encendería por un motivo practico, en forma de serpiente. El objetivo no cambio, pero por falta de "material" lo hice con un dip switch de X entradas(depende de que tan grande quieras la combinación). CONOCIMIENTOS(max. 7 estrellas): Electronica:     ★ ★ Programación: ★ ★ Juego de Combinación + LEDs El programa es un poco mas complicado que el mini-proyecto pasado , pero aun asi es basico. Guardamos las salidas de los LEDs en un arreglo, despues con los valores recibidos y comparados de los dip switch jugamos con los LEDś. Hardware Requerido (1) Arduino Uno (6) LED (8) Resistencias 330 Ω (1) Dip Switch Circuito Usamos las salidas del ARduino 2-7 para los LEDS Usamos la salida A5, A4 para el dip switch Para hacer prender los LEDS tienes que encontrar la

Tarea #5 - Codigo Hamming - Python

Codigo hamming Liga al repo Teoria segun wikipedia Antes de los códigos Hamming se utilizaron ciertos códigos detectores de error, como lo fueron el código linteing, pero ninguno llegó a ser tan eficaz como los de Hamming. A continuación se describen algunos de estos códigos. Paridad   La   paridad   consiste en añadir un bit, denominado   bit de paridad , que indique si el número de los bits de valor 1 en los datos precedentes es par o impar. Si un solo bit cambiara por error en la transmisión, el mensaje cambiará de paridad y el error se puede detectar (nótese que el bit donde se produzca el error puede ser el mismo bit de paridad). La convención más común es que un valor de paridad   1   indica que hay un número impar de unos en los datos, y un valor de paridad de   0   indica que hay un número par de unos en los datos. info. completa y un vídeo que me ayudo mucho para esta tarea: (TIENEN QUE VERLO - OBLIGATORIO) http://www.youtube.com/watch?v=xiDPFm9PeLU Impleme

Potenciometro + pushboton + led

Bueno, estos días he estado practicando con los ejemplos de la pagina de Arduino , algunos que me llamaron la atención los voy a compartir, por supuesto con modificaciones. Nivel de conocimientos: Electronica:        ★   Programació n :    ★    Potenciometro + push-boton = LEDintensidad El mini-proyecto es controlar la intensidad de un LED mediante un potenciometro el cual combinado con push-botton para prenderlo o apagarlo. Hardware Requerido (1) Arduino UNO (1) Potenciometro (1) Push-boton (1) LED (1) Resistencia 330 Ω Circuito Conectamos el LED al PIN 9 del Arduino Conectamos el PUSH_BOTON al PIN ANOLOGICO 0 (A0) Conectamos el POTENCIOMETRO al PIN ANOLOGICO 1 (A1) El funcionamiento del circuito es basico, mientras tengas pulsado el Push-Boton el LED se mantendrá encendido y con el pontenciometro controlas la intensidad del LED. Código Video