Salut la communauté CV / Pattern Recognition,
J'ai un sérieux problème concernant la segmentation d'une image. Le scénario est une atmosphère dans un four qui me rend la tête folle. Et je dois détecter les contours d'objets de différents matériaux (verre, céramique, Al, Ir, ..) en peu de temps (<10 secondes) et pas seulement pour un cas particulier. J'ai également besoin du contour dans une rangée séquentielle de pixels pour le code. Par conséquent, un code de chaîne ou ce que l'on appelle le suivi des frontières / contours est également nécessaire, donc les trous ouverts ne sont pas bons. À l'arrière-plan, des bruits non linéaires, approximativement de poussière, de particules ou quelque chose d'autre, qui apparaissent de temps en temps.
Les suggestions Matlab ou OpenCV sont les bienvenues.
Pour le rendre plus clair, j'ai posté une autre image de mon objectif et un objet semi-transparent, qui doit également être détecté. Aussi d'autres exemples qui doivent être pris en compte.
Comme vous pouvez le voir sur l'image n ° 1, il y a des particules dans la partie droite de l'image et à proximité du contour extérieur de l'étoile, qui est l'objet. De plus, le contraste global n'est pas très bon. L'objet lui-même se trouve sur un sous-sol, ce qui n'est pas pertinent pour la détection de contour. L'image n ° 2 montre un objet semi-transparent, ce qui est également possible.
Je veux trouver le contour / périmètre de cet objet, comme sur l'écran suivant (ligne rouge). Les deux rectangles (jaunes) marquent le point de départ (à gauche) et le point d'arrivée (à droite). La ligne bleue est ignorable.
Au début, je pensais que je pouvais résoudre le problème de cette atmosphère sale avec juste des filtres. Mais après une somme honorable d'investissement en temps, je viens de réaliser que je dois éliminer ou réduire les bruits de manière significative afin d'augmenter le contraste du premier plan et de l'arrière-plan. J'avais essayé beaucoup de méthodes, comme l'égalisation d'histogramme, l'égalisation adaptative Otsu, les filtres linéaires (par exemple gauss), les filtres non linéaires (médiane, diffusion), les contours actifs, les k-Means, les Fuzzy-c-means et aussi Canny pour pure Détection des contours en combinaison avec des opérateurs morphologiques.
- Canny: Les particules et l'atmosphère provoquent des trous, mais j'ai besoin d'un contour complet de l'objet. Toujours avec la fermeture, la dilatation des opérateurs morphologiques ce n'est pas assez bien. Canny a toujours les meilleurs résultats de toutes les méthodes que j'ai étudiées à cause de l'hystérésis.
- Contours actifs: Ils fonctionnent également sur les bords / dégradés, ils agissent complètement fous après l'initialisation à l'intérieur de l'objet, ce qui peut être dû à la carte des bords résultant de l'objet `` ouvert ''. Autant que je sache, le contour doit être fermé. Je l'ai essayé avec différents dérivés (GVF / VFC / Classic Snake).
- k-Means: Les résultats incluent l'atmosphère du four, à cause du fond brumeux. Idem pour les flous-c-moyens. J'ai choisi deux clusters, en raison de la séparation de l'objet de l'arrière-plan. Plus de grappes conduisent à des résultats plus faibles.
- Histogramme / Otsu: En raison des intensités de gris très proches (à mon humble avis!), Il fusionne l'objet avec l'arrière-plan. Je l'ai essayé avec des méthodes locales et mondiales.
- Filtres: en particulier le GLPF ou un autre LPF tache les bords, ce qui n'est pas si bon et ne réduit même pas l'atmosphère brumeuse.
- Les filtres non linéaires préservent les bords. La plupart d'entre eux prennent trop de temps pour calculer les grandes images. A pris un filtre bilatéral rapide pour l'instant. Résultats voir ci-dessous.
Par conséquent, aucune méthode n'est suffisante pour les étapes de post-traitement, car les résultats obtenus du segment d'objet sont médiocres par rapport à un algorithme existant. Cet algorithme existant est très local et fonctionne donc pour ce scénario très spécial.
Je vous demande donc, si j'ai complètement raté quelque chose ... Je ne sais plus comment traiter et comment obtenir de bons résultats de contour, sans lacunes ni trous .. Est-ce possible sans faire beaucoup de changements sur le CCD et l'environnement physique? Merci d'avance!
Dernière approche jusqu'à présent (après une longue nuit d'expériences avec les MO):
- Filtre bilatéral (bord préservant, mais lissant les zones homogènes)
- Canny (Sigma = 2, seuil = [0,04 0,08])
- Opérations Morphologique (MO):
bwareopen
,closing
,remove
&bridge
bwlabel
pour sélectionner uniquement le périmètre du contour, ce qui supprime les bruits indésirables. pas encore de captures d'écran mises à jour, mais cela fonctionne pour la star. le verre a un contour intérieur qui est connecté au contour extérieur, qui peut également être vu sur la capture d'écran ci-dessous.
J'ai donc peur d'avoir besoin d'un algorithme spécial pour la traversée du contour extérieur. Ce sera une recherche de voisinage dans le sens horaire / antihoraire. Cette étape dans le sens horaire / antihoraire peut changer, s'il y a un point d'angle. s'il y a un écart, augmentez le rayon et regardez à nouveau. s'il y a deux ou plusieurs points suivants possibles, prenez celui qui a la même direction que le précédent. Pensez-vous que cet algorithme de suivi de contour a du sens?