Ga naar hoofdinhoud
BVDART Logo

Dithering: illusies creëren met wiskunde

⊘ Deep Dive• 6 min leestijd
ditheringfloyd-steinbergpixel-artcolor-depth
Als je maar een handvol kleuren hebt, kan slimme pixelplaatsing het oog laten denken dat het er duizenden zijn. Een deep dive in error-diffusion dithering en de algoritmes achter deze illusie.

Het probleem: te weinig kleuren

Stel je hebt een foto met 16,7 miljoen mogelijke kleuren, maar je scherm — of je artistieke beperking — staat er maar 16 toe. Hoe overbrug je dat gat zonder de essentie van het beeld te verliezen? Dit is de fundamentele uitdaging die dithering oplost.

Vroege computergrafics hadden voortdurend met dit probleem te maken. De Commodore 64 had 16 kleuren. De Game Boy had 4 groentinten. Toch maakten kunstenaars en engineers op deze machines beelden met verrassende diepte en realisme. Hun geheime wapen was dithering.

Wat is dithering?

Dithering is het bewust toevoegen vanruis— zorgvuldig berekende ruis — om de visuele impact van kwantisatie te verminderen. Wanneer je een beeld terugbrengt van miljoenen kleuren naar een handvol, worden de overgangen tussen tinten harde, gebande stappen. Dithering strooit pixels van beschikbare kleuren in patronen die op afstand optisch versmelten tot de ontbrekende tussentinten.

Dit is geen willekeurige ruis. De beste dithering-algoritmes zijndeterministischen wiskundig elegant, en verdelen de kwantisatiefout in precieze verhoudingen over naburige pixels.

Ordered dithering: de rasteraanpak

De eenvoudigste ditheringmethode gebruikt een drempelmatrix — een kleine matrix van waarden (meestal 2×2, 4×4 of 8×8) die bepaalt wanneer een pixel naar boven of naar beneden wordt afgerond. De klassieke Bayer-matrix zorgt voor het kenmerkende kruispatroon dat je ziet in retro console‑graphics.

Ordered dithering is snel — elke pixel wordt onafhankelijk verwerkt — maar de patronen die ontstaan kunnen visueel erg opvallend zijn, vooral in gradients. Die regelmaat is zowel de charme (in pixel art) als de beperking (in fotografie).

Ruil tinten voor patronen

Gewenste witte dekking37.6%
Opgeslagen palet0 / 255
Harde drempel: 0.0% wit
Harde drempel0.0% witGemiddelde fout: -96.00 / 255
Geordend / Bayer: 37.5% wit
Geordend / Bayer37.5% witGemiddelde fout: -0.38 / 255
Floyd–Steinberg: 37.4% wit
Floyd–Steinberg37.4% witGemiddelde fout: -0.62 / 255
Willekeurig met seed: 36.2% wit
Willekeurig met seed36.2% witGemiddelde fout: -3.61 / 255
mean = (Nwhite / 1024) × 255Alle vier vlakken krijgen dezelfde constante toon. Er zijn slechts twee opgeslagen waarden toegestaan. Hun ruimtelijke beslissingen veranderen zowel textuur als het gemiddelde van het eindige vlak.

Bayer herhaalt een drempeltegel van 4 × 4. Diffusie draagt fouten met teken over en verliest een deel aan de beeldrand. Het willekeurige vlak gebruikt een vaste seed, zodat toonverandering hetzelfde onderliggende toevalsveld onthult.

Doorloop één grijstoon bij vier binaire methoden en vergelijk textuur, dekking en gemiddelde fout. Gebruik een regelaar om het over te nemen.

Vergelijk drempelen, een geordend patroon en diffusie bij een gecontroleerde tint. Het patroon draagt de nuances die het palet niet kan opslaan.

Probeer het zelf
  1. Verplaats het gewenste grijsniveau terwijl alle vlakken dezelfde twee opgeslagen kleuren behouden.
  2. Schakel de weergave op afstand in en vergelijk textuur, witte dekking en gemiddelde fout.

Let op: Een harde drempel verliest tussentonen. Geordende, gediffundeerde en willekeurige beslissingen ruilen verschillende texturen en eindige-vlakfouten voor een beter gemiddelde.

Volledige uitleg Open in het Lab

Error Diffusion: Floyd-Steinberg en verder

In 1976 publiceerden Robert Floyd en Louis Steinberg een bedrieglijk eenvoudig algoritme. Voor elke pixel bereken je de kwantisatiefout (het verschil tussen de oorspronkelijke kleur en de dichtstbijzijnde beschikbare kleur). Vervolgens verspreid je die fout naar naburige pixels die nog niet zijn verwerkt, met behulp van specifieke verhoudingen:

7/16 naar de rechterbuur, 3/16 naar de pixel linksonder, 5/16 direct eronder en 1/16 naar rechtsonder. Voor een volledig stencil tellen deze fracties op tot 1. Aan een beeldrand kunnen bijdragen aan buren buiten het beeld worden weggegooid; behoud van de totale fout hangt dus ook af van de randafhandeling.

Het resultaat is voor fotografische beelden aanzienlijk beter dan ordered dithering. Error diffusion levert organisch ogende patronen op die de natuurlijke contouren van het beeld volgen, en zo vloeiende gradients creëren met grove paletten.

Volg de fout naar de volgende pixel

Volg de scan, één beslissing tegelijk10 / 48

Zwart-witte cellen zijn vastgelegd. Grijze cellen tonen de bron plus opgetelde fout; alleen hun voorbeeld wordt begrensd, terwijl berekeningen breuken met teken bewaren.

Stuur de fout naar toekomstige buren
Foutdiffusiestencil en bijdragen met tekene47.957/16+20.983/16+8.995/16+14.991/16+3.00

Vervaagde bestemmingen liggen buiten het beeld en ontvangen niets. Het stencil hoort bij een scan van links naar rechts.

112 + -64.05 = 47.95 → 0
e = 47.95 − 0 = 47.95
Totaal stencilgewicht100%
Foutverlies aan de rand0.00
Bewust niet doorgegeven0.00

Vervolg de scan tot de laatste pixel; volg de fout met teken naar latere buren. Opnieuw afspelen begint een nieuwe scan. Gebruik een regelaar om het over te nemen.

Volg stap voor stap de positieve of negatieve fout naar vier volgende buren. Bij de beeldrand vervallen bijdragen die buiten het beeld vallen.

Probeer het zelf
  1. Ga naar de volgende pixel en volg bron + inkomende fout → gekozen waarde.
  2. Vergelijk Floyd–Steinberg met Atkinson en bekijk daarna een pixel aan de rechter- of onderrand.

Let op: De volgende beslissing bevat eerdere fractionele fouten. Floyd–Steinberg geeft 100% door via zijn stencil; Atkinson 75%, en bestemmingen buiten het beeld ontvangen niets.

Volledige uitleg Open in het Lab

Dithering in de kleurkubus

Bij het ditheren van kleurenafbeeldingen werkt het algoritme gelijktijdig in drie dimensies. Elke pixel heeft een fout in rood, groen, en blauw, en elke foutcomponent wordt onafhankelijk verspreid. Dat betekent dat een pixel die “te rood” is, ervoor zorgt dat zijn buren iets minder rood worden, waardoor er een gebalanceerd gemiddelde in lokale regio’s ontstaat.

De keuze van kleurenpalet is net zo belangrijk als het dithering-algoritme. Een goed gekozen 16-kleurenpalet kan beter presteren dan een slecht gekozen 256-kleurenpalet, omdat de fout die het dithering-algoritme moet compenseren in perceptuele termen kleiner is.

Dithering als esthetische keuze

In algoritmische kunst is dithering niet alleen een technische noodzaak — het is een bewuste esthetische tool. De karakteristieke textuur van geditherde beelden roept nostalgie op naar de vroege computerkunst, terwijl de wiskundige precisie van error diffusion patronen creëert die tegelijk chaotisch en ordelijk zijn.

Veel van de werken in deze galerij gebruiken dithering als laatste compositing-stap, waarbij high-color renders worden teruggebracht naar beperkte paletten. Het resultaat zijn beelden waarbij elke pixel telt — waar de kijker kan inzoomen en op elk niveau bewuste, berekende plaatsing aantreft.

Probeer het zelf

Open in het Lab de Dither-effecten om Floyd–Steinberg, ordered dithering en andere methoden op een geïmporteerd beeld of gegenereerde ruis te vergelijken. Gebruik Geïndexeerd palet als je een vast totaal aantal kleuren nodig hebt; de ditheringregelaars beschrijven niveaus per kanaal.

Gerelateerde concepten

Gerelateerde artikelen

Gerelateerde kunstwerken

Verken gerelateerde secties

Meer over het werk: