miércoles, 13 de febrero de 2013

LABORATORIO 2 - VISION

Para esta entrada de laboratorio se nos encargo hacer ciertas tarea.

1) Generar ruido sal y pimienta

2) Eliminación de ruido sal y pimienta con alguna combinación de filtrado/umbrales que se les ocurra.

RUIDO SAL Y PIMIENTA
Utilice esta imagen para esta entrada de laboratorio. 

Para indicar la intensidad de el ruido que se desea agregar es pedido como parámetro , se indica un texto en terminal que dice "Teclea la intensidad que quieres aplicar de ruido sal y pimienta". Suponiendo que el usuario teclea un "1 " El for solamente recorrerá una vez la imagen, y asi con un "dos" o "cuatro" etc.

Para poder hacer el ruido sal y pimienta mediante dos random que seleccionan al aleatoriamente un punto en "X" y "Y" , cuando el recorrido se encuentre en dicha posición se pintara el pixel.

Ahora para la polarización se pide en terminal que se ingrese un numero entre "0" y "255" dependiendo el numero que se escriba sera el color que tomaran los pixeles.

Aquí el código.

from random import *
import random
import pygame
from pygame.locals import *
import Image
pygame.init()
pantalla = pygame.display.set_mode((193,261))
# FOTO NORMAL
imagen = pygame.image.load("imagen.jpg")
# ELIMINACION DE RUIDO SAL Y PIMIENTA
image = Image.open("imagen.jpg")
pixeles = image.load()
ancho, altura =image.size
print altura
numero=raw_input("Teclea la intensitad que quieres aplicar ruido sal y pimienta ")
numerosalypimienta=int(numero)
pola=raw_input("Teclea la polarizacion que quieres de 0 - 255 ")
polarizacion=int(pola)
for z in range(numerosalypimienta):
for x in range(ancho):
for y in range(altura):
(r,g,b) = pixeles[ x, y ]
promedio=((r+g+b)/3)
# Aqui si i y j son las posiciones seleccionadas al azar
# cuando el for este en la posicion i o j seleccionada al azar se pintara el pixel entre un color que estara entre 0 y 255
# (Polarizacion)
i = random.randint(0,ancho)
j = random.randint(0,altura)
valor = random.randint(0,255)
if i == x:
r= polarizacion
g = polarizacion
b = polarizacion
if y == j:
r = polarizacion
g = polarizacion
b = polarizacion
pixeles[x,y] = (r,g,b)
image.show()
view raw gistfile1.py hosted with ❤ by GitHub

Aquí esta el ejemplo con ruido de intensidad 1  y polarización de 255:



Ruido intensidad 3 y polarización de 0:



Ruido intensidad 10 y polarización 128:




ELIMINACIÓN DE RUIDO SAL Y PIMIENTA

2)Lo que se encargo eliminación de ruido sal y pimienta con alguna combinación de filtrado/umbrales que se les ocurra.
Para eliminar el ruido en esta foto lo que hice fue fue agregarle al mismo código que genera la imagen de ruido sal y pimienta , una conversión a escala de grises de toda la imagen así como un filtro analizando todos sus vecinos. Ya a el final decidí restarle un valor a la imagen que se mostrará. Esto lo hice para que se pudiera apreciar mucho mejor la imagen mas oscura y con menos brillo.

 Y el resultado fue este.
 
Aqui podemos observar la imagen original , la que tiene el ruido y la imagen donde ya se elimino el ruido. Con una intensidad de uno y una polarización de 0.



Este es el resultado de la imagen con una intensidad de 1 y una polarización de 255 pero sin restarle el ultimo valor. Para que puedan observar la diferencia.


Aquí todo el código.

from random import *
import random
import pygame
from pygame.locals import *
import Image
pygame.init()
pantalla = pygame.display.set_mode((193,261))
# FOTO NORMAL
imagen = pygame.image.load("imagen.jpg")
# ELIMINACION DE RUIDO SAL Y PIMIENTA
image = Image.open("imagen.jpg")
pixeles = image.load()
ancho, altura =image.size
numero=raw_input("Teclea la intensitad que quieres aplicar ruido sal y pimienta ")
numerosalypimienta=int(numero)
pola=raw_input("Teclea la polarizacion que quieres de 0 - 255 ")
polarizacion=int(pola)
for z in range(numerosalypimienta):
for x in range(ancho):
for y in range(altura):
(r,g,b) = pixeles[ x, y ]
promedio=((r+g+b)/3)
# Aqui si i y j son las posiciones seleccionadas al azar
# cuando el for este en la posicion i o j seleccionada al azar se pintara el pixel entre un color que estara entre 0 y 255
# (Polarizacion)
i = random.randint(0,ancho)
j = random.randint(0,altura)
# valor = random.randint(0,255)
if i == x:
r= polarizacion
g = polarizacion
b = polarizacion
if y == j:
r = polarizacion
g = polarizacion
b = polarizacion
try :
if x - 1 < 0:
None
else:
r ,g, b = pixeles[ ( x - 1 ), y ]
promedio += ( r + g + b ) / 3
except:
pass
try :
if x + 1 >= ancho:
None
else:
r, g, b = pixeles[ ( x + 1 ), y ]
promedio += ( r + g+ b ) / 3
except:
pass
try:
if y - 1 < 0:
None
else:
r, g, b = pixeles[ x, ( y - 1 ) ]
promedio += ( r + g + b ) / 3
except:
pass
try:
if y + 1 >= altura:
None
else:
r, g, b = pixeles[ x, ( y + 1 ) ]
promedio += ( r + g + b ) / 3
except:
pass
promedio = promedio/4
r=promedio-30
g=promedio-30
b=promedio-30
pixeles[x,y] = (r,g,b)
image.show()
while True:
for eventos in pygame.event.get():
if eventos.type == pygame.QUIT:
exit()
pantalla.blit(imagen,(0,0))
pygame.display.update()
view raw gistfile1.py hosted with ❤ by GitHub

1 comentario: