2016-11-14 1 views
1

Je travaille sur une application faceetection en utilisant la segmentation des skinpixels avec un skin model prédéfini dans l'espace YCrCb. Je base vaguement mes algorithmes de ce rapport; http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=767122&tag=1, par Douglas Chai et King N. Ngan.Réduction du bruit Exemple de Skindetection OpenCV

Je commence par segmenter tous les pixels de la peau (voir à gauche). Ensuite, j'effectue des calculs pour réduire le bruit (voir les étapes ci-dessous). Il en résulte un bitmap filtré 1/8 de la taille de l'original. Idéalement, ce serait sans bruit à la fois dans le visage et l'arrière-plan, mais ce n'est pas le cas. J'ai déjà essayé de le réduire en utilisant ma carte de densité, puis en vérifiant les pixels voisins de la zone 3x3 et en érodant/dilatant les valeurs des pixels en fonction de leurs voisins. Ensuite, je redimensionne cette bitmap et applique le résultat en tant que masque sur l'image originale (voir l'image de droite pour le résultat, ignorer ma censure).

Left is skin pixel segmentation and right is en result

enter image description here

Ma question est, quelles méthodes préconisez-vous pour se débarrasser du bruit? De plus, existe-t-il de bonnes méthodes pour obtenir des contours plus lisses? Idéalement, je ne voudrais pas utiliser "trouver le plus grand contour et le remplissage d'inondation", de préférence quelque chose de plus sophistiqué.

Il semble également y avoir un peu de déplacement du masque redimensionné (il coupe un peu trop sur mon côté droit du visage, et montre un peu trop sur le côté gauche). Que peut causer cela?

Répondre

0

La manière la plus simple d'obtenir des contours plus lisses consiste à interpoler vos données à une résolution plus élevée à l'aide d'un schéma d'interpolation. Vous pouvez regarder dans openCV, ce qui se traduira par des transitions plus douces entre les points. J'espère que ça va aider un peu. Bonne chance.

+0

Oui, j'ai déjà utilisé resize() et pyrUp() avec différentes méthodes d'interpolation pour obtenir le résultat affiché dans l'image (INTER_CUBIC semble avoir donné le meilleur résultat jusqu'à présent). J'ai jeté un coup d'oeil à la documentation mais je n'ai rien trouvé qui soit un meilleur choix à ce jour. Merci quand même. – Hopploppa