Είναι μια υλοποίηση αυτού.fractal image compression αλγόριθμοςδημοσιεύτηκε στο IEEE κατά τις ημέρες του κολεγίου μου
Η εφαρμογή χρησιμοποιεί τη βιβλιοθήκη βαθμιαίου τριγωνισμού Delaunay, η οποία χρησιμοποιείται επίσης στοΕφαρμογή μορφοποίησης
Αλγόριθμος υψηλού επιπέδου:
- Συμπίεση:
- Η συμπίεση fractal εστιάζει στην αποθήκευση των σχέσεων μεταξύ των περιοχών εικόνας και όχι των πραγματικών τιμών εικονοστοιχείων, συγκεκριμένα μεταξύ των τριγώνων σε αυτή την περίπτωση.
- Η εικόνα χωρίζεται σε ένα τριγωνικό πλέγμα που αποτελείται από πολλαπλά τρίγωνα, σχηματίζοντας έναν τριγωνικό τομέα.
- Η εικόνα υποδιαιρείται σε ένα νέο σύνολο τριγωνισμών με μεγαλύτερα τρίγωνα που έχουν οριστεί για το codebook.
- Οι τριγωνισμοί είναι δυναμικοί, και ο αλγόριθμος διάσπασης και συγχώνευσης εφαρμόζεται με βάση τη διακύμανση των εικονοστοιχείων του τριγώνου.
- Μόλις καθοριστεί ο τριγωνισμός για το codebook, επιλέγονται τα πιο αντιπροσωπευτικά τρίγωνα 2n για να σχηματίσουν το codebook. Η τιμή του n επηρεάζει σημαντικά το χρόνο συμπίεσης ενώ έχει μικρή επίδραση στην αναλογία συμπίεσης και στην ποιότητα που επιτυγχάνεται.
- Για κάθε τρίγωνο τομέα, η βέλτιστη αντιστοίχιση με ένα τρίγωνο από το codebook επιδιώκεται χρησιμοποιώντας ένα κριτήριο ελάχιστου μέσου τετραγωνικού σφάλματος (MSE)
- Η βέλτιστη χαρτογράφηση μεταξύ των τριγώνων βρίσκεται κάνοντας συνδυασμούς των:
- Μεταθέσεις των κορυφών (6 πιθανότητες)
- Προσδιορισμός αντιστάθμισμα για τη μέση τιμή
- Η εύρεση ενός συντελεστή κλίμακας μεταξύ 0 και 1, ο οποίος εφαρμόζεται στην απόκλιση από τη μέση τιμή. Αυτός ο συντελεστής κλίμακας πρέπει να παραμείνει μεταξύ 0 και 1 για να αποφευχθεί η απόκλιση κατά τη διάρκεια της επαναληπτικής διαδικασίας αποσυμπίεσης.
Επιπλέον, αυτές οι παράμετροι θα πρέπει να ποσοτικοποιούνται χρησιμοποιώντας περιορισμένο αριθμό bit για να διασφαλιστεί ότι τόσο ο χρόνος συμπίεσης όσο και ο λόγος είναι λογικός και σύμφωνος με την επιθυμητή ποιότητα.
- Οι αποθηκευμένες πληροφορίες στο συμπιεσμένο αρχείο για κάθε κανάλι:
- Οι πληροφορίες για την αναπαραγωγή των δύο τριγωνισμών:
- Τρίγωνα που χωρίζονται σε κάθε επανάληψη
- Στίχοι που αφαιρέθηκαν ως αποτέλεσμα της συγχώνευσης (μετά την ολοκλήρωση των διασπασμένων επαναλήψεων)
- Η επιλογή των 2n τριγώνων του κωδικοδείκτη
- Η βέλτιστη χαρτογράφηση κάθε τριγώνου τομέα:
- Ποιο τρίγωνο codebook χρησιμοποιεί για να χαρτογραφήσει (n bits)
- Η βέλτιστη μετάθεση κορυφών (6 συνδυασμοί, 3 bit)
- όφσετ (οι συγγραφείς δείχνουν ότι το όφσετ αντιπροσωπεύεται αποτελεσματικά με 6 bit)
- Κλίμακα (οι συγγραφείς δείχνουν ότι η κλίμακα αντιπροσωπεύεται αποτελεσματικά με 6 bit)
- Αποσυμπίεση (για κάθε κανάλι):
- Τα τρίγωνα των δύο τριγωνισμών λαμβάνονται.
- Τα τρίγωνα του κωδικοδείκτη λαμβάνονται.
- Η διαδικασία αυτή επαναλαμβάνεται μέχρι να επιτευχθεί σύγκλιση:
- Η χαρτογράφηση όλων των τριγώνων τομέα στις βέλτιστες αλληλογραφίες τους με τα τρίγωνα κωδικοδείκτη
Αφού κέρδισα ένα μεταπτυχιακό δίπλωμα στην Τεχνητή Νοημοσύνη, οραματίζομαι να καινοτομήσω στο πώς να αντλήσω τα πιο σημαντικά τρίγωνα για το codebook εφαρμόζοντας K-medoids.
Δεν είμαι σίγουρος αν η καινοτομία θα βελτιώσει ή θα εμποδίσει τον αλγόριθμο, αλλά με γλιτώνει από την ανάγκη να τον προγραμματίσω ο ίδιος, κάτι που αρχικά φαινόταν περίπλοκο.
Η επεξεργασία εικόνας χωρίζεται σε κανάλια, τυπικά RGB.
Χρησιμοποιεί πολυεπεξεργασία, με ένα νήμα αφιερωμένο σε κάθε κανάλι.
Με την έκδοση v1.1, έχει προστεθεί ένας αναγνώστης συμβατός με το πρότυπο ImageIO.
Επομένως, μπορείτε να ανοίξετε μια συμπιεσμένη εικόνα (.dfc) με την εφαρμογή απλά κάνοντας:
BufferedImage image = ImageIO.read("image.dfc");