AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbe herabsetzen

Ein Thema von hadschi92 · begonnen am 6. Aug 2009 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#1

Farbe herabsetzen

  Alt 6. Aug 2009, 12:37
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?
Miniaturansicht angehängter Grafiken
bild2_147.jpg   bild1_142.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Farbe herabsetzen

  Alt 6. Aug 2009, 13:00
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
Oliver
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Farbe herabsetzen

  Alt 6. Aug 2009, 13:03
Die Wikipedia weiss dankenswerterweise wie so oft weiter, und nennt sogar gleich mehrere Verfahren.

Edit: Dithering allein macht eine optimierte Palette aber noch lange nicht wett. Das ist eher ein optionaler nachgelagerter Schritt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Farbe herabsetzen

  Alt 6. Aug 2009, 16:22
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.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: Farbe herabsetzen

  Alt 6. Aug 2009, 19:16
Zitat von hadschi92:
Falls jemand noch andere Vorschläge hat, nur her damit.
Hallo,

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
  Mit Zitat antworten Zitat
hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Farbe herabsetzen

  Alt 11. Aug 2009, 09:47
So, ich hab das jetzt folgendermaßen gelöst:

Zuerst rechne ich den RGB-Wert in den HSV-Wert um. Der H-Wert beschreibt dabei den Farbton auf einer 360° Skala. Diese Skala habe ich dann in zwölf Bereiche Aufgeteilt, jede 30 Grad stehen dabei für eine Farbe. Dann muss man natürlich noch die Helligkeit und die Sättigung berücksichtigen und dadurch kann man dann noch die Farben Weiß, Grau und Schwarz definieren.

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.
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Farbe herabsetzen

  Alt 11. Aug 2009, 10:53
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz