Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 21.05.04 13:25 
Ein wichtiger Teil meines aktuellen Projektes besteht darin, ein Bild (in der Regel 24Bit Farbtiefe) auf 24 vorgegebene Farben zu reduzieren. Der erste Ansatz war, einfach für jeden Pixel die nächstbeste Farbe aus meiner Palette zu bestimmen. Das is natürlich Murks, und so bin ich auf Dithering gestoßen. Ich verwende zur Zeit das Floyd-Steinberg Dithering
ausblenden Quelltext
1:
2:
3:
Floyd-Steinberg-Dithering-Maske:
  X 7
1 5 3
wobei X der aktuell betrachtete Pixel ist und die Zahlen angeben, zu welchen Anteilen der Fehler auf die anderen Pixel verteilt wird. (Z.B. kommt auf den Pixel rechts daneben 7/16 des Fehlers, bevor für diesen die nächstbeste Farbe gesucht wird)
Den Quellcode poste ich hier nicht, da alles wunderbar funzt. Allerdings ist das Ergebnis für meine Zwecke unbrachbar, da zu viele "Einzelpixel" entstehen, d.h. es entstehen keine kleinen zusammenhängenden Gebiete (so 2-3Pixel derselben Farbe am Stück würden reichen). Zoomt mal da rein (geditherter Ausschnitt von der Erde), dann wird hoffentlich klar, was ich meine.
user defined image


Kennt jemand nen anderen Dithering-Algorithmus, der dann wohl etwas schlechter "dithert", aber dafür nicht so stark "pixelt"? Ansonsten muss ich n Stück zurückgehen, und mir ne andere Filtemaske zurechbasteln...
Bin für jeden Tip dankbar.

_________________
We are, we were and will not be.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 21.05.04 14:39 
Hallo
hier ist was lesenwertes:
www.efg2.com/Lab/Lib...rithms.htm#Dithering

insbesondere das von lee cocker, hier sind ziemlich viele erklärt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 21.05.04 20:06 
hmm...die seite hatte ich auch schon gefunden. Aber beim 2. Mal hab ich mir die Textdateien nochmal durchgelesen, und da eine Variante von "nächste Farbe nehmen" gefunden: Bestimme die zwei nächsten Farben und wähle aus denen per Zufall eine aus. Ist leider sehr langsam, da mehr berechnet werden muss (Zufi nicht 50-50, sondern davon abhängig, wie weit die beiden Farben vom Originalpixel entfernt sind). Alle Dithering-Masken, die ich bisher ausprobiert habe, pixeln zu stark und sind unbrauchbar (dann muss man so viele Ministeck-Steinchen zerschneiden, und das mag ich nicht...)
Muss mal sehn, wie ich da weiterkomme. Evtl muss ich die Farbauswahl nochmal überarbeiten. Nur mit Pytagoras is das nicht das Wahre. Besser wird wohl sein, wenn ich schon im Vorfeld Farbton etc untersuche und nur die vom Ton her passenden Farben zulasse..

_________________
We are, we were and will not be.