ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟ ΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Κωδικοποίηση και αποκωδικοποίηση µε χρήση του H.264/MPEG-4 για βίντεο µε µία ή περισσότερες λήψεις Κωνσταντίνος Γ. Ζιάκας Επιβλέπων: Εµµανουήλ Σαγκριώτης, Αναπληρωτής Καθηγητής ΕΚΠΑ ΑΘΗΝΑ ΣΕΠΤΕΜΒΡΙΟΣ 2011
ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟ ΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Κωδικοποίηση και αποκωδικοποίηση µε χρήση του H.264/MPEG-4 για βίντεο µε µία ή περισσότερες λήψεις Κωνσταντίνος Γ. Ζιάκας Επιβλέπων: Εµµανουήλ Σαγκριώτης, Αναπληρωτής Καθηγητής ΕΚΠΑ ΑΘΗΝΑ ΣΕΠΤΕΜΒΡΙΟΣ 2011
ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Κωδικοποίηση και αποκωδικοποίση µε χρήση του H.264/MPEG-4 Κωνσταντίνος Γ. Ζιάκας Μ1076 ΕΠΙΒΛΕΠΩΝ: Εµµανουήλ Σαγκριώτης, Αναπληρωτής Καθηγητής ΕΚΠΑ
ΠΕΡΙΛΗΨΗ Η παρούσα διπλωµατική εργασία περιγράφει την εξέλιξη του προτύπου H.264/MPEG-4 στον χρόνο. ίνει ορισµούς και χρήσιµες εφαρµογές που αφορούν το H.264/MPEG-4. Στο δεύτερο κεφάλαιο δίνονται κάποιες κωδικοποιήσεις και αποκωδικοποιήσεις βίντεο µε µία λήψη (ουσιαστικά µε µία κάµερα) µε το πρότυπο H.264/MPEG-4 µε την χρήση του lencod.exe, encoder.cfg,ldecod.exe,decoder.cfg. Στο τρίτο κεφάλαιο δίνονται αντίστοιχες κωδικοποιήσεις και αποκωδικοποιήσεις αλλά µε χρήση multiview βίντεο (δηλαδή µε παραπάνω από µία κάµερες). ΘΕΜΑΤΙΚΗ ΠΕΡΙΟΧΗ: Κωδικοποίση µε το H.264/MPEG-4. ΛΕΞΕΙΣ ΚΛΕΙ ΙΑ: H.264/MPEG-4, multiview video, κωδικοποίηση και αποκωδικοποίηση βίντεο, βίντεο profiles, επίπεδα H.264.
ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΟΛΟΓΟΣ... 12 ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟ H.264/MPEG-4... 13 1.1 Εισαγωγικές έννοιες για το H.264/MPEG-4... 13 1.2 Επίπεδα του H.264 (H.264 Layers)... 14 1.3 H.264 και MPEG-4 Ιστορική εξέλιξη... 15 1.3.1 Η δηµιουργία του H.264/MPEG-4... 15 1.3.2 Οι βελτιώσεις του H.264/MPEG-4... 17 1.4 Υποδειγµατοληψία χρώµατος (chroma subsampling)... 18 1.4.1 4:4:4... 19 1.4.2 4:2:2... 20 1.4.3 4:1:1... 21 1.4.4 4:2:0... 22 1.5 Εκτίµηση κόστους και κίνησης (motion estimation και motion compensation)... 23 1.6 H.264/MPEG-4 Profiles... 24 1.6.1 Baseline Profile... 24 1.6.1.1 Baseline Profile slices... 25 1.6.1.2 Inter prediction/intra prediction... 25 1.6.1.3 CAVLC... 26 1.6.2 Main Profile... 28 1.6.2.1 B-slices... 28 1.6.2.2 Πρόβλεψη µε βάρη... 29 1.6.2.3 Interlaced βίντεο... 30 1.6.2.4 CABAC... 31 1.6.3 Extended Profile... 32
1.6.3.1 SP και SIslices... 32 1.6.3.2 Data partitioning slices... 33 1.6.3 Υπόλοιπα Profiles... 34 1.7 Εργαλεία του H.264/MPEG-4... 37 ΚΕΦΑΛΑΙΟ 2 ΥΛΟΠΟΙΗΣΗ ΠΑΡΑ ΕΙΓΜΑΤΩΝ ΓΙΑ ΤΟ H.264/MPEG-4 ΜΕ ΧΡΗΣΗ ΜΙΑΣ ΚΑΜΕΡΑΣ 39 2.1 Εισαγωγή... 39 2.2 Χρήσιµα στοιχεία για την κωδικοποίηση και αποκωδικοποίηση... 39 2.2.1 Όνοµα βίντεο κατά την κωδικοποίηση και παραγόµετα αποτελέσµατα... 40 2.2.2 Frames κατά την κωδικοποίηση... 40 2.2.3 Profile του βίντεο... 41 2.2.4 Άλλες µεταβλητές κατά την κωδικοποίηση... 41 2.2.5 Στοιχεία για την αποκωδικοποίηση... 42 2.3 Αποτελέσµατα κωδικοποιήσεων µε χρήση µίας κάµερας... 42 2.3.1 Akiyo_cif... 43 2.3.2 Coastguard_cif... 45 2.3.3 Bowing_cif... 47 2.3.4 Carphone_qcif... 49 2.3.5 Door_Flowers... 51 ΚΕΦΑΛΑΙΟ 3 ΤΡΕΞΙΜΑΤΑ ΓΙΑ ΠΟΛΛΑΠΛΗΣ ΘΕΑΣΗΣ ΒΙΝΤΕΟ ΜΕ ΙΑΦΟΡΑ ΜΟΝΤΕΛΑ ΑΝΑΦΟΡΑΣ... 61 3.1 Εισαγωγή για Mulitiview... 61 3.2 Χρήσιµοι ορισµοί... 61 3.3 Σηµαντικά ζητήµατα για τα multiview βίντεο... 62
3.4 Εφαρµογές των multiview βίντεο... 63 3.4.1 3-D βίντεο... 63 3.4.2 Βίντεο ελεύθερης θέασης... 64 3.4.3 Απεικόνιση για µεγαλύτερη ευκρίνεια... 64 3.5 Βασικά στοιχεία για την κωδικοποίηση και αποκωδικοποίηση multiview βίντεο... 65 3.6 Μοντέλα αναφοράς... 67 3.6.1 1 ο Μοντέλο αναφοράς... 67 3.6.2 2 ο µοντέλο αναφοράς... 69 3.6.3 3 ο µοντέλο αναφοράς... 70 3.6.4 4 ο µοντέλο αναφοράς... 71 3.7 Door_Flowers multiview... 73 3.7.1 Door_Flowers µε 1 ο Μοντέλο αναφοράς... 74 3.7.2 Door_Flowers µε 2 ο µοντέλο αναφοράς... 77 3.7.3 Door_Flowers µε 3 ο µοντέλο αναφοράς... 80 3.7.4 Door_Flowers µε 4 ο µοντέλο αναφοράς... 83 3.8 Leaving_Laptop multiview... 86 3.7.1 Leaving_Laptop µε 1 ο Μοντέλο αναφοράς... 87 3.7.2 Leaving_Laptop µε 2 ο µοντέλο αναφοράς... 90 3.7.3 Leaving_Laptop µε 3 ο µοντέλο αναφοράς... 93 3.7.4 Leaving_Laptop µε 4 ο µοντέλο αναφοράς... 96 ΚΕΦΑΛΑΙΟ 4 ΕΠΙΛΟΓΟΣ... 99 ΑΝΑΦΟΡΕΣ... 100
ΚΑΤΑΛΟΓΟΣ ΣΧΗΜΑΤΩΝ Σχήµα 1.1: Τυπικό διάγραµµα κωδικοποιητή για το πεδίο VCL του H.264/MPEG-4... 96 Σχήµα 1.2: Η δηµιουργία του H.264/MPEG-4... 96 Σχήµα 1.3: Παράσταση µίας εικόνας και οι συνιστώσες Y,U και V κατά σειρά... 96 Σχήµα 1.4: Υποδειγµατοληψία χρώµατος 4:4:4... 96 Σχήµα 1.5: Υποδειγµατοληψία χρώµατος 4:2:2... 96 Σχήµα 1.6: Υποδειγµατοληψία χρώµατος 4:1:1... 96 Σχήµα 1.7: Υποδειγµατοληψία χρώµατος 4:2:0... 96 Σχήµα 1.8: Κωδικοποίηση block µετασχηµατισµένων συντελεστών... 96 Σχήµα 1.9: Παράδειγµα πρόβλεψης σε ένα B macroblock... 96 Σχήµα 1.10: Reordering σάρωση... 96 Σχήµα 1.11: Παράδειγµα µίας ακολουθίας... 96 Σχήµα 1.12: Σχέσεις µεταξύ Baseline, Main και Extended Profiles... 96 Σχήµα 1.13: Hardware και Software που στηρίζεται στο H.264/MPEG-4... 96 Σχήµα 2.1: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο akiyo_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα)... 96 Σχήµα 2.2: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο container_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα)... 96 Σχήµα 2.3: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο bowing_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα)... 96 Σχήµα 2.4: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο carphone_qcif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα)... 96 Σχήµα 2.5: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam01... 96 Σχήµα 2.6: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam02... 96 Σχήµα 2.7: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam03... 96
Σχήµα 2.8: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam04... 96 Σχήµα 2.9: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam05... 96 Σχήµα 2.10: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam06... 96 Σχήµα 2.11: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam07... 96 Σχήµα 2.12: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam08... 96 Σχήµα 2.13: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam09... 96 Σχήµα 2.14: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam10... 96 Σχήµα 2.15: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam11... 96 Σχήµα 2.16: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam12... 96 Σχήµα 2.17: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam13... 96 Σχήµα 2.18: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam14... 96 Σχήµα 2.19: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam15... 96 Σχήµα 2.20: Συνιστώσες SNR Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam16... 96 Σχήµα 3.1: Παράδειγµα µοντέλου αναφοράς ανά 8 πλάνα (frames)... 96 Σχήµα 3.2: 3-D γυαλιά απαραίτητα για να δει κάποιος ένα 3-D βίντεο... 96 Σχήµα 3.3: 1 ο reference mode... 96 Σχήµα 3.4: 2 ο reference mode... 96
Σχήµα 3.5: 3 ο reference mode... 96 Σχήµα 3.6: 4 ο reference mode... 96 Σχήµα 3.7: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 1 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.8: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 2 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.9: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 3 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.10: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 4 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.11: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 1 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.12: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 2 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.13: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 3 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96 Σχήµα 3.14: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 4 ο reference mode. Με το µπλε το SNR της Y συνιστώσας, µε κόκκινο της U συνιστώσας και µε πράσινο της V... 96
ΠΡΟΛΟΓΟΣ Η παρούσα εργασία αποτελεί την διπλωµατική µου εργασία, κατά την παραµονή µου στο τµήµα Πληροφορικής και Τηλεπικοινωνιών σαν µεταπτυχιακός φοιτητής της 5 ης κατεύθυνσης (Επεξεργασία Σήµατος για Επικοινωνίες και Πολυµέσα). Σε αυτό το σηµείο θα ήθελα να ευχαριστήσω τον αναπληρωτή καθηγητή Εµµανουήλ Σαγκριώτη για την όλη συνεργασία στον καιρό περάτωσης της διπλωµατικής µου εργασίας. Επίσης θα ήθελα να ευχαριστήσω τους γονείς µου για την βοήθεια και την στήριξη που µου έχουν προσφέρει πολλά χρόνια. Ο συγγραφέας, Κωνσταντίνος Ζιάκας
ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΟ Η.264/MPEG-4 1.1. Εισαγωγικές έννοιες για το H.264/MPEG-4 To Η.264/MPEG-4 είναι ένα πρότυπο που χρησιµοποιείται για συµπίεση βίντεο, και είναι ένα από τα πιο χρήσιµα πρότυπα για εγγραφή, συµπίεση και διαµοιρασµό υψηλής ευκρίνειας βίντεο (high definition video). Η τελική εργασία για το H. 264/MPEG-4 είναι το Part 10 στις διάφορες εκδόσεις και ολοκληρώθηκε το 2003. Το H.264/ MPEG-4 είναι ένα πρότυπο που βασίζεται σε προσανατολισµένη κίνηση (motion compensated) που αναπτύχθηκε από την ITU-T Video Coding Experts (VCEG) µαζί µε την ISO/IEC Moving Pictures Experts Group (MPEG). Το αποτέλεσµα αυτής της κοινής σύµπραξης είναι γνωστό σαν Joint Video Team (JVT). Βασικές χρήσεις που έχει το H.264/MPEG-4 είναι οι Blu-Ray δίσκοι αφού όλες οι συσκευές που µπορούν να «παίζουν» Blu-Ray δίσκοι θα πρέπει να µπορούν να αποκωδικοποιήσουν το H.264. Επίσης χρησιµοποιείται για µετάδοση σε βίντεο του διαδικτύου από site όπως Vimeo, Youtube,itunes Store και σε άλλα. Άλλες χρήσεις είναι για µετάδοση σήµατος τηλεόρασης µέσω δορυφόρου, σε υπηρεσίες καλωδιακής τηλεόρασης και ίσως το πιο σηµαντικό όλων για ζωντανή µετάδοση τηλεµετάδοσης (real time videoconferencing). Κ.Ζιάκας 13
1.2. Επίπεδα του H264 (H264 Layers) To H264 αποτελείται από δύο επίπεδα: ένα επίπεδο αφαίρεσης δικτύου (network abstraction layer NAL) και από ένα επίπεδο κωδικοποίησης βίντεο (video coding layer VCL). Το επίπεδο αφαίρεσης δικτύου (NAL) είναι ένα επίπεδο του H.264 Video Coding Standard. Ο κύριος στόχος αυτού του επιπέδου είναι να παρέχει µία «φιλική για το δίκτυο (network-friendly)» αναπαράσταση βίντεο τόσο για εφαρµογές που έχουν οµιλία όσο και για εφαρµογές που είναι για αποθήκευση ή απλή µετάδοση. Το επίπεδο NAL έχει πετύχει σηµαντική βελτίωση στην αποδοτικότητα του ποσοστού παραµόρφωσης (rate-distortion efficiency) σε σχέση µε ότι ίσχυε. Οι µονάδες του NAL ταξινοµούνται σε VCL και non-vcl NAL µονάδες. Οι VCL µονάδες περιέχουν τα δεδοµένα που αντιπροσωπεύουν τις τιµές των δειγµάτων στις εικόνες και οι non-vcl NAL µονάδες περιλαµβάνουν οποιεσδήποτε συµπληρωµατικές πληροφορίες καθώς και διάφορες συµπληρωµατικές πληροφορίες όπως χρονισµό που µπορούν να ενισχύσουν την χρηστικότητα του αποκωδικοποιήµενου σήµατος βίντεο και δεν είναι απαραίτητες για την αποκωδικοποίηση των τιµών των δειγµάτων που έχουµε στην VCL µονάδα. Κ.Ζιάκας 14
Σχήµα 1.1: Τυπικό διάγραµµα κωδικοποιητή για το πεδίο VCL του H.264/MPEG-4. 1.3. H.264 και MPEG-4 Ιστορική εξέλιξη Η πρώτη έκδοση του H.264/MPEG-4 εµφανίστηκε το 2003. Σε αυτή την ενότητα θα παρουσιαστούν τόσο κάποιες εκδόσεις πριν από την εµφάνιση του H.264, όσο και το πως εξελίχθηκε το H.264 µε κάποιες βελτιώσεις του. 1.3.1. Η δηµιουργία του Η.264/MPEG-4 1993: Έχουµε την έκδοση του MPEG-4. Πρώτα αποτελέσµατα µε το H-263. 1995: To MPEG-4 ζητάει προτάσεις για κωδικοποιητές βίντεο. Το H-263 διαλέχτηκε σαν κωδικοποιητής βίντεο. 1998: Κλήση για προτάσεις για το H.26L. Κ.Ζιάκας 15
1999: Το MPEG-4 Visual εκδόθηκε. Έχουµε την έκδοση επίσης και του Initial Test Model (TMI) του H.26L. 2000: To MPEG καλεί για προτάσεις για προηγµένους κωδικοποιητές βίντεο. 2001: Έχουµε την δεύτερη έκδοση του MPEG-4 Visual. Το H.26L κρατήθηκε σαν βάση για το το MPEG-4. 2002: Έχουµε διάφορες τροποποιήσεις µε τις οποίες εκδίδεται το MPEG-4 Visual Edition 2. 2003: Έχουµε την έκδοση του H.264/MPEG-4 Part 10. Σχήµα 1.2: Η δηµιουργία του H.264/MPEG-4. Κ.Ζιάκας 16
1.3.2. Οι βελτιώσεις του H.264/MPEG-4 Μετά από το 2003 το Η.264/MPEG-4 συνέχισε να βελτιώνεται. Ας δούµε αυτές τις βελτιώσεις: Μάιος 2003: Πρώτη έκδοση του H.264/MPEG-4 µε τα Baseline, Main και Extended Profiles να περιλαµβάνονται. Μάιος 2004: Νέα έκδοση µε διορθώσεις πολλών µικρών λαθών. Μάρτιος 2005: Η πρώτη µεγάλη εξέλιξη που περιλαµβάνει τα High, High 10, High 4:2:2 και High 4:4:4 Profiles. Σεπτέµβριος 2005: Νέα έκδοση µε διορθώσεις πολλών µικρών λαθών. Ιούνιος 2006: Εξέλιξη µε την αποµάκρυνση του High 4:4:4 Profile. Την ίδια περίοδο επίσης είχαµε την ένταξη στο H.264/MPEG-4 περισσότερων µεθόδων υποδειγµατοληψίας χρώµατος. Απρίλιος 2007: Εξέλιξη µε την ένταξη Intra-Profiles: High 10 Intra, High 4:2:2 Intra, High 4:4:4 Intra και CAVLC 4:4:4 Intra Profiles. Νοέµβριος 2007: Μεγάλη εξέλιξη στο H.264/MPEG-4 µε την ένταξη scalable profiles όπως τα Scalable Baseline, Scalable High και Scalable High Intra Profiles. Ιανουάριος 2009: Νέα έκδοση µε διορθώσεις πολλών µικρών λαθών. Μάρτιος 2009: Μεγάλες εξελίξεις για το H.264/MPEG-4. Αρχικά έχουµε ένταξη νέου Profile του Constrained Baseline Profile και έπειτα µε την ένταξη του multiview video coding (MVC). Μάρτιος 2010: Έχουµε την ένταξη νέου profile αποκλειστικά για το MVC του Stereo High Profile. Όλα αυτά τα Profiles θα τα δούµε αναλυτικότερα σε µετέπειτα ενότητα αυτού του κεφαλαίου. Κ.Ζιάκας 17
1.4. Υποδειγµατοληψία χρώµατος (Chroma subsampling) Σε αυτό το σηµείο είναι ενδιαφέρον να δούµε κάποια πράγµατα για την υποδειγµατοληψία χρώµατος. Κατά την παράσταση της εικόνας έχουµε 3 συνιστώσες: τις Y,U και V (παρουσιάζονται και σαν Y,C b, C r ). Η βασική συνιστώσα είναι η Y(luminance) την οποία και αντιλαµβάνεται το ανθρώπινο µάτι. Σε αυτή έχουµε και το µεγαλύτερο ποσοστό πληροφορίας που θέλουµε για την εικόνα. Στις άλλες δύο έχουµε ένα ποσοστό πληροφορίας που αφορά την «χρωµατικότητα» (chrominance) της εικόνας. Για το ποσοστό πληροφορίας που παίρνουµε από κάθε συνιστώσα µπορούµε να κοιτάξουµε το σχήµα 1.3. Σχήµα 1.3: Παράσταση µίας εικόνας και οι συνιστώσες Y,U και V κατά σειρά. Για να θεωρήσουµε υποδειγµατοληψία χρώµατος ουσιαστικά θα πρέπει να σκεφτόµαστε τις Y,U και V σαν ξεχωριστούς πίνακες µε τιµές από τα pixel της εικόνας. Κατά την υποδειγµατοληψία παίρνουµε κάποιες από αυτές τις τιµές ανάλογα µε το είδος υποδειγµατοληψίας που έχουµε διαλέξει (από ότι θα Κ.Ζιάκας 18
δούµε και αργότερα στα βίντεο που έχουν κωδικοποιηθεί έχει επιλεγεί 4:2:0 υποδειγµατοληψία). Καλό θα είναι να λαµβάνεται υπόψην ότι η συνιστώσα της φωτεινότητα είναι αυτή που λαµβάνει υπόψην το ανθρώπινο µάτι, οπότε η υποδειγµατοληψία δεν είναι πάντα ενδεδειγµένη για αυτή και µόνο αυτή την συνιστώσα. Ας δούµε τώρα κάποια από τα πιο βασικά είδη υποδειγµατοληψίας (για καλή κατανόηση του κάθε είδους υποδειγµατοληψίας χρώµατος έχουµε και εικόνες για µερικά από αυτά): 1.4.1. 4:4:4 Σε αυτό το είδος υποδειγµατοληψίας χρώµατος για κάθε συνιστώσα έχουµε το ίδιο ποσοστό υποδειγµατοληψίας. Χρησιµοποιείται σε σαρωτές υψηλής ευκρίνειας καθώς και στον κινηµατογράφο κατά το µοντάζ. Σχήµα 1.4: Υποδειγµατοληψία χρώµατος 4:4:4. Κ.Ζιάκας 19
1.4.2. 4:2:2 Σε αυτό το είδος υποδειγµατοληψίας χρώµατος, ενώ η Y συνιστώσα µένει αναλοίωτη οι άλλες δύο κωδικοποιούνται στο µισό από ότι ήταν αρχικά οριζόντια. Αυτό το είδος υποδειγµατοληψίας χρώµατος είναι ιδιαίτερα διαδεδοµένο στην εγγραφή µεγάλης ευκρίνειας βίντεο. Σχήµα 1.5: Υποδειγµατοληψία χρώµατος 4:2:2. Κ.Ζιάκας 20
1.4.3. 4:1:1 Σε αυτό το είδος υποδειγµατοληψίας χρώµατος η Y συνιστώσα µένει αναλοίωτη και πάλι, αλλά οι άλλες δύο οι U και οι V κωδικοποιούνται στο ¼ σε σχέση µε το αρχικό οριζόντια. Χρησιµοποιείται σε DV, DVCAM και DVCPRO πρότυπα. Σχήµα 1.6: Υποδειγµατοληψία χρώµατος 4:1:1. Κ.Ζιάκας 21
1.4.4. 4:2:0 Αυτό το είδος υποδειγµατοληψίας χρώµατος είναι και αυτό που χρησιµοποιείται κατά βάση στα βίντεο που κωδικοποιήσαµε. Σε αυτό το είδος υποδειγµατοληψίας η Y συνιστώσα µένει αµετάβλητη αλλά οι άλλες κωδικοποιούνται τόσο οριζόντια όσο και κάθετα. Σχήµα 1.7: Υποδειγµατοληψία χρώµατος 4:2:0. Το 4:2:0 χρησιµοποιείται σε αρκετές εφαρµογές όπως στο PAL DV και DVCAM, στο HDV, στο AVCHD και AVC-Intra 50 και άλλα. Υπάρχουν και άλλα είδη υποδειγµατοληψίας χρώµατος ίσως λίγο λιγότερο διαδεδοµένα όπως το 4:1:0 ή το 3:1:1 που παρουσιάζει ενδιαφέρον λόγω της υποδειγµατοληψίας που γίνεται και στην συνιστώσα της φωτεινότητας. Αυτό το είδος χρησιµοποιείται σε εγγραφείς υψηλής ευκρίνειας. Κ.Ζιάκας 22
1.5. Εκτίµηση κίνησης και κόστους (motion estimation and motion compensation) Το motion compensation και motion estimation είναι ουσιαστικά δύο τεχνικές που εφαρµόστηκαν στους κωδικοποιητές του H.264/MPEG-4 που και οι δύο είχαν ως αποτέλεσµα την βελτίωση της κωδικοποίησης του προτύπου. Ας δούµε συνοπτικά µερικά πράγµατα για το καθένα: Motion compensation είναι µία αλγοριθµική τεχνική που εφαρµόστηκε στην κωδικοποίηση δεδοµένων για συµπίεση βίντεο. Το motion compensation ουσιαστικά περιγράφει µία εικόνα σαν µετασχηµατισµό από τo πλάνο αναφοράς (reference frame) στο τωρινό πλάνο (current frame). Όταν οι επόµενες εικόνες θα µπορούν να συντίθονται από εικόνες που ήδη έχουν συγκριθεί και βρεθεί ότι έχουν ελάχιστες διαφορές θα µπορούµε να έχουµε πολύ καλύτερα αποτελέσµατα στην συµπίεση µας. Αυτός είναι ο ρόλος του motion compensation στο H.264/MPEG-4. To motion estimation είναι η διαδικασία στην οποία θα καθορίζονται διανύσµατα κίνησης από ένα προηγούµενο πλαίσιο µε το τωρινό. Αυτό το διάνυσµα κίνησης ουσιαστικά θα µας δείχνει τις διαφορές µεταξύ πλαισίων και έτσι µπορούµε να κρατάµε µόνο την διαφορά και όχι όλο το πλαίσιο. Συνεπώς µειώνεται πολύ ο χώρος που χρειαζόµαστε για αποθήκευση. Οπότε σαν αποτέλεσµα τόσο του motion compensation όσο και του motion estimation είναι η καλύτερη αποθήκευση και συµπίεση της κωδικοποιηµένης ακολουθίας βίντεο που έχουµε. Κ.Ζιάκας 23
1.6. H.264/MPEG-4 Profiles To Η.264 έχει καθορίσει κάποια Profiles, τα οποία ανάλογα µε την επιλογή τους, επιτελούν και διάφορες συναρτήσεις κατά την εκτέλεση τους. Τα πιο σηµαντικά Profiles είναι το Baseline, το Extended και τα Main Profile. Στο Baseline και στο Extended Profile ιδιαίτερο ενδιαφέρον έχουν οι συναρτήσεις CAVLC και CABAC που χρησιµοποιούνται αντίστοιχα. Σε αυτή την ενότητα θα παρουσιάσουµε και τα 17 Profiles που µπορούν να χρησιµοποιηθούν από το H.264. 1.6.1. Baseline Profile To baseline profile υποστηρίζει κωδικοποιηµένες σειρές που αποτελούνται από I και P κοµµάτια (Ι και P slices). Τα I κοµµάτια περιέχουν intra-coded macroblocks (ΜΒ), στα οποία περιοχές φωτεινότητας 16Χ16 ή 4Χ4 και περιοχές χρώµατος 8Χ8 κωδικοποιούνται από προηγούµενα δείγµατα του ίδιου κοµµατιού. Τα P κοµµάτια περιέχουν intra-coded, inter-coded macroblocks ή macroblock που έχουν προσπεραστεί. Τα inter-coded ΜΒ σε ένα P κοµµάτι έχουν προβλεφθεί από έναν αριθµό προηγούµενων κωδικοποιηµένων εικόνων, έχοντας χρησιµοποιήσει MC (motion compensation). Μετά την πρόβλεψη τα υπολοιπόµενα στοιχεία από κάθε MB µετατρέπονται βασιζόµενα σε ένα DCT µετασχηµατισµό (integer transform) και µετά κβαντίζονται. Οι κβαντισµένοι συντελεστές αναδιατάσσονται και τα στοιχεία σύνταξης κωδικοποιούνται «εντροπικά». Αυτή η εντροπική κωδικοποίηση για τους συντελεστές στο baseline profile, γίνεται χρησιµοποιώντας CAVLC. Όλα τα άλλα στοιχεία σύνταξης που δεν έχουν υποστεί την ίδια διαδικασία κωδικοποιούνται µε σταθερού µήκους κωδικοποίηση. Οι κβαντισµένοι συντελεστές κλιµακώνται, αντιστρέφονται, αναδοµούνται και έπειτα αποθηκεύονται για µελλοντική χρήση από intra-coded ή inter-coded MB. Κ.Ζιάκας 24
1.6.1.1. Baseline profile slices Έχει ιδιαίτερο ενδιαφέρον να δούµε τι κοµµάτια χρησιµοποιούνται στο baseline profile και αντίστοιχα στα επόµενα 2 βασικά profile για το H.264. Στο baseline profile έχουµε µόνο I ή/και P κοµµάτια. εν έχουµε τα διπλής κατεύθυνσης B καθόλου. Ένα I κοµµάτι περιέχει µόνο intra-coded MB, το οποίο έχει κωδικοποιηθεί χρησιµοποιώντας µόνο πληροφορία από το προηγούµενο I αν έχει υπάρξει. Ένα P κοµµάτι περιέχει inter-coded πληροφορία, χρησιµοποιώντας δείγµατα που έχουν ήδη κωδικοποιηθεί. Στο baseline profile µπορούµε επίσης να έχουµε και την χρήση των λεγόµενων «οµάδων κοµµατιών»(slices groups). Σε αυτές τις οµάδες έχουµε ένα υποσύνολο MB, τα οποία µπορεί να περιέχουν και παραπάνω από ένα κοµµάτι. Αυτό βοηθάει αρκετά τόσο των κωδικοποίηση όσο και την αποκωδικοποίηση. Την κωδικοποίηση γιατί υπάρχει µεγαλύτερη ελευθερία κατά την κωδικοποίηση των MB, κάτι το οποίο ισχύει και για την αποκωδικοποίηση. Απλά για την αποκωδικοποίηση θα πρέπει να έχουµε προσέξει κατά την κωδικοποίηση να τοποθετήσουµε κατάλληλα σηµάδια στα MB ώστε να γίνει σωστά, χωρίς επικάλυψη. 1.6.1.2. Inter prediction/intra-prediction Έχουµε δει µέχρι αυτό το σηµείο αρκετές φορές τις έννοιες inter-coded και intra-coded. Καλό θα είναι να αναφέρουµε τις έννοιες αυτές καλύτερα ώστε να είναι δυνατόν να συνδυαστούν τόσο µε προηγούµενα κοµµάτια, όσο και µε επόµενα για τα extended και main profile, αφού ισχύουν παρόµοια πράγµατα. Κατά το inter-prediction έχουµε ουσιαστικά ένα µοντέλο πρόβλεψης για ένα frame από προηγούµενα frame ή frames που έχουν ήδη κωδικοποιηθεί για το ίδιο βίντεο. ιαφορές από άλλα profiles βρίσκονται στο γεγονός ότι εδώ Κ.Ζιάκας 25
έχουµε µία ευρύτατα από µεγέθη block που χρησιµοποιούνται (από 16Χ16 ως και 4Χ4) καθώς και στα διανύσµατα κίνησης που χρησιµοποιούµε. Αντίστοιχα intra-prediction είναι το µοντέλο πρόβλεψης όπου βάση ήδη κωδικοποιηµένα frames προβλέπουµε κωδικοποίηση που θα χρειαστεί για επόµενα. 1.6.1.3. CAVLC Το CAVLC είναι τα αρχικά για το context-based adaptive variable length encoding. Είναι µία τεχνική ιδιαίτερα σηµαντική για την κωδικοποίηση baseline profile, αλλά και για τα υπόλοιπα profiles, αφού αποτελούν υπερσύνολο του baseline. Το CAVLC είναι µία µέθοδος για κωδικοποίηση υπολοιπόµενων, zig-zag και 4Χ4 ή 2Χ2 blocks των συντελεστών µετασχηµατισµού. Το CAVLC είναι σχεδιασµένο ώστε να εκµεταλλεύεται τα πλεονεκτήµατα των 4Χ4 κβανισµένων block: 1) Μετά από την πρόβλεψη, µετασχηµατισµό και κβάντιση το block αποτελείται κυρίως από µηδενικά. Έτσι το CAVLC χρησιµοποιεί runlength κωδικοποίηση ώστε να µπορέσει να οµαδοποιήσει αυτά τα µηδενικά. 2) Οι υψηλότεροι συντελεστές µετά το zig-zag και πέρα από τα µηδενικά είναι +-1 και έτσι το CAVLC προσπαθεί να τα παραστήσει µε ένα πιο συµπαγή τρόπο. 3) Ο αριθµός των µη µηδενικών σε γειτονικά block πολλές φορές συσχετίζεται. Έτσι για τον αριθµό των συντελεστών χρησιµοποιείται ένας look-up πίνακας για να µην υπάρχει ο συσχετισµός αυτός. 4) Το πλήθος των µη µηδενικών συντελεστών τείνει να είναι µεγαλύτερος στην αρχή του πίνακα. Ο CAVLC προσπαθεί να το κάνει προς συµφέρον του προσαρµόζοντας τον look-up πίνακα. Κ.Ζιάκας 26
Η κωδικοποίηση στον CAVLC ενός block µετασχηµατισµένων συντελεστών πηγαίνει ως ακολούθως: 1) Κωδικοποίηση του αριθµού των συντελεστών. 2) Κωδικοποιείται ότι υπολείπεται. 3) Κωδικοποίηση του επιπέδου όλων των µη µηδενικών συντελεστών. 4) Κωδικοποίση του συνολικού αριθµού των µηδενικών πριν από τον τελευταίο συντελεστή. 5) Κωδικοποίηση όλων των µηδενικών. Σχήµα 1.8 : Κωδικοποίηση block µετασχηµατισµένων συντελεστών. Κ.Ζιάκας 27
1.6.2. Main Profile Κατάλληλες εφαρµογές για το Main Profile περιλαµβάνουν (αλλά δεν περιορίζονται σε αυτές) την µετάδοση σήµατος για ψηφιακή τηλεόραση και για αναλογικό σήµα. Το Main Profile είναι κατά ένα σηµείο υπερσύνολο του Baseline Profile. Μόνο πολλαπλά slices groups και υπολειπόµενα slices δεν υποστηρίζονται στο Main Profile, αλλά υποστηρίζονται στο Baseline. Αυτό φαίνεται και στο σχήµα 1.12. Τα πρόσθετα εργαλεία που υποστηρίζονται από το Main Profile είναι τα B slices (δηλαδή διπλής κατεύθυνσης), βάρη στην πρόβλεψη, υποστήριξη interlaced βίντεο και CABAC (µία εναλλακτική µέθοδο εντροπίας που βασίζεται στην αριθµητική κωδικοποίηση). 1.6.2.1. B-slices Σε ένα inter-coded macroblock ένα B-slice µπορεί να προβλεφθεί από µία ή δύο εικόνες αναφοράς, πριν ή µετά από την εικόνα που είµαστε σε µία συγκεκριµένη χρονική στιγµή. ίνονται διάφορες επιλογές στον κωδικοποιητή, ανάλογα από τις αναφορές προβλέψεων που έχουν ήδη κρατηθεί. Στην σχήµα 1.9 βλέπουµε 3 από αυτές τις περιπτώσεις: (α) µία παλαιά και µία µελλοντική αναφορά (β) δύο παλαιές αναφορές (γ) δύο µελλοντικές αναφορές. Κ.Ζιάκας 28
Σχήµα 1.9: Παραδείγµατα πρόβλεψης σε ένα B macroblock. 1.6.2.2. Πρόβλεψη µε βάρη Η πρόβλεψη µε βάρη είναι µία µέθοδος τροποποίησης δειγµάτων σε motioncompensated δεδοµένα που αφορούν είτε P είτε B macroblock (όχι I δηλαδή). Υπάρχουν 3 είδη πρόβλεψης µε βάρη στο H.264: 1) Πρόβλεψη µε σταθερά βάρη σε ένα P macroblock. 2) Πρόβλεψη µε σταθερά βάρη σε ένα B macroblock. 3) Πρόβλεψη µε µεταβαλλόµενα βάρη σε ένα B macroblock. Στις δύο περιπτώσεις που έχουµε σταθερά βάρη, τα βάρη µεταδίδονται µε την κεφαλίδα και παραµένουν έτσι. Στην περίπτωση µε µεταβαλλόµενα βάρη, θέτουµε µεγαλύτερο βάρος αν η εικόνα αναφοράς είναι κοντά στην τρέχουσα εικόνα και µικρότερο βάρος αν είναι µακριά. Η περίπτωση της πρόβλεψης µε βάρη έχει ιδιαίτερη αξία όταν έχουµε ουσιαστικά εικόνα να «χάνεται» µέσα σε µία άλλη εικόνα (εικόνα δηλαδή στο βάθος µίας άλλης). Κ.Ζιάκας 29
1.6.2.3. Interlaced βίντεο Η αποτελεσµατική κωδικοποίηση για interlaced βίντεο απαιτεί εργαλεία τα οποία έχουν βελτιστοποιηθεί για συµπίεση πεδίων macroblock. Αν υποστηρίζεται κωδικοποίηση πεδίου αυτό φαίνεται από την κεφαλίδα κάθε slice. Η επιλογή για κωδικοποίηση πεδίου είτε κωδικοποίηση πλάνου (fieldcoding και frame-coding αντίστοιχα) µπορεί να γίνεται και στο επίπεδο του macroblock και όχι στην αρχή κεφαλίδας κάθε slice. Σε αυτή την περίπτωση για την κωδικοποίηση του interlaced βίντεο ο κωδικοποιητής θα µπορούσε να κάνει δύο πράγµατα (α) να κωδικοποιεί ανά δυάδες frame macroblocks (β) να κωδικοποιεί ανά δυάδες field macroblocks. Η πρόβλεψη σε ένα interlaced βίντεο µπορεί να γίνει µε reordering σάρωση είτε µε zig-zag σάρωση Σχήµα 1.10: Reordering σάρωση. Κ.Ζιάκας 30
1.6.2.4. CABAC CABAC είναι τα αρχικά για το context-based adaptive binary arithmetic coding. Με το CABAC µπορούµε να πετύχουµε καλή ποιότητα συµπίεσης µε (α) επιλογή πιθανοτικών µοντέλων για κάθε στοιχείο (syntax elements) βάση του περιεχοµένου του στοιχείου (β) προσαρµοστική πιθανότητα βάση των στατιστικών που υπάρχουν (γ) χρήση αριθµητικής κωδικοποίησης και όχι µεταβλητού µήκους. Η κωδικοποίηση δεδοµένων στο CABAC περιλαµβάνει τα ακόλουθα στάδια: 1) Το CABAC χρησιµοποιεί δυαδική αριθµητική κωδικοποίηση πράγµα που σηµαίνει ότι µόνο δυαδικά δεδοµένα κωδικοποιούνται (0 ή 1). Τα στάδια 2,3 και 4 επαναλαµβάνονται για κάθε ψηφίο. 2) Κατασκευή πιθανοτικού µοντέλου, βάση του οποίου κάθε ψηφίο θα καθορίζεται σαν 0 ή 1. 3) Αριθµητική κωδικοποίηση, όπου κάθε ψηφίο βάση του πιθανοτικού µοντέλου που έχει κατασκευαστεί κωδικοποιείται. 4) Κάθε φορά που έχουµε κωδικοποίηση ενός ψηφίου θα έχουµε και ανανέωση του πιθανοτικού µοντέλου, βάση των νέων στοιχείων που υπάρχουν. Κ.Ζιάκας 31
1.6.3. Extended Profile Το Extended Profile (γνωστό και Χ profile) είναι ιδιαίτερα χρήσιµο για εφαρµογές όπως η αναπαραγωγή βίντεο στο διαδίκτυο (video streaming). Είναι υπερσύνολο του Baseline Profile, όπως βλέπουµε και στο σχήµα 1.12 (σε αντίθεση µε το Main Profile που δεν έχει όλα τα στοιχεία του Baseline Profile). Παρουσιάζει επίσης χαρακτηριστικά που είδαµε στο Main Profile, όπως τις στάθµες πρόβλεψης, το Interlaced βίντεο, τα B-slices. Παρουσιάζει επίσης τα SP, SI slices και slices διαµοιρασµού δεδοµένων που βοηθούν στην ελαχιστοποίηση του λάθους. 1.6.3.1. SP και SI slices Τα SP και SI slices είναι ειδικά τροποποιηµένα κοµµάτια, τα οποία επιτρέπουν αποτελεσµατική εναλλαγή µεταξύ µεταδόσεων βίντεο και αποτελεσµατική πρόσβαση στον αποκωδικοποιητή. Μία συνηθισµένη απαίτηση σε µία µετάδοση βίντεο, είναι ο αποκωδικοποιητής του βίντεο να µπορεί να εναλλάσσεται µεταξύ µία ή παραπάνω από µία ακολουθίες για κωδικοποίηση. Για παράδειγµα, το ίδιο βίντεο µπορεί να κωδικοποιείται σε διάφορους ρυθµούς µετάδοσης, αλλά ο αποκωδικοποιητής θα πρέπει να µπορεί να αποκωδικοποιήσει την ακολουθία βίντεο µε το καλύτερο δυνατό τρόπο. Σχήµα 1.11: Παράδειγµα µίας ακολουθίας. Κ.Ζιάκας 32
1.6.3.2. Data partitioning slices Τα κωδικοποιηµένα δεδοµένα, τα οποία συνθέτουν ένα slice τοποθετούνται σε 3 ξεχωριστά τµήµατα (Α,Β,C), που το καθένα περιέχει ένα υποσύνολο του κωδικοποιηµένου slice. Το A τµήµα θα περιέχει το slice της κεφαλίδας καθώς και τα δεδοµένα της κεφαλίδας για κάθε macroblock στο slice. Το B τµήµα περιέχει τα υπολειπόµενα κωδικοποιηµένα δεδοµένα που έχουν µείνει από τα Intra και SI slices. Τα C τµήµα περιέχει τα υπολοιπόµενα κωδικοποιηµένα δεδοµένα που έχουν µείνει από τα inter κωδικοποιηµένα macroblocks. Κάθε τµήµα µπορεί να τοποθετηθεί ξεχωριστά σε µία NAL ακολουθία και να µεταδοθεί ξεχωριστά. Το A τµήµα είναι το πιο σηµαντικό, αφού αν χαθεί θα είναι αδύνατο να αποκωδικοποιηθεί το slice χωρίς λάθος. Τα B και C τµήµατα µπορούν κάθε φορά να αποκωδικοποιούνται παράλληλα µε το A και έτσι να γίνεται σωστά η αποκωδικοποίηση µε ελάχιστο λάθος. Σχήµα 1.12: Σχέσεις µεταξύ Baseline, Main και Extended Profiles. Κ.Ζιάκας 33
1.6.4. Υπόλοιπα Profiles Constrained Baseline Profile (CBP) Χρησιµοποιείται κυρίως για εφαρµογές χαµηλού κόστους που αφορούν είτε τηλεδιασκέψεις είτε εφαρµογές κινητής τηλεφωνίας. Έχει κάποια κοινά χαρακτηριστικά µε τα Baseline, Main και High Profile. High Profile Tο High Profile χρησιµοποιείται κυρίως για µεταδόσεις και αποθηκεύσεις σε δίσκους, ιδιαίτερα για υψηλής ευκρίνειας µεταδόσεις που απαιτούν υψηλό ποσοστό αποθήκευσης (για παράδειγµα αυτό είναι το πρότυπο το οποίο χρησιµοποιούν οι Blu Ray δίσκοι και DVB HDTV). High 10 Profile (Hi10P) Αυτό το Profile έχει άµεση σχέση µε το High Profile. Προσθέτει στο High Profile 10 bit ανά δείγµα για µεγαλύτερη ακρίβεια. High 4:2:2 Profile (Hi422P) Αυτό το πρότυπο χρησιµοποιείται κυρίως για εφαρµογές που χρησιµοποιούν interlaced βίντεο. Βρίσκεται σε άµεση σχέση µε το High 10 Profile και υποστηρίζει 4:2:2 υποδειγµατοληψία χρώµατος και 10 bit ανά δείγµα για µεγαλύτερη ακρίβεια. Κ.Ζιάκας 34
High 4:4:4 Predictive Profile (Hi444PP) Αυτό το Profile βρίσκεται σε άµεση σχέση µε το High 4:2:2 Profile. Υποστηρίζει 4:4:4 υποδειγµατοληψία χρώµατος, χρησιµοποιώντας µέχρι και 14 bit ανα δείγµα για µεγαλύτερη ακρίβεια. Υποστηρίζει επίσης αποτελεσµάτα lossless region κωδικοποίηση και κωδικοποίηση κάθε εικόνας σαν 3 διαφορετικές περιοχές. Για βιντεοκάµερες, επεξεργασία και επαγγελµατικές εφαρµογές υπάρχουν 4 ακόµα Intra profiles, τα οποία ουσιαστικά λειτουργούν σαν υποσύνολα των προηγούµενων profiles. High 10 Intra Profile High 4:2:2 Intra Profile High 4:4:4 Intra Profile CAVLC 4:4:4 Intra Profile Ως αποτέλεσµα της Scalable βίντεο κωδικοποίησης, ορίζονται 3 πρόσθετα profiles, τα οποία ορίζονται ως συνδυασµός ενός profile για το H.264 και εργαλείων µε τα οποία επιτυγχάνεται η επέκταση που επιθυµούµε. Scalable Baseline Profile Βρίσκεται σε άµεση σχέση µε το Baseline Profile. Χρησιµοποιείται κυρίως για εφαρµογές τηλεδιάσκεψης, κινητής τηλεφωνίας και παρακολούθησης. Κ.Ζιάκας 35
Scalable High Profile Βρίσκεται σε άµεση σχέση µε το High Profile και στοχεύει κυρίως εφαρµογές που αφορούν µετάδοση βίντεο. Scalable High Intra Profile Χρησιµοποιείται κυρίως για παραγωγή βίντεο, βρίσκεται σε άµεση σχέση µε το High Intra Profile. Για multiview βίντεο κωδικοποίηση χρησιµοποιούνται 2 επιπλέον profiles τα οποία είναι τα ακόλουθα: Stereo High Profile To profile αυτό στοχεύει στα διπλής θέασης (µε 2 κάµερες από διαφορετική οπτική γωνία) 3D βίντεο και συνδυάζει τα εργαλεία του High profile µε τις inter-view πρόβλεψη ικανότητες της multiview επέκτασης. Multiview High Profile Αυτό το profile υποστηρίζει 2 ή περισσότερης θέασης βίντεο, που χρησιµοποιεί inter-picture και inter-view prediction για τα multiview video (θα εξετάσουµε αυτές τις δυνατότητες παρακάτω). Κ.Ζιάκας 36
1.7. Εργαλεία του H.264/MPEG-4 Το H.264/MPEG-4 περιλαµβάνει ορισµένες βελτιώσεις σε σχέση µε τα προηγούµενα πρότυπα κωδικοποίησης κάνοντας χρήση παρόµοιας βασικής δοµής. Αυτές οι βελτιώσεις παρότι αλλάζουν σε ορισµένα σηµεία από το ένα profile στο άλλο είναι κατά κύριο βαθµό οι ακόλουθες: Ικανοποιητικό χειρισµό interlaced βίντεο, είτε κωδικοποιώντας κάθε interlaced πεδίο σαν διακριτή εικόνα, είτε κωδικοποιώντας περιοχές 16Χ16 ή 32Χ32 χρησιµοποιώντας κωδικοποίηση πεδίου (field-based) ή πλάνου (frame-based). Χωρική πρόβλεψη intrapicture, µε χρήση µεταβλητού µεγέθους block. Καλύτερες τεχνικές motion compensation, κυρίως µε χρήση µεταβλητής εικόνας αναφοράς και µεταβλητών βαρών πρόβλεψης. Μερικοί µετασχηµατισµοί, βασισµένοι κυρίως στον DCT βοηθούν στην κωδικοποίηση. Λογαριθµική περίοδος κβάντισης. Απεικόνιση χωρίς απώλειες, αν χρειαστεί, για ορισµένες περιοχές µίας εικόνας είναι εφικτή. Προηγµένη κωδικοποίηση εντροπίας µε την χρήση είτε κωδικοποίηση προσαρµοσµένου πεδίου είτε προσαρµοσµένου µήκους. Ένας προσαρµοσµένος κωδικοποιητής που µπορεί να προσφέρει καλύτερη interpicture πρόβλεψη. Τα αποτελέσµατα είναι αρκετά πιο «ανθεκτικά» αν υπάρξει απώλεια για τον οποιοδήποτε λόγο. Μικρότερη πιθανότητα για οποιοδήποτε λάθος. Κ.Ζιάκας 37
Σχήµα 1.13: Hardware και Software που στηρίζεται στο H.264/MPEG-4. Κ.Ζιάκας 38
ΚΕΦΑΛΑΙΟ 2 ΥΛΟΠΟΙΗΣΗ ΠΑΡΑ ΕΙΓΜΑΤΩΝ ΓΙΑ ΤΟ Η.264/MPEG-4 ΜΕ ΧΡΗΣΗ ΜΙΑΣ ΚΑΜΕΡΑΣ 2.1. Εισαγωγή Σε αυτό το κεφάλαιο θα εξετάσουµε κάποια βίντεο-παραδείγµατα, τα οποία κωδικοποιήθηκαν µε χρήση του H.264/MPEG-4 προτύπου. Συγκεκριµένα, χρησιµοποίηθηκε η διαδικασία lencod.exe, όπου µε κατάλληλες µετατροπές στο encoder.cfg µπορούµε να κωδικοποιήσουµε το βίντεο που θέλουµε. Αντίστοιχα για την αποκωδικοποίηση χρησιµοποιείται η διαδικασία ldecod.exe, µε κατάλληλες µετατροπές των µεταβλητών στο decoder.cfg. Πρώτα θα παρουσιάσουµε κάποια χρήσιµα στοιχεία, που πρέπει να λαµβάνουµε υπόψην πριν χρησιµοποιήσουµε αυτές τις ρουτίνες και έπειτα τα αποτελέσµατα που πήραµε από την κωδικοποίηση και αποκωδικοποίηση κάποιων συγκεκριµένων βίντεο µε χρήση µίας µόνο κάµερας. Στο επόµενο κεφάλαιο θα εξετάσουµε και τα αποτελέσµατα που πήραµε από την κωδικοποίηση και αποκωδικοποίηση βίντεο, που λήφθησαν από παραπάνω από µία κάµερα (multiview). 2.2. Χρήσιµα στοιχεία για την κωδικοποίηση και αποκωδικοποίηση Προτού δούµε τα αποτελέσµατα που πήραµε από την κωδικοποίηση και αποκωδικοποίηση βίντεο µε χρήση µίας κάµερας, θα πρέπει να δούµε κάποια στοιχεία όσον αφορά το encoder.cfg και decoder.cfg που θα προσαρµόζουµε αναλόγως µε το βίντεο που θέλουµε να κωδικοποιηθεί και αποκωδικοποιηθεί αντίστοιχα. Βέβαια, εκτός από αυτά τα κύρια στοιχεία που θα παρουσιαστούν είναι αρκετές ακόµα µεταβλητές που θα πρέπει να εξετάσουµε ανάλογα µε την περίπτωση του βίντεο που έχουµε. Κ.Ζιάκας 39
2.2.1. Όνοµα βίντεο κατά την κωδικοποίηση και παραγόµενα αποτελέσµατα Το όνοµα του βίντεο που θέλουµε να κωδικοποιήσουµε το τοποθετούµε στην µεταβλητή: InputFile. Αυτό το κάνουµε µόνο στην περίπτωση που έχουµε βίντεο µε µία κάµερα. Αν έχουµε multiview βίντεο θα πρέπει να τοποθετηθεί σε άλλη µεταβλητή. Το αρχείο, που θα πρέπει να είναι ίδιο µε το αρχικό που παράγεται κατά την κωδικοποίηση το βάζουµε στην µεταβλητή: ReconFile. Η H.264 ακολουθία που θα πάρουµε βρίσκεται στην µεταβλητή: OutputFile. Επίσης σηµαντικό είναι να τοποθετήσουµε τις διαστάσεις του βίντεο. Αυτά τοποθετούνται στις µεταβλητές SourceWidth και SourceHeight αντιστοίχως. 2.2.2. Frames κατά την κωδικοποίηση Τα πλάνα (frames) που έχει κάθε βίντεο για την κωδικοποίηση τα τοποθετούµε στην µεταβλητή: FramesToBeEncoded. Ο ρυθµός µε τον οποίο έρχεται κάθε πλάνο στο βίντεο µας τοποθετείται στην µεταβλητή: FrameRate. Επίσης µπορούµε να διαλέξουµε από που θα ξεκινήσει η κωδικοποίηση µας µέσω της µεταβλητής: StartFrame Αν έχουµε multiview βίντεο θα πρέπει σε αυτή την µεταβλητή να τοποθετήσουµε πόσα frames έχει κάθε βίντεο, και όχι τα συνολικά frames. Φυσικά θα πρέπει όλα τα frames να είναι ίσα σε όλα τα βίντεο. Κ.Ζιάκας 40
2.2.3. Profile του βίντεο Είδαµε στο προηγούµενο κεφάλαιο κάποια σηµαντικά profiles τα οποία χρησιµοποιούνται στο H.264/MPEG-4 πρότυπο. Συγκεκριµένα τοποθετούµε στην µεταβλητή ProfileIDC το profile που θέλουµε. Ας δούµε µερικές περιπτώσεις: Με 66 αν θέλουµε το baseline profile. Με 77 αν θέλουµε το main profile. Με 88 αν θέλουµε το extended profile. Με 100 αν θέλουµε το high profile. Με 110 αν θέλουµε το high 10 profile. Με 122 αν θέλουµε το high 4:2:2 profile. Με 244 αν θέλουµε το high 4:4:4 profile. Με 44 αν θέλουµε το 4:4:4 intra profile. 2.2.4. Άλλες µεταβλητές κατά την κωδικοποίηση Όπως αναφέρθηκε πριν, οι µεταβλητές που είδαµε δεν είναι οι µόνες που θα πρέπει να λαµβάνει υπόψην ο χρήστης αλλά ίσως οι πιο σηµαντικές. Άλλες χρήσιµες µεταβλητές είναι οι: Bitrate που µας δίνει τον ρυθµό bps. NumberBframes όπου βάζουµε τον αριθµό των B frames αν υπάρχουν. YuvFormat όπου τοποθετούµε ποιο είδος υποδειγµατοληψίας θέλουµε να χρησιµοποιήσουµε. Με 0 χρησιµοποιούµε το 4:0:0, µε 1 το 4:2:0, µε 2 το 4:2:2 και µε 3 το 4:4:4. RGBInput όπου βάζουµε 0 αν έχουµε βίντεο σε µορφή YUV και 1 αν είναι σε µορφή RGB. Οι άλλες µεταβλητές είναι στην διάθεση του αναγνώστη να τις βρει στο encoder.cfg. Κ.Ζιάκας 41
2.2.5. Στοιχεία για την αποκωδικοποίηση Σηµαντικό είναι να εξετάσουµε και κάποιες µεταβλητές που πρέπει να λάβουµε υπόψην µας κατά την αποκωδικοποίηση. Αυτές βρίσκονται στο decoder.cfg. Συγκεκριµένα έχουµε: H.26L coded bitstream όπου θα πρέπει να βάλουµε την H.264 ακολουθία που έχουµε πάρει κατά την κωδικοποίηση. Output file structure όπου θα πρέπει να βάλουµε το αρχείο YUV ή RGB που έχουµε πάρει κατά την κωδικοποίηση. Write 4:2:0 chroma components for monochrome streams όπου βάζουµε ποιο είδος υποδειγµατοληψίας έχουµε χρησιµοποιήσει. Οι αντίστοιχοι αριθµοί είναι ίδιοι και µε την κωδικοποίηση. Οι άλλες µεταβλητές είναι στην διάθεση του αναγνώστη να τις βρει στο decoder.cfg. 2.3. Αποτελέσµατα κωδικοποιήσεων µε χρήση µίας κάµερας Σε αυτή την ενότητα θα µελετήσουµε τα αποτελέσµατα που έχουµε αν πάρουµε τις προσοµοιώσεις που έγιναν µε την χρήση ενός βίντεο και µίας κάµερας. Συγκεκριµένα θα παρουσιαστούν τα αποτελέσµατα από το τρέξιµο 4 βίντεο των: akiyo_cif, coastguard_cif, container_cif και carphone_qcif. Έπειτα θα παρουσιαστούν αποτελέσµατα για το Door_Flowers βίντεο που θα χρησιµοποιηθεί στο επόµενο κεφάλαιο για το Multiview, ώστε αν θέλει ο αναγνώστης να µπορεί να κάνει µία αντίστοιχη σύγκριση. Σε κάθε βίντεο θα παρουσιάζονται οι γραφικές παραστάσεις για τις συνιστώσες Y, U και V καθώς και κάποια σηµαντικά στοιχεία που πρέπει να λαµβάνονται υπόψην κατά την κωδικοποίηση. Αντίστοιχα παρουσιάζεται και αν γίνεται σωστά η αποκωδικοποίηση. Κ.Ζιάκας 42
2.3.1. Akiyo_cif Το αρχείο akiyo_cif έχει τα ακόλουθα χαρακτηριστικά: 300 frames άρα τοποθετείται 300 στο FrameToBeEncoded 352X288 διαστάσεις άρα τοποθετήθηκαν 352 και 288 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται main profile για αυτό τοποθετούµε 77 στην µεταβλητή ProfileIDC Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το outakiyo_cif και τοποθετούµε αυτή την ονοµασία στο ReconFile και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Από τις Y, U και V συνιστώσες πήραµε τα ακόλουθα αποτελέσµατα: Σχήµα 2.1: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο akiyo_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα). Κ.Ζιάκας 43
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.83 SNR U(dB) : 42.41 SNR V(dB) : 43.64 csnr Y(dB) : 39.82 ( 6.77) csnr U(dB) : 42.41 ( 3.73) csnr V(dB) : 43.64 ( 2.81) Total bits : 770264 (I 43448, P 726632, NVB 184) Bit rate (kbit/s) @ 30.00 Hz : 77.03 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 184 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outakiyo_cif που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 44
2.3.2. Container_cif Το αρχείο coantainer_cif έχει τα ακόλουθα χαρακτηριστικά: 300 frames άρα τοποθετείται 300 στο FrameToBeEncoded 352X288 διαστάσεις άρα τοποθετήθηκαν 352 και 288 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται extended profile για αυτό τοποθετούµε 88 στην µεταβλητή ProfileIDC Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το oucontainer_cif και τοποθετούµε αυτή την ονοµασία στο ReconFile και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Από τις Y, U και V συνιστώσες πήραµε τα ακόλουθα αποτελέσµατα: Σχήµα 2.2: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο container_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα). Κ.Ζιάκας 45
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: ----------------- Average data all frames ----------------------------------- SNR Y(dB) : 36.01 SNR U(dB) : 41.70 SNR V(dB) : 41.46 csnr Y(dB) : 36.01 (16.29) csnr U(dB) : 41.70 ( 4.39) csnr V(dB) : 41.46 ( 4.65) Total bits : 1882120 (I 81944, P 1799992, NVB 184) Bit rate (kbit/s) @ 30.00 Hz : 188.21 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 184 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outcontainer_cif που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 46
2.3.3. Bowing_cif Το αρχείο bowing_cif έχει τα ακόλουθα χαρακτηριστικά: 300 frames άρα τοποθετείται 300 στο FrameToBeEncoded 352X288 διαστάσεις άρα τοποθετήθηκαν 352 και 288 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται baseling profile για αυτό τοποθετούµε 66 στην µεταβλητή ProfileIDC Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το outbowing_cif και τοποθετούµε αυτή την ονοµασία στο ReconFile και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Από τις Y, U και V συνιστώσες πήραµε τα ακόλουθα αποτελέσµατα: Σχήµα 2.3: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο bowing_cif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα). Κ.Ζιάκας 47
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.49 SNR U(dB) : 44.75 SNR V(dB) : 45.16 csnr Y(dB) : 39.42 ( 7.44) csnr U(dB) : 44.72 ( 2.19) csnr V(dB) : 45.14 ( 1.99) Total bits : 1208624 (I 39312, P 1169136, NVB 176) Bit rate (kbit/s) @ 30.00 Hz : 120.86 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 176 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outbowing_cif που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 48
2.3.4. Carphone_qcif Το αρχείο carphone_qcif έχει τα ακόλουθα χαρακτηριστικά: 382 frames άρα τοποθετείται 382 στο FrameToBeEncoded 176X144 διαστάσεις άρα τοποθετήθηκαν 176 και 144 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται extended profile για αυτό τοποθετούµε 88 στην µεταβλητή ProfileIDC Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το outcarphone_qcif και τοποθετούµε αυτή την ονοµασία στο ReconFile και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Από τις Y, U και V συνιστώσες πήραµε τα ακόλουθα αποτελέσµατα: Σχήµα 2.4: Παρουσίαση αποτελεσµάτων για το SNR στο βίντεο carphone_qcif των συνιστωσών Y (µε µπλε χρώµα), U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα). Κ.Ζιάκας 49
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 33.29 SNR U(dB) : 31.82 SNR V(dB) : 31.85 csnr Y(dB) : 33.28 (30.55) csnr U(dB) : 31.81 (42.88) csnr V(dB) : 31.84 (42.59) Total bits : 16963208 (I 82936, P 16880096, NVB 176) Bit rate (kbit/s) @ 30.00 Hz : 1332.19 Bits to avoid Startcode Emulation : 64 Bits for parameter sets : 176 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outcarphone_qcif που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 50
2.3.5. Door_Flowers Σε αυτή την ενότητα θα εξετάσουµε τα 16 βίντεο από το Door_Flowers. Οι µεταβλητές που τοποθετούνται για το κάθε ένα είναι ίδιες για αυτό παρουσιάζονται µία φορά: 100 frames άρα τοποθετείται 100 στο FrameToBeEncoded 1024X768 διαστάσεις άρα τοποθετήθηκαν 1024 και 768 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται baseline profile για αυτό τοποθετούµε 66 στην µεταβλητή ProfileIDC Τα βίντεο που παίρνουµε σαν αποτέλεσµα είναι τα outdoorflowers_cif µε το αντίστοιχο µούµερο από την κάµερα, και τοποθετούµε αυτή την ονοµασία στο ReconFile και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Κ.Ζιάκας 51
Τώρα θα παρουσιάσουµε τα διαγράµµατα για το κάθε βίντεο για τις Y U και V συνιστώσες: Σχήµα 2.5: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam01. Σχήµα 2.6: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam02. Κ.Ζιάκας 52
Σχήµα 2.7: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam03. Σχήµα 2.8: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam04. Κ.Ζιάκας 53
Σχήµα 2.9: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam05. Σχήµα 2.10: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam06. Κ.Ζιάκας 54
Σχήµα 2.11: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam07. Σχήµα 2.12: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam08. Κ.Ζιάκας 55
Σχήµα 2.13: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam09. Σχήµα 2.14: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam10. Κ.Ζιάκας 56
Σχήµα 2.15: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam11. Σχήµα 2.16: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam12. Κ.Ζιάκας 57
Σχήµα 2.17: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam13. Σχήµα 2.18: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam14. Κ.Ζιάκας 58
Σχήµα 2.19: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam15. Σχήµα 2.20: Συνιστώσες SNR Y (µε µπλε χρώµα) U (µε κόκκινο χρώµα) και V (µε πράσινο χρώµα) για το Door_FlowersCam16. Κ.Ζιάκας 59
Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outdoorflowers µε το νούµερο της κάµερας που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 60
ΚΕΦΑΛΑΙΟ 3 ΤΡΕΞΙΜΑΤΑ ΓΙΑ ΠΟΛΛΑΠΛΗΣ ΘΕΑΣΗΣ ΒΙΝΤΕΟ ΜΕ ΙΑΦΟΡΑ ΜΟΝΤΕΛΑ ΑΝΑΦΟΡΑΣ 3.1. Εισαγωγή για multiview Στο προηγούµενο κεφάλαιο είδαµε κάποια στοιχεία για την κωδικοποίηση ενός βίντεο µε χρήση µίας κάµερας µε το πρότυπο H.264/MPEG-4, µέσω των διαδικασιών lencod.exe και encoder.cfg. Αντίστοιχα είδαµε και την αποκωδικοποίηση µέσω των ίδιων διαδικασιών. Σε αυτό το κεφάλαιο θα επικεντρωθούµε στην εξέταση αποτελεσµάτων µέσω των ίδιων διαδικασιών για βίντεο που συλλαµβάνονται ταυτόχρονα από πολλαπλές κάµερες. Θα δούµε κάποιους χρήσιµους ορισµούς για τα πολλαπλές θέασης βίντεο (multiview) και γενικότερα κάποια χρήσιµα στοιχεία για την κωδικοποίηση πολλαπλής θέασης βίντεο. Έπειτα µέσω διάφορων µοντέλων αναφοράς που θα εξετάσουµε αρχικά θα δούµε τα αποτελέσµατα που πήραµε από την κωδικοποίηση και αποκωδικοποίηση multiview βίντεο. 3.2. Χρήσιµοι ορισµοί Η κωδικοποίηση πολλαπλής θέασης βίντεο (multiview video coding MVC) είναι µία τροποποίηση του H.264/MPEG-4 προτύπου. Επιτρέπει την αποτελεσµατική κωδικοποίηση ακολουθιών που συλλαµβάνονται ταυτόχρονα από πολλαπλές κάµερες, χρησιµοποιώντας µία ενιαία ροή βίντεο. Το MVC προορίζεται για στερεοσκοπική κωδικοποίηση βίντεο, όπως επίσης και δωρεάν τηλεοπτικό σήµα, όπως και τρισδιάστατη κωδικοποίηση πολλαπλής θέασης βίντεο. Το Stereo High Profile είναι αυτό που χρησιµοποιείται περισσότερο σαν πρότυπο για τα πολλαπλής θέασης βίντεο. Τα multiview βίντεο περιέχουν ένα µεγάλο ποσοστό στατιστικών εξαρτήσεων µεταξύ τους, δεδοµένου ότι λαµβάνεται η ίδια σκηνή από πολλαπλές µεριές. Οπότε η σωστή χωρική και χρονική πρόβλεψη είναι απαραίτητη για την σωστή κωδικοποίηση multiview βίντεο. Ένα πλάνο (frame) από µία κάµερα σχετίζεται και θα πρέπει να προβλέπεται σε σύγκριση µε πλάνα τόσο από την ίδια όσο και από τις άλλες κάµερες. Αυτό θα πρέπει να το λαµβάνουµε υπόψην και κατά την πρόβλεψη µας στα διάφορα µοντέλα αναφοράς. Κ.Ζιάκας 61
Σχήµα 3.1: Παράδειγµα µοντέλου αναφοράς ανά 8 πλάνα (frames). 3.3. Σηµαντικά ζητήµατα για τα multiview βίντεο Πριν δούµε τις εφαρµογές και την χρησιµότητα των multiview βίντεο, θα πρέπει να δούµε κάποια ζητήµατα που θα πρέπει να λαµβάνονται υπόψην κατά στον σχεδιασµό κωδικοποιητή και αποκωδικοποιητή για multiview βίντεο µε χρήση του προτύπου H.264/MPEG-4. Το βασικό ζήτηµα που τίθεται είναι το πως θα µπορέσουν να εξαλειφθούν οι εξαρτήσεις µεταξύ των διαφορετικών καµερών που λαµβάνουν την ίδια εικόνα. Θα πρέπει ο σχεδιαστής του κωδικοποιητή να λάβει υπόψην το πως µπορεί να αποβάλλει την ίδια εικόνα που είναι ίδια από διαφορετική κάµερα. Το θέµα είναι να έχει από κάθε κάµερα κάτι το ξεχωριστό σε σύγκριση µε τις προηγούµενες. Εδώ έρχονται τα µοντέλα αναφοράς, ένα από τα οποία βλέπουµε στο σχήµα 3.1. Ο σχεδιαστής θα πρέπει να έχει στο µυαλό του κάποια µοντέλα αναφοράς, ώστε να µπορέσει να εκµεταλλευτεί αυτές τις εξαρτήσεις προς όφελος του σχεδιασµού του. Εξίσου, σηµαντικό είναι ότι το διάγραµµα ρυθµού-παραµόρφωσης γίνεται και χειρότερο κάθε φορά που έχουµε και µεγαλύτερο αριθµό καµερών. Το ζητούµενο είναι όσο ανεβαίνει ο αριθµός των καµερών να µπορούµε να διατηρούµε το διάγραµµα σε σταθερό ρυθµό. Επίσης, θα πρέπει ο πίνακας που θα κρατήσουµε την H.264 ακολουθία να είναι αρκετά µεγάλος και να αλλάζει κάθε φορά που έχουµε µία νέα ακολουθία για αποθήκευση. Κ.Ζιάκας 62
Σηµαντικό θέµα είναι επίσης η συµπίεση. Ολοένα και περισσότερα δεδοµένα είναι αναγκαίο να αποθηκεύονται οπότε θα πρέπει να έχουµε καλή συµπίεση µέσω της κωδικοποίσης µας. Στα αποτελέσµατα που θα δούµε η συµπίεση που έχουµε είναι αρκετά ικανοποιητική. 3.4. Εφαρµογές των multiview βίντεο Εξετάσαµε κάποια κύρια στοιχεία για τα multiview βίντεο. Όµως, είναι ιδιαίτερα σηµαντικό να δούµε και τι εφαρµογές µπορούν να έχουν στην καθηµερινότητα µας. Σε αυτή λοιπόν την ενότητα θα δούµε κάποιες κύριες εφαρµογές των multiview βίντεο. 3.4.1. 3-D βίντεο Ίσως, η πιο σηµαντική εφαρµογή των multiview βίντεο είναι το 3-D βίντεο. Για αυτή την εφαρµογή απαραίτητος είναι ο κατάλληλος εξοπλισµός τόσο για την παράσταση του βίντεο, όσο και να το δει κάποιος ανάλογος µε το σχήµα 3.2. Στο 3-D βίντεο έχουµε µία 3-D βάθους αναπαράσταση µίας εικόνας και αντίστοιχα ενός βίντεο. Σχήµα 3.2: 3-D γυαλιά απαραίτητα στο να δει κάποιος κανονικά ένα 3-D βίντεο. Κ.Ζιάκας 63
Σηµαντικές εφαρµογές που απορρέουν από την λειτουργία του 3-D βίντεο είναι οι τηλεδιασκέψεις και 3-D TV, που τώρα έχει µπει στην αγορά µε µεγάλους ρυθµούς ανάπτυξης. 3.4.2. Βίντεο ελεύθερης θέασης Άλλη µία σηµαντική εφαρµογή των multiview βίντεο είναι το βίντεο ελεύθερης θέασης (freeviewpoint video). Σε ένα τέτοιο βίντεο δίνεται η δυνατότητα για εύκολη αλλαγή οπτικής γωνίας, αφού έχουµε λήψη µε πολλές κάµερες. Σηµαντικές εφαρµογές που απορρέουν από την λειτουργία το βίντεο πολλαπλής θέασης είναι η παρακολούθηση ενός χώρου, η κάλυψη αθλητικών γεγονότων και συναυλιών µε µεγαλύτερη ευκολία για προσαρµογή κάµερας. 3.4.3. Απεικόνιση µε µεγάλη ευκρίνεια Άλλη µία σηµαντική εφαρµογή των multiview βίντεο είναι η απεικόνιση µε µεγάλη ευκρίνεια (high performance imaging). Πολλές κάµερες µαζί µπορούν να απεικονίσουν ένα βίντεο µε µεγαλύτερη ευκρίνεια. Αυτό συµβαίνει τόσο για βίντεο όσο και αν χρειαστεί απλά παράσταση µίας εικόνας. Οπότε σηµαντική εφαρµογή που συνδέεται είναι η παρακολούθηση ενός χώρου. Κ.Ζιάκας 64
3.5. Βασικά στοιχεία για την κωδικοποίηση και αποκωδικοποίηση multiview βίντεο Στο προηγούµενο κεφάλαιο είδαµε κάποια χρήσιµα στοιχεία για την κωδικοποίηση και αποκωδικοποίηση βίντεο µε χρήση µίας κάµερας. Επίσης αναφέρθηκε ότι υπόλοιπα στοιχεία είναι στην διάθεση του αναγνώστη να ανατρέξει στο encoder.cfg ώστε να βρει τι κάνουν. Αυτά τα στοιχεία παραµένουν ανάλογα και για την κωδικοποίηση και αποκωδικοποίηση βίντεο µε χρήση µίας κάµερας. Η σηµαντική διαφορά βρίσκεται στην είσοδο και έξοδο που παίρνουµε µετά την κωδικοποίηση. Χρήσιµα στοιχεία που έχουµε στο encoder.cfg για τα multiview βίντεο είναι τα παρακάτω: ########################################################################## ############## #Multi View Coding ########################################################################## ############## MultiViewCount = 8# 1 monoscopic, else number of cameras InputFileStructure = LeavingLaptop_Cam%d.yuv #overwrites inputfile - Starts from 0 ReconFileStructure = outleaving_laptop1reference.yuv #overwrites ReconFile - Starts from 0 ReferenceMode = 1 # 1:..., 2:..., 3:..., 4:..., #AnalyzeFile = "analyze_flamenco1_mono" StandardCompatible = 0 Στο MultiViewCount τοποθετούµε των αριθµό των καµερών που έχουµε για το βίντεο που θέλουµε (ή να τεθεί καλύτερα τα διαφορετικά βίντεο από διαφορετική οπτική γωνία που έχουµε). Στο InputFileStructure θα πρέπει να βάλουµε το όνοµα του βίντεο που θέλουµε να γίνει κωδικοποίηση. Αν για παράδειγµα θέλουµε το LeavingLaptop θα πρέπει να βάλουµε το όνοµα του, βασιζόµενοι στην ιδέα ότι θα πρέπει να βάλουµε την αρχική µας κάµερα στον αριθµό 0 µέχρι τον αριθµό που θέλουµε (αν π.χ. έχουµε 8 βίντεο τότε µέχρι το 7). Κ.Ζιάκας 65
Στο ReconFileStructure τοποθετούµε το όνοµα του βίντεο που θέλουµε να έχει ότι παραχθεί µετά από το τρέξιµο. Ουσιαστικά παράγεται ένα βίντεο από µία µέση οπτική γωνία από όλα όσα χρησιµοποιήθηκαν. Στο ReferenceMode τοποθετούµε ποιο µοντέλο αναφοράς θέλουµε να χρησιµοποιήσουµε. Επειδή βάση αυτού έχουµε τα διάφορα τρεξίµατα που έγιναν ακολουθή ανάλυση στην επόµενη ενότητα. Στα άλλα κρατάµε κάποια βασικά στοιχεία τα οποία θα µας δίνουν στο τέλος σαν στατιστικά στοιχεία. Θα πρέπει να σηµειώσουµε ότι θα πρέπει να λάβουµε και άλλα κοµµάτια υπόψην. Στο Output File θα έχουµε το buffer στο οποίο θα βρίσκεται το H.264 αρχείο µας. Επίσης θα πρέπει να έχουµε βάλει NumberReferenceFrames σε µεγαλύτερο αριθµό από το MultiViewCount που έχουµε τοποθετήσει. Αλλιώς δεν θα µπορούµε να πραγµατοποιήσουµε κάποιο τρέξιµο. Κατά την αποκωδικοποίηση δεν συναντάµε καµία διαφορά σε σύγκριση µε την αποκωδικοποίηση βίντεο µε χρήση µίας κάµερας. Αν όλα πάνε καλά θα πρέπει να µας επιστρέφεται SNR 0 για κάθε Y,U και V συνιστώσα. Κ.Ζιάκας 66
3.6. Μοντέλα αναφοράς Καλό είναι πριν προχωρήσουµε στην παρουσίαση των αποτελεσµάτων για τα βίντεο Door_Flowers και Leaving_Laptop που είναι στην διάθεση του αναγνώστη καλό είναι να παρουσιαστούν τα µοντέλα πρόβλεψης που χρησιµοποιήθηκαν για τα διάφορα τρεξίµατα που έγιναν. Συνολικά χρησιµοποιήθηκαν 4 µοντέλα αναφοράς (reference modes). 3.6.1. 1 ο Μοντέλο αναφοράς Για να µπορέσουµε να τρέξουµε το multiview video µας µε το πρώτο µοντέλο αναφοράς αρκεί να κάνουµε µία αλλαγή όπως φαίνεται εδώ: #Multi View Coding ########################################################################## ############## MultiViewCount = 8# 1 monoscopic, else number of cameras InputFileStructure = LeavingLaptop_Cam%d.yuv #overwrites inputfile - Starts from 0 ReconFileStructure = outleaving_laptop1reference.yuv #overwrites ReconFile - Starts from 0 ReferenceMode = 1 # 1:..., 2:..., 3:..., 4:..., #AnalyzeFile StandardCompatible = 0 = "analyze_flamenco1_mono" Κ.Ζιάκας 67
Σε αυτό το µοντέλο αναφοράς έχουµε το ακόλουθο σχήµα: Σχήµα 3.3 :1 ο reference mode. Λαµβάνονται υπόψην τα frames που έχουν κωδικοποιηθεί από προηγούµενη κοντινή κάµερα καθώς και προηγούµενα frames από την κάµερα που κωδικοποίεται εκείνη την χρονική στιγµή. Κ.Ζιάκας 68
3.6.2. 2 ο Μοντέλο αναφοράς Για να µπορέσουµε να τρέξουµε το multiview video µας µε το δεύτερο µοντέλο αναφοράς αρκεί να κάνουµε µία αλλαγή όπως φαίνεται εδώ: #Multi View Coding ########################################################################## ############## MultiViewCount = 8# 1 monoscopic, else number of cameras InputFileStructure = LeavingLaptop_Cam%d.yuv #overwrites inputfile - Starts from 0 ReconFileStructure = outleaving_laptop1reference.yuv #overwrites ReconFile - Starts from 0 ReferenceMode = 2 # 1:..., 2:..., 3:..., 4:..., #AnalyzeFile StandardCompatible = 0 = "analyze_flamenco1_mono" Σε αυτό το µοντέλο αναφοράς έχουµε το ακόλουθο σχήµα: Σχήµα 3.4 :2 ο reference mode. Κ.Ζιάκας 69
Λαµβάνονται υπόψην µόνο το κοντύτερο frame από την κάµερα που έχει προηγουµένως κωδικοποιηθεί καθώς και το προηγούµενο frame από την κάµερα που κωδικοποιείται εκείνη την χρονική στιγµή. 3.6.3. 3 ο Μοντέλο αναφοράς Για να µπορέσουµε να τρέξουµε το multiview video µας µε το τρίτο µοντέλο αναφοράς αρκεί να κάνουµε µία αλλαγή όπως φαίνεται εδώ: #Multi View Coding ########################################################################## ############## MultiViewCount = 8# 1 monoscopic, else number of cameras InputFileStructure = LeavingLaptop_Cam%d.yuv #overwrites inputfile - Starts from 0 ReconFileStructure = outleaving_laptop1reference.yuv #overwrites ReconFile - Starts from 0 ReferenceMode = 3 # 1:..., 2:..., 3:..., 4:..., #AnalyzeFile StandardCompatible = 0 = "analyze_flamenco1_mono" Σε αυτό το µοντέλο αναφοράς έχουµε το ακόλουθο σχήµα: Σχήµα 3.5: 3 ο reference mode. Κ.Ζιάκας 70
Λαµβάνονται υπόψην τα κοντινά frame από τις δύο διπλανές κάµερες µία πριν και µία µετά καθώς και το προηγούµενο frame από την κάµερα που κωδικοποιείται εκείνη την χρονική στιγµή. 3.6.4. 4 ο Μοντέλο αναφοράς Για να µπορέσουµε να τρέξουµε το multiview video µας µε τέταρτο µοντέλο αναφοράς αρκεί να κάνουµε µία αλλαγή όπως φαίνεται εδώ: #Multi View Coding ########################################################################## ############## MultiViewCount = 8# 1 monoscopic, else number of cameras InputFileStructure = LeavingLaptop_Cam%d.yuv #overwrites inputfile - Starts from 0 ReconFileStructure = outleaving_laptop1reference.yuv #overwrites ReconFile - Starts from 0 ReferenceMode = 4 # 1:..., 2:..., 3:..., 4:..., #AnalyzeFile StandardCompatible = 0 = "analyze_flamenco1_mono" Κ.Ζιάκας 71
Σε αυτό το µοντέλο αναφοράς έχουµε το ακόλουθο σχήµα: Σχήµα 3.6 :4 ο reference mode. Λαµβάνονται υπόψην κοντινά frame από όλες τις κάµερες καθώς και ένα frame από µία κοντινή κάµερα σε σχέση µε αυτό το frame που κωδικοποιείται εκείνη την χρονική στιγµή. Κ.Ζιάκας 72
3.7. Door_Flowers multiview Σε αυτή την ενότητα θα εξετάσουµε τα αποτέλεσµατα που πήραµε, τρέχοντας τα Door_Flowers βίντεο σαν 8άδες για δούµε τα αποτελέσµατα σαν multiview βίντεο. Έγιναν συνολικά 4 τρεξίµατα το καθένα για διαφορετικό reference mode. Τα περισσότερα στοιχεία παρέµειναν αµετάβλητα, πέρα από το reference mode που άλλαζε κάθε φορά. Έχουµε λοιπόν τα ακόλουθα στοιχεία σταθερά: 100 frames για κάθε βίντεο του multiview, άρα συνολικά 800 frames. Tοποθετείται 100 στο FrameToBeEncoded 1024X768 διαστάσεις άρα τοποθετήθηκαν 1024 και 768 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται stero high profile, αφού έχουµε multiview video για αυτό τοποθετούµε 100 στην µεταβλητή ProfileIDC. Τοποθετούµε 8 στο MultiViewCount, αφού βάζουµε 8 κάµερες. Τοποθετούµε DoorFlower_Cam%d.yuv στο InputFileStructure. Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το outdoorflowers_cif και τοποθετούµε αυτή την ονοµασία στο ReconFileStructure και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Σε κάθενα από τα 4 διαφορετικά βίντεος που θα βγάλουµε θα βάλουµε αυτό το όνοµα Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Βάζουµε 16 στο NumberOfReferenceFrames απλά επειδή πρέπει να ξεπερνάει το MultiViewCount. Κ.Ζιάκας 73
3.7.1. Door_Flowers 1 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 1 st reference mode: Σχήµα 3.7: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 1 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 74
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 707940 2187704 792822 884910 751529 751529 1061880 710236 710236 1238850 668943 668943 1415820 627650 627650 1592790 586357 586357 1769760 545064 545064 1946730 503771 503771 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 30 Hadamard transform Image format : Used : 1024x768 Error robustness : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 28181.109 sec (0.03 fps) Total ME time for sequence : 26669.190 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (77,51) Motion Estimation Scheme : Full Search Search range restrictions : none RD-optimized mode decision : not used Data Partitioning Mode : 1 partition Output File Format : H.264 Bit Stream File Format Residue Color Transform : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.03 SNR U(dB) : 40.32 Κ.Ζιάκας 75
SNR V(dB) : 41.16 csnr Y(dB) : 39.03 ( 8.13) csnr U(dB) : 40.28 ( 6.09) csnr V(dB) : 41.15 ( 4.99) Total bits : 18878880 (I 228984, P 18649504, NVB 392) Bit rate (kbit/s) @ 30.00 Hz : 707.96 Bits to avoid Startcode Emulation : 0 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outdoor_flowers που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 76
3.7.2. Door_Flowers 2 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 2 nd reference mode: Σχήµα 3.8: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 2 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 77
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 702180 2152008 794166 877710 753209 753209 1053240 712252 712252 1228770 671295 671295 1404300 630338 630338 1579830 589381 589381 1755360 548424 548424 1930890 507467 507467 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 30 Hadamard transform Image format : Used : 1024x768 Error robustness : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 13628.640 sec (0.06 fps) Total ME time for sequence : 12406.776 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (66,51) Motion Estimation Scheme : Full Search Search range restrictions : none RD-optimized mode decision : not used Data Partitioning Mode : 1 partition Output File Format : H.264 Bit Stream File Format Residue Color Transform : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.03 SNR U(dB) : 40.32 Κ.Ζιάκας 78
SNR V(dB) : 41.16 csnr Y(dB) : 39.02 ( 8.14) csnr U(dB) : 40.28 ( 6.09) csnr V(dB) : 41.15 ( 4.99) Total bits : 18725568 (I 228984, P 18496192, NVB 392) Bit rate (kbit/s) @ 30.00 Hz : 702.21 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outdoor_flowers που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 79
3.7.3. Door_Flowers 3 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 3nd reference mode: Σχήµα 3.9: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 3 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 80
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 702180 2152008 794166 877710 753209 753209 1053240 712252 712252 1228770 671295 671295 1404300 630338 630338 1579830 589381 589381 1755360 548424 548424 1930890 507467 507467 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 30 Hadamard transform Image format : Used : 1024x768 Error robustness : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 13585.692 sec (0.06 fps) Total ME time for sequence : 12401.252 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (66,51) Motion Estimation Scheme : Full Search Search range restrictions : none RD-optimized mode decision : not used Data Partitioning Mode : 1 partition Output File Format : H.264 Bit Stream File Format Residue Color Transform : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.03 SNR U(dB) : 40.32 Κ.Ζιάκας 81
SNR V(dB) : 41.16 csnr Y(dB) : 39.02 ( 8.14) csnr U(dB) : 40.28 ( 6.09) csnr V(dB) : 41.15 ( 4.99) Total bits : 18725568 (I 228984, P 18496192, NVB 392) Bit rate (kbit/s) @ 30.00 Hz : 702.21 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outdoor_flowers που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 82
3.7.4. Door_Flowers 4 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 4 th reference mode: Σχήµα 3.10: SNR για το Door Flowers για 8 βίντεο χρησιµοποιώντας το 4 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 83
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 693630 2082310 782337 867030 741877 741877 1040430 701417 701417 1213830 660957 660957 1387230 620497 620497 1560630 580037 580037 1734030 539577 539577 1907430 499117 499117 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 30 Hadamard transform Image format : Used : 1024x768 Error robustness : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 63145.310 sec (0.01 fps) Total ME time for sequence : 61624.709 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (66,51) Motion Estimation Scheme : Full Search Search range restrictions : none RD-optimized mode decision : not used Data Partitioning Mode : 1 partition Output File Format : H.264 Bit Stream File Format Residue Color Transform : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.08 SNR U(dB) : 40.31 Κ.Ζιάκας 84
SNR V(dB) : 41.16 csnr Y(dB) : 39.07 ( 8.06) csnr U(dB) : 40.27 ( 6.11) csnr V(dB) : 41.14 ( 5.00) Total bits : 18497680 (I 228984, P 18268304, NVB 392) Bit rate (kbit/s) @ 30.00 Hz : 693.66 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outdoor_flowers που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 85
3.8. Leaving_Laptop multiview Σε αυτή την ενότητα θα εξετάσουµε τα αποτέλεσµατα που πήραµε, τρέχοντας τα Leaving Laptop βίντεο σαν 8άδες για δούµε τα αποτελέσµατα σαν multiview βίντεο. Έγιναν συνολικά 4 τρεξίµατα το καθένα για διαφορετικό reference mode. Τα περισσότερα στοιχεία παρέµειναν αµετάβλητα, πέρα από το reference mode που άλλαζε κάθε φορά. Έχουµε λοιπόν τα ακόλουθα στοιχεία σταθερά: 100 frames για κάθε βίντεο του multiview, άρα συνολικά 800 frames. Tοποθετείται 100 στο FrameToBeEncoded 1024X768 διαστάσεις άρα τοποθετήθηκαν 1024 και 768 στο SourceWidth και SourceHeight αντίστοιχα. Χρησιµοποιείται stero high profile, αφού έχουµε multiview video για αυτό τοποθετούµε 100 στην µεταβλητή ProfileIDC. Τοποθετούµε 8 στο MultiViewCount, αφού βάζουµε 8 κάµερες. Τοποθετούµε LeavingLaptop_Cam%d.yuv στο InputFileStructure. Το βίντεο που παίρνουµε σαν αποτέλεσµα είναι το outleavinglaptop_cif και τοποθετούµε αυτή την ονοµασία στο ReconFileStructure και έχουµε test.264 όπου και κρατάµε το αρχείο H.264 που θα χρησιµοποιηθεί και κατά την αποκωδικοποίηση. Σε κάθενα από τα 4 διαφορετικά βίντεος που θα βγάλουµε θα βάλουµε αυτό το όνοµα Χρησιµοποιείται 4:2:0 µέθοδος υποδειγµατοληψίας χρώµατος. Οπότε τοποθετείται 1 στο YUVFormat. Έχουµε YUV βίντεο οπότε τοποθετούµε 0 στο RGBInput. Βάζουµε 16 στο NumberOfReferenceFrames απλά επειδή πρέπει να ξεπερνάει το MultiViewCount. Κ.Ζιάκας 86
3.8.1. Leaving_Laptop 1 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 1 st reference mode: Σχήµα 3.11: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 1 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 87
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 463909 3657008 640228 579882 864311 591529 695855 542830 542830 811828 494131 494131 927801 445432 445432 1043774 396733 396733 1159747 348034 348034 1275720 299335 299335 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 17 Hadamard transform Image format Error robustness : Used : 1024x768 : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 26327.493 sec (0.03 fps) Total ME time for sequence : 24984.766 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (77,51) Motion Estimation Scheme Search range restrictions RD-optimized mode decision : Full Search : none : not used Κ.Ζιάκας 88
Data Partitioning Mode Output File Format Residue Color Transform : 1 partition : H.264 Bit Stream File Format : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.02 SNR U(dB) : 39.98 SNR V(dB) : 41.05 csnr Y(dB) : 39.02 ( 8.15) csnr U(dB) : 39.95 ( 6.58) csnr V(dB) : 41.03 ( 5.12) Total bits : 22264336 (I 239008, P 22024936, NVB 392) Bit rate (kbit/s) @ 16.67 Hz : 463.93 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outleaving_laptop που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 89
3.8.2. Leaving_Laptop 2 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 2 nd reference mode: Σχήµα 3.12: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 2 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 90
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 461275 3593070 641334 576581 835757 592915 691887 544496 544496 807193 496077 496077 922499 447658 447658 1037805 399239 399239 1153111 350820 350820 1268417 302401 302401 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 17 Hadamard transform Image format Error robustness : Used : 1024x768 : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 13785.408 sec (0.06 fps) Total ME time for sequence : 12577.497 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (77,51) Motion Estimation Scheme Search range restrictions RD-optimized mode decision : Full Search : none : not used Κ.Ζιάκας 91
Data Partitioning Mode Output File Format Residue Color Transform : 1 partition : H.264 Bit Stream File Format : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.02 SNR U(dB) : 39.98 SNR V(dB) : 41.05 csnr Y(dB) : 39.01 ( 8.16) csnr U(dB) : 39.95 ( 6.58) csnr V(dB) : 41.03 ( 5.13) Total bits : 22137872 (I 239008, P 21898472, NVB 392) Bit rate (kbit/s) @ 16.67 Hz : 461.30 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outleaving_laptop που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 92
3.8.3. Leaving_Laptop 3 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 3 nd reference mode: Σχήµα 3.13: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 3 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 93
Επίσης στο τέλος της εκτέλεσης πήραµε τα ακόλουθα στοιχεία: Total Frames: 800 (800) LeakyBucketRate File does not exist. Using rate calculated from avg. rate Number Leaky Buckets: 8 Rmin Bmin Fmin 467710 3686736 638632 584633 923916 589534 701556 540436 540436 818479 491338 491338 935402 442240 442240 1052325 393142 393142 1169248 344044 344044 1286171 294946 294946 ------------------------------------------------------------------------------- Freq. for encoded bitstream : 17 Hadamard transform Image format Error robustness : Used : 1024x768 : Off Search range : 16 Total number of references : 16 References for P slices : 16 Total encoding time for the seq. : 19498.731 sec (0.04 fps) Total ME time for sequence : 18259.153 sec Sequence type : IPPP (QP: I 28, P 28) Entropy coding method : CAVLC Profile/Level IDC : (77,51) Motion Estimation Scheme Search range restrictions RD-optimized mode decision : Full Search : none : not used Κ.Ζιάκας 94
Data Partitioning Mode Output File Format Residue Color Transform : 1 partition : H.264 Bit Stream File Format : not used ------------------ Average data all frames ----------------------------------- SNR Y(dB) : 39.02 SNR U(dB) : 39.98 SNR V(dB) : 41.06 csnr Y(dB) : 39.02 ( 8.15) csnr U(dB) : 39.95 ( 6.58) csnr V(dB) : 41.04 ( 5.12) Total bits : 22446296 (I 239008, P 22206896, NVB 392) Bit rate (kbit/s) @ 16.67 Hz : 467.72 Bits to avoid Startcode Emulation : 0 Bits for parameter sets : 392 Κατά την αποκωδικοποίηση όλα πήγαν οµαλά και αυτό το καταλαβαίνουµε από το 0 που πήραµε για τα αποτελέσµατα του SNR για κάθε συνιστώσα. Σαν είσοδο για την αποκωδικοποίηση βάλαµε το βίντεο outleaving_laptop που πήραµε κατά την κωδικοποίηση καθώς και το test.264 που βγάλαµε σαν αποτέλεσµα το H.264. Κ.Ζιάκας 95
3.8.4. Leaving_Laptop 4 ο µοντέλο αναφοράς Ας δούµε εδώ τα αποτελέσµατα που παίρνουµε αν χρησιµοποιήσουµε το 4 th reference mode: Σχήµα 3.14: SNR για το Leaving_Laptop για 8 βίντεο χρησιµοποιώντας το 4 reference mode. Με µπλε το SNR της Y συνιστώσας, µε κόκκινο της U και µε πράσινο της V. Κ.Ζιάκας 96