Επεξεργασία Πολυµέσων Δρ. Μαρία Κοζύρη Π.Μ.Σ. «Εφαρµοσµένη Πληροφορική» Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήµιο Θεσσαλίας
Ενότητα 2: Θεωρία Χρώµατος & Αναπαραστάσεις και Πρότυπα Πολυµέσων Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 2
Θεωρία Χρώµατος Χρώµα = φως Ορατό Φως : Μικρό τµήµα του (ευρύτερου) φάσµατος της ηλεκτροµαγνητική ακτινοβολίας. Όλα τα σώµατα εκπέµπουν ηλεκτροµαγνητική ενέργεια. Μεταδίδεται µε τη µορφή ηλεκτροµαγνητικών κυµάτων. Ορατό φώς: 400 700 nm µήκος κύµατος Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 3
Εικόνα από την ιστοσελίδα: https://science-edu.larc.nasa.gov/eddocs/wavelengths_for_colors.html Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων
Το Ανθρώπινο Μάτι Δυο ειδών Φωτοϋποδοχείς: Ραβδία (περισσότερα, ευαίσθητα στην αλλαγή φωτεινότητας) Κωνία (λιγότερα, υπεύθυνα για την αντίληψη του χρώµατος) Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 5
Χρωµατικοί Χώροι Για την αντίληψη των χρωµάτων είναι απαραίτητοι 3 τύποι υποδοχέων (κωνία στο ανθρώπινο µάτι) Χρωµατικός Χώρος: µοντέλο στο οποίο τα χρώµατα αναπαρίστανται µε όρους σταθερών τιµών έντασης. Χρωµατικός Χώρος LMS: Απευθείας αναπαράσταση των αποκρίσεων των κωνιών του µατιού. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 6
Χρωµατικοί Χώροι Συνήθως χρησιµοποιούνται τρισδιάστατοι χρωµατικοί χώροι. Τρισδιάστατο σύστηµα συντεταγµένων. Χρωµατική Γκάµα (color gamut): Η περιοχή που περικλείεται από τον χρωµατικό χώρο και η οποία µας δίνει όλα τα πιθανά χρώµατα που µπορεί να αναπαραστήσει ο συγκεκριµένος Χ.Χ. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 7
Χρωµατικός Χώρος CIE XYZ Φωτεινότητα: το ανθρώπινο µάτι τείνει να αντιλαµβάνεται το φως στα πράσινα κοµµάτια του φάσµατος ως πιο έντονο, από ότι στα µπλέ και στα κόκκινα. Η συνάρτηση φωτεινότητας είναι περίπου ανάλογη µε τη φασµατική ευαισθησία των M κωνίων. Y : Φωτεινότητα. Ζ : Περιπού αντίστοιχο µε την απόκριση των S κωνίων. X : Γραµµικός συνδυασµός των αποκρίσεων των κωνίων (µη αρνητικός) Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 8
Χρωµατικός Χώρος CIE XYZ Το επίπεδο XΖ µας δίνει όλα τα δυνατά χρώµατα για µια συγκεκριµένη φωτεινότητα Υ Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 9
Χρωµατικός Χώρος RGB Γραµµικός (προσθετικός) χρωµατικός χώρος. Τα τρια µήκη κύµατος προστίθενται για να δώσουν το επιθυµητό χρώµα. Τα χρώµατα που προκύπτουν αναπαρίστανται ως ένας (µοναδιαίος) κύβος µε τις ακµές του να αναπαριστούν τα βάρη R, G και B. Η διαγώνιος συνδέει το µαύρο χρώµα (0,0,0) µε το λευκό (1,1,1) και αποτελεί όλες τις αποχρώσεις του γκρι. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 10
Χρωµατικός Χώρος RGB Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 11
Χρωµατικός Χώρος CMY (or CMYK) Γραµµικός (αφαιρετικός) χρωµατικός χώρος. C (cyan), M (magenta), Y(yellow): συµπληρωµατικά των R, G, B αντίστοιχα. CMYK : το µαύρο χρώµα (Κ) θεωρείται µέρος του χώρου. Χρησιµοποιείται κυρίως στην εκτύπωση. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 12
Χρωµατικός Χώρος YUV Υ : φωτεινότητα. U, V : χρώµα. Οι τιµές των R, G, B αφού πολλαπλασιαστούν µε κάποια βάρη, προστίθενται για να δώσουν το Y. Τα U καιv υπολογίζονται ως scaled διαφορές µεταξύ του Y και των τιµών των B και R. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 13
Υποδειγµατοληψία YUV The subsampling scheme is commonly expressed as a three part ratio J:a:b (e.g. 4:2:2) or four parts if alpha channel is present (e.g. 4:2:2:4), that describe the number of luminance and chrominance samples in a conceptual region that is J pixels wide, and 2 pixels high. The parts are (in their respective order): J: horizontal sampling reference (width of the conceptual region). Usually, 4. a: number of chrominance samples (Cr, Cb) in the first row of J pixels. b: number of changes of chrominance samples (Cr, Cb) between first and second row of J pixels. Alpha: horizontal factor (relative to first digit). May be omitted if alpha component is not present, and is equal to J when present. Πηγή: Wikipedia (https://en.wikipedia.org/wiki/chroma_subsampling) Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 14
Αναπαραστάσεις Πολυµέσων Ψηφιακή Αναπαράσταση Εικόνας Στοιχεία Ψηφ. Εικόνας: Pixels Ορίζεται από: Πλάτος, Ύψος, Βάθος των Pixel. Pixel Depth: Πλήθος bit που χρησιµοποιούνται για την αναπαράσταση ενός pixel. RGB ή RGBA Channel A: Ποσοτικοποιεί το πόσο διαφανές είναι το pixel. Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 15
Αναπαραστάσεις Πολυµέσων Ψηφιακή Αναπαράσταση Video Video αναλογικό ή ψηφιακό: ακολουθία διακριτών εικόνων. Κάθε εικόνα ονοµάζεται frame. Έχει τις ιδιότητες των ψηφιακών εικόνων. Επιπλέον: frame rate, scanning format Scanning format: progressive, interlaced Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 16
Αναπαραστάσεις Πολυµέσων Ψηφιακή Αναπαράσταση Ήχου Αναλογικός Ήχος: κυµατοµορφές (ηµιτονοειδής), απλές ή σύνθετες. Μετατροπή σε ψηφιακό: PCM pulse code modulation Το αναλογικό σήµα δειγµατοληπτείται σε ισαπέχουσες χρονικές στιγµές, δίνοντας δείγµατα ήχου. Το πλάτος κάθε δείγµατος κωδικοποιείται µε σταθερό πλήθος bit και όλα τα δείγµατα αναπαρίστανται µε το ίδιο πλήθος από bit κβάντισης. Επιπλέον των ρυθµού δειγµατοληψίας και του µεγέθους του δείγµατος, µια άλλη ιδιότητα του ψηφιακού ήχου είναι το πλήθος των καναλιών (ένα mono, δυο stereo, πολλά - surround) Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 17
Παράδειγµα Κώδικα Διαχείρισης Εικόνας Από το βοηθητικό υλικό του βιβλίου «Συστήµατα Πολυµέσων: Αλγόριθµοι, Πρότυπα & Εφαρµογές» http://www.cengage.com/cgiwadsworth/course_products_wp.pl?fid=m20b&product_isbn_issn=978141883 5941&discipline_number=0
// Constructor and Desctructors MyImage::MyImage() { Data = NULL; Width = -1; Height = -1; ImagePath[0] = 0; MyImage::~MyImage() { if ( Data ) delete Data; // Copy constructor MyImage::MyImage( MyImage *otherimage) { Height = otherimage->height; Width Data = otherimage->width; = new char[width*height*3]; strcpy(otherimage->imagepath, ImagePath ); ) for ( int i=0; i<(height*width*3); i++ { Data[i] = otherimage->data[i]; Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 19
// = operator overload MyImage & MyImage::operator= (const MyImage &otherimage) { Height = otherimage.height; Width = otherimage.width; Data = new char[width*height*3]; strcpy( (char *)otherimage.imagepath, ImagePath ); for ( int i=0; i<(height*width*3); i++ ) { Data[i] = otherimage.data[i]; return *this; Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 20
// MyImage::ReadImage // Function to read the image given a path bool MyImage::ReadImage() { // Verify ImagePath if (ImagePath[0] == 0 Width < 0 Height < 0 ) { fprintf(stderr, "Image or Image properties not defined"); fprintf(stderr, "Usage is `Image.exe Imagefile w h`"); return false; // Create a valid output file pointer FILE *IN_FILE; IN_FILE = fopen(imagepath, "rb"); if ( IN_FILE == NULL ) { fprintf(stderr, "Error Opening File for Reading"); return false; // Create and populate RGB buffers int i; char *Rbuf = new char[height*width]; char *Gbuf = new char[height*width]; char *Bbuf = new char[height*width]; for (i = 0; i < Width*Height; i ++){ Rbuf[i] = fgetc(in_file); for (i = 0; i < Width*Height; i ++){ Gbuf[i] = fgetc(in_file); for (i = 0; i < Width*Height; i ++){ Bbuf[i] = fgetc(in_file); // Allocate Data structure and copy Data = new char[width*height*3]; for (i = 0; i < Height*Width; i++){ Data[3*i] = Bbuf[i]; Data[3*i+1] = Gbuf[i]; Data[3*i+2] = Rbuf[i]; // Clean up and return delete Rbuf; delete Gbuf; delete Bbuf; fclose(in_file); return true; Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 21
// MyImage functions defined here bool MyImage::WriteImage() { // Verify ImagePath // Verify ImagePath if (ImagePath[0] == 0 Width < 0 Height < 0 ){ fprintf(stderr, "Image or Image properties not defined"); return false; // Create a valid output file pointer FILE *OUT_FILE; OUT_FILE = fopen(imagepath, "wb"); if ( OUT_FILE == NULL ) { fprintf(stderr, "Error Opening File for Writing"); return false; // Create and populate RGB buffers int i; char *Rbuf = new char[height*width]; char *Gbuf = new char[height*width]; char *Bbuf = new char[height*width]; // Write data to file for (i = 0; i < Width*Height; i ++){ fputc(rbuf[i], OUT_FILE); for (i = 0; i < Width*Height; i ++){ fputc(gbuf[i], OUT_FILE); for (i = 0; i < Width*Height; i ++){ fputc(bbuf[i], OUT_FILE); // Clean up and return delete Rbuf; delete Gbuf; delete Bbuf; fclose(out_file); for (i = 0; i < Height*Width; i++){ Bbuf[i] = Data[3*i]; Gbuf[i] = Data[3*i+1]; Rbuf[i] = Data[3*i+2]; return true; Δρ. Μαρία Κοζύρη Επεξεργασία Πολυµέσων 22