3 ms·
Curious to see whether more recent dithering approaches would produce better results. They don't even have to be more resource hungry than the classic Bayer or
by vanderZwan 2y ago
Curious to see whether more recent dithering approaches would produce better results. They don't even have to be more resource hungry than the classic Bayer or Floyd-Steinberg dithers!
Interleaved Gradient Noise[0][1][2] comes to mind as an alternative to Bayer, and it can even be approximated quite well with just 8-bit operations! Basically, use the following function to determine your threshold based on pixel position: (x, y) => (142 * x + 79 * y) & 255
And for error diffusion, there are the Ostromoukhov and Zhou-Fang dithering algorithms[3][4], which I also have an JavaScript implementation of on Observable, so you can try it live[5].
[0] http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare http://www.iryoku.com/next-generation-post-processing-in-cal...
[1] https://bartwronski.com/2016/10/30/dithering-part-three-real-world-2d-quantization-dithering/ https://bartwronski.com/2016/10/30/dithering-part-three-real...
[2] https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/ https://blog.demofox.org/2022/01/01/interleaved-gradient-noi...
[3] https://perso.liris.cnrs.fr/victor.ostromoukhov/publications/publications_abstracts.html#SIGGRAPH01_VarcoeffED https://perso.liris.cnrs.fr/victor.ostromoukhov/publications...
[4] https://dl.acm.org/doi/abs/10.1145/1201775.882289 https://dl.acm.org/doi/abs/10.1145/1201775.882289
[5] https://observablehq.com/@jobleonard/variable-coefficient-dithering https://observablehq.com/@jobleonard/variable-coefficient-di...
- alex-a-soto 2y agoThank you for the recommendations! We'll look into them.