Question

En utilisant des images de vêtements prises sur un fond cohérent, je souhaite rendre tous les pixels de l’image transparents, à l’exception des vêtements. Quelle est la meilleure manière de s'occuper de ça? J'ai effectué des recherches sur les algorithmes courants et sur la bibliothèque open source opencv . Mis à part rouler le mien ou utiliser l'opencv, existe-t-il un moyen facile de le faire? Je suis ouvert à toutes les langues et à toutes les plateformes.

Merci

Était-ce utile?

La solution

Si votre arrière-plan est constitué d'une image, mais qu'il est incompatible d'une image à l'autre, cela pourrait être compliqué, mais voici ce que je ferais:

  1. Séparez l'image en une forme d'intensité / couleur telle que YUV ou Lab.
  2. Créez un histogramme sur la partie couleur. Trouvez la couleur la plus visible, c’est (probablement) votre arrière-plan (mise à jour). Une meilleure astuce serait peut-être de trouver la couleur la plus visible de tous les pixels à un ou deux pixels du bord de l’image.
  3. À partir des bords de l'image, définissez tous les pixels ayant cette couleur et reliés au bord par le biais de pixels de cette couleur sur transparents.
  4. Le bord du vêtement va maintenant être un peu moche car il est composé de pixels qui prennent leur couleur à la fois à l'arrière-plan et au vêtement. Pour lutter contre cela, vous devez faire un peu plus de travail:

    1. Recherchez le bord du vêtement à l'aide d'un mécanisme de détection des bords .
    2. Remplace la couleur des pixels de contour par un mélange de la couleur juste "à l'intérieur". le pixel de bord (c'est-à-dire la couleur du vêtement dans cette région) et transparent (si votre format d'image de sortie le permet).
    3. Si vous souhaitez vraiment être chic, vous augmentez la transparence en fonction de la valeur du paramètre "J'aime". la couleur de fond est la couleur de ce pixel.

Autres conseils

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

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

Pour le faire vous-même:

trouver l'arrière-plan : plusieurs options sont disponibles. Il est probablement plus facile d’histogrammer l’image, et le grand nombre de pixels ayant des valeurs similaires est l’arrière-plan. S'il existe deux grandes collections, l’arrière-plan sera celui avec un gros trou au milieu. Une autre approche consiste à prendre une bande autour du périmètre comme couleur d’arrière-plan, mais cela semble inférieur car, par exemple, la réflexion d’un flash pourrait éclaircir considérablement les pixels de l’arrière-plan situés au centre.

supprimer l'arrière-plan : une première chose à faire serait de définir un seuil pour l'image en fonction de la couleur d'arrière-plan, puis d'exécuter la commande "open". ou " fermer " algorithmes, puis utilisez-le comme masque pour sélectionner votre article vestimentaire. (Le point d’ouverture / fermeture est de ne pas supprimer les petits objets colorés sur le vêtement, comme les boutons noirs d’un chemisier blanc ou les réflexions lumineuses sur les vêtements noirs.)

OpenCV est un bon outil pour cela.

La partie la plus délicate de ceci sera probablement l'ombre autour de l'objet (par exemple, une veste noire sur un fond blanc aura une ombre grise continue sur certains bords et où faire cette coupe?), mais si vous obtenez si loin, posez une autre question.

Si vous connaissez l'intensité de couleur exacte du fond et que cela ne changera jamais et que les vêtements ne coïncideront jamais avec cette couleur, il s'agit d'une simple application de soustraction de fond, c'est-à-dire tout ce qui ne correspond pas à une intensité de couleur particulière. est considéré comme un " on " pixel, l'un des intérêts. Vous pouvez ensuite utiliser l’étiquetage des composants connectés ( http://en.wikipedia.org/wiki/Connected_Component_Labeling" rel="nofollow noreferrer"> http://en.wikipedia.org/wiki/Connected_Component_Labeling"a >) pour comprendre des groupements séparés d'objets.

pour une image couleur, avec le même fond sur toutes les images:

  • convertissez votre image en HSV ou HSL
  • déterminez la valeur de teinte de l'arrière-plan (+/- 10): effectuez cette opération une fois, en utilisant par exemple Photoshop, puis utilisez la même valeur pour toutes vos photos.
  • effectue un seuil de couleur: sur le canal de teinte, excluez la teinte de l'arrière-plan ([0, teinte [+] teinte, 255] en général), car tous les autres canaux incluent la plage de valeurs complète (de 0 à 255 en général). cela sélectionnera les pixels qui ne sont PAS l’arrière-plan.
  • effectuer un "remplissage des trous" opération (normalement associée aux fonctions d’analyse des taches ou d’étiquetage) pour compléter la partie du vêtement qui peut avoir été de la même couleur que le fond.
  • vous avez maintenant une image qui est un "masque" des vêtements: les pixels non nuls représentent les vêtements, les 0 pixels représentent le fond.
  • cette étape du traitement dépend de la manière dont vous souhaitez rendre les pixels transparents: si vous enregistrez votre image au format PNG avec un canal alpha (transparence), utilisez une opération logique AND (également appelée "masquage") entre les deux. canal alpha de l'image d'origine et le masque créé à l'étape précédente.
  • voilà, l'arrière-plan a disparu, enregistrez l'image obtenue.
scroll top