Wat je kunt proberen
- Ga naar de volgende pixel en volg bron + inkomende fout → gekozen waarde.
- Vergelijk Floyd–Steinberg met Atkinson en bekijk daarna een pixel aan de rechter- of onderrand.
Waar je op kunt letten: De volgende beslissing bevat eerdere fractionele fouten. Floyd–Steinberg geeft 100% door via zijn stencil; Atkinson 75%, en bestemmingen buiten het beeld ontvangen niets.
Zo werkt het
Bij scannen van links naar rechts gaat 7/16 naar rechts, 3/16 linksonder, 5/16 naar beneden en 1/16 rechtsonder. De volgende beslissing gebruikt bron plus opgebouwde fout. Getekende fractionele tussenwaarden voorkomen vertekening door te vroeg afronden.
De methode is causaal: één pixel kan latere beslissingen beïnvloeden. Scanvolgorde en randen tellen daarom mee. Atkinson vergelijkt goed: zes gewichten van 1/8 tellen op tot 3/4 en geven een andere balans tussen detail en toon.
Gebruik het in het Lab
Gebruik Floyd–Steinberg voor gedetailleerde paletreductie en beoordeel of de diffusietextuur het beeld helpt. Probeer Atkinson voor een hardere toonscheiding.
Grenzen & verschillen
Onafhankelijke RGB-diffusie kan meer totaalkleuren geven dan het aantal niveaus per kanaal. Gebruik Geïndexeerd palet voor een strikt totaalpalet.
Verdieping
Het Error Diffusion-algoritme
Floyd-Steinberg-dithering werkt door elke pixel van links naar rechts en van boven naar beneden te verwerken. Wanneer een pixel wordt gekwantiseerd naar de dichtstbijzijnde beschikbare paletkleur, wordt de kwantisatiefout (het verschil tussen origineel en gekwantiseerd) verdeeld over vier naburige, nog niet verwerkte pixels.
Floyd-Steinberg-gewichten
Foutverdelingsgewichten: → rechts: 7/16 ↙ linksonder: 3/16 ↓ onder: 5/16 ↘ rechtsonder: 1/16 Deze gewichten tellen exact op tot 1,0, waardoor de totale beeldhelderheid behouden blijft.
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
const old = pixels[y][x];
const new_ = nearestPaletteColor(old);
pixels[y][x] = new_;
const err = old - new_;
pixels[y][x+1] += err * 7/16;
pixels[y+1][x-1] += err * 3/16;
pixels[y+1][x] += err * 5/16;
pixels[y+1][x+1] += err * 1/16;
}
}Waarom het werkt
Het verdelingspatroon creëert organische, ruisachtige patronen die het menselijk oog waarneemt als vloeiende overgangen. Het cruciale inzicht is dat fout nooit verloren gaat — hij wordt altijd doorgeschoven naar nog niet verwerkte pixels, zodat de algehele helderheid en kleur van gebieden behouden blijft, zelfs met een piepklein palet.
Esthetische toepassingen
Veel gebruikt in vroege computergrafiek (Mac OS, Game Boy, krantenprint), wordt Floyd-Steinberg-dithering nu gewaardeerd in algoritmische kunst vanwege het vermogen om rijke texturen uit beperkte paletten. Gecombineerd met een zorgvuldige paletkeuze levert het een kenmerkende retro-esthetiek op die zowel nostalgisch als visueel opvallend is.
Voor een meer uniforme look kun je Bayer (ordered) dithering gebruiken. Voor organische texturen: Floyd-Steinberg. Voor meer artistieke controle: Atkinson dithering — het verspreidt slechts 6/8 van de fout, wat zorgt voor resultaten met hoger contrast.
Artikelen
Verwante kunstwerken
Verwante Lab-categorieën
Bronnen & naslag
Gids bijgewerkt
