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

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

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

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

## Αλγόριθμος

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

### Δημιουργία ιστογράμματος

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

:Σύνολο λειτουργιών φλόγας: \begin{cases}
F_1(x,y), \quad p_1 \\
F_2(x,y), \quad p_2 \\
\dots \\
F_n(x,y), \quad p_n
\end{cases}

Σε κάθε επανάληψη, επιλέξτε μία από τις παραπάνω συναρτήσεις όπου η πιθανότητα να επιλεγεί η *F<sub>j</sub>* είναι *p<sub>j</sub>*. Στη συνέχεια, υπολογίζεται η επόμενη επανάληψη του *P* με την εφαρμογή του *F<sub>j</sub>* στο *(P.x,P.y)*.

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

:F_j(x,y) = \sum_{V_k \in Variations} w_k \cdot V_k(a_j x + b_j y +c_j,d_j x + e_j y +f_j)

όπου η παράμετρος *w<sub>k</sub>* ονομάζεται βάρος της μεταβολής *V<sub>k</sub>*. Ο Ντρέιβς προτείνει  ότι όλα τα w_k:s πρέπει να είναι μη αρνητικά και να έχουν άθροισμα ένα, αλλά εφαρμογές όπως το Apophysis δεν επιβάλλουν αυτόν τον περιορισμό.

Οι συναρτήσεις *V<sub>k</sub>* είναι ένα σύνολο προκαθορισμένων συναρτήσεων. Ακολουθούν μερικά παραδείγματα.

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

Το χρώμα *P.c* του σημείου αναμειγνύεται με το χρώμα που σχετίζεται με την τελευταία εφαρμοζόμενη συνάρτηση *F<sub>j</sub>*:

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

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


```cpp
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)* στην τελική εικόνα, κάντε τους ακόλουθους υπολογισμούς:


```cpp
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 είναι αργή.

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


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


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

## Εκτίμηση πυκνότητας

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

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

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

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

## Δείτε επίσης
*Σύνολο Μάντελμπροτ
*Σύνολο Julia
*Οικοδομήσιμο Σύμπαν

## Παραπομπές


## Εξωτερικοί σύνδεσμοι

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

 
 

Κατηγορία:Φράκταλ
Κατηγορία:Μαθηματική λογική
Κατηγορία:Φιλοσοφία των μαθηματικών
Κατηγορία:Ιστορία των Μαθηματικών