PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fraktale


Kopernikus
12. March 2005, 17:44
Angeregt durch http://forum.gleitz.info/showthread.php?t=21152 hab ich ein Programm geschrieben, das ein Bild auf Selbstähnlichkeiten untersucht, einen fraktalen Code dazu generiert und diesen wieder decodiert. Was eigentlich wichtig wäre, ich aber noch nicht eingebaut habe, ist ein Dateiformat, in dem der fraktale Code abgespeichert wird, aber das kommt bald.

Dieses Programm ist (noch) nicht wirklich praktisch einsetzbar, sondern diente mir in erster Linie dazu, etwas Übung im C++ programmieren zu bekommen.

Sollte jemand zu viel Zeit haben und es ausprobieren, würde es mich freuen, wenn etwas Feedback käme. Wer weiß, vielleicht entwickelt es sich noch in Richtung Video...


Viele Grüße Kopernikus

P.S. Ich bin ab morgen im Urlaub, und deshalb nicht oft online, also nicht wundern, wenn ich nicht sofort antworte



Features:
*kostenlos
*schnell im Vergleich zur ersten Version (die brauchte ~20 min für 256x256 Graustufenbild)
*unterstützt das 8-bit Graustufen RAW Bildformat (nützlich dabei: IrfanView)
*Decodiert in (fast) beliebige Auflösung
*einstellbare Blockgröße
*verschiedene weitere Qualität-vs-Geschwindigkeit-Parameter
*experimenteller einstufiger Quadtree Modus

Known Bugs:
*fehler bei nichtquadratischen Bildern (deshalb nicht erlaubt)

Todo:
*Bugfixes
*Export des fraktalen Codes in Datei
*verschiedene Optimierungen und weitere Funktionen
*Erweiterung für Farbbildern
*Erweiterung für Video
*Optimierungen

Viel Spass damit

LigH
12. March 2005, 17:48
Quadratische Graustufenbilder im Raw-Format... so was müsste Terragen doch exportieren! ;) (Da bleiben wir gleich bei Fraktalen.)

Brother John
13. March 2005, 17:24
Interessant. Das Progrämmchen taugt doch schon bestens, um damit zu spielen, was ich gerade getan habe. Testbild war ein 160x160-Ausschnitt aus einem gerenderten Bild (stark Jpeg-komprimiert).
Die Testbilder habe ich mal angehängt. Es ist eigentlich ein 7-Zip-Archiv, bitte umbenennen!

Die Standardeinstellung führt zu klar sichtbarer Blockbildung. Senken von bsize und encthres hilft dagegen. Bei bsize=2 und encthres=0 sieht das Ergebnis schon sehr ordentlich aus. Ich konnte da nur noch schwer einen Unterschied zum Original erkennen.

Zoom erzeugt mit dieser Kommandozeile »kfc test_in.raw 160 test_out.raw 4 2 2 0« einige gleiche Fehlermeldungen »Fehler beim Decodieren, ungültiger Pixelwert«. Im Bild sieht man auch deutliche Artefakte. Mein Fehler?
Jedenfalls kann man im Vergleich zur per lanczos gezoomten Version schon sehen, wieviel Zoom-Potenzial in den Fraktalen steckt. Die fraktale Version ist deutlich schärfer, was besonders um die Augenbrauen und Lippen deutlich wird. Im hochqualitativen extremen Zooming von Einzelbildern sehe ich auch ein prädestiniertes Anwendungsgebiet für Fraktale.

Selur
15. March 2005, 17:16
Yup, fraktale sind schon nett im Datenerfinden nur leider brauchts halt zuviel CPUPower,... für Videoverarbeitung ists wahrscheinlich erstmal uninteressant. :(

Cu Selur

Kopernikus
15. March 2005, 18:17
BrotherJohn:

Nein, nicht dein Fehler, ungueltiger Pixelwert bedeutet, dass ein Pixel aufgetaucht ist, dass ausserhalb der 8bit liegt, die im raw abgespeichert werden.

Kopernikus
31. March 2005, 15:29
So, hier nochmal eine etwas überarbeitete Version, der Quadtreemodus funktioniert jetzt, sie sollte noch ein stückchen flotter sein als die alte Version, hinter den Kulissen hat sich einiges getan:



Kopernikus Fractal Coder Ver 0.0.1.7

Features:
*kostenlos
*schnell im Vergleich zur ersten Version (~20 min für 256x256 Graustufenbild)
*unterstützt das 8-bit Graustufen RAW Bildformat (nützlich dabei: IrfanView)
*Decodiert in (fast) beliebige Auflösung
*einstellbare Blockgröße
*verschiedene weitere Qualität-vs-Geschwindigkeit-Parameter
*dreistufiger Quadtree Modus

Known Bugs:
*fehler bei nichtquadratischen Bildern (deshalb nicht erlaubt)

Todo:
*Bugfixes
*Export des fraktalen Codes in Datei
*verschiedene Optimierungen und weitere Funktionen
*Erweiterung für Farbbildern
*Erweiterung für Video
*Optimierungen

Syntax:

kfc <Qpfad> <Dim> <Zpfad> [Zoom] [Bsize] [QT1] [QT2]

<Qpfad> Pfad zum Quellbild im 8bit RAW Format (z.B. von IrfanView)
<Dim> Dimension des quadratischen Quellbilds, muss durch 2*Bsize teilbar sein
<Zpfad> Pfad zum Zielbild im 8bit RAW Format, Ordner muessen existieren
[Zoom] (opt, Std: 1) Faktor, um den das Bild skaliert decodiert verden soll
[Bsize] (opt, Std: 8) Groesse der Bildbloecke, die zur Analyse verwendet werden;
[QT1] (opt, Std: inaktiv) zwischen 75-100 kleinere Werte, bessere Quali
[QT2] (opt, Std: inaktiv) zwischen 25-50 kleinere Werte, bessere Quali

Angabe von QF1 aktiviert den QuadModus, BSize muss dann durch 4 teilbar sein


Changelog:

0.0.1.5
erstes Release

0.0.1.7
Bugfixes
QuadModus aktiviert
Optimierungen

Kopernikus
31. March 2005, 18:57
Und hier noch ein paar Bildvergleiche:

Bild 1 Resize (von Irfanview)
Bild 2 Resample (Lanczos)
Bild 3 Fraktaler Zoom

4-fache Vergrößerung von Lenna 256x256

Achtung insgesamt 1,4MB Bilder!

LigH
31. March 2005, 19:06
Ich nenne den Effekt "zerknittertes Papier"... :D

Für Version 1 wäre sicher auch "PointResize()" in AviSynth möglich gewesen.

ac-chan
2. April 2005, 17:15
@Kopernikus:
Kannst du mal noch eine Wavelets basierte vergrösserung hinzufühgen? Dem wird ja auch nachgesagt, gut für die Scalierbarkeit und vergrößerung zu sein.

Selur
2. April 2005, 18:03
@Kopernikus: wie sieht das Ganze denn bei einer nicht verrauschten Quelle aus?

Kopernikus
3. April 2005, 02:02
@AC-Chan: Es gibt einige Techniken, die auf fraktalen Wavelet-Trees basieren, aber darüber hab ich bisher noch nicht so viel gelesen, mal sehen.

@Selur: Probiers am besten aus. Aber die Blöcke sind bei größeren Vergrößerungsfaktoren meistens trotzdem sichtbar, aber z.B. mit einem Deblockingfilter kann man da ein bissel was reissen. Es gibt auch einige Techniken, die speziell zum zoomen geeignet sind, da sieht das dann nochmal ein Stückchen besser aus.

ac-chan
4. April 2005, 00:00
Ich habe noch einige interesannte Testbilder gefunden. Besonders die Aerials sollten sich ja eigentlich gut in Fraktale zerlegen lassen, oder?

http://sipi.usc.edu/database/