C'est un problème extrêmement difficile. Je faisais partie d'une équipe qui y travaillait depuis plusieurs années, et ayant développé et pris en charge d'autres applications de ce type pendant longtemps, je peux dire que la détection des bosses est un problème particulièrement délicat et beaucoup plus difficile qu'il n'y paraît au premier abord.
Faire fonctionner un algorithme dans des conditions de laboratoire ou sur des images connues est une chose; développer un système précis et robuste pour des images "naturelles" telles que des voitures vues sur un parking nécessiterait probablement une équipe travaillant pendant plusieurs années. En plus du problème central de la création de l'algorithme, il existe de nombreuses autres difficultés d'ingénierie.
L'exemple de code que vous avez testé n'est pas un mauvais début. Si vous pouviez trouver les bords autour du côté droit sombre de la bosselure, vous pourriez comparer la carte des bords de la voiture avec le ding à une carte des bords d'une bonne voiture connue imagée sous le même angle avec le même éclairage. Le contrôle de l'éclairage vous aidera beaucoup.
Les problèmes à considérer sont les suivants:
- Éclairage (beaucoup plus difficile qu'il n'y paraît à première vue)
- Surface 3D attendue du panneau extérieur assemblé (par exemple à partir de données CAO)
- Critères caractérisant une bosselure: surface, profondeur, profil, etc.
- Critères pour les faux négatifs et les faux positifs
- Moyens pour enregistrer les données de bosses et / ou cartographier les bosses sur un modèle de voiture (ou disposition papillon)
- Méthodologie et appareil pour mesurer les «vraies» caractéristiques de la dent: profondeur, surface, etc.
- Vaste base de données de bosses provenant d'un échantillonnage aléatoire de véhicules
- Gérer différentes couleurs et finitions de peinture
1. Éclairage
Comme Martin B l'a noté correctement ci-dessus, un éclairage correct est essentiel pour ce problème. Même avec un bon éclairage structuré, vous aurez beaucoup de difficulté à détecter les petites bosses près des lignes caractéristiques, les écarts entre les panneaux, les poignées, etc.
L'entrée Wikipedia pour l'éclairage structuré est un peu mince, mais c'est un début pour comprendre le principe:
http://en.wikipedia.org/wiki/Structured_light
Des bandes claires peuvent être utilisées pour détecter les entrants (bosses) et les extérieurs (boutons). Pour voir un ding, vous aurez besoin d'un mouvement relatif entre la source de lumière et la voiture. Soit la lumière + la caméra se déplacent ensemble par rapport à la voiture, soit la voiture passe devant la lumière + la caméra.
Bien que les entrants et les extérieurs aient des aspects caractéristiques lorsqu'ils sont vus au bord d'une bande claire, la détectabilité d'un bossage donné dépend de la taille et de la profondeur de la dent par rapport à la largeur de la bande claire. La courbure d'une voiture est complexe, il est donc assez difficile de présenter une bande lumineuse cohérente à un appareil photo. Lorsque la bande lumineuse se déplace sur la carrosserie de la voiture, la courbure et même l'intensité de la bande lumineuse varient.
Une solution partielle consiste à garantir que la caméra et la bande lumineuse toujours à un angle cohérent par rapport à la normale (la perpendiculaire 3D) de la partie de la surface inspectée. En pratique, un robot devrait déplacer la caméra avec précision par rapport à la surface du corps. Déplacer le robot avec précision nécessite une connaissance de la pose (position et angles 3D) de la carrosserie, ce qui est un problème désagréable en soi.
Pour toute inspection des applications automobiles, vous devez contrôler complètement l'éclairage. Cela signifie non seulement de placer des lumières de votre choix à des endroits connus, mais également de bloquer toutes les autres lumières. Cela signifiera une enceinte assez grande. Étant donné que les panneaux de la voiture sont incurvés vers l'extérieur (presque comme une surface sphérique), ils réfléchissent la lumière des sources tout autour d'eux. Pour simplifier grandement ce problème, vous pouvez utiliser une barre fluorescente haute fréquence à l'intérieur d'une enceinte enveloppée de velours noir. Très souvent, il est nécessaire d'aller à des extrêmes comme celui-ci pour les applications d'inspection.
2. Surface 3D La surface
extérieure d'une voiture est composée de courbes complexes. Afin de savoir si un endroit suspect est un ding, vous devez comparer cet endroit aux caractéristiques connues de la voiture. Cela signifie que vous devez faire correspondre l'image 2D d'une caméra à un modèle 3D vu sous un certain angle. Ce n'est pas un problème résolu rapidement, et il est assez difficile de bien faire que certaines entreprises s'y spécialisent.
3. Caractérisation des défauts
Pour la recherche universitaire ou les tests en laboratoire, il peut être suffisant de développer un algorithme qui promet ou améliore une méthode existante. Pour résoudre correctement ce problème pour une utilisation commerciale ou industrielle réelle, vous devez disposer d'une spécification très détaillée pour la taille des bosses que vous souhaitez détecter.
Lorsque nous avons abordé ce problème, il n'existait aucune norme industrielle ou nationale raisonnable pour les bosses (déformations 3D). Autrement dit, il n'y avait pas de technique convenue pour caractériser une bosse par sa surface, sa profondeur et sa forme. Nous venons d'avoir des échantillons qui, selon les experts de l'industrie, étaient mauvais, pas trop mauvais et marginaux en termes de gravité. La définition de la «profondeur» d'un ding est également délicate, car un ding est une indentation 3D dans (généralement) une surface 3D incurvée vers l'extérieur.
Les gros coups sont plus faciles à détecter, mais ils sont également moins courants. Un travailleur automobile expérimenté peut scanner rapidement une carrosserie de voiture - beaucoup plus rapidement qu'un observateur non formé - et trouver rapidement des bosses peu profondes de la taille de votre petit doigt. Pour justifier le coût d'un système automatisé, vous devrez probablement correspondre à la capacité d'un observateur expérimenté.
4. Critères pour les erreurs de détection
Au début, vous devez définir des critères pour les faux négatifs et les faux positifs acceptables. Même si vous étudiez simplement ce problème en tant que projet de R & D et n'avez pas l'intention de développer un produit, essayez de définir vos critères de détection.
faux négatif: dent présente, mais non détectée faux positif: zone non tachetée identifiée comme dent
Il y a généralement un compromis: augmenter la sensibilité et vous trouverez plus de dings (diminuer les faux négatifs), mais vous trouverez également plus de dings qui ne sont pas là (augmenter les faux positifs). Il est assez facile de se convaincre qu'un algorithme fonctionne mieux qu'il ne le fait réellement: notre biais naturel est de remarquer les défauts détectés par l'algorithme et d'expliquer ceux qu'il n'a pas détectés. Effectuez des tests aveugles et automatisés. Si possible, demandez à quelqu'un d'autre de mesurer les coups et d'attribuer la gravité afin que vous ne sachiez pas quelles sont les vraies mesures.
5. Enregistrer les données et / ou les cartographier
Une bosse est caractérisée par sa gravité et son emplacement sur la carrosserie de la voiture. Pour connaître son emplacement, vous devez résoudre le problème de correspondance 2D-3D mentionné ci-dessus.
6. Déterminer la "vraie" forme des bosses Les
dents sont difficiles à mesurer. Une bosselure nette et une bosselure arrondie de la même surface et de la même profondeur seront différentes. La mesure des bosses par des moyens mécaniques conduit à des jugements subjectifs, et il est également assez fastidieux d'utiliser des jauges de profondeur, des règles, etc., lorsque vous devrez probablement mesurer des dizaines sinon plus.
C'est l'un des problèmes d'ingénierie les plus difficiles à résoudre pour tout projet de détection de défauts dans la fabrication: comment mesurer et caractériser un défaut? s'il existe une norme à cet effet, la norme est-elle bien corrélée à quelque chose que le système d'inspection mesure? si le système d'inspection ne trouve pas de ding qu'il "aurait dû" trouver, qui est à blâmer?
Cela dit, si un système d'inspection fonctionne suffisamment bien pour un échantillon de défauts connus, les utilisateurs peuvent finir par lui faire confiance et le système lui-même devient la norme pour définir la gravité des défauts.
7. Base de données complète de bosses
Idéalement, vous auriez des centaines, voire des milliers, d'échantillons d'images de bosses de différentes gravités à différents endroits sur des véhicules de fabricants difficiles. Si vous souhaitez trouver des bosses causées par des accidents pendant le processus d'assemblage, la collecte de ce type de données peut prendre du temps. Les bosses causées pendant le processus d'assemblage ne sont pas courantes.
Si vous êtes uniquement intéressé à trouver des bosses causées par des accidents ou des dommages environnementaux, alors c'est autre chose. Les types de bosses seront différents de ceux causés par des chocs accidentels à l'intérieur d'une usine d'assemblage automobile.
8. Traitement de différentes couleurs de peinture
Il est vrai que les détecteurs de bord peuvent être raisonnablement robustes pour détecter les bords dans des images de niveaux de contraste différents, mais il peut être assez décourageant de voir ce que "différents niveaux de contraste" signifient réellement pour différentes peintures et finitions automobiles . Une bande claire qui a fière allure sur une voiture noire brillante pourrait être à peine détectable sur une voiture blanche avec de la vieille peinture.
La plupart des caméras ont une plage dynamique relativement limitée, il est donc difficile d'obtenir un bon contraste à la fois pour les surfaces brillantes noires et les surfaces ternes blanches. Il est fort probable que vous deviez contrôler automatiquement l'intensité lumineuse. C'est difficile aussi.