Presentation is loading. Please wait.

Presentation is loading. Please wait.

עיבוד תמונות ואותות בעזרת מחשב תרגול מס' 1: Welcome to Matlab!

Similar presentations


Presentation on theme: "עיבוד תמונות ואותות בעזרת מחשב תרגול מס' 1: Welcome to Matlab!"— Presentation transcript:

1 עיבוד תמונות ואותות בעזרת מחשב תרגול מס' 1: Welcome to Matlab!

2 אני: קצת פרטים: מתן פרוטר בניין טאוב, חדר 437 שעת קבלה:
matan.protter -at- gmail.com לפנות: שאלות, בעיות, טענות, ...

3 קורסים חופפים טורי פוריה (מתמטיקה) אותות ומערכות (חשמל)
טורי פוריה, טרנספורם פוריה אותות ומערכות (חשמל) אותות ומערכות בזמן בדיד ורציף טרנספורם פוריה הבדיד עיבוד וניתוח תמונות (חשמל) ייצוגי תמונות אלגוריתמים לשיפור ולניתוח תמונות

4 מה זה עיבוד תמונה? Image Model Computer Vision Comp. Geometry Image
Processing Computer Graphics

5 מבוא ל Matlab (1) המון כלים מוכנים מראש עזרה נוספת:
שפת סקריפטים לא צריך לקמפל אפשר להריץ שורה אחרי שורה מאד נוח לדבג, פחות יעיל להרצות מסיביות המון כלים מוכנים מראש תמונות: קריאה, שמירה, תצוגה, הגדלה/הקטנה, עיבוד... מתמטיקה: פתרון משוואות, אינטגרלים, מטריצות... עזרה נוספת: פקודות help, helpwin, helpdesk, demo מתוך סביבת ה-Matlab באינטרנט: אזהרה: Matlab is Case-Sensitive!

6 חלון פקודות מבוא ל Matlab (2) תיקיית עבודה רשימת משתנים
היסטוריית פקודות

7 מבוא לMatlab (3) איפה עובדים במטלב: תואר ראשון: תואר שני/שלישי:
בחוות PC תואר שני/שלישי: דרך cs-general ב- \\cs-general-pdc\matlab\bin\win32\matlab.exe ב- Unix לכתוב matlab בחלון terminal

8 פעולות חישוב בסיסיות הפעלת פונקציות (קיימות) הגדרת משתנים 2 1
>> log(a) ans = >> sqrt(a) >> mod(a,b) 2 הפעלת פונקציות (קיימות) הגדרת משתנים 2 >> a = 5; >> b = 3; >> a*b ans = 15 >> 5*3 >>a*3; >> a*3 >> a^b 125 1 נקודה-פסיק (;) בסוף הפקודה מונע את הדפסת התוצאה כתיבת מספר פקודות באותה שורה >> a = 5; b = 3; c = a*b, d = a+b; e = a/b c = 15 e = 3 לא קריא, ולא מומלץ!

9 מטריצה – יחידת הנתונים הבסיסית
מטלב מתייחס לכל המשתנים בתור מטריצות. סקלר הוא מטריצה 1x1 וקטור הוא מטריצה ממימד 1, וקטור עמודה וקטור שורה יש גם מטריצות ממימדים גבוהים (3 , 4 , ...) String (כמו ‘hello’) אפשר להתייחס כוקטור של אותיות יש גם משתנים מסוג מורכב יותר: struct, cell array

10 מטריצה – יחידת הנתונים הבסיסית - המשך
a = 5; a = [ ]; a = [1 : 2 : 9]; a = [1 ; 3 ; 5 ; 7 ; 9]; A = [ ; ; ]; B = A(2:3 , 2:3); B = A(2:end , 1:3); B = A(: , [1 3]); C = A’; str = ‘This is a String!’; איך מייצרים מטריצה? סקלר: וקטור שורה: וקטור עמודה: מטריצה :3x3 העתקת תת מטריצות: העתקת עמודות מסוימות מטריצת שחלוף transpose: מחרוזת (גם מטריצה!):

11 מה עושים עם מטריצות? פעולות בסיסיות:
zeros(5,6) ones(3,4) eye(2,4) rand(5,2) C = A+B; C = A+5; C = A*B; A.*B A.^2 A./B sqrt(A), abs(A), eig(A) v = A(:); sumCol=sum(A,1); sumRow=sum(A,2); sum(A(:)) or sum(sum(A,1),2) [numRows , numCols] = size(A); פעולות בסיסיות: מטריצות מיוחדות: חיבור מטריצות: אותו גודל או עם סקלר כפל מטריצות פעולות איבר-איבר (להוסיף . לפני האופרטור להפעיל פונקציה על מטריצה להפוך מטריצה לוקטור עמודה סכום איברים לאורך עמודות/שורות סכום איברים של כל המטריצה בירור גודל של מטריצה

12 עוד על מטריצות האינדקס הראשון במטריצה הוא השורה, והשני – עמודה
עלול לבלבל, כי רגילים למימד ראשון X ושני Y מומלץ במקום אינדקסים x & y להשתמש באינקסים r & c למניעת בלבול. הסדר של האיברים במטריצה: למשל, כשבונים וקטור ממטריצה על ידי v=A(:); קודם כל, ילקחו איברי העמודה הראשונה (מהשורה הראשונה עד האחרונה), אח"כ העמודה השניה, וכן הלאה. אם רוצים לסדר לפי השורות, צריך לעשות B=A’; v=B(:);

13 סוגי משתנים סוגי משתנים:
משתני floating point: double או single (8 או 4 בתים) שלמים: uint8, int8, uint16, int16, uint32, int32,… u בהתחלה מציין שללא סימן – מספרים חיוביים בלבד המספר בסוף – מספר הבתים המוקצים למשל, int8 בין -128 ל +127, uint16 בין 0 ל 2^(=16)-1. לוגיים (בוליאניים): 0 או 1 ( true או false) מחרוזות אם לא מגדירים במפורש, מטלב בוחר בעצמו את סוג המשתנה!

14 סוגי משתנים אפשר להמיר באופן מפורש: A = uint8(A)
אם מקצים, אפשר לקבוע A = zeros([ ] , ‘int16’) לוודא שלא חורגים מהתחום של המשתנה איך יודעים מה סוגי המשתנים? הפקודה whos אפשר גם בחלון workspace ברירת המחדל היא double, אבל יש פונקציות שמחזירות סוגים אחרים... לעיתים נבחר משתנים כמו uint8 כדי לחסוך בזיכרון...

15 תנאים לוגיים וחיפושים אופרטורים לוגיים:
>> a = [1 2 3 ; ; 7 8 9] a = >> inds = find(mod(a , 2) == 0) inds = 2 4 6 8 >> [r,c] = find(mod(a , 2) == 0); [r c] ans = >> inds = find(mod(a,2) , 2 , 'first') 1 3 >> אופרטורים לוגיים: Not (~), שוויון == , שונה מ ~= , גדול או קטן מ < > חיפוש איברים: הפונקציה find מחפשת איברים במטריצה לוגית inds = find(A == 3); [rs, cs] = find(A == 3); inds = find(v == 3, 5 , ‘first’);

16 גרפיקה ותצוגה figure, figure(k) open a new display window
plot(x,y) draws x Vs. y hold on keep current content when adding a plot. If not set, new plot will override the current content mesh – view 2D function as surface contour – view 2D function as topographic map subplot – plot several graphs in the same figure axis([xmin xmax ymin ymax]) set axis limits title(‘This is the title’) adds a title to current axes

17 עזרה במטלב כדי לקבל עזרה על פונקציה: help func_name
>> Help eig EIG Eigenvalues and eigenvectors. E = EIG(X) is a vector containing the eigenvalues of a square matrix X. [V,D] = EIG(X) produces a diagonal matrix D of eigenvalues and a full matrix V whose columns are the corresponding eigenvectors so that X*V = V*D. » lookfor differentiation NUDERST Selects the step size for numerical differentiation DIFF Alternative entry to the symbolic differentiation function. In unix: !ls or !mkdir כדי לקבל עזרה על פונקציה: help func_name כדי לחפש פונקציה ששמה לא ידוע lookfor keyword כדי לקבל כלי עזרה אינטראקטיבי helpwin/helpdesk איזה משתנים קיימים בשדה העבודה whos פקודות למ"ה : !command

18 עיבוד תמונות ואותות במחשב
Sinc דו-ממדי (דוגמה) a=-9:0.2:9; [x,y] = meshgrid(a); R = sqrt(x.^2+y.^2)+eps; Z = sin(R)./R; mesh(a,a,Z) או mesh(x,y,Z) title(‘Sinc(sqrt(x^2+y^2))’) עיבוד תמונות ואותות במחשב

19 איך (לא) מתכנתים בפועל? אפשר פשוט לכתוב פקודה אחרי פקודה בחלון הראשי
טוב לבדיקות קצרות, לבדוק אם משהו עובד, ... אפשר "להעלות באוב" בפקודות קודמות, לחיצה על מקש "למעלה" אם התחלנו לכתוב פקודה, ידפדף בפקודות קודמות בעלות אותה התחלה למה זה לא טוב? אי אפשר להריץ שוב בקלות הולך לאיבוד קשה לעשות debugging קשה להריץ שוב עם פרמטרים אחרים...

20 איך (כן) מתכנתים בפועל? לכתוב סקריפט קובץ (סיומת .m) שבו רצף פקודות
פועל בזכרון שבו מפעילים (עובד ומשתנה ערכים קימים) פונקציה קובץ (סיומת .m), עם קלט (אופציונאלי) ופלט (אופציונאלי) פועל בזכרון נפרד (לא משנה משתנים פרט לפלט) כותרת: [Out1, Out2] = Some_Cool_Function(In1 , In2 , In3) קיימת אפשרות לעבוד עם מספר "משתנה" של קלטים ופלטים: varargin, varargout

21 איך (כן) מתכנתים בפועל? - המשך
שונות כל טקסט אחרי % (אחוז) הן הערות בניגוד לC, כל שורה היא פקודה חדשה. אם רוצים "לחבר" (נוחות קריאה), יש לשים "..." בסוף השורה (טקסט אחרי זה באותה שורה – הערה) פקודת return מחזירה את השליטה למי שקרא לפונקציה כלי שימושי diary: מקליט את כל מה שקורה ב command window לקובץ. תיקיות: Matlab Path מטלב מחפש פונקציות שנקראות בתיקייה הנוכחית מעבר לכך, יש תיקיות עם פונקציות ספריה שמחפש בהן אוטומטית ניתן להוסיף תיקיות לחיפוש, ע"י פונקציות כמו addpath, או ידנית על ידי File -> Set Path.

22 קצת על Debugging כיוון שמטלב הוא אינטרפטר, אפשר לעצור אחרי כל פקודה, לבדוק את מצב המשתנים, לשנות את ערכם, לבדוק השפעה של שורות קוד ספציפיות, וכו' – מאד נוח. לשים breakpoint – לוחצים על ה "–" ליד מספר השורה מקשים שימושים: F5 – המשך לרוץ F10 – להריץ את הפקודה הבאה F11 – להריץ את הפקודה הבאה, ואם זאת פונקציה, להיכנס לתוכה F9 – להריץ את הקוד המסומן (כמו להעתיק לשורת הפקודה)

23 עוד קצת על Debugging כלי נוח: Cell Coding %%
כל הקוד בין %% ל%% הבא נחשב אזור אחד מאפשר להריץ בקלות אוסף פקודות מתוך סקריפט או ב debugging מומלץ לקרוא עוד ב HELP. לעיתים נרצה לשמור את הסביבה (כלומר המשתנים): save(‘filename.mat’); שומר את כל המשתנים לקובץ filename.mat load(‘filename.mat’); טוען את כל המשתנים מהקובץ (אם קיים כבר משתנה כזה, אז דורס אותו!) save(‘filename.mat’ , ‘a’ , ‘Mat’ , ‘Im’); שומר אך ורק את המשתנים a , Mat, Im לקובץ (לשים לב – מרכאות סביב שמות המשתנים). load(‘filename.mat’ , ‘Mat’ , ‘Im’); טוען אך ורק את המשתנים האלה (אם לא קיימים, מטלב נותן אזהרה)

24 עיבוד תמונות ואותות במחשב
בקרת הזרימה פקודת if: if (A > B), statement; elseif (A< B), elseif ~A, statement; else, end if i==1, statement; end if res(n,2) ~= 0, else, עיבוד תמונות ואותות במחשב

25 עיבוד תמונות ואותות במחשב
פקודת switch switch (rem(n,3) ==0) & (rem(n,2)==0) case 0 disp('n is not dividable by 6') case 1 disp('n is dividable by 6') otherwise error('This is impossible.') end אין גלישה כמו ב C עיבוד תמונות ואותות במחשב

26 עיבוד תמונות ואותות במחשב
פקודת for לולאה פשוטה: for n=1:1:4, subplot(2,2,n) plot(a(:,1),a(:,n+1)) title(num2str(n)) end עיבוד תמונות ואותות במחשב

27 עיבוד תמונות ואותות במחשב
פקודת while a = 4; fa = sin(a); b = 2; fb = sin(b); while a - b > 5 * eps, x = (a+b)/2; fx = sin(x); if sign(fx) == sign(fa), a = x; fa=fx; break; else b = x; fb = fx; end עיבוד תמונות ואותות במחשב

28 לולאות במטלב – בזבוז זמן
יש להימנע ככל האפשר משימוש בלולאות פעולות במטלב עדיף לעשות בצורה וקטורית/מטריצית (בבת אחת על כל הוקטור או מטריצה), ולא בלולאות דרושה מיומנות על מנת לעשות בצורה מיטבית... >> a = rand(3000); >> b = a; tic; for c1 = 1 : numel(a), b(c1) = a(c1).^2 + 3; end; toc; Elapsed time is seconds. >> tic; c = a.^2 + 3; toc Elapsed time is seconds. >>

29 תמונות במטלב בד"כ נייצג תמונות במטלב על ידי מטריצה דו-מימדית – העוצמה בכל פיקסל. תמונות צבע – מטריצה תלת מימדית (3 ערוצי צבע בכל פיקסל) אפשר לחתוך תמונה, לשנות ערכים...

30 קריאה / כתיבה של תמונות הפונקציה imread קוראת כמעט את כל הפורמטים
הפונקציה imwrite כותבת בפורמטים רבים, כדי לשמור TIF ללא כיווץ: imwrite(Im , ‘path\filename.tif' , 'tif' , 'compression' , 'none'); אפשר לשמור חלון (figure) על ידי: print –djpeg filename or print –dtiff filename הפונקציה imfinfo נותנת מידע על קובץ תמונה, בלי לקרוא אותו ממש (גודל, סוג וכו').

31 תצוגה של תמונות הפונקציה figure; פותחת חלון תצוגה חדש (אחרת נשתמש באותו חלון תצוגה). הפונקציה figure(k); עוברת לחלון מס' k אם קיים, או פותחת חדש אם לא. הפונקציה imshow(Im) מציגה את התמונה בחלון הנוכחי (כדאי לקרוא help על הפונקציה) הפונקציה surf מאפשרת תצוגה כמו מפת גבהים

32 תצוגה של תמונות - המשך הכלי הגרפי מאפשר לעשות Zoom, לבדוק ערך של פיקסל, ועוד. כלים שימושיים נוספים: impixelinfoval imcrop zoom on או zoom off Imresize מאפשר לשנות גודל של תמונה

33 סיכום מטלב הוא interpeter, מריץ שורה אחרי שורה
מומלץ לכתוב פונקציות וסקריפטים כרגיל – לתעד היטב, שמות משתנים ברורים קוד ברור הוא התיעוד הטוב ביותר... המון כלים מוכנים, פונקציות ספריה אפשר לעשות דברים "מורכבים" בקלות תכנותית היעילות סובלת...


Download ppt "עיבוד תמונות ואותות בעזרת מחשב תרגול מס' 1: Welcome to Matlab!"

Similar presentations


Ads by Google