ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΠΤΥΞΗ ΣΥΣΤΗΜΑΤΟΣ ΠΛΟΗΓΗΣΗΣ ΓΙΑ ΤΥΦΛΟΥΣ

Σχετικά έγγραφα
ANDROID Προγραμματισμός Εφαρμογών

ΠΑΡΑΡΤΗΜΑ IV. ΔΙΔΑΚΤΙΚΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΡΑΡΤΗΜΑ IV Ασκήσεις για το Robolab

ΡΟΜΠΟΤΙΚΗ ΟΡΑΣΗ. Όταν ένα ρομπότ κινείται σε άγνωστο χώρο ή σε χώρο που μπορεί να αλλάξει η διάταξή του τότε εμφανίζεται η ανάγκη της όρασης μηχανής.

Α.Τ.Ε.Ι. Ηρακλείου Ψηφιακή Επεξεργασία Εικόνας ιδάσκων: Βασίλειος Γαργανουράκης. Ανθρώπινη Όραση - Χρωµατικά Μοντέλα

RobotArmy Περίληψη έργου

Ηλεκτρονικός οδηγός για τους φοιτητές ενός Α.Ε.Ι.

Σχετική κίνηση αντικειμένων

ΑΥΤΟΝΟΜΟΙ ΠΡΑΚΤΟΡΕΣ ΠΛΗ 513

ΟΔΗΓΙΕΣ ΓΙΑ ΕΓΚΑΤΑΣΤΑΣΗ ΚΑΙ ΧΡΗΣΗ ΤΟΥ GOOGLE EARTH [ΠΛΟΗΓΗΣΗ ΚΑΙ ΕΚΤΥΠΩΣΗ ΑΕΡΟΦΩΤΟΓΡΑΦΙΩΝ]

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ JustAlert SPOTIT. Οδηγίες για την εγκατάσταση της εφαρμογής στο κινητό σας

Σχεδιαστικές προδιαγραφές

Περιεχόμενα ΓΕΩΠΥΛΗ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΚΕΝΤΡΙΚΟ SITE. ΧΑΡΤΗΣ... 2 Είσοδος στην εφαρμογή «Χάρτης»... 2 Λειτουργίες εφαρμογής «Χάρτης»...

EASYDRIVE. Σύντομος οδηγός. για να ξεκινήσετε την πλοήγηση αμέσως. Με χρήσιμα παραδείγματα & πρακτικές συμβουλές

ΡΟΜΠΟΤΙΚΗ ΜΕ ΧΡΗΣΗ ΤΟΥ ΠΑΚΕΤΟΥ LEGO MINDSTORMS NXT. ΚΕΦΑΛΑΙΟ 7ο. Δραστηριότητες για το ΝΧΤ-G και το Robolab

Σχεδιασμός και κατασκευή εφαρμογής ταξινόμησης αντικειμένων σε γραμμή μεταφοράς προϊόντων με χρήση όρασης μηχανής

Εξοικείωση με το NXT-G

Ενδεικτική πολυ-εργασία 1 - εφαρμογή στην υπολογιστική όραση

Slalom Race Computer Game on Scratch

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

References. Chapter 10 The Hough and Distance Transforms

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

7. Επαναλήψεις (Loops) Προγραμματισμός EV3 Ακαδημία Ρομποτικής 58

Διδασκαλία γραμμάτων-συλλαβών

Προγραμματισμός. Το περιβάλλον του scratch

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

x = r cos φ y = r sin φ

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Η εργασία που επέλεξες θα σου δώσει τη δυνατότητα να συνεργαστείς με συμμαθητές σου και να σχεδιάσετε μια εικονική εκδρομή με το Google Earth.

Μάθημα 4ο. Προγράμματα

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή

ΕΧΕΙ ΤΑΞΙΝΟΜΗΘΕΙ ΑΝΑ ΕΝΟΤΗΤΑ ΚΑΙ ΑΝΑ ΤΥΠΟ ΓΙΑ ΔΙΕΥΚΟΛΥΝΣΗ ΤΗΣ ΜΕΛΕΤΗΣ ΣΑΣ ΚΑΛΗ ΕΠΙΤΥΧΙΑ ΣΤΗ ΠΡΟΣΠΑΘΕΙΑ ΣΑΣ ΚΙ 2014

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Πολυτεχνείο Κρήτης Τμήμα ΗΜΜΥ Χειμερινό Εξάμηνο Intelligence Lab. Αυτόνομοι Πράκτορες. Κουσανάκης Βασίλης

«Προγραµµατισµός του LEGO Mindstorm NXT για το διαγωνισµό "Move the Ball!"»

Πτυχιακή Εργασία Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Η Ασύρματη Επικοινωνία, χρησιμοποιώντας

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

ΕΕΓΔ Οδηγίες προς τους μαθητές για τη χρήση του λογισμικού εξέτασης (EL)

Περιεχόμενα ΓΕΩΠΥΛΗ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΚΕΝΤΡΙΚΟ SITE

Ρύθμιση ενός Αισθητήρα

Νεογεωγραφία και Χαρτογραφική Διαδικτυακή Απεικόνιση. Η χρήση Ελεύθερων Γεωγραφικών Δεδομένων και Λογισμικού Ανοιχτού Κώδικα σε Φορητές Συσκευές.

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

B) Ετοιμάζοντας μια Παρουσίαση

Ταυτότητα εκπαιδευτικού σεναρίου

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

Τετράδια Κιθάρας. Χρήση του PowerTab

MLS Destinator Android για Vodafone Εγχειρίδιο Χρήσης

Β1.1 Δημιουργία Εφαρμογής στο Περιβάλλον Προγραμματισμού EdScratch του Edison ρομπότ

Πακέτο Lego Mindstorms

ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΤΟΥ ΠΑΚΕΤΟΥ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS NXT

Εισαγωγή στην επιστήμη των υπολογιστών

Σχεδίαση και ανάπτυξη δραστηριοτήτων στο προγραμματιστικό περιβάλλον MicroWorlds Pro

ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ

GPS NAVIGATION SYSTEM QUICK START USER MANUAL

Movie Maker (Δημιουργία βίντεο)

Δίνεται η ταχύτητα του ήχου στον αέρα. [705,5Hz, 714Hz, 336/697,2m, 332/697,2m, 709,75Hz, 8,5Hz]

APP INVENTOR ΟΔΗΓΟΣ 8 Οκτωβρίου 2018

Συλλογή & Επεξεργασία Δεδομένων Εξαμηνιαία ΡομποΚαθαριστής Μέρος Β : Το Πρόγραμμα. Σχεδίαση Συστήματος Πραγματικής Εφαρμογής (Prototyping).

Λογισμικό Διαχείρισης Καλλιέργειας. Εγχειρίδιο Χρήσης

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ GPRS 1. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ GOOGLE EARTH

Ενότητα 1η. Εισαγωγή στην Πληροφορική

Φύλλο εργασίας 1 Εισαγωγή στη Ρομποτική

Τηλεπισκόπηση. Ψηφιακή Ανάλυση Εικόνας Η ΒΕΛΤΙΩΣΗ εικόνας

ΦΑΙΝΟΜΕΝΟ DOPPLER. στην οποία ο ήχος μπορεί να ανακλαστεί.

Βασική Κατηγοριοποίηση Αισθητήρων Γιώργος Βασιλείου

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Σχεδίαση του αλγορίθμου για το παιχνίδι Rat s Life

ΠΟΥ ΔΙΑΔΙΔΕΤΑΙ ΤΟ ΦΩΣ

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Αισθητήρας Χρώματος. By Sanjay and Arvind Seshan ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΑΡΙΩΝ

Αντικείμενα, συμπεριφορές, γεγονότα

Βαγγέλης Τσιλιγωνέας. Διατμηματικό Πρόγραμμα Μεταπτυχιακών Σπουδών στα Πληροφοριακά Συστήματα M.Sc. In Information Systems

Χρήση του RAW ORF. Κείμενο, παρουσίαση, έρευνα: Ιορδάνης Σταυρίδης DNG ARW X3F DCR NEF CRW RAW RAF CR2 SRF MRW

Τι θα απαντούσατε αλήθεια στην ίδια ερώτηση για την περίπτωση της επόμενης εικόνας;

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Εισαγωγή στην Αριθμητική Ανάλυση

Εμφανίζονται 3 επιλογές με 3 εικονίδια, η «ζωγραφική», η «εισαγωγή» και η «κάμερα».

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

Αλλαγή κλίμακας σχεδίου με το COREL

Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018. Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια)

Ενημέρωση σε Windows 8.1 από τα Windows 8

Πληρουορική Γ Γσμμασίοσ

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

να χαρακτηρίζεται από το ότι

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0

Μοντελοποίηση τρισδιάστατου κόσμου σε πραγματικό κόσμο: το παράδειγμα του Kinect. ιδάσκων: Φ. Αζαριάδης Φοιτήτρια: Άρτεμις-Αγγελική Σφύρη

Indoor Augmented Reality Guide for Mediterranean College. Φώτης Παπαχρήστος

Αναζήτηση στον Ιστό. Πληκτρολόγηση του URL: στο πλαίσιο αναζήτησης του Mozilla Firefox. Enter ή κλικ στο Αναζήτηση

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

Με την ολοκλήρωση της διαδικασίας μπορούμε αν θέλουμε να επιλέξουμε να ανοίξει ή όχι η εφαρμογή που έχει εγκατασταθεί.

Εισαγωγή στο 3DS Max 2009

ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΤΗ ΔΙΕΝΕΡΓΕΙΑ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΜΕΛΕΤΩΝ

ΔΙΔΑΣΚΑΛΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΤΟΥ ΠΑΚΕΤΟΥ ΡΟΜΠΟΤΙΚΗΣ LEGO MINDSTORMS NXT

Η εντολή «επανέλαβε Χ»

Ενότητα 2. Ζωγραφίζοντας με το ΒΥΟΒ

Πλάνο Παρουσίασης. Στο δεύτερο μέρος θα μελετήσουμε τον σχεδιασμό και κώδικα πίσω από την εφαρμογή.

ΦΥΣΙΚΗ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ EV3 Επίπεδο Ι

Transcript:

Πανεπιστήμιο Αιγαίου ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΠΤΥΞΗ ΣΥΣΤΗΜΑΤΟΣ ΠΛΟΗΓΗΣΗΣ ΓΙΑ ΤΥΦΛΟΥΣ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ Διαμαντάτος Παρασκευάς Επιβλέπων: Εργίνα Καβαλλιεράτου Καρλόβασι 2013 i

Πανεπιστήμιο Αιγαίου ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Η Διπλωματική Εργασία παρουσιάστηκε ενώπιον του Διδακτικού Προσωπικού του Πανεπιστημίου Αιγαίου ii

ΠΕΡΙΛΗΨΗ Στόχος αυτής της διπλωματικής είναι η ανάπτυξη συστήματος το οποίο θα είναι υπεύθυνο για την πλοήγηση ενός τυφλού προς αποφυγή εμποδίων στο άμεσο περιβάλλων του, με την χρήση του κινητού του τηλεφώνου. Συγκεκριμένα η εφαρμογή με την χρήση της κάμερας του κινητού του τηλεφώνου και ειδικών αισθητήρων του συστήματος εντοπίζει την βέλτιστη διαδρομή που πρέπει να ακολουθήσει ο χρήστης για να αποφύγει εμπόδια που βρίσκονται στην πορεία του. Στην σημερινή εποχή, σε ολόκληρο τον κόσμο υπάρχουν περίπου 40 εκατομμύρια τυφλοί. Με την αυστηρή επιστημονική έννοια του όρου, τύφλωση είναι η πλήρης απώλεια της όρασης, η ανικανότητα διάκρισης του φωτός από το σκοτάδι (απόλυτη τύφλωση). Με την πρακτική και κοινωνική του έννοια ο όρος αυτός είναι σημαντικά μεγαλύτερος. Έτσι, ο άνθρωπος θεωρείται τυφλός, όταν δεν μπορεί να προσανατολίζεται στο περιβάλλον ή όταν δεν μπορεί να μετακινηθεί χωρίς ξένη βοήθεια έξω από το σπίτι του. Έτσι είναι αναγκαία η δημιουργία ενός συστήματος που θα είναι σε θέση να βοηθήσει στον προσανατολισμό, αλλά και να κατευθύνει αποτελεσματικά ένα άτομο που πάσχει από τύφλωση με χαμηλό κόστος. Τα συστήματα που υπάρχουν σήμερα, ναι μεν είναι σε θέση να κατευθύνουν ένα τυφλό στο άμεσο περιβάλλον του, αλλά εκτός του ότι πολλές φορές είναι δύσχρηστα στην λειτουργιά τους, προϋποθέτουν και την αγορά σχετικά ακριβών μηχανημάτων προκειμένου ο χρήστης να μπορέσει να αποφύγει τα διάφορα εμπόδια που βρίσκονται στην κατεύθυνσή του. Στο σύστημα που αναπτύξαμε ο τελικός Χρήστης, χρησιμοποιώντας κατάλληλα υποσυστήματα, έχει την δυνατότητα να ενημερωθεί φωνητικά για την κατεύθυνσή στην οποία κοιτάει (προσανατολισμός) να ενημερωθεί έγκαιρα για επικείμενα εμπόδια που βρίσκονται στην διαδρομή του, αλλά και την βέλτιστη κατεύθυνση που θα πρέπει να ακολουθήσει για την αποφυγή εμποδίων. 2013 Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ iii

ABSTRACT The purpose of this Thesis is the development of an information mobile system that can guide a blind person through a route that has no obstacles, help him orientate and inform him about imminent obstacles in his path. The system will utilize the phones camera in order to produce a depth map that will be able to detect obstacles. Also it will utilize orientation and magnetic field sensors in order to help the user orientate in the environment. It is absolutely crucial in our time to be able to help blind people move in urban environments effectively without overweight equipment, but only with a simple to use system. According to Wikipedia there are almost 40 million blind people that naturally use a simple cane, or a guide dog to help them navigate. Both of them have their disadvantages, a cane cant detect obstacles further than its height, and the guide dogs aren t enough for all the blind people. All the other systems suggested are either to expensive to use, and most of the times not useful at all for the blind people. The majority of the suggested systems can t detect obstacles in a specific route, they simply give directions to the user for a point A to a point B. The system we developed navigate the user in the environment detecting obstacles and finding the best path in order to avoid them. It can give vocal instructions to the user, or use the mobiles vibration in order to give navigation instructions. It is also able to orientate the user, using military vocal orientations e.g. north 12 o clock. 2013 Department of Information and Communication Systems Engineering UNIVERSITY OF THE AEGEAN iv

ΕΥΧΑΡΙΣΤΙΕΣ Θα ήθελα να ευχαριστήσω την επιβλέπων καθηγήτρια αυτής της διπλωματικής εργασίας Κ. Εργίνα καβαλλιεράτου, για την υπομονή, την στήριξη, την καθοδήγηση και την βοήθεια που μου παρείχε καθ όλη την διάρκεια εκπόνησης της διπλωματικής μου. Θα ήθελα να ευχαριστήσω επίσης τους γονείς μου, και την αδερφή μου, για την διαρκή τους υποστήριξη όλα αυτά τα χρόνια. θα ήθελα να ευχαριστήσω τους φίλους μου και τους συναδέλφους μου, για τα όμορφα φοιτητικά χρόνια που περάσαμε. Τέλος θα ήθελα να ευχαριστήσω ιδιαίτερα την κοπέλα μου, Κλειώ Ελισάβετ, που ήταν δίπλα μου όλο αυτό τον καιρό, για την υπομονή που έδειξε, αλλά και για την συμπαράστασή της. Σάμος 15/2/2013 v

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΠΕΡΙΛΗΨΗ... iii ABSTRACT... iv ΕΥΧΑΡΙΣΤΙΕΣ... v ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ... 6 ΚΑΤΑΛΟΓΟΣ ΠΙΝΑΚΩΝ... Error! Bookmark not defined. ΚΑΤΑΛΟΓΟΣ ΣΧΗΜΑΤΩΝ... 8 ΚΑΤΑΛΟΓΟΣ ΔΙΑΡΓΑΜΜΑΤΩΝ... Error! Bookmark not defined. ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ... 9 1.1 Σκοπός της παρούσας διπλωματικής... 9 ΚΕΦΑΛΑΙΟ 2 ΤΥΦΛΩΣΗ ΚΑΙ ΠΛΟΗΓΗΣΗ ΣΤΟΝ ΧΩΡΟ... 10 2.1 Εισαγωγή... 10 2.2 Εφαρμογές Χαρτών... 10 2.2.1 Πλοήγηση σε εσωτερικούς χώρους... 11 2.3 Πλοήγηση με αποφυγή εμποδίων... 11 2.3.1 Navbelt... 12 2.3.2 Guide Cane... 13 2.4 Συστήματα που χρησιμοποιούν computer vision και κάμερα κινητού... 14 2.4.1 Πλοήγηση με δείκτες... 14 2.4.2 Το σύστημα AIΜ... 14 2.4.3 Το σύστημα tyflos... 14 ΚΕΦΑΛΑΙΟ 3 - ΠΕΡΙΓΡΑΦΗ ΕΡΓΑΛΕΙΩΝ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΟΣ... 16 3.1 Το σύστημα android blind guide... 16 3.2 Android... 16 3.3 Android sdk... 17 3.4 OpenCV... 18 3.5 Eclipse... 19 3.6 Εγκατάσταση των εργαλείων... 20 ΚΕΦΑΛΑΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ... 21 4.1 Ψηφιακή εικόνα... 21 4.2 Υπολογιστική όραση... 21 4.3 Εικόνες στέρεο... 21 4.3 image recrify... 22 ΚΕΦΑΛΑΙΟ 5 ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ... 25 5.1 Android Blind Guide... 25 5.2 Υποσύστημα κάμερας... 26 6

5.3 Υποσύστημα εύρεσης σημείων... 27 5.4 Υποσύστημα optical flow... 30 5.5 Υποσύστημα fundamental... 32 5.6 Υποσύστημα homography... 32 5.7 Υποσύστημα Rectify... 33 5.8 Υποσύστημα depth map... 34 5.9 Υποσύστημα Απόστασης... 37 5.10 Υποσύστημα Δρομολόγησης... 38 5.11 Υποσύστημα Text To Speech (TTS)... 40 5.12 Υποσύστημα δόνησης... 40 5.13 Υποσύστημα Κατεύθυνσης... 41 ΚΕΦΑΛΑΙΟ 6 ΑΠΟΤΕΛΕΣΜΑΤΑ... 44 6.1 υποσύστημα της κάμερας... 44 6.2 Υποσύστημα εύρεσης σημείων... 44 6.3 Υποσύστημα optical flow... 45 6.4 Υποσυστήματα fundamental,homography, rectify... 46 6.5 Υποσύστημα depth map... 47 6.6 Υποσύστημα Απόστασης... 50 6.7 Υποσύστημα Δρομολόγησης... 51 6.8 Υποσυστήματα Text To Speech (TTS) και δόνησης... 52 6.9 Υποσύστημα Κατεύθυνσης... 52 ΚΕΦΑΛΑΙΟ 7 ΣΥΜΠΕΡΑΣΜΑΤΑ ΚΑΙ ΜΕΛΛΟΝΤΙΚΗ ΕΠΕΚΤΑΣΗ... 54 BIBLIOGRAPHY... 56 7

ΚΑΤΑΛΟΓΟΣ ΣΧΗΜΑΤΩΝ ΚΕΦΑΛΑΙΟ 1 2.1 Χρήστης που φοράει την NavBelt 2.2 Guide Cane 2.3 Τυφλός ψάχνει χρωματικούς δείκτες 2.4 Γυαλιά με κάμερες και ο απαραίτητος εξοπλισμός 3.1 Ο κατακερματισμός του android 3.2 Περιγραφή OpenCV 4.1 Η ανθρώπινη Όραση 4.2 Διόρθωση εικόνας (image rectify) 4.3 Εύρεση κοινού σημείου 1 4.4 Εύρεση κοινού σημείου 2 4.5 Διόρθωση εικόνας 5.1 Τα υποσυστήματα της εφαρμογής 5.2 Μέσος όρος χρόνου εύρεσης σημείων 6.2 Στιγμιότυπο υποσύστηματος εύρεσης σημείων 5.3 Στιγμιότυπο υποσυστήματος optical flow 5.4 Πίνακας Homography 5.5 Διόρθωση εικόνας 5.6 Στιγμιότυπο υποσυστήματος depth map με παράθυρο 7 5.7 Στιγμιότυπο υποσυστήματος depth map με παράθυρο 11 5.8 Στιγμιότυπο υποσυστήματος depth map με παράθυρο 41 5.9 Στιγμιότυπο υποσυστήματος depth map με παράθυρο 63 5.10 Στιγμιότυπο υποσυστήματος depth map με παράθυρο 21 5.11 Στιγμιότυπο υποσυστήματος απόστασης 5.12 Οριζόντιο ιστόγραμμα 6.1 Στιγμιότυπο υποσυστήματος κάμερας 6.2 Στιγμιότυπο υποσύστηματος εύρεσης σημείων 6.3 Στιγμιότυπο υποσύστηματος optical flow 1 6.4 Στιγμιότυπο υποσυστήματος optical flow 2 6.5 Στιγμιότυπο υποσυστήματος rectify 6.6 Στιγμιότυπο υποσυστήματος depth map 1 6.7 Στιγμιότυπο υποσυστήματος depth map tsukuba data set2 6.8 Στιγμιότυπο υποσυστήματος depth map lg optimus 3d max 3 6.9 Στιγμιότυπο υποσυστήματος depth map lg optimus 3d max 4 6.10 Στιγμιότυπο υποσυστήματος απόστασης 1 6.11 Στιγμιότυπο υποσυστήματος απόστασης 2 6.12 Οριζόντιο ιστόγραμμα 6.13 Στιγμιότυπο υποσυστήματος κατεύθυνσης 12 o clock βοράς 6.14 Στιγμιότυπο υποσυστήματος κατεύθυνσης 6 o clock νότος 6.13 Η συσκευή lg optimus 3d max με στερεοσκοπικές κάμερες 12 13 14 15 17 19 22 23 23 24 24 26 28 30 31 32 33 35 35 36 36 37 38 39 44 45 46 46 47 48 49 49 50 51 51 52 53 53 54 8

ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ 1.1 Σκοπός της παρούσας διπλωματικής Τα τελευταία χρόνια τεχνολογίες ηλεκτρονικών υπολογιστών ακολουθούν γεωμετρική πρόοδο σε σχέση με το παρελθόν. Η πρόοδος αυτή όμως επικεντρώνετε σε ζητήματα που απασχολούν την πλειοψηφία του αγοραστικού κοινού, μιας και σε αυτούς απευθύνεται, και τα Άτομα Με Ειδικές Ανάγκες (ΑΜΕΑ) συνήθως αγνοούνται η παραλείπονται. Παρόλο που υπάρχουν όλα τα εργαλεία και οι τεχνολογίες για να μπορέσουμε να βοηθήσουμε αυτά τα άτομα, ελάχιστες προσπάθειες έχουν γίνει σε αυτό τον τομέα. Τα υπάρχοντα συστήματα πλοήγησης για τυφλούς έχουν πολύ υψηλό κόστος, και δεν είναι προσιτά σε ανθρώπους που πραγματικά χρειάζονται αυτές τις τεχνολογίες. Η τεχνολογία που υπάρχει σήμερα μας επιτρέπει να έχουμε σε ένα έξυπνο κινητό τηλέφωνο (smart phone) υψηλή υπολογιστική ισχύ, αντίστοιχη ενός επιτραπέζιου υπολογιστή, κάμερα υψηλής ανάλυσης, σύστημα θεσιθεσίας (GPS), πυξίδα, επιταχυνσιόμετρο και άλλους αισθητήρες. Όλα τα παραπάνω μας επιτρέπουν με ένα προσεκτικό σχεδιασμό, να αναπτύξουμε σύστημα πλοήγησης για τυφλούς με ιδιαίτερη χρησιμότητα. Σε αυτή την διπλωματική εργασία θα αναπτύξουμε σύστημα πλοήγησης για τυφλούς χρησιμοποιώντας της τεχνολογίες που υπάρχουν ήδη διαθέσιμες στα σύγχρονα κινητά τηλέφωνα ώστε να μπορέσουμε να δώσουμε την δυνατότητα σε άτομα με περιορισμένη η καθόλου όραση να πλοηγηθούν, αποφεύγοντας εμπόδια που βρίσκονται στην διαδρομή τους. 9

ΚΕΦΑΛΑΙΟ 2 ΤΥΦΛΩΣΗ ΚΑΙ ΠΛΟΗΓΗΣΗ ΣΤΟΝ ΧΩΡΟ 2.1 Εισαγωγή Τύφλωση ονομάζεται η κατάσταση ατόμου που έχει χάσει την όραση. Υπολογίζεται ότι σε ολόκληρο τον κόσμο υπάρχουν περίπου 40 εκατομμύρια τυφλοί. Με την αυστηρή επιστημονική έννοια του όρου, τύφλωση είναι η πλήρης απώλεια της όρασης, η ανικανότητα διάκρισης του φωτός από το σκοτάδι (απόλυτη τύφλωση). Με την πρακτική και κοινωνική του έννοια ο όρος αυτός είναι σημαντικά μεγαλύτερος. Έτσι, ο άνθρωπος θεωρείται τυφλός, όταν δεν μπορεί να προσανατολίζεται στο περιβάλλον ή όταν δεν μπορεί να μετακινηθεί χωρίς ξένη βοήθεια έξω από το σπίτι του. Οι τυφλοί δεν είναι άτομα μειωμένων δυνατοτήτων, αλλά άτομα μειωμένων ευκαιριών τα οποία με την χρήση βοηθημάτων, και σωστής υποστήριξης θα μπορούν να ανταπεξέλθουν σε οποιαδήποτε διεργασία τους δίνεται. Ένα από τα σημαντικότερα προβλήματα που αντιμετωπίζουν οι τυφλοί είναι η πλοήγηση τους σε μέρη τα οποία δεν γνωρίζουν, και δεν έχουν ξανά επισκεφτεί. Οι περισσότερες εφαρμογές πλοήγησης για τυφλούς αποτελούνται από δύο βασικά υπό συστήματα : ανίχνευση του κοντινού περιβάλλοντος για αντικείμενα που αποτρέπουν την πλοήγηση του χρήστη ( εμπόδια, κίνδυνοι), και πλοήγηση του χρήστη σε απομακρυσμένα σημεία πολύ μακριά από το κοντινό περιβάλλον του. Για να πραγματοποιηθεί η πλοήγηση πρέπει η θέση και ο προσανατολισμός του χρήστη να ανανεώνετε συνεχώς ώστε να ελέγχεται η πορεία του, αλλά και να γίνει αναδρομολόγηση στην περίπτωση που ο χρήστης χαθεί. Για τον προσδιορισμό της θέσης του χρήστη χρησιμοποιείτε το Παγκόσμιο Σύστημα Θεσιθεσίας (gps) ενώ για τον προσανατολισμό του ειδικοί αισθητήρες όπως ψηφιακή πυξίδα και Επιταχυνσιόμετρο 2.2 Εφαρμογές Χαρτών Τα τελευταία χρόνια πολλές εταιρίες έχουν προσπαθήσει να δημιουργήσουν εφαρμογές χαρτογράφησης για τυφλούς, ώστε να πλοηγούνται σε απομακρυσμένα σημεία, χωρίς ιδιαίτερα αποτελέσματα. Μία από τις πιο επιτυχημένες του χώρου είναι το Google maps το οποίο εκτός το γραφικό περιβάλλων που έχει διαθέτει και λεκτική διεπαφή η οποία συνεργάζεται με τερματικά braille και screen readers (1) αλλά αδυνατεί να κατευθύνει τον χρήστη στην αποφυγή εμποδίων που βρίσκονται στο κοντινό περιβάλλον του, ακόμα και στην πορεία που ακολουθεί, εάν αυτά δεν είναι χαρτογραφημένα. 10

Μία πλειάδα παρόμοιων εφαρμογών έχουν αναπτυχθεί τα τελευταία χρόνια με παρόμοια χαρακτηριστικά πολλές από τις οποίες περιλαμβάνουν ειδικές συσκευές που με το πάτημα ενός κουμπιού αναφέρουν στον χρήστη πού περίπου είναι ( σε πια οδό, κοντά σε κάποιο φαρμακείο κτλ) Οι εφαρμογές αυτές απλά παρέχουν στους χρήστες οδηγίες για το πώς θα φτάσουν στον προορισμό τους και δεν είναι υπεύθυνες για τον εντοπισμό αντικειμένων που εμποδίζουν τον χρήστη στην διαδρομή που θα ακολουθήσει. Επιπρόσθετος δεν υπάρχουν διαθέσιμοι χάρτες για εσωτερικούς χώρους, όπως κάποιο κτήριο, επόμενος ο χρήστης θα δυσκολεύεται να πλοηγηθεί σε εσωτερικούς χώρους. 2.2.1 Πλοήγηση σε εσωτερικούς χώρους Μέχρι στιγμής οι περισσότερες εφαρμογές για πλοήγηση σε εσωτερικούς χώρους απαιτούν εξοπλισμό με υψηλό κόστος, αφού απαιτούν εκτός από διάφορους αισθητήρες που θα έχει στην κατοχή του ο χρήστης, και πομπούς (rfid ή nfc) που θα είναι εγκατεστημένοι στα διάφορα κτίρια. Ο κύριος λόγος για αυτή την απαίτηση είναι ότι ακόμα και αν καταφέρει να «χαρτογραφηθεί» ένας σημαντικός αριθμός κτιρίων, η μόνη διαφορετική λύση για την πλοήγηση κάποιου, η οποία θα ήταν με το σύστημα θεσιθεσίας (GPS), δεν μπορεί να υλοποιηθεί καθώς σε εσωτερικούς χώρους δεν υπάρχει επαρκής κάλυψη. Μία διαφορετική προσέγγιση στο θέμα προσπάθησε να κάνει το πανεπιστήμιο της Nevada με το navatar, μία εφαρμογή για κινητό η οποία δέχεται εισόδους από τον χρήστη, όπως για παράδειγμα αν ο χρήστης εντοπίσει μία πόρτα μπροστά του, την καταχωρεί. Επίσης χρησιμοποιώντας αισθητήρες κινητού όπως το επιταχυνσιομετρο και πυξίδα, και αφού εφαρμοστούν διάφορα φίλτρα, όπως το kalman filter, αλλά και διορθώσεις στα δεδομένα με βάση τις εισαγωγές του χρήστη, υπολογίζει την τοποθεσία του χρήστη μέσα σε κτίριο (2). 2.3 Πλοήγηση με αποφυγή εμποδίων Για την αποφυγή εμποδίων στον άμεσο περιβάλλον συνήθως ο τυφλός μέχρι πρόσφατα δεν είχε άλλες επιλογές πέρα από το ραβδί τυφλού η ειδικά εκπαιδευμένο σκύλο, τα οποία περιλαμβάνουν αρκετά μειονεκτήματα. Το ραβδί τυφλού δεν μπορεί να βοηθήσει τον τυφλό για την ανίχνευσή εμποδίων πέρα από το μήκος του ραβδιού, συνήθως 1 με 2 μέτρα, ενώ οι σκύλοι τυφλών, εκτός του ότι είναι πολύ ακριβοί, δεν επαρκούν για την κάλυψη όλων τον τυφλών. Στην Ολλανδία μόνο κάθε χρόνο εκπαιδεύονται περίπου 100 σκύλοι τυφλών. Με την βοήθεια της τεχνολογίας αναπτύχθηκαν ραβδιά laser αλλά και υπερηχητικοί αισθητήρες (3) αποφυγής εμποδίων. Τα λεγόμενα ETAs (electronic travel aids) στα οποία η αρχή 11

λειτουργίας είναι παρόμοια με αυτή των ραντάρ. Τα ETAs εκπέμπουν ακτίνες laser, η υπερηχητικούς ήχους οι οποίοι όταν συναντούν εμπόδια ανακλούνται και επιστρέφουν πίσω στην συσκευή. Με βάση τον χρόνο που κάνουν για να επιστρέψουν η συσκευή μπορεί να συμπεράνει σε τί απόσταση βρίσκεται κάποιο αντικείμενο. 2.3.1 Navbelt Μια αξιοσημείωτη εφαρμογή είναι η χρήση της NavBelt, μίας ζώνης με υπερηχητικούς αισθητήρες που φοράει ο χρήστης. Η συσκευή αυτή εκπέμπει υπερηχητικούς ήχους οι οποίοι ανακλούνται στα διάφορα αντικείμενα και επιστρέφουν στην συσκευή επιτρέποντάς της να έχει μία πρώιμη εκτίμηση για τοποθεσίες επικείμενων αντικειμένων και ειδοποιεί τον χρήστη μέσο ηχητικών σημάτων σε ακουστικά τα οποία φοράει ο χρήστης. 2.1 Χρήστης που φοράει την NavBelt Η συσκευή έχει τρείς τρόπους λειτουργίας: Απλή πλοήγηση στην οποία ο χρήστης επιλέγει επιθυμητό προορισμό, και με την βοήθεια gps σήματος υπολογίζεται μία πορεία την οποία ακολουθεί ο χρήστης. Κατευθυνόμενη πλοήγηση, στην οποία ο χρήστης με την χρήση joystick επιλέγει την κατεύθυνση που θέλει να ακολουθήσει, με αποτέλεσμα να στέλνονται υπερηχητικά σήματα μόνο στην συγκεκριμένη κατεύθυνση. Και λειτουργία εικόνας στην οποία στέλνονται υπερηχητικά σήματα σε όλες τις κατευθύνσεις, και ο χρήστης μέσο ηχητικών σημάτων λαμβάνει μία πανοραμική απεικόνιση. 12

2.3.2 Guide Cane Η χρήση της NavBelt όμως δεν είναι επαρκείς, καθώς ο χρήστης αργεί να κατανοήσει τα ηχητικά σήματα με αποτέλεσμα να καθυστερεί αρκετά στην προσπάθεια του. 2.2 Guide Cane Για την αντιμετώπιση αυτού του προβλήματος αναπτύχθηκε το guide cane, ένα ραβδί το οποίο στην άκρη του διέθετε ένα ρομποτικό όχημα εφοδιασμένο επίσης με υπερηχητικούς αισθητήρες, καθώς και ρόδες εφοδιασμένες με αισθητήρες που καθορίζουν την σχετική κίνηση τους. Επίσης διαθέτει joystick στην λαβή ώστε ο χρήστης να μπορεί να εισάγει επιθυμητή πορεία. Ο τρόπος λειτουργίας των υπερηχητικών αισθητήρων είναι ίδιος με αυτών της NavBelt, με την διαφορά ότι δεν ειδοποιείτε ο χρήστης με ηχητικά σήματα, αλλά το ρομποτικό όχημα στρίβει από μόνο του, προς αποφύγει εμποδίου. Ο χρήστης ουσιαστικά σπρώχνει το ρομποτικό όχημα, και ανάλογα με την κατεύθυνση που έχει επιλέξει κατευθύνετε προς αυτή την κατεύθυνση εφόσον δεν υπάρχουν εμπόδια. Εάν για παράδειγμα ο χρήστης περπατάει έχοντας στα δεξιά του ένα τοίχο, και επιλέξει να κατευθυνθεί δεξιά, το guide cane θα συνεχίσει να κατευθύνετε ευθεία μέχρι να μην εντοπίζει κάποιο εμπόδιο στα δεξιά, και στην συνέχει θα στρίψει. το guide cane ουσιαστικά κάθε φορά που στρίβει τραβάει και τον χρήστη μαζί του. (4). 13

2.4 Συστήματα που χρησιμοποιούν computer vision και κάμερα κινητού 2.4.1 Πλοήγηση με δείκτες Ένα case study που έγινε από το school of engineering του πανεπιστημίου της Καλιφόρνια, ανέπτυξε σύστημα το οποίο χρησιμοποιεί ειδικούς δείκτες χρώματος, οι οποίοι τοποθετούνται σε θέσεις-κλειδιά του περιβάλλοντος, που μπορεί να ανιχνευθεί από ένα κανονικό τηλέφωνο με κάμερα. (5) 2.3 Τυφλός ψάχνει χρωματικούς δείκτες Ο χρήστης πρέπει να κρατάει το κινητό σε κάθετη θέση, διαφορετικά, σε περίπτωση που το κρατάει λανθασμένα, ειδοποιείτε με ηχητική ειδοποίηση. Οι δείκτες χρώματος μπορούν να εντοπίζονται από το κινητό σε απόσταση 4,5 μέτρων, και ειδοποιούν τον χρήστη με διακεκομμένους ήχους για το εάν πλησιάζουν ή απομακρύνονται στην περιοχή που επιθυμούν. Οι δείκτες μπορούν να έχουν και συνδυασμούς χρωμάτων. Συνολικά η εφαρμογή μπορεί να ανιχνεύσει 24 διαφορετικούς δείκτες, σηματοδοτώντας διαφορετική περιοχή. 2.4.2 Το σύστημα AIΜ Έχουν αναπτυχθεί επίσης συστήματα που μετατρέπουν την εικόνα σε ήχους όπως το πειραματικό σύστημα AIΜ το οποίο αντιστοιχεί εικονοστοιχία από μία εικόνα, σε ήχους τους οποίους μπορεί να καταλάβει ένας τυφλός. Περιορισμοί του συστήματος είναι η μικρή ανάλυση εικόνας, που δεν επιτρέπει μεγάλη λεπτομέρεια, αλλά και ο χρόνος που χρειάζεται κάποιος για να ακούσει και να κατανοήσει την πληροφορία. Επιπρόσθετος ο χρόνος εκπαίδευσης τον χρηστών στο σύστημα είναι αρκετά μεγάλος. Η ανταπόκριση που έλαβε από την ομάδα χρηστών του δεν ήταν και τόσο ενθαρρυντική, καθώς ο τυφλός για να «δει» την εικόνα έπρεπε να προσέχει πολύ προσεκτικά την έξοδο ήχου, κάτι που δεν ήταν πρακτικό αφού δυσκολευόταν να ακούσει τους ήχους του άμεσου περιβάλλοντός του. 2.4.3 Το σύστημα tyflos 14

Το σύστημα tyflos αναπτύχθηκε από τον κ. Ν. Μπουρμπάκη και το wright state university. Tο Σύστημα περιλαμβάνει γυαλιά με 2 κάμερες οι οποίες χρησιμοποιούνται για στερεοσκοπική απεικόνιση αλλά και υπολογισμό βάθους εικόνας. Αφού δημιουργηθεί ο χάρτης βάθους, αντιστοιχίζετε σε λέξεις από ένα έτοιμο λεξικό. Το σύστημα επίσης περιλαμβάνει φορητό υπολογιστή, ολοκληρωμένο κύκλωμα με μικροελενγκτές, αλλά και μια πλακέτα αποτελούμενοι από 16 μικροσυσκευές δόνησης, 4 ανά σειρά, οι οποίοι πληροφορούν τον χρήστη σε ποιό σημείο είναι το εμπόδιο, και πόσο κοντά η μακριά βρίσκεται ανάλογα με την ένταση της δόνησης (6). 2.4 Γυαλιά με κάμερες και ο απαραίτητος εξοπλισμός 15

ΚΕΦΑΛΑΙΟ 3 - ΠΕΡΙΓΡΑΦΗ ΕΡΓΑΛΕΙΩΝ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΟΣ 3.1 Το σύστημα android blind guide Για την ανάπτυξη του συστήματος χρησιμοποίησα την πλατφόρμα android για δύο κυρίως λόγους, ότι οι συσκευές με λειτουργικό android που κυκλοφορούν έχουν χαμηλότερο κόστος σε σχέση με άλλες πλατφόρμες χωρίς να υστερούν σε δυνατότητες σε σχέση με τον ανταγωνισμό. Παρέχοντας στα άτομα με τύφλωση μια οικονομική λύση. Αλλά και την ευκολία στην ανάπτυξη εφαρμογών android κυρίως λόγο στην πληθώρα βιβλιοθηκών που υπάρχουν, αλλά και στην υποστήριξη που αυτή έχει από την κοινότητα προγραμματιστών android. Επίσης για την ανάπτυξη της εφαρμογής χρησιμοποιήθηκε και η βιβλιοθήκη opencv. Η OpenCV είναι µια βιβλιοθήκη ελευθέρου λογισµικού η οποία αναπτύχθηκε από την Intel και αφορά στην επεξεργασία εικόνας. Προσφέρει στους προγραμματιστές μία πληθώρα από κλάσεις που αφορούν την ανάπτυξη επικοινωνίας ανθρώπου µε υπολογιστή, την ανίχνευση, αποµόνωση και αναγνώριση αντικειμένων, την ανίχνευση και αναγνώριση προσώπων, την κατανόηση και παρακολούθηση κίνησης και άλλες. Η εφαρμογή αναπτύχθηκε σε γλώσσα java χρησιμοποιώντας το πρόγραμμα eclipse σε συνδυασμό με το android sdk αλλά και την βιβλιοθήκη OpenCV. 3.2 Android Το Android είναι λειτουργικό σύστημα για συσκευές κινητής τηλεφωνίας το οποίο τρέχει τον πυρήνα του λειτουργικού Linux. Αρχικά αναπτύχθηκε από την Google και αργότερα από την Open Handset Alliance. (7) Επιτρέπει στους κατασκευαστές λογισμικού να συνθέτουν κώδικα με την χρήση της γλώσσας προγραμματισμού Java, ελέγχοντας την συσκευή μέσω βιβλιοθηκών λογισμικού ανεπτυγμένων από την Google. (8) Η πρώτη παρουσίαση της πλατφόρμας Android (android 1.0) έγινε στις 5 Νοεμβρίου 2007, παράλληλα με την ανακοίνωση της ίδρυσης του οργανισμού Open Handset Alliance, μιας κοινοπραξίας 48 τηλεπικοινωνιακών εταιριών, εταιριών λογισμικού καθώς και κατασκευής hardware, οι οποίες είναι αφιερωμένες στην ανάπτυξη και εξέλιξη ανοιχτών προτύπων στις συσκευές κινητής τηλεφωνίας. (9) Η Google δημοσίευσε το μεγαλύτερο μέρος του κώδικα του Android υπό τους όρους της Apache License, μιας ελεύθερης άδειας λογισμικού. Ανεξάρτητα από το κόστος, όλες οι συσκευές Android διαθέτουν GPS, Wi-fi, πυξίδα και επιταχινσυόμετρο δικαιώνοντας έτσι το βασικό λόγο δημιουργίας του εν λόγω λειτουργικού συστήματος που δεν είναι άλλος παρά η ανεµπόδιστη και εύκολη πρόσβαση στο διαδίκτυο, σε συνδυασµό µε ένα πλήθος εφαρμογών (apps), όπως χάρτες, αναζήτηση και άλλα. 16

Το λειτουργικό σύστημα της Google, το Android το οποίο έχει φτάσει στην έκδοση 4.1, είναι πλέον πολύ δημοφιλές, αν όχι το πιο δημοφιλές. Εκατομμύρια συσκευές ανά τον κόσμο λειτουργούν με την βοήθειά του, είτε πρόκειται για κινητό, είτε για tablet. Αυτό έχει ως αποτέλεσμα το λειτουργικό να τρέχει σε αμέτρητες διαφορετικές αναλύσεις, ανάλογα την συσκευή,σε πάρα πολλές διαφορετικές εκδόσεις, άλλες για κινητό, άλλες για tablet κλπ. Η ποικιλομορφία αυτή παρά τις επιλογές που δίνει στον επίδοξο αγοραστή, οδηγεί στον κατακερματισμό της πλατφόρμας. Αυτό κάνει λίγο, έως πολύ, δύσκολη την ζωή των developers, καθώς όταν θέλουν να αναβαθμίσουν την εφαρμογή τους, πρέπει να το κάνουν για όλες τις διαφορετικές αναλύσεις και γενικά πρέπει να έχουν κατά νου τις ιδιοτροπίες κάθε μοντέλου. Αυτός είναι και ο λόγος που τα updates του λογισμικού, εν γένει, καθυστερούν να δοθούν στην κυκλοφορία, αφού ο κατασκευαστής πρέπει να βελτιστοποιήσει την νέα έκδοση για κάθε συσκευή που έχει κυκλοφορήσει. 3.1 Ο κατακερματισμός του android 3.3 Android sdk Android SDK σημαίνει Android Software Development Kit και είναι το επίσημο εργαλείο της Google για αυτούς που θέλουν να δημιουργήσουν στο Android. Είναι το βασικό εργαλείο για: 17

Δημιουργία εφαρμογών Κατασκευή custom ROM Μεταγλώττιση πυρήνα για τη συσκευή μας και γενικό hacking To android sdk περιλαμβάνει ένα πλήθος εργαλείων γα την ανάπτυξη εφαρμογών android όπως debugger, βιβλιοθήκες, προσομοιωτή android, βοηθητικό κώδικα ανάπτυξης, αλλά και αρκετά tutorials. 3.4 OpenCV Η OpenCV (Open Computer Vision) είναι μία υψηλού επιπέδου,βιβλιοθήκη τεχνητής όρασης, η οποία δημιουργήθηκε απο την Intel το 1999. Μετά από κάποιες beta εκδόσεις που προϋπήρξαν στο παρελθόν,η πρώτη έκδοση της OpenCV κυκλοφόρησε το 2006 (10). Η βιβλιοθήκη αυτή είναι ανοιχτού κώδικα και είναι ελεύθερη για εκπαιδευτική αλλά και για εμπορική χρήση.είναι γραμμένη κυρίως στην γλώσσα προγραμματισμού C και χρησιμοποιείται στις κυριότερες πλατφόρμες όπως Windows, Linux,Mac Os Android και άλλα. Η OpenCV έχει ενσωματωμένους αλγορίθμους επεξεργασίας εικόνας και τεχνητής όρασης. Μερικές από τις εφαρμογές που καλύπτει η OpenCV είναι: Αναγνώρισης Προσώπου Αναγνώρισης Χειρονομιών Διεπαφής Χρήστη-Υπολογιστή Κινητά Ρομπότ Αναγνώρισης και Ταυτοποίησης αντικειμένων 18

3.2 Περιγραφή OpenCV Στην OpenCV κάθε εικόνα αναπαριστάτε με έναν πολυδιάστατο πίνακα. Ο τύπος αυτού του πολυδιάστατού πίνακα είναι τύπου Mat και μπορεί να περιέχει αρκετές διαστάσεις πινάκων, οι οποίοι συνήθως αντιπροσωπεύουν την απεικόνιση της εικόνας σε διάφορα χρώματα (rgb ) και τιμή alpha για το μοντέλο rgba ενώ υπάρχουν και άλλα μοντέλα. Ο τύπος Mat παρέχει επίσης στον προγραμματιστή εύκολη πρόσβαση σε κάθε στοιχείο του πίνακα, με μεγάλη ταχύτητα. Η βιβλιοθήκη παρέχει μία πλειάδα από συναρτήσεις, οι οποίες καλύπτουν το ευρύ φάσμα της αναγνώρισης προτύπων και την επεξεργασία εικόνας. Σε επόμενο κεφάλαιο θα δούμε αναλυτικότερα κάποιες από της συναρτήσεις που χρησιμοποιήσαμε. 3.5 Eclipse Το Eclipse (11) είναι μία πλατφόρμα προγραμματισμού, παρέχει ένα χώρο εργασίας (workspace), και μία πληθώρα από άλλα εργαλεία ανάπτυξης εφαρμογών που μπορούν να εγκατασταθούν πάρα πολύ εύκολα. Είναι γραμμένο κυρίως σε γλώσσα java, ενώ μπορεί να αναπτύξει εφαρμογές γραμμένες σε Ada, C, C++, COBOL, Fortran, Haskell, Perl, PHP, Python, R, Ruby, Scala, Clojure, Groovy, και Scheme. Ενώ επίσης μπορεί να χρησιμοποιηθεί για να αναπτύξει πακέτα για το mathematica. Περιλαμβάνει πακέτα (Developer tools) για ανάπτυξη εφαρμογών σε java με την χρήση JDK, c++ με την χρήση CDK αλλά και php με την χρήση PDT Το Eclipse αποτελεί επίσης το επίσημο εργαλείο ανάπτυξης για εφαρμογές Android. Είναι αρκετά γρήγορο ενώ το περιβάλλον του είναι αρκετά εύκολο να το καταλάβει κάποιος που το χρησιμοποιεί για πρώτη φορά. 19

3.6 Εγκατάσταση των εργαλείων Για να αρχίσουμε να προγραμματίζουμε την εφαρμογή μας αρχικά πρέπει να εγκαταστήσουμε τα παραπάνω. Πιο συγκεκριμένα Αρχικά πρέπει να εγκαταστήσουμε το JDK 6 Update 18 Java Developer Kit ή κάποιο νεότερο. Αυτό είναι το περιβάλλον μέσα στο οποίο μπορεί να τρέξει κάποιο java πρόγραμμα. Το jdk Περιλαμβάνει μια πληθώρα από εργαλεία, debugger, βιβλιοθήκες και άλλα τα οποία μας βοηθούν να αναπτύξουμε εφαρμογές java Στην συνέχεια εγκαθιστούμε το Eclipse IDE,Εργαλείο για προγραμματισμό σε java. Πιο απλά το περιβάλλον μέσα στο οποίο θα αναπτύξουμε την εφαρμογή μας. Θα χρειαστούμε επίσης το Android SDK όπως είδαμε πιο πάνω, περιέχει πληθώρα εργαλείων, βιβλιοθήκες και άλλα για την ανάπτυξη εφαρμογών σε περιβάλλων Android. Επίσης θα χρειαστούμε την βιβλιοθήκη OpenCV για android, για την ανάπτυξη της εφαρμογής στο eclipse, αλλά και βιβλιοθήκες OpenCV για την εκτέλεση της εφαρμογής στο κινητό. 20

ΚΕΦΑΛΑΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΙΚΟΝΑΣ 4.1 Ψηφιακή εικόνα Μία εικόνα αξίζει όσο χίλιες λέξεις λέει μία λαϊκή ρήση και όχι άδικα. Η εικόνα είναι μία από τις σημαντικότερες πηγές πληροφορίας που μπορούμε να έχουμε. Η ψηφιακή εικόνα (12) με την σημερινή τεχνολογία βρίσκεται παντού. Μια εικόνα μπορεί να αναπαρασταθεί σε έναν υπολογιστή με την μορφή πίνακα όπου κάθε στοιχείο του αντιστοιχεί σε ένα εικονοστοιχίο. Μία εικόνα με ένα μόνο πίνακα, η αλλιώς με ένα μόνο κανάλι αντιπροσωπεύει μια εικόνα απόχρωσης του γκρι. Έγχρωμες εικόνες αντιπροσωπεύονται με 3 πίνακες, ή αλλιώς 3 κανάλια πληροφορίας. Ένα κανάλι για απόχρωση του μπλε, ένα για απόχρωση του κόκκινου, και ένα για την απόχρωση του πράσινου. Υπάρχουν υλοποιήσεις και με 4 κανάλια, όπου το τέταρτο συνήθως αντιστοιχεί στην τιμή alpha, ή αλλιώς την διαφάνεια της εικόνας. 4.2 Υπολογιστική όραση Τα υπολογιστικά συστήματα δεν μπορούν να αντιληφθούν την εικόνα με τον ίδιο τρόπο που την αντιλαμβάνονται οι άνθρωποι, αφού το μόνο που βλέπουν είναι πίνακες με τις εντάσεις των αντίστοιχων εικονοστοιχίων. Το μεγάλο στοίχημα της υπολογιστικής όρασης (13) είναι η εξαγωγή σωστών συμπερασμάτων από αυτούς τους πίνακες. Τα τελευταία χρόνια έχουν αναπτυχθεί αλγόριθμοί που επιτρέπουν την αναγνώριση διάφορων χαρακτηριστικών στις ψηφιακές εικόνες όπως ανίχνευση πλευρών, ανίχνευση γωνιών, ανίχνευση σημείων σε μία ψηφιακή εικόνα που διαφέρουν σε σημαντικό βαθμό από τα γειτονικά τους, μέχρι και την ανίχνευση προκαθορισμένων αντικειμένων, προσώπων, αναγνώριση χαρακτήρων και μία πληθώρα άλλων χαρακτηριστικών. Στην παρούσα εργασία θα χρησιμοποιήσουμε κάποιους από αυτούς τους αλγόριθμους στα διάφορα υποσυστήματα της εφαρμογής μας. 4.3 Εικόνες στέρεο Για να κατανοήσουμε τις εικόνες στέρεο (14) αρχικά πρέπει να αναλύσουμε πώς δουλεύει η ανθρώπινη όραση. Τα ανθρώπινα μάτια βλέπουν δύο διαφορετικές εκδοχές της σκηνής, οι οποίες αντιστοιχούν σε δύο εικόνες ελαφρός μετατοπισμένες στον άξονα χ. Όταν γίνετε η επεξεργασία της εικόνας στον ανθρώπινο εγκέφαλο, ανάλογα με την μετατόπιση μπορούμε να αντιληφθούμε σε τι απόσταση βρισκόμαστε από ένα αντικείμενο η πια είναι η κίνηση των 21

αντικειμένων του χώρου. Για παράδειγμα ένα αντικείμενο που κατευθύνετε προς τα εμάς στο αριστερό μάτι φαίνετε σαν να κινείτε αριστερά ενώ στο δεξιό μάτι φαίνετε σαν να κινείτε δεξιά. Ο εγκέφαλός μας επεξεργάζεται αυτή την πληροφορία και συμπεραίνει ότι το αντικείμενο κατευθύνετε προς τα πάνω μας. 4.1 Η ανθρώπινη Όραση Όταν αναφερόμαστε σε εικόνες στέρεο, εννοούμε εικόνες που έχουν τραβηχτεί ταυτόχρονα από δύο κάμερες που βρίσκονται σε κάποια απόσταση μεταξύ τους. Όπως ακριβώς τα μάτια μας. Ο υπολογιστής μπορεί να εξάγει συμπεράσματα για την απόσταση κάποιου αντικειμένου από την μετατόπιση που έχει αυτό το αντικείμενο στον άξονα Χ δημιουργώντας ένα χάρτη βάθους. Για τους ανθρώπους αυτή η διαδικασία είναι εύκολη καθώς όταν εστιάζουμε σε κάποιο αντικείμενο η γωνία που κοιτάνε τα μάτια μας το αντικείμενο αλλάζει. Για έναν υπολογιστή αυτό είναι μια ιδιαίτερα πολύπλοκη διαδικασία εάν οι δύο εικόνες δεν βρίσκονται στο ίδιο επίπεδο, εάν δηλαδή δεν έχουν χρησιμοποιηθεί δύο κάμερες αλλά μία, καθώς με την χρήση επιπολικής γεωμετρίας (epipolar geometry) θα πρέπει οι εικόνες να μετατραπούν στο ίδιο επίπεδο. Η διαδικασία αυτή ονομάζετε διόρθωση εικόνας (image recrify). 4.3 image recrify Για να μπορέσουμε να υπολογίσουμε το βάθος από δύο εικόνες, πρέπει αυτές οι εικόνες να αντιστοιχούν σε εικόνες στέρεο (15). Δηλαδή τα κοινά σημεία τους πρέπει να βρίσκονται πάνω στην ίδια γραμμή, άξονα Χ. Στην παρούσα εργασία χρησιμοποιήσαμε την κάμερα του κινητού για να τραβήξουμε δύο λήψεις μίας σκηνής, οι οποίες όμως δεν αντιστοιχούν σε εικόνες στέρεο. Για να μπορέσουμε να υπολογίσουμε το βάθος πρέπει πρώτα οι εικόνες μας να μετατραπούν στο ίδιο επίπεδο ώστε να αντιστοιχούν σε εικόνες στέρεο. 22

4.2 Διόρθωση εικόνας (image rectify) Η διαδικασία αυτή καλείτε διόρθωση εικόνας, ή αλλιώς image rectify. Για να μπορέσουμε να εκτελέσουμε αυτή την διαδικασία πρέπει πρώτα να βρούμε τα κοινά σημεία μεταξύ των εικόνων χρησιμοποιώντας κάποιον από τους αλγόριθμους υπολογιστικής όρασης. Τα κριτήρια για την επιλογή αυτού του αλγορίθμου είναι καταρχάς τα σημεία που θα βρίσκει να μην αλλάζουν από διαφορετικές γωνίες λήψεις, και να είναι και γρήγορος. Ο πιο γνωστός αλγόριθμος που πληρεί αυτά τα κριτήρια είναι ο αλγόριθμος εντοπισμού γωνιών του harris (16). Για παράδειγμα στις παρακάτω εικόνες έχει επιλέγει διαφορετικός αλγόριθμος που επιστρέφει ένα σημείο στον ουρανό της εικόνας. Όπως μπορούμε να διακρίνουμε, ακόμα και για το ανθρώπινο μάτι είναι πολύ δύσκολο να πούμε σε ποιο σημείο στην δεξιά εικόνα αντιστοιχεί το επιλεγμένο σημείο. Όπως ακριβός όταν λύνουμε ένα πάζλ με εικόνα που περιέχει ουρανό για παράδειγμα, θα ήταν αδύνατο να ξέρουμε πιο κομμάτι του ουρανού πηγαίνει πού εάν το κάθε κομμάτι δεν ταίριαζε ακριβώς με κάποιο άλλο. 4.3 Εύρεση κοινού σημείου 1 Σε εικόνες όμως που ο αλγόριθμος εντοπισμού σημείων επιλέγει γωνίες είναι πολύ πιο εύκολο να συμπεράνουμε σε ποιο σημείο της δεξιάς εικόνας αντιστοιχεί. 23

4.4 Εύρεση κοινού σημείου 2 Από την στιγμή που έχουμε αντιστοιχήσεις σημείων στην πρώτη και στην δεύτερη εικόνα στην συνέχεια πρέπει να βρούμε δύο πίνακες 3*3. Καταρχάς τον fundamental (17) πίνακα, τον οποίο εάν τον χρησιμοποιήσουμε κάνοντας κάποιες πράξεις με τα στοιχεία του, και τον πίνακα της αρχικής εικόνας, βρίσκουμε το σημείο Χ της πρώτης εικόνας σε ποιο σημείο Χ, το οποίο πρέπει να βρίσκετε στην ίδια γραμμή, της δεύτερης εικόνας πρέπει να αντιστοιχεί. Και στην συνέχεια τον homography (18) πίνακα, με τον οποίο μπορούμε να βρούμε την μετατροπή που πρέπει να υποστεί η εικόνα ώστε να αντιστοιχεί σε εικόνα στέρεο. Αφού βρούμε τους αντίστοιχους πίνακες και κάνουμε τις προκαθορισμένες πράξεις, περιγράφονται στο κεφάλαιο 5 στο υποσύστημα homography, μετατρέπουμε τις δύο εικόνες σε εικόνες στέρεο. Για παράδειγμα στην επόμενη εικόνα βλέπουμε μία τέτοια μετατροπή. 4.5 Διόρθωση εικόνας 24

ΚΕΦΑΛΑΙΟ 5 ΠΕΡΙΓΡΑΦΗ ΚΑΙ ΑΝΑΛΥΣΗ ΣΥΣΤΗΜΑΤΟΣ 5.1 Android Blind Guide Η εφαρμογή που αναπτύξαμε χρησιμοποιεί την ενσωματωμένη κάμερα των κινητών αλλά και διάφορους αισθητήρες που περιέχονται σχεδόν σε όλες τις συσκευές android. Σκοπός της είναι να αναλύσει την εικόνα που βλέπει συνεχόμενα η κάμερα, και να αναγνωρίσει αντικείμενα που αποτελούν εμπόδια στην πορεία που ακολουθεί κάποιος τυφλός, να τον ενημερώσει για αυτά, αλλά και να τον κατευθύνει προς αποφυγή του εμποδίου. Ο τρόπος που το επιτυγχάνει αυτό είναι παίρνοντας διαδοχικά στιγμιότυπα της σκηνής, στην συνέχει εντοπίζονται κοινά σημεία μεταξύ αυτών των διαδοχικών σκηνών με στόχο να υπολογίσουμε την μετατόπιση που έχουν υποστεί τα συγκεκριμένα σημεία στις δύο διαδοχικές σκηνές. Αφού πάρουμε και την πληροφορία της μετατόπισης των σημείων στην συνέχεια μπορούμε να υπολογίσουμε τον fundemental (17) πίνακα, αλλά και τον homography (18) πινακά ώστε να μπορέσουμε να αλλάξουμε τις εικόνες μας για να αντιστοιχούν σε εικόνες που έχουν δημιουργηθεί από στερεό κάμερες. Το σύστημα ενσωματώνει και άλλες λειτουργίες, όπως να προσανατολίζει τον τυφλό (βόρεια νότια ανατολικά δυτικά κτλ.) Ενώ έχει προβλεφθεί επέκτασή του ώστε να είναι σε θέση να ρωτήσει φίλους του χρήστη μέσω του λογαριασμού του σε κάποιο κοινωνικό δίκτυο, για το τι είναι αυτό που βλέπει η κάμερα του κινητού τηλεφώνου. Τα μηνύματα, απαντήσεις, των φίλων του μπορούν να περαστούν από το υποσύστημα text to speech στην συνέχεια. Η εφαρμογή μας αποτελείτε από 12 υποσυστήματα, κάθε ένα από τα οποία εκτελεί μία διαφορετική διαδικασία για να παραχθεί το τελικό αποτέλεσμα. Στο παρακάτω διάγραμμα βλέπουμε συνολικά το σύστημα με όλα τα υποσυστήματα, καθώς και την πορεία των δεδομένων εισόδου. 25

5.1 Τα υποσυστήματα της εφαρμογής 5.2 Υποσύστημα κάμερας Το υποσύστημα της κάμερας είναι υπεύθυνο για την παράγωγη δύο διαδοχικών bitmap εικόνων παίρνοντας δεδομένα από δύο διαδοχικές σκηνές, απευθείας από την κάμερα του κινητού. Για την υλοποίηση του χρειάστηκε αρχικά να δώσουμε δικαιώματα για πρόσβαση στην κάμερα από την εφαρμογή. Αυτό γίνετε προσθέτοντας στο android manifest, το αρχείο που είναι υπεύθυνο δηλαδή για της αιτήσεις πρόσβασης σε πόρους του συστήματος από τις εφαρμογές. Συγκεκριμένα προσθέτοντας τις παρακάτω γραμμές <uses-permission android:name="android.permission.camera"/> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> Στο αρχείο android manifest της εφαρμογής μας, ζητάμε από τον χρήστη να αποδεχτεί την αίτηση της εφαρμογής για χρήση της κάμερας του κινητού του. Η αίτηση αυτή προς τον χρήστη πραγματοποιείτε μόνο την πρώτη φορά που γίνετε εγκατάσταση της εφαρμογής. Η απαίτηση αυτή εξυπηρετεί δύο σκοπούς, πρώτων ο χρήστης γνωρίζει τι πόρους θα χρησιμοποιεί η κάθε εφαρμογή που εγκαθιστά στο κινητό του. Αλλά και εάν ο χρήστης διαθέτει κάποια συσκευή, η οποία δεν περιλαμβάνει κάμερα, τότε η εφαρμογή δεν θα μπορέσει να εγκατασταθεί. Η πρόσβαση στα δεδομένα της κάμερας από την εφαρμογή μας, γίνετε μέσω της συνάρτησης OpenCV videocapture. Όπως είδαμε παραπάνω για να χρησιμοποιήσουμε την βιβλιοθήκη της OpenCV εκτός του ότι πρέπει να κάνουμε τα αντίστοιχα include στην εφαρμογή μας, πρέπει να υπάρχει και μία έκδοση της OpenCV στο κινητό μας. Επομένως χρησιμοποιώντας έναν επιπλέον έλεγχο, βλέπουμε αν ο χρήστης έχει την βιβλιοθήκη στο κινητό του, διαφορετικά του 26

εμφανίζει μήνυμα για την εγκατάστασή της. Η εγκατάσταση μπορεί να γίνει και από τον τυφλό, καθώς το android περιλαμβάνει αρκετά βοηθήματα που λένε φωνητικά όλα τα μηνύματα που εμφανίζονται στην οθόνη, και καθοδηγούν τον χρήστη, αρκεί να έχει ενεργοποιηθεί αυτή η λειτουργία. if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mopencvcallback)) Αφού γίνουν όλα τα παραπάνω δημιουργούμε ένα αντικείμενο της κλάσης videocapture, και αφού κάνουμε τους κατάλληλους ελέγχους ότι παίρνουμε δεδομένα από την κάμερα, και ότι η κάμερα δεν χρησιμοποιείτε ήδη από κάποια άλλη εφαρμογή δημιουργούμε δύο διαδοχικές bitmap εικόνες από δύο αντίστοιχες διαδοχικές σκηνές που έχουν ληφθεί από την κάμερα. Για να το επιτύχουμε αυτό καλούμε την συνάρτηση grab() του αντικειμένου mcamera δύο διαδοχικές φορές, περνώντας το αντικείμενο mcamera στην συνάρτησή μας processframe, η οποία επιστρέφει μία bitmap εικόνα. private VideoCapture mcamera; if (!mcamera.grab()) { Log.e(TAG, "mcamera.grab() failed"); break; } bmp = processframe(mcamera); if (!mcamera.grab()) { Log.e(TAG, "mcamera.grab() failed"); break; } bmp2 = processframe(mcamera); Για το μέγεθος της εικόνας, μετά από πολλές δοκιμές για την βελτιστοποίηση της ταχύτητας του συστήματος καταλήξαμε ότι η ανάλυση 352*288 δίνει τα καλύτερα αποτελέσματα για κινητά τηλέφωνα με σύστημα android ακόμα και χαμηλού κόστους. Την ανάλυση την ορίζουμε στην συνάρτηση SetupCamera public void setupcamera(352, 288) Στην συνάρτηση processframe, χρησιμοποιώντας διάφορες συναρτήσεις της OpenCV μετατρέπουμε τα ανεπεξέργαστα δεδομένα (raw data) της κάμερας σε εικόνα bitmap. Συγκεκριμένα καλούμε capture.retrieve(mrgba, Highgui.CV_CAP_ANDROID_GREY_FRAME); για να πάρουμε μία μονοδιάστατη εικόνα γκρι απόχρωσης την οποία αποθηκεύουμε στο Mat mrgba, και στην συνέχεια χρησιμοποιώντας java κώδικα, σε συνδυασμό με συναρτήσεις της OpenCV δημιουργούμε το bitmap το οποίο και επιστρέφουμε Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mrgba.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(mRgba, bmp); return bmp; 5.3 Υποσύστημα εύρεσης σημείων Για να μπορέσουμε να δημιουργήσουμε ένα depth map είναι απαραίτητο να κάνουμε κάποιους υπολογισμούς και μετατροπές στις δύο διαδοχικές εικόνες ώστε 27

να αντιστοιχούν σε εικόνες stereo. Για να γίνει αυτό το πρώτο βήμα είναι να βρούμε κοινά σημεία στις δύο αυτές εικόνες. Δοκιμάσαμε διαφορετικές μεθόδους με την χρήση opencv, και πιο συγκεκριμένα διάφορους detectors, όπως ο sift, ο surf, ο orb, o gftt και άλλοι και καταλήξαμε ότι ο πιο αποδοτικός σε σχέση με τα αποτελέσματα που βγάζει, αλλά και τον χρόνο που κάνει είναι ο GFTT (Good Features To Track). 5.2 Μέσος όρος χρόνου εύρεσης σημείων Οι παραπάνω detector βρίσκουν δυνατά σημεία σε μία εικόνα, ο κάθε ένας χρησιμοποιώντας κάποιον διαφορετικό τρόπο. Ο surf έχει εμπνευστεί από τον sift, ενώ και οι δύο βασίζονται σε blob detection, δηλαδή μεθόδους που βασίζονται σε μαθηματικά μοντέλα για την εύρεση σημείων σε μία εικόνα που διαφέρουν, είτε σε ένταση, είτε σε χρώμα από τα γειτονικά τους σημεία. Ο orb, η αλλιώς oriented BRIEF, χρησιμοποιεί συνδυασμό μεθόδων, όπως fast για την δημιουργία πυραμίδων και τον εντοπισμό σταθερών σημείων, στην συνέχεια πάλι fast η harris για να βρει τα δυνατότερα από αυτά τα σημεία και στην συνέχεια βρίσκει και την περιστροφή των σημείων. Ο gftt από την άλλη ανιχνεύει μόνο τις δυνατές γωνίες. Ο χρόνος εκτέλεσης του είναι σημαντικά μικρότερος από της άλλες μεθόδους, ενώ παράλληλα το χαρακτηριστικό που επιστρέφει, δηλαδή οι γωνίες, είναι ένα χαρακτηριστικό που δεν αλλάζει σε εικόνες ίδιου αντικειμένου από διαφορετικές γωνίες λήψεις. Χαρακτηριστικά να αναφέρω ότι ο surf σε εικόνα μεγέθους 1280*640 κάνει περίπου 5 δευτερόλεπτα ενώ ο gftt είναι πολύ κάτω από δευτερόλεπτο. Για τον εντοπισμό των κοινών σημείων, αρχικά περνάμε τις δύο bmp εικόνες που δημιουργήσαμε στο υποσύστημα κάμερας στην συνάρτηση processframe2 ως εξής bmp3 = processframe2(bmp,bmp2); Η συνάρτηση processframe2 αποτελείτε από διάφορα υποσυστήματα, και κάθε φορά με μία switch case επιλέγουμε το υποσύστημα που θέλουμε να χρησιμοποιήσουμε. 28

case Sample2NativeCamera.VIEW_MODE_POINTS: για το υποσύστημα εύρεσης σημείων αρχικά μετατρέπουμε τις δύο bmp εικόνες σε mat, δηλαδή πίνακες που περιέχουν τα εικονοστοιχεία των εικόνων. Σε αυτό το υποσύστημα χρησιμοποιείτε μόνο η πρώτη εικόνα, ενώ η δεύτερη θα περαστεί στην συνέχεια στον υποσύστημα optical flow. Η πρώτη εικόνα είναι η bmp, ενώ η δεύτερη η bmp2. Αντίστοιχα, ο πίνακας mat που θα επιστραφεί, και αντιστοιχεί στην πρώτη εικόνα είναι ο temp1, και της δεύτερης ο mrgba. Utils.bitmapToMat(bmp, temp1); Utils.bitmapToMat(bmp2, mrgba); Ενώ στην συνέχεια μετατρέπουμε τα δύο mat σε πίνακα που αντιστοιχεί σε εικόνα απόχρωσης γκρι, η οποία περιλαμβάνει ένα κανάλι πληροφορίας. Σε αυτό το βήμα η πρώτη εικόνα γίνετε η temp3, ενώ η δεύτερη temp2. Imgproc.cvtColor(temp1, temp3, Imgproc.COLOR_BGRA2GRAY, 1); Imgproc.cvtColor(mRgba, temp2, Imgproc.COLOR_BGRA2GRAY, 1); Στην συνέχεια δημιουργούμε έναν πίνακα matofpoint για τα σημεία μας MatOfPoint pcorners = new MatOfPoint(); Τον οποίον περνάμε σαν όρισμα επιστροφής στην συνάρτηση της opencv goodfeaturestotrack Imgproc.goodFeaturesToTrack(temp3, pcorners,26, 0.01, 10); Η συνάρτηση goodfeaturestotrack ουσιαστικά κάνει harris corner detection, βρίσκει δηλαδή της δυνατές γωνίες στην εικόνα μας. Παίρνει σαν είσοδο το mat της πρώτης εικόνας, δηλαδή temp3. Eναν πίνακα MatOfPoints στον οποίο θα επιστρέψει τα σημεία που εντοπίζονται οι δυνατές γωνίες, δηλαδή τον pcorners. Tον αριθμό των σημείων που αντιστοιχούν σε γωνιές που θέλουμε να μας επιστρέψει η συνάρτηση. Μετά από δοκιμές καταλήξαμε τα επιστρεφόμενα σημεία να είναι 26.Έναν δείκτη ποιότητας σε σχέση με την πιο δυνατή γωνία. Έστω για παράδειγμα η πιο δυνατή γωνία είχε ποιότητα 1500, αυτή την τιμή την αποφασίζει ο αλγόριθμός με βάση το πόσο σίγουρος είναι ότι το σημείο που βρήκε είναι γωνία. Ο δείκτης ποιότητας που επιλέξαμε είναι ο 0,01. Αυτός ο δείκτης ποιότητας σχετίζετε με την ποιότητα της πιο δυνατής γωνίας με τον τύπο min_returned_quality > max_returned_quality*deikths_poiothtas Δηλαδή όσα σημεία έχουν ποιότητα μικρότερη ή ίση από 15 δεν θα επιστραφούν. Επίσης ορίζουμε και την μικρότερη ευκλείδεια απόσταση μεταξύ των σημείων που επιθυμούμε να επιστραφούν. Μετά από αρκετές δοκιμές καταλήξαμε ότι εάν ο αριθμός τον σημείων είναι μικρότερος από 7 ή μεγαλύτερος από 15 το σύστημα παρουσιάζει προβλήματα σε επόμενα στάδια, δηλαδή στο υποσύστημα rectify με λίγα σημεία επιστρέφεται μαύρη εικόνα, ενώ με πολλά σημεία δεν μπορεί να υπολογιστεί η μετατροπή που πρέπει να υποστεί η εικόνα με αποτέλεσμα σε κάθε frame να επιστρέφετε τελείως διαφορετική εικόνα, ακόμα και εάν το κινητό παρέμενε ακίνητο. Η ταχύτητα εκτέλεσης ακόμα και με μεγάλο αριθμό σημείων πχ 200, παραμένει πάρα πολύ μικρή. Για τον λόγο αυτό, και δεδομένου ότι από τα επιστρεφόμενα σημεία μπορούμε και σε επόμενο υποσύστημα να κρατήσουμε τα δυνατότερα, Αποφασίσαμε να κρατάμε και τα 26 για δοκιμαστικούς λόγους. 29

Ο βέλτιστος δείκτης ποιότητας είναι 0,01, καθώς η ποιότητα της εικόνας του κινητού δεν συγκρίνετε με επαγγελματικές φωτογραφικές μηχανές. Αυτό μας επηρεάζει καθώς συχνά η δυνατότερη γωνία είχε μικρή ποιότητα. Επόμενος θέλουμε το εύρος να είναι μεγάλο για να επιστραφούν τα 26 σημεία. Η βέλτιστη μικρότερη ευκλείδεια απόσταση, μετά από δοκιμές είναι 30. Παρατηρήσαμε ότι για μικρές ευκλείδειες αποστάσεις, συχνά επιστρεφόταν σημεία που βρισκόταν πολύ κοντά το ένα με το άλλο, και μεγάλες περιοχές της εικόνας δεν είχαν κάποιο επιστρεφόμενο σημείο. Για δοκιμαστικούς λόγους μπορούμε να εμφανίζουμε τα επιστρεφόμενα σημεία αφού πρώτα τα μετατρέψουμε από MatOfPoints σε array και χρησιμοποιώντας την συνάρτηση circle της opencv η οποία εμφανίζει ένα κύκλο στην εικόνα που αντιστοιχεί στον πίνακα temp3, με κέντρο pcenter, ακτίνα 10, και χρώμα (255,0,0) Point[] pcenter = pcorners.toarray(); for (int i=0;i< pcenter.length;i++){ Core.circle(temp3, pcenter[i], 10, new Scalar(255,0,0)); 6.2 Στιγμιότυπο υποσύστηματος εύρεσης σημείων 5.4 Υποσύστημα optical flow Το υποσύστημα αυτό είναι υπεύθυνο να υπολογίσει την μετατόπιση που έχουν υποστεί τα σημεία που έχουν ανιχνευτεί στην πρώτη εικόνα με τα αντίστοιχά τους στην δεύτερη. Το υποσύστημα αυτό παίρνει εισόδους τα σημεία που βρέθηκαν στο υποσύστημα σημείων για την πρώτη εικόνα καθώς και τις δύο εικόνες, ενώ επίσης παίρνει σαν είσοδο ένα μέγεθος παραθύρου, και πόσες πυραμίδες να χρησιμοποιήσει. Πειραματικά κατέληξα σε παράθυρο 31x31 και 0 πυραμίδες. Ο όρος πυραμίδες έχει χρησιμοποιηθεί ευρέως από την κοινότητα προγραμματιστών 30

αλγορίθμων για επεξεργασία εικόνας. Με τον όρο αυτό εννοούμαι το smoothing και το resampling κάθε εικόνας πολλές φορές, όσες και τα επίπεδα της πυραμίδας. Η έξοδος του υποσυστήματος αυτού είναι ένας πίνακας σημείων από την δεύτερη εικόνα τα οποία αντιστοιχούν στα σημεία που βρέθηκαν στο υποσύστημα σημείων για την πρώτη εικόνα. Επίσης επιστρέφετε και η κατάσταση της αναζήτησης, αν ήταν δηλαδή επιτυχής η όχι, καθώς και τα διάφορα σφάλματα που προέκυψαν. Αρχικά μετατρέπονται τα σημεία που βρέθηκαν προηγουμένως σε άλλου τύπου, ενώ δημιουργείτε και ο πίνακας onextpts που θα περιλαμβάνει τα σημεία στην δεύτερη εικόνα MatOfPoint2f oprevpts = new MatOfPoint2f(); MatOfPoint2f onextpts = new MatOfPoint2f(); pcorners.convertto(oprevpts, CvType.CV_32FC2); Στην συνέχεια με την χρήση της συνάρτησης calcopticalflowpyrlk της opencv ο οποίος υπολογίζει το optical flow με την μέθοδο Lucas-Kanade, επιστρέφοντας τον πίνακα onextpts. Video.calcOpticalFlowPyrLK(temp3, temp2, oprevpts, onextpts, ostatus, oerr, new Size(31,31),0); Για να απεικονίσουμε την μετατόπιση αυτή των σημείων στην demo εφαρμογή χρησιμοποιήσαμε τις συναρτήσεις της opencv circle και line. Πιο συγκεκριμένα, Point[] ocenter2 = onextpts.toarray(); Point[] ocenter = pcorners.toarray(); for (int i=0;i< ocenter.length;i++){ Core.circle(temp3, ocenter[i], 10, new Scalar(255,0,0)); Core.line(temp3,ocenter[i], ocenter2[i], new Scalar(0,255,0)); } for (int i=0;i< ocenter2.length;i++) Core.circle(temp3, ocenter2[i], 15, new Scalar(0,0,255)); 5.3 Στιγμιότυπο υποσυστήματος optical flow 31

5.5 Υποσύστημα fundamental Το υποσύστημα αυτό είναι υπεύθυνο να βρει τον 3x3 fundamental πίνακα, ο οποίος μας χρειάζεται για να βρούμε τον homography, αλλά και για να κάνουμε rectify την εικόνα. Ο fundamental πίνακας είναι χρήσιμος για να γίνουν οι μετασχηματισμοί, και η αλλαγή προοπτικής στις εικόνες. Αυτό επιτυγχάνετε όπως θα δούμε και στο υποσύστημα homography με διάφορους πολλαπλασιασμούς και προσθέσεις των στοιχείων του fundamental με τα στοιχεία Χ,Υ της εικόνας, για κάθε σημείο Χ της πρώτης εικόνας, πιο είναι το αντίστοιχο Χ της δεύτερης εικόνας. Τα δύο αυτά σημεία πρέπει να βρίσκονται πάνω στην ίδια γραμμή Υ. Ουσιαστικά πρέπει να ισχύει οπου F ο fundamental πίνακας. Η βιβλιοθήκη opencv μας παρέχει έτοιμη συνάρτηση για τον υπολογισμό του fundamental πίνακα, την findfundamentalmat η οποία παίρνοντας σαν είσοδο τους πίνακες prevpts, και nextpts, που υπολογίστηκαν στο υποσύστημα optical flow, επιστρέφει τον πίνακα fundemental Mat Fundamental = Calib3d.findFundamentalMat(prevPts, nextpts); 5.6 Υποσύστημα homography Το υποσύστημα αυτό είναι υπεύθυνο να βρει τον 3x3 homography πίνακα, ο οποίος μας χρειάζεται για να κάνουμε rectify την εικόνα, και είναι υπεύθυνος για την μετατροπή της προοπτικής που θα γίνει στην εικόνα. Αντίστοιχα με τον fundamental με πράξεις με τα στοιχεία του πίνακα υπολογίζονται τις νέες θέσεις των εικονοστοιχίων τις εικόνας. Πιο αναλυτικά έστω ο παρακάτω 3*3 homography πίνακας H1 H2 H3 H4 H5 H6 H7 H8 H9 5.4 Πίνακας Homography Μπορούμε να βρούμε που θα μεταφερθεί ένα X,Y εικονοστοιχίο της πρώτης εικόνας (src) σε ένα Χ,Υ μιας νέας εικόνας (dst), η οποία αντιστοιχεί στην πρώτη με αλλαγμένη προοπτική, εκτελώντας τις πράξεις dst.χ = (src.χ*h1+src.υ*h2+h3)/(src.χ*h7+src.υ*h8+h9); dst.y = (src.χ*h4+src.υ*h5+h6)/(src.χ*h7+src.υ*h8+h9); Αρχικά ορίζουμε τους δύο homography πίνακες H1 και Η2, για την πρώτη, και την δεύτερη εικόνα αντίστοιχα. Στην συνέχεια Χρησιμοποιώντας την συνάρτηση της opencv stereorectify Uncalibrated, δίνουμε σαν ορίσματα τα σημεία που έχουμε βρει στο προηγούμενο υποσύστημα, δηλαδή prevpts και NextPts. Τον fundamental πίνακα. Το μέγεθος της εικόνας. Και τέλος ένα threshold, το οποίο εάν είναι μεγαλύτερο του 0 φιλτράρει τα σημεία χρησιμοποιόντας μόνο τα ποιο δυνατά. Η συνάρτηση αυτή μας επιστρέφει τους πίνακες H1 και H2. Δηλαδή τους δύο homography πίνακες των δύο εικόνων. Mat H1 = new Mat(3,3, Fundamental.type()); Mat H2 = new Mat(3,3, Fundamental.type()); Calib3d.stereoRectifyUncalibrated(prevPts, nextpts, \ 32

Fundamental, temp3.size(), H1, H2,1); 5.7 Υποσύστημα Rectify Το υποσύστημα αυτό είναι υπεύθυνο για την μετατροπή των δύο εικόνων σε εικόνες που αντιστοιχούν στο ίδιο οπτικό πεδίο, δηλαδή στερεοσκοπικές εικόνες. Οι στερεοσκοπικές εικόνες έχουν την ιδιότητα ότι τα κοινά τους σημεία βρίσκονται πάνω στην ίδια γραμμή, καθιστώντας δυνατό τον υπολογισμό βάθους στην εικόνα στο υποσύστημα depth map. Ένα παράδειγμα τέτοιας μετατροπής βλέπουμε παρακάτω. 5.5 Διόρθωση εικόνας Υπάρχουν δύο προσεγγίσεις μέσω της opencv για να γίνει αυτή η μετατροπή. Η πρώτη χρειάζεται camera calibration, για να βρεθούν τα χαρακτηριστικά της κάμερας όπως intrisics και extrinsics. Υλοποιήσαμε και υποσύστημα για camera calibration, αλλά τα χαρακτηριστικά κάμερας που μας έβγαζε άλλαζαν κάθε φορά ενώ το rectify που γινόταν με την συνάρτηση της opencv. Με τα χαρακτηριστικά της κάμερας, τις δύο εικόνες, και τα σημεία που βρίσκουμε στο προηγούμενο υποσύστημα, εξάγαμε δύο χάρτες μετατροπής. Στην συνέχεια με την συνάρτηση remap, εφαρμόζαμε αυτούς τους χάρτες στην δεύτερη εικόνα. Imgproc.remap(temp3, temp3, map1, map2, 0); Η συνάρτηση remap κάνει μία γενική μετατροπή προοπτικής βασιζόμενη σε χάρτες που υπολογίζουμε και την συνάρτηση. Όμως δεν έβγαζε τα αναμενόμενα αποτελέσματα. Συγκεκριμένα επέστρεφε μία μαύρη εικόνα. 33

Ο δεύτερος τρόπος είναι χωρίς camera calibration και χρησιμοποιεί μία μόνο συνάρτηση, με ορίσματα την εικόνα, τον homography πινακα, το μέγεθος της εικόνας, αλλά και σε ποίον πίνακα να εξάγει την νέα εικόνα που έχει υποστεί μετατροπή σε διαφορετικό οπτικό πεδίο. Η συνάρτηση wrapprespective κάνει αλλαγή προοπτικής με χρήση του τύπου Imgproc.warpPerspective(temp3, temp3, H1, temp3.size()); 5.8 Υποσύστημα depth map Το υποσύστημα αυτό είναι υπεύθυνο για να υπολογίσει το βάθος στις δύο στέρεο εικόνες. Αυτό είναι δυνατό μόνο από την στιγμή που οι δύο εικόνες έχουν τα κοινά τους σημεία στην ίδια γραμμή. Ο αλγόριθμος υπολογίζοντας τις μετατοπίσεις σημείων εξάγει μία εικόνα που αντιστοιχεί σε ένα χάρτη βάθους, στον οποίο ανάλογα με την ανιχνευμένη απόσταση του αντικειμένου, το εμφανίζει με διαφορετική απόχρωση του λευκού. Όσο πιο πίσω βρίσκονται τα αντικείμενα τόσο η απόχρωση τείνει προς το μαύρο χρώμα. Σε αυτό το σημείο, με τις τρέχουσες επιλογές που έχουμε κάνει στα παραπάνω υποσυστήματα δεν είναι δυνατό να εξάγουμε πληροφορία ακριβής απόστασης. Μόνο στο περίπου μπορούμε να υπολογίσουμε πειραματικά, γενικά τα πολύ κοντινά αντικείμενα βρίσκονται σε απόσταση από 1 έως 5 μέτρα, τα αμέσως επόμενα από 5 έως 10 ενώ για τα πολύ μακρινά η απόσταση κυμάνετε από 30 μέτρα έως το field of view της κάμερας, την μέγιστη απόσταση δηλαδή που μπορεί να καταγράψει. Για να μπορέσουμε να εξάγουμε ακριβή πληροφορία, αναγκαία είναι εύρεση χαρακτηριστικών της κάμερας, camera calibration. Μέσω αυτής της διαδικασίας μπορούμε να εξάγουμε συμπέρασμα για τις μετατοπίσεις, αφού κάθε μετατόπιση 1 pixel αντιστοιχεί σε συγκεκριμένη απόσταση. Πχ ένα αντικείμενο που είναι μετατοπισμένο κατά 10 pixel, εάν ο αλγόριθμός είχε βρει ότι 1 pixel μετατόπιση αντιστοιχεί σε 1 μέτρο, θα γνωρίζαμε ότι βρίσκετε σε απόσταση 10 μέτρων. Όμως με τις τρέχουσες επιλογές μας αυτό δεν είναι εφικτό. Για να μπορέσει να γίνει ο υπολογισμός, αρχικά πρέπει να δημιουργήσουμε τον πίνακα,rtmp2, που θα αποθηκευτεί η πληροφορία βάθους Mat rtmp2 = new Mat (temp3.width(),temp3.height(),cvtype.cv_8uc1); Στην συνέχεια δημιουργούμε ένα νέο αντικείμενο της κλάσης stereobm της opencv με τις γενικές ρυθμίσεις,0 δηλαδή για τις γενικές ρυθμίσεις κάμερας. Υπάρχουν και γενικές ρυθμίσεις για κάμερες ευρείας 1 η αμβλείας γωνίας 2. Ορίζουμε τον αριθμό των διαφορετικών αποχρώσεων, μετά από αρκετές δοκιμές σε 16. Ο αριθμός αυτός ορίζει ότι στην εικόνα βάθους θα υπάρχουν συνολικά 16 αποχρώσεις του λευκού ανάλογα με την απόσταση των αντικειμένων. Για λιγότερες αποχρώσεις ένα σημαντικό μέρος της πληροφορίας χανόταν, ενώ με μεγαλύτερες η πολυπλοκότητα της εύρεσης απόστασης αυξανόταν. Επίσης σε αυτό το σημείο ορίζουμε και το παράθυρο από pixel στο οποίο γίνονται οι έλεγχοι. Το παράθυρο 34