Εισαγωγή στην Επιστήμη των Η/Υ ΙΙ Μάθημα 6 Παλινδρόμηση – Δημιουργία Video - Συναρτήσεις - GUI
Προσαρμογή δεδομένων (curve fitting)
Παλινδρόμηση (Regression) Μέθοδος των ελαχίστων τετραγώνων Χ Υ Ανεξάρτητη μεταβλητή Εξαρτημένη μεταβλητή
Παλινδρόμηση (Regression) Υ Χ
Παλινδρόμηση – Regression με τη Matlab • Polyfit – υπολογισμός καμπύλης παλινδρόμησης p = polyfit(x,y,n), υπολογίζει για τα δεδομένα x,y τους συντελεστές του πολυωνύμου p που έχει βαθμό n και προσαρμόζεται στα δεδομένα
Παλινδρόμηση – Regression με τη Matlab x = (0: 0.1: 2.5)'; y = erf(x); p = polyfit(x,y,6) p =
Παλινδρόμηση – Regression με τη Matlab y = polyval (p, x) Υπολογίζει την τιμή ενός πολυωνύμου σε ένα σημείο X. Είσοδος: οι συντελεστές του πολυωνύμου p Έξοδος : οι τιμές που αντιστοιχούν στα σημεία X f = polyval(p,x); p = polyfit(x,y,6) plot(x,y,'o',x,f,'-')
Δημιουργία βίντεο με τη Matlab
• Αποθήκευση καρέ – καρέ • Απευθείας χειρισμός των συντεταγμένων του γραφήματος
Δημιουργία βίντεο με τη Matlab • moviein(n) - δεσμεύει μνήμη για το βίντεο (δεν χρησιμοποιείται σε νέες εκδόσεις) • getframe - επιστρέφει ένα καρέ • movie – προβάλει το βίντεο • movie2avi – μετατρέπει το βίντεο σε μορφή AVI • mpgwrite – μετατρέπει το βίντεο σε μορφή MPEG
Δημιουργία βίντεο με τη Matlab F = getframe F = getframe(h) F = getframe(h,rect), [left bottom width height] Παράδειγμα for j = 1:n «…plotting commands…» F(j) = getframe; End movie(F) getframe - επιστρέφει ένα καρέ
Δημιουργία βίντεο με τη Matlab Z = peaks; surf(Z) axis tight set(gca,'nextplot','replacechildren'); for j = 1:20 surf(sin(2*pi*j/20)*Z,Z) F(j) = getframe; end movie(F,20) movie2avi(F,'test.avi’)
Δημιουργία βίντεο με τη Matlab movie(M) movie(M,n) movie(M,n,fps ) movie(h,...) movie(h,M,n,fps,loc) movie - προβάλει το βίντεο Όπου M ένας πίνακας οι στήλες του οποίου είναι καρέ του βίντεο, συνήθως η έξοδος της getframe n – είναι ο αριθμός των προβολών * Το n μπορεί να είναι διάνυσμα με την εξής μορφή: [αριθμός προβολών σειρά προβολής καρέ] π.χ. movie(M,[ ]) NumberofPlays = 2; FrameOrder = [1:5 4:-1:2]; movie(M,[NumberofPlays FrameOrder])
Δημιουργία βίντεο με τη Matlab movie2avi(mov,filename) movie2avi(mov,filename,param,value,param,value...) movie2avi – μετατρέπει το βίντεο σε μορφή AVI mov – το βίντεο της Matlab (πίνακας με καρέ)
Δημιουργία συναρτήσεων (function) στη Matlab
• Αρχεία script ή αρχεία εντολών δεν έχουν ορίσματα εισόδου και εξόδου αλλά εκτελούν μια ακολουθία εντολών σε μεταβλητές του περιβάλλοντος εργασίας • Αρχεία συναρτήσεων (function m-files) δέχονται ορίσματα εισόδου και επιστρέφουν μεταβλητές στην έξοδο, οι εσωτερικές μεταβλητές των function είναι τοπικές. Λειτουργούν όπως οι εντολές της Matlab. Τα αρχεία script και τα αρχεία function δημιουργούνται από έναν editor (καλύτερα με τον editor της Matlab - εντολή edit) H Matlab μπορεί να εκτελέσει μια ακολουθία εντολών που είναι αποθηκευμένη σε ένα αρχείο με την προέκταση.m, τα αρχεία αυτά ονομάζονται “M-files” και υπάρχουν δύο τύποι τέτοιων αρχείων τα script files και τα function files.
Δημιουργία συναρτήσεων (function) στη Matlab Παράδειγμα script
Δημιουργία συναρτήσεων (function) στη Matlab Τα αρχεία function περιέχουν και αυτά μια σειρά από εντολές της Matlab, έχουν όμως και μεταβλητές εισόδου – εξόδου Γενικά, έχουν την πιο κάτω δομή 1. Επικεφαλίδα (header) Απαραίτητα με τη μορφή: function [output1, output2, ….] = filename (input1, input2, ….) To filename είναι το όνομα του αρχείου.m ΑΛΛΑ και του function υποχρεωτικά πρέπει να είναι ίδια. Προσέξτε ότι οι μεταβλητές εισόδου είναι σε παρενθέσεις ενώ οι μεταβλητές εξόδου βρίσκονται σε αγκύλες. Οι τελευταίες δεν είναι απαραίτητες αν έχουμε μόνο μια μεταβλητή εξόδου. Για παράδειγμα αντί function [out1] = parad(x, y) μπορούμε να γράψουμε function out1 = parad(x, y) 2. Σχόλια (comments) Χρησιμοποιώντας το σύμβολο % μπορούμε να εισάγουμε σχόλια (προαιρετικά). Τα σχόλια εμφανίζονται με τη μορφή βοήθειας όταν τρέχουμε την εντολή help για το function. 3. Εντολές Μπορούν να χρησιμοποιηθούν όλες οι εντολές της Matlab και απαραίτητα θα πρέπει να υπολογίζονται τα output.
Δημιουργία συναρτήσεων (function) στη Matlab function y = randint(m,n,a,b) % RANDINT Randomly generated integral matrix. % randint(m,n) returns an m-by-n such matrix with % entries between 0 and 9. % randint(m,n,a,b) returns entries between integers a and b. if nargin < 3, a=0; b=9; end y = floor((b-a+1)*rand(m,n))+a; Ο παραπάνω κώδικας πρέπει να αποθηκευτεί σε ένα αρχείο με το όνομα randint.m.
Οι εντολές της MATLAB, όπως οι max, size, κλπ είναι function m-files. Για την ονομασία ενός function ισχύουν οι κανόνες ονοματολογίας που ισχύουν και για τις μεταβλητές: • Το όνομα αρχίζει με γράμμα (του αγγλικού αλφαβήτου). • Το όνομα περιέχει μόνο γράμματα, αριθμούς και υποπαύλες (underscore). • Δεν χρησιμοποιούνται ονόματα που έχουν δεσμευτεί από τη MATLAB (π.χ.συναρτήσεις βιβλιοθήκης και εργαλειοθηκών). • Προτιμούνται μικρά ονόματα για πρακτικούς λόγους αν και δεν υπάρχει περιορισμός στο μήκος των ονομάτων. Δημιουργία συναρτήσεων (function) στη Matlab
function [mean, stdev] = stat(x) % STAT Mean and standard deviation % For a vector x, stat(x) returns the % mean and standard deviation of x. % For a matrix x, stat(x) returns two row % vectors containing, respectively, the % mean and standard deviation of each column. [m n] = size(x); if m == 1 m = n; % handle case of a row vector end mean = sum(x)/m; stdev = sqrt(sum(x.^2)/m -mean.^2);
Δημιουργία GUI με τη Matlab
Graphical User Interfaces GUI είναι ένα γραφικό περιβάλλον με το οποίο αλληλεπιδρά ο χρήστης, μέσω διαφόρων «αντικειμένων» που περιέχονται στο GUI. Τα αντικείμενα μπορεί να είναι menus, toolbars, push buttons, radio buttons, list boxes, and sliders κλπ. Τα GUI της Matlab μπορούν επίσης να χρησιμοποιήσουν σαν «αντικείμενα» διαγράμματα και να δημιουργήσουν ομάδες «αντικειμένων»
Δημιουργώντας GUI με το GUIDE To guide είναι το πρόγραμμα σχεδιασμού GUI της Matlab. Εμφανίζεται με την εντολή guide και μας δίνει τη δυνατότητα να σχεδιάσουμε το GUI και να προσθέσουμε τον κώδικα. Το guide δημιουργεί δύο αρχεία: *.fig που περιέχει το GUI *.m που περιέχει τον κώδικα
Δημιουργώντας GUI 1.Σχεδιασμός 2.Δημιουργία – Με το guide 3.Προγραμματισμός – Με το guide και το edit (δημιουργία callback) 4.Εκτέλεση, έλεγχος λειτουργίας
Δημιουργώντας GUI
Δημιουργώντας GUI - Σχεδιασμός
Δημιουργώντας GUI - Προγραμματισμός Προγραμματισμός είναι η δημιουργία των callback δηλαδή η ακολουθία των εντολών που εκτελούνται όταν ενεργοποιείται ένα «αντικείμενο» • Οι εντολές callback αποθηκεύονται στο M-file του GUI • τα callback ανήκουν στα αντικείμενα (e.g. CreateFnc, ButtonDwnFnc, Callback, DeleteFnc) Ένα callback αποτελείται από τα παρακάτω στάδια: • 1. Έλεγχος της κατάστασης του αντικειμένου που ξεκινά την ενέργεια • 2. Έλεγχος της κατάστασης του αντικειμένου που δέχεται την ενέργεια και του οποίου θα αλλάξουν οι ιδιότητες • 3. Συλλογή των δεδομένων/πληροφοριών • 4. Επεξεργασία • 5. Αλλαγή κατάσταση στο αντικείμενο που δέχεται την ενέργεια
Δημιουργώντας GUI - Προγραμματισμός % Create the data to plot. handles.peaks=peaks(35); handles.membrane=membrane; [x,y] = meshgrid(-8:.5:8); r = sqrt(x.^2+y.^2) + eps; sinc = sin(r)./r; handles.sinc = sinc; % Set the current data value. handles.current_data = handles.peaks; surf(handles.current_data)
% Display surf plot of the currently selected data. surf(handles.current_data);
% Determine the selected data set. str = get(hObject, 'String'); val = get(hObject,'Value'); % Set current data to the selected data set. switch str{val}; case 'Peaks' % User selects peaks. handles.current_data = handles.peaks; case 'Membrane' % User selects membrane. handles.current_data = handles.membrane; case 'Sinc' % User selects sinc. handles.current_data = handles.sinc; end % Save the handles structure. guidata(hObject,handles)
Έτοιμα GUI ……
[FileName,PathName] = uigetfile('*.m','Select the M-file'); helpdlg('Choose 10 points from the figure','Point Selection'); prompt = {'Enter matrix size:','Enter colormap name:'}; dlg_title = 'Input for peaks function'; num_lines= 1; def = {'20','hsv'}; answer = inputdlg(prompt,dlg_title,num_lines,def);