Ordered Dither
← GL Stippling | ● | GL Screen Door →
Ordered Dithering: Darstellung von Grauwerten als Bitmuster mit Schwellwertmaske
- Vorteil: Mehr Grauwerte perzeptiv darstellbar als Grauwerte zur Verfügung stehen
- Nachteil: Muster erkennbar, unscharfe ausgefranste Kanten
Die Dither-Punktmaske enthält alle möglichen Grauwerte in einer pseudo-zufälligen Ordnung. Wird die Dither-Punktmaske als sich wiederholendes Muster über den Bildschirm gelegt, so wird ein Punkt schwarz gezeichnet, wenn der zu zeichnende Grauwert den des entsprechenden Punktes der Dithermaske übersteigt.
Sei g Grauwert im Bereich 0–3 und die Dither-Punktmaske:
0 2 3 1
Damit lassen sich 5 Graustufen als Bitmuster erzeugen:
value | 0 1 2 3 4 ---------------------------- pattern | .. x. x. xx xx | .. .. .x .x xx
Sei g Grauwert von 0–15 und die Dither-Punktmaske:
0 8 2 10 12 4 14 6 3 11 1 9 15 7 13 5
Damit lassen sich 17 Graustufen als Bitmuster erzeugen.
Sei g Grauwert von 0–63 und die Dither-Punktmaske:
0 32 8 40 2 34 10 42 48 16 56 24 50 18 58 26 12 44 4 36 14 46 6 38 60 28 52 20 62 30 54 22 3 35 11 43 1 33 9 41 51 19 59 27 49 17 57 25 15 47 7 39 13 45 5 37 63 31 55 23 61 29 53 21
Damit lassen sich 65 Graustufen als Bitmuster erzeugen.
Generierung einer beliebigen Punktmaske:
static const int n=16;
int mask[n][n];
int m;
void gen(int x,int y,int s)
{
if (s<n)
{
gen(x,y,s*2);
gen(x+s,y+s,s*2);
gen(x+s,y,s*2);
gen(x,y+s,s*2);
}
else
mask[x][y]=m++;
}
int main()
{
m=0;
gen(0,0,1);
for (int y=0; y<n; y++)
{
for (int x=0; x<n; x++) printf("%3d ",mask[x][y]);
printf("\n");
}
return(0);
}
← GL Stippling | ● | GL Screen Door →