ΖΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΡΗΤΗΣ ΔΠΜΣ Προηγμένα Συστήματα Παραγωγής, Αυτοματισμού και Ρομποτικής ΜΗΧΑΝΙΚΗ ΟΡΑΣΗ ΕΡΓΑΣΙΑ 1 ΣΠΟΥΔΑΣΤΕΣ: ΥΠΕΥΘΗΝΟΣ ΚΑΘΗΓΗΤΗΣ : ΒΛΑΧΑΚΗΣ ΜΙΧΑΛΗΣ(Α.Μ:ΜΗ81) ΓΛΑΜΠΕΔΑΚΗΣ ΑΛΕΞΑΝΔΡΟΣ(Α.Μ:MH82) ΜΑΚΡΗΣ ΑΛΕΞΑΝΔΡΟΣ 21
EXERCISE 1 Ζητούμενο της άσκησης είναι να χρησιμοποιηθεί την συνάρτηση της imfilter της Matlb και να παρουσιαστούν κάποια παραδείγματα φιλτραρίσματος για 3-4 εικόνες.για κάθε παράδειγμα να γίνει αναφορά του φίλτρου που χρησιμοποιήθηκε,και να εξηγηθεί ο σκοπός του. Για κάθε τύπο φίλτρου να χρήσιμο-ποιηθούν διαφορετικές παράμετροι και να σχολιαστεί ο τρόπος με τον οποίο επηρεάζουν αυτές οι παράμετροι το αποτέλεσμα. Για την δημιουργία πυρήνα φίλτρου να χρησιμοποιηθούν η fspecial η να δημιουργηθεί η κατάλληλη μήτρα. Στο παρακάτω παράδειγμα δημιουργώ ένα φίλτρο κερνελ.στη συνέχεια με την συνάρτηση imfilter φιλτράρω την εικόνα με τον κερνελ.h εικόνα που θα πάρω θα έχει τονισμένες τις λεπτομέρειες(sharpening filter). a=imread('woman.tif'); %%sharpening filter imshow(a);title('original image'); kernel=zeros(9); kernel(5,5)=10; kernel1=1/9*ones(9); kernel=kernel-kernel1; A=imfilter(a,kernel); figure(); imshow (A);title('Sharpening filter'); 22
Στο επόμενο παράδειγμα θα χρησημοποιηθεί το φίλτρο blurred..καταρχας θα χρησημοποιήσω ετοιμο κερνελ με την βοήθεια της fspecial( disk, 10).Έπειτα θα χρησημοποιηθεί η συνάρτηση imfilter με την επιλογη replicate. I = imread('woman.tif'); imshow(i); title('original Image'); H = fspecial('disk',10); blurred = imfilter(i,h,'replicate'); figure(); imshow(blurred); title('blurred Image'); 23
Εάν τωρα αλλάξουμε τον kernel και αντί για disk χρησημοποιήσουμε τον fspecial( motion,20,45) η εικονα που θα μας επιστρέψει η συνάρτηση imfilter(i,h, replicate ) θα είναι θολή και κουνημένη. I = imread('woman.tif'); imshow(i); H = fspecial('motion',20,45); MotionBlur = imfilter(i,h,'replicate'); figure(); imshow(motionblur); title('motion Blurred Image'); 24
Στην παρακατω επεξεργασία θα τοποθετησουμε salt and pepper θορυβο στην εικονα. Im = imread('woman.tif'); imshow(im); figure(); imsp=imnoise(i,'salt & pepper',0.02); imshow(imsp); title('salt & pepper Image'); 25
Στην εικόνα που ακολουθεί θα δημιουργησουμε ένα gaussian kernell για να καθαρησουμε την εικονα από τον θορυβο salt & pepper. h=fspecial('gaussian',[18 18],2.5); Imgaus=imfilter(imsp,h); figure;imshow(imgaus); title('clean salt&pepper noise with Gaussian'); Παρατηρουμε ότι εξαφανιζεται ο θορυβος από την εικονα μας αλλα χανουμε και αρκετες πληροφοριες.,γιαυτο τον λιγο θα προσπαθησουμε να χρησημοποιήσουμε το median filter. 26
Tο median filter εάν εντοπισει στο κεντρο του κερνελ τιμη πολύ διαφορετικη από τις γειτονικες, την αντικαταστει με μια μεση γειτονικη τιμη.γιαυτο τον λογο είναι ιδανικο για salt and pepper noise. imsp= rgb2gray(imsp); imedian = medfilt2(imsp); figure; imshow(imedian); title('clean salt&pepper noise with median filter '); Αντίθετα από το gausian filter βλέπουμε ότι το medin filter αφαιρεί τον salt and pepper θορυβο και κραταει ολες τις πληροφορίες τις εικόνας με αποτέλεσμα να παιρνουμε πολύ καλή ποιότητα εικόνας. 27
Εντοπισμός ακμών με την χρήση του φιλτρου sobel για τον άξονα Υ και για τον αξονα Χ. Im = imread('woman.tif'); h=fspecial('sobel'); Imsobx=imfilter(Im,h); Imsoby=imfilter(Im,h'); figure; imshow(imsobx); title('sobel X'); figure(); imshow(imsoby); title('sobel Y'); 28
EXERCISE 2 Ο σκοπός αυτής της άσκησης είναι να ανιχνεύσει ακμές με δεδομένο προσανατολισμό.για το σκοπό αυτό θα δημιουργηθεί μια συνάρτηση [ E ] = oriented_edges( I, thr, a, da ) που θα λαμβάνει σαν είσοδο μια double εικόνα (I),μια οριακή τιμή (thr),μια κατεύθυνση (a),μια μια γωνία (da).η έξοδος της function πρέπει να είναι δυαδική εικόνα(binary image) (E) όπου τα εικονοστοιχεία που πληρούν τις ακόλουθες απαιτήσεις πρέπει να έχουν την τιμή 1: Η βαθμίδα ;έντασης των εικονοστοιχείων να είναι μεγαλύτερη από thr Η κατεύθυνση κλίσης (σε rad) να βρίσκεται μέσα στο διάστημα (a-da,a+da) Για τον υπολογισμό κλίσης χρησιμοποιήστε το imfilter με κατάλληλο φίλτρο (π.χ. Sobel). Εφαρμόστε τη λειτουργία χρησιμοποιώντας διαφορετικές τιμές για τις παραμέτρους (thr,a, da) στις εικόνες της επιλογής σας (π.χ. <shapes.tiff>). Kαι παρουσιάστε τα αποτελέσματα μαζί με σχόλια για τον τρόπο με τον οποίο οι παράμετροι επηρεάζουν την έξοδο. Στην συνάρτηση δημιουργήθηκε το φίλτρο sobel με το οποίο υπολογίσαμε την μερική παράγωγο ως προς την χ διεύθυνση και την μερική παράγωγο ως προς την Y διεύθηνση, το μετρο του Gradient και την διεύθυνση (a=γωνία της ακμής),και ένα διάστημα da.η συνάρτηση ελέγχει την εικόνα για πιθανών ακμές με διεύθυνση ιση με (a-da,a+da).και επιστρέφει μια εικόνα στην οποία περιεχονται οι εντοπισμένες ακμές. 29
function [ E ] = oriented_edges( I, thr, a, da ) sobelx=[1 2 1;0 0 0;-1-2 -1]; sobely=sobelx'; I_edgex=imfilter(I,sobelx); I_edgey=imfilter(I,sobely); metro=sqrt((i_edgex.^2)+(i_edgey.^2)); gwnia=atan(i_edgey./i_edgex); a=deg2rad(a); da=deg2rad(da); [x y]=size(i); E=zeros(x,y); for i=1:x for j=1:y if metro(i,j)>thr &gwnia(i,j)>(a-da)& gwnia(i,j)<(a+da) E(i,j)=1; end end end end 210
211
EXERCISE 3 Ο σκοπός αυτής της άσκησης είναι να ανιχνεύσει ζάρια με ένα γνωστό μέγεθος και προσανατολισμό σε μια εικόνα. Η μέθοδος θα πρέπει επίσης να είναι σε θέση να αναγνωρίσει τον αριθμό σε κάθε ζάρι που ανιχνεύθηκε. Η υπόθεση είναι ότι τα ζάρια στην εικόνα είναι σχεδόν παράλληλα με τους άξονες εικόνας (π.χ. <dice_01.tiff>. Για την αναγνώριση είστε ελεύθεροι για να χρησιμοποιήσετε τεχνικές ανίχνευσης γωνιών και άκρων, για παράδειγμα μπορείτε να χρησιμοποιήσετε ενσωματωμένες συναρτήσεις της Matlab. Η Edge detection θα είναι χρήσιμη για την εύρεση του περιγράμματος κάθε ζαριού, ενώ ανίχνευση γωνίας στην κατάλληλη κλίμακα θα παράσχει τον αριθμό του. Οπτικοποιήστε τα αποτελέσματα προσθέτοντας στην αρχική εικόνα τα κέντρα των ζαριών που ανιχνεύθηκαν και ο αριθμός τους. Για τις αρχικές δοκιμές του συστήματος χρησιμοποιήστε την απλούστερη εικόνα που παρέχεται: <dice_01.tiff>. Μόλις επαληθευτεί η απόδοση του συστήματος με αυτήν την εικόνα, συνεχίστε τις δοκιμές σας με το το υπόλοιπο των παρεχόμενων εικόνων ή άλλων εικόνων της επιλογής σας που περιέχουν ζάρια και σχολιάστε τα αποτελέσματα. Για κάθε πείραμα παρέχετε και σχολιάζετε τις τιμές παραμέτρων που χρησιμοποιήσατε για την ανίχνευση των ζαριών. Αυτό σύστημά σας αποτύχει να προσπαθήσει να εξηγήσει γιατί. Το πρόγραμμα πρέπει να είναι σωστά δομημένο χρησιμοποιώντας λειτουργίες για κάθε υποπρόβλημα. close; clc; Im=imread('dice_01.tiff'); Im=Im(:,:,1); %dimiourgia filtrou gia tin euresi pithanwn kentrwn twn zariwn s=56; w=2; %metatropi apo rgb se grayscale E=edge(Im); E=double(E); %dimiourgia filtrou gia tin euresi pithanwn kentrwn twn zariwn H=zeros(s); H(1:w,:)=1;H(:,1:w)=1; H(s-w+1:s,:)=1;H(:,s-w+1:s)=1; figure; imshow(im); C=imfilter(E,H); C=C>160; %entopismos kentrwn twn zariwn figure;imshow(c); 212
r=regionprops(c); centroids=cat(1,r.centroid); plot(centroids(:,1),centroids(:,2),'g*'); %%dimiourgia filtrou gaussian G=fspecial('gaussian',[9 1],2.5); %%entopismws gwniwn me tin synartisi corner c=corner(im,'harris','filtercoefficients',g); figure;imshow(im); plithos_zariwn=size(centroids,1); plithos_corners=size(c,1); k=zeros(plithos_zariwn,2); for i =1:plithos_zariwn for j=1:plithos_corners if abs(c(j,1)-centroids(i,1)<25)&& abs(c(j,2)-centroids(i,2)<23) k(i)=k(i)+1; co(i,1)= end end k 213