ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ Αντικείμενο: Κατανόηση και αναπαράσταση των βασικών σημάτων δύο διαστάσεων και απεικόνισης αυτών σε εικόνα. Δημιουργία και επεξεργασία των διαφόρων τύπων εικόνας που υποστηρίζονται από τις δομές δεδομένων των πιο γνωστών γλωσσών προγραμματισμού. Εφαρμογή στο πρόγραμμα MATLAB. 1. Βασικοί συμβολισμοί και σημειογραφία. Γνωρίζουμε ότι ένα μονοδιάστατο σήμα συνεχούς χρόνου αναπαρίσταται ως συνάρτηση μιας ανεξάρτητης μεταβλητής (συνήθως του χρόνου) t όπως: f ( t), u(t), s(t). Τα μονοδιάστατα διακριτά σήματα μπορούν να αναπαρασταθούν με την χρήση ενός απλού δείκτη: x(n), x n, κ.λ.π. Με όμοιο τρόπο, μια αναλογική εικόνα μπορεί να αναπαρασταθεί ως μια συνάρτηση δύο ανεξαρτήτων μεταβλητών (στο επίπεδο) x, y όπως u ( x, y), f ( x, y). Η ψηφιακή εικόνα αναπαριστάται σαν μια δισδιάστατη ακολουθία πραγματικών αριθμών: u,, ή συνηθέστατα u ( i, j) με τα i,j να λαμβάνουν διακριτές τιμές. Τα σύμβολα i, j, k, l, m, n μπορούν και θα χρησιμοποιούνται για την περιγραφή των ακεραίων συντεταγμένων της διάταξης μιας εικόνας. Το MATLAB μας διευκολύνει αρκετά στην επεξεργασία εικόνας καθώς η βασική δομή δεδομένων του είναι η διάταξη (array) αριθμών. H δομή αυτή χρησιμοποιείται για την αναπαράσταση της εικόνας σαν μια διάταξη πραγματικών ή ακεραίων αριθμών. Το MATLAB αποθηκεύει τις περισσότερες εικόνες σαν δισδιάστατους πίνακες. Κάθε στοιχείο τους αντιστοιχεί σε ένα στοιχείο εικόνας ή αλλιώς σε ένα pixel της εικόνας. Για παράδειγμα μια εικόνα που αποτελείται από 200 γραμμές και 300 στήλες διαφορετικών χρωμάτων θα αναπαρίσταται από το MATLAB σε έναν πίνακα διαστάσεων 200 300. Κάποιες εικόνες όπως οι τριπλού χρώματος (RGB), απαιτούν την χρήση τρισδιάστατων πινάκων. Εδώ η πρώτη διάσταση χρησιμοποιείται για την αποθήκευση πληροφορίας σχετικής με το κόκκινο (RED) χρώμα η δεύτερη διάσταση για το μπλε (BLUE) χρώμα και η Τρίτη διάσταση για το πράσινο (GREEN) χρώμα. Η σύμβαση για την επεξεργασία των εικόνων με το MATLAB είναι ακριβώς η ίδια με την σύμβαση που χρησιμοποιούμε και στις άλλες εφαρμογές του. Έτσι, η επιλογή ενός pixel μιας εικόνας με όνομα Ι θα μπορεί να γίνει με την κανονική τοποθέτηση δεικτών. Π.χ η εντολή I(2,15) θα μας επέστρεφε την τιμή του pixel στην γραμμή 2 και στήλη 15 της εικόνας με όνομα Ι. Συνήθως το ΜΑΤLAB αποθηκεύει τα δεδομένα του σύμφωνα με το πρότυπο αναπαράστασης πραγματικού αριθμού διπλής ακρίβειας 64 bits (double precision). Για τις ανάγκες της επεξεργασίας της εικόνας μπορούν να προκύψουν ορισμένες δυσκολίες. Π.χ για μια εικόνα 1000 1000 θα θέλαμε 8 MB μνήμης μόνο για την αποθήκευσή της. Για να ελαττώσουμε της n m
απαιτήσεις σε πόρους, το MATLAB υποστηρίζει την αποθήκευση των εικόνων σε μεταβλητές μεγέθους 8 ή 16 bits (uint8 ή uint16 τύποι δεδομένων αντίστοιχα). ΕΡΓΑΣΤΗΡΙΑΚΗ ΔΙΑΔΙΚΑΣΙΑ 1. Ορίστε και απεικονίστε με την βοήθεια του MATLAB τα παρακάτω σήματα x(n,m) για τιμές των n,m στο διάστημα [1, 256]x[1, 256]. (a) δ(n,m) (b) δ(n-2,m-3) (c) u(n,m) (d) u(n-3,m-2) (e) u r (n,m) 2. Ορίστε και απεικονίστε με την βοήθεια του MATLAB ένα περιοδικό, τριγωνικό σήμα δύο διαστάσεων x triangle (n,m). Η περίοδος για τον οριζόντιο άξονα θα είναι 32 pixels ενώ για τον κατακόρυφο άξονα θα είναι 64 pixels. Το συνολικό μέγεθος του πίνακα θα είναι 256 256. Υπόδειξη: Ο παρακάτω κώδικας παρουσιάζει για 150 δείγματα και περίοδο δειγματοληψίας 1, ένα τριγωνικό μονοδιάστατο σήμα x(n) με περίοδο 10 δείγματα. m1=mod([0:149], 10); stem(m1) 9 8 7 6 5 4 3 3. Ορίστε και 2 1 0 0 50 100 150 απεικονίστε με την βοήθεια του MATLAB ένα περιοδικό, ημιτονικό σήμα δύο διαστάσεων x sin (n,m) για μια εικόνα 256 256 pixels. Η περίοδος της οριζόντιας συχνότητας θα είναι 128 pixels ενώ της κατακόρυφης συχνότητας θα είναι 64 pixels. Σημείωση: Μπορείτε να χρησιμοποιήσετε την εντολή: 2
imshow(im,[min(im(:)),max(im(:))]) για την εμφάνιση μιας εικόνας im με θετικές και αρνητικές τιμές. 4. Ο παρακάτω κώδικας MATLAB διαβάζει μια εικόνα από το περιβάλλον και την εμφανίζει στην οθόνη: clear load trees imshow(x,map) (α) Χρησιμοποιείστε την εντολή whos και καταγράψτε τα στοιχεία της. (β) Τι περιμένετε από την εκτέλεση της εντολής rgb=ind2rgb(x,map); Εμφανίστε το αποτέλεσμα της εντολής και ελέγξτε τους τύπους των μεταβλητών. (γ) Μετατρέψτε την εικόνα δείκτη σε μια εικόνα φωτεινότητας. (δ) Μετατρέψτε την εικόνα φωτεινότητας σε μια εικόνα με δύο μόνο διαβαθμίσεις του γκρίζου (άσπρο-μαύρο). Η επιλογή του κατωφλίου κβάντισης να γίνει με υποκειμενικά κριτήρια. Εμφανίστε τόσο την προκύπτουσα εικόνα όσο και την αρνητική της. (ε) Να υπολογίσετε με την βοήθεια του MATLAB πόσα λευκά και πόσα μαύρα pixels υπάρχουν στην εικόνα. Τροποποιείστε την επιλογή του κατωφλίου ώστε να λάβετε ένα ποσοστό λευκών pixels - μαύρων pixels ίσο με 50%. Εμφανίστε την εικόνα. 3
5. Ο παρακάτω κώδικας MATLAB διαβάζει μια εικόνα από το περιβάλλον και την εμφανίζει στην οθόνη: clear all close all rgb_image1=imread('flowers.tif'); imshow(rgb_image) (α) Χρησιμοποιείστε την εντολή whos και καταγράψτε τα στοιχεία της. Τι παρατηρείτε για την μεταβλητή rgb_image; (β) H παραπάνω εικόνα είναι τύπου πραγματικού χρώματος ή όχι; (γ) Απεικονίστε την εικόνα με κάθε ένα επίπεδο χρώματος (RGB). Υπόδειξη: Η συνάρτηση colormap επιστρέφει τον πίνακα τιμών που αντιστοιχεί στα τρία βασικά χρώματα (Κόκκινο, Πράσινο, Μπλε). Δημιουργήστε με το ΜATLAB τρεις νέους πίνακες, καθένας εκ των οποίων θα περιέχει ΜΟΝΟ την πληροφορία για το κάθε ένα χρώμα. Στην συνέχεια απεικονίστε κάθε ένα χρώμα του πίνακα rgb_image με την ανάλογη πληροφορία. Όταν η συνάρτηση colormap χρησιμοποιηθεί με όρισμα, π.χ. colormap(blue), μετατρέπει την εμφάνιση της αρχικής εικόνας με βάση το χρώμα του πίνακα-όρισμα. Έτσι η εμφάνιση της εικόνας μόνο με την πληροφορία του κόκκινου χρώματος θα πρέπει να απεικονίζεται ως: 4
(δ) Μετατρέψτε τον πίνακα χρωμάτων colormap της εικόνας με την χρήση των παρακάτω συναρτήσεων του MATLAB: GRAY, HOT, COOL, BONE, COPPER, PINK, FLAG, PRISM, JET, COLORCUBE. Σχεδιάστε την εικόνα που σας ταιριάζει καλύτερα. 6. Για κάθε ένα από τα παραπάνω διαθέσιμα σύνολα χρωμάτων δημιουργείστε μια εικόνα ραβδόγραμμα 64 256 pixels όπου σε κάθε γραμμή θα αντιστοιχεί και ένα χρώμα του αντίστοιχα επιλεγμένου πίνακα χρωμάτων colormap. 7. Η εικόνα της άσκησης 5 είναι στον χώρο του ορθοκανονικού συστήματος χρωμάτων RGB. Για να μετασχηματίσουμε τον χώρο RGB στον χώρο YIQ ο οποίος χρησιμοποιείται στην μετάδοση της τηλεόρασης χρησιμοποιούμε τον παρακάτω μετασχηματισμό: Y 0.299 0.587 0.114 R I 0.596 0.275 0.321 G Q 0.212 0.523 0.311 B όπου Υ είναι η φωτεινότητα της εικόνας (Luminance) και I, Q είναι οι χρωματικές ιδιότητες της εικόνας (Inphase, Quadrature). Εφαρμόστε τον παραπάνω πίνακα μετασχηματισμού και εμφανίστε την εικόνα που αντιστοιχεί στην φωτεινότητα. 5
8. Δημιουργείστε ένα δισδιάστατο πίνακα Χ μεγέθους 256 512. Κάθε γραμμή του θα περιέχει ένα σταθερό νούμερο από 1 μέχρι 256. Π.χ η γραμμή 1 θα περιέχει 512 1, η γραμμή 5 θα περιέχει 512 5 κ.ο.κ. Χρησιμοποιείστε την συνάρτηση im2uint8 για μετατρέψετε την αρχική εικόνα σε μια εικόνα όπου οι τύποι των δεδομένων θα έχουν εύρος 8bit (δηλαδή μέχρι και 256 τιμές). 9. Καθορίστε τρεις διαφορετικούς πίνακες απεικόνισης που θα αντιστοιχούν στα τρία βασικά χρώματα δηλαδή έναν για το μπλε, έναν για τον κόκκινο και έναν για το πράσινο. Απεικονίστε τον πίνακα Χ για κάθε ένα χρώμα με την βοήθεια της συνάρτησης colormap. 10. Δημιουργείστε τα τρία συμπληρωματικά χρώματα (CMY). Επαναλάβετε την διαδικασία του βήματος 9. 6