jueves, 28 de febrero de 2013

Actividad 3: Encontrar líneas Diagonales

Para esta entrada, lo que se encargó fue implementar la detección de líneas diagonales en el mismo código de detectar líneas horizontales y verticales.

Para poder lograrlo lo que se hizo fue encontrar cualquier gx o gy que fuera diferente a cero, con esto estamos excluyendo todas las líneas horizontales y verticales.

Código:

def hough(image):
dict_linea = dict()
continuidad = dict()
prewittx = [[-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0], [-1.0, 0.0, 1.0]]
prewitty = [[1.0, 1.0, 1.0], [0.0, 0.0, 0.0], [-1.0, -1.0, -1.0]]
sobbelx = [[-1.0, 0.0, 1.0], [-2.0, 0.0, 2.0], [-1.0, 0.0, 1.0]]
sobbely = [[1.0, 2.0, 1.0], [0.0, 0.0, 0.0], [-1.0, -2.0, -1.0]]
imgX = convolusion(image, sobbelx)
imgY = convolusion(image, sobbely)
w, h = image.size
for i in range(w):
for j in range(h):
gx = imgX[i,j][0]
gy = imgY[i,j][0]
if(gx == 0 or gy == 0):
theta = 0
else:
theta = abs(math.degrees(math.atan(gy/gx)))
rho = (i*math.cos(theta)) + (j*math.sin(theta))
dict_linea[i,j] = (theta, rho)
continuidad[(theta, rho)] = 1
pixel = image.load()
w, h = image.size
for i in range(w):
for j in range(h):
if dict_linea[i, j] in continuidad:
if (dict_linea[i,j][0] > 0 and dict_linea[i, j][0] < 90) or (dict_linea[i, j][0] > 90 and
dict_linea[i, j][0] < 180) or (dict_linea[i,j][0] > 180 and dict_linea[i, j][0] < 270) or (dict_linea[i,j][0] > 270 and dict_linea[i, j][0] < 360):
pixel[i,j] = (255, 0, 0)
image.save('lineasDiagonales.png')
return image
view raw gistfile1.py hosted with ❤ by GitHub
Resultados:








Notas:
Ahora lo que me interesaría lograr es encontrar la continuidad de una línea y que me dijera cuantas hay, para esto mi idea es hacer un dfs de los bordes de la formas e ir comparando el pixel con su ángulo anterior con una breve diferencia, y al cabo de tener un cambio brusco la continuidad termina.

1 comentario:

  1. No tiene etiqueta; el título está mal. Cumple con lo obligatorio, pero por ejemplo no tomas en cuenta la pendiente al colorear. 7 pts.

    ResponderEliminar