Page 1 of 1

Denker gesucht zwecks .....

Posted: Thu 17 Jan, 2008 7:57 am
by gento
Vorschläge um True Color in 64 frei definierbare Farben umzuwandeln.

Unter Gewichtung : Häufigkeit + Farbvielfalt + Ausgewogenheit.

Ideeenansätze sind auch willkommen ohne Formeln.
Und dovfe Iden gibts die ?

lg Gento

Posted: Thu 17 Jan, 2008 8:47 am
by Dr.Ulli
Hi Gento,
kommst Du an den Farbcode RGB z.B (12,255,245)?
Wenn ja, dann die Anzahl der Werte pro Farbe (256) durch 64/3 ~ 21 teilen (21 Abstufungen pro Farbe) also hat man dann alle 256/21 ~ 12 eine neue Stufe für jede Farbe....wär dann oben ~ (1*12,21*12,20*12).
Jeder der Stufen könnte man dann auch einem bestimmten Wert zuordnen.

So ähnlich würds ich probieren...
Grüße,
Ulli

Posted: Thu 17 Jan, 2008 9:46 am
by sanaia
histogramm berechnen, klassen sortieren, die 64 klassen nehmen, die die meisten zähler haben.
kurzgesagt: farben zählen und die 64 nehmen, die am häufigsten vorkommen.

Posted: Thu 17 Jan, 2008 12:31 pm
by Dr.Ulli
sanaia wrote:Histogramm berechnen, Klassen sortieren, die 64 Klassen nehmen
Histogramm ist ne gute Idee, aber wovon?
sanaia wrote: Farben zählen und die 64 nehmen, die am häufigsten vorkommen.
damit könnte man nur noch rote Farben bekommen....(z.B.) - das könnte die Ausgewogenheit zunichte machen.

Ich favorisiere daher weiterhin die oben beschriebene Einteilung - da bleibt der komplette Farbraum erhalten.

Aber was meint Gento?

Posted: Thu 17 Jan, 2008 1:57 pm
by sanaia
Dr.Ulli wrote:Histogramm ist ne gute Idee, aber wovon?
von der farbkoordinate, z.B. vom Hue-wert. Man müsste das ganze noch mit sättigung und intensität wichten, denn man hat es ja mit einem dreidimensionalen problem zu tun. Alternativ könnte man auch die volumetrische punktdichte veranziehen, also die 64 volumenkoordinaten, an denen die meisten punkte liegen (3D histogramm).
damit könnte man nur noch rote Farben bekommen....
das ist das generelle problem bei der farbreduktion. Entweder man macht farbquantisierung (dein vorschlag; nachteil: farbstufen), oder man macht gewichtete farbreduktion (mein vorschlag, nachteil: farbstich).

Alternativ könnte man auch eine mischung aus beiden machen und den parameterraum reduzieren, indem man zwei von den drei parametern quantisiert und einen beläßt, somit aber die effektive anzahl unterschiedlicher farben reduziert.

Keine ahnung wozu rainer das braucht ...

Posted: Thu 17 Jan, 2008 3:36 pm
by coffeediver
Dr.Ulli wrote:...256/21 ~ 12 eine neue Stufe für jede Farbe....
Aber dann hätte man 21 Stufen ROT, 21 Stufen GRÜN, 21 Stufen BLAU, und SCHWARZ, aber kein CYAN, kein GELB, kein MAGENTA und auch kein WEISS :?.
sanaia wrote:Keine ahnung wozu Rainer das braucht ...
Ich könnte mir vorstellen, dass es gebraucht wird um ILDA-XYRGB Files in ILDA-XYPal umzukonvertieren.

Mein Vorschlag wäre zuerst die 8 Bit Farbtiefe pro Farbe auf 5 Bit zu reduzieren, und von dieser die Verteilung der RGB-Werte zu ermitteln.
Sobald ein Farbwert mehr als 1/64 aller Farbpunkte enthält, bekommt er einen Eintrag in der Farbpalette und wird auf 0 gesetzt.
danach wird die Farbtiefe auf 4 Bit reduziert (addieren der Punkteanzahl der nur um 1Bit unterschiedlichen Einträge) und dieselbe Prozedur durchgeführt.
danach diese Prozedur mit 3 Bit Farbtiefe........
Bis zuletzt nur mehr die "TTL-Farben" übrigbleiben, welche meiner Meinung auf jeden Fall einen Paletteneintrag bekommen sollten.
Am Ende werden die noch verbleibenden Palettenplätze in absteigender Reihenfolge mit den am meisten vorkommenden RGB Werten befüllt, welche nicht die 1/64 "Hürde" geschafft haben.

Gruss Andreas

Posted: Thu 17 Jan, 2008 4:02 pm
by Dr.Ulli
coffeediver wrote:Aber dann hätte man 21 Stufen ROT, 21 Stufen GRÜN, 21 Stufen BLAU, und SCHWARZ, aber kein CYAN, kein GELB, kein MAGENTA und auch kein WEISS :?.
Ja - stimmt! Hab garnicht dran gedacht, dass ich dann schon alle 64 möglichen Werte "verballert" habe. :oops: :oops: :oops: Mischungen wären ja wieder Extra-Werte..... :roll:
Also doch aus dem True-Colour "Regenbogen" 64 Farben rauspicken...durch Reduktion der 8 Bit auf die 5...gute Idee!

Posted: Thu 17 Jan, 2008 4:33 pm
by gento
Image

Verteilung nach der 'Formel' R=(R Div 32)*32 und nach Quicksot.
Noch viel zu viele Farben sind möglich.

Nimmt man die am meist vertreten kann das Bild Richtung eintönig werden und Farnen werden geschluckt.

Ich werde mal versuchen 32 Farbe fest 'ausgewogen' vergeben.
Den Rest der 64 + (von den 32 nicht benutzten), auf Häufigkeit.

Im nächsten Durchlauf jede Filefarbe der am nächsten in der 64 Tabelle umordnen.

-----------------------------------
Variante Faul : 64 ausgewogene Farben vergeben und das File auf der am nächten Farbe umsortieren.

-----------------------------------
Es liegen Files im 100 MB vor und jedes Bit R,G,B ist bekannt.


lg Gento

Posted: Thu 17 Jan, 2008 5:29 pm
by sanaia
64: => 6bit

RGB => HSV -> histogramm, reduzieren der klassen auf

H: 3 bit (8 werte)
S: 1 bit (2 werte)
V: 2 bit (4 werte)

ergibt 8 verschiedene farben mit je zwei sättigungsstufen und 4 intensitäten. Alle unpassenden werden auf diese farben quantisiert. Welche acht farben das sind ergibt sich aus dem H-histogramm, die sättigungsstufen aus dem S-histogramm und die intensitäten aus dem V-histogramm.

Posted: Thu 17 Jan, 2008 7:31 pm
by gento
coffeediver wrote:
sanaia wrote:Keine ahnung wozu Rainer das braucht ...
Ich könnte mir vorstellen, dass es gebraucht wird um ILDA-XYRGB Files in ILDA-XYPal umzukonvertieren.
Ich will True Color Ilda Files in's Betagte Cat 0 (64 Farben) Fomat von LDS/Phoenix bringen.Mit dem File optimalen 'Namensgleichen.pal' Datei.
Oder ins alte Ilda 1..2

Gento

Posted: Fri 18 Jan, 2008 8:40 am
by sanaia
Was du suchst sind farbreduktionsalgorithmen. Die stichworte dazu wären: Octree, Median Cut, Popularity Algorithm, NeuQuant.

Mein vorschlag ist sowas wie ein median cut im HSV raum, nur daß da keine quader gebildet werden, sondern die histogrammklassen sortiert werden.

Alles in allem: eine einfache lösung dafür gibt es nicht.

Reduktion von Farbräumen

Posted: Fri 18 Jan, 2008 10:47 am
by Dr.Ulli
Hab ne Lösungsvariante anzubieten:

Problem: 16Mio Farben auf 64 reduzieren

16 Mio Farben: 256Stufen pro Grundfarbe (256*256*256=16777216)
64 Farben: 4 Stufen pro Farbe (4*4*4=64)

Davon sind 0 und 255 schon pro Farbe vergeben (Aus und voll an)
Bleiben noch jeweils 2 Stufen pro Farbe zu bestimmen, also 0-255 in drei Abschnitte (Trennstriche =2) aufteilen 256/3=85,33333 also sagen wir 85
D.h. pro Farbe die Stufen (0, 85, 170, 255), also alles was bei 16Mio Farben
von 1-85 geht wird 85 zugeordnet, was von 86 bis 170 geht wird 170 zugeordnet, was von 171 bis 255 geht wird 255 zugeordnet, 0 bleibt 0.
So hab ich alle Mischfarben, oder anders gesagt, den Fullcolour Regenbogen auf einen mit 64 Farben reduziert.

Was meint ihr? Für die beiden Zwischenstufen könnte man auch eine andere Abstufung wählen, aber durch Gleichteilung wird die vorherige Balance gewahrt.

Grüße!
Ulli

Posted: Fri 18 Jan, 2008 10:48 am
by coffeediver
sanaia wrote:64: => 6bit
RGB => HSV -> histogramm, reduzieren der klassen auf

H: 3 bit (8 werte)
S: 1 bit (2 werte)
V: 2 bit (4 werte)

ergibt 8 verschiedene farben mit je zwei sättigungsstufen und 4 intensitäten......
Aber eine fixe Zuordnung zu dieser Palette kann bei manchen Lasershows zu ziemlichen Verlusten führen.

z.B.: eine "kühle" Show mit vielen Fading / Farbverläufen im Violett - Blau - Grünblau Bereich aufgelockert durch Rot - Orange - Gelbe Beams mit voller Leistung über dem Zuschauerbereich.

Bei den Blauverläufen wäre die Abstufung ziemlich grob, und im Rot-Gelb Bereich gäbe es unnötige Intensitätsstufen.

- Oder wie geht man mit Shows die für RGY-Projektoren geschrieben/optimiert sind um.

- Oder Shows für Monochromprojektoren, welche nur 63 Intensitäten für grün optimal verwenden würden.

Weiter wäre es für Lasershows wahrscheinlich besser die Intensitäten nichtlinear zu quantisieren.
Da z.B bei einer 5-Stufigen Verteilung die Intensitäten
100% - 50% - 25% - 12% - 0 einer Intensitätsverteilung
100% - 75% - 50% - 25% - 0 vorzuziehen wäre.

Posted: Fri 18 Jan, 2008 11:11 am
by sanaia
Wenn das zielformat nur eine palette pro show kennt wird man *immer* mit erheblichen qualitätsverlusten rechnen müssen. Das liegt in der natur der sache, egal welches verfahren man anwendet. Für diesen Fall bleibt nur eine RGB quantisierung mit jeweils drei intensitätsstufen (= 2bit) für jede komponente übrig.
Jegliche form "intelligenter" farbreduktion macht nur sinn, wenn jeder frame seine eigene palette haben kann.

Posted: Fri 18 Jan, 2008 4:10 pm
by gento

Code: Select all

   Ausgewogene_RGB_Farben_1:Array[0..63,1..3]of Byte=
   ((0,0,0),(86,0,0),(172,0,0),(255,0,0),(0,86,0),(86,86,0),
    (172,86,0),(255,86,0),(0,172,0),(86,172,0),(172,172,0),(255,172,0),
    (0,255,0),(86,255,09),(172,255,0),(255,255,0),(0,0,86),(86,0,86),
    (172,0,86),(255,0,86),(0,86,86),(86,86,86),(172,86,86),(255,86,86),
    (0,172,86),(86,172,86),(172,172,86),(255,172,86),(0,255,86),(86,255,86),
    (172,255,86),(255,255,86),(0,0,172),(86,0,172),(172,0,172),(255,0,172),
    (0,86,172),(86,86,172),(172,86,172),(255,86,172),(0,172,172),(86,172,172),
    (172,172,172),(255,172,172),(0,255,172),(86,255,172),(172,255,172),(255,255,172),
    (0,0,255),(86,0,255),(172,0,255),(255,0,255),(0,86,255),(86,86,255),
    (172,86,255),(255,86,255),(0,172,255),(86,172,255),(172,172,255),(255,172,255),
    (0,255,255),(86,255,255),(172,255,255),(255,255,255));
Ich werde wohl noch andere Tabellen erstellen:
Rot Lastig
Grün lastig
Blau lastig
Blau Rot lastig
Blau Grün lastig
Grün Rot lastig

und auf was sich das File am Meisten nähert sezieren.

lg Gento

Posted: Fri 18 Jan, 2008 6:34 pm
by gento
Untersuchungen:
Image

<Rem>
Schnitt Rot : 0..1 Rotanteil aller Punkte
Intensität Mittel Rot. Rotanteil aller Punkte mit Rot.
</Rem>
und weiter gehts nach der Nadelsuche :lol:

gento

Posted: Sat 19 Jan, 2008 1:09 am
by gento
Bild unten eine komplette True Color Show .

R G B Solo seziert.

X = Color 0..255 aber <50 = 50 gezeichnet.
Y = Höhe = SQRT(Menge)

Bild oben eine große Framedatei mit Real 58 Farben.
Gento

Posted: Sat 19 Jan, 2008 3:45 am
by gento
Wie Bild 1 nur über log / ln.

Das File ist eine harte Nuss.
Gento

Posted: Mon 21 Jan, 2008 11:49 am
by coffeediver
Gento wrote:

Code: Select all

   Ausgewogene_RGB_Farben_1:Array[0..63,1..3]of Byte=
   ((0,0,0),(86,0,0),(172,0,0),(255,0,0),(0,86,0),(86,86,0)...
[/quote] Diese Palette enthält aber auch Farbtöne wie
[b](255,255,86)[color=#FFFF56]gelbstichiges weiss[/color],(0,86,255) [color=#00FF56]leichtbläuliches grün[/color],(255,86,255)[color=#FF56FF]weiss angehauchtes magenta[/color][/b],...
somit für Lasershows eher wenig notwendige Farben.

Mein Vorschlag[1] wäre eine Palette mit 7 Farben[[b][color=red]Rd[/color],[color=yellow]Ye[/color],[color=green]Gn[/color],[color=cyan]Cy[/color],[color=blue]Bl[/color],[color=#FF00FF]Mg[/color],[color=white]Wh[/color][/b]]
                  x 9 Intensitätsstufen[6%,9%,13%,18%,25%,35%,50%,71%,100%] + Schwarz

Palette_7Color_9Intesity:Array[0..63,1..3]of Byte=
((0,0,0),(16,0,0),(23,0,0),(32,0,0),(45,0,0),(64,0,0),(90,0,0),(128,0,0),(180,0,0),(255,0,0),
(16,16,0),(23,23,0),(32,32,0),(45,45,0),(64,64,0),(90,90,0),(128,128,0),(180,180,0),(255,255,0),
(0,16,0),(0,23,0),(0,32,0),(0,45,0),(0,64,0),(0,90,0),(0,128,0),(0,180,0),(0,255,0),
(0,16,16),(0,23,23),(0,32,32),(0,45,45),(0,64,64),(0,90,90),(0,128,128),(0,180,180),(0,255,255),
(0,0,16),(0,0,23),(0,0,32),(0,0,45),(0,0,64),(0,0,90),(0,0,128),(0,0,180),(0,0,255),
(16,0,16),(23,0,23),(32,0,32),(45,0,45),(64,0,64),(90,0,90),(128,0,128),(180,0,180),(255,0,255),
(16,16,16),(23,23,23),(32,32,32),(45,45,45),(64,64,64),(90,90,90),(128,128,128),(180,180,180),(255,255,255))

Vorschlag[2] wäre eine Palette mit 13 Farben[[b][color=red]Rd[/color],[color=orange]Or[/color],[color=yellow]Ye[/color],[color=#80FF00]Le[/color],[color=green]Gn[/color],[color=#00FF80]Aq[/color],[color=cyan]Cy[/color],[color=#0080FF]Gb[/color],[color=#0000FF]Bl[/color],[color=#8000FF]Vi[/color],[color=#FF00FF]Mg[/color],[color=#FF0080]Pu[/color],[color=white]Wh[/color][/b]]
               x 5 (bzw 4 für Lemon und Aquamarin) Intensitätsstufen[(9%),19%,36%,60%,100%] + Schwarz

Palette_13Color_5Intesity:Array[0..63,1..3]of Byte=
((0,0,0),(24,0,0),(48,0,0),(92,0,0),(152,0,0),(255,0,0),
(24,12,0),(48,24,0),(92,46,0),(152,76,0),(255,128,0),
(24,24,0),(48,48,0),(92,92,0),(152,152,0),(255,255,0),
(24,48,0),(46,92,0),(76,152,0),(128,255,0),
(0,24,0),(0,48,0),(0,92,0),(0,152,0),(0,255,0),
(0,48,24),(0,92,46),(0,152,76),(0,255,128),
(0,24,24),(0,48,48 ),(0,92,92),(0,152,152),(0,255,255),
(0,12,24),(0,24,48 ),(0,46,92),(0,76,152),(0,128,255),
(0,0,24),(0,0,48 ),(0,0,92),(0,0,152),(0,0,255),
(12,0,24),(24,0,48 ),(46,0,92),(76,0,152),(128,0,255),
(24,0,24),(48,0,48 ),(92,0,92),(152,0,152),(255,0,255),
(24,0,12),(48,0,24),(92,0,46),(152,0,76),(255,0,128),
(24,24,24),(48,48,48 ),(92,92,92),(152,152,152),(255,255,255))

[size=75][color=darkred]Achtung - Ich habe bei ....,48 ) ein Blank einfügen müssen damit nicht ,48) kommt[/color][/size]

[size=75][color=red]edit: jetzt erst genauer durchgelesen[/color][/size][quote="Gento"]<Rem> 
Schnitt Rot : 0..1 Rotanteil aller Punkte 
Intensität Mittel Rot. Rotanteil aller Punkte mit Rot. 
</Rem>[/quote][quote]Intensität Mittel Rot   :0,73
Intensität Mittel Grün :0,71
Intensität Mittel Blau  :0,65[/quote]
Somit dürfte sich der Farbanteil eher im Bereich 30% - 100% bewegen =>

Vorschlag[3] wäre eine Palette mit 13 Farben[[b][color=red]Rd[/color],[color=orange]Or[/color],[color=yellow]Ye[/color],[color=#80FF00]Le[/color],[color=green]Gn[/color],[color=#00FF80]Aq[/color],[color=cyan]Cy[/color],[color=#0080FF]Gb[/color],[color=#0000FF]Bl[/color],[color=#8000FF]Vi[/color],[color=#FF00FF]Mg[/color],[color=#FF0080]Pu[/color],[color=white]Wh[/color][/b]]
               x 4 Intensitätsstufen[35%,50%,71%,100%] + Schwarz + [color=darkblue]11 x Benutzerdefiniert[/color]
Palette_13Color_4Intesity:Array[0..63,1..3]of Byte=
((0,0,0),(92,0,0),(128,0,0),(184,0,0),(255,0,0),
(92,46,0),(128,64,0),(184,92,0),(255,128,0),
(92,92,0),(128,128,0),(184,184,0),(255,255,0),
(46,92,0),(64,128,0),(92,184,0),(128,255,0),
(0,92,0),(0,128,0),(0,184,0),(0,255,0),
(0,92,46),(0,128,64),(0,184,92),(0,255,128),
(0,92,92),(0,128,128),(0,184,184),(0,255,255),
(0,46,92),(0,64,128),(0,92,184),(0,128,255),
(0,0,92),(0,0,128),(0,0,184),(0,0,255),
(46,0,92),(64,0,128),(92,0,184),(128,0,255),
(92,0,92),(128,0,128),(184,0,184),(255,0,255),
(92,0,46),(128,0,64),(184,0,92),(255,0,128),
(92,92,92),(128,128,128),(184,184,184),(255,255,255),
[color=darkblue](0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0),
(0,0,0),(0,0,0),(0,0,0),(0,0,0),(0,0,0))[/color]

Für die Bewertung der Farb- / Intensitäts-Abweichung hätte ich diese Vorschläge:

function AbweichungFarbe(Rot , Grün ,Blau, Palette_Rot, Palette_Grün, Palette_Blau as Byte) as float
[size=75]return (sqrt((Rot-Palette_Rot)*(Rot-Palette_Rot) + (Grün-Palette_Grün)*(Grün-Palette_Grün) + (Blau-Palette_Blau)*(Blau-Palette_Blau)))/255[/size]
 
function AbweichungIntensität(Rot , Grün ,Blau, Palette_Rot, Palette_Grün, Palette_Blau as Byte) as float
[size=75]return abs(sqrt(Rot*Rot + Grün*Grün + Blau*Blau)-sqrt(Palette_Rot*Palette_Rot + Palette_Grün*Palette_Grün + Palette_Blau*Palette_Blau))/255[/size]

Gruss Andreas