Domanda

So che Floyd-Steinberg dithering algoritmo non può essere implementato con pixel shader, perché questo algoritmo è strettamente sequenziale. Ma forse esiste un certo altamente parallele dithering algoritmo che dalla resa visiva che di è simile a algoritmo di Floyd-Steinberg?

Quindi la domanda è - quali sono dithering algoritmi atti ad implementare il pixel shader (preferibilmente GLSL) e con qualità (molto) simile a Floyd-Steinberg dithering

A proposito. algoritmi multi-pass sono consentiti fino non ci sono più di 2 passaggi e CPU sovraccarico tra tali passaggi è piccolo.

Tutte le idee?

Modifica
ho bisogno di dithering da colori a 24 bit per colore 21-bit.
(Questo è - ho bisogno di convertire da 8 bit / canale da 7 bit / canale.)

Modifica 2 Forse non ho spiegato problema molto bene. Quindi cercherò di ampliare un po 'il problema esatto. Il problema è questo - considerare abbiamo questa immagine:
alt text
E abbiamo foto sopra, ma elaborati con algoritmo di dithering:
alt text
Ora, questa è la procedura che metterà alla prova la vostra dithering è un bene per me o no:
1. Caricare queste immagini in Photoshop come una foto con 2 strati. Pagina 2. Scegliere Livelli metodo di fusione "Difference". Pagina 3. Eseguire "Unisci visibili" operazione su livelli, per ottenere un solo strato. Pagina 4. Eseguire l'operazione => Immagine / Regolazioni / Equalizza
Dopo di che è necessario ottenere tale immagine:
alt text
Come si vede - pixel medie che era in monotona colore rosso non era dithering a tutti. dithering anche di zone dell'immagine sinistro e destro è un po 'diverso. Cercare di ricostruire dithering algoritmo con tale comportamento.

È stato utile?

Soluzione

Se si stanno riducendo da 8 bit a 7, si sta gettando via quasi nessuna informazione. Sei sicuro nemmeno bisogno di dithering?

Se avete bisogno di dithering, aggiungere rumore casuale e poi ritagliare, sarà bene un sacco per la vostra applicazione.

Altri suggerimenti

Si potrebbe utilizzare un ordinato dithering . E 'più grossa alla ricerca di Floyd-Steinberg, ma non c'è alcuna dipendenza tra i pixel.

Modifica Dal momento che si sta rimuovendo solo un singolo bit, questo diventa quasi banale. Il principio alla base dither ordinato è di creare un modello che sollecita il soglia di transizione; in questo caso la polarizzazione sarà 0 o 1 e il modello sarà 2x2 pixel. Questi due cambiamenti insieme renderanno il modello molto meno odioso di quello in questo articolo Wikipedia -. Si potrebbe anche come meglio di Floyd-Steinberg

Ecco alcuni pseudo-codice:

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

Modifica 2: Ecco il mio risultato differenza, come meglio che posso fare. Senza sapere come mappare i valori a 7 bit di nuovo a 8 bit che sono in grado di fare meglio.

alt text

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top