ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 8: Πρότυπο Συμπίεσης Εικόνας JPEG2000

Σχετικά έγγραφα
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 7: Πρότυπο Συμπίεσης Εικόνας JPEG

Ψηφιακή Επεξεργασία Εικόνας

Ψηφιακή Επεξεργασία Εικόνας

Ψηφιακή Επεξεργασία Εικόνας

Ψηφιακή Επεξεργασία Εικόνας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 5: Μετασχηματισμοί Εικόνας.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 6: Κωδικοποίηση & Συμπίεση Εικόνας

Θέματα Συστημάτων Πολυμέσων. Ενότητα # 7: JPEG Διδάσκων: Γεώργιος Πολύζος Τμήμα: Μεταπτυχιακό Πρόγραμμα Σπουδών Επιστήμη των Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 4: Δειγματοληψία και Κβάντιση Εικόνας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 3: Αποκατάσταση Εικόνας.

Συστήματα Πολυμέσων. Ενότητα 8: Συμπίεση Εικόνας κατά JPEG Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Σήματα και Συστήματα ΙΙ

5 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Ψηφιακή Επεξεργασία Εικόνας

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Τεχνολογία Πολυμέσων. Ενότητα # 11: Κωδικοποίηση εικόνων: JPEG Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Εισαγωγή στις Τηλεπικοινωνίες / Εργαστήριο

Δομές Δεδομένων Ενότητα 4

Συμπίεση Δεδομένων

Ψηφιακή Επεξεργασία και Ανάλυση Εικόνας Ενότητα 6 η : Συμπίεση Εικόνας. Καθ. Κωνσταντίνος Μπερμπερίδης Πολυτεχνική Σχολή Μηχανικών Η/Υ & Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ, ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Εισαγωγή στις Τηλεπικοινωνίες / Εργαστήριο

Λογιστικές Εφαρμογές Εργαστήριο

Συστήματα Πολυμέσων. Ενότητα 7: Συμπίεση Εικόνας κατά JPEG. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

7 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Εισαγωγή στις Τηλεπικοινωνίες

Τεχνολογία Πολυμέσων. Ενότητα # 8: Αρχές κωδικοποίησης Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Διαδικαστικός Προγραμματισμός

8 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 1: Εισαγωγή στην Ψηφιακή Επεξεργασία Εικόνας

Πληροφορική. Ενότητα 4 η : Κωδικοποίηση & Παράσταση Δεδομένων. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. 6 ο Μάθημα. Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ. url:

4 η ΕΝΟΤΗΤΑ Μητρώα και συνθήκες στο MATLAB

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. 5 ο Μάθημα. Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ. url:

Πληροφορική. Εργαστηριακή Ενότητα 3 η : Επεξεργασία Κελιών Γραμμών & Στηλών. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Ψηφιακή Επεξεργασία Εικόνας

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. 2 ο Μάθημα. Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ. url:

12 o Εργαστήριο Σ.Α.Ε

11 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Ανάκτηση Πληροφορίας

Ψηφιακή Επεξεργασία Εικόνων

ΜΑΘΗΜΑΤΙΚΑ ΓΙΑ ΟΙΚΟΝΟΜΟΛΟΓΟΥΣ

Ραδιοτηλεοπτικά Συστήματα Ενότητα 5: Ψηφιοποίηση και συμπίεση σημάτων ήχου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ. Ενότητα 2: Βελτιστοποίηση Εικόνας.

Υδραυλικά & Πνευματικά ΣΑΕ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ. Ενότητα : ΤΑΧΥΣ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ FOURIER

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ. Ενότητα : ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ Ζ (ΖTransform)

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Θέματα Συστημάτων Πολυμέσων

Δομές Δεδομένων Ενότητα 3

CAD / CAM. Ενότητα #10: Βιομηχανικά Συστήματα Ελέγχου. Δημήτριος Τσελές Τμήμα Μηχανικών Αυτοματισμού T.E.

Επεξεργασία Πολυµέσων. Δρ. Μαρία Κοζύρη Π.Μ.Σ. «Εφαρµοσµένη Πληροφορική» Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήµιο Θεσσαλίας

Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων VLSI II

Τεχνολογία Πολυμέσων. Ενότητα # 9: Κωδικοποίηση εντροπίας Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Συστήματα Πολυμέσων Ενότητα 4: Συμπίεση. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Β: Ευστάθεια Συστήματος (Γ Μέρος)

Συστήματα Αυτόματου Ελέγχου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 8 η : Γραφήματα

Δομημένος Προγραμματισμός

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Τεχνολογία Πολυμέσων. Ενότητα # 12: Κωδικοποίηση βίντεο: H.26x Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Μάθημα 7 ο. Συμπίεση Εικόνας ΤΜΗΥΠ / ΕΕΣΤ 1

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

Σχεδίαση Ψηφιακών Συστημάτων

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Πληροφορική. Εργαστηριακή Ενότητα 6 η : Ταξινόμηση & Ομαδοποίηση Δεδομένων

Εισαγωγή στον Προγραμματισμό με C++

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ. Ενότητα : ΔΙΑΚΡΙΤΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ FOURIER

Πληροφορική. Εργαστηριακή Ενότητα 1 η : Εισαγωγή στα Λογιστικά Φύλλα με το MS Excel. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

ΕΛΕΓΧΟΣ ΠΑΡΑΓΩΓΙΚΩΝ ΔΙΕΡΓΑΣΙΩΝ

Σχεδίαση Ψηφιακών Συστημάτων

3 η ΕΝΟΤΗΤΑ Συναρτήσεις στο MATLAB

Αντικειμενοστραφής Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ, ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Συστήματα Πολυμέσων. Ενότητα 6: Συμπίεση Ψηφιακής Εικόνας. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Μάθημα: Ακουστική και Ψυχοακουστική

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

Συστήματα Αυτομάτου Ελέγχου 1 Ενότητα # 5: Χρήση μετασχηματισμού Laplace για επίλυση ηλεκτρικών κυκλωμάτων Μέθοδοι εντάσεων βρόχων και τάσεων κόμβων

Συστήματα Επικοινωνιών

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7α: SQL (NULL, Διαίρεση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Συστήματα Πολυμέσων. Ενότητα 3: Εισαγωγικά θέματα Συμπίεσης. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Συστήματα Πολυμέσων. Ενότητα 12: Συμπίεση Ψηφιακού Ήχου. Θρασύβουλος Γ. Τσιάτσος Τμήμα Πληροφορικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Δομημένος Προγραμματισμός

Ψηφιακή Επεξεργασία Σήματος

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Βιομηχανικοί Ελεγκτές

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Συστήματα Αυτόματου Ελέγχου

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 1

6 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Στατιστική Επιχειρήσεων Ι

12 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ Ενότητα 8: Πρότυπο Συμπίεσης Εικόνας JPEG2000 Ιωάννης Έλληνας Τμήμα Υπολογιστικών Συστημάτων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2

1. Σκοποί ενότητας... 4 2. Περιεχόμενα ενότητας... 4 3. Συνοπτική θεωρία... 5 3.1 Κωδικοποιητής Jpeg2000... 5 3.2 Ανάλυση προγράμματος... 10 3.2.1 Έλεγχος εισόδου... 10 3.3 Αφαίρεση DC συνιστώσας... 10 3.4 Μετασχηματισμός DWT... 10 3.4.1 Πίνακας 8.1: Πίνακας ευρετήριο s... 11 3.5 Κβάντιση... 13 3.6 Run-Length κωδικοποίηση... 15 3.7 Διαμόρφωση δεδομένων εξόδου... 15 3.8 Αποκωδικοποιητής JPEG2000 (Αντίστροφη διαδικασία)... 16 4. Ασκήσεις... 19 4.1 1 η Άσκηση... 19 4.2 2 η Άσκηση... 19 4.3 3 η Άσκηση... 19 4.4 4 η Άσκηση... 19 4.4.1 Εικόνα 1: Αρχική εικόνα... 20 4.4.2 Εικόνα 2: Συμπιεσμένη εικόνα... 21 4.5 5 η Άσκηση... 21 4.6 6 η Άσκηση... 22 4.6.1 Εικόνα 3: Συμπιεσμένη εικόνα με μ b = 5 και ε b = 5.5... 22 4.7 7 η Άσκηση... 23 4.7.1 Εικόνα 4: Συμπιεσμένη εικόνα με άμεση κβάντιση... 23 4.8 8 η Άσκηση... 24 4.8.1 Εικόνα 5: Συμπιεσμένη εικόνα με το πρότυπο JPEG2000... 24 4.8.2 Εικόνα 6: Συμπιεσμένη εικόνα με το πρότυπο JPEG... 25 3

1. Σκοποί ενότητας Σκοπός της ενότητας είναι να περιγραφεί το πρότυπο συμπίεσης εικόνων JPEG2000 και να κληθεί ο εκπαιδευόμενος να λύσει πρακτικές ασκήσεις. 2. Περιεχόμενα ενότητας H ενότητα αυτή καλύπτει τις ακόλουθες βασικές έννοιες: Το πρότυπο συμπίεσης εικόνας JPEG2000 Σύγκριση των προτύπων συμπίεσης Με τις αντίστοιχες 8 ασκήσεις για λύση που καλύπτουν θέματα των παραπάνω εννοιών. 4

3. Συνοπτική θεωρία Όπως και στον JPEG, τα βασικά στοιχεία του κωδικοποιητή είναι: μετασχηματισμός, κβάντισξ και κωδικοποίηση εντροπίας όπως μπορούμε να δούμε στο Σχήμα 8.1. Σχήμα 8.1: Μπλοκ διάγραμμα κωδικοποιητή JPEG2000 3.1 Κωδικοποιητής Jpeg2000 function y = im2jpeg2k(x, n, q) % IM2JPEG2K Compresses an image using a JPEG 2000 approximation. % Y = IM2JPEG2K(X, N, Q) compresses image X using an N-scale JPEG % 2K wavelet transform, implicit or explicit coefficient % quantization, and Huffman symbol coding augmented by zero % run-length coding. If quantization vector Q contains two % elements, they are assumed to be implicit quantization % parameters; else, it is assumed to contain explicit subband step 5

% sizes. Y is an encoding structure containing Huffman-encoded % data and additional parameters needed by JPEG2K2IM for decoding. % % See also JPEG2K2IM. % Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins % Digital Image Processing Using MATLAB, Prentice-Hall, 2004 % $Revision: 1.5 $ $Date: 2003/10/26 18:38:13 $ global RUNS error(nargchk(3, 3, nargin)); % Check input arguments if ndims(x) ~= 2 ~isreal(x) ~isnumeric(x) ~isa(x, 'uint8') error('the input must be a UINT8 image.'); if length(q) ~= 2 & length(q) ~= 3 * n + 1 error('the quantization step size vector is bad.'); % Level shift the input and compute its wavelet transform. x = double(x) - 128; 6

[c, s] = wavefast(x, n, 'jpeg9.7'); % Quantize the wavelet coefficients. q = stepsize(n, q); sgn = sign(c); sgn(find(sgn == 0)) = 1; c = abs(c); for k = 1:n qi = 3 * k - 2; c = wavepaste('h', c, s, k, wavecopy('h', c, s, k) / q(qi)); c = wavepaste('v', c, s, k, wavecopy('v', c, s, k) / q(qi + 1)); c = wavepaste('d', c, s, k, wavecopy('d', c, s, k) / q(qi + 2)); c = wavepaste('a', c, s, k, wavecopy('a', c, s, k) / q(qi + 3)); c = floor(c); c = c.* sgn; % Run-length code zero runs of more than 10. Begin by creating % a special code for 0 runs ('zrc') and -of-code ('eoc') and % making a run-length table. zrc = min(c(:)) - 1; eoc = zrc - 1; RUNS = [65535]; % Find the run transition points: 'plus' contains the index of the % start of a zero run; the corresponding 'minus' is its + 1. z = c == 0; z = z - [0 z(1: - 1)]; plus = find(z == 1); minus = find(z == -1); 7

% Remove any terminating zero run from 'c'. if length(plus) ~= length(minus) c(plus():) = []; c = [c eoc]; % Remove all other zero runs (based on 'plus' and 'minus') from 'c'. for i = length(minus):-1:1 run = minus(i) - plus(i); if run > 10 ovrflo = floor(run / 65535); run = run - ovrflo * 65535; c = [c(1:plus(i) - 1) repmat([zrc 1], 1, ovrflo) zrc... runcode(run) c(minus(i):)]; % Huffman encode and add misc. information for decoding. y.runs y.s y.zrc y.q y.n = uint16(runs); = uint16(s(:)); = uint16(-zrc); = uint16(100 * q'); = uint16(n); y.huffman = mat2huff(c); %-------------------------------------------------------------------% function y = runcode(x) 8

% Find a zero run in the run-length table. If not found, create a % new entry in the table. Return the index of the run. global RUNS y = find(runs == x); if length(y) ~= 1 RUNS = [RUNS; x]; y = length(runs); %-------------------------------------------------------------------% function q = stepsize(n, p) % Create a subband quantization array of step sizes ordered by % decomposition (first to last) and subband (horizontal, vertical, % diagonal, and for final decomposition the approximation subband). if length(p) == 2 % Implicit Quantization q = []; qn = 2 ^ (8 - p(2) + n) * (1 + p(1) / 2 ^ 11); for k = 1:n qk = 2 ^ -k * qn; q = [q (2 * qk) (2 * qk) (4 * qk)]; q = [q qk]; else % Explicit Quantization q = p; q = round(q * 100) / 100; % Round to 1/100th place 9

if any(100 * q > 65535) error('the quantizing steps are not UINT16 representable.'); if any(q == 0) error('a quantizing step of 0 is not allowed.'); 3.2 Ανάλυση προγράμματος 3.2.1 Έλεγχος εισόδου error(nargchk(3, 3, nargin)); % Check input arguments Στην αρχή του κώδικα γίνεται έλεγχος αν το αρχείο που δίνουμε για επεξεργασία είναι στο αναγκαίο format (uint8) και αν οι τιμές για την κβάντιση είναι σωστές. Εφ όσον τα δεδομένα είναι σωστά, τότε προχωράμε στην επεξεργασία της εικόνας. 3.3 Αφαίρεση DC συνιστώσας x = double(x) - 128; Εδώ γίνεται η DC μετατόπιση, όπως έχουμε εξηγήσει στο θεωρητικό μέρος (DC level shifting). 3.4 Μετασχηματισμός DWT [c, s] = wavefast(x, n, 'jpeg9.7'); 10

Στη συνέχεια γίνεται ο μετασχηματισμός wavelet. Το jpeg9.7 σημαίνει ότι χρησιμοποιούμε το φίλτρο 9-tap/7-tap Daubechies. Όπως γνωρίζουμε ο αλγόριθμος με αυτό το φίλτρο είναι απωλεστικός οπότε και μη αναστρέψιμος. Η εντολή wavefast μετασχηματίζει με FWT (Fast wavelet transform). Ο μετασχηματισμός γίνετε Ν φορές, αναλόγως την τιμή που έχουμε δώσει στην παράμετρο n της wavefast, για να μπορέσουμε να πετύχουμε wavelet μετασχηματισμό N επιπέδων. Όλοι οι μετασχηματισμένοι συντελεστές της εικόνας βρίσκονται στην c που είναι ουσιαστικά ένας μονοδιάστατος πίνακας με την παρακάτω μορφή: c = [AN(:) HN(:) Hi(:) Vi(:) Di(:) V1(:) D1(:) ] Όπου AN είναι o πίνακας με τους συντελεστές προσέγγισης (approximation coefficients) στο Ν επίπεδο επεξεργασίας και Hi, Vi, Di είναι οι πίνακες με τους συντελεστές για την οριζόντια, την κάθετη και τη διαγώνια λεπτομέρεια αντιστοίχως για i = 1,2,,N. Για Ν επίπεδα επεξεργασίας, η μεταβλητή c περιέχει 3 Ν + 1 τομείς: ένα συντελεστή προσέγγισης και Ν ομάδες συντελεστών οριζόντιας, κάθετης και διαγώνιας λεπτομέρειας. O s είναι ένας πίνακας ευρετήριο για το πρόγραμμά μας. Μέσα από αυτόν ταξινομούνται όλοι οι συντελεστές στον c. s = [san; sdn; sdn-1; sdi; sd1; sf] Όπου san είναι οι διαστάσεις του πίνακα με τους συντελεστές λεπτομέρειας, sdn είναι οι διαστάσεις του πίνακα με την οριζόντια, κάθετη και διαγώνια λεπτομέρεια, ενώ sf είναι οι διαστάσεις της εικόνας. Παρακάτω μπορούμε να δούμε τον πίνακα s για επεξεργασία σε δύο επίπεδα: 3.4.1 Πίνακας 8.1: Πίνακας ευρετήριο s 134 134 134 134 260 260 512 512 11

Από τον πίνακα s, βλέπουμε ότι ο c περιέχει έναν πίνακα 134x134 με τους συντελεστές προσέγγισης, τρεις πίνακες 134x134 με τις λεπτομέρειες στο πρώτο επίπεδο επεξεργασίας και τέλος τρεις πίνακες με τις λεπτομέρειες για το δεύτερο επίπεδο επεξεργασίας. Με αυτές τις πληροφορίες μπορούμε να εντοπίσουμε όποιον συντελεστή θέλουμε, για παράδειγμα οι τρεις πρώτοι συντελεστές προσέγγισης έχουν τιμή: -33.6538-43.2563-24.4129 Οι τρεις πρώτοι συντελεστές οριζόντιας λεπτομέρειας στην πρώτη επεξεργασία έχουν τιμή: 40.4124-4.5394-12.3976 Οι τρεις πρώτοι συντελεστές κάθετης λεπτομέρειας στην πρώτη επεξεργασία έχουν τιμή: 66.2997 55.8117 75.7671 Οι τρεις πρώτοι συντελεστές διαγώνιας λεπτομέρειας στην πρώτη επεξεργασία έχουν τιμή: 41.1763-5.3135-11.7286 Οι τρεις πρώτοι συντελεστές οριζόντιας λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: 6.2363 25.7734-34.3756 12

Οι τρεις πρώτοι συντελεστές κάθετης λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: -7.7997 5.1652 1.5490 Οι τρεις πρώτοι συντελεστές διαγώνιας λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: -5.0587 4.2406-5.2333 3.5 Κβάντιση Στη συνέχεια του προγράμματος γίνεται η κβάντιση των συντελεστών. Η εντολή wavecopy αντιγράφει τους συντελεστές που υπάρχουν στον c σε έναν προσωρινό πίνακα y. Μπορούμε να αντιγράψουμε οποιονδήποτε πίνακα συντελεστών σε οποιοδήποτε επίπεδο. Για παράδειγμα η wavecopy('h', c, s, k) αντιγράφει την οριζόντια λεπτομέρεια που υπάρχει στον c, στo επίπεδο k. Η wavepaste αποθηκεύει ότι υπάρχει στον y, σε όποιον πίνακα της ορίζουμε. Ουσιαστικά η εντολή c = wavepaste('h', c, s, k, wavecopy('h', c, s, k) / q(qi)); αντιγράφει την οριζόντια λεπτομέρεια από τη μετασχηματισμένη εικόνα, την κβαντίζει και μετά την αποθηκεύει στον c. Έτσι, όταν τελειώσει η For θα έχουν κβαντιστεί όλοι οι συντελεστές σε όλες τις υποζώνες. Οι συντελεστές a b (u,v) μιας υποζώνης b κβαντίζονται με την τιμή q b (u,v) χρησιμοποιώντας τους παρακάτω τύπους που έχουμε δει και στη θεωρία: ab ( u, v) qb( u, v) sign[ ab( u, v)] floor b Οι sign και floor είναι συναρτήσεις του Matlab. Το βήμα κβάντισης Δ b είναι: 13

Rb b b b 2 1 2 11 Αν θέλουμε να μην έχουμε καθόλου απώλειες θα πρέπει να θέσουμε μ b =0 και R b =ε b έτσι ώστε Δ b =1. Για μη αναστρέψιμη συμπίεση δεν δίνουμε συγκεκριμένο βήμα κβάντισης, αλλά τον αριθμό των exponent και mantissa bits (μ b και ε b αντίστοιχα) με έναν οριζόντιο πίνακα δύο στοιχείων στην τρίτη παράμετρο της im2jpeg2000. Αυτός ο τρόπος ονομάζεται έμμεση κβάντιση. Αν δώσουμε πίνακα με τα παραπάνω στοιχεία, η συνάρτηση υποθέτει ότι χρησιμοποιούμε άμεση κβάντιση, οπότε θα πρέπει να παρέχουμε το βήμα για κάθε υποζώνη, δηλαδή 3 Ν L + 1 τιμές. Μετά την κβάντιση, οι συντελεστές που είδαμε στην προηγούμενη ενότητα έχουν την παρακάτω μορφή: Οι τρεις πρώτοι συντελεστές προσέγγισης: -186-240 -135 Οι τρεις πρώτοι συντελεστές οριζόντιας λεπτομέρειας στην πρώτη επεξεργασία: 112-12 -34 Οι τρεις πρώτοι συντελεστές κάθετης λεπτομέρειας στην πρώτη επεξεργασία έχουν τιμή: 184 155 210 Οι τρεις πρώτοι συντελεστές διαγώνιας λεπτομέρειας στην πρώτη επεξεργασία έχουν τιμή: 57-7 -16 14

Οι τρεις πρώτοι συντελεστές οριζόντιας λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: 8 36-48 Οι τρεις πρώτοι συντελεστές κάθετης λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: -10 7 2 Οι τρεις πρώτοι συντελεστές διαγώνιας λεπτομέρειας στη δεύτερη επεξεργασία έχουν τιμή: -3 2-3 3.6 Run-Length κωδικοποίηση Ο πραγματικός αλγόριθμος JPEG2000 χρησιμοποιεί αριθμητική κωδικοποίηση για την κωδικοποίηση εντροπίας. Για χάριν απλότητας το παρόν πρόγραμμα κάνει χρήση της Huffman κωδικοποίησης, όπως και στο JPEG. 3.7 Διαμόρφωση δεδομένων εξόδου Τέλος το πρόγραμμα φτιάχνει μια struct μεταβλητή η οποία περιέχει διάφορες πληροφορίες και την κωδικοποιημένη εικόνα μας, τα οποία θα χρησιμοποιηθούν από τον αποκωδικοποιητή. y.runs = uint16(runs); 15

Χρησιμεύει για να γίνει η run length αποκωδικοποίηση. y.s = uint16(s(:)); Αποθηκεύουμε το πίνακα s. y.zrc = uint16(-zrc); Χρησιμεύει για να γίνει η run length αποκωδικοποίηση. y.q = uint16(100 * q'); Η ποιότητα που έχουμε θέσει. y.n = uint16(n); Τα επίπεδα επεξεργασίας που έχουμε θέσει. y.huffman = mat2huff(c); Τα δεδομένα μας αφού γίνει η κωδικοποίηση Huffman. 3.8 Αποκωδικοποιητής JPEG2000 (Αντίστροφη διαδικασία) function x = jpeg2k2im(y) %JPEG2K2IM Decodes an IM2JPEG2K compressed image. % X = JPEG2K2IM(Y) decodes compressed image Y, reconstructing an % approximation of the original image X. Y is an encoding 16

% structure returned by IM2JPEG2K. % See also IM2JPEG2K. % Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins % Digital Image Processing Using MATLAB, Prentice-Hall, 2004 % $Revision: 1.4 $ $Date: 2003/10/26 18:39:40 $ error(nargchk(1, 1, nargin)); % Check input arguments % Get decoding parameters: scale, quantization vector, run-length % table size, zero run code, -of-data code, wavelet bookkeeping % array, and run-length table. n = double(y.n); q = double(y.q) / 100; runs = double(y.runs); rlen = length(runs); zrc = -double(y.zrc); eoc = zrc - 1; s = double(y.s); s = reshape(s, n + 2, 2); % Compute the size of the wavelet transform. cl = prod(s(1, :)); for i = 2:n + 1 cl = cl + 3 * prod(s(i, :)); % Perform Huffman decoding followed by zero run decoding. 17

r = huff2mat(y.huffman); c = []; zi = find(r == zrc); i = 1; for j = 1:length(zi) c = [c r(i:zi(j) - 1) zeros(1, runs(r(zi(j) + 1)))]; i = zi(j) + 2; zi = find(r == eoc); if length(zi) == 1 % Undo terminating zero run % or last non-zero run. c = [c r(i:zi - 1)]; c = [c zeros(1, cl - length(c))]; else c = [c r(i:)]; % Denormalize the coefficients. c = c + (c > 0) - (c < 0); for k = 1:n qi = 3 * k - 2; c = wavepaste('h', c, s, k, wavecopy('h', c, s, k) * q(qi)); c = wavepaste('v', c, s, k, wavecopy('v', c, s, k) * q(qi + 1)); c = wavepaste('d', c, s, k, wavecopy('d', c, s, k) * q(qi + 2)); c = wavepaste('a', c, s, k, wavecopy('a', c, s, k) * q(qi + 3)); % Compute the inverse wavelet transform and level shift. x = waveback(c, s, 'jpeg9.7', n); x = uint8(x + 128); 18

Ο αποκωδικοποιητής JPEG2000 κάνει απλώς την αντίστροφη διαδικασία του κωδικοποιητή. Αφού αποκωδικοποιήσει τους συντελεστές (που είναι κωδικοποιημένοι αριθμητικά), ο χρήστης μπορεί να επιλέξει τις υποζώνες της εικόνας που θα ανασυγκροτηθούν. Επίσης, σε κάθε υποζώνη μπορούμε να επιλέξουμε ένα συγκεκριμένο bit-plane για αποκωδικοποίηση. 4. Ασκήσεις 4.1 1 η Άσκηση Φορτώστε την εικόνα peppers.tif. 4.2 2 η Άσκηση Κωδικοποιήστε την εικόνα που φορτώσατε με το im2jpeg2000.m, χρησιμοποιώντας πέντε επίπεδα επεξεργασίας και για τις παραμέτρους exponent και mantissa δώστε τις παρακάτω τιμές μb = 10 και εb = 10.5. Στη συνέχεια αποκωδικοποιήστε την με το jpeg2κ2im.m για να μπορέσετε να δείτε τα αποτελέσματα. 4.3 3 η Άσκηση Εμφανίστε τη συμπιεσμένη εικόνα στο Matlab, αποθηκεύεστε την χρησιμοποιώντας την imwrite και στη συνέχεια τοποθετήστε τη στην εικόνα 2. Τι διαφορές παρατηρείτε; 4.4 4 η Άσκηση Χρησιμοποιείστε το imratio.m και υπολογίστε την αναλογία συμπίεσης: 19

4.4.1 Εικόνα 1: Αρχική εικόνα 20

4.4.2 Εικόνα 2: Συμπιεσμένη εικόνα Σχόλια: 4.5 5 η Άσκηση Τώρα κωδικοποιείστε πάλι την εικόνα που έχετε φορτώσει βάζοντας τις παρακάτω τιμές στον κβαντιστή: μ b = 5 και ε b = 5.5 και εμφανίστε την στην εικόνα 3. Τι παρατηρείτε; 21

4.6 6 η Άσκηση Χρησιμοποιείστε το imratio.m και τοποθετείστε παρακάτω την αναλογία συμπίεσης. Γράψτε στα σχόλια τι συμπεράσματα βγάζετε για τις επιπτώσεις που έχει η αλλαγή των τιμών μ b και ε b του κβαντιστή στην εικόνα. Ελέγξτε επίσης το χώρο που καταλαμβάνουν οι εικόνες στον δίσκο : 4.6.1 Εικόνα 3: Συμπιεσμένη εικόνα με μ b = 5 και ε b = 5.5 Σχόλια: 22

4.7 7 η Άσκηση Μέχρι τώρα χρησιμοποιήσαμε έμμεση κβάντιση για να θέσουμε το βήμα κβαντιστή. Κωδικοποιείστε μία εικόνα χρησιμοποιώντας άμεση κβάντιση και τοποθετείστε το αποτέλεσμα στην εικόνα 4. Γράψτε επίσης παρακάτω την αναλογία συμπίεσης: 4.7.1 Εικόνα 4: Συμπιεσμένη εικόνα με άμεση κβάντιση Σχόλια: 23

4.8 8 η Άσκηση Κωδικοποιείστε μία εικόνα με την im2jpeg2000.m βάζοντας το μικρότερο βήμα κβαντιστή για περιορισμένες απώλειες. Στη συνέχεια κωδικοποιείστε την ίδια εικόνα χρησιμοποιώντας την im2jpeg.m και συγκρίνετε τις δύο εικόνες με την im2ratio.m. Τι παρατηρείτε; Ποια καταλαμβάνει περισσότερο χώρο; Με ποιο πρότυπο πετυχαίνουμε καλύτερη εικόνα με μεγαλύτερη αναλογία συμπίεσης; 4.8.1 Εικόνα 5: Συμπιεσμένη εικόνα με το πρότυπο JPEG2000 24

4.8.2 Εικόνα 6: Συμπιεσμένη εικόνα με το πρότυπο JPEG Αναλογία συμπίεσης για την κωδικοποιημένη εικόνα με την im2jpeg2000.m: Αναλογία συμπίεσης για την κωδικοποιημένη εικόνα με την im2jpeg.m: 25