Hough Transformation est une technologie d'extraction de caractéristiques dans le traitement d'image. Ce processus dans un espace de paramètres calcule la valeur maximale locale des résultats accumulés à un ensemble conforme à une forme spécifique à mesure que le résultat de transformation Hough.
Histoire du développement:
Paul Hough pour la première fois en 1962 pour détecter les lignes et les courbes droites.
Promu par Richard Duda et Peter Hart en 1972, il s'est étendu à la reconnaissance des objets de toute forme.
principe:
Une ligne droite est représentée dans un système de coordonnées rectangulaires comme y = k * x + b, et dans un système de coordonnées polaire comme r = x * cos (thêta) + y * sin (thêta). L'idée de transformation Hough est qu'un point dans le système de coordonnées rectangulaires correspond à une ligne droite sous le système de coordonnées polaires, et de même, un point dans le système de coordonnées polaires correspond à une ligne droite sous le système de coordonnées rectangulaires. Dans une ligne droite dans un système de coordonnées rectangulaires, la pente et l'interception sont certain, de sorte que tous les points sur cette ligne droite sont focalisés à un point du système de coordonnées polaires, et un tel point de mise au point représente la ligne droite dans le système de coordonnées rectangulaires.
Pour la ligne droite x = c, dans les applications pratiques, l'équation de paramètre p = x * cos (thêta) + y * sin (thêta) est utilisée. De cette façon, un point sur le plan d'image correspond à une courbe sur le plan du paramètre r-theta, et les autres sont les mêmes.
Transformation standard:
Imgproc.houghnes (image de tapis, lignes de tapis, double rho, double thêta, seuil int, double srn, double stn, double min_theta, double max_theta)
Description du paramètre:
Image: image source
Lignes: le vecteur de sortie de la ligne détectée est stocké après la transformation de Hough
Rho: précision de distance dans les pixels
thêta: précision d'angle dans les radians
Seuil: la valeur qui doit être atteinte lorsqu'une pièce est une ligne droite
SRN: la distance du diviseur du paramètre Rho, avec une valeur par défaut de 0
STN: la distance du diviseur du paramètre thêta, valeur par défaut 0
min_theta: angle minimum de la ligne détectée
Max_theta: angle maximum de la ligne détectée
Exemple de code:
public static void main (String [] args) {System.LoadLibrary (core.native_library_name); Mat srcimage = imgcodecs.imread ("f: //6597210504144579394.jpg"); Mat dstimage = srciage.clone (); Imgproc.canny (srcimage, dstimage, 400, 500, 5, false); Mat Stockage = new Mat (); Imgproc.houghnes (dstimage, stockage, 1, math.pi / 180, 200, 0, 0, 0, 10); pour (int x = 0; x <Storage.Rows (); x ++) {double [] Vec = Storage.Get (x, 0); double rho = vec [0]; double thêta = vec [1]; Point pt1 = nouveau point (); Point pt2 = nouveau point (); double a = math.cos (theta); double b = math.sin (thêta); 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) {imgpro.line (srcimage, pt1, pt2, nouveau scalar (255, 255, 255, 255), 1, imgpro.line_4, 0); }} Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Probabilité cumulative Transformation de Hough:
Imgproc.houghlinesp (image de tapis, lignes de tapis, double rho, double thêta, seuil int, double minlineLength, double maxlinegap)
Description du paramètre:
Image: image source
Lignes: le vecteur de sortie de la ligne détectée est stocké après la transformation de Hough
Rho: précision de distance dans les pixels
thêta: précision d'angle dans les radians
Seuil: la valeur qui doit être atteinte lorsqu'une pièce est une ligne droite
MinlineLength: la longueur du segment de ligne le plus bas, par défaut à 0
MaxlineGap: la distance maximale autorisée à connecter les points à des points sur la même ligne, par défaut est 0
Exemple de code:
public static void main (String [] args) {System.LoadLibrary (core.native_library_name); Mat srcimage = imgcodecs.imread ("f: //6597210504144579394.jpg"); Mat dstimage = srciage.clone (); Imgproc.canny (srcimage, dstimage, 400, 500, 5, false); Mat Stockage = new Mat (); Imgproc.houghlinesp (dstimage, stockage, 1, math.pi / 180, 50, 0, 0); pour (int x = 0; x <Storage.Rows (); x ++) {double [] Vec = Storage.Get (x, 0); double x1 = vec [0], y1 = vec [1], x2 = vec [2], y2 = vec [3]; Point start = nouveau point (x1, y1); Point End = nouveau point (x2, y2); IMGPROC.LINE (SrciMage, Start, End, New Scalar (255, 255, 255, 255), 1, imgpro.line_4, 0); } Imgcodecs.imwrite ("f: //dst2.jpg", srcimage); } Image source:
Résultats de transformation standard de Hough:
La probabilité cumulée de la transformation de la transformation:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.