Question

il y a deux images

alt texte http://bbs.shoucangshidai.com/attachments/month_1001/1001211535bd7a644e95187acd.jpg texte alt http://bbs.shoucangshidai.com/attachments/month_1001/10012115357cfe13c148d3d8da.jpg  on est l'image de fond est une autre photo d'une personne avec le même fond, même taille, ce que je veux faire est de retirer la deuxième arrière-plan de l'image et distillent le profil de la personne. la méthode commune est Soustraire première image du second, mais mon problème est de savoir si la couleur de l'usure de la personne est similaire à l'arrière-plan. le résultat de la soustraction est terrible. Je ne peux pas obtenir le profil de tout le peuple. qui ont une bonne idée de supprimer le fond me donner quelques conseils. merci d'avance.

Était-ce utile?

La solution

Si vous avez une bonne estimation de l'arrière-plan de l'image, la soustrayant de l'image avec la personne est une bonne première étape. Mais il est seulement la première étape. Après cela, vous devez segmenter l'image, à savoir que vous devez diviser l'image en « fond » et pixels « de premier plan », avec des contraintes comme celles-ci:

  1. dans les zones de premier plan, la différence moyenne de l'image d'arrière-plan doit être élevé
  2. dans les zones de fond, la différence moyenne de l'image d'arrière-plan doit être faible
  3. les zones doivent être lisses. longueur de contour et la courbure devrait être minime.
  4. les frontières des zones devraient avoir un contraste élevé dans l'image source

Si vous êtes mathématiquement incliné, ces contraintes peuvent être modélisés parfaitement avec le Mumford-Shah fonctionnelle. Voir ici pour plus d'informations.

Mais vous pouvez probablement adapter d'autres algorithmes de segmentation du problème.

Si vous voulez une version simple et rapide (mais pas parfait), vous pouvez essayer ceci:

  • les deux images soustraient
  • trouver le plus grand « blob » consécutive de pixels avec une différence de fond-plan supérieur à un certain seuil. Ceci est la première estimation approximative de la « zone de personne » dans l'image de premier plan, mais la segmentation ne répond pas aux critères 3 et 4 ci-dessus.
  • Trouvez le contour de la plus grande blob ( EDIT: Notez que vous ne devez pas commencer au contour Vous pouvez également commencer par un polygone plus, les étapes vont se réduire automatiquement à. la position optimale.)
  • maintenant passer en revue chaque point dans le contour et le contour lisse. à-dire pour chaque point trouver le point qui minimise la formule: c1 * L - c2 * G, où L est la longueur du polygone de contour si le point a été déplacé ici et G est le gradient à l'emplacement serait déplacé le point à, c1 / c2 sont des constantes pour contrôler le processus. Déplacez le point à cette position. Ceci a pour effet de lisser le polygone de contour dans les zones de faible gradient dans l'image source, tout en mettant liée à de forts gradients dans l'image source (à savoir les bandes visibles de la personne). Vous pouvez essayer différentes expressions L et G, par exemple, L peut prendre la longueur et la courbure en compte, et G pourrait également prendre la pente en arrière-plan et les images soustraites en compte.
  • vous aurez probablement re-normaliser le polygone de contour, à savoir faire en sorte que les points sur les grandes lignes sont régulièrement espacées. Soit ça, ou assurez-vous que les distances entre les points restent régulièrement dans l'étape précédente. ( "Serpents" Geodesic)
  • répéter les deux dernières étapes jusqu'à ce que la convergence

Vous avez maintenant un polygone de contour qui touche la frontière personne arrière-plan visible et se poursuit en douceur où la frontière n'est pas visible ou a un faible contraste. Recherchez "serpents" ( par exemple ) pour plus d'informations.

Autres conseils

Filtre passe-bas (flou) les images avant de les soustraire. puis utiliser ce signal de différence en tant que masque pour sélectionner les pixels d'intérêts. Un filtre à large assez ignorera les trop petites fonctionnalités (haute fréquence) qui finissent par se tailler des régions « terrible » l'intérieur de votre objet d'intérêt. Il va également réduire la mise en valeur du bruit au niveau des pixels et un mauvais alignement (les informations plus haute fréquence).

En outre, si vous avez plus de deux cadres, l'introduction d'une hystérésis de temps vous permettra de former des régions plus stables d'intérêt au fil du temps aussi.

Une technique que je pense est courante consiste à utiliser un de . Prenez un certain nombre de cadres de fond et pour chaque pixel construire un modèle de mélange pour sa couleur.

Lorsque vous appliquez un cadre avec la personne, vous obtiendrez une certaine probabilité que la couleur est au premier plan ou arrière-plan, compte tenu des densités de probabilité dans le modèle de mélange pour chaque pixel.

Une fois que vous avez P (pixel est au premier plan) et P (pixel est arrière-plan), vous pouvez simplement les images de seuil de probabilité.

Une autre possibilité est d'utiliser les probabilités comme entrées dans un algorithme de segmentation plus intelligent. Un exemple est que j'ai remarqués fonctionne très bien.

Toutefois, si la personne porte des vêtements qui sont visuellement indistguishable de l'arrière-plan de toute évidence aucune des méthodes décrites ci-dessus ne fonctionne. Vous souhaitez soit obtenir un autre capteur (comme IR ou UV) ou un « modèle de personne » très élaborée qui pourrait « ajouter » les jambes dans la bonne position si elle trouve ce qu'il pense être un torse et la tête.

Bonne chance avec le projet!

Contexte vs détection de premier plan est très subjective. Le scénario d'application définit fond ou au premier plan. Cependant, dans l'application détail, je suppose que vous dites implicitement que la personne est au premier plan. En utilisant l'hypothèse ci-dessus, ce que vous cherchez est un algorithme de détection de personnes. Une solution possible est:

  
      
  1. Exécuter un détecteur de fonction haar + boosté cascade de classificateurs faibles   (Voir le OpenCV pour plus de détails)
  2.   
  3. Compute mouvement inter-trame (différences)
  4.   
  5. S'il y a un + ve détection de visage pour un cadre, les pixels de mouvement de cluster   autour de la face ( kNN algorithme )
  6.   

le tour est joué ... vous devriez avoir un simple détecteur de personne.

Publier la photo sur Craigslist et dites-leur que vous aurez à payer 5 $ pour quelqu'un de le faire.

Garanti vous aurez succès en quelques minutes.

Au lieu d'une soustraction droite, vous pouvez parcourir les images, pixel par pixel, et seulement « soustraire » les pixels qui sont exactement les mêmes. Ce sera bien sûr pas compte des différences mineures dans les couleurs, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top