Nous essayons de faire ce qui suit dans Mathematica - RMagick supprime le fond blanc de l'image et le rend transparent .
Mais avec des photos réelles, cela finit par donner un mauvais résultat (comme un halo autour de l'image).
Voici ce que nous avons essayé jusqu'à présent :
unground0[img_] := With[{mask = ChanVeseBinarize[img, TargetColor->{1.,1.,1.}]},
Rasterize[SetAlphaChannel[img, ImageApply[1-#&, mask]], Background->None]]]
Voici un exemple de ce que cela fait.
Image originale :
Image dont le fond blanc a été remplacé par un fond vide (ou, pour les besoins de la démonstration, un fond rose) :
Des idées pour se débarrasser de ce halo ? En modifiant des éléments comme LevelPenalty, je n'arrive à faire disparaître le halo qu'au prix d'une perte partielle de l'image.
EDIT : Afin que je puisse comparer les solutions pour la prime, veuillez structurer votre solution comme ci-dessus, à savoir une fonction autonome nommée unground-something qui prend une image et renvoie une image avec un fond transparent.
1 votes
Merci beaucoup à tous pour l'aide apportée jusqu'à présent ! Une grosse prime est prévue dès que stackoverflow me permettra d'en ajouter une. Et, conformément à l'esprit de stackoverflow tel qu'il a été formulé par les fondateurs, vous devriez vous sentir libre de voler les uns des autres pour faire de votre réponse la réponse définitive !
3 votes
D'abord 500 de prime et ensuite "Je vous encourage tous à emprunter généreusement les uns des autres pour l'améliorer si possible !". -- vous voulez un combat de chiens, n'est-ce pas ?
0 votes
@Mr.Wizard, :) Je n'invente rien, les fondateurs (Jeff et Joel) ont dit depuis le début que c'était encouragé. L'idée est que la meilleure réponse soit vraiment complète et définitive. (Et évidemment, j'ai aussi des arrière-pensées dans ce cas !)
0 votes
Comment comptez-vous l'utiliser ? Je vous le demande parce que vous montrez l'image sur un fond rouge/rose. Si vous comptez la placer sur un fond non blanc, la couleur du fond cible (sombre ou clair) est très importante. Dans le cas de vraies photos, il est inévitable qu'il y ait une sorte de mélange entre les bords de l'objet au premier plan et la couleur de l'arrière-plan (à cause d'une mise au point imparfaite de l'appareil photo, des tremblements, de l'absence de netteté de l'objet, etc.
0 votes
Si nous savons à l'avance que l'objet sera représenté sur un fond sombre homogène (ou un fond clair), nous pouvons compenser cela et lui donner un bien meilleur aspect. Ou du moins, si nous avons plus de flexibilité pour composer le nouvel arrière-plan avec l'avant-plan qu'en nous appuyant sur un simple canal alpha.
0 votes
@dreeves Veuillez voir les modifications apportées à ma réponse.
0 votes
@Szabolcs, c'est comme tu l'as supposé avec ton exemple de mettre un produit d'Amazon dans une jungle (hé, je viens d'avoir le jeu de mots implicite là !). C'est-à-dire prendre des produits d'un catalogue et les superposer sur des photos arbitraires, comme celles de votre appartement. Mais la suppression de l'arrière-plan doit être effectuée hors ligne, sans connaître l'image sur laquelle elle sera superposée.
3 votes
Pour les plus curieux, voici le poste de travail informatique "FREDRIK" d'IKEA : ikea.com/us/en/catalogue/produits/60111123
0 votes
Correct ! Mais maintenant je suis curieux @Arnoud, l'avez-vous simplement reconnu ou l'image elle-même révèle-t-elle sa source d'une manière ou d'une autre ?
0 votes
Dreeves, je n'ai pas eu le temps de poster une solution, mais mon intention était d'utiliser
Manipulate
pour affiner le résultat. Cela va-t-il à l'encontre de vos nouvelles règles ?1 votes
@dreeves, j'ai utilisé tineye.com .
0 votes
@Mr.Wizard, je ne pense pas. Voulez-vous dire que si la solution est hautement adaptée à cette image particulière, elle ne peut pas être une bonne solution générale ?
0 votes
Non, je veux dire que je pense qu'il sera nécessaire d'avoir des paramètres ajustables pour obtenir un bon résultat avec différentes images. Cela ne serait pas acceptable si votre intention est de traiter par lots un grand nombre d'images.
0 votes
@Mr.Wizard, ah, oui, bien sûr. Mon intention était de traiter par lots un grand nombre d'images, mais je commence à craindre que ce ne soit pas vraiment possible. Parfois, les objets brillants ont des taches de lumière blanche et d'autres objets ont beaucoup de petits trous où l'arrière-plan devrait apparaître. Il semble qu'il faille être humain pour faire la différence. En d'autres termes, ce que nous espérions faire pourrait ne pas être réaliste et une intervention humaine pourrait être nécessaire. Ce qui rendrait une solution impliquant Manipuler peut-être idéale.
0 votes
Je ne vois pas si cela a été proposé, mais j'essaierais un algorithme de croissance de région sur une tentative grossière. Level-set par exemple devrait faire un excellent travail.