Τι είναι ένα αρχείο JPEG;
Το JPEG είναι ένας τύπος μορφής εικόνας που αποθηκεύεται χρησιμοποιώντας τη μέθοδο της συμπίεσης με απώλειες. Η εικόνα εξόδου, ως αποτέλεσμα της συμπίεσης, είναι μια αντιστάθμιση μεταξύ του μεγέθους αποθήκευσης και της ποιότητας της εικόνας. Οι χρήστες μπορούν να προσαρμόσουν το επίπεδο συμπίεσης για να επιτύχουν το επιθυμητό επίπεδο ποιότητας ενώ ταυτόχρονα να μειώσουν το μέγεθος αποθήκευσης. Η ποιότητα της εικόνας επηρεάζεται αμελητέα εάν εφαρμοστεί συμπίεση 10:1 στην εικόνα. Όσο υψηλότερη είναι η τιμή συμπίεσης, τόσο μεγαλύτερη είναι η υποβάθμιση της ποιότητας της εικόνας.
Προδιαγραφές μορφής αρχείου
Η μορφή αρχείου εικόνας JPEG τυποποιήθηκε από την Joint Photographic Experts Group και, ως εκ τούτου, το όνομα JPEG. Η μορφή ήταν η επιλογή αποθήκευσης και μετάδοσης φωτογραφικών εικόνων στο διαδίκτυο. Σχεδόν όλα τα λειτουργικά συστήματα έχουν πλέον προγράμματα προβολής που υποστηρίζουν την οπτικοποίηση εικόνων JPEG, οι οποίες συχνά αποθηκεύονται και με επέκταση JPG. Ακόμη και τα προγράμματα περιήγησης ιστού υποστηρίζουν την οπτικοποίηση εικόνων JPEG. Πριν προχωρήσετε στις προδιαγραφές μορφής αρχείου JPEG, πρέπει να αναφερθεί η συνολική διαδικασία των βημάτων που εμπλέκονται στη δημιουργία JPEG.
Βήματα συμπίεσης JPEG
Μετασχηματισμός: Οι έγχρωμες εικόνες μετατρέπονται από RGB σε εικόνα φωτεινότητας/χρωματισμού (Το μάτι είναι ευαίσθητο στη φωτεινότητα, όχι στο χρωματισμό, έτσι ώστε το τμήμα χρωματισμού να μπορεί να χάσει πολλά δεδομένα και επομένως να συμπιεστεί σε μεγάλο βαθμό.
Κάτω δειγματοληψία: Η κάτω δειγματοληψία γίνεται για έγχρωμο στοιχείο και όχι για στοιχείο φωτεινότητας. Η κάτω δειγματοληψία γίνεται είτε σε αναλογία 2:1 οριζόντια και 1:1 κάθετα (2h 1 V). Έτσι, η εικόνα μειώνεται σε μέγεθος, καθώς το στοιχείο ‘y’ δεν αγγίζεται, δεν υπάρχει αξιοσημείωτη απώλεια ποιότητας εικόνας.
Οργάνωση σε Ομάδες: Τα εικονοστοιχεία κάθε στοιχείου χρώματος είναι οργανωμένα σε ομάδες των 8×2 εικονοστοιχείων που ονομάζονται “μονάδες δεδομένων” εάν ο αριθμός των γραμμών ή στηλών δεν είναι πολλαπλάσιο του 8, η κάτω σειρά και οι στήλες στη δεξιά είναι διπλότυπες.
Διακεκριμένος μετασχηματισμός συνημιτονίου: Ο διακριτός μετασχηματισμός συνημιτονίου (DCT) εφαρμόζεται στη συνέχεια σε κάθε μονάδα δεδομένων για τη δημιουργία χάρτη 8×8 των μετασχηματισμένων στοιχείων. Το DCT περιλαμβάνει κάποια απώλεια πληροφοριών λόγω της περιορισμένης ακρίβειας της αριθμητικής του υπολογιστή. Αυτό σημαίνει ότι ακόμη και χωρίς τον χάρτη θα υπάρξει κάποια απώλεια ποιότητας εικόνας, αλλά συνήθως είναι μικρή.
Κβαντισμός: Κάθε ένα από τα 64 μετασχηματισμένα στοιχεία στη μονάδα δεδομένων διαιρείται με έναν ξεχωριστό αριθμό που ονομάζεται «Συντελεστής κβαντοποίησης (QC)» και στη συνέχεια στρογγυλοποιείται σε έναν ακέραιο. Αυτό είναι όπου οι πληροφορίες χάνονται ανεπανόρθωτα, το μεγάλο QC προκαλεί μεγαλύτερη απώλεια. Γενικά, τα περισσότερα εργαλεία JPEG επιτρέπουν τη χρήση πινάκων QC που προτείνονται από το πρότυπο JPEG.
Κωδικοποίηση: Οι 64 κβαντισμένοι μετασχηματισμένοι συντελεστές (που είναι τώρα ακέραιοι) κάθε μονάδας δεδομένων κωδικοποιούνται χρησιμοποιώντας έναν συνδυασμό κωδικοποίησης RLE και Huffman.
Προσθήκη κεφαλίδας: Το τελευταίο βήμα προσθέτει την κεφαλίδα και όλες τις παραμέτρους JPEG που χρησιμοποιούνται και εξάγει το αποτέλεσμα.
Ο αποκωδικοποιητής JPEG χρησιμοποιεί τα βήματα αντίστροφα για να δημιουργήσει την αρχική εικόνα από τη συμπιεσμένη.
Δομή αρχείου
Μια εικόνα JPEG αναπαρίσταται ως μια ακολουθία τμημάτων όπου κάθε τμήμα αρχίζει με έναν δείκτη. Κάθε δείκτης ξεκινά με 0xFF byte ακολουθούμενο από σημαία δείκτη για να αντιπροσωπεύει τον τύπο του δείκτη. Το ωφέλιμο φορτίο ακολουθούμενο από δείκτη διαφέρει ανάλογα με τον τύπο του δείκτη. Οι συνήθεις τύποι δεικτών JPEG αναφέρονται παρακάτω:
Σύντομο Όνομα | Bytes | Payload | Όνομα | Σχόλια |
---|---|---|---|---|
SOI | 0xFF, 0xD8 | καμία | Έναρξη εικόνας | |
S0F0 | 0xFF, 0xC0 | μεταβλητό μέγεθος | Έναρξη καρέ | |
S0F2 | 0xFF, 0xC2 | μεταβλητό μέγεθος | Έναρξη στο πλαίσιο | |
DHT | 0xFF, 0xC4 | μεταβλητό μέγεθος | Ορισμός πινάκων Huffman | |
DQT | 0xFF, 0xDB | μέγεθος μεταβλητής | Ορισμός πίνακα(ών) κβαντοποίησης | |
DRI | 0xFF, 0xDD | 4 byte | Ορισμός διαστήματος επανεκκίνησης | |
SOS | 0xFF, 0xDA | μεταβλητό μέγεθος | Έναρξη σάρωσης | |
RSTn | 0xFF, 0xD//n//(/el//n//#0..7) | καμία | Επανεκκίνηση | |
APPn | 0xFF, 0xE//n// | μεταβλητό μέγεθος | Συγκεκριμένη εφαρμογή | |
COM | 0xFF, 0xFE | μεταβλητό μέγεθος | Σχόλιο | |
EOI | 0xFF, 0xD9 | καμία | Τέλος εικόνας |
Μέσα στα κωδικοποιημένα με εντροπία δεδομένα, μετά από οποιοδήποτε byte 0xFF, εισάγεται ένα byte 0x00 από τον κωδικοποιητή πριν από το επόμενο byte, έτσι ώστε να μην φαίνεται να υπάρχει δείκτης όπου δεν προορίζεται κανένας, αποτρέποντας σφάλματα πλαισίωσης. Οι αποκωδικοποιητές πρέπει να παραλείψουν αυτό το 0x00 byte. Αυτή η τεχνική, που ονομάζεται byte stuffing (βλ. ενότητα προδιαγραφών JPEG F.1.2.3), εφαρμόζεται μόνο στα κωδικοποιημένα με εντροπία δεδομένα, όχι σε δεδομένα ωφέλιμου φορτίου σήμανσης . Σημειώστε ωστόσο ότι τα κωδικοποιημένα με εντροπία δεδομένα έχουν μερικούς δικούς τους δείκτες. Ειδικά οι δείκτες Επαναφοράς (0xD0 έως 0xD7), οι οποίοι χρησιμοποιούνται για την απομόνωση ανεξάρτητων τμημάτων κωδικοποιημένων με εντροπία δεδομένων για την παράλληλη αποκωδικοποίηση, και οι κωδικοποιητές είναι ελεύθεροι να εισάγουν αυτούς τους δείκτες Επαναφοράς σε τακτά χρονικά διαστήματα (αν και δεν το κάνουν όλοι οι κωδικοποιητές).