I also generally want to take a bit more time with the dithering topic and explore other methods too, which hopefully I'll add in the future.
I also generally want to take a bit more time with the dithering topic and explore other methods too, which hopefully I'll add in the future.
On the note of matrix based error diffusion and exploring other methods: maybe you'd enjoy Victor Ostromoukhov's variable coefficient dithering paper[0]. Instead of one diffusion matrix, it has different diffusion matrix depending on the value of the input pixel, and the result is a much more blue noise-like dithering.
Given that his paper is almost a quarter century old I've been wondering if we could find better matrices using modern solver algorithms on today's hardware. I've never used a solver myself so wouldn't know how to set this up though.
Also, there's Zhou-Fang dithering, which takes Ostromoukhov's algorithm and introduces a little bit of randomness to remove artifacts[1]. I have JavaScript implementations for both algorithms in an Observable notebook if you want to try them out[2]. It's limited to 1-bit output though.
[0] https://perso.liris.cnrs.fr/victor.ostromoukhov/publications...
[1] https://dl.acm.org/doi/abs/10.1145/1201775.882289
[2] https://observablehq.com/@jobleonard/variable-coefficient-di...