2016-02-14 2 views
0

J'essaie de trouver un algorithme pour détecter la surface libre d'une image PIV (voir ci-joint). Le problème majeur est que dans l'écoulement considéré, des bulles de gaz sont injectées dans le fluide, celles-ci montent en raison de la flottabilité et ont tendance à s'asseoir sur le dessus de la surface. Je ne veux pas que ceux-ci soient confondus avec la surface libre (en réalité, ils veulent que le '2ème' bord soit en dessous) - j'ai du mal à comprendre comment inclure cela dans l'algorithme. Idéalement, je veux un tableau de valeurs x et y représentant les coordonnées de la surface libre (comme une courbe continue et lisse). Mon approche initiale était de scanner l'image de gauche à droite, une colonne à la fois, trouver un bord, passer à la colonne suivante etc ... Cela fonctionne plutôt bien, mais échoue dès que les bulles apparaissent et mon 'bord' se sépare en deux. Je me demande donc s'il existe une façon plus sophistiquée de s'y prendre.MATLAB, algorithme pour la détection de surface libre en écoulement bulles

Si quelqu'un a une expertise dans le domaine du traitement d'image/détection de contours, tout conseil serait grandement apprécié.

Typical PIV image

Desired outcome

+0

Pouvez-vous essayer d'être un peu plus clair dans ce que vous recherchez (comme un montage de peinture de ce que vous voulez obtenir exactement)? Si j'ai bien compris, ce n'est pas une tâche triviale à faire. Si vous avez beaucoup d'images, vous pouvez le définir comme un problème de segmentation et finalement apprendre la segmentation à partir d'un jeu de données étiqueté manuellement. –

+0

@ R.Bergamote J'ai ajouté un montage de peinture du genre de chose que je cherche. Vous avez absolument raison, ce n'est pas une tâche triviale. Comment pourrais-je définir le problème comme un problème de segmentation? Pourriez-vous me diriger vers d'autres informations/références à ce sujet? J'ai des tonnes d'images comme ça, essentiellement une caméra prend environ 12 images par seconde de l'expérience en cours. –

Répondre

0

Je pense que vous pouvez réellement résoudre le problème en utilisant des méthodes morphologiques.

A = imread('./MATLAB/ZBhAM.jpg'); 

figure; 
subplot 131; 
imshow(A) 

subplot 132; 
B = double(A(:,:,1)); 
B = B/255; 
B = im2bw(B, 0.1); 
imshow(B); 

subplot 133; 
st = strel('diamond', 5); 
B = imerode(B, st); 
B = imdilate(B, st); 
B = imshow(B); 

Cela donne le résultat suivant: enter image description here

Comme vous pouvez le voir cette approche n'est pas parfait surtout parce que je pris une valeur aléatoire pour le seuil im2bw, si vous utilisez un seuil adaptatif pour les différents colonne de vos images, vous devriez avoir quelque chose de mieux. Essayez de travailler votre éclairage autrement.