Application des tables de codes de chaîne et des tables de segments de ligne à la détection de la position des trous de circuit imprimé Résumé: cet article examine la position des trous de circuit imprimé dans l'industrie pour atteindre l'objectif d'une machine de poinçonnage de carte PCB standard. Un prétraitement efficace des images acquises par CCD utilise une combinaison de tables de codes de chaîne et de tables de segments pour déterminer avec précision et rapidité la position du Centre de masse des trous de PCB. La méthode de cet article peut détecter avec précision le Centre de masse au niveau de 0001 pixels. Découvrez la zone, la circonférence, la forme et le Centre de masse du trou. La méthode fonctionne avec succès sur la plate - forme VC + + 6.0 et est programmée rapidement, ce qui permet une détection en temps réel, précise, intelligente et par lots, améliorant considérablement la qualité et la vitesse de détection des cartes PCB.
Présentation
L'inspection optique automatisée (AOI) est une méthode de détection visuelle apparue ces dernières années. Il acquiert des images par CCD et juge les défauts et les pannes par traitement informatique et analyse. L'application de l'AOI sur la ligne de production de PCB présente les avantages d'une vitesse de détection rapide, d'un temps de programmation court et d'un contrôle de détection intelligent de grandes quantités d'images. Avec le développement de la technologie industrielle, les exigences en matière de taille d'ouverture de la carte PCB sont de plus en plus élevées, tout comme les exigences en matière de production en série de machines. Cet article est dérivé d'un projet d'une entreprise qui fabrique des machines de comptage de trous. Les exigences techniques sont un rayon minimum de 0,2 mm pour l'emplacement des trous de PCB, avec jusqu'à 2 000 trous ronds sur chaque PCB. Le temps de traitement total ne dépasse pas 10 S. Résultats obtenus après traitement. Le Centre du cercle est précis à 0,01 pixel et chaque centre du cercle ne doit pas s'écarter de plus de 25 µm du Centre du modèle. Si 80% de l'écart central dépasse cet indicateur, il est considéré comme non conforme et l'étalonnage de l'équipement doit être ajusté.
Par « bord », on entend une collection de pixels dont les niveaux de gris des pixels changent par paliers ou dont les toits changent. Il existe entre les objectifs et le contexte, les objectifs et les cibles, les régions et les régions, les primitives et les primitives. Il est très utile pour la reconnaissance et l'analyse d'images. Les bords peuvent esquisser les contours de l'objet cible, donner un aperçu à l'observateur et contenir une mine d'informations [1]. Ainsi, pour obtenir l'information de position d'un trou, il faut d'abord effectuer une détection de bord et un suivi de contour. Utilisez le Code de chaîne Freeman pour suivre les contours des bords et utilisez des tables de codes de chaîne et des tables de segments pour stocker et traiter les données.
1 acquisition et prétraitement des images
(1) Cet article utilise un rétroéclairage et une caméra haute résolution pour obtenir un contraste élevé et des images de haute qualité. La résolution de l'image est 409 * 096. La qualité de la source d'image est très importante et affectera directement le traitement ultérieur de l'image.
(2) Traitement lisse de l'image à l'aide d'un filtrage médian dont le but est de minimiser ou d'éliminer les effets du bruit et d'améliorer la qualité de l'image. Le filtrage médian peut surmonter le flou de détail de l'image causé par le filtrage des moindres carrés, le filtrage moyen et d'autres filtres linéaires dans certaines conditions, le plus efficace pour filtrer les interférences impulsionnelles et le bruit de balayage de l'image. Pour les images concernées ici, les détails des trous de la carte PCB sont défectueux, de sorte que le filtrage médian est plus approprié. Il a l'avantage de pouvoir éliminer le bruit sans casser les bords de l'image.
(3) La segmentation par seuil est effectuée à l'aide de l'OSTU (méthode de variance maximale interclasse). La méthode est simple, stable et efficace. Il s'agit d'une méthode de binarisation qui sélectionne automatiquement un seuil sur la base du principe de jugement d'une fonction minimale et d'une méthode pacifique. L'idée est de segmenter l'image. L'histogramme est divisé en deux groupes selon un certain niveau de gris. Lorsque la variance des deux groupes divisés est maximale, le niveau de gris est fixé au seuil optimal [2].
2 utilisez la table des codes de chaîne et la table des segments de ligne [3] pour décrire les résultats des données de l'image
(1) Suivi des codes de chaîne Freeman à l'aide du contour de code de chaîne Freeman [4] divisé en huit codes de chaîne connectés et quatre codes de chaîne connectés. Le Code de la chaîne de huit connexions est défini par la direction dans laquelle le pixel central pointe vers ses 8 voisins, et la chaîne de quatre connexions utilise le pixel central. Pointant dans la direction de ses 4 voisins, la valeur est 0 ½ 3. Cet article utilise un code de chaîne à huit chaînons, comme le montre la figure 2 ci - dessous, le Code de chaîne à huit chaînons tourne dans le sens des aiguilles d'une montre, la valeur du Code de chaîne diminue de 1 lors d'une rotation de 45 degrés dans le sens des aiguilles d'une montre; Si la valeur du Code chaîne augmente de 4, la direction est inversée et 8 est ajouté. Puis revenez à la direction originale. Lorsque la valeur du Code chaîne est supérieure à 8 ou inférieure à 0, utilisez l'opération modulo 8 pour supprimer ou ajouter 8.
(2) Application du tableau des codes de chaîne
Pour le suivi de trous individuels sur une carte PCB, cet article utilise la méthode Freeman chaincode pour obtenir le Code de chaîne limite de l'objet cible. Lorsque le niveau de gris du corps cible est recherché à un certain point, ce point est le point limite du corps cible. Si le point n'est pas encore codé, il est le point de départ d'une certaine position de trou. A partir de ce point, le suivi de contour par le Code chaîne de Freeman permet de suivre la valeur du Code chaîne pour chaque point de la frontière et de dévier les valeurs en fonction des coordonnées du point central et des points voisins comme indiqué dans le tableau 1. Les coordonnées de chaque point de frontière peuvent être obtenues à partir des coordonnées du point de départ, qui peuvent être représentées sous la forme d'un tableau bidimensionnel Inc [8] [2].
La procédure de codage spécifique est la suivante: réglez le niveau de gris de l'objet cible sur G1 et le niveau de gris d'arrière - plan sur G2. Recherchez des images de toute la carte PCB. Lorsqu'un certain point a satisfait au niveau de gris de G1, il est considéré comme un point limite. A partir de a, les limites de la position du trou sont recherchées dans le sens horaire, la valeur initiale étant définie comme une valeur de code chaîne égale à 4. Le point suivant est recherché dans le sens. Si le point suivant a une valeur de niveau de gris égale à G1, c'est le point limite suivant. Sinon, tournez le sens de la recherche de 45 degrés dans le sens horaire avec une valeur de code chaîne de 3 pour continuer la recherche de ce point, de manière à toujours trouver le premier point a point B qui satisfait à une valeur de niveau de gris égale à G1. Définissez ensuite B comme nouveau point limite et définissez le drapeau de fin de suivi sur 0. Si vous ne trouvez pas de point limite dans un point voisin, définissez le drapeau de fin de suivi sur 1 pour indiquer qu'il s'agit d'un point isolé.
Prenez le point B comme nouveau point limite. Utilisez sa valeur de code de chaîne comme direction du Code de chaîne de départ. Répétez le suivi ci - dessus dans le sens des aiguilles d'une montre jusqu'à ce que le dernier point limite soit le point A. Suivez le bitmap monotrou et marquez cette zone avec un remplissage de couleur, ce qui signifie qu'il a été recherché et que la valeur du Code chaîne suivie est stockée dans la table des codes chaîne. Cet article stocke une table de codes de chaîne dans un tableau de codes entiers unidimensionnels [] dont les contenus stockés, notés 0 et 1, sont respectivement les coordonnées x et y du point limite de départ, le nombre total de codes de chaîne étant stocké dans une cellule, notée 2, le nombre N commençant par la cellule, notée 3, stockant la valeur du Code de chaîne du premier point limite, La valeur du Code chaîne du deuxième point limite... La valeur du Code chaîne jusqu'au dernier n - ème point limite.
3 Tableau des segments de ligne
(1) Définition de la table de segments de ligne
La table de codes de chaîne ne pouvant représenter que les limites du corps cible et non l'intérieur et l'extérieur des limites, la table de codes de chaîne ne peut représenter les pixels à l'intérieur du corps cible, mais en pratique elle obtient, outre les points limites et le périmètre de l'image, d'autres paramètres tels que les données de centre de trou et les aires obtenues ici, Pour permettre le traitement et le calcul des pixels internes, une autre structure - une table de segments de ligne - est également nécessaire.
Cette zone peut également être considérée comme composée de segments horizontaux. Chaque segment de ligne peut être représenté par ses deux points d'extrémité. Une table de points d'extrémité pour tous les segments horizontaux dans une zone de lissage de balayage est appelée une table de segments. Chaque point de la table de segments est composé de deux parties. Les points pairs représentent les coordonnées du point d'extrémité gauche et les points impairs représentent les coordonnées du point d'extrémité droit. Si une structure dot est définie pour représenter une table de segments, utilisez le tableau unidimensionnel dot [] et laissez I représenter un segment. L'extrémité gauche de ce segment peut être représentée par dot [2 * i] et l'extrémité droite par dot [2 * i + 1].
(2) Application de la table de segments de ligne
La table de segments de ligne obtient les valeurs des points d'extrémité de chaque segment et segment de ligne, ce qui permet d'obtenir facilement les pixels internes de la zone par calcul, mais aussi d'autres paramètres importants de l'image tels que ceux requis ici: surface de la zone de calcul, barycentre; Remplissez rapidement une zone (évitez les recherches répétées et améliorez l'efficacité); Le paramètre de forme de l'aire, la formule étant: f = l * L / 4ßs
L'objectif de ce projet est de détecter le Centre d'un trou circulaire et est donc particulièrement important pour la détection de la forme de la zone. Dans la formule ci - dessus, l est le périmètre et S est la zone. Le paramètre de forme f obtenu par ce rapport est le paramètre de forme du cercle. 1. Plus la différence avec 1 est grande, plus la différence avec la forme du cercle est grande. Pour calculer le nombre de trous pour les trous de PCB et le Centre du cercle, vous pouvez utiliser ce paramètre de forme pour juger. Si elle est proche de 1, elle peut être approximée comme si les trous ronds ont été traités, sinon les marques de couleur des trous non ronds sont directement remplies et ne sont pas enregistrées dans les résultats.
(3) Conversion de tables de codes de chaîne en tables de segments [5]
L'utilisation d'une table de segments représente d'autres paramètres importants pour lesquels une image peut être obtenue et la conversion de la table de codes de chaîne à la table de segments peut être effectuée conformément au tableau 2.
Les étapes spécifiques sont les suivantes:
Après transformation de la table, le Code chaîne donne trois types [6]: point milieu, type numéro 0; Point d'extrémité gauche, numéro de type 1; Point d'extrémité droit, numéro de type 2; Point singulier, numéro de type 3. A partir des données de la table des codes de chaîne, il est possible de connaître les valeurs des codes de chaîne entrants et sortants et de déterminer le type de direction de ces deux points. Dans la conception du programme, le type de point peut être jugé sur la base du tableau 3. S'il s'agit d'un point d'extrémité gauche et d'un point d'extrémité droit, les coordonnées sont stockées dans la matrice temporaire. Un point singulier peut être considéré comme une coïncidence de points identiques à droite et à gauche, c'est - à - dire qu'il doit être stocké deux fois, sans stocker de points entre eux. Les points de terminaison dans une table de segments sont triés par la taille des coordonnées y, tandis que les points de terminaison dans la même ligne sont triés par la taille des coordonnées x.
4 résultats expérimentaux
Cette expérience capture d'écran de l'image PCB de ce projet, le traitement, la capture d'écran et le traitement de l'image après remplissage.
En utilisant les algorithmes et les programmes de cet article pour traiter les captures d'écran et en utilisant des tables de codes de chaîne et des tables de segments de ligne pour stocker des données, vous pouvez obtenir des informations sur les paramètres de l'emplacement des trous de PCB.
5 Conclusion
Cet article utilise une source de rétro - éclairage pour obtenir une image PCB de haute qualité, utilise la méthode de segmentation par seuil OSTU pour obtenir de manière stable et simple une image binaire de l'image source, scanne et effectue un suivi de contour et utilise le principe de suivi du point suivant vers la droite. Il est plus bien préparé et gagne du temps. La table de code de chaîne et la table de segment de ligne stockent les données et le traitement des données, il est très pratique d'obtenir avec précision la circonférence, la zone et le Centre de porosité de la carte PCB, résolvant avec succès le problème de positionnement lors du poinçonnage de la carte PCB. Cette expérience a été exécutée et validée sur la plate - forme logicielle Visual C + +. Il peut détecter et traiter 216 trous circulaires en 31 µs et obtenir la vitesse et la précision requises pour ce projet. Les résultats ont prouvé que la méthode était viable.