Mi repositorio de los códigos. Liga.
Primero que nada, sacamos el gradiente de tal forma que podamos analizar la imagen.
Para luego, procesarlo de manera que tengamos su ángulo y rho de cada pixel, luego generamos un histograma para sacar los más significativos y los pintamos de manera que un color el cual tenga cierto ángulo son verticales u horizontales, este es el 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 linea(imagen_Y, imagen_X, w, h, imagen, incluir): | |
resultado = list() | |
for y in range(h): | |
datos = list() | |
for x in range(w): | |
pixel_X = float(sum(imagen_X[x, y]))/3.0 | |
pixel_Y = float(sum(imagen_Y[x, y]))/3.0 | |
if fabs(pixel_X) > CERO: | |
angulo = atan(pixel_Y/pixel_X) | |
else: | |
if fabs(pixel_X) + fabs(pixel_Y) <= CERO: | |
angulo = None | |
elif pixel_Y == 255 and pixel_X == 0: | |
angulo = 90.0 | |
else: | |
angulo = 0.0 | |
if angulo is not None: | |
rho = (x - w/2) * cos(angulo) + (h/2 - y) * sin(angulo) | |
datos.append(('%.2f' % angulo, '%.0f' % rho)) | |
else: | |
datos.append((None, None)) | |
resultado.append(datos) | |
comb = dict() | |
for y in xrange(h): | |
for x in xrange(w): | |
if x > 0 and y > 0 and x < w - 1 and y < h - 1: | |
(angulo, rho) = resultado[y][x] | |
if angulo is not None: | |
combinacion = (angulo, rho) | |
if combinacion in comb: | |
comb[combinacion] += 1 | |
else: | |
comb[combinacion] = 1 | |
frec = frecuentes(comb, int(ceil(len(comb) * incluir))) | |
for y in range(h): | |
renglon = list() | |
for x in range(w): | |
(ang, rho) = resultado[y][x] | |
if (ang, rho) in frec: | |
if str(ang) == "90.00": | |
imagen.putpixel((x,y), (255,0,0)) | |
if str(ang) == "0.00": | |
imagen.putpixel((x,y), (0,255,0)) | |
imagen.save("Prueba.jpg") | |
return imagen |
Estos son los resultados de la imagen.
![]() |
Original |
![]() |
Procesada |
![]() |
Original |
![]() |
Procesada |
atan está con madre; sería bueno jugar con diferentes cantidades de frecuentes a incluir, pero está bien, 5 pts.
ResponderEliminar