lunes, 15 de abril de 2013

Detección de Elipses

Para ésta ocasión se nos pidió hacer la detección de elipses dada una imagen, a continuación dejo el código que lo tengo incompleto, pero en si lo que busco es obtener el número de intersecciones que se tiene de la figura, obtenida de los puntos de borde y su gradiente, para así conocer su centro del elipse.

Código:
Para el código me base en los anteriores que tenía donde se aplica escala de grises, convolusión, defección de formas y normalizar, deja aquí la liga.

def dibujar_circulos_centro(im, frecuencia, r, circle_matrix): ##Cambiar
pix = im.load()
w, h = im.size
imagen = ImageDraw.Draw(im)
circulo = dict()
for i in frecuencia.keys():
circulo[i] = (250,250,0)
imagen.ellipse((i[0]-1, i[1]-1, i[0]+1, i[1]+1), fill=(0,255,0))
print i
imagen.text(i, str(i), fill=('red'))
for i in range(w):
for j in range(h):
if circle_matrix[i, j] in frecuencia:
try:
pix[circle_matrix[i,j]] = (255, 0, 0)
except:
pass
for posicion in circulo.keys():
i , j = posicion
for angulo in range(360): #Pintar
x = i + r * math.cos(angulo)
y = j + r * math.sin(angulo)
try:
pix[x,y] = circulo[posicion]
except:
pass
return im
def bfs():
def centros(bordes, g):
puntos_interseccion = list()
while bordes:
puntos_borde = bordes.pop(0)
for i in range(len(puntos_borde) ):
a = puntos_borde[random.randint(0, len(puntos_borde)-1/2)] #inter
b = puntos_borde[random.randint(len(puntos_borde)-1/2, len(puntos_borde)-1)]
#try except checar
t_1 = [g[a], a[1]-g[a]]
t_2 = [g[b], b[1]-g[b]]
conecta = (t_1[0]*float(t_2[1]-t_1[1]) / (t_1[0]-t_2[0])+ t_1[1]),#t_2[0]*float(t_2[1]-t_1[1]) / (t_1[0]-t_2[0])+ t_2[1]),
float(t_2[1]-t_1[1]) / (t_1[0]-t_2[0])
c = ( (a[1]+b[1])/2, (a[0]+b[0])/2 ) ##Punto medio
##Try except checar
m = (conecta[1]-c[1] ) / (conecta[0]-c[0])
#m = (conecta[0]-c[0] ) / (conecta[1]-c[1])
#print c
#puntos_interseccion[c] = 1
puntos_interseccion.append([(c), 1])
#print puntos_interseccion
#print c
print puntos_interseccion
#counts = Counter((k[1], v) for k, v in puntos_interseccion.iteritems())
#print counts
return puntos_interseccion
def main():
imagen = grayScale(imagen)
imagen = convolusion(imagen, 'sobel')
imagen = umbral(imagen, None)
imagen , g = normalizar(imagen)
imagen, bordes = bfs(imagen, g)
imagen = centros(imagen, bordes)
view raw gistfile1.py hosted with ❤ by GitHub


Referencias:
http://www.wikillerato.org/Circunferencias_tangentes_conocido_el_punto_de_tangencia.html

1 comentario:

  1. Votas por el puro punto medio, no al segmento que se debe. No hay ningún ejemplo de funcionamiento... 2 pts.

    ResponderEliminar