6
votes

Détection de bord et transparence

Utilisation d'images d'articles de vêtements prises sur un fond cohérent, je voudrais faire tous les pixels de l'image transparent à l'exception des vêtements. Quelle est la meilleure manière de s'occuper de ça? J'ai étudié les algorithmes communs pour cela et la bibliothèque open source OpenCV . En plus de rouler le mien ou l'utilisation d'Opencv, il y a un moyen facile de faire cela? Je suis ouvert à n'importe quelle langue ou plate-forme.

merci


5 commentaires

Quel type d'image utilisez-vous: 8 bits, 16 bits, monochrome, couleur? De quelle couleur sont les vêtements? sont-ils contrastés contre le fond? Vous dites que vous voulez faire le fond transparent: dites-nous un peu plus de votre objectif, allez-vous superposer les vêtements sur une autre image? (Avez-vous une image d'exemple que nous pouvons regarder?)


Quel est le fond "cohérent"? Est-ce une couleur?


J'ai aussi oublié: vous semblez avoir de nombreuses images, c'est l'arrière-plan de la même couleur sur toutes les images ou le changement de couleur de fond en fonction de la photo?


Les images seront prises sur l'iPhone des utilisateurs. Ils seront conseillés d'utiliser et de tous les antécédents blancs pour des vêtements sombres et un fond noir pour des vêtements légers. Je ne vais pas les superposer mais les afficher dans une vue de défilement. Le traitement réel ne doit pas arriver sur l'iphone cependant


Cela ne fera pas de fond cohérent. La foudre est déjà difficile avec un matériel adéquat et un environnement contrôlé. Ces utilisateurs prendront des photos à l'intérieur et utiliseront des lumières de base avec une caméra de mauvaise qualité ...


4 Réponses :


0
votes

Si vous connaissez l'intensité de couleur exacte de l'arrière-plan et que cela ne changera jamais et les articles de vêtements ne coïndront jamais avec cette couleur, il s'agit donc d'une application simple de la soustraction de fond, c'est tout ce qui n'est pas une intensité de couleur particulière est considéré comme un pixel "sur", un intérêt. Vous pouvez ensuite utiliser l'étiquetage des composants connectés ( http://fr.wikipedia.org/wiki/connected_component_labelingleightleightle_/a >) Pour comprendre des groupements séparés d'objets.


1 commentaires

Merci pour le conseil. Les images seront traitées par l'utilisateur. Donc, je ne peux pas connaître la couleur exacte.



0
votes

Pour une image couleur, avec le même arrière-plan sur toutes les images:

  • Convertissez votre image en HSV ou HSL
  • Déterminez la valeur HUE de l'arrière-plan (+/- 10): Faites cette étape une fois, à l'aide de Photoshop, par exemple, utilisez la même valeur sur toutes vos images.
  • Effectuez un seuil de couleur: sur le canal de teinte excluez la teinte de l'arrière-plan (HUE [0, HUE [+] HUE, 255] Typiquement), pour tous les autres canaux incluent la plage de valeurs entière (0 à 255 typiquement). Cela sélectionnera des pixels qui ne sont pas l'arrière-plan.
  • Effectuez une opération de «trous de remplissage» (normalement trouvée le long des fonctions d'analyse BLOB ou d'étiquetage) pour compléter la partie des vêtements pouvant avoir été de la même couleur que l'arrière-plan.
  • Vous avez maintenant une image qui est un "masque" des vêtements: les pixels non nuls représentent les vêtements, 0 pixels représente le fond.
  • Cette étape du traitement dépend de la manière dont vous souhaitez faire des pixels transparents: généralement, si vous enregistrez votre image en tant que PNG avec un canal alpha (transparence), utilisez un fonctionnement logique et (également appelé "masquage") entre l'alpha canal de l'image d'origine et la construction du masque à l'étape précédente.
  • voilà, l'arrière-plan a disparu, sauvegardez l'image résultante.

1 commentaires

Eh bien, je viens de lire le commentaire sur tout le fond blanc ou tout noir ... Cet algorithme ne va pas, car l'arrière-plan ne sera pas pareil sur toutes les images.



2
votes

Fondamentalement, trouvez la couleur de l'arrière-plan et soustrayez-la, mais je suppose que vous saviez cela. C'est un peu délicat de faire tout cela automatiquement, mais cela semble possible.

Tout d'abord, jetez un coup d'œil à Détection de blob avec OpenCV et voyez si cela est essentiellement fait pour vous.

Pour le faire vous-même:

trouver le fond : il existe plusieurs options. Probablement plus facile est d'histogramme l'image et le grand nombre de pixels ayant des valeurs similaires sont l'arrière-plan et s'il y a deux grandes collections, l'arrière-plan sera celui avec un grand trou au milieu. Une autre approche consiste à prendre un groupe autour du périmètre en tant que couleur d'arrière-plan, mais cela semble inférieur comme, par exemple, la réflexion d'un flash pourrait considérablement illuminer des pixels de fond plus central situés.

retirez le fond : une première prise à ce sujet serait de seuiller l'image en fonction de la couleur d'arrière-plan, puis exécutez les algorithmes "ouverts" ou "fermer" à ce sujet, puis utilisez-le. En tant que masque pour sélectionner votre article de vêtements. (Le point d'ouverture / proche est de ne pas éliminer les petits éléments de couleur de couleur sur les vêtements, comme des boutons noirs sur une chemisière blanche ou, par exemple, des reflets lumineux sur des vêtements noirs.)

OpenCV est un bon outil pour cela.

La partie la plus délicieuse de ce sera probablement à l'ombre autour de l'objet (par exemple, une veste noire sur fond blanc aura une ombre grise continue dans certaines des bords et où faire cette coupe?), mais si vous obtenez C'est loin, postez une autre question.


0 commentaires

6
votes

2 commentaires

Quelque chose me dit que si quelqu'un prend une photo d'un vêtement, il organisera sa photo de sorte qu'elle remplisse principalement l'image. La couleur la plus courante ne sera donc pas l'arrière-plan. Aussi avec cet algorithme, si par hasard, le vêtement touche le bord, vous enlèverez tout le morceau de vêtement de l'image ...


C'est un bon point. Donc, vous devriez probablement regarder la couleur la plus répandue près du bord de l'image.