Hough Transformation es una tecnología de extracción de características en el procesamiento de imágenes. Este proceso en un espacio de parámetros calcula el valor máximo local de los resultados acumulados a un conjunto que se ajusta a una forma específica como resultado de la transformación de Hough.
Historia del desarrollo:
Propuesta por primera vez por Paul Hough en 1962 para detectar líneas rectas y curvas.
Promocionado por Richard Duda y Peter Hart en 1972, se expandió al reconocimiento de objetos de cualquier forma.
principio:
Una línea recta se representa en un sistema de coordenadas rectangular como y = k*x+b, y en un sistema de coordenadas polares como r = x*cos (theta)+y*sin (theta). La idea de la transformación de Hough es que un punto en el sistema de coordenadas rectangulares corresponde a una línea recta debajo del sistema de coordenadas polar, y de manera similar, un punto en el sistema de coordenadas polar corresponde a una línea recta debajo del sistema de coordenadas rectangulares. En una línea recta en un sistema de coordenadas rectangulares, la pendiente y la intersección son ciertos, por lo que todos los puntos en esta línea recta se centran en un punto en el sistema de coordenadas polares, y dicho punto de enfoque representa la línea recta en el sistema de coordenadas rectangulares.
Para la línea recta x = c, en aplicaciones prácticas, se usa la ecuación de parámetros p = x*cos (theta)+y*sin (theta). De esta manera, un punto en el plano de imagen corresponde a una curva en el plano del parámetro R-theta, y el resto es el mismo.
Transformación estándar de Hough:
Imgproc.Houghlines (imagen de tap, líneas MAT, doble rho, doble theta, umbral int, doble srn, doble stn, doble min_theta, doble max_theta)
Descripción del parámetro:
Imagen: imagen de origen
Líneas: El vector de salida de la línea detectada se almacena después de la transformación de Hough
Rho: precisión de distancia en píxeles
Theta: precisión del ángulo en radianes
Umbral: el valor que debe alcanzarse cuando una parte es una línea recta
SRN: la distancia divisor del parámetro Rho, con un valor predeterminado de 0
STN: la distancia del divisor del parámetro theta, valor predeterminado 0
min_theta: ángulo mínimo de la línea detectada
max_theta: ángulo máximo de la línea detectada
Código de muestra:
public static void main (string [] args) {system.loadLibrary (core.native_library_name); MAT srcImage = imgCodecs.imread ("f: //6597210504144579394.jpg"); Mat dstimage = srcimage.clone (); Imgproc.canny (srcImage, dstimage, 400, 500, 5, falso); Mat Storage = new Mat (); Imgproc.houghlines (dstimage, almacenamiento, 1, math.pi / 180, 200, 0, 0, 0, 10); for (int x = 0; x <storage.rows (); x ++) {double [] vec = storage.get (x, 0); doble rho = vec [0]; doble theta = vec [1]; Punto pt1 = nuevo punto (); Punto pt2 = nuevo punto (); doble a = math.cos (theta); doble b = math.sin (theta); doble x0 = a * rho; doble y0 = b * rho; pt1.x = math.round (x0 + 1000 * (-b)); pt1.y = math.round (y0 + 1000 * (a)); pt2.x = math.round (x0 - 1000 * (-b)); pt2.y = math.round (y0 - 1000 * (a)); if (theta> = 0) {imgproc.line (srcimage, pt1, pt2, scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); }} Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Transformación acumulada de Hough:
Imgproc.houghlinesp (imagen MAT, MAT Lines, Double Rho, Doble Theta, INT Umbral, Double MinlinELLength, Double MaxLineGap)
Descripción del parámetro:
Imagen: imagen de origen
Líneas: El vector de salida de la línea detectada se almacena después de la transformación de Hough
Rho: precisión de distancia en píxeles
Theta: precisión del ángulo en radianes
Umbral: el valor que debe alcanzarse cuando una parte es una línea recta
MinlinEldentil: la longitud del segmento de línea más bajo, predeterminado a 0
MaxLineGap: la distancia máxima se permite conectar puntos a puntos en la misma línea, el valor predeterminado es 0
Código de muestra:
public static void main (string [] args) {system.loadLibrary (core.native_library_name); MAT srcImage = imgCodecs.imread ("f: //6597210504144579394.jpg"); Mat dstimage = srcimage.clone (); Imgproc.canny (srcImage, dstimage, 400, 500, 5, falso); Mat Storage = new Mat (); Imgproc.houghlinesp (dstimage, almacenamiento, 1, math.pi / 180, 50, 0, 0); for (int x = 0; x <storage.rows (); x ++) {double [] vec = storage.get (x, 0); doble x1 = vec [0], y1 = vec [1], x2 = vec [2], y2 = vec [3]; Punto inicial = nuevo punto (x1, y1); Punto final = nuevo punto (x2, y2); Imgproc.line (srcImage, start, fin, new Scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); } Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Imagen de origen:
Resultados de transformación de Hough estándar:
El resultado de la transformación de la probabilidad acumulativa:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.