Was ist der beste Algorithmus (Ergebnis, nicht Leistung), um dominante Farben aus einem Bild zu holen? Der Algorithmus sollte den Hintergrund des Bildes verwerfen.
Ich weiß, dass ich ein Array von Farben erstellen kann und wie viele davon im Bild erscheinen, aber ich brauche einen Weg, um zu bestimmen, was der Hintergrund und was der Vordergrund ist, und nur die zweite (Vordergrund) beim Lesen zu beachten die dominierenden Farben.
Das Problem ist sehr schwierig, besonders für Gradienten-Hintergründe oder Hintergründe mit Mustern (nicht einfach)
Das Isolieren des Vordergrunds vom Hintergrund übersteigt den Rahmen dieser speziellen Antwort, aber ...
Ich habe festgestellt, dass die Anwendung eines Pixelierungsfilters auf ein Bild eine wirklich gute Auswahl an "durchschnittlichen" Farben ergibt.
Vorher
Nach
Manchmal benutze ich diesen Ansatz, um eine Palette von Farben mit einer bestimmten Stimmung abzuleiten. Ich finde zuerst ein Foto mit den allgemeinen Tönen, nach denen ich suche, pixeliere und dann aus dem resultierenden Bild.
(Danke an diese Seite für die Bilder, die über Google Bildersuche gefunden wurden)
Die Farbzusammenfassung ist ein hübscher Sweet Spot für Informationen zu diesem Thema, ganz zu schweigen von ihrer scheinbar kostenlosen XML-Web-API erstellt beschreibende Farbstatistiken für ein Bild Ihrer Wahl und gibt folgende Formatierungen mit Farbfeldern in HTML oder als XML zurück ...
Der Zweck dieses Dienstprogramms besteht darin, Metadaten zu generieren, die eine Zusammenfassung von Bildfarbeigenschaften zur Aufnahme in eine Bilddatenbank, wie Flickr. Insbesondere wird dieses Tool zum Generieren verwendet Metadaten für die Flickr-Gruppe Farbfelder.
Aber meiner Erfahrung nach .. dieses Werkzeug vermisst immer noch die "menschenlesbare" / offensichtliche "Hauptfarbe", VIELE DER ZEIT. Dumme Maschinen!
Ich würde sagen, dass dieses Problem eher "unmöglich" als "sehr schwer" ist. Der einzige Ansatz, den ich mir vorstellen kann, wäre die Annahme, dass der Hintergrund eines Bildes wahrscheinlich aus festen Blöcken ähnlicher Farben besteht, während der Vordergrund wahrscheinlich aus kleineren Blöcken ungleicher Farben besteht.
>Wenn diese Annahme allgemein zutrifft, könnten Sie das gesamte Bild scannen und die Pixel entsprechend ihrer Ähnlichkeit oder Unähnlichkeit mit benachbarten Pixeln gewichten. Mit anderen Worten, wenn die Nachbarn eines Pixels (innerhalb eines beliebigen Radius, vielleicht) alle ähnliche Farben hätten, würden Sie dieses Pixel nicht in die Gesamtschätzung einbeziehen. Wenn die Nachbarn dazu neigen, sehr unterschiedliche Farben zu haben, würden Sie das Pixel stark belasten, vielleicht im Verhältnis zum Grad der Differenz.
Dies funktioniert möglicherweise nicht perfekt, aber es würde zumindest dazu neigen, große Schwaden ähnlicher Farben auszuschließen.
Soweit mein Wissen über Bildverarbeitungsalgorithmen reicht, gibt es keinen sicheren Weg, den "Vordergrund" zu bekommen; Es ist nur möglich, Grenzen zwischen Objekten zu erhalten. Sie werden wahrscheinlich mit einem Durchschnitt oder Ihrer vorgeschlagenen Array-Zählmethode auskommen müssen. In diesem Fall sollten Sie Farben mit höherer Sättigung eine höhere "Punktzahl" geben, da sie viel stärker hervortreten.