ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ Ενότητα 4: Δειγματοληψία και Κβάντιση Εικόνας Ιωάννης Έλληνας Τμήμα Υπολογιστικών Συστημάτων
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2
1. Σκοποί ενότητας... 4 2. Περιεχόμενα ενότητας... 4 3. Άσκησεις... 5 3.1 1 η Άσκηση... 5 3.2 2 η Άσκηση... 5 3.2.1 Ανάλυση... 5 3.2.2 Πρόγραμμα Matlab: uniquant_1.m... 7 3.2.3 Πίνακας 1... 8 3.2.4 Πινακας 2... 9 3.3 3 η Άσκηση... 9 3.3.1 Ανάλυση... 10 3.3.2 Πρόγραμμα Matlab: uniquant_2.m... 10 3.3.3 Πίνακας 3... 12 3.3.4 Πίνακας 4... 13 3.4 4 η Άσκηση... 13 3.5 5 η Άσκηση... 15 3.6 6 η Άσκηση... 16 3
1. Σκοποί ενότητας Σκοπός της ενότητας είναι να να δείξει τον τρόπο και την σημασία της κβαντοποίησης ενός σήματος ή μιας εικόνας και να κληθεί ο εκπαιδευόμενος να λύσει πρακτικές ασκήσεις. 2. Περιεχόμενα ενότητας H ενότητα αυτή περιλαμβάνει βασικές έννοιες που καλύπτουν τα ακόλουθα: Δειγματοληψία μονοδιάστατου σήματος Δειγματοληψία δισδιάστατου σήματος Ιδανικό φίλτρο Κβάντιση Ομοιόμορφος κβαντιστής Βέλτιστος κβαντιστής ελάχιστου μέσου τετραγωνικού σφάλματος Συμπεράσματα Dithering Halftoning Με τις αντίστοιχες ασκήσεις για λύση που καλύπτουν τις παραπάνω θεματικές. 4
3. Άσκησεις 3.1 1 η Άσκηση Ομοιόμορφος κβαντιστής σταθερού ή μεταβλητού ρυθμού μετάδοσης Εκτελέσατε το πρόγραμμα uniquant_1.m για να υλοποιήσετε κβαντιστή σταθερού και μεταβλητού ρυθμού. Συμπληρώστε το πρόγραμμα με δυο εντολές οι οποίες να υπολογίζουν κάθε φορά την ενέργεια των πρώτων 500 δειγμάτων του σήματος εισόδου και των υπολοίπων 500 δειγμάτων. Συγκρίνετε αυτές τις τιμές με τα αποτελέσματα που παίρνετε. Κάποιες φορές ο πρώτος κβαντιστής είναι καλύτερος, ενώ άλλες φορές ο δεύτερος είναι καλύτερος. Τι συμπέρασμα βγάζετε; 3.2 2 η Άσκηση Ομοιόμορφος κβαντιστής με σήμα εισόδου ομοιόμορφης κατανομής Να γραφτεί πρόγραμμα με το οποίο δημιουργείται μια ομοιόμορφη κατανομή 100.000 τυχαίων αριθμών στο διάστημα [-1,1] και να υπολογιστεί ο λόγος σήματος προς θόρυβο εάν περάσει από ένα ομοιόμορφο κβαντιστή με Ν=2Β στάθμες (π.χ. Ν=16 έως 256 στάθμες ή Β=4 έως 8 bits). 3.2.1 Ανάλυση Η δημιουργία ομοιόμορφης κατανομής στο διάστημα [0,1] γίνεται από τη συνάρτηση rand ( m, n ), η οποία δημιουργεί πίνακα mxn ψευδοτυχαίων αριθμών στην περιοχή αυτή. Στη γενική περίπτωση, για τη δημιουργία ομοιόμορφης κατανομής στην περιοχή [a,b] χρησιμοποιείται η σχέση: y = a + (b-a) * rand ( m, n ) ή για το συγκεκριμένο παράδειγμα: rand_unif = -1 + 2 * rand ( 1, 100000 ) 5
Η στάθμη ανακατασκευής σε σχέση με τη στάθμη μετάβασης είναι: r i =t i +q/2, όπου q είναι το μέγεθος της στάθμης. Δηλαδή, η έξοδος αλλάζει τιμή όταν η είσοδος είναι μεγαλύτερη ή ίση με το μέσον δυο διαδοχικών σταθμών κβάντισης. Όμως t i =a+iq και q=(b-a)/n ή q=(b-a)/ 2 Β. Επομένως στη συγκεκριμένη περίπτωση: r i =-1+iq+q/2. Για παράδειγμα (σύμφωνα με τις σημειώσεις θεωρίας), εάν Β=3 ή Ν=8, τότε: q=2/8=0.25-1 0 1 r 1 x r 8 t 1 t 9 y=1+x Η τυχαία τιμή x σε ποια στάθμη ανακατασκευής αντιστοιχεί; Η απόσταση από το - 1 είναι y=1+x ή για την κοντινότερη στάθμη μετάβασης iq=floor(y/q)*q ή iq=floor ((1+x)/q)*q. H κβαντισμένη τιμή ή η στάθμη ανακατασκευής είναι: ri=- 1+floor((1+x)/q)*q+q/2. Το ίδιο αποτέλεσμα θα προέκυπτε εάν εφαρμόζαμε τη σχέση: r i =round(x/q)*q+q/2. Πολλοί ταυτίζουν τις στάθμες μετάβασης με τις στάθμες ανακατασκευής, οπότε ο υπολογισμός γίνεται r i =round(x/q)*q. Η ισχύς του σήματος εισόδου υπολογίζεται με τη συνάρτηση cov(x). Η εντροπία μιας πηγής συμβόλων (π.χ. μιας πηγής που παράγει Ν στάθμες κβάντισης) υπολογίζεται από τη σχέση: N h p i log 2 p i i1 όπου pi είναι η πυκνότητα πιθανότητας για την εμφάνιση ενός συμβόλου της πηγής (δηλαδή ο αριθμός εμφανίσεων ενός συμβόλου προς το συνολικό αριθμό των συμβόλων). 6
3.2.2 Πρόγραμμα Matlab: uniquant_1.m % uniform quantizer with uniform input distribution % initialize random generator rand( state,sum(100*clock)); % 100.000 random samples uniformly distributed in [-1,1] rand_unif=-1+2*rand(1,100000); % initialize buffers for quantized samples, SNR and entropy num=100000; % number of samples rand_quant=zeros(1,num); SNR=zeros(5,1); entropy=zeros(5,1); % main loop for different number of quantization levels [-1,1] for i=4:8 N=2^i; q=2/n; % for uniform quantizers for j=1:num % i represents the number of bits % N is the number of levels % q is the actual quantization length for end rand_quant(j)=-1+floor((1+rand_unif(j))/q)*q+q/2; % estimation of variance for quantization error sigma_err=cov(rand_unif-rand_quant); % estimation of variance of input signal sigma_inp=cov(rand_unif); % estimation of SNR in db SNR(i-3)=10*log10(sigma_inp/sigma_err); % estimation of entropy 7
p=hist(rand_quant,n); p=p/num ; logp=-log2(p+eps); % frequency of occurrence % probability density % to avoid zero value entropy(i-3)=p*logp ; end % results SNR entropy (α) Τρέξτε το πρόγραμμα και σημειώστε τις τιμές στον παρακάτω πίνακα. Τι παρατηρείτε; (β) Αντί για την rand_quant(j)=-1+floor((1+rand_unif(j)/q)*q+q/2, τοποθετείστε στο πρόγραμμα την rand_quant(j)=round(ran_uni_sam(j)/delta)*delta. Συμπληρώστε το νέο πίνακα τιμών. Τι παρατηρείτε σε σχέση με την προηγούμενη περίπτωση; 3.2.3 Πίνακας 1 ΠΙΝΑΚΑΣ 1 N B SNR (db) ΕΝΤΡΟΠΙΑ 16 4 32 5 64 6 128 7 256 8 8
3.2.4 Πινακας 2 ΠΙΝΑΚΑΣ 2 N B SNR (db) ΕΝΤΡΟΠΙΑ 16 4 32 5 64 6 128 7 256 8 3.3 3 η Άσκηση Ομοιόμορφος κβαντιστής με σήμα εισόδου Gaussian κατανομής Να γραφτεί πρόγραμμα με το οποίο να δημιουργείται Gaussian κατανομή με μ=0 και σ=1, 100000 τυχαίων αριθμών και να υπολογιστεί ο λόγος σήμα προς θόρυβο, εάν περάσει από ένα ομοιόμορφο κβαντιστή με Ν=2 Β στάθμες (Β=4 έως 8 bits). 9
3.3.1 Ανάλυση p s (x) q x r 1 0 r N t 1 =-α t 2 t N-1 t N =α Οι στάθμες ενός ομοιόμορφου κβαντιστή καλύπτουν την περιοχή [-α,α]. Άρα: 2α=Νq, όπου το βήμα κβάντισης q πρέπει να οριστεί έτσι ώστε η μέση τιμή του τετραγωνικού σφάλματος να είναι ελάχιστη. Εάν, t 1 =-α, t 2 =-α+q,, t N- 1=α-q, t N =α και p s ( x) 1 exp 2 2 2 x p s ( x) 1 ( x ) exp 2 2 2 2 2 ή Εάν α=1, τότε q=2/ν, οι είσοδοι με τιμές <= -1 θα κβαντιστούν στο r 1 =-1+q/2, ενώ οι τιμές >=1 στο r N =1-q/2. 3.3.2 Πρόγραμμα Matlab: uniquant_2.m % uniform quantizer with Gaussian input distribution % initialize random generator randn( state,sum(100*clock)); 10
variance=1 % generate 100000 Gaussian numbers with mean=0 and rand_norm=randn(1,100000); entropy % initialize buffers for quantized samples, SNR and alpha=1; num=100000; % number of samples rand_quant=zeros(1,num); SNR=zeros(5,1); entropy=zeros(5,1); % main loop for different number of quantization levels [-1,1] for i=4:8 N=2^i; q=2/n; % i represents the number of bits % N is the number of levels % q is the actual quantization length for % for uniform quantizers for j=1:num if rand_norm(j)<-alpha rand_quant(j)=-alpha+ q/2; elseif rand_norm(j)>alpha else rand_quant(j)=alpha+floor((alpha+rand_norm(j))/q)*q+q/2; end end rand_quant(j)=alpha-q/2; % estimation of variance for quantization error sigma_err=cov(rand_norm-rand_quant); % estimation of variance of input signal sigma_inp=cov(rand_norm); % estimation of SNR in db 11
SNR(i-3)=10*log10(sigma_inp/sigma_err); % estimation of entropy p=hist(rand_quant,n); p=p/num ; logp=-log2(p+eps); % frequency of occurrence % probability density % to avoid zero value entropy(i-3)=p*logp ; end % results SNR entropy (α) Τρέξτε το πρόγραμμα και σημειώστε τις τιμές στον παρακάτω πίνακα. Τι παρατηρείτε σε σχέση με την προηγούμενη άσκηση; Μπορείτε να εξηγήσετε τις ιδιαίτερα χαμηλές τιμές του SNR; (δείτε το max και min της εισόδου σε σχέση με το βήμα κβάντισης). 3.3.3 Πίνακας 3 ΠΙΝΑΚΑΣ 3 N B SNR (db) ΕΝΤΡΟΠΙΑ 16 4 32 5 64 6 128 7 256 8 12
(β) Αντί του διαστήματος [-1,1], θεωρήστε το διάστημα [α,β] όπουα =min(rand_norm) και β=max(rand_norm). Συνεπώς: q=(β-α)/ν. Διορθώστε το παραπάνω πρόγραμμα και τρέξτε το με τα νέα δεδομένα. Συμπληρώστε τον παρακάτω πίνακα και κάνετε τις παρατηρήσεις σας σε σχέση με τις δυο προηγούμενες περιπτώσεις. 3.3.4 Πίνακας 4 ΠΙΝΑΚΑΣ 4 N B SNR (db) ΕΝΤΡΟΠΙΑ 16 4 32 5 64 6 128 7 256 8 3.4 4 η Άσκηση Ομοιόμορφη κβάντιση εικόνας Να φορτωθεί η εικόνα cameraman.tif και να κβαντιστεί με ένα ομοιόμορφο κβαντιστή των 3 έως 8 bits. Να υπολογιστεί το PSNR και η εντροπία για κάθε μια περίπτωση. (α) Να σχεδιαστεί η καμπύλη mse ως προς την εντροπία (bpp). (β) Να σχεδιαστεί η καμπύλη PSNR (db) ως προς την εντροπία (bpp). Σημείωση: Ο υπολογισμός του PSNR γίνεται από τη σχέση: 255 255 PSNR 10 log 10 mse όπου mse (mean square error) είναι: 13
mse 1 M N M N m1n1 I( m, n) I'( m, n) 2 I(m,n) είναι η φωτεινότητα του pixel (m,n) της αρχικής εικόνας και I (m,n) είναι η φωτεινότητα του ίδιου pixel μετά την κβάντιση. Η καμπύλη αυτή αναφέρεται ως καμπύλη παραμόρφωσης/ρυθμού μετάδοσης και δείχνει ότι όσο περισσότερα είναι τα bits κωδικοποίησης μιας ποσότητας τόσο μικρότερη είναι η παραμόρφωση. Η καμπύλη αυτή αναφέρεται ως καμπύλη αντικειμενικής ποιότητας/ρυθμού μετάδοσης και δείχνει ότι όσο περισσότερα είναι τα bits κωδικοποίησης μιας ποσότητας τόσο καλύτερη είναι η αντικειμενική της ποιότητα. Επειδή το PSNR εξαρτάται από δυνάμεις του τετραγώνου, οι οποίες δεν ανταποκρίνονται στη 14
φυσιολογία του ανθρώπινου ματιού, δεν εκφράζει απόλυτα και την υποκειμενική ποιότητα. Μια εικόνα που έχει κατά τι μεγαλύτερο PSNR δεν σημαίνει ότι και καλύτερη υποκειμενική ποιότητα. 3.5 5 η Άσκηση Βέλτιστος κβαντιστής Lloyd-Max Δημιουργείστε μια ομοιόμορφη κατανομή 100000 δειγμάτων στην περιοχή [-1,1] και εφαρμόστε βέλτιστο κβαντιστή Lloyd-Max με τη βοήθεια της συνάρτησης lloyd_max(x,a,b,n,k). Για αριθμό επαναλήψεων k=20 και Ν=16 υπολογίστε το SNR. Δώστε τις επαναληπτικές τιμές στον παρακάτω πίνακα και συγκρίνετε το τελευταίο SNR με το αντίστοιχο του ομοιόμορφου κβαντιστή της δεύτερης άσκησης. SNR ομοιόμορφου κβαντιστή = SNR Lloyd-Max = 15
3.6 6 η Άσκηση Τεχνική dithering Να φορτωθεί η εικόνα cameraman.tif και να κβαντιστεί με 3 bits. Να υπολογιστεί το PSNR. Στη συνέχεια να εφαρμοστεί η τεχνική dithering (βλέπε σημειώσεις θεωρίας και πρόγραμμα dither.m) και να συγκριθεί το νέο PSNR. Εικόνα μετά την κβάντιση με 3 bits Εικόνα μετά την τεχνική dithering 16