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:
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 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 |
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.