2009-09-01 16 views
26

Estoy tratando de implementar la detección de rectángulo usando Hough transform, basado en this paper.Detección de rectángulo con transformada Hough

Lo programé usando Matlab, pero después de la detección de pares paralelos y pares ortogonales, debo detectar la intersección de estos pares. Mi pregunta es sobre la calidad de la intersección de dos líneas en el espacio Hough.

Encontré los puntos de intersección resolviendo cuatro sistemas de ecuaciones. ¿Estos puntos de intersección se encuentran en el espacio de coordenadas cartesianas o polares?

+0

¿Puede dar más detalles? – endolith

+0

Ningún documento con DOI "10.1.1.59.4239" El identificador de documento proporcionado no concuerda con ningún documento en nuestro repositorio. El DOI que ha solicitado - 10.1.1.59.4239 - no se puede encontrar en el sistema de manija. – endolith

+0

El documento citado y el OP se pierden. ¿Deberíamos cerrar este? –

Respuesta

0

No soy matemático. Estoy dispuesto a estar corregido ...
De Hough 2) ... cualquier línea en el plano xy se puede describir como p = x cos theta + y sin theta. En esta representación, p es la distancia normal y theta es el ángulo normal de una línea recta ... En aplicaciones prácticas, los ángulos theta y las distancias p se cuantifican, y obtenemos una matriz C (p, theta).
de CRC tablas matemáticas estándar Geometría Analítica, polares coordenadas en un plano de sección ... un tal par ordenado de números (r, theta) se llaman coordenadas polares del punto p. Líneas rectas: let p = distancia de la línea desde O, w = ángulo en sentido antihorario desde OX hasta la perpendicular a través de O hasta la línea. Forma normal: r cos (theta - w) = p. De esto concluyo que los puntos se encuentran en el espacio de coordenadas polares.

1

El enlace al papel al que se hace referencia no funciona, pero si usó la transformada estándar Hough, los cuatro puntos de intersección se expresarán en coordenadas cartesianas. De hecho, las cuatro líneas detectadas con el TRANFORM Hough se expresarán mediante la "parametrización normal":

rho = x cos(theta) + y sin(theta) 

por lo que tendrá cuatro pares (rho_i, theta_i) que identifica sus cuatro líneas. Después de la comprobación de ortogonalidad (por ejemplo simplemente mediante la comparación de los ángulos theta_i) a resolver cuatro sistema de ecuaciones cada uno de la forma:

rho_j = x cos(theta_j) + y sin(theta_j) 
rho_k = x cos(theta_k) + y sin(theta_k) 

donde x e y son las incógnitas que representan las coordenadas cartesianas del punto de intersección.

6

Para aquellos que se preguntan sobre el papel, es:

Detección del rectángulo de ventana en base a una transformada de Hough de Cláudio Rosito Jung y Rodrigo Schramm.

Ahora, según el documento, los puntos de intersección se expresan como coordenadas polares, obviamente su implementación puede ser diferente (la única forma de saber es mostrarnos su código).

Suponiendo que está siendo coherente con su notación, sus picos deberían expresarse como:

Peaks

A continuación, debe realizar el pico de pelado dada por la ecuación (3) en la sección 4.3 o

equation 3

donde T_theta representa el umbral angular correspondiente a líneas paralelas y enter image description here es el umbral normalizado correspondiente a las líneas de longitud similar.

+0

Debería ser \ delta \ rho = | \ rho_i + \ rho_j | DomTomCat

4

La precisión del espacio Hough debe depender de dos factores principales.

El acumulador se asigna a Hough Space. Para recorrer el conjunto de acumuladores se requiere que el acumulador divida Hough Space en una cuadrícula discreta.

El segundo factor de precisión en Lineal Hough Space es la ubicación del origen en la imagen original. Busque por un momento lo que sucederá si hace un barrido de \ theta para cualquier cambio dado en \ rho. Cerca del origen, uno de estos barridos cubrirá muchos menos píxeles que un barrido cerca de los bordes de la imagen. Esto tiene la consecuencia de que cerca de los bordes de la imagen necesita una resolución \ rho \ theta mucho más alta en su acumulador para lograr el mismo nivel de precisión cuando se transforma nuevamente en cartesiano.

El problema con el aumento de la resolución, por supuesto, es que necesitará más potencia computacional y memoria para aumentarlo. Además, si aumenta de manera uniforme la resolución del acumulador, habrá perdido la resolución cerca del origen donde no se necesita.

Algunas ideas para ayudar con esto.

  1. Coloque el origen en el centro de la imagen . a diferencia de usando la parte inferior izquierda natural o la parte superior a la izquierda de una imagen en el código.
  2. intente utilizar la imagen más cercana que pueda llegar a un cuadrado. la imagen más alargada es una para un área dada la más pronunciada la trampa resolución se convierte en los bordes
  3. trate de dividir la imagen en 4/9/16 etc acumuladores diferentes cada uno con un origen en el centro de esa sub-imagen. Se requerirá un poco de sobrecarga para vincular los resultados de cada acumulador juntos para la detección de rectángulo, pero debería ayudar a extender la resolución más uniformemente.
  4. La solución final sería aumentar la resolución linealmente dependiendo de la distancia desde el origen. esto se puede lograr mediante el

(x-a)^2 + (y-b)^2 = \rho^2 

circle equation where 
    - x,y are the current pixel 
    - a,b are your chosen origin 
    - \rho is the radius 
once the radius is known adjust your accumulator 
resolution accordingly. You will have to keep 
track of the center of each \rho \theta bin. 
for transforming back to Cartesian 
+0

¿tiene alguna sugerencia sobre cómo combinar los acumuladores después de haber analizado dos partes de la imagen? (tu punto 3) – Denis

Cuestiones relacionadas