Διατμηματικό Πρόγραμμα Μεταπτυχιακών Σπουδών «Προηγμένα Συστήματα Παραγωγής, Αυτοματισμού και Ρομποτικής» ΜΑΘΗΜΑ Μηχανική Όραση ΑΝΑΦΟΡΑ ΕΡΓΑΣΙΑΣ Assignment 2 ΣΠΟΥΔΑΣΤΕΣ Λεμωνιά Κατερίνα Πορφυράκης Μανώλης Χρονάκης Νίκος ΔΙΔΑΣΚΩΝ Μακρής Αλέξανδρος Δεκέμβριος 2018
ΠΕΡΙΕΧΟΜΕΝΑ Exercise 1 Filters... 3 Μεθοδολογία επίλυσης εργασίας 1... 3 Παρουσίαση κώδικα και αποτελεσμάτων άσκησης 1... 3 Exercise 2 Edge Detection... 7 Μεθοδολογία επίλυσης εργασίας 2... 7 Παρουσίαση κώδικα και αποτελεσμάτων άσκησης 2... 7 Exercise 3 Dice... 9 Μεθοδολογία επίλυσης εργασίας 3... 9 Βιβλιογραφία... 13 Σελίδα 2
Exercise 1 Filters Μεθοδολογία επίλυσης εργασίας 1 Σκοπός της πρώτης εργασίας είναι να παρουσιαστεί η συνάρτηση imfilter χρησιμοποιώντας διάφορα παραδείγματα εικόνων. Για κάθε παράδειγμα επεξηγείται ο τύπος του φίλτρου που χρησιμοποιήθηκε και με τη βοήθεια της fspecial παρουσιάζονται τα αποτελέσματα των φιλτραρισμένων εικόνων σε σχέση με τις αρχικές εικόνες. Παρουσίαση κώδικα και αποτελεσμάτων άσκησης 1 Φίλτρο edge detection Το συγκεκριμένο φίλτρο αποτελείται από ένα matrix 3x3 με τιμές h2=[1 0-1;2 0-2;1 0-1] και παίρνει τις διαφορές στους άξονες τις εικόνες τονίζοντας τα σημεία με μεγάλες διαφορές τιμών. Με αυτόν τον τρόπο εμφανίζει στο χρήστη τις γωνίες τις εικόνας. h2=[1 0-1;2 0 0 0;-1 0 1]; % eisagogi filtrou edge detection I3=imfilter(a,h2); figure() imshowpair(a,i3,'montage') Παρουσίαση αποτελεσμάτων αλγόριθμου canny σε τρείς διαφορετικές εικόνες. Σελίδα 3
Φίλτρο με τον αλγόριθμο canny Ο αλγόριθμος canny χρησιμοποιείται για την ανίχνευση των ακμών μιας εικόνας με το βέλτιστο τρόπο. I=edge(a,'canny');% eisagogi filtrou canny figure() imshowpair(a,i,'montage') Παρουσίαση αποτελεσμάτων αλγόριθμου canny σε τρείς διαφορετικές εικόνες. Σελίδα 4
Φίλτρο motion To φίλτρο motion εφαρμόζεται με τη βοήθεια της συνάρτησης fspecial όπου εισάγοντας το τύπο του φίλτρου, το μέγεθος της μήτρας και το sigma εμφανίζεται στο χρήστη η απεικόνιση του φίλτρου αυτού. f=f special(type,hsize,sigma); f=fspecial('motion',30,30); % eisagogi filtrou motion I1=imfilter(a,f); figure() imshowpair(a,i1,'montage') Σελίδα 5
Παρουσίαση αποτελεσμάτων φίλτρου motion σε τρείς διαφορετικές εικόνες. Σελίδα 6
Exercise 2 Edge Detection Μεθοδολογία επίλυσης εργασίας 2 Για τη δεύτερη εργασία δημιουργείται μια συνάρτηση [ E ] = My_oriented_edges( I, thr, a, da ) στην οποία εισάγεται μια εικόνα, το κατώφλι (threshold, η γωνία των ακμών προς αναζήτηση καθώς και το εύρος τιμής της επιθυμητής γωνίας έτσι ώστε να ανιχνευθούν οι ακμές της εικόνας. Στη συνέχεια σκανάροντας την εικόνα ως προς τον x και τον y άξονα και βάζοντας διάφορες τιμές στο threshold, στην ένταση του gradient και στην τιμή της γωνίας επιτυγχάνεται ο εντοπισμός των επιθυμητών ακμών. Παρουσίαση κώδικα και αποτελεσμάτων άσκησης 2 Αρχικά εισάγετε η εικόνα στην οποία θέλουμε να ανιχνεύσουμε τις ακμές τις. I=imread('shapes.tiff'); I=im2double(I); figure(1) imshow(i) R=size(I); Εικόνα 1: Εισαγωγή αρχικής εικόνας προς ανίχνευση ακμών Στη συνέχεια ορίζεται το κατώφλι (threshold), η γωνίας των ακμών προς αναζήτηση και το εύρος τιμής αυτής της γωνίας. thr=100; %orismos katofliou da=0.1*pi; %orismos gonias se rad a=pi/4; %orismos eurous Σελίδα 7
Έπειτα φιλτράρεται η εικόνα με ένα φίλτρο gauss έτσι ώστε να εξαλειφθεί ο θόρυβος και στη συνέχεια εφαρμόζεται το φίλτρο sobel για τον x και τον y άξονα έτσι ώστε να ανιχνεύσουμε τις ακμές ως προς τους άξονες αυτούς. Τέλος, για τον εντοπισμό των ακμών όλης της εικόνας υπολογίζουμε το μέτρο του gradient και σκανάρουμε την εικόνα για κάθε ακμής ως προς τον x και τον y άξονα. Με αυτό τον τρόπο εμφανίζονται οι ακμές για την επιθυμητή τιμή threshold και της γωνίας του gradient. h=fspecial('gaussian',3,3); % filtro gauss gia eksalipsi thorivou Ig=imfilter(I,h); fx = fspecial('sobel'); % filtro sobel fy = fx'; Ix = imfilter(ig,fx); % gradient x Iy = imfilter(ig,fy); % gradient y I0 = sqrt( (Ix.^2) + (Iy.^2 )); % ipologismos metrou Theta= atan(iy./ix); % se moires E = zeros(x,y); for i = 1:x for j = 1:y if ( (Theta(i,j) >= (a-da) ) && (Theta(i,j) <= (a+da) ) &&... (I0(i,j) >= thr)) E(i,j) = 1; Εικόνα 2: Ανίχνευση των ακμών ως προς τον x και y άξονα. Σελίδα 8
Εικόνα 3: Παρουσίαση τελικών ακμών εικόνας για thr=100, da=pi, a=1. Exercise 3 Dice Μεθοδολογία επίλυσης εργασίας 3 Σκοπός της εργασίας 3 είναι η εύρεση ενός ζαριού συγκεκριμένου μεγέθους και προσανατολισμού στο χώρο της εικόνας καθώς και η ανάγνωση από το χρήστη της ένδειξης του ζαριού. Για την επίλυση της εργασίας θεωρείται ότι το ζάρι είναι σχεδόν παράλληλο στους άξονες και χρησιμοποιείται η μέθοδο εύρεσης ακμών έτσι ώστε να εντοπιστεί το περίγραμμα των ζαριών και στη συνέχεια η μέθοδο εύρεσης γωνιών έτσι ώστε να εντοπιστούν οι ενδείξεις των τιμών που έχουν τα ζάρια. Αρχικά εντοπίζονται οι ακμές των ζαριών της εικόνας με τη χρήση του αλγόριθμου canny.και παρουσιάζονται τα αποτελέσματα σε σύγκριση με την αρχική εικόνα. %% Euresi Kentron Zarion % original= imread('dice_01.tiff'); I = edge(original,'canny'); % dimiourgia filtrou I=im2double(I); % metatropi se double Σελίδα 9
Εικόνα 1: Παρουσίαση ακμών εικόνας. Στη συνέχεια ανοίγουμε την εικόνα με το data cursor και βλέπουμε ότι το ζάρι έχει μέγεθος 54 pixels. Έτσι δημιουργούμε μια μήτρα 56x56 όπου έχει 3 πρώτες γραμμές και 3 τελευταίες στήλες με 1 και όλα τα άλλα μηδεν και με αυτό το φίλτρο σκαναρουμε την εικόνα και με αυτό τον τρόπο και τις συναρτήσεις του matlab regionprops και centroids βρίσκουμε τα κέντρα των ζαριών. a=54; %pleura b=1; %pixels width=2; %paxos perigrammatos filtrou thr=140; or_2 = original > 0; figure(3) imshow(or_2) title('binary Image') s = regionprops(or_2,original,{'centroid','weightedcentroid'}); imshow(original) title('weighted (red) and Unweighted (blue) Centroids'); hold on numobj = numel(s); for k = 1 : numobj plot(s(k).weightedcentroid(1), s(k).weightedcentroid(2), 'r*') % stathmismeno kai mi plot(s(k).centroid(1), s(k).centroid(2), 'bo') end hold off Σελίδα 10
Εικόνα 2: Παρουσίαση κέντρων ζαριών. Εικόνα 3: Εκτύπωση σημείων στο κέντρο κάθε ζαριού. Έπειτα για να βρούμε τον αριθμό των ζαριών στην εικόνα εφαρμόζουμε length(centroids) και παρουσιάζεται το αποτέλεσμα στην οθόνη του χρήστη όπου εμφανίζει το μήνυμα ότι τα ζάρια είναι 6. hold on; Zaria=length(centroids); disp('o arithmos ton zarion stin eikona einai...') disp(zaria) hold off Σελίδα 11
Μετά τον εντοπισμό των κέντρων των ζαριών εκτυπώνεται ένα πλαίσιο γύρο από κάθε ζάρι που έχει εντοπιστεί και επιστρέφει τις θέσεις κέντρων των ζαριών. figure(6) imshow(original); corners=corner(i3); Corner_array_dim=size(corners); xcenter=corners(:,1); ycenter=corners(:,2); length=54; down_x=zeros(corner_array_dim(1)); up_x=zeros(corner_array_dim(1)); down_y=zeros(corner_array_dim(1)); up_y=zeros(corner_array_dim(1)); for dice=1:corner_array_dim(1) down_x(dice)=xcenter(dice)-length/2 +2; up_x(dice)=xcenter(dice)+length/2-2; down_y(dice)=ycenter(dice)-length/2 +2; up_y(dice)=ycenter(dice)+length/2-2; hold on rectangle('position',[corners(dice,1)-length/2,corners(dice,2)- length/2,length,length],'edgecolor','b','linewidth',3) hold off end Εικόνα 4: Παρουσίαση περιγράμματος ζαριών. Σελίδα 12
Βιβλιογραφία Βιβλία: Computer Vision - A Modern Approach - D. Forsyth, J. Ponce Computer Vision: Algorithms and Applications Szeliski Hartley-MultipleViewGeometry Ηλεκτρονικό Αρχείο Ηλεκτρονικές διαλέξεις μαθήματος Μηχανικής Όρασης, Μακρύς Αλέξανδρος Σελίδα 13