# am häufigsten vorkommenden Farben aus einem Bild



## erc_erco (19. Jun 2014)

Hallo zusammen,

ich muss mit java ein Programm schreiben, das am häufigsten vorkommenden Farben aus einem Bild findet.
Idee ist so, ein Bild pixel zu pixel durchlaufen und die Pixelfarbe auslesen und das Histogramm bilden. Dann sollte man die Median Cut Algorithmus anwenden, um die vorkommenden Farben zu finden.(Hier bin ich nicht ganz sicher)

Ich habe bis Histogramm geschaft aber Median Cut schaffe ich nicht. Hat jemand so was bis jetzt schon gemacht unf kann jemand mir helfen? ich kann auch gerne dafür zahlen, es ist kein Problem für mich? Danke.


----------



## Thallius (19. Jun 2014)

Eigentlich wird der MedianCut benutzt um die Farben zu reduzieren nicht um ihr Vorkommen zu berechnen. Was genau soll denn jetzt das Ergebnis sein? 

Gruß

Claus


----------



## erc_erco (19. Jun 2014)

Als Ergebnis soll die  Farben kommen, welche Farben das Bild hat( Also besser gesagt. Ich arbeite nicht mit Bilder sondern mit Logos. Logos haben noch weniger Farben maximal 5-6. und. Hintergrund wähle ich weiß und ignoriere ich weiße Farbe). Dann muss ich die Logos grupieren nach Anzahl von Farben. Z.B:  wenn wir an Twiterslogo denken, dort sehen wir nur eine farbe, d.h twiter-logo soll in die 1 farbgruppe, aber wenn wir das Logo von Google gucken, dort gibt es 4 verschiedene Farben d.h in die gruppe 4. Natürlich kann ich hier die Gruppe begrenzen. Sage so: es gibt gruppe 1 nur mit einer Farbe , 2 mit 2 Farben, 3 mit 3 Farben und es gibt eine Gruppe > 3 Farben wäre besser und einfacher denke ich. Ich habe nur so gelesen , dass man entweder Median-Cut (Farbreduktion) oder Scalar Quantization anwenden kann. Ich habe auch keine Ahnung und muss irgendwie eine Lösung finden. 

Du kannst hier genauer gucken
ST-Computer 7-8/94: Farbreduktion: Der Median-Cut-Algorithmus


Viele Gruße
Cem


----------



## Thallius (19. Jun 2014)

leider verstehe ich immer noch nicht was das Ergebnis Deiner Berechnungen sein soll. 

Wenn Du nur an <16 Farben interessiert bist, dann würde ich auch eben nur ein entsprechend kleines Histogramm aufbauen und nur die höchsten 2 Bit der Farbanteile betrachten. Dann bekommst du ein Histogramm mit maximal 27 Einträgen und damit kannst du dann locker herausfinden wieviele Farben ein Logo hat indem du einfach die Anzahl der Array-Einträge zählst die nicht 0 sind und es ensprechend in deine Gruppen sortieren.

Gruß

Claus


----------



## erc_erco (21. Jun 2014)

Hallo Claus ,

Danke für die Antwort. Ich meine so, angenommen wir haben deutsche Flagge, die 3 Farben Rot, Gelb und Schwarz hat . Ich muss sie analysieren und am Ende als Ergebnis ausgeben, dass die deutsche Flagge aus 3 Farben besteht. Aber Problem ist, wenn ich das Logo analysiere kommen viele Farben mit. Hier brauche ich einen Filter, um die unwichtige Farben wegzuschmeißen. Wie kann ich  nur die auf dem Logo  von der Augen gesehenen Farben rausgeben.


Ich hoffe, dass du jetzt mich verstehen könntest 

Viele Grüße


----------



## DrZoidberg (21. Jun 2014)

Hast du denn verstanden, wie der Median Cut Algorithmus funktioniert? Wie der RGB Quader unterteilt wird?
In deinem Fall musst du den Algorithmus etwas abwandeln, weil die Anzahl der Farben nicht vorgegeben ist.
Du unterteilst den Quader immer weiter und bestimmst nach jedem Schritt die Histogramme getrennt für jeden einzelnen Quader. Die Anzahl an Pixeln für die häufigst vorkommende Farbe in einem Quader nennen wir mal A und für die zweit häufigste Farbe B. Sobald A/B unter einem bestimmten Wert liegt, kannst du mit dem Aufteilen aufhören.


----------

