Μάθημα: Μηχανική Όραση Εργασία 2: Advances in Digital Imaging and Computer Vision Ομάδα χρηστών 2 : Τσαγκαράκης Νίκος, Καραμήτρος Κώστας Εισαγωγή Σκοπός της άσκησης, είναι να εξοικειωθούμε με κάποιες βασικές τεχνικές της μηχανικής όρασης, όπως είναι το φιλτράρισμα εικόνων, η ανίχνευση ακμών και η ανίχνευση γωνιών. Φυσικά όλοι οι κώδικες έχουν αναπτυχθεί σε περιβάλλον Matlab, συνεπώς η ορολογία που θα χρησιμοποιηθεί για την περιγραφή των επιλύσεων των ασκήσεων θα είναι η ανάλογη. Άσκηση 1 Σε αυτή την άσκηση, δημιουργούμε κάποια φίλτρα με σκοπό να εξετάσουμε τα αποτελέσματα που προκαλούν, όταν τα περνάμε (φιλτράρουμε) από κάποιες εικόνες. Σε κάθε εικόνα που ακολουθεί, αριστερά θα φαίνεται η αρχική εικόνα, ενώ δεξιά η φιλτραρισμένη. Συγκεκριμένα έχουμε: Blurring) Δημιουργώντας φίλτρο της μορφής : Β(Ν)=(1/(Ν^2))*ones(N,N), προκαλούμε θόλωμα της εικόνας. Μεγαλύτερη τιμή του Ν προκαλεί εντονότερο θόλωμα. Το φιλτράρισμα που φαίνεται στην Εικόνα 1.1 υλοποιείται για Ν=5. Εικόνα 1.1
Sharpening) Δημιουργώντας φίλτρο της μορφής που δείχνει η Εικόνα 1.2 μπορούμε να ενισχύσουμε τις αντιθέσεις που υπάρχουν σε μια εικόνα. Το αποτέλεσμα του φιλτραρίσματος για m=8, N=3, φαίνεται στην Εικόνα 1.3. Εφόσον δεν σκοπεύουμε να αλλάξουμε την φωτεινότητα της εικόνας, το άθροισμα των στοιχείων του φίλτρου πρέπει να παραμένει ίσος με ένα. Εικόνα 1.2 Εικόνα 1.3 Gaussian filter) Με χρήση της συνάρτησης fspecial, δημιουργούμε φίλτρο Gauss, το οποίο έχει μέγεθος (15Χ15) και τυπική απόκλιση σ=2,5. Το φιλτράρισμα με τέτοια εικόνα (Εικόνα 1.4) εισάγει στην αρχική μας εικόνα θόλωμα, το οποίο είναι μεγαλύτερο για μεγαλύτερες τιμές της τυπικής απόκλισης. Φυσικά το μέγεθος του φίλτρου πρέπει να είναι 6 φορές τουλάχιστον η τυπική απόκλιση. Εικόνα 1.4
Sobel filter) Με χρήση της συνάρτησης fspecial, δημιουργούμε φίλτρο Sobel για τον άξονα Χ και Υ. Έπειτα φιλτράρουμε την εικόνα με κάθε ένα από αυτά τα φίλτρα, και στην συνέχεια παρουσιάζουμε την συνισταμένη των δυο εικόνων αυτών. (Εικόνα 1.5). Έτσι βλέπουμε τις ακμές της αρχικής εικόνας και στους δυο άξονες. Εικόνα 1.5 Άσκηση 2) Στην άσκηση αυτή δημιουργήθηκε συνάρτηση oriented_edges, η οποία λαμβάνει μια εικόνα (τύπου Double), μια τιμή threshold, μια γωνία α (σε μοίρες), και ένα γωνιακό εύρος da (σε μοίρες), και επιστρέφει μια εικόνα (τύπου binary) στην οποία φαίνονται οι ακμές της αρχικής εικόνας που είναι κάθετες στις διευθύνσεις (α-da, α+da). Αρχικά η συνάρτηση χρησιμοποιεί ένα Gaussian filter για να μειωθεί η επιρροή του θορύβου. Έπειτα υπολογίζει με την βοήθεια φίλτρων Sobel τις μερικές παραγώγους, ώστε να
υπολογισθεί τελικώς το gradient της εικόνας καθώς και η σχετική γωνία. Στη συνέχεια ως τελική πληροφορία κρατούμε εκείνα τα pixel που έχουν grad μεγαλύτερο από την τιμή threshold, και διεύθυνση εντός του δοσμένου διαστήματος. Διευκρινίζεται πως η γωνία α μετράται από τον άξονα Χ, και μεγαλώνει κατά την αντι-ορολογιακή φορά. Στην εικόνα 2.1, πάνω αριστερά φαίνεται η αρχική μας εικόνα. Τα αποτελέσματα που λαμβάνουμε από την συνάρτηση είναι: Πάνω-δεξιά για thr=100, a=90, da=5. Κάτω-δεξιά για thr=100, a=0, da=5. Κάτω-αριστερά για thr=20, a=30, da=5 Εικόνα 2.1 Συμπεραίνουμε πως για να εντοπίσουμε κάποια ακμή δεν αρκεί να γνωρίζουμε την διεύθυνση της, αλλά χρειάζεται να εισάγουμε και μια κατάλληλη τιμή του threshold η οποία έχει να κάνει με το πόσο σκούροχρωμο είναι το συγκεκριμένο σχήμα. Για παράδειγμα για τον εντοπισμό της μιας πλευράς του τριγώνου το οποίο είναι το πιο ανοικτόχρωμο πρέπει να εισαχθεί thr=20.
Άσκηση 3 Φτιάξαμε ένα φίλτρο που ανιχνεύει ζάρια τοποθετημένα οριζόντια στην εικόνα και μας φτιάχνει το περίγραμμα των ζαριών που βρήκαμε στην εικόνα και μας αναγράφει και τον αριθμό του κάθε ζαριού. Ο συλλογισμός μας, εφόσον μετρήσαμε το μέγεθος του ζαριού ήταν να βρούμε πρώτα τις ακμές τις εικόνας με την εντολή edge και να φτιάξουμε ένα φίλτρο που να τονίζει το περίγραμμα του ζαριού. Άρα φιλτράροντας την εικόνα περιμένουμε να πάρουμε μεγάλες τιμές στο κέντρο των ζαριών. Έπειτα περνάμε την εικόνα με ένα κατάλληλο threshold, ώστε να έχουμε μόνο 1 ή 0 στην εικόνα. Τέλος βρίσκω το κέντρο των ζαριών. Πλέον αφού ξέρω τα κέντρα των ζαριών και τις διαστάσεις εργάζομαι στο εσωτερικό του ζαριού για να εντοπίσω τι ζάρι είναι. Κάνω την ίδια μεθοδολογία με πάνω απλά τώρα μετράω τις κουκίδες που βρίσκω. Έπειτα ένα βρόχο για να καταχωρήσω σε πίνακα τις τιμές των ζαριών και την τοποθεσία που θα γραφτεί ο κάθε αριθμός και τέλος ένα βρόχο για να σχεδιάσω τα περιγράμματα των ζαριών. Παραθέτουμε εικόνες από τις δοκιμές σε διάφορες εικόνες με ζάρια και τις διάφορες αλλαγές που κάναμε σε κάποιες εικόνες για καλύτερα αποτελέσματα. Στην εικόνα dice_02.jpg με διάφορες τιμές threshold και πιο μικρό φίλτρο. Όταν το threshold είναι αρκετά χαμηλό 80 σε κάποια ζάρια βρίσκουμε πάνω από ένα ζάρι και σε όλα τα ζαριά δε βρίσκουμε σωστά την τιμή του ζαριού. Αυξάνονταςτο threshold βρίσκουμε όλο και λιγότερα ζάρια.
Στην εικόνα dice_03.jpg με διάφορες τιμές threshold και πιο μικρό φίλτρο. Με threshold 150 έχουμε το αποτέλεσμα α) με threshold 140 το αποτέλεσμα β) και προσπαθώντας να κατεβάσουμε το threshold και άλλο για να βρούμε και τα άλλα ζάρια έχουμε το αποτέλεσμα γ) Στην εικόνα dice_05.jpg με τιμή threshold 140