Ga naar hoofdinhoud
BVDART Logo
← Alle gidsenDithering & paletten

Vectorquantisatie en paletclusters

Vectorquantisatie vervangt veel vectoren door een kleinere verzameling vertegenwoordigers. Een kleurpalet kan zo’n compacte verzameling zijn.

Wissel toewijzingen en centrumupdates af

Wijs punten toe en verplaats vertegenwoordigersRGB-doorsnede · B = 96
Kleurmonsters verbonden met hun toegewezen zwaartepuntμ1μ2μ3R →G ↑
Toewijzing aan dichtstbijzijnde centrum
μⱼ = (1 / Nⱼ) Σ xᵢHet gemiddelde minimaliseert de gekwadrateerde afstand voor de huidige groep. De volgende toewijzingsstap laat punten van groep wisselen.

De gekleurde achtergrond toont de huidige dichtstbijzijnde-centrumregio’s. Lijnen tonen de bewaarde toewijzingen; direct na verplaatsing kunnen ze dus verschillen.

Gekwadrateerde fout in dit 0–100-vlak32867.11
Gemiddelde-updates0
Vertegenwoordigers3 / 45

Het afwisselen van beide stappen verhoogt deze gekwadrateerde-afstandsfout nooit. Verschillende begincentra kunnen in verschillende lokale optima eindigen. Lege groepen behouden hun centrum. Een centrum handmatig verplaatsen herstart de oefening.

Verplaats centra naar groepsgemiddelden en wijs monsters opnieuw toe in drie rondes; houd daarna het resultaat vast. Opnieuw afspelen initialiseert na convergentie een nieuwe benadering. Gebruik een regelaar om het over te nemen.

Wat je kunt proberen
  1. Verplaats vertegenwoordigers naar hun groepsgemiddelden en wijs de monsters daarna opnieuw toe.
  2. Kies een vertegenwoordiger en verplaats zijn R- of G-coördinaat voor een ander beginpunt.
Open in het Lab ↗

Waar je op kunt letten: Elke Lloyd-stap behoudt of verlaagt de gekwadrateerde fout. Na een gemiddelde-update kunnen bewaarde lijnen tijdelijk afwijken van de nieuwe dichtstbijzijnde-centrumregio’s.

Zo werkt het

Elke kleur krijgt de dichtstbijzijnde vertegenwoordiger. Bij een k-means-achtige stap verplaatst elke vertegenwoordiger zich naar het gemiddelde van zijn toegewezen kleuren. Herhaalde toewijzing en bijwerking verlagen de gekwadrateerde afstand totdat de centra of toewijzingen stabiel blijven.

Afstandsruimte, startpunten en weging beïnvloeden de uitkomst. Hier blijft blauw op 96; de grafiek toont exact het RGB-afstandsprobleem in een tweekanaals doorsnede. Dit is een leerzame Lloyd-iteratie, los van median-cut, populariteit en uniforme paletten in het Lab.

Gebruik het in het Lab

Gebruik dit model om reconstructiefout door paletreductie te begrijpen. Een representatieve kleur hoeft niet in de bron voor te komen. Vergelijk dat met het geïndexeerde palet in het Lab.

Grenzen & verschillen

K-means kan in een lokaal optimum eindigen. Minimale RGB-fout garandeert niet dat elk perceptueel belangrijk accent behouden blijft.

Verdieping

Vectorquantisatie is het proces waarbij een grote verzameling vectoren wordt opgedeeld in groepen (clusters), die elk worden vertegenwoordigd door één enkel centroid. In de context van kleur is elke pixel een 3D-vector (R, G, B), en vectorquantisatie reduceert miljoenen unieke kleuren tot een kleine, representatieve palet.

K-Means Clustering

Het meest gebruikte algoritme voor vectorquantisatie is K-means. Het werkt als volgt:

  1. K initiële centroids kiezen (bijv. willekeurig of via K-means++)
  2. Elke pixel toewijzen aan het dichtstbijzijnde centroid (met behulp van de Euclidische afstand)
  3. Elk centroid herberekenen als het gemiddelde van de eraan toegewezen pixels
  4. Stap 2–3 herhalen tot convergentie (de centroids bewegen niet meer)

Median Cut-alternatief

Median cut is een deterministisch alternatief dat de kleurruimte recursief splitst langs zijn langste as. Het levert exact 2ⁿ kleuren op en neigt ertoe meer paletentries toe te wijzen aan gebieden in het beeld met grotere kleurvariatie.

Onze aanpak: Exact + Gegroepeerd

In plaats van K-means te gebruiken, hanteert onze paletextractie een tweelaagse strategie. Voor geïndexeerde afbeeldingen (≤ 256 unieke kleuren) halen we het exacte palet eruit. Voor RGB-afbeeldingen met duizenden kleuren gebruiken we agglomeratieve groepering: pixels samenvoegen op basis van Euclidische afstand en de 64 meest dominante kleuren behouden. Dit voorkomt de afhankelijkheid van K-means van willekeurige initialisatie en levert consistente, deterministische resultaten op.

// Simplified grouping approach
function groupColors(
  colors: Map<string, number>,
  maxColors: number,
  threshold: number,
): string[] {
  // Sort by frequency (most common first)
  // Merge colors within `threshold` Euclidean distance
  // Return top `maxColors` representatives
}
typescript

Belangrijkste inzicht

Vectorquantisatie is de theoretische basis achter GIF, PNG-paletmodi en elke bewerking die kleuren “reduceert tot N kleuren”. Of je nu K-means, median cut of agglomeratieve groepering gebruikt, het doel blijft hetzelfde: de data weergeven met minder vectoren, terwijl de fout minimaal blijft.

Verwante Lab-categorieën

Bronnen & naslag

Gids bijgewerkt