Ir al contenido principal

Tarea #3 - Vision(LAB) - Detección de lineas - Python

Que tal, para esta entrada se nos encargo hacer un .py que fuera capaz de detectar lineas horizontales y verticales y pintarlas de color rojo.

Para hacer esto se uso el algoritmo de Hough, el cual dice que se recorre toda la imagen pixel por pixel, cuando se detecta un pixel tipo borde, se calcula su RHO y su THETA y se agregan a un lista, si otro pixel vuelve a tener los mismo valores entonces se va acumulando(votando) al final los pixeles mas votados son lo que forman una linea recta.

Para hacer esto se tiene que tomar en cuanta varias cosas, por ejemplo y lo principal, el calculo de RHO y THETA, que los libros nos dicen, mas bien nos muestran la sig. formula.

formula para RHO

donde "x" y "y" son la coordenada del pixel actual y THETA es el ángulo que se forma del Punto de origen(tu lo eliges) hasta el pixel actual y se calcula con la siguiente formula.

formula para THETA

Con esta formula la teoría nos dice que por cada pixel tendremos finitas lineas rectas que crucen por el pixel actual, pero solo tomaremos en cuenta aquellas rectas que tengan un pixel tipo borde como vecino. Aparte de eso, tendremos que llamar o sumar o votar como lo allás entendido mejor, por los mejores candidatos(pixeles) que formen una recta.

Basta de teoría..... pongamos en practica todo lo anterior.

Lo primero que necesitamos en sacar "gx" y "gy" para poder calcular THETA, para esto usamos los gradrientes obtenidos del operador sobel(o cualquier otra mascara) y el calculo de THETA seria "relativamente fácil" :| y una vez que tengas THETA tendrás que normalizarla, también "relativamente fácil" :|

pero bueno, este es la función que lo hace, y los resultados que arrojan los podrán ver un poco mas abajo de esta entrada.



Resultados....

Original


Salida

El programa aun genera mucho ruido y existen pedazos de linea que debería detectar y no lo hace pero en la próxima entrega lo arreglare.


REFERENCIAS

http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/2013.html (teoría)
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/histograma.py (código python)

Comentarios

  1. La función atan2 resuelve muchos de los casos especiales que tienes que manejar. Acabo de aprender que existe esa cosa :P 4 pts.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Pequeño Juego con LEDS y Dip Switch

Siguiendo con los mini-proyectos, lo que quería hacer originalmente era un tipo "candado" con push-button y LEDs, el objetivo seria, meter la combinacion de botones correcta y los LEDS encendería por un motivo practico, en forma de serpiente. El objetivo no cambio, pero por falta de "material" lo hice con un dip switch de X entradas(depende de que tan grande quieras la combinación). CONOCIMIENTOS(max. 7 estrellas): Electronica:     ★ ★ Programación: ★ ★ Juego de Combinación + LEDs El programa es un poco mas complicado que el mini-proyecto pasado , pero aun asi es basico. Guardamos las salidas de los LEDs en un arreglo, despues con los valores recibidos y comparados de los dip switch jugamos con los LEDś. Hardware Requerido (1) Arduino Uno (6) LED (8) Resistencias 330 Ω (1) Dip Switch Circuito Usamos las salidas del ARduino 2-7 para los LEDS Usamos la salida A5, A4 para el dip switch Para hacer prender los LEDS tienes que encontrar la

Tarea #5 - Codigo Hamming - Python

Codigo hamming Liga al repo Teoria segun wikipedia Antes de los códigos Hamming se utilizaron ciertos códigos detectores de error, como lo fueron el código linteing, pero ninguno llegó a ser tan eficaz como los de Hamming. A continuación se describen algunos de estos códigos. Paridad   La   paridad   consiste en añadir un bit, denominado   bit de paridad , que indique si el número de los bits de valor 1 en los datos precedentes es par o impar. Si un solo bit cambiara por error en la transmisión, el mensaje cambiará de paridad y el error se puede detectar (nótese que el bit donde se produzca el error puede ser el mismo bit de paridad). La convención más común es que un valor de paridad   1   indica que hay un número impar de unos en los datos, y un valor de paridad de   0   indica que hay un número par de unos en los datos. info. completa y un vídeo que me ayudo mucho para esta tarea: (TIENEN QUE VERLO - OBLIGATORIO) http://www.youtube.com/watch?v=xiDPFm9PeLU Impleme

Potenciometro + pushboton + led

Bueno, estos días he estado practicando con los ejemplos de la pagina de Arduino , algunos que me llamaron la atención los voy a compartir, por supuesto con modificaciones. Nivel de conocimientos: Electronica:        ★   Programació n :    ★    Potenciometro + push-boton = LEDintensidad El mini-proyecto es controlar la intensidad de un LED mediante un potenciometro el cual combinado con push-botton para prenderlo o apagarlo. Hardware Requerido (1) Arduino UNO (1) Potenciometro (1) Push-boton (1) LED (1) Resistencia 330 Ω Circuito Conectamos el LED al PIN 9 del Arduino Conectamos el PUSH_BOTON al PIN ANOLOGICO 0 (A0) Conectamos el POTENCIOMETRO al PIN ANOLOGICO 1 (A1) El funcionamiento del circuito es basico, mientras tengas pulsado el Push-Boton el LED se mantendrá encendido y con el pontenciometro controlas la intensidad del LED. Código Video