[ΗΡΥ 411] Ενσωματωμένα Συστήματα Μικροεπεξεργαστών Σύστημα επεξεργασίας εικόνας για την ανίχνευση χειριστηρίων Ομάδα Εργασίας : Γεωργαρά Αθηνά Γραμματόπουλος Αθανάσιος Βασίλειος (A.M. 2011030065) (A.M. 2011030028) Έγκριση : Καθ. Δ. Πνευματικάτος Καθ. Α. Δόλλας ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2014-2015
Αρχική ιδέα Θέλαμε να ασχοληθούμε με την επεξεργασία εικόνας, γι αυτό και επιλέξαμε να αναλύσουμε τα δεδομένα που δίνει μια κάμερα (web cam) σε έναν υπολογιστή, με σκοπό να εξάγουμε χρήσιμα δεδομένα. Η ιδέα, λοιπόν, να φτιάξουμε ένα σύστημα απομακρυσμένης διαχείρισης με επεξεργασία εικόνας ήταν αρκετά ελκυστική. Δεν είχαμε ασχοληθεί ξανά με παρόμοιο project, και θέλαμε να χρησιμοποιήσουμε τις γνώσεις μας πάνω στο αντικείμενο (γνώσεις από μαθήματα όπως Ψηφιακή Επεξεργασία Εικόνας, Μηχανική Όραση) για την υλοποίηση ενός project και σε πρακτικό επίπεδο. Η γλώσσα με την οποία θέλαμε να υλοποιήσουμε το σύστημα ήταν η C++, την οποία δεν γνωρίζαμε εξ ολοκλήρου (γνωρίζαμε τη γλώσσα C), ήταν ένα έναυσμα για να μάθουμε τη γλώσσα. Τελικά, αποφασίσαμε να υλοποιήσουμε ένα σύστημα επεξεργασίας εικόνας για την ανίχνευση χειριστηρίων. Στην διάθεση μας είχαμε ένα Raspberry Pi το οποίο παρέχει αρκετή υπολογιστική ισχύ για επεξεργασία εικόνας. Αρχίσαμε, λοιπόν, να κάνουμε κάποιες πρώτες δοκιμές στο Raspberry Pi για να συμπεράνουμε εφόσον η ιδέα μας είναι εφικτή. Αιτιολόγηση Αποφάσεων Raspberry Pi B+: Χρησιμοποιήθηκε το Raspberry γιατί είναι αρκετά ισχυρός μικρο-ελεγκτής. Άλλοι μικρο-ελεγκτές όπως ένα Arduino δεν έχει την απαιτούμενη ισχύ και μνήμη για μια τέτοια επεξεργασία. Επίσης το λογισμικό του Raspberry βασίζεται σε Linux (Debian), το οποίο υποστηρίζει τον compiler gcc (για το compile της C++). OpenCV: Η χρήση της OpenCV δεν ήταν αναγκαία, αλλά αναγκαστική λόγω του χρονικού περιθωρίου που είχαμε διαθέσιμο. Χωρίς την χρήση της OpenCV θα έπρεπε να γράψουμε τους drivers της κάμερας, η οποία δεν έχει open source documentation για τους usb descriptors. C++: Θέλαμε να χρησιμοποιήσουμε μια γλώσσα την οποία δεν γνωρίζαμε. Επιλέξαμε την C++, γιατί είναι αρκετά σημαντική γλώσσα και η εύκολη μετάβαση από την γλώσσα C (την οποία γνωρίζουμε) την καθιστά πιο εύκολη στην εκμάθηση. Χειριστήρια: Ως χειριστήριο θέλαμε μια κατασκευή ελαφριά με χώρο για το LED και την μπαταρία. Να έχει δυνατότητα να εφαρμοστεί πάνω του κουμπί (push button). Και να έχει ημιδιαφανές (λευκού χρώματος) καπάκι. Εξαγωγή Δεδομένων: Για την εξαγωγή δεδομένων χρησιμοποιήσαμε sockets με χρήση Ethernet, το οποίο για κοντινές αποστάσεις είναι μια real time υλοποίηση. Επίσης, με αυτό τον τρόπο, μπορεί οποιαδήποτε πλατφόρμα, η οποία έχει την δυνατότητα να συνδεθεί στο δίκτυο, να λάβει τα δεδομένα. 1
θεωρητικό Υπόβαθρο 1 Χρωματικά Μοντέλα (a) RGB Η υπό επεξεργασία εικόνα απεικονίζεται κατά κύριο λόγω στο χρωματικό μοντέλο RGB. Σ αυτό το χρωματικό μοντέλο, κάθε χρώμα περιγράφεται από τις πρωτεύουσες φασματικές του συνιστώσες, που είναι το κόκκινο, το πράσινο και το μπλε. Κάθε μια από τις φασματικές συνιστώσες παίρνει μια διακριτή τιμή από το σύνολο [0, 255]. Ο χρωματικός υποχώρος που χρησιμοποιείται είναι κύβος. Color = {R, G, B} Το μαύρο χρώμα αντιστοιχεί στην αρχή του συστήματος συντεταγμένων και κάθε φασματική συνιστώσα έχει την τιμή 0, ενώ το λευκό αντιστοιχεί στην κορυφή που απέχει τη μεγαλύτερη δυνατή απόσταση από την αρχή των αξόνων και κάθε φασματική συνιστώσα έχει την τιμή 255. Black = {0, 0, 0} W hite = {255, 255, 255} (b) GrayScaled και Binary Το χρωματικό μοντέλο RGB χρησιμοποιείται για την απεικόνιση μιας έγχρωμης εικόνας και εκτείνεται σε τρεις διαστάσεις. Για την δημιουργία μιας δυαδικής εικόνας (απαιτείται για την τεχνική τιτλοφόρησης, η οποία αναφέρεται παρακάτω) χρειάζεται πρώτα η μετάβαση στην ασπρόμαυρη εικόνα. Υπάρχουν αρκετοί αλγόριθμοι για την μετατροπή της έγχρωμης εικόνας σε ασπρόμαυρη. Ο απλούστερος εξ αυτών, αναθέτει ως απόχρωση του γκρι για κάθε εικονοστοιχείο το άθροισμα των φασματικών συνιστωσών. Εδώ, χρησιμοποιείται ο παρακάτω αλγόριθμος: GrayScaled = 0.2126R + 0.7152G + 0.0722B Ο συνδυασμός των συντελεστών βαρύτητας των φασματικών συνιστωσών, έχει αποδειχτεί ότι προσομοιώνει καλύτερα την τριχρωματική αντίληψη του ανθρώπου. Σε μια δυαδική κάθε εικονοστοιχείο μπορεί να πάρει την τιμή 1 ή 0. Η τιμή του εικονοστοιχείου καθορίζεται βάση ενός κατωφλίου, δηλαδή αν τιμή του εικονοστοιχείου στην ασπρόμαυρη μορφή της εικόνας είναι μεγαλύτερη από το κατώφλι τότε στη δυαδική εικόνα το εικονοστοιχείο παίρνει την τιμή 1, αλλιώς παίρνει την τιμή 0. { 1 if GrayScaled T Binary = 0 if GrayScaled < T Το επιλεγμένο κατώφλι, έχει αρκετά υψηλή τιμή ώστε να απομονώσουμε τις πολύ φωτεινές περιοχές. 2 Ανίχνευση αντικειμένων με χρήση τεχνικής Τιτλοφόρησης Labeling Σκοπός της διαδικασίας τιτλοφόρησης είναι να ανατεθεί σε κάθε διακριτό αντικείμενο ένας μοναδικός τίτλος (label). Ο αλγόριθμος σαρώνει την εικόνα, σε κάθε εικονοστοιχείο 2
ελέγχει αν ανήκει στο background (τιμή 0) ή σε κάποιο αντικείμενο (τιμή 1). Αν το εικονοστοιχείο έχει την τιμή 1, τότε ελέγχονται τα γειτονικά εικονοστοιχεία (συνδεσιμότητα 4-4 connectivity). Στη περίπτωση που κανένα από τα γειτονικά εικονοστοιχεία δεν ανήκει σε κάποιο αντικείμενο, τότε ορίζεται ένα νέο αντικείμενο στο οποίο αντιστοιχεί ένας νέος μοναδικός τίτλος. Στην περίπτωση που τα γειτονικά εικονοστοιχεία ανήκουν σε ένα αντικείμενο τότε το παρών εικονοστοιχείο ανήκει σ αυτό το αντικείμενο. Τέλος, αν τα γειτονικά εικονοστοιχεία ανήκουν σε δύο ή περισσότερα (διαφορετικά) αντικείμενα, τότε οι τίτλοι των αντικειμένων αυτών σημειώνονται ως ισοδύναμοι (συνθέτουν δηλαδή ένα ενιαίο αντικείμενο). Παρακάτω (εικόνες 1-3) φαίνονται παραδείγματα που προέκυψαν ύστερα από προσομοίωση στη γλώσσα Matlab. Figure 1: Grayscaled Figure 2: Binary Figure 3: Labeled 3
3 Αξιολόγηση Αντικειμένων ως Φωτεινή Πηγή Με σκοπό να απομονώσουμε τις φωτεινές πηγές, παρακάτω εισάγουμε κάποια χαρακτηριστικά που πρέπει να πληρεί ένα αντικείμενο ώστε να θεωρηθεί φωτεινή πηγή. Κατά την τεχνική labeling υπολογίζονται μετρικές που μας επιτρέπουν να εντάξουμε ή μη ένα αντικείμενο στο σύνολο των φωτεινών πηγών που ανιχνεύθηκαν. (a) Κυκλικότητα Το αντικείμενο που ανιχνεύτηκε πρέπει να έχει κυκλικό σχήμα. Η μετρική της κυκλικότητας δίνεται από τον τύπο: area roundness = 4π perimeter 2 προφανώς, εκτός από την κυκλικότητα υπολογίζονται επίσης η επιφάνεια και η περίμετρος του αντικειμένου. (b) Μέγιστη αναλογία πλευρών Για να αποκλείσουμε ελλειψοειδεί αντικείμενα της μορφής: (c) Figure 4: Non-acceptable eclipse υπολογίζουμε την μέγιστη αναλογία μεταξύ των πλευρών του αντικειμένου, έτσι ώστε: Ελάχιστο ύψος και πλάτος { height max width, width } < 2 height Ως ύψος και πλάτος του αντικειμένου θεωρούμε τα αντίστοιχα μεγέθη του ορθογωνίου στο οποίο είναι εγγεγραμμένο το αντικείμενο. Θέλουμε να αποκλείσουμε πολύ μικρές περιοχές, οπότε απαιτούμε η κάθε πλευρά να περιλαμβάνει τουλάχιστον 4 εικονοστοιχεία: height > 4 width > 4 4
(d) Μέγιστη επιτρεπτή διάμετρος Ως διάμετρο του αντικειμένου θεωρούμε τη μέγιστη πλευρά του (μέγιστη πλευρά μεταξύ του ύψους και του πλάτους του αντικειμένου). Για να αποκλείσουμε πολύ μεγάλες περιοχές, απαιτούμε η διάμετρος του αντικειμένου να είναι μικρότερη από μια μέγιστη επιτρεπτή διάμετρο η οποία ορίζεται ως εξής: { } min img_height, img_width max_valid_diameter = 3 Απαιτούμε δηλαδή το αντικείμενο να έχει διάμετρο ίση το πολύ με το ένα τρίτο του μεγέθους της εικόνας. 4 Διαλογή βάση κριτηρίων αντικειμένου σύμφωνα με το υπερισχύον χρώμα Μετά την αξιολόγηση ενός αντικειμένου ως φωτεινή πηγή πρέπει να αντιστοιχίσουμε το αντικείμενο με την κατάλληλη πηγή, βάση του χρώματός του. Η επεξεργασία, τώρα, γίνεται στην αρχική έγχρωμη εικόνα. Τα εικονοστοιχεία που ανήκουν στα αξιολογημένα ως φωτεινές πηγές αντικείμενα έχουν κάποιες τιμές για κάθε φασματική συνιστώσα (κόκκινο, πράσινο, μπλε). Για να προέρχονται από μια έγκυρη φωτεινή πηγή 1 πρέπει ο συνδυασμός των τιμών στις φασματικές συνιστώσας να είναι τέτοιος ώστε να συνθέτουν ένα από τα επιθυμητά χρώματα. 1 Το σύστημα επιχειρεί να αναγνωρίσει φωτεινές πηγές συγκεκριμένων χρωμάτων, κόκκινη, μπλε, πράσινη και κίτρινη. 5
Υλοποίηση Χρησιμοποιούνται: Raspberry Pi B+ Windows HD LifeCam 3000(Web Camera) Αυτοσχέδια Χειριστήρια / Φωτεινές Πηγές Πρόγραμμα γραμμένο σε γλώσσα C/C++ Υπολογιστής (laptop) Καλώδιο Ethernet 1 Ροή Προγράμματος Στην εικόνα(5) φαίνεται το διάγραμμα ροής του συστήματος. Figure 5: Code flaw 6
(a) Επικοινωνία Raspberry και κάμερας Η πρώτη δυσκολία που κληθήκαμε να αντιμετωπίσουμε κατά την υλοποίηση του συστήματος ήταν η επικοινωνία της κάμερας με τον υπολογιστή Raspberry. Οι drivers της web cam δεν είναι open source, ούτε αναφέρεται στο documentation της κάμερας ο τρόπος λειτουργίας της. Από τις πληροφορίες των usb descriptor της κάμερας δεν καταφέραμε να την κάνουμε να δουλέψει. Για τον λόγο αυτό χρησιμοποιήθηκε και η βιβλιοθήκη OpenCV 2 η οποία όμως δεν υποστηρίζει όλες τις λειτουργίες της κάμερας, όπως για παράδειγμα δεν καταφέραμε να απενεργοποιήσουμε την αυτόματη ισοστάθμιση της φωτεινότητας. Η χρήση της βιβλιοθήκης περιορίστηκε μόνο στο κομμάτι της επικοινωνίας, και δεν αξιοποιήθηκαν άλλες δυνατότητες (έτοιμες συναρτήσεις) που παρέχει. Το σύστημα παρέχει στο χρήστη δυνατότητα επιλογής διαφορετικής ανάλυσης (5 δυνατές αναλύσεις), καθρεπτικής λήψης (reflect), εμφάνιση παραθύρου video - επίσης, δυνατότητα για full screen- με σημειωμένες τις φωτεινές πηγές που έχουν ανιχνευτεί. (b) Επεξεργασία της εικόνας Παρακάτω, όπου γίνεται λόγος για εικόνα, θεωρούμε δυναμική εικόνα (video) και όχι στατική. Γίνεται προσπέλαση όλων των εικονοστοιχείων της εικόνας ένα προς ένα. Καθρεπτική Λήψη Σε περίπτωση που ο χρήστης έχει επιλέξει την καθρεπτική λήψη το εκάστοτε εικονοστοιχείο πρέπει να περιστραφεί ως προς έναν νοητό άξονα στο μέσον της εικόνας. Η περιστροφή αυτή επιτυγχάνεται ακολουθώντας τον παρακάτω τύπο: { x if reflect is off _x = width x 1 if reflect is on όπου width είναι το πλάτος της εικόνας (frame) και reflect παράμετρος που δίνεται από το χρήστη. Έγχρωμη Εικόνα Όπως έχει αναφερθεί και προηγουμένως, για την απεικόνιση της έγχρωμης φωτογραφίας χρησιμοποιείται το χρωματικό μοντέλο RGB. Η βιβλιοθήκη OpenCV μας παρέχει τις τρεις φασματικές συνιστώσες κάθε εικονοστοιχείου της εικόνας (frame) που τράβηξε η κάμερα. Gray Scaled Εικόνα Χρησιμοποιώντας την σχέση GrayScaled = 0.2126R + 0.7152G + 0.0722B εύκολα υπολογίζουμε την gray-scaled τιμή κάθε εικονοστοιχείο. 2 Να σημειωθεί ότι η εγκατάσταση της βιβλιοθήκης OpenCV τόσο στο Raspberry όσο και σε υπολογιστή (λογισμικού Ubuntu) ήταν μια αρκετά χρονοβόρα διαδικασία. 7
Binary Εικόνα Στην συνέχεια περνάμε την gray-scaled τιμή από ένα κατώφλι, αποφασίζοντας την binary τιμή του εικονοστοιχείου σύμφωνα με τη σχέση: { 1 if GrayScaled T = 230 Binary = 0 if GrayScaled < T = 230 Οι παραπάνω διαδικασίες απαιτούν μία και μόνον προσπέλαση του frame, καθώς οι ενέργειες που περιγράφονται παραπάνω είναι ανεξάρτητες μεταξύ τους και ανεξάρτητες για κάθε εικονοστοιχείο. Μετά την προσπέλαση (parse) της εικόνας για κάθε εικονοστοιχείο υπάρχει μια δομή της μορφής: pixel{ } r g b gray binary Η δομή αυτή αντιστοιχεί στο κατάλληλο εικονοστοιχείο ανάλογα αν έχει επιλεγεί η καθρεπτική λήψη. Δηλαδή αν η επιλογή reflect είναι ανενεργή, τότε η δομή για το εικονοστοιχείο (x,y) αντιστοιχεί στη θέση (x,y). Αντιθέτως, αν η επιλογή reflect είναι ενεργή, τότε η δομή για το ειονοστοιχείο (x,y) αντιστοιχεί στη θέση (width-1-x, y). (c) Υλοποίηση αλγορίθμου τιτλοφόρησης στη γλώσσα C/C++ Βήματα Αλγορίθμου Labeling 1. Τα εικονοστοιχεία αρχικοποιούνται με τον τίτλο 0. Για κάθε εικονοστοιχείο: 2. Αν υπάρχει αριστερός γείτονας του εικονοστοιχείου ο οποίος δεν φέρει τίτλο (τίτλος = 0), και στη δυαδική εικόνα έχει την ίδια τιμή με το παρών εικονοστοιχείο το γειτονικό εικονοστοιχείο παίρνει ένα αντίγραφο των πληροφοριών για το αντικείμενο και καλείται αναδρομικά ο αλγόριθμος για το στοιχείο (x-1,y). 3. Αν υπάρχει πάνω γείτονας του εικονοστοιχείου ο οποίος δεν φέρει τίτλο (τίτλος = 0), και στη δυαδική εικόνα έχει την ίδια τιμή με το παρών εικονοστοιχείο το γειτονικό εικονοστοιχείο παίρνει ένα αντίγραφο των πληροφοριών για το αντικείμενο και καλείται αναδρομικά ο αλγόριθμος για το στοιχείο (x,y-1). 4. Αν υπάρχει δεξιός γείτονας του εικονοστοιχείου ο οποίος δεν φέρει τίτλο (τίτλος = 0), και στη δυαδική εικόνα έχει την ίδια τιμή με το παρών εικονοστοιχείο το γειτονικό εικονοστοιχείο παίρνει ένα αντίγραφο των πληροφοριών για το αντικείμενο και καλείται αναδρομικά ο αλγόριθμος για το στοιχείο (x+1,y). 5. Αν υπάρχει κάτω γείτονας του εικονοστοιχείου ο οποίος δεν φέρει τίτλο (τίτλος = 0), και στη δυαδική εικόνα έχει την ίδια τιμή με το παρών εικονοστοιχείο το γειτονικό εικονοστοιχείο παίρνει ένα αντίγραφο των πληροφοριών για το αντικείμενο και καλείται αναδρομικά ο αλγόριθμος για το στοιχείο (x,y+1). 8
Τα αντικείμενα που ανιχνεύονται συνθέτουν μια λίστα αντικειμένων. Κάθε αντικείμενο χαρακτηρίζεται από μια δομή πληροφοριών της μορφής: όπου : label_grooup{ index length perimeter height width pos_top_left[2] pos_top_right[2] pos_bottom_left[2] pos_bottom_right[2] center[2] } index: είναι ο αύξων αριθμός του αντικειμένου length: το πλήθος των εικονοστοιχείων που συνθέτουν το αντικείμενο perimeter: το πλήθος των εικονοστοιχείων που οριοθετούν το αντικείμενο (περίμετρος) height: το ύψος του αντικειμένου δίνεται από την σχέση height = pos_bottom_right.y pos_top_lef t.y width:το πλάτος του αντικειμένου δίνεται από την σχέση width = pos_bottom_right.x pos_top_lef t.x Οι συντεταγμένες pos_top_left[2], pos_top_right[2], pos_bottom_left[2], pos_bottom_right[2] σχηματίζουν το μικρότερο δυνατό ορθογώνιο που εμπεριέχει το αντικείμενο. center[2]: Το κέντρο του αντικειμένου δεν συμπίπτει με το κέντρο του παραπάνω ορθογωνίου (τομή διαγωνίων), αλλά υπολογίζεται ως εξής: pixel object center.x = pixel.x object.length pixel object center.y = pixel.y object.length (d) Αξιολόγηση αντικειμένων Χρησιμοποιώντας τις πληροφορίες που φέρει κάθε αντικείμενο, αξιολογούμε κατά πόσο το αντικείμενο αυτό μπορεί να είναι φωτεινή πηγή ή όχι. Όπως, έχει αναφερθεί και σε προηγούμενο εδάφιο του κειμένου, με βάση ορισμένα κριτήρια. 9
Κυκλικότητα Πρώτο και κύριο κριτήριο είναι η κυκλική μορφή του αντικειμένου. Για κάθε αντικείμενο στη λίστα υπολογίζεται η κυκλικότητα του αντικειμένου σύμφωνα με τον τύπο: area roundness = 4π perimeter 2 Αντικείμενα που δεν είναι κυκλικά αγνοούνται. Η συνάρτηση που υλοποιήθηκε για τον υπολογισμό της κυκλικότητας, ελέγχει και άλλα κριτήρια σχετικά με το μέγεθος του αντικειμένου (συγκριτικά πάντα και με το μέγεθος της εικόνας). Ανάμεσα στα αντικείμενα που αγνοούνται περιλαμβάνονται πολύ μικρά αντικείμενα (μέγεθος πλάτους ή ύψους αντικειμένου μικρότερο των 4 pixel), πολύ μεγάλα αντικείμενα (πλάτος ή ύψος αντικειμένου μεγαλύτερο του ενός τρίτου της μεγαλύτερης διάστασης της εικόνας) και τέλος αντικείμενα με κυκλικό σχήμα αλλά πολύ μικρές αναλογίες πλευρών (μικρότερες του 2). Συμπαγές Κέντρο Ένα επιπλέον χαρακτηριστικό που πρέπει να έχει ένα αντικείμενο για να θεωρηθεί φωτεινή πηγή είναι το συμπαγές και ομοιογενές κέντρο. Ανεξαρτήτως του χρώματος της πηγής, η κεντρική περιοχή του αντικειμένου που σχηματίζεται, έχει πολύ υψηλές τιμές σε όλες τις φασματικές συνιστώσες (τείνει δηλαδή στο σχηματισμό του λευκού). Για κάθε αντικείμενο που έχει ανιχνευτεί ορίζεται μια κεντρική περιοχή που σχηματίζεται από ένα ορθογώνιο με διαστάσεις: width = width object 3 height = height object 3 και η πάνω αριστερή γωνία του ορθογωνίου έχει συντεταγμένες: left = pos_top_left.x + width top = pos_top_lef t.y + height Για τα εικονοστοιχεία αυτής της περιοχής πρέπει να ισχύει: Κάθε φασματική συνιστώσα πρέπει να έχει τιμή μεταξύ των ορίων r_up, r_down, g_up, g_down, b_up, b_down αντίστοιχα. Τα όρια παίρνουν τιμές ως εξής: { pixel[left][top].r + diff if pixel[left][top].r + diff < 255 r_up = 255 otherwise { pixel[left][top].r diff if pixel[left][top].r diff > 0 r_down = 0 otherwise όπου diff μια τιμή ανεκτής απόκλισης (ίση με 5). συνιστώσα υπολογίζονται ανάλογα. Τα όρια για την πράσινη και μπλε Με αυτό τον τρόπο εξασφαλίζουμε ότι πρόκειται για φωτεινή πηγή της μορφής που χρησιμοποιείται στο σύστημα (χειριστήρια) και όχι άλλου είδους. 10
(e) Διαλογή αντικειμένων που πληρούν τα απαιτούμενα χρωματικά κριτήρια Υπάρχουν τέσσερα χειριστήρια κάθε ένα εκ των οποίων εκπέμπει κόκκινο ή πράσινο ή μπλε ή κίτρινο χρώμα. Μέχρι στιγμής, η διαλογή των αντικειμένων γίνεται ανεξαρτήτως του χρώματος της πηγής. Στο σημείο αυτό, γίνονται έλεγχοι βασισμένοι στο χρώμα που περιβάλει το αντικείμενο. Όπως έχει αναφερθεί παραπάνω, η κεντρική περιοχή των φωτεινών πηγών τείνει στο λευκό χρώμα. Για το λόγο αυτό, η ταυτοποίηση του αντικειμένου με ένα χειριστήριο συγκεκριμένου χρώματος, προκύπτει από το χρώμα που σχηματίζεται σε ένα περιβάλλον που πλαισιώνει το αντικείμενο. Figure 6: Frame checked to decide color Ύστερα από δοκιμή διαφόρων τεχνικών (όπως χρήση χρωματικών μοντέλων hsv, hsb, hsi) καταλήξαμε στον εξής τρόπο εξαγωγής του χρώματος: Για κάθε εικονοστοιχείο στην περιοχή του πλαισίου ( οι φασματικές συνιστώσες σημειώνονται ως r(red),g(green),b(blue) ) : Αν r > 230 && 110 < g < 140 && 60 < b < 120, τότε αύξησε το πλήθος των κίτρινων στοιχείων. Αν g > 200 && 80 < r < 130 && 200 < b < 240, τότε αύξησε το πλήθος των πράσινων στοιχείων. Αν r == 255 && 60 < g < 120 && 30 < b < 110, τότε αύξησε το πλήθος των κόκκινων στοιχείων. Αν b == 255 && 60 < g < 120, τότε αύξησε το πλήθος των μπλε στοιχείων. Ύστερα, με προτεραιότητα χρωμάτων (κόκκινο, μπλε, πράσινο και κίτρινο) ελέγχεται αν το πλήθος των κόκκινων στοιχείων είναι μεγαλύτερο από το πλήθος των μπλε στοιχείων και το πλήθος των πράσινων στοιχείων και το πλήθος των κίτρινων στοιχείων. Σε αυτή την περίπτωση επιστρέφεται η τιμή 1 - χαρακτηριστική για το χρώμα κόκκινο. Αν η παραπάνω συνθήκη δεν ισχύει, μεταβαίνουμε στο επόμενο χρώμα (μπλε) όπου γίνοτναι αντίστοιχοι έλεγχοι. Παρομοίως για το πράσινο και το κίτρινο χρώμα. Χαρακτηριστικές τιμές επιστροφής: 11
Χρώμα Τιμή Επιστροφής Κόκκινο 1 Μπλε 2 Πράσινο 3 Κίτρινο 4 Άλλο 0 Παραπάνω, εισαγάγαμε κάποια εύρη στα οποία πρέπει να κειμένονται οι φασματικές συνιστώσες, ώστε να ανήκουν σε ένα χρώμα. Τα εύρη αυτά είναι πειραματικά και προήλθα από την ακόλουθη διαδικασία. Figure 7: Φωτεινές Πηγές Στην εικόνα (7) φαίνονται τα φωτεινά αντικείμενα που τραβάει η κάμερα. Κάνοντας μεγέθυνση στην εικόνα, παρατηρούμε τις τιμές των τριών φασματικών συνιστωσών, όπως αυτές φαίνονται στην εικόνα(8). 12
Figure 8: Φασματικές Συνιστώσες (f) Μνήμη Αν στο παρελθόν έχει ανιχνευτεί ένα χειριστήριο συγκεκριμένου χρώματος, και το σημείο στο οποίο είχε ανιχνευθεί τελευταία φορά είναι κοντά στη θέση του αντικειμένου που εξετάζουμε τώρα, τότε θεωρούμε ότι πρόκειται για το ίδιο αντικείμενο. Αν δεν έχει ανιχνευτεί στο παρελθόν κάποιο χειριστήριο ή το παρόν αντικείμενο δεν βρίσκονται κοντά σε κάποιο ανιχνευμένο χειριστήριο, τότε ελέγχονται τα χρωματικά κριτήρια που αναλύθηκαν παραπάνω. (g) Διαχείριση αποτελεσμάτων Προβολή video με σημειωμένη την φωτεινή πηγή Έχοντας ολοκληρώσει την διαδικασία ανίχνευσης ταυτοποίησης των φωτεινών πηγών, ο χρήστης έχει την δυνατότητα να δει το frame που μόλις επεξεργάστηκε το σύστημά μας σημειώνοντας τις φωτεινές πηγές που έχει ανιχνεύσει με ένα ορθογώνιο πλαίσιο και αναγράφοντας το χρώμα της πηγής εντός του πλαισίου. Αποστολή δεδομένων μέσω καλωδίου Ethernet Δεύτερη επιλογή είναι διοχέτευση των αποτελεσμάτων (θέση και χρώμα χειριστηρίου) σε έναν υπολογιστή (pc). Η σύνδεση του raspberry και του υπολογιστή γίνεται με καλώδιο Ethernet (ή και modem αλλά δεν μπορεί να συνδεθεί σε οποιοδήποτε δίκτυο). Για την επικοινωνία μεταξύ των δύο υπολογιστών χρησιμοποιείται socket, όπου το raspberry αποτελεί τον client και ο υπολογιστής το host. 2 Κατασκευή Χειριστηρίων Στο μηχανικό μέρος του συστήματος, κατασκευάσαμε 4 χειριστήρια- φωτεινές πηγές διαφορετικού χρώματος. 13
Για κάθε χειριστήριο χρησιμοποιήθηκαν: Ένα LED τάσης 3V κατάλληλου χρώματος (κόκκινο, μπλε, πράσινο, κίτρινο). Μια μπαταρία Καλώδια για την σύνδεση της μπαταρίας με το LED. Κουμπι push buttons. Ένα μπουκαλάκι από αποσμητικό για τοποθετητεί το LED και η ματαρία. 3 Demostration - Προγράμματα Τέλος, γράφτηκαν σε γλώσσα C/C++ δύο προγράμματα διαχείρισης των αποτελεσμάτων που στέλνει το Raspberry στον υπολογιστή. Και για τα δύο παιχνίδια χρησιμοποιήθηκε τεχνολογία X Window System (X11). Paint Το πρώτο πρόγραμμα, εμφανίζει στην οθόνη του υπολογιστή έναν λευκό καμβά με διαστάσεις ίδιες με αυτές της εικόνας που επεξεργάζεται το Raspberry. Χρησιμοποιώντας τα χειριστήρια μπορεί ο χρήστης να ζωγραφίσει πάνω στο καμβά. Το χρώμα και η θέση που εμφανίζονται στον καμβά είναι τα αποτελέσματα του συστήματος μας. Pong Το δεύτερο πρόγραμμα, είναι μια υλοποίηση του παιχνιδιού pong. Στο παιχνίδι οι παίκτες χειρίζονται την μπάρα τους μέσω του συστήματός μας. Το παιχνίδι είναι δύο παικτών, για το λόγο αυτό γίνεται μια ομαδοποίηση στα χειριστήρια: αριστερή μπάρα μπλε και πράσινο χειριστήριο δεξιά μπάρα κόκκινο και κίτρινο χειριστήριο A Παρατηρήσεις Η επεξεργασία εικόνας δεν είναι τόσο εύκολη όσο φαίνεται Η κάμερα που χρησιμοποιείται μπορεί να επηρεάσει σημαντικά τις παραμετροποιήσεις του συστήματος Για την επεξεργασία εικόνας χρειάζεται μεγάλη υπολογιστική ισχύ Το κίτρινο LED είναι ουσιαστικά πορτοκαλί Οι φασματικές συνιστώσες του μπλε χρώματος είναι παραπλήσιες με αυτές του πράσινου χρώματος. Αντίστοιχα, οι φασματικές συνιστώσες του κόκκινου χρώματος μοιάζουν με αυτές του κίτρινου. 14
Παράρτημα - Ανάλυση Κώδικα Κύριος Κώδικας /** Initiate socket Initiate webcam **/ inititate(); // frame loop while(1){ // Load frame from webcam getframe(); // Compute gray scaled and binary preprocessframe(); // Create object groups labeling(); // Evaluate metrics, color validategroups(); // Write data to socket sentdata(); } 15