9 Stimmen

Ermitteln der dominanten Farben eines Bildes unter Ausschluss des Hintergrunds

Welches ist der beste Algorithmus (Ergebnis, nicht Leistung), um dominante Farben aus einem Bild zu holen? Der Algorithmus sollte den Hintergrund des Bildes vernachlässigen.

Ich weiß, ich kann ein Array von Farben und wie viele sie im Bild erscheinen, aber ich brauche einen Weg, um festzustellen, was ist der Hintergrund und was ist der Vordergrund, und halten nur die zweite (Vordergrund) im Auge, während lesen Sie die dominanten Farben.

Das Problem ist vor allem bei Hintergründen mit Farbverläufen oder mit Mustern (nicht einfarbig) sehr schwierig

8voto

Drew Noakes Punkte 282438

Den Vordergrund vom Hintergrund zu isolieren, würde den Rahmen dieser Antwort sprengen, aber...

Ich habe festgestellt, dass die Anwendung eines Pixelfilters auf ein Bild eine wirklich gute Reihe von "durchschnittlichen" Farben hervorbringt.

Vor

before

Nach

enter image description here

Manchmal verwende ich diesen Ansatz, um eine Farbpalette mit einer bestimmten Stimmung zu erstellen. Ich suche zunächst ein Foto mit den gewünschten Grundtönen, verpixle es und nehme dann eine Probe aus dem resultierenden Bild.

(Dank an Pietro De Grandi für das Bild, gefunden auf unsplash.com)

0 Stimmen

Ich kenne diese Technik, aber das ist keine Antwort auf meine Frage. Die einfachste Methode für den obigen Ansatz ist: @product = Product.find(params[:id]) @image = Magick::ImageList.new(@product.photo.path) @image = @image.quantize(quantisation_level)

1 Stimmen

@Drew: Bei dieser Art der Verpixelung werden die Pixel im Grunde genommen sowieso nur zu Blöcken gemittelt, so dass diese Frage nicht wirklich beantwortet wird.

0 Stimmen

@MusiGenesis -- Ich habe darauf hingewiesen, dass es den Vordergrund nicht vom Hintergrund unterscheiden kann (erster Satz meiner Antwort), aber es ist ein einfaches und nützliches Mittel, um die dominanten Farben eines Bildes zu finden (erster Satz der Frage).

6voto

Alex Gray Punkte 15268

Die Farbzusammenfassung ist eine gute Anlaufstelle für Informationen zu diesem Thema, ganz zu schweigen von der scheinbar kostenlosen XML-Web-API, die beschreibende Farbstatistiken für ein Bild Ihrer Wahl erstellt und diese mit Farbfeldern in HTML oder als XML formatiert zurückmeldet...

  • Wie hoch ist der durchschnittliche Farbton, die Sättigung und der Wert in meinem Bild?
  • Welches ist die RGB-Farbe, die für das Bild am repräsentativsten ist?
  • Wie sehen die RGB- und HSV-Histogramme aus?
  • Wie lautet die für Menschen lesbare Farbbeschreibung des Bildes (z. B. dunkles, reines Blau)?

Der Zweck dieses Dienstprogramms besteht darin, Metadaten zu erzeugen, die eine Farbmerkmale eines Bildes für die Aufnahme in eine Bilddatenbank zusammenfasst, wie Flickr. Insbesondere wird dieses Tool verwendet, um Folgendes zu generieren Metadaten für die Flickr-Gruppe Farbfelder zu erzeugen.

enter image description here

Meiner Erfahrung nach verfehlt dieses Tool jedoch sehr oft die "menschenlesbare" / offensichtliche "Hauptfarbe". Dumme Maschinen!

5voto

MusiGenesis Punkte 72729

Ich würde sagen, dieses Problem ist eher "unmöglich" als "sehr schwer". 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 unterschiedlicher Farben besteht.

Wenn diese Annahme generell zutrifft, könnte man das gesamte Bild durchsuchen und die Pixel danach gewichten, wie ähnlich oder unähnlich sie den benachbarten Pixeln sind. Mit anderen Worten: Wenn die Nachbarn eines Pixels (vielleicht innerhalb eines beliebigen Radius) alle ähnliche Farben haben, würde man dieses Pixel nicht in die Gesamtschätzung einbeziehen. Wenn die Nachbarn in der Regel sehr unterschiedliche Farben haben, würden Sie das Pixel stark gewichten, vielleicht im Verhältnis zum Grad des Unterschieds.

Dies mag nicht perfekt funktionieren, aber es würde zumindest dazu führen, dass große Bereiche mit ähnlichen Farben ausgeschlossen werden.

1voto

aviraldg Punkte 9311

Soweit mein Wissen über Bildverarbeitungsalgorithmen reicht, gibt es keinen sicheren Weg, den "Vordergrund" zu erhalten; es ist nur möglich, den Grenzen zwischen Objekten . Wahrscheinlich müssen Sie sich mit einem Durchschnittswert oder der von Ihnen vorgeschlagenen Zählmethode begnügen. Dabei sollten Sie den Farben mit höherer Sättigung eine höhere "Punktzahl" zuweisen, da sie viel stärker hervortreten.

0 Stimmen

Wenn der Vordergrund scharf und der Hintergrund leicht unscharf war, dann enthält das Rohbild genügend Informationen, um den Vordergrund vom Hintergrund zu unterscheiden. Allerdings bin ich mir nicht sicher, wie man das genau macht :)

0 Stimmen

Das ist möglich, erfordert aber zwei oder mehr als zwei stereoskopische Bilder oder eine Tiefenkarte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X