![]() |
Farbe herabsetzen
Liste der Anhänge anzeigen (Anzahl: 2)
Ich versuche in einem Bild die Farben herabzusetzen. Ich habe z.B. ein Bild und möchte dieses Bild auf 16 festgesetzte Farben bringen. Ganz einfach würde das gehen wenn ich Bild.PixelFormat := pf4bit setzen würde. Doch dabei werden Farbverläufe von z.B. Weiß nach Rot in Grau dargestellt. Im Anhang zwei Bilder, an denen man dies sehen kann.
Wie kann man solch eine Funktion schreiben, die auch hellrote Farben in Rot umwandelt? Das Problem ist dabei auch, dass die eine Farbe für den einen Menschen mehr nach Rot, für den anderen mehr nach Weiß aussieht. Fertige Tabellen wird es wohl nicht geben, bzw. für jede dieser 16 Farben einen Farbraum per Hand zu bestimmen wäre auch zu aufwändig. Kann man sowas vielleicht ausrechnen? Oder gibt es andere Vorgehensweisen? |
Re: Farbe herabsetzen
Ich denke mal das Stichwort, das Dir für Deine Suche fehlt ist "Dithering". Das erlaubt bei herabgesetzter Farbtiefe durch "intelligentes" nebeneinanderplatzieren von Farbpunkten eine dem Original ähnliche Darstellung.
Sherlock |
Re: Farbe herabsetzen
![]() Edit: Dithering allein macht eine optimierte Palette aber noch lange nicht wett. Das ist eher ein optionaler nachgelagerter Schritt. |
Re: Farbe herabsetzen
Dithering will ich keins einbauen. Das Bild soll nicht unbedingt originalgetreu rekonstruiert werden. Die Farbverläufe sollen nicht nachgebildet werden, ich brauche ein Bild mit harten Kanten. Das Problem ist, dass aus einer hellroten Farbe ein Grauton gemacht wird. Jedoch soll nach meiner Vorstellung aus diesem hellrot ein Rot gemacht werden.
Ich werde es jetzt so versuchen, dass ich die 16 Farben festlege und wenn ich dann einen Farbton habe, dann schaue ich, an welcher Farbe er am nähesten dran ist. Man kann sich den RGB Farbraum ja wie einen Würfel vorstellen und dann kann ich diesen entweder in genügend Quadrate unterteilen oder ich lasse mir noch was anderes zur Bestimmung der Entfernung einfallen. Falls jemand noch andere Vorschläge hat, nur her damit. |
Re: Farbe herabsetzen
Zitat:
wenn es wirklich ganz und gar nach deinem Geschmack gehen soll, gibt es nur eine Möglichkeit: du machst eine Tabelle mit 24 Mio Einträgen (entsprechend RGB) und schreibst in jede Zelle, welche von den 16 reduzierten Farben das werden soll. Gruss Reinhard |
Re: Farbe herabsetzen
So, ich hab das jetzt folgendermaßen gelöst:
Zuerst rechne ich den RGB-Wert in den ![]() Was mir noch fehlt wäre z.B. die Farbe Braun, diese ist nämlich garnicht so einfach zusammengestellt: Nach Wolfram|Alpha besteht sie aus der Farbe Orange (30° auf der Farbskala), ist aber nur zu 67% gesättigt. Aber vielleicht kann man den Farbraum noch bisschen erweitern, mit viel ausprobieren bekomme ich sicher noch was raus. |
Re: Farbe herabsetzen
Hallo hadschi92,
du könntest alle Farben in Lab Werte umwandeln. Das besondere an den Lab Farbraum ist, dass man quasi mit euklidischen Abständen rechnen kann. Außerdem gibt es eine Formel namens deltaE im Lab-Farbraum, das den Abstand von 2 Lab-Farben auspuckt. Du rechnest für jede Farbe das deltaE zu den 16 Farben aus. Dort wo das deltaE am geringsten ist, da schiebst du die Farbe hin. Was ich nicht abschätzen kann, ist der Rechenaufwand. Aber bei kleinen Bildern sollte es schon funktionieren. Lg, jus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz