Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.iso-c++ > #2022
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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