martes, 26 de febrero de 2013

Tarea 3 Detección de líneas




En esta tarea consiste en la detección de líneas en una imagen, el cual utilizamos la transformada de hough.


Para esto hay que sacar “rho” en cada píxel, esto nos da la dirección que tiene.
Para los gradientes de x y y se utiliza la siguiente ecuación:


Para sacar gradiente en X y Y se utilizó la máscara de sobel, ya que esta ya la habíamos utilizado en una Tarea anterior.

Código:
#Convolucion
im = Image.open("escala.jpg")
pix = im.load()
dirX = ([-1, 0, 1], [-2, 0, 2], [-1, 0, 1])
dirY = ([1, 2, 1], [0, 0, 0], [-1, -2, -1])
for x in range(0,ancho-3): #Ancho
for y in range(0,largo-3): #Largo
sumDirX=0
sumDirY=0
for i in range(0,3):
for j in range(0,3):
sumDirX +=(pix[x+i,y+j][0]*dirX[i][j])
sumDirY +=(pix[x+i,y+j][0]*dirY[i][j])
potX = pow(sumDirX, 2)
potY = pow(sumDirY, 2)
res = int(math.sqrt(potX+potY))
if res > 255:
res = 255
if res < 0:
res = 0
pix[x,y] = (res, res, res)
im.save("convolucion.jpg")
imagen=pygame.image.load("convolucion.jpg")
ventana.blit(imagen,(0,0))
pygame.display.update()
#Lineas
CERO = 0.00001
gx = dirX
gy = dirY
for x in range(ancho):
rhos.append([])
ang.append([])
magn.append([])
for y in range(largo):
hor = gx[y][x]
ver = gy[y][x]
magnitud = m[y][x]
if fabs(hor) > CERO:
angulo = atan(ver / hor) # RELEVANTE
else:
if fabs(hor) + fabs(ver) < CERO:
angulo = None # aqui no hay nada en ninguna direccion
elif fabs(ver - hor) < CERO: # casi iguales
angulo = atan(1.0)
elif hor * ver > 0.0: # mismo signo
angulo = pi
else: # negativo -> -pi
angulo = 0.0
# eje vertical volteado y origen al centro
if angulo is not None:
# asegurar que este entre cero y pi (0 y 180)
while angulo < CERO:
angulo += pi
while angulo > pi:
angulo -= pi
rho = (x - ancho/2) * cos(angulo) + (largo/2 - y) * sin(angulo) # RELEVANTE
# hay que discretizar - RELEVANTE
magn[x].append(magnitud)
ang[x].append('%.0f' % (int(180 * (angulo / pi)) / 18))
rhos[x].append('%.0f' % rho)
else:
magn[x].append(None)
ang[x].append(None)
rhos[x].append(None)
im.save("lineas.jpg")
imagen=pygame.image.load("lineas.jpg")
ventana.blit(imagen,(0,0))
pygame.display.update()
view raw Lineas.py hosted with ❤ by GitHub




Resultado: No logre detectar las líneas.

1 comentario:

Elisa dijo...

Pues, es algo. atan2 facilitaría la vida. 2 pts.

Publicar un comentario