jueves, 18 de abril de 2013

Laboratorio de VIsión: Relleno de elipses

Hola compañeros en esta ocasión lo que se hara sera rellenar los elipses detectados de un color aleatorio. Como no tengo terminado lo que es detectar los elipses lo hice sacando su area y sus semidiametros.

Primero que nada use el bfs para trabajar por formas cuando ya tenia cada una de las formas trabaje con cada una de ellas sacando sus semidiametros y usando la formula del elipse para obtener el aea A=pi*a*b donde a y b son sus semidiametros si el are era igual quiere decir que es un elipse :


def c_colorear(self):
im=self.boton_convolucion()
#self.im2=self.boton_convolucion()
pixels=im.load()
porcentajes=[]
fondos=[]
centro_masa=[]
masa=[]
ancho,alto=im.size
t_pixels=ancho*alto
c=0
pintar=[]
f=0
for i in range(ancho):
for j in range(alto):
pix = pixels[i,j]
r,g,b= random.randint(0,255),random.randint(0,255), random.randint(0,255)
fondo=(r,g,b)
if (pix==(0,0,0)):
c +=1
origen=(i,j)
num_pixels,abscisa,ordenada,puntos=self.bfs(pix,origen,im,fondo)
p=(num_pixels/float(t_pixels))*100
if p>.10:
centro=(sum(abscisa)/float(num_pixels),sum(ordenada)/float(num_pixels))
#centro_masa.append(centro)
masa.append(num_pixels)
v=self.detectar_elipse(num_pixels,im,centro,puntos,fondo)
if v==True:
porcentajes.append(p)
pintar.append(puntos)
# self.pintar(puntos)
fondos.append(fondo)
centro_masa.append(centro)
f +=1
# print num_pixels
# centro_masa.append((sum(abscisa)/float(num_pixels),sum(ordenada)/float(num_pixels)))
# print centro_masa
# raw_input()
#self.detectar_elipse(masa,im,centro_masa,puntos,fondo)
#self.colocar_gris(im,porcentajes,fondos)
oi=self.pintar(pintar)
self.centro_masa(oi,centro_masa)
self.imprimir_porcentajes(porcentajes)
# print 'c',c
# print 'termino'
im.save('final.jpg')
return oi
view raw elip1.py hosted with ❤ by GitHub




Código de detección del elipse:

def detectar_elipse(self,num_pixeles,im,centro,puntos,fondo):
pixels=im.load()
inicio=centro
#print centro
x,y=int(centro[0]),int(centro[1])
# print x
# print y
im.save('checar.png')
a=self.semidiametrox(x,y,pixels,im,fondo)
# print 'regreso'
b=self.semidiametroy(x,y,pixels,im,fondo)
# print 'area',num_pixeles
# print 'a',a
# print 'b',b
area1=pi*a*b
if area1==num_pixeles:
# print 'es elipse'
return True
#raw_input()
# im.save('checar.png')
#while True:
def semidiametrox(self,aumenta,igual,pixels,im,fondo):
print 'sacando semidiametro'
pixels=im.load()
a=0
# print 'aumenta',aumenta
# print 'igual',igual
# pixels[aumenta][igual]==(0,0,0)
while True:
if (pixels[aumenta,igual]==fondo):
# print 'entro al if'
aumenta +=1
a +=1
# pixels[aumenta,igual]==(23,44,123)
else:
break
#im.save('porfas.png')
return a
def semidiametroy(self,igual,aumenta,pixels,im,fondo):
print 'sacando semidiametro'
pixels=im.load()
b=0
# print 'aumenta',aumenta
# print 'igual',igual
# pixels[aumenta][igual]==(0,0,0)
while True:
if (pixels[igual,aumenta]==fondo):
# print 'entro al if'
aumenta +=1
b +=1
# pixels[aumenta,igual]==(23,44,123)
else:
break
return b
view raw detector.py hosted with ❤ by GitHub

Imagen original:


Resultado Obtenido:


Porcentajes:





1 comentario:

  1. Ortografía... 10 pts. Si siguen apareciendo constantes arbitrarias como 4000, quitaré puntos en el futuro.

    ResponderEliminar