![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Retro Computing Fan
![]() |
![]() Vor einigen Wochen habe ich in Basic endlich alle Error Diffusion routinen programmiert. Ist wirklich easy wenn man weiß wie es geht. Das Problem ist nur daß ich weiß wie ich in einen Graustufen-Bild Graustufenreduktion mittels error diffusion mache, aber bei Farbbildern komme ich nicht dahinter. Die indexpalette soll allerdings frei wählbar sein, daher kommt error diffusion auf allen RGB Ebenen einzeln nicht in frage, da man die inndexpalette dort nur nach bestimmten Kriterien aussuchen kann, und das Bild teilweise zu stark verrauscht ist, vor allem an Grauflächen, wo dann alle möglichen Farben auftauchen.
Bei Photoshop kann man angeblich eine indizierte Palette verwenden. Hat Jemand von Euch zufällig eine Ahnung wie man das bewerkstelligen kann? Entweder eine Beschreibung oder Basic-Routine? Bisherige Versuche brachten nichts ausser Verzweifelung ![]()
____________________________________
Meine guten PCs: ZX Spectrum: 48+,128+,+2,+2a,+3,SAM Coupé. Commodore: C64 I/II, VC20, A500 mit GVP A530 40Mhz,A2000 GVP 030/33 18MB RAM, A600HD,A1200. Atari: 130XE, 800XL, Mega STE 4MB, Mega ST4. MSX: Philips, Sony. |
![]() |
![]() |
![]() |
#2 |
Schwarzfußfrettchen
![]() Registriert seit: 28.01.2001
Beiträge: 2.071
|
![]() Die im Bild vorkommenden Farben "zählen" und deren Häufigkeit bestimmen sollte nicht allzu schwer sein. Dann kannst z.B. die Liste sortieren und die ersten 256 Einträge als Palette heranziehen.
(für Farbbilder) graustufen... RGB wert eines Punktes nehmen. (R+G+B)/3 = Grauwert. Somit hast dann ein Graustufenbild. Das kannst ja dann weiterverarbeiten.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\" http://www.dream.at/gizmo/bunny.gif Image is © 2001 Merle Sterndalsäg.. ähh... jäger ![]() |
![]() |
![]() |
![]() |
#3 |
Retro Computing Fan
![]() |
![]() @Sesa_Mina: Das hat aber nichts mit error diffusion zu tun, daß ist nur die Farbreduktion "Nearest Colour" auf 256 Farben mit optimierter Palette, und diese dient dann erst als Grundlage für optimierte Error Diffusion Palette.
Das mit Graustufen stimmt auch so nicht, die richtige Formel lautet: Grauwert=((r*3)+(g*5.9)+(b*1.1))/10 und ich habe ja geschrieben daß es absolut kein Problem ist bei Graustufenbildern Error diffusion auf eine optimierte Graustufenpalette zu machen, und daß das Problem bei Farbbildern liegt. Error diffusion (einfachster art): X 1 1 /2 Nimmt man den Wert X, dann die nächsthöhere graustufenpalette, die wir Z nennen. Punkt X wird zu Z umgewandelt, und (Z-X)/2*1 jeweils zu den Pixeln rechts, und unten dazuaddiert, dasselbe wiederholt man dann mit dem pixel rechts, u.s.w. bis das Bild durch ist. Aber wie gesagt, diese Methode funktioniert so nur bei Graustufenbildern. Bei Farbbildern versagt sie, und ich möchte das ja in Farbe dithern, und nicht nur in Graustufen.
____________________________________
Meine guten PCs: ZX Spectrum: 48+,128+,+2,+2a,+3,SAM Coupé. Commodore: C64 I/II, VC20, A500 mit GVP A530 40Mhz,A2000 GVP 030/33 18MB RAM, A600HD,A1200. Atari: 130XE, 800XL, Mega STE 4MB, Mega ST4. MSX: Philips, Sony. |
![]() |
![]() |
![]() |
#4 |
Schwarzfußfrettchen
![]() Registriert seit: 28.01.2001
Beiträge: 2.071
|
![]() Dann hilft vielleicht
http://kbt.narod.ru/docs/lgfp/ch05/05-01.html#Heading1 weiter. oder... http://citeseer.nj.nec.com/408810.html noch ein vorschlag.. den floyd steinberg dither algorithmus jeweils auf die r, g und b werte getrennt anwenden.. könnte funktionieren.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\" http://www.dream.at/gizmo/bunny.gif Image is © 2001 Merle Sterndalsäg.. ähh... jäger ![]() |
![]() |
![]() |
![]() |
#5 |
Retro Computing Fan
![]() |
![]() Hmm, hilft auch nicht wirklich weiter, aber es könnte mich dem Ziel näherbringen.
Bei getrenntem RGB Dithering (Habe ich auch schon gemacht) kann man nicht an optimierte Palette dithern, und Grauflächen erscheinen als eine ansammlung von bunten Pixeln, und genau das wäre bei optimiertem Colour-dithering nicht der Fall. Mal sehen, vielleicht lässt sich das Graustufen-dithering auf sortierte indizierte 24-bit Werte anwenden...
____________________________________
Meine guten PCs: ZX Spectrum: 48+,128+,+2,+2a,+3,SAM Coupé. Commodore: C64 I/II, VC20, A500 mit GVP A530 40Mhz,A2000 GVP 030/33 18MB RAM, A600HD,A1200. Atari: 130XE, 800XL, Mega STE 4MB, Mega ST4. MSX: Philips, Sony. |
![]() |
![]() |
![]() |
#6 |
Schwarzfußfrettchen
![]() Registriert seit: 28.01.2001
Beiträge: 2.071
|
![]()
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\" http://www.dream.at/gizmo/bunny.gif Image is © 2001 Merle Sterndalsäg.. ähh... jäger ![]() |
![]() |
![]() |
![]() |
#7 |
Retro Computing Fan
![]() |
![]() Das letztere ist zwar C code, trotzdem erkannte ich darin ein sogenanntes ordered dither.
Dieses Ordered Dither erlaubt auch keine optimierte Palette, d.h. wenn z.B bei einem RGB Wert rot auf 15 gesetzt wurde, wird es immer auf diese 15 gedither, auch wenn die anderen RGB Werte Rot 15 nicht beinhalten dürfen. Außerdem sieht Error diffusion wesentlich besser aus ![]()
____________________________________
Meine guten PCs: ZX Spectrum: 48+,128+,+2,+2a,+3,SAM Coupé. Commodore: C64 I/II, VC20, A500 mit GVP A530 40Mhz,A2000 GVP 030/33 18MB RAM, A600HD,A1200. Atari: 130XE, 800XL, Mega STE 4MB, Mega ST4. MSX: Philips, Sony. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|