Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.iso-c++ > #2022

Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus...

From Markus Schaaf <mschaaf@elaboris.de>
Newsgroups de.comp.lang.iso-c++
Subject Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus...
Date 2017-02-14 01:03 +0100
Organization A noiseless patient Spider
Message-ID <o7thdg$qt2$1@dont-email.me> (permalink)
References <o7n4v0$emd$1@news.albasani.net>

Show all headers | View raw


Am 11.02.2017 um 14:52 schrieb Jörg "Yadgar" Bleimann:

> Mittlerweile habe ich es tatsächlich geschafft, im Rahmen meines
> Kommandozeilen-Bildbearbeitungsprogramms "YIP" (Yadgar's Image Processor
> - ImageMagick für Arme...) so etwas wie Floyd-Steinberg-Rasterung zu
> programmieren, nach dem Artikel "Floyd-Steinberg" in der englischen
> Wikipedia... in Pseudocode wird der Algorithmus dort so dargestellt:
>
> for each y from top to bottom
>    for each x from left to right
>       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
>
> Bei mir in C++ sieht das so aus:
> [...]

> Das Programm kompiliert problemlos (bis auf ein paar Warnungen wegen nur
> in C++11 verfügbarer Funktionen), es gibt auch keinen Laufzeitfehler...
> aber wenn ich mir die gerasterte Bilddatei (von RGB nach
> 1-bit-Schwarzweiß) ansehe, frage ich mich, was da falsch gelaufen ist -

Aus Deiner Unterhaltung mit Stefan entnehme ich, dass das Problem
wahrscheinlich folgendes ist: (Zitat Wikipedia)

"For optimal dithering, the counting of quantization errors should be in
sufficient accuracy to prevent rounding errors from affecting the result."

Ich würde also dazu raten, für pixel(x+1,y) und die Zeile
pixel(left..right+1,y+1) temporären Speicher mit Fließkommapräzision
vorzusehen, oder ein Festkommaformat mit Skalierungsfaktor 16. Man könnte
den Algorithmus auch abwandeln und statt "nach vorn zu speichern", "nach
hinten schauen".

MfG

Back to de.comp.lang.iso-c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Jörg "Yadgar" Bleimann <yazdegird@gmx.de> - 2017-02-11 14:52 +0100
  Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Stefan Reuther <stefan.news@arcor.de> - 2017-02-12 11:00 +0100
    Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Jörg "Yadgar" Bleimann <yazdegird@gmx.de> - 2017-02-12 21:43 +0100
    Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Jörg "Yadgar" Bleimann <yazdegird@gmx.de> - 2017-02-12 20:34 +0100
  Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Markus Schaaf <mschaaf@elaboris.de> - 2017-02-14 01:03 +0100
    Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Jörg "Yadgar" Bleimann <yazdegird@gmx.de> - 2017-02-14 11:36 +0100

csiph-web