lunedì 29 agosto 2011

R is a cool image editor #2: Dithering algorithms

Ho implementato in R alcuni algoritmi per il "dithering" delle immagini (un buon articolo introduttivo è disponibile su WikiPedia):
- Floyd-Steinberg dithering
- Bill Atkinson dithering
- Jarvis-Judice-Ninke dithering
- Sierra 2-4a dithering filter
- Stucki dithering
- Burkes dithering
- Sierra2 dithering
- Sierra3 dithering

Per ciascun algoritmo, sono presenti due funzioni. La prima consiste nel processo di convolution, mentre la seconda applica la prima funzione all'immagine caricata.
Per usare le immagini, ho usato la library rimage (per un breve commento, potete leggere il mio articolo precedente qui). Questi algoritmi sono alquanto lenti, perchè non ho implementato alcun metodo per velocizzare il convolution; convertendo il codice in linguaggio C, da usare in R, il processo diventa nettamente più rapido.
Inoltre (per questione di rapidità) queste funzioni possono essere applicate solo su immagini in scala di grigi, ma possono essere facilmente ampliate per immagini in RGB.
La prima funzione è commentata; le altre sono molto simili.




library(rimage)
y <- read.jpeg("valve.jpg")
plot(y)






Floyd-Steinberg dithering




plot(normalize(grey2FSdith(rgb2grey(y))))







Bill Atkinson dithering




plot(normalize(grey2ATKdith(rgb2grey(y))))







Jarvis-Judice-Ninke dithering




plot(normalize(grey2JJNdith(rgb2grey(y))))







Sierra 2-4a dithering filter




plot(normalize(grey2S24adith(rgb2grey(y))))







Stucki dithering




plot(normalize(grey2Stucki(rgb2grey(y))))







Burkes dithering




plot(normalize(grey2Burkes(rgb2grey(y))))







Sierra2 dithering




plot(normalize(grey2Sierra2(rgb2grey(y))))







Sierra3 dithering




plot(normalize(grey2Sierra3(rgb2grey(y))))



Nessun commento:

Posta un commento