Detección de circulos sin radio
En esta entrada tenemos que realizar la detección de circulos pero con diferentes radios.
Lo que trate primero fue acomodar mi codigo de la vez anterior ya que no me detectaba lo que son los circulos solo los centros.
Imagen original:
Guarde una imagen por cada iteracion:
Este es sólo mi código relevante:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def convolucion(self,h1,h2,image): | |
pixels = image.load() | |
ancho,alto = image.size | |
gx=numpy.empty((ancho, alto)) | |
gy=numpy.empty((ancho, alto)) | |
a=len(h1[0]) | |
self.conv = numpy.empty((ancho, alto)) | |
self.minimo = 255 | |
self.maximo = 0 | |
for x in range(ancho): | |
for y in range(alto): | |
sumax = 0.0 | |
sumay = 0.0 | |
for i in range(a): | |
for j in range(a): | |
try: | |
sumax +=(pixels[x+i,y+j][0]*h1[i][j]) | |
sumay +=(pixels[x+i,y+j][0]*h2[i][j]) | |
except: | |
pass | |
gradiente = math.sqrt(pow(sumax,2)+pow(sumay,2)) | |
self.conv[x,y]=gradiente | |
gradiente = int(gradiente) | |
pixels[x,y] = (gradiente,gradiente,gradiente) | |
p = gradiente | |
gx[x,y]=sumax | |
gy[x,y]=sumay | |
if p < self.minimo: | |
self.minimo = p | |
if p > self.maximo: | |
self.maximo = p | |
return image,gx,gy | |
def circulos(): | |
radio=[60,40] | |
for i radio: | |
maximo = 0 | |
suma = 0.0 | |
print "sumando" | |
for i in range(alto): | |
for j in range(ancho): | |
v = frec[j][i] | |
suma += v | |
if v > maximo: | |
maximo = v | |
promedio = suma / (ancho * alto) | |
umbral = (maximo-promedio)/2.0 | |
centro = [] | |
for i in range(alto): | |
for j in range(ancho): | |
v = frec[j][i] | |
if v > umbral: | |
print 'Posible centro en (%d, %d). ' % (j, i) | |
imagen[i,j]=(123,123,123) | |
centro.append((j,i)) | |
draw = ImageDraw.Draw(ima1) | |
ancho,alto = imag.size | |
print 'centros',centro | |
raw_input() | |
#r=0 | |
for cir in range(len(centro)): | |
a = centro[cir][0] | |
b = centro[cir][1] | |
# if r!=0: | |
color = (255,random.randint(200,255), random.randint(0,200)) | |
draw.ellipse((a-radio, b-radio,a+radio,b+radio), fill=None, outline=color) | |
#radio+=2 | |
draw.ellipse((a-2,b-2,a+2,b+2),fill="green") | |
draw.text(((a+2,b+2)), str(cir),fill="red") | |
print "ID %s"%cir | |
# r+=1 | |
#m+=1 | |
print frec | |
ni = 'eeeeeeeeeeeeeeee.png' | |
imag.save(ni) | |
return ni |
5 pts avance parcial
ResponderEliminar