miércoles, 27 de febrero de 2013

Lab 4: Detección de lineas diagonales

Para el laboratorio de visión computacional se nos pide detectar lineas diagonales, es por eso que utilizando la transformada de Hough y utilizando las mascaras de gradiente para 0 y 90 grados de Pewitt, detecto las lineas horizontales, verticales y diagonales de una imagen.

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, horizontales y diagonales, este es el código.


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
print str(pixel_X) + " " + str(pixel_Y)
if fabs(pixel_X) > CERO:
angulo = atan(pixel_Y/pixel_X)
else:
if fabs(pixel_X) + fabs(pixel_Y) <= CERO:
angulo = None
elif pixel_X == 0.0 and pixel_Y == 255.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), (0,255,0))
elif str(ang) == "0.00":
imagen.putpixel((x,y), (0,0,255))
else:
imagen.putpixel((x,y), (255,0,0))
imagen.save("Prueba.jpg")
return imagen
view raw diagonal.py hosted with ❤ by GitHub
Estos son los resultados de la imagen.






2 comentarios:

  1. Lo obligatorio está más o menos decente; me hubiera gustado un todo diferente a líneas de diferente pendiente. 7 pts.

    ResponderEliminar
  2. Great points there, thanks. And here is the relevant article, maybe someone will find it useful too
    https://cgifurniture.com/3d-prototyping-benefits-for-furniture-business/

    ResponderEliminar