A transformação Hough é uma tecnologia de extração de recursos no processamento de imagens. Esse processo em um espaço de parâmetro calcula o valor máximo local dos resultados acumulados em um conjunto que está em conformidade com uma forma específica como resultado da transformação de Hough.
História do desenvolvimento:
Primeiro proposto por Paul Hough em 1962 para detectar linhas retas e curvas.
Promovido por Richard Duda e Peter Hart em 1972, expandiu -se para o reconhecimento de objetos de qualquer forma.
princípio:
Uma linha reta é representada em um sistema de coordenadas retangulares como y = k*x+b e em um sistema de coordenadas polares como r = x*cos (teta)+y*sin (teta). A idéia de transformação de Hough é que um ponto no sistema de coordenadas retangulares corresponde a uma linha reta sob o sistema de coordenadas polares e, da mesma forma, um ponto no sistema de coordenadas polares corresponde a uma linha reta sob o sistema de coordenadas retangulares. Em uma linha reta em um sistema de coordenadas retangulares, a inclinação e a interceptação são certas, para que todos os pontos nessa linha reta estejam focados em um ponto no sistema de coordenadas polares, e esse ponto de foco representa a linha reta no sistema de coordenadas retangulares.
Para a linha reta x = c, em aplicações práticas, a equação do parâmetro p = x*cos (teta)+y*sin (teta) é usada. Dessa maneira, um ponto no plano da imagem corresponde a uma curva no plano R-teta do parâmetro, e o restante é o mesmo.
Transformação padrão de Hough:
Imgproc.houghlines (imagem da esteira, linhas de tapete, duplo rho, teta duplo, limiar int, srn duplo, stn duplo, min_theta, duplo max_theta)
Descrição do parâmetro:
Imagem: imagem de origem
Linhas: o vetor de saída da linha detectado é armazenado após a transformação de Hough
Rho: precisão da distância em pixels
Theta: precisão do ângulo em radianos
limiar: o valor que deve ser alcançado quando uma peça é uma linha reta
SRN: A distância do divisor do parâmetro rho, com um valor padrão de 0
STN: A distância do divisor do parâmetro teta, valor padrão 0
min_theta: ângulo mínimo da linha detectada
max_theta: ângulo máximo da linha detectada
Código de exemplo:
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, armazenamento, 1, math.pi / 180, 200, 0, 0, 0, 0, 10); for (int x = 0; x <storage.rows (); x ++) {duplo [] vec = storage.get (x, 0); duplo rho = vec [0]; duplo teta = vec [1]; Ponto pt1 = new Point (); Ponto pt2 = new Point (); duplo a = math.cos (teta); duplo b = math.sin (teta); duplo x0 = a * rho; duplo 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, new Scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); }} Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Probabilidade cumulativa de transformação:
Imgproc.houghLinesp (imagem da esteira, linhas de tape
Descrição do parâmetro:
Imagem: imagem de origem
Linhas: o vetor de saída da linha detectado é armazenado após a transformação de Hough
Rho: precisão da distância em pixels
Theta: precisão do ângulo em radianos
limiar: o valor que deve ser alcançado quando uma peça é uma linha reta
MinlineLenthngth: o comprimento do segmento de linha mais baixo, padrão para 0
MaxLineGap: A distância máxima permitida conectar pontos aos pontos na mesma linha, o padrão é 0
Código de exemplo:
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, armazenamento, 1, math.pi / 180, 50, 0, 0); for (int x = 0; x <storage.rows (); x ++) {duplo [] vec = storage.get (x, 0); duplo x1 = vec [0], y1 = vec [1], x2 = vec [2], y2 = vec [3]; Ponto inicial = novo ponto (x1, y1); Ponto final = novo ponto (x2, y2); Imgproc.line (srcimage, start, fim, novo escalar (255, 255, 255, 255), 1, imgproc.line_4, 0); } Imgcodec.imwrite ("f: //dst2.jpg", srcimage); } Imagem de origem:
Resultados padrão de transformação de Hough:
A probabilidade cumulativa do resultado da transformação:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.