Μορφοκλασματική φλόγα

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μια μορφoκλασματική φλόγα που δημιουργήθηκε από το πρόγραμμα Electric Sheep.
Μορφoκλασματική φλόγα που δημιουργήθηκε με το προγραμμα Apophysis.

Οι μορφοκλασματικές φλόγες είναι ένα μέλος της κλάσης του συστήματος επαναλαμβανόμενων συναρτήσεων[1] των Φράκταλ που δημιουργήθηκαν από τον Σκοτ Ντρέιβς το 1992.[2] Ο κώδικας open-source του Ντρέιβς μεταφέρθηκε στη συνέχεια στο λογισμικό γραφικών Adobe After Effects. [3] και μεταφράστηκε στο πρόγραμμα Apophysis[4] για την επεξεργασία φλόγες φράκταλ[2].

Οι μορφοκλασματικές φλόγες διαφέρουν από τα συνηθισμένα συστήματα επαναλαμβανόμενων συναρτήσεων σε τρία σημεία:

  • Οι μη γραμμικές συναρτήσεις επαναλαμβάνονται εκτός από τους συγγενείς μετασχηματισμούς.
  • Εμφάνιση πυκνότητας λογαρίθμου αντί γραμμικής ή δυαδικής (μια μορφή χαρτογράφησης τόνου)
  • Χρωματισμός με βάση τη δομή (δηλαδή με βάση την αναδρομική διαδρομή που ακολουθείται) αντί για μονόχρωμη ή με βάση την πυκνότητα.

Η χαρτογράφηση τόνων και ο χρωματισμός έχουν σχεδιαστεί για να εμφανίζουν όσο το δυνατόν περισσότερες λεπτομέρειες του φράκταλ, γεγονός που γενικά οδηγεί σε μια πιο αισθητικά ευχάριστη εικόνα.

Αλγόριθμος[Επεξεργασία | επεξεργασία κώδικα]

Ο αλγόριθμος αποτελείται από δύο βήματα: τη δημιουργία ενός ιστογράμματος και στη συνέχεια την απόδοση του ιστογράμματος.

Δημιουργία ιστογράμματος[Επεξεργασία | επεξεργασία κώδικα]

Μορφoκλασματική φλόγα.

Αρχικά, επαναλαμβάνει κανείς ένα σύνολο συναρτήσεων, ξεκινώντας από ένα τυχαία επιλεγμένο σημείο P = (P.x,P.y,P.c), όπου η τρίτη συντεταγμένη δείχνει το τρέχον χρώμα του σημείου.

Σύνολο λειτουργιών φλόγας:

Σε κάθε επανάληψη, επιλέξτε μία από τις παραπάνω συναρτήσεις όπου η πιθανότητα να επιλεγεί η Fj είναι pj. Στη συνέχεια, υπολογίζεται η επόμενη επανάληψη του P με την εφαρμογή του Fj στο (P.x,P.y).

Κάθε μεμονωμένη συνάρτηση έχει την ακόλουθη μορφή:

όπου η παράμετρος wk ονομάζεται βάρος της μεταβολής Vk. Ο Ντρέιβς προτείνει [5] ότι όλα τα :s πρέπει να είναι μη αρνητικά και να έχουν άθροισμα ένα, αλλά εφαρμογές όπως το Apophysis δεν επιβάλλουν αυτόν τον περιορισμό.

Οι συναρτήσεις Vk είναι ένα σύνολο προκαθορισμένων συναρτήσεων. Ακολουθούν μερικά παραδείγματα[5].

  • V0(x,y) = (x,y) (Γραμμική)
  • V1(x,y) = (sin x,sin y) (Ημιτονοειδές )
  • V2(x,y) = (x,y)/(x2+y2) (Σφαιρική)

Το χρώμα P.c του σημείου αναμειγνύεται με το χρώμα που σχετίζεται με την τελευταία εφαρμοζόμενη συνάρτηση Fj:

P.c := (P.c + (Fj)color) / 2

Μετά από κάθε επανάληψη, ενημερώνεται το ιστόγραμμα στο σημείο που αντιστοιχεί στο (P.x,P.y). Αυτό επιτυγχάνεται ως εξής:

histogram[x][y][FREQUENCY] := histogram[x][y][FREQUENCY]+1
histogram[x][y][COLOR] := (histogram[x][y][COLOR] + P.c)/2

Επομένως, τα χρώματα στην εικόνα θα αντικατοπτρίζουν τις λειτουργίες που χρησιμοποιήθηκαν για να φτάσουμε σε αυτό το τμήμα της εικόνας.

Απόδοση μιας εικόνας[Επεξεργασία | επεξεργασία κώδικα]

Για να αυξηθεί η ποιότητα της εικόνας, μπορεί κανείς να χρησιμοποιήσει τη μέθοδο της υπερδειγματοληψίας για να μειώσει το θόρυβο. Αυτό απαιτεί τη δημιουργία ενός ιστογράμματος μεγαλύτερου από την εικόνα, έτσι ώστε κάθε εικονοστοιχείο να έχει πολλαπλά σημεία δεδομένων για να αντλήσει από αυτά. Παραδείγματος χάριν, δημιουργήστε ένα ιστόγραμμα με 300×300 κελιά προκειμένου να σχεδιάσετε μια εικόνα 100×100 px- κάθε εικονοστοιχείο θα χρησιμοποιήσει μια ομάδα 3×3 κουτιών ιστογράμματος για να υπολογίσει την τιμή του.

Για κάθε εικονοστοιχείο (x,y) στην τελική εικόνα, κάντε τους ακόλουθους υπολογισμούς:

frequency_avg[x][y]  := average_of_histogram_cells_frequency(x,y);
color_avg[x][y] := average_of_histogram_cells_color(x,y);

alpha[x][y] := log(frequency_avg[x][y]) / log(frequency_max);  
//frequency_max είναι ο μέγιστος αριθμός επαναλήψεων που έπληξαν ένα κελί στο ιστόγραμμα.

final_pixel_color[x][y] := color_avg[x][y] * alpha[x][y]^(1/gamma); //gamma is a value greater than 1.

Ο παραπάνω αλγόριθμος χρησιμοποιεί διόρθωση γάμμα για να κάνει τα χρώματα να φαίνονται πιο φωτεινά. Αυτό εφαρμόζεται για παράδειγμα στο λογισμικό Apophysis.

Για να αυξηθεί ακόμη περισσότερο η ποιότητα, μπορεί κανείς να χρησιμοποιήσει διόρθωση γάμμα σε κάθε μεμονωμένο κανάλι χρώματος, αλλά αυτό είναι ένας πολύ βαρύς υπολογισμός, καθώς η συνάρτηση log είναι αργή.

Ένας απλουστευμένος αλγόριθμος θα ήταν να αφήσουμε τη φωτεινότητα να εξαρτάται γραμμικά από τη συχνότητα:

final_pixel_color[x][y] := color_avg[x][y] * frequency_avg[x][y]/frequency_max;

Ωστόσο αυτό θα έκανε ορισμένα τμήματα του φράκταλ να χάσουν τις λεπτομέρειες, κάτι που δεν είναι επιθυμητό.[5]

Εκτίμηση πυκνότητας[Επεξεργασία | επεξεργασία κώδικα]

Ο αλγόριθμος φλόγας είναι σαν μια προσομοίωση Monte Carlo, με την ποιότητα της φλόγας να είναι ευθέως ανάλογη με τον αριθμό των επαναλήψεων της προσομοίωσης. Ο θόρυβος που προκύπτει από αυτή τη στοχαστική δειγματοληψία μπορεί να μειωθεί με θόλωση της εικόνας, ώστε να έχουμε ένα πιο ομαλό αποτέλεσμα σε λιγότερο χρόνο. Ωστόσο, δεν θέλουμε να χάσουμε την ανάλυση στα τμήματα της εικόνας που λαμβάνουν πολλά δείγματα και έτσι έχουν λίγο θόρυβο.

Αυτό το πρόβλημα μπορεί να επιλυθεί με προσαρμοστική εκτίμηση πυκνότητας για να αυξηθεί η ποιότητα της εικόνας, διατηρώντας παράλληλα τους χρόνους απόδοσης στο ελάχιστο. Το FLAM3[6] χρησιμοποιεί μια απλοποίηση των μεθόδων που παρουσιάζονται στο *Προσαρμοστικό φιλτράρισμα για προοδευτική απόδοση εικόνας Monte Carlo*, μια εργασία που παρουσιάστηκε στο Winter School of Computer Graphics (WSCG - Χειμερινό σχολείο γραφικών υπολογιστών) 2000 από τους Φρανκ Σούικενς και Υβ Γουίλεμς. Η ιδέα είναι να μεταβάλλεται το πλάτος του φίλτρου αντιστρόφως ανάλογα με τον αριθμό των διαθέσιμων δειγμάτων.

Ως αποτέλεσμα, οι περιοχές με λίγα δείγματα και υψηλό θόρυβο θολώνουν και εξομαλύνονται, αλλά οι περιοχές με πολλά δείγματα και χαμηλό θόρυβο μένουν ανεπηρέαστες.[7]

Δεν χρησιμοποιούν όλες οι υλοποιήσεις της Φλόγας την εκτίμηση πυκνότητας.

Δείτε επίσης[Επεξεργασία | επεξεργασία κώδικα]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. Mitchell Whitelaw (2004). Metacreation: Art and Artificial Life. MIT Press. pp 155.
  2. 2,0 2,1 «Information about Apophysis software». Αρχειοθετήθηκε από το πρωτότυπο στις 13 Σεπτεμβρίου 2008. Ανακτήθηκε στις 11 Μαρτίου 2008. 
  3. Chris Gehman and Steve Reinke (2005). The Sharpest Point: Animation at the End of Cinema. YYZ Books. pp 269.
  4. «Apophysis». SourceForge (στα Αγγλικά). 26 Απριλίου 2013. Ανακτήθηκε στις 27 Αυγούστου 2023. 
  5. 5,0 5,1 5,2 «The Fractal Flame Algorithm» (PDF).  (22.5 MB)
  6. «FLAM3». flam3.com. Ανακτήθηκε στις 27 Αυγούστου 2023. 
  7. Βλέπε https://github.com/scottdraves/flam3/wiki/Density-Estimation.

Εξωτερικοί σύνδεσμοι[Επεξεργασία | επεξεργασία κώδικα]

  • Apophysis, ένας επεξεργαστής φλόγας φρακτάλ open-source για Microsoft Windows και Macintosh.
  • Chaotica, ένας εμπορικός επεξεργαστής fractal που υποστηρίζει το flam3, το Apophysis και περαιτέρω γενικεύσεις.
  • Electric Sheep, μια προφύλαξη οθόνης που δημιούργησε ο εφευρέτης των φλογών φράκταλ, η οποία τις αποδίδει και τις εμφανίζει μέσω κατανεμημένου υπολογισμού.
  • GIMP, ένα πρόγραμμα επεξεργασίας εικόνων ελεύθερου λογισμικού, πολλαπλών λειτουργικών συστημάτων, το οποίο μπορεί να παράγει φλόγες φράκταλ.