martes, 23 de abril de 2013

Tarea #6  Detección de agujeros

En esta semana tuvimos que realizar la actividad de detectar agujeros, para poder realizar esto reutilice código que tenia anteriormente y el procedimiento fue el siguiente:

1-Primero se convierte la imagen con la que vamos a trabajar a escala de grises:

2- Se realiza una sumatoria de las filas y columnas de la imagen.



El código para obtener la imagen a escala de grises y sacar los histogramas es el siguiente:


def escala_grises(self):
inicio = time()
image = Image.open(self.o_imagen)
pixels = image.load()
ancho,alto = image.size
print 'ancho',ancho
print 'alto',alto
histograma_horizontal=zeros(ancho,float)
histograma_vertical=zeros(alto,float)
self.matriz = numpy.empty((ancho, alto))
for i in range(ancho):
for j in range(alto):
(r,g,b) = image.getpixel((i,j))
escala = (r+g+b)/3
histograma_horizontal[i] +=escala
histograma_vertical[j] +=escala
pixels[i,j] = (escala,escala,escala)
self.matriz[i,j] = int(escala)
fin = time()
tiempo_t = fin - inicio
# print "Tiempo que tardo en ejecutarse escala de grises = "+str(tiempo_t)+" segundos"
df = image.save('escala.png')
return image,histograma_horizontal,histograma_vertical
view raw histogramas.py hosted with ❤ by GitHub
3- Teniendo ya lo anterior se comienza a buscar lo que son los minimos locales para cada vector (horizontal y vertical). Sacamos un promedio para poder filtrar más los datos obtenidos:
def minimos_locales(self,vector):
minimos=list()
medio=sum(vector)/len(vector)
print 'medio',medio
for i in range(1,len(vector)-1):
if vector[i-1]>vector[i]<vector[i+1]:
if vector[i]<medio:
minimos.append(i)
view raw medio.py hosted with ❤ by GitHub
4- Ahora teniendo lo anterior vamos a tomar lo que son las intersecciones de las líneas horizontales con las verticales.
def intersecciones(self,corx,cory):
inter=[]
for i in corx:
if i in cory:
inter.append(i)
return inter
5-Teniendo las intersecciones lo que aremos es utilizar el bfs (Para poder usarlos vamos a llamar a la función convolución para poder detectar bordes) para poder colorear donde supuestamente hay agujeros. Es código anteriormente utilizado.


6-Ponemos el centro del agujero y el numero de id en la imagen.


Pruebas

Imagen utilizada (Imagen tomada de internet):


Imagen de Salida:




Histograma d ela imagen:





Pruueba con imagen tomada por mi:







1 comentario: