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.
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 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) |
Referencias:
http://www.wikillerato.org/Circunferencias_tangentes_conocido_el_punto_de_tangencia.html
Votas por el puro punto medio, no al segmento que se debe. No hay ningún ejemplo de funcionamiento... 2 pts.
ResponderEliminar