ΠΑΡΑΡΤΗΜΑ   Γ

 

 

ΣΥΜΠΙΕΣΗ JPEG

 

Γενικά

 

Το JPEG (προφέρεται «τζέϊ-πεγκ») είναι ένας τυποποιημένος μηχανισμός συμπίεσης εικόνας, ο οποίος έχει πάρει το όνομα του από τα αρχικά της επιτροπής (Joint Photographic Experts Group) που έγραψε το πρότυπο.

Το JPEG είναι κατασκευασμένο για συμπίεση είτε εγχρώμων είτε ασπρόμαυρων εικόνων και δουλεύει πολύ καλά σε φωτογραφίες, εικόνες φυσικής τέχνης και παρόμοια είδη αλλά όχι τόσο καλά σε γραφή και απλά ή γραμμικά σχέδια.

Το JPEG είναι μια μέθοδος που έχει απώλειες κατά την συμπίεση της εικόνας, δηλαδή η αποσυμπιεσμένη εικόνα δεν είναι ακριβώς η ίδια με αυτή που είχαμε πριν τη συμπίεση. Παρόλα αυτά λόγω των περιορισμών της ανθρώπινης όρασης, κυρίως του ότι μια μικρή αλλαγή στα χρώματα γίνεται λιγότερο αντιληπτή από μια αντίστοιχη αλλαγή στην φωτεινότητα, οι διαφορές δεν γίνονται αντιληπτές με γυμνό μάτι. όμως αν μας ενδιαφέρει η λεπτομέρεια στα χρώματα, κυρίως στην περίπτωση που η αποσυμπιεσμένη εικόνα θα περάσει από μηχανήματα ανάλυσης εικόνας τότε η μέθοδος συμπίεσης JPEG δεν είναι συνιστώμενη. Υπάρχουν βέβαια άλλες μέθοδοι που έχουν λιγότερες απώλειες αλλά δεν έχουν τόσο υψηλό ποσοστό συμπίεσης (π.χ. TIFF, PPM,PNG κλπ.).

Το γεγονός ότι έχουμε απώλειες δεν πρέπει να μας κάνει να νομίζουμε ότι η μέθοδος συμπίεσης JPEG μειονεκτεί σε σχέση με άλλες, αφού δεν υπάρχει πρότυπο ψηφιακής εικόνας που να διατηρεί όλες τις ορατές πληροφορίες, ενώ σε σχέση με την GIF συμπίεση, η JPEG χάνει πολύ λιγότερες πληροφορίες. 

Μια ενδιαφέρουσα ιδιότητα της μεθόδου JPEG είναι ότι το ποσοστό απωλειών μπορεί να ρυθμιστεί παραμετρικά κατά την συμπίεση. Αυτό σημαίνει ότι ανάλογα με τις απαιτήσεις μας μπορούμε να «ανταλλάξουμε» την ποιότητα της εικόνας με το μέγεθος του αρχείου που την περιέχει. Έτσι, μπορούμε να δημιουργήσουμε πολύ μικρά αρχεία με τις εικόνες που θα χρησιμεύουν ως δείκτες για το τι περιέχουν τα αντίστοιχα αρχεία μεγάλου μεγέθους (και υψηλής ποιότητας) των εικόνων αυτών. Η χρήση της παραπάνω μεθόδου βρίσκει εφαρμογή σε WEB PAGES, όπου μια περίληψη ενός link σε εικόνα δίνεται για να αποφευχθεί άσκοπο downloading και χάσιμο χρόνου μετακίνησης μεταξύ διαφόρων PAGES.

Μια άλλη ενδιαφέρουσα ιδιότητα του JPEG είναι ότι οι αποκωδικοποιητές μπορούν να μειώσουν την ποιότητα της εικόνας σε αντάλλαγμα με την ταχύτητα αποκωδικοποίησης. Με αυτό το τρόπο μερικοί viewers πετυχαίνουν σημαντικές ταχύτητες προβολής εικόνων JPEG.

Το JPEG ορίζει έναν αλγόριθμο με απώλειες, με κατ’ επιλογή επεκτάσεις για βαθμιαία και ιεραρχική κωδικοποίηση. Επίσης υπάρχει και ένας τρόπος συμπίεσης χωρίς απώλειες που όμως δίνει συμπίεση μόνο κατά 50%, δηλαδή 12 bits ανά έγχρωμο pixel σε 24-bit εικόνα. Τα περισσότερα προγράμματα που κυκλοφορούν, δεν περιέχουν την συμπίεση χωρίς απώλειες.

 

 

 

Κανόνες Λειτουργίας του Αλγόριθμου Συμπίεσης JPEG

 

1.         Τροποποιούμε την εικόνα σε ένα κατάλληλο έγχρωμο χώρο. Για τις έγχρωμες εικόνες, το πιο συνηθισμένο είναι να θέλουμε να μετατρέψουμε από RGB (Red, Green, Blue) σε ένα χώρο που να υποστηρίζει φωτεινότητα και χρωματισμό, όπως οι YUV, YCbCR κ.α.

Η συνιστώσα της φωτεινότητας ορίζεται από το επίπεδο του γκρίζου που δίνεται στην εικόνα (μαύρο = σκοτεινό, άσπρο = φωτεινό) ενώ οι άλλοι άξονες είναι πληροφορίες για το χρώμα.

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

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

Δειγματολειπτούμε κάθε συστατικό ομαδοποιώντας pixels. Το συστατικό της φωτεινότητας παραμένει σε πλήρη ανάλυση ενώ τα χρωματικά συστατικά συνήθως μειώνονται κατά το μισό οριζόντια και κατά το μισό ή στην καλύτερη περίπτωση καθόλου κατά τον κατακόρυφο άξονα. Ανάλογα με την μείωση του κατακόρυφου άξονα έχουμε τις εξής ονομασίες δειγματοληψίας : 2h2v411) και 2h1v422). Αυτό το βήμα μειώνει το μέγεθος των δεδομένων κατά το 1/3, γεγονός που σημαίνει ότι χαρακτηρίζεται από μεγάλες απώλειες, παρόλα αυτά δεν παρατηρείται καμία μείωση της ποιότητας της εικόνας λόγω της αδυναμίας του ανθρώπινου ματιού να διακρίνει τις αλλαγές που έχουν συμβεί στο χρωματικό μέρος της εικόνας. Η παραπάνω διαδικασία δεν γίνεται στις ασπρόμαυρες εικόνες ή σε αυτές με διαβαθμίσεις του γκρίζου και αυτός είναι ο λόγος που οι έγχρωμες εικόνες μπορούν να συμπιεστούν περισσότερο από αυτές.

 

2.         Ομαδοποιούμε τις τιμές των pixels για κάθε συστατικό σε ομάδες των 8x8.Επεξεργαζόμαστε κάθε ομάδα με χρήση Διακριτού Συνημιτονοειδούς Μετασχηματισμού (ΔΣΜ), ο οποίος είναι συγγενής του μετασχηματισμού Fourier και έτσι παίρνουμε ένα χάρτη συχνοτήτων με στοιχεία ομάδες 8x8=64 στοιχείων. Με αυτό τον τρόπο έχουμε αριθμούς που αναπαριστούν την μέση τιμή σε κάθε ομάδα και επομένως, τις αλλαγές υψηλής συχνότητας στην ομάδα αυτή. Ο λόγος που το κάνουμε αυτό είναι για να μπορούμε να «πετάξουμε» τις πληροφορίες υψηλής συχνότητας, χωρίς να επηρεαστούν οι αντίστοιχες πληροφορίες χαμηλής συχνότητας. Τέλος, είναι χρήσιμο να γνωρίζουμε ότι ο μετασχηματισμός ΔΣΜ είναι αντιστρέψιμος με μόνη απώλεια το σφάλμα στρογγύλευσης.

 

3.         Σε κάθε ομάδα, χωρίζουμε κάθε ένα από τα 64 στοιχεία με μια ξεχωριστή συντεταγμένη κβαντοποίησης και στρογγυλοποιούμε τα αποτελέσματα σε ακεραίους. Εδώ γίνεται η βασική απώλεια πληροφορίας, ενώ όσο μεγαλύτερες επίπεδα κβαντοποίησης έχουμε, τόσο περισσότερη ποσότητα πληροφορίας χάνουμε. Ακόμα και αν ορίσουμε ως επίπεδο κβαντοποίησης το μικρότερο ακέραιο, δηλαδή το 1, θα χάνουμε ακόμα πληροφορίες γιατί τα αποτελέσματα που θα παίρνουμε από τον ΔΣΜ δεν θα είναι απαραίτητα ακέραιοι. Οι υψηλότερες συχνότητες κβαντοποιούνται πάντα με λιγότερη ακρίβεια (δηλαδή με μεγαλύτερα επίπεδα) από τις χαμηλές συχνότητες, αφού οι πρώτες είναι λιγότερο ορατές στο μάτι. Επίσης, τα δεδομένα για την φωτεινότητα κβαντοποιούνται ακριβέστερα από τα αντίστοιχα για το χρώμα, κάνοντας χρήση ξεχωριστών πινάκων κβαντοποίησης των 64 στοιχείων. Η ρύθμιση των πινάκων αυτών δεν έχει καθοριστεί ακόμα με ποιο τρόπο μπορεί να γίνει καλύτερα και αποτελεί ενεργό χώρο έρευνας. Οι περισσότεροι υπάρχοντες κωδικοποιητές χρησιμοποιούν απλή γραμμική κλιμάκωση των πινάκων που δίνονται ως παράδειγμα στο δεδομένο JPEG, ζητώντας από τον χρήστη μια ρύθμιση της ποιότητας για να αποφασίσει την πολλαπλασιαστική σταθερά της κλιμάκωσης. Αυτή η μέθοδος βρίσκει αρκετά καλή εφαρμογή για μεσαίες ποιότητες (δηλαδή αυτές που βρίσκονται κοντά στις δεδομένες τιμές των πινάκων-παραδειγμάτων που δίνονται) αλλά δεν προτείνονται για υψηλές ή χαμηλές ρυθμίσεις ποιότητας.

 

4.         Κωδικοποιούμε τις μειωμένες συντεταγμένες χρησιμοποιώντας κυρίως την μέθοδο Huffman και σπανιότερα την αριθμητική κωδικοποίηση. Αυτό το βήμα είναι χωρίς απώλειες οπότε δεν επηρεάζει την ποιότητα της εικόνας. Η αριθμητική κωδικοποίηση χρησιμοποιεί τον κώδικα Q που είχαμε δει σε προηγούμενη παράγραφο και ο οποίος είναι πατενταρισμένος. Έτσι η κωδικοποίηση με Huffman χρησιμοποιείται πιο συχνά για την αποφυγή πληρωμών για άδεια χρήσης του κώδικα Q. Η αριθμητική μέθοδος προσφέρει έτσι και αλλιώς μόλις 5% - 10% καλύτερη συμπίεση, ποσοστό που δεν είναι αρκετό για να προτιμηθεί από ένα ελεύθερο και δωρεάν τρόπο κωδικοποίησης.

 

5.         Σε ένα JPEG αρχείο, όλες οι παράμετροι της συμπίεσης συμπεριλαμβάνονται στη κεφαλή του αρχείου ώστε ο αποσυμπιεστής να μπορεί να αντιστρέψει την διαδικασία. Αυτοί οι παράμετροι περιέχουν τους πίνακες κβαντοποίησης και τους πίνακες κωδικοποίησης Huffman. Όμως οι πίνακες αυτοί είναι δεδομένοι και για τις πιο πολλές εφαρμογές δεν χρειάζεται να περιέχονται σε κάθε αρχείο εικόνας JPEG, οπότε μπορούμε να τους αφαιρέσουμε, τροποποιώντας την κεφαλή του αρχείου και σώζοντας έτσι αρκετές εκατοντάδες bytes. Η βασική προϋπόθεση για να γίνει αυτό είναι να γνωρίζει ο αποσυμπιεστής από πριν τους πίνακες που χρησιμοποίησε ο συμπιεστής και γι’ αυτό το βήμα αυτό είναι καλό να εφαρμόζεται μόνο όταν δουλεύουμε σε κλειστό σύστημα.

 

 

 

 

 

 

 

Αλγόριθμος Αποσυμπίεσης JPEG

 

Ο αλγόριθμος αποσυμπίεσης αντιστρέφει την διαδικασία : Ο αποσυμπιεστής πολλαπλασιάζει τις μειωμένες συντεταγμένες που βρίσκονται στον πίνακα κβαντοποίησης για να δημιουργήσει προσεγγιστικά τις συντεταγμένες του διακριτού Συνημιτονοειδούς μετασχηματισμού. Αφού όμως αυτές είναι μόνο προσεγγίσεις, οι επανακατασκευασμένες τιμές των pixels θα είναι και αυτές προσεγγιστικές, αλλά παρόλα αυτά τα σφάλματα αυτά δεν θα είναι ορατά για το ανθρώπινο μάτι. Εκτός αυτού, εάν ο αποσυμπιεστής είναι υψηλού επιπέδου, τότε θα προσθέσει από μόνος του μερικά βήματα για ομαλοποίηση, ώστε να μειωθούν οι ασυνέχειες μεταξύ των γειτονικών pixels.

 

 

Βασικά Πλεονεκτήματα Χρήσης JPEG

 

Η χρήση της μεθόδου συμπίεσης JPEG έχει τα εξής πλεονεκτήματα :

·        Τα αρχεία των συμπιεσμένων εικόνων μπορούν να γίνουν πολύ μικρά σε μέγεθος και έτσι γίνεται γρήγορη η μετάδοση τους μέσα από δίκτυα, όπως επίσης γίνεται πραγματοποιήσιμη η περιληπτική αρχειοθέτηση σε βιβλιοθήκες εικόνων. Μια μέση συμπίεση μετατρέπει μια έγχρωμη εικόνα μεγέθους 2 ΜΒ σε ένα αρχείο 100 ΚΒ δηλαδή συμπίεση 20 προς 1, ενώ η αντίστοιχη μέθοδος GIF προσφέρει συμπίεση της τάξεως του 5 προς 1.

·        Το JPEG αποθηκεύει την εικόνα σε 24 bits ανά pixel (σε 16 εκατομμύρια χρώματα), την στιγμή που η μέθοδος GIF μπορεί να αποθηκεύει μόνο σε 8 bits ανά pixel (σε 256 ή λιγότερα χρώματα). Έτσι με τις συνεχώς αναβαθμιζόμενες δυνατότητες σε hardware, οι υπολογιστές θα υιοθετήσουν ως νέο πρότυπο για προβολή εικόνων, αυτό που θα αξιοποιεί τις δυνατότητές τους αυτές στον μεγαλύτερο βαθμό.

·        Τέλος, η ανταλλαγή των αρχείων JPEG μεταξύ χρηστών με διαφορετικό hardware είναι πιο εύκολη από την αντίστοιχη με GIF γιατί δεν προδικάζει πόσα χρώματα θα χρησιμοποιήσει (βλέπε κβαντοποίηση χρωμάτων) και έτσι τα αρχεία αυτά είναι περισσότερο κατάλληλα για χρήση μέσω World Wide Web.

 

Το αντίτιμο σε αυτά τα πλεονεκτήματα του JPEG είναι ότι χρειάζεται περισσότερος χρόνος για να γίνει η αποκωδικοποίηση και η προβολή σε σχέση με τις άλλες μεθόδους. Όταν όμως πρόκειται να παρεμβληθούν δικτυακές ή τηλεφωνικές μεταδόσεις, τότε το κέρδος που έχουμε στην σχέση χρόνου μετάδοσης αρχείου / χρόνου αποσυμπίεσης εικόνας είναι μεγάλο. 

Ένα άλλο πρόβλημα που μπορούσε να εμφανιστεί σε κάποιον χρήστη ήταν η έλλειψη υποστήριξης του προτύπου JPEG από τον viewer που διέθετε, οπότε έπρεπε να κάνει μετατροπή σε άλλο πρότυπο για την προβολή της εικόνας, γεγονός που ισοδυναμούσε με περισσότερο χρόνο στη χρήση του JPEG. Με την εξάπλωση όμως του προτύπου αυτού και την ύπαρξη τόσων JPEG viewers, σήμερα αυτό το πρόβλημα τείνει να εξαλειφθεί.

Τέλος, ένα γενικότερο μειονέκτημα της συμπίεσης με απώλειες παρουσιάζεται όταν κάνουμε επανειλημμένες συμπιέσεις και αποσυμπιέσεις μίας εικόνας.

 

 

Επεκτάσεις του Βασικού JPEG

 

Βαθμιαία Κωδικοποίηση

 

Η βαθμιαία κωδικοποίηση έχει δημιουργηθεί για την υποστήριξη αναμετάδοσης εικόνων σε πραγματικό χρόνο. Επιτρέπει στις συντεταγμένες του ΔΣΜ να σταλθούν ξεχωριστά σε πολλαπλά «περάσματα» της εικόνας. Με κάθε πέρασμα ο αποκωδικοποιητής μπορεί να παράγει μια υψηλότερης ποιότητας εκδοχή της εικόνας, οπότε μια προεκδοχή της μπορεί να σταλθεί γρήγορα και να αποφασίσει ο χρήστης που την λαμβάνει εάν θέλει να την αφήσει να ολοκληρωθεί και να βελτιωθεί σε ποιότητα. Ο συνολικός χώρος που χρειάζεται είναι ο ίδιος με αυτόν που θα χρειαζόταν μια βασική JPEG εικόνα της ίδιας τελικής ποιότητας. Στην πράξη, μπορεί να χρειαστεί και λιγότερος ακόμα χώρος εάν χρησιμοποιηθεί ένας σταθερός πίνακας Huffman για κάθε πέρασμα, επειδή οι κωδικοί Huffman μπορούν να βελτιστοποιηθούν σε μια μικρότερη ποσότητα δεδομένων σε πολλαπλά περάσματα σε σχέση με την ποσότητα των δεδομένων του ενός περάσματος. Ο αποκωδικοποιητής πρέπει να εκτελέσει υποχρεωτικά ένα κύκλο για κάθε πέρασμα, δηλαδή να αντιστρέψει τον ΔΣΜ, να δειγματοληπτήσει, και να κάνει μετατροπή χρωμάτων και επιπλέον εάν χρειαστεί να κβαντοποιήσει χρώματα για 8-bit οθόνες.

Από τα παραπάνω καταλαβαίνουμε ότι η μέθοδος αυτή είναι εφαρμόσιμη μόνο εάν έχουμε γρήγορο αποκωδικοποιητή ή αργές γραμμές μετάδοσης. Μέχρι το 1995, το βαθμιαίο JPEG ήταν σπάνιο να χρησιμοποιηθεί, αλλά η χρήση του στις μέρες μας είναι πολύ διαδεδομένη λόγω των γρήγορων αποκωδικοποιητών που επιτρέπουν την εφαρμογή του με ταχύτητες της τάξεως μετάδοσης των modems που χρησιμοποιούμε.

 

Ιεραρχική Κωδικοποίηση

 

Η ιεραρχική κωδικοποίηση αναπαριστά μια εικόνα σε διαφορετικές αναλύσεις. Έτσι, μια ανάλυση της εικόνας που θέλουμε να επεξεργαστούμε θα μπορούσε να είναι 256 x 256, μια άλλη 512 x 512 και μια άλλη 1024 x 1024. Η κάθε ανάλυση κωδικοποιείται ως το σύνολο των διαφορών που έχει από την αμέσως χαμηλότερη της ανάλυση και επομένως δεν έχουμε άσκοπη επανάληψη δεδομένων που ήδη έχουμε λάβει με την προηγούμενη εκδοχή της εικόνας. Παρόλα αυτά, ο συνολικός χώρος που θα χρειαστούμε θα είναι πάλι μεγαλύτερος από αυτόν που θα χρειαζόμασταν για την αποθήκευση της εικόνας με την υψηλότερη ανάλυση από αυτές, εάν χρησιμοποιούσαμε την βασική κωδικοποίηση JPEG. Τέλος, η κάθε εικόνα της ιεραρχικής αλυσίδας μπορεί αν θέλουμε να κωδικοποιηθεί βαθμιαία, όπως είδαμε προηγουμένως, εάν το θελήσουμε. Αξίζει να σημειωθεί ότι η ιεραρχική κωδικοποίηση δεν είναι ευρέως διαδεδομένη προς το παρόν.

 

 

 

 

 

 

 

 

Τρίτο Μέρος του Προτύπου JPEG

 

Το τρίτο μέρος (part 3) του προτύπου JPEG, εγκρίθηκε τον Δεκέμβριο του 1995 και εισήγαγε αρκετές νέες προσθήκες και επεκτάσεις. Αυτή που είναι το πιθανότερο να γίνει πιο διαδεδομένη είναι η μεταβλητή κβαντοποίηση, η οποία επιτρέπει στον πίνακα κβαντοποίησης να κλιμακώνεται σε διαφορετικά επίπεδα, ανάλογα με τις ανάγκες της κάθε περιοχής της εικόνας. Με αυτό τον τρόπο, οι περισσότερο «σημαντικές» και «κρίσιμες» περιοχές της εικόνας μπορούν να κωδικοποιηθούν σε υψηλότερο βαθμό ποιότητας από ένα λιγότερο σημαντικό κομμάτι τη εικόνας. Το παραπάνω επιτυγχάνεται με την εισαγωγή ενός μέρους κώδικα στην ομάδα των ΔΣΜ συντεταγμένων, που λειτουργεί ως σηματοδότης για την κλιμάκωση του συντελεστή ποιότητας της περιοχής της εικόνας.

Μια άλλη προσθήκη που εισήγαγε το τρίτο μέρος του προτύπου είναι η επιλεκτική εκκαθάριση. Αυτό το χαρακτηριστικό, επιτρέπει σε ένα πέρασμα στο βαθμιαίο JPEG ή σε ένα στιγμιότυπο μιας ιεραρχικής διαδικασίας, να καλύπτει ένα μόνο μέρος της ολικής περιοχής της εικόνας. Αυτός είναι ένας εναλλακτικός τρόπος για επίλυση προβλημάτων μεταβαλλόμενης ποιότητας, αν και από ότι φαίνεται η μεταβλητή κβαντοποίηση καλύπτει τα τυχόν προβλήματα που μπορεί να εμφανιστούν και έτσι αυτή η προσθήκη μάλλον φαίνεται περιττή.

Τέλος, μια τρίτη βασική προσθήκη είναι μια τεχνική «σκεπάσματος» («tiling»), που επιτρέπει σε μια εικόνα να κατασκευαστεί από μια σύνθεση JPEG πλαισίων, τα οποία μπορεί να έχουν διαφορετικά μεγέθη, αναλύσεις, ρυθμίσεις ποιότητας και ακόμα και περιοχές χρώματος.

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

Μια ενδιαφέρουσα υποπερίπτωση που είναι σχετικά απλή είναι αυτή όπου όλα τα πλαίσια είναι του ίδιου μεγέθους και έχουν παρόμοιες ρυθμίσεις ποιότητας. Εδώ το ενδιαφέρον χαρακτηριστικό είναι ότι σε αντίθεση με την βασική JPEG εικόνα όπου μπορούμε να έχουμε μέχρι 64000 pixels ανά πλευρά, μπορούμε να πάρουμε εικόνες που προέρχονται από συνδυασμό πλαισίων οι οποίες να έχουν 2 εις την 32 pixels ανά πλευρά.

 

 

 

 

 

 

 

 

Βαθμιαίο JPEG

 

Ένα απλό ή «βασικό» αρχείο JPEG αποθηκεύεται σαν μία σάρωση της εικόνας από πάνω προς τα κάτω. Το βαθμιαίο JPEG διαιρεί το αρχείο σε μία σειρά από σαρώσεις. Η πρώτη σάρωση δείχνει την εικόνα παρόμοια με μία ρύθμιση πολύ χαμηλής ποιότητας και γι’ αυτό χρειάζεται πολύ λίγο χώρο. Οι σαρώσεις που ακολουθούν βελτιώνουν βαθμιαία την ποιότητα. Κάθε σάρωση προστίθεται στα ήδη υπάρχοντα δεδομένα, έτσι ώστε ο συνολικός χώρος που απαιτείται να είναι περίπου ίδιος με εκείνον μιας βασικής JPEG εικόνας που έχει ίδια ποιότητα με την τελική σάρωση. (Βασικά, το βαθμιαίο JPEG είναι απλώς μια επανατοποθέτηση των ίδιων δεδομένων σε μία πιο πολύπλοκη σειρά).

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

Αυτό βέβαια είναι πολύ καλύτερο από μία αργή εμφάνιση της εικόνας, από πάνω προς τα κάτω. Το μειονέκτημα είναι ότι κάθε σάρωση για να εμφανιστεί χρειάζεται περίπου την ίδια υπολογιστική ισχύ με την εμφάνιση ενός ολόκληρου βασικού JPEG αρχείου. Έτσι, το βαθμιαίο JPEG έχει νόημα μόνο αν διαθέτουμε έναν γρήγορο αποκωδικοποιητή σε σχέση με τον τρόπο επικοινωνίας.

Αν τα δεδομένα έρχονται γρήγορα, ένας βαθμιαίος JPEG αποκωδικοποιητής μπορεί να προσαρμοστεί παραλείποντας μερικά περάσματα της εικόνας. Οπότε, όσοι είναι αρκετά τυχεροί να έχουν Τ1 ή γρηγορότερες συνδέσεις στο δίκτυο ίσως να μην παρατηρήσουν κάποια διαφορά μεταξύ του βαθμιαίου και του απλού JPEG. Όμως σε μια σύνδεση με ταχύτητα modem, το βαθμιαίο JPEG είναι εξαιρετικό.

Μέχρι και πρόσφατα, δεν υπήρχαν πολλές εφαρμογές στις οποίες το βαθμιαίο JPEG να ήταν ελκυστικό κι έτσι δεν ήταν αρκετά διαδεδομένο. Αλλά με τη διάδοση των World Wide Web browsers που τρέχουν σε αργές συνδέσεις των modem, και με τη συνεχώς αυξανόμενη ισχύ των υπολογιστών οικιακής χρήσης, το βαθμιαίο JPEG έχει μετατραπεί σε χρησιμότατο εργαλείο για τη χρήση του WWW. Επιπλέον, το βαθμιαίο JPEG δεν υποστηρίζεται από τους αποκωδικοποιητές του βασικού JPEG γι’ αυτό σιγουρευτείτε πρώτα ότι ο browser σας διαθέτει βαθμιαίο JPEG αποκωδικοποιητή.

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

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

 

 

Διαφάνεια JPEG

 

Το JPEG δεν υποστηρίζει διαφάνειες και δεν είναι πιθανό να υποστηρίξει σύντομα. Έχει διαπιστωθεί ότι το να προστεθούν διαφάνειες στο JPEG δεν θα είναι εύκολη δουλειά. Η παραδοσιακή προσέγγιση στις διαφάνειες, όπως τη βρίσκουμε στις εικόνες GIF καθώς και σε άλλες μορφές, είναι να διαλέξουμε ένα χρώμα διαφορετικό (μη χρησιμοποιούμενο) για να δηλώσουμε ένα διαφανές εικονοστοιχείο. Αυτό δεν μπορεί να δουλέψει στο JPEG επειδή το JPEG έχει απώλειες. Ένα εικονοστοιχείο δεν θα εμφανιστεί οπωσδήποτε με το ίδιο χρώμα με το οποίο ξεκίνησε. Φυσιολογικά, ένα μικρό λάθος στην τιμή ενός εικονοστοιχείου δεν ενοχλεί γιατί επηρεάζει την εικόνα ελάχιστα. Όμως, αν αλλάξουμε τα εικονοστοιχεία από διαφανή σε φυσιολογικά ή αντίστροφα, το λάθος θα είναι πολύ εμφανές κι ενοχλητικό, ειδικά αν το πραγματικό υπόβαθρο είναι αρκετά διαφορετικό από το διαφανές χρώμα.

Μία πιο λογική προσέγγιση είναι να αποθηκεύσουμε ένα κανάλι άλφα (ποσοστό διαφάνειας) σαν ένα ξεχωριστό χρώμα σε μία JPEG εικόνα. Αυτό θα μπορούσε να δουλέψει, αφού ένα μικρό λάθος στο άλφα δημιουργεί μόνο μια μικρή διαφορά στο αποτέλεσμα.

Το πρόβλημα είναι ότι ένα τυπικό κανάλι άλφα είναι ακριβώς το είδος της εικόνας στην οποία το JPEG δουλεύει πολύ άσχημα : πολλές «επίπεδες» περιοχές χρώματος και ξαφνικά «άλματα».

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

Η μόνη πραγματική λύση είναι να συνδυάσουμε την αποθήκευση με απώλειες της εικόνας που κάνει το JPEG, με την αποθήκευση χωρίς απώλειες της διαφανής μάσκας, χρησιμοποιώντας κάποιον άλλο αλγόριθμο. Η δημιουργία, η τυποποίηση και τέλος η διάδοση στο κοινό μιας μορφής συμπίεσης ικανής να κάνει τα παραπάνω δεν είναι κάτι εύκολο. Απ’ όσα μας είναι γνωστά, δεν έχει γίνει κάποια σοβαρή δουλειά προς αυτή την κατεύθυνση. Φαίνεται ότι η διαφάνεια δεν αξίζει τόσο πολύ προσπάθεια.

 

 

JPEG Χωρίς Απώλειες

 

Υπάρχει μεγάλη σύγχυση σ’ αυτό το θέμα για την ύπαρξη μιας τέτοιας μορφής συμπίεσης JPEG. Το στάνταρτ JPEG περιλαμβάνει έναν αλγόριθμο συμπίεσης που είναι πραγματικά χωρίς απώλειες, δηλαδή έναν αλγόριθμο που εξασφαλίζει ότι το αποτέλεσμα της αποσυμπίεσης του είναι ψηφίο προς ψηφίο ίδιο με την αρχική είσοδο. Ωστόσο, αυτός ο αλγόριθμος δεν έχει σχεδόν τίποτα κοινό με τον απλό (αλλά με απώλειες) JPEG αλγόριθμο, και προσφέρει πολύ μικρότερη συμπίεση.

Ο βαθμός συμπίεσης που προσφέρει το JPEG χωρίς απώλειες είναι 2:1 (τυπική τιμή). Δουλεύει καλά μόνο για εικόνες με συνεχή τόνο χρώματος ενώ σε εικόνες που χρησιμοποιούν χρώματα παλέτας και σε εικόνες με μικρό βάθος χρώματος, η συμπίεση που παρέχει δεν είναι χρήσιμη.( Τα νεότερα αποτελέσματα δείχνουν ότι το PNG ξεπερνά κατά πολύ το χωρίς απώλειες JPEG στις περισσότερες εικόνες. Προφανώς μόλις το PNG διαδοθεί περισσότερο, το χωρίς απώλειες JPEG θα καταργηθεί).

Υπάρχουν πολύ λίγες υλοποιήσεις του πραγματικά χωρίς απώλειες JPEG. Mια απ’ αυτές είναι το RVPG.

Η μέθοδος αυτή λοιπόν, αποτελεί ανεξάρτητο λογισμικό από το βασικό JPEG, δεν χρησιμοποιεί ΔΣΜ, αφού η χρήση του ΔΣΜ λόγω των σφαλμάτων στρογγυλοποίησης δημιουργεί απώλειες. Για τον ίδιο λόγο δεν θα πρέπει να χρησιμοποιείται μετατροπή χρωματικής περιοχής ή δειγματοληψία, αν και αυτές οι λειτουργίες επιτρέπονται από το πρότυπο αυτό. Η μέθοδος συμπίεσης χωρίς απώλειες κωδικοποιεί την διαφορά μεταξύ της τιμής του κάθε pixel και της αναμενόμενης τιμής για το pixel αυτό. Η αναμενόμενη τιμή είναι μια συνάρτηση των ήδη γνωστών pixels που βρίσκονται πάνω και αριστερά από το παρόν και έχουν ήδη μεταδοθεί. Ως συνάρτηση μπορεί να χρησιμοποιηθεί ο μέσος όρος ή άλλες 8 συναρτήσεις που προσφέρονται από το ίδιο το πρόγραμμα. Η ακολουθία των διαφορών αυτών κωδικοποιείται με χρήση του ίδιου κώδικα που χρησιμοποιήσαμε στο JPEG με απώλειες (δηλαδή του Huffman ή τον αριθμητικό).  

Aν ρυθμίσουμε ένα απλό JPEG στη μέγιστη δυνατή ποιότητα δε σημαίνει ότι θα αποθηκευτούν τα δεδομένα χωρίς απώλειες. Το JPEG χωρίς απώλειες είναι μια τελείως διαφορετική μέθοδος. Ακόμα και στην καλύτερη δυνατή ποιότητα, το απλό JPEG δεν μπορεί να είναι χωρίς απώλειες γιατί έχουμε λάθη από στρογγυλοποιήσεις στους διάφορους υπολογισμούς. Τα λάθη αυτά είναι σχεδόν πάντα πολύ μικρά για να γίνουν εμφανή, αλλά θα εμφανιστούν αν υποβάλλουμε την εικόνα σε πολλούς κύκλους συμπίεσης.

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

Εξάλλου, πολλές υλοποιήσεις του JPEG δεν επιτρέπουν να χρησιμοποιηθεί με τη μέγιστη ρύθμιση ποιότητας, αφού θεωρείτε πολύ παράδοξο να χρησιμοποιείτε μ’ αυτόν τον τρόπο το JPEG. Για παράδειγμα στο πρόγραμμα IJG JPEG, πρέπει να δηλώσουμε όχι μόνο «-quality 100» αλλά και «-sample 1x1» για να εξαλείψουμε το χάσιμο της πληροφορίας. Τα αρχεία που προκύπτουν είναι κατά πολύ μεγαλύτερα και λίγο καλύτερα σε ποιότητα από τα αρχεία που δημιουργούνται με λογικότερες ρυθμίσεις.

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

 

 

Μορφοποίηση των Αρχείων

 

Μιλώντας αυστηρά, το JPEG αναφέρεται μόνο σε μια οικογένεια αλγορίθμων συμπίεσης. Δεν αναφέρεται σε ένα συγκεκριμένο τρόπο μορφοποίησης αρχείων εικόνας. Οι συγκρούσεις μεταξύ των οργανισμών διεθνών στάνταρ ( αυτό που συνηθίζουμε να αποκαλούμε διαπλεκόμενα συμφέροντα !) εμπόδισαν την επιτροπή του JPEG να ορίσει ένα τρόπο μορφοποίησης για τα αρχεία. Αφού δεν μπορούμε να ανταλλάξουμε εικόνες με κάποιον αν δε συμφωνήσουμε σε ένα κοινό τρόπο μορφοποίησης των αρχείων, είναι επόμενο να υπάρχει πρόβλημα. Χωρίς την ύπαρξη επίσημων στάνταρ, ορισμένοι προγραμματιστές του JPEG έχουν δημιουργήσει κάτι τελείως δικό τους, με αποτέλεσμα τα προγράμματά τους να μην είναι συμβατά με κανενός άλλου.

Το πιο κοντινό πράγμα σε μια στάνταρ JPEG μορφοποίηση είναι η δουλειά που έχει γίνει από τους ανθρώπους της C-Cube Microsystems. Έχουν ορίσει τις εξής δύο μορφοποιήσεις με βάση το JPEG :

 

JFIF (JPEG File Interchange Format), μια μορφοποίηση χαμηλών δυνατοτήτων που μετατρέπει εικονοστοιχεία και τίποτα παραπάνω.

 

TIFF / JPEG, μια επέκταση της μορφοποίησης Aldus TIFF. To TIFF είναι μια μορφοποίηση υψηλών δυνατοτήτων που μας επιτρέπει να καταγράψουμε σχεδόν όλα όσα θα θέλαμε από μια εικόνα, ίσως και περισσότερα.

 

Το JFIF έγινε γνωστό σαν το πιο διαδεδομένο στάνταρτ του INTERNET, και είναι αυτό που εννοούμε όταν αναφερόμαστε σε ένα JPEG αρχείο. Τα περισσότερα προγράμματα ανάγνωσης JFIF είναι επίσης ικανά να διαχειρίζονται και μερικές μορφές που δεν είναι και τόσο JFIF.

 

 

 

 

Κατανόηση του Είδους Συμπίεσης Ενός Αρχείου

 

Αν έχουμε κάποιο JPEG αρχείο το οποίο δε μπορούμε να διαβάσουμε με το πρόγραμμα που χρησιμοποιούμε συνήθως, είναι πολύ πιθανό να έχει τη μορφή HSI ή κάποια άλλη ειδική μορφή που χρησιμοποιεί μια εταιρία και βασίζεται στο JPEG. Μπορούμε να πούμε τι συμπίεση έχει χρησιμοποιηθεί αν κοιτάξουμε τα αρχικά bytes του αρχείου :

 

1.         Ένα JFIF αρχείο θα ξεκινά με τα εξής τέσσερα byte FF D8 FF E0 (στο δεκαεξαδικό), ακολουθούμενα από δύο byte διαφορετικά κάθε φορά (συνήθως 00 10 στο δεκαεξαδικό) και τους χαρακτήρες ‘JFIF’.

 

2.         Aν υπάρχουν τα FF D8 στην αρχή, αλλά δεν υπάρχουν οι χαρακτήρες ‘JFIF’, ίσως να έχουμε ένα «σύνηθες» JPEG αρχείο. Αυτό, κατά πάσα πιθανότητα, αποκωδικοποιείται με το πρόγραμμα που αποσυμπιέζει και τα JFIF αρχεία (τουλάχιστον αξίζει να το προσπαθήσουμε).

 

3.                  Τα αρχεία HSI ξεκινούν με τους χαρακτήρες ‘hsi1’. Σ’ αυτή την περίπτωση ο μόνος τρόπος να δούμε τη συμπιεσμένη εικόνα, είναι να έχουμε το κατάλληλο πρόγραμμα για HSI αρχεία. Ίσως ορισμένα σημεία του αρχείου να μοιάζουν πολύ σε αυτά του JPEG, αλλά συνήθως η αποσυμπίεση δε γίνεται σωστά με πρόγραμμα που δεν είναι για JPEG.

4.         Ένα αρχείο PICT για Macintosh, αν συμπιεστεί σαν JPEG, θα έχει μερικές εκατοντάδες byte σαν επικεφαλίδα (συνήθως 726 bytes, αλλά όχι πάντα) ακολουθούμενα από δεδομένα για το JPEG. Θα πρέπει να βρούμε τα τρία συνεχόμενα byte FF D8 FF (στο δεκαεξαδικό). Η φράση ‘Photo - JPEG’ υπάρχει συνήθως λίγο πριν απ’ την επικεφαλίδα και η φράση ‘AppleMark’ ή ‘JFIF’ λίγο μετά απ’ αυτή. Αν σβήσουμε ότι υπάρχει πριν τα FF D8 FF, θα μπορέσουμε να αποκωδικοποιήσουμε το αρχείο. (Δε θα τα καταφέρουμε αν η εικόνα PICT είναι χωρισμένη σε πολλαπλές «μπάντες». Ευτυχώς όμως οι εικόνες PICT με μπάντες δε χρησιμοποιούνται πολύ. Μία εικόνα PICT με μπάντες περιέχει πολλά δεδομένα σε JPEG τα οποία προσθέτονται για τη δημιουργία της τελικής εικόνας. Αυτά πρέπει να συγκεντρωθούν ξανά μαζί σε μία εικόνα. Μερικά απλά εργαλεία γι’ αυτή τη δουλειά, υπάρχουν στο WEB, στη διεύθυνση : http://www.blarg.net/~bailey/photo-jpeg/photo-jpeg.html.)

5.         Αν το αρχείο προέρχεται από Macintosh, θα μπορούσε να είναι ένα στάνταρ JFIF αρχείο μαζί με μία δυαδική επικεφαλίδα προσθεμένη από τον MAC. Σε αυτή την περίπτωση η επικεφαλίδα θα είναι 128 bytes μέσα στο αρχείο. Έτσι το μόνο που χρειάζεται είναι να σβήσουμε αυτά τα πρώτα 128 bytes και είμαστε έτοιμοι.

6.         Οτιδήποτε άλλο θα είναι ειδική μορφή που χρησιμοποιεί κάποια εταιρία ή δε θα έχει καμία σχέση με JPEG. Αν είμαστε τυχεροί, το αρχείο ίσως να αποτελείτε από μία επικεφαλίδα και στη συνέχεια να έχει δεδομένα για JPEG. Αν βρούμε την αρχή των δεδομένων αυτών (ψάχνουμε για FF D8 ), μπορούμε να δοκιμάσουμε να σβήσουμε ότι υπάρχει πριν απ’ αυτά.

 

 

Προσθήκη Μαθηματικού Συνεπεξεργαστή (FPU) ή και Chip Ψηφιακής Επεξεργασίας Σήματος σε Σχέση με την Επιτάχυνση του JPEG

 

Αφού το JPEG είναι τόσο απαιτητικό σε υπολογισμούς, πολλοί είναι αυτοί που υποστηρίζουν ότι η χρήση του μαθηματικού συνεπεξεργαστή θα το επιταχύνει. Κάτι τέτοιο δεν ισχύει. Τα περισσότερα ποιοτικά προγράμματα για JPEG χρησιμοποιούν πράξεις μόνο με ακεραίους κι έτσι δεν επηρεάζονται από την παρουσία ή την απουσία υλικού που εκτελεί πράξεις κινητής υποδιαστολής.

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

Τα chip ψηφιακής επεξεργασίας σήματος είναι ιδανικά για γρήγορη επαναλαμβανόμενη αριθμητική ακεραίων, οπότε ο προγραμματισμός ενός τέτοιου chip για χρήση JPEG μπορεί να οδηγήσει σε σημαντικές επιταχύνσεις. Τα chip αυτά είναι διαθέσιμα σαν πρόσθετα σε μερικά PC και σταθμούς εργασίας. Αν έχετε κάτι τέτοιο, ψάξτε για ένα πρόγραμμα JPEG που να το εκμεταλλεύεται.

 

 

 

 

 

 

 

 

 

Βιβλιογραφία JPEG

 

Προτείνονται τα εξής βιβλία :

 

·        The JPEG Still Picture Compression Standard του Gregory K. Wallace, που είναι μία καλή εισαγωγή σε τεχνικά θέματα γύρω από την συμπίεση JPEG.

 

·        The Data Compression Book¨ του Mark Nelson, το οποίο περιλαμβάνει μια γενικότερη ματιά στις μεθόδους συμπίεσης και περιέχει προγράμματα σε κώδικα C.

 

·        JPEG Still Image Data Compression Standard των W.B.Pennbaker και J.L.Mitchell, αποτελεί ένα αξιόλογο βιβλίο για όποιον ενδιαφέρεται για μια σε βάθος ανάλυση της μεθόδου συμπίεσης JPEG.