Frage

Ich weiß, dass Floyd-Steinberg Algorithmus Dithering nicht sein kann mit pixel-Shader implementiert, da dieser Algorithmus ist streng sequentiell. Aber vielleicht gibt es higly einig parallel Algorithmus Dithering, die durch das es visuelle Ausgabe zu Algorithmus Floyd-Steinberg ähnlich ist?

Die Frage ist also - Was sind Dithering-Algorithmen, die geeignet sind, auf Pixel-Shader zu implementieren (vorzugsweise GLSL) und mit der Ausgabequalität (sehr) ähnlich wie Floyd-Steinberg-Dithering

BTW. Multi-Pass-Algorithmen erlaubt werden, bis es nicht mehr als 2 Pässe und CPU-Overhead zwischen den Durchgängen sind klein.

Irgendwelche Ideen?

EDIT:
I von 24-Bit-Farbe auf 21-Bit-Farbe muß Dithering.
(Das ist - ich muss convert von 8 Bit / Kanal auf 7 Bits / Kanal).

EDIT 2 Vielleicht habe ich nicht Problem sehr gut erklärt. Also werde ich versuchen, ein bisschen auf genaues Problem zu erweitern. Problem ist dies - zu prüfen, haben wir dieses Bild:
alt text
Und wir haben oben Bild, aber mit Dithering-Algorithmus verarbeitet:
alt text
Nun ist dies Verfahren, das Ihr Dithering testen ist gut für mich oder nicht:
1. Laden Sie diese Bilder in Photoshop als ein Bild mit zwei Schichten.
2. Wählen Sie Ebene Blending-Modus auf „Difference“.
3. Führen Sie „Merge Visible“ Betrieb auf Schichten, nur eine Schicht zu erhalten.
4. Führen Betrieb => Bild / Anpassen / Ausgleichs-
Danach können Sie solche Bild bekommen müssen:
alt text
Wie Sie sehen - mittlere Pixel, die in monotone rote Farbe war, überhaupt nicht gezittert. Auch von linken und rechten Bildzonen Dithering ist ein bisschen anders. Versuchen Sie zu rekonstruieren Algorithmus mit einem solchen Verhalten Dithering.

War es hilfreich?

Lösung

Wenn Sie von 8 Bits auf 7 reduzieren, Sie werfen so gut wie keine Informationen entfernt. Sind Sie sicher, dass Sie selbst müssen Zitter?

Wenn Sie Zitter benötigen, fügen zufälliges Rauschen und dann Clip, wird es viel gut für Ihre Anwendung sein.

Andere Tipps

könnten Sie ein geordneten Zitter . Es ist gröber suchen als Floyd-Steinberg, aber es gibt keine Abhängigkeit zwischen den Pixeln.

Edit: Da bist du nur ein einziges Bit zu entfernen, wird diese fast trivial. Das Prinzip hinter der geordneten Zitter ist ein Muster, das spannt den Übergangsschwellenwert zu erzeugen; in diesem Fall wird die Vorspannung 0 oder 1 sein, und das Muster 2x2 Pixel sein. Diese beiden Änderungen werden zusammen machen das Muster viel weniger anstößig als die im Wikipedia-Artikel -. Man könnte sogar, wie es besser als Floyd-Steinberg

Hier einige Pseudo-Code:

bias = (X xor Y) and 0x01
value = pixel + bias
if value > 255: value = 255
pixel = value and 0x7e

Edit 2: Hier ist mein Unterschied Ergebnis, so gut wie ich kann. Ohne zu wissen, wie Sie Ihre 7-Bit-Werte wieder auf 8 Bit Karte Ich bin nicht in der Lage, besser zu tun.

alt text

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top