Zum Inhalt springen

Floyd-Steinberg-Algorithmus

aus Wikipedia, der freien Enzyklopädie
Datei:Michelangelo's David - Floyd-Steinberg.png
Schwarz-Weiß-Bild, das mit dem Floyd-Steinberg-Algorithmus bearbeitet wurde

Der Floyd-Steinberg-Algorithmus ist ein erstmals 1976 von Robert W. Floyd und Louis Steinberg veröffentlichter Dithering-Algorithmus. In der Bildbearbeitung findet er häufig Einsatz, um die Farbtiefe eines Bildes zu verringern (zum Beispiel beim Abspeichern einer GIF-Datei) ohne dabei den ursprünglichen Farbeindruck vollständig zu verlieren. Der Algorithmus arbeitet nach dem Fehlerdiffusionsverfahren (error diffusion), d. h. der bei der Quantisierung auftretende Fehler (die Differenz zwischen Ausgangswert und quantisiertem Wert) eines jeden Pixels wird nach einem festen Schema auf die umliegenden Pixel verteilt. Dadurch erreicht der Algorithmus eine bessere Detailgenauigkeit als Ordered-Dither-Verfahren mit einer starren Maske. Der Fehler jedes Pixels P wird anteilig nach dem folgenden Schema auf die umliegenden Pixel verteilt:

P 716{{{3}}}|{{#if:16|716|{{#if:7|17|⁄}}}}}}
316{{{3}}}|{{#if:16|316|{{#if:3|13|⁄}}}}}} 516{{{3}}}|{{#if:16|516|{{#if:5|15|⁄}}}}}} 116{{{3}}}|{{#if:16|116|{{#if:1|11|⁄}}}}}}

Mit dieser Verteilung kann der Algorithmus ohne separaten Puffer die gesamte Eingabe in einem einzigen Durchlauf abarbeiten. Bereits verarbeitete Pixel werden nicht geändert, während noch abzuarbeitende Pixel entsprechend den auftretenden Quantisierungsfehlern beeinflusst werden.

In Pseudocode formuliert:

for each y
   for each x
      oldpixel        := pixel[x][y]
      newpixel        := find_closest_palette_color (oldpixel)
      pixel[x][y]     := newpixel
      quant_error     := oldpixel - newpixel
      pixel[x+1][y  ] := pixel[x+1][y  ] + quant_error * 7 / 16
      pixel[x-1][y+1] := pixel[x-1][y+1] + quant_error * 3 / 16
      pixel[x  ][y+1] := pixel[x  ][y+1] + quant_error * 5 / 16
      pixel[x+1][y+1] := pixel[x+1][y+1] + quant_error * 1 / 16

Die Diffusionskoeffizienten haben die Eigenschaft, dass im Falle mehrerer Pixel, die genau in der Mitte zwischen den zwei nächstgelegenen Farben der Zielpalette liegen, ein schachbrettartiges Muster entsteht. Ein Schwarz-Weiß-Dithering einer zu 50 Prozent grauen Fläche ergäbe demnach ein richtiges Schachbrett-Muster.

<templatestyles src="Mehrere Bilder/styles.css" />

{{#if: |
{{{Kopfzeile}}}

}}{{#ifeq: | vertical

|
[[Datei:{{#if: Dithering example undithered.png
                       | Dithering example undithered.png
                       | Vorlage:Platzhalterbild/file
}}|{{#if: 200 | 200 | 150 }}px{{#if: | |alt={{{Alt1}}} }}{{#if: | |class={{{Class1}}} }}{{#if: | |{{{Beschreibung1}}} }}]]
{{#if: Vorlage:Mehrere Bilder/Align |
{{{Untertitel1}}}
}}
[[Datei:{{#if: Dithering example undithered 16color.png
                       | Dithering example undithered 16color.png
                       | Vorlage:Platzhalterbild/file
}}|{{#if: 200 | 200 | 150 }}px{{#if: | |alt={{{Alt2}}} }}{{#if: | |class={{{Class2}}} }}{{#if: | |{{{Beschreibung2}}} }}]]
{{#if: Vorlage:Mehrere Bilder/Align |
{{{Untertitel2}}}
}}
{{#if: Dithering example dithered 16color.png |
      }}{{#if: 
|
[[Datei:{{{Bild4}}}|{{#if: 200 | 200 | 150 }}px{{#if: | |alt={{{Alt4}}} }}{{#if: | |class={{{Class4}}} }}{{#if: | |{{{Beschreibung4}}} }}]]
{{#if: Vorlage:Mehrere Bilder/Align |
{{{Untertitel4}}}
}}
      }}{{#if: 
|
[[Datei:{{{Bild5}}}|{{#if: 200 | 200 | 150 }}px{{#if: | |alt={{{Alt5}}} }}{{#if: | |class={{{Class5}}} }}{{#if: | |{{{Beschreibung5}}} }}]]
{{#if: Vorlage:Mehrere Bilder/Align |
{{{Untertitel5}}}
}}
      }}
|
[[Datei:{{#if: Dithering example undithered.png
                     | Dithering example undithered.png
                     | Vorlage:Platzhalterbild/file
}}|{{#if: 200 | 200 | {{#if: | {{{Breite1}}} | 150 }} }}px{{#if: | |alt={{{Alt1}}} }}{{#if: | |class={{{Class1}}} }}{{#if: | |{{{Beschreibung1}}} }}]]
{{#if:
                 |
                 | {{#if: Vorlage:Mehrere Bilder/Align
|
{{{Untertitel1}}}
                   }}
}}
[[Datei:{{#if: Dithering example undithered 16color.png
                      | Dithering example undithered 16color.png
                      | Vorlage:Platzhalterbild/file
}}|{{#if: 200 | 200 | {{#if: | {{{Breite2}}} | 150 }} }}px{{#if: | |alt={{{Alt2}}} }}{{#if: | |class={{{Class2}}} }}{{#if: | |{{{Beschreibung2}}} }}]]
{{#if:
                 |
                 | {{#if: Vorlage:Mehrere Bilder/Align
|
{{{Untertitel2}}}
                   }}
}}
{{#if: Dithering example dithered 16color.png |
{{#if:
                     |
                     | {{#if: Vorlage:Mehrere Bilder/Align
|
{{{Untertitel3}}}
                       }}
}}
      }}{{#if: 
|
[[Datei:{{{Bild4}}}|{{#if: 200 | 200 | {{#if: | {{{Breite4}}} | 150 }} }}px{{#if: | |alt={{{Alt4}}} }}{{#if: | |class={{{Class4}}} }}{{#if: | |{{{Beschreibung4}}} }}]]
{{#if:
                     |
                     | {{#if: Vorlage:Mehrere Bilder/Align
|
{{{Untertitel4}}}
                       }}
}}
      }}{{#if: 
|
[[Datei:{{{Bild5}}}|{{#if: 200 | 200 | {{#if: | {{{Breite5}}} | 150 }} }}px{{#if: | |alt={{{Alt5}}} }}{{#if: | |class={{{Class5}}} }}{{#if: | |{{{Beschreibung5}}} }}]]
{{#if:
                     |
                     | {{#if: Vorlage:Mehrere Bilder/Align
|
{{{Untertitel5}}}
                       }}
}}
}}
  }}

{{#ifeq: | vertical

 |
 | {{#if: 
| {{#if: Dithering example dithered 16color.png |
       }}{{#if: 
|
       }}{{#if: 
|
       }}
   }}

}}

{{#if: Originalbild (links) konvertiert in 16 Farben: einmal ohne (Mitte) und mit Floyd-Steinberg-Dithering (rechts). Siehe insbesondere die Farbverläufe am Hals und den Ohren.

|
Originalbild (links) konvertiert in 16 Farben: einmal ohne (Mitte) und mit Floyd-Steinberg-Dithering (rechts). Siehe insbesondere die Farbverläufe am Hals und den Ohren.
}}

{{#if: {{#invoke:Expr|TemplateBooland}}

    |
    | {{#ifeq: 0 | 0
        | 
      }}
  }}

Siehe auch