Hough -Transformation ist eine Merkmalextraktionstechnologie in der Bildverarbeitung. Dieser Prozess in einem Parameterraum berechnet den lokalen Maximalwert der akkumulierten Ergebnisse an einen Satz, der einer bestimmten Form als Hough -Transformationsergebnis entspricht.
Entwicklungsgeschichte:
Erster von Paul Hough im Jahr 1962 vorgeschlagen, um gerade Linien und Kurven zu erkennen.
1972 von Richard Duda & Peter Hart gefördert, erweiterte es die Anerkennung von Objekten jeglicher Form.
Prinzip:
Eine gerade Linie wird in einem rechteckigen Koordinatensystem als y = k*x+b und in einem polaren Koordinatensystem als r = x*cos (theta)+y*sin (theta) dargestellt. Die Idee der Hough -Transformation besteht In einer geraden Linie in einem rechteckigen Koordinatensystem sind die Steigung und Abschnitt sicher, so dass alle Punkte auf dieser geraden Linie an einem Punkt im polaren Koordinatensystem fokussiert sind und ein solcher Fokuspunkt die gerade Linie im rechteckigen Koordinatensystem darstellt.
Für die gerade Linie x = c wird in praktischen Anwendungen die Parametergleichung p = x*cos (theta)+y*sin (theta) verwendet. Auf diese Weise entspricht ein Punkt auf der Bildebene einer Kurve auf der Parameter R-Theta-Ebene, und der Rest ist gleich.
Standard -Hough -Transformation:
IMGPROC.HOUTHLINES (MAT -Bild, Mattenlinien, Doppel -Rho, Doppel -Theta, int -Schwelle, doppelte SRN, Double STN, Double min_theta, Double Max_theta)
Parameterbeschreibung:
Bild: Quellenbild
Linien: Der Ausgangsvektor der erkannten Linie wird nach der Hough -Transformation gespeichert
Rho: Entfernungsgenauigkeit in Pixeln
Theta: Winkelgenauigkeit bei Radians
Schwellenwert: Der Wert, der erreicht werden muss, wenn ein Teil eine gerade Linie ist
SRN: Der Divisorabstand des Rho -Parameters mit einem Standardwert von 0
STN: Der Divisor -Abstand des THETA -Parameters, Standardwert 0
min_theta: Mindestwinkel der erkannten Linie
max_theta: maximaler Winkel der erkannten Linie
Beispielcode:
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, False); MAT Storage = new Mat (); IMGPROC.Houghlines (DStimage, Storage, 1, Math.pi / 180, 200, 0, 0, 0, 10); für (int x = 0; x <storlung.rows (); x ++) {double [] vec = storate.get (x, 0); double rho = vec [0]; doppelt theta = vec [1]; Punkt pt1 = neuer Punkt (); Punkt pt2 = neuer Punkt (); double a = math.cos (theta); double b = math.sin (theta); double x0 = a * rho; double 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, neuer Scalar (255, 255, 255, 255), 1, imgproc.line_4, 0); }} Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Kumulative Wahrscheinlichkeits -Hough -Transformation:
IMGPROC.Houghlinesp (MAT -Bild, MAT -Linien, Doppel -Rho, Doppel -Theta, int -Schwelle, doppelte Minlinlänge, doppelter MaxLineGap)
Parameterbeschreibung:
Bild: Quellenbild
Linien: Der Ausgangsvektor der erkannten Linie wird nach der Hough -Transformation gespeichert
Rho: Entfernungsgenauigkeit in Pixeln
Theta: Winkelgenauigkeit bei Radians
Schwellenwert: Der Wert, der erreicht werden muss, wenn ein Teil eine gerade Linie ist
Minlinelength: Die Länge des niedrigsten Leitungssegments, Standard auf 0
MaxLineGap: Der maximale Abstand, der Punkte mit Punkten in derselben Zeile anschließen kann, beträgt die Standardeinstellung 0
Beispielcode:
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, False); MAT Storage = new Mat (); IMGPROC.Houghlinesp (DStimage, Storage, 1, Math.pi / 180, 50, 0, 0); für (int x = 0; x <storlung.rows (); x ++) {double [] vec = storate.get (x, 0); double x1 = vec [0], y1 = vec [1], x2 = vec [2], y2 = vec [3]; Punkt start = neuer Punkt (x1, y1); Point End = neuer Punkt (x2, y2); IMGPROC.LINE (SRCIMAGE, START, END, NEUER SCALAR (255, 255, 255, 255), 1, imgproc.line_4, 0); } Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Quellbild:
Standard -Hough -Transformationsergebnisse:
Die kumulative Wahrscheinlichkeitsergebnis der Hough -Transformation:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.