sábado, 28 de agosto de 2010

TRANSFORMADA DE HOUGH

Durante la resolución de nuestro primer reto, hemos utilizado una función de OpenCV CvHoughCircles, que es la encargada de buscar el contorno de la moneda.  ¿Pero realmente que hace esta función?.  Esta función realmente sirve para encontrar circunferencias en una imagen, primero aplica un detector de contornos, como pueden ser los algoritmos de Sobel o Canny, más adelante ablaremos de ellos, y después aplica la transformada de Hough para circulos.

¿Qué es la transformada de Hough?

Esta transformada intenta buscar figuras geometricas simples en una imagen.  Cuando se procesa emplea toda la imagen, haciendola robusta ante la presencia de ruido o las discontinuidades de las etapas previas, ya que para hacer esta transformada primero hemos de binearizar la imagen con los bordes seleccionados, o sea tenemos que aplicar un detector de bordes.  A partir de aqui el algoritmo intentará buscar figuras geometricas, como pueden ser linea, circulos elipses.


DETECCIÓN DE LÍNEAS

Considerando un punto de coordenadas (Xi,Yi), como elemento que representa un borde; sobre éste pasarán infinitas rectas:
                  Yi=aXi+b   (1)
Que es la ecuación de una recta, en la cual . En la que tendremos que calcular los parámetros a y b.  Si despejamos b.
                 b=Yi-aXi  (2)
Al variar el parámetro a desde menos infinito hasta mas infinito se obtendrá los infinitos valores de b. La representación geométrica de  b = Yi − aXi , es una recta. La característica interesante de esta presentación consiste que si dos puntos que pertenezcan a una misma recta (1) implicará que tengan el mismo valor de a y b. 

Entonces la transformada de Hough aplica este concepto a las líenas rectas de la imagen.  Discretizando la imagen desde un valor de "a minimo" hasta un valor de "a maximo" y desde "b minimo" hasta "b máximo" creando unas rejillas de acumulación.  Por cada punto, considerado como borde, se hace recorrer el rángo de a obteniedo b.  Por cada valor de a y b se pone un voto.  Al finalizar, aquellos valores con más votos indicaran la presencia de rectas en la imagen, cuyo modelo corresponderá con los valores de a y b.

DETECCIÓN DE CIRCULOS
En este caso utilizaremos la ecuación de la circunferencia.
                  (Xi-Xo)^2+(Yi-Yo)^2=r^2
Las votaciones  se realizarán variando la posición del centro del círculo, (Xo, Yo, para cada píxel etiquetado, (xi,yi), obteniendo los distintos valores del radio, r.  Los círculos seleccionados serán aquellos que superen un cierto umbral de votos recibidos. El mayor inconveniente es su alto coste computacional. Una forma de ahorro en el cálculo es prefijar el valor del radio del círculo. Si se conoce el radio, junto con la información de la orientación del gradiente del píxel etiquetado, (Xi,Yi), las posibles coordenadas del centro del círculo darán una nube de puntos limitados.
La ventaja de esta detección de los círculos proviene de las características inherentes de las transformadas de Houhg, la inmunidad al ruido y que es capaz de detectar círculos, aunque exista oclusión del mismo. Por otro lado, en este tipo de curvas, al ser cerradas, no hay problemas del carácter infinito de las líneas rectas. Los círculos están definidos en la imagen, sin ninguna expansión.


No hay comentarios:

Publicar un comentario