Je suis totalement coincé sur un problème de segmentation des objets vitreux. J'ai besoin d'obtenir l'objet aussi précis que possible. Mes approches étaient différentes. Au début, j'ai essayé de supprimer l'arrière-plan, de sorte qu'il ne reste que quelques contours nets. Mais cela ne fonctionne que pour les objets qui ont des bords / gradients nets. Sinon, l'objet lui-même est également supprimé. J'ai posté deux images différentes.
J'ai essayé de supprimer l'arrière-plan via des opérations morphologiques, comme une dilatation en niveaux de gris et une division dessus. mais cela n'a pas beaucoup aidé. après cela, j'ai essayé un k-means avec k = 3 pour obtenir l'arrière-plan modifié séparé des valeurs de gris et de noir du verre. Cela n'a pas réussi dans certains cas, mais pas dans l'ensemble / en moyenne. J'ai également essayé de faire une détection de bord rusé avec un filtre global estompé, mais cela conduit à des résultats plus faibles sous forme de contours ouverts, beaucoup de bruit, etc.
Canny avec des résultats de seuil automatiques:
testimg = imread('http://i.imgur.com/huQVt.png');
imshow(testimg)
imedges = edge(testimg,'canny');
imshow(imedges);
Il en va de même pour la deuxième image.
Comme vous pouvez le voir, il y a beaucoup de bruit à l'intérieur et à l'extérieur et des bords doublés à partir de la bordure en verre. Même il y a des lacunes dans les bords.
J'ai donc besoin de vos conseils pour obtenir une approche générale pour traiter ce problème des matériaux semi-transparents, pas seulement pour ces deux images.
1) D'autres idées pour supprimer l'arrière-plan sans endommager l'objet?
2) D'autres méthodes de segmentation pour séparer l'objet de l'arrière-plan?
Si c'est possible, alors avec Matlab, IPT ou des conseils de boîte à outils statistiques. Tout autre indice est également le bienvenu!
Merci d'avance pour votre réponse. Cordialement
Réponses:
Pourquoi ne pas simplement utiliser un simple filtre passe-haut 2D FFT (guassien)?
J'ai fait ça très rapidement en utilisant MATLAB
Éclat n ° 1 utilisant la FFT passe-haut:
La même chose se fait sur # 2.
Éclat n ° 2 utilisant la FFT passe-haut:
Comme vous pouvez le voir, l'arrière-plan et la zone de verre sont effacés et seuls les bords sont tracés. Je n'y ai pas passé de temps, mais vous pouvez seuiller la sortie filtrée HP pour avoir des bords plus nets ou pousser la coupure HP plus haut.
Est-ce plus les résultats que vous cherchez à obtenir?
la source
Ce n'est pas une tentative de répondre à toute la question, mais j'ai une idée de "nettoyer l'image" .
Vous avez dit que vous avez déjà essayé des opérations morphologiques , et ceci est une variation de l'idée, je l'espère une mise à niveau.
Cet article: A. Vichik, R. Keshet, D. Malah: La morphologie auto-duelle sur les demi-réseaux d'arbres et les applications propose un moyen d' améliorer les opérateurs morphologiques classiques d'une manière qui peut leur ajouter des propriétés plus souhaitables.
L'article suggère de choisir une représentation hiérarchique d'une image en fonction des propriétés souhaitables, puis propose une méthode pour définir des opérateurs tels que l' érosion, la dilatation, l'ouverture, le chapeau haut de forme sur cette représentation . Dans leurs propres mots:
J'ai expliqué ces structures hiérarchiques en forme d'arbre dans la deuxième partie de cette réponse ( approches sémantiques ) , à laquelle vous pouvez ajouter Extrema-Watershed Tree mentionné dans l'article que j'ai lié ici (et encore) .
Il s'agit d'une mise à niveau (citant les auteurs) de "morphologie mathématique en niveaux de gris traditionnelle" car les opérations conservent les propriétés souhaitables des représentations . Par exemple, si votre représentation hiérarchique est auto-dual, vos opérateurs seront vraiment auto-dual (par exemple, comparez avec une quasi -auto -double ouverture-fermeture par reconstruction qui n'est pas vraiment auto-dual.)
L'article lié présente également certains résultats pour filtrer le bruit - vous pouvez comparer leurs résultats de l'article (et de la thèse référencée dans l'article) à ce dont vous avez besoin (au moins visuellement) et voir si cela fonctionnerait pour vous avant de commencer programmer.
Ainsi, tout en choisissant l'arbre de représentation le plus simple (max- / min-) produira exactement les opérations classiques, choisir un arbre auto-dual qui convient le mieux à vos besoins pourrait vous donner une approche suffisamment robuste.
la source