View
263
Download
0
Embed Size (px)
Citation preview
1/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
עיבוד תמונות ואותות בעזרת מחשב
:1תרגול מס'
Welcome to Matlab!
2/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
קצת פרטים:
:אני
מתן פרוטר–
437בניין טאוב, חדר –
שעת קבלה:–
–matan.protter -at- gmail.com
לפנות: שאלות, בעיות, טענות, ...–
3/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
קורסים חופפים
)טורי פוריה )מתמטיקה
טורי פוריה, טרנספורם פוריה–
)אותות ומערכות )חשמל
אותות ומערכות בזמן בדיד ורציף–
הבדיד פוריה טרנספורם–
)עיבוד וניתוח תמונות )חשמל
ייצוגי תמונות –
אלגוריתמים לשיפור ולניתוח תמונות–
4/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
מה זה עיבוד תמונה?
Image Model
Computer
Graphics
Image
Processing
Computer
Vision
Comp.
Geometry
5/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
Matlab (1)מבוא ל
שפת סקריפטיםלא צריך לקמפל –אפשר להריץ שורה אחרי שורה–מאד נוח לדבג, פחות יעיל להרצות מסיביות–
המון כלים מוכנים מראשתמונות: קריאה, שמירה, תצוגה, הגדלה/הקטנה, עיבוד...–מתמטיקה: פתרון משוואות, אינטגרלים, מטריצות...–
:עזרה נוספת Matlabמתוך סביבת ה- help, helpwin, helpdesk, demoפקודות –באינטרנט:–
http://www.mathworks.com/support/http://webee.technion.ac.il/courses/matlab/Lectures/Introduction%20to%20Matlab%20color.pdf
:אזהרהMatlab is Case-Sensitive!
6/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
Matlab (2)מבוא ל
חלון פקודות
רשימת משתנים
היסטוריית פקודות
תיקיית עבודה
7/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
Matlab (3)מבוא ל
:איפה עובדים במטלב
תואר ראשון:–PCוות חב•
:תואר שני/שלישי–ב- cs-generalדרך •
\\cs-general-pdc\matlab\bin\win32\matlab.exe
terminalון ל בחmatlab לכתוב Unixב- •
8/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
>> a = 5; b = 3; c = a*b, d = a+b; e = a/bc = 15e = 1.66666666666667
>> log(a)ans = 1.6094379124341>> sqrt(a)ans = 2.23606797749979>> mod(a,b)ans = 2
פעולות חישוב בסיסיות
הגדרת משתנים
הפעלת פונקציות (קיימות)
נקודה-פסיק (;) בסוף הפקודה מונע את הדפסת התוצאה
>> a = 5;>> b = 3;>> a*bans = 15>> 5*3ans = 15>>a*3;>> a*3ans = 15>> a^bans = 125
כתיבת מספר פקודות באותה שורה
לא קריא, ולא
מומלץ!
12
3
9/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
מטריצה – יחידת הנתונים הבסיסית
.מטלב מתייחס לכל המשתנים בתור מטריצות
1x1סקלר הוא מטריצה –
,1וקטור הוא מטריצה ממימד –
וקטור עמודה•
וקטור שורה•
, ...(4 , 3יש גם מטריצות ממימדים גבוהים )–
–String כמו( ‘hello’אפשר להתייחס כוקטור של אותיות )
:יש גם משתנים מסוג מורכב יותרstruct, cell array
10/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
מטריצה – יחידת הנתונים הבסיסית - המשך
?איך מייצרים מטריצה
סקלר:–
וקטור שורה:–
וקטור עמודה:–
3x3:מטריצה –
העתקת תת מטריצות:–
העתקת עמודות מסוימות–
:transposeמטריצת שחלוף –
מחרוזת )גם מטריצה!(:–
a = 5;
a = [1 3 5 7 9];
a = [1 : 2 : 9];
a = [1 ; 3 ; 5 ; 7 ; 9];
A = [11 12 13 ; 21 22 23 ; 31 32 33];
B = A)2:3 , 2:3(;
B = A)2:end , 1:3(;
B = A): , [1 3](;
C = A’;
str = ‘This is a String!’;
11/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
מה עושים עם מטריצות?
:פעולות בסיסיות
מטריצות מיוחדות:–
חיבור מטריצות: אותו גודל–
או עם סקלר
כפל מטריצות–
פעולות איבר-איבר )להוסיף . לפני –האופרטור
להפעיל פונקציה על מטריצה–
להפוך מטריצה לוקטור עמודה–
סכום איברים לאורך עמודות/שורות–
סכום איברים של כל המטריצה–
בירור גודל של מטריצה–
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/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
עוד על מטריצות
האינדקס הראשון במטריצה הוא השורה, והשני – עמודה Y ושני Xעלול לבלבל, כי רגילים למימד ראשון –
r & c להשתמש באינקסים x & yמומלץ במקום אינדקסים –למניעת בלבול.
:הסדר של האיברים במטריצה ):(;v=Aלמשל, כשבונים וקטור ממטריצה על ידי –
קודם כל, ילקחו איברי העמודה הראשונה )מהשורה –הראשונה עד האחרונה(, אח"כ העמודה השניה, וכן הלאה.
):(;B=A’; v=Bאם רוצים לסדר לפי השורות, צריך לעשות –
13/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
סוגי משתנים
:סוגי משתנים בתים(4 או 8 )single או floating point: doubleמשתני –
,…uint8, int8, uint16, int16, uint32, int32שלמים: –•uבהתחלה מציין שללא סימן – מספרים חיוביים בלבד
המספר בסוף – מספר הבתים המוקצים•
.1(-16^)=2 ל 0 בין uint16, 127+ ל 128- בין int8למשל, •
(false או true ) 1 או 0לוגיים )בוליאניים(: –
מחרוזות–
אם לא מגדירים במפורש, מטלב בוחר בעצמו את סוג המשתנה!
14/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
סוגי משתנים
:אפשר להמיר באופן מפורש A = uint8)A(
אם מקצים, אפשר לקבוע A = zeros)[200 300] , ‘int16’(
לוודא שלא חורגים מהתחום של המשתנה
?איך יודעים מה סוגי המשתנים
whosהפקודה –
workspaceאפשר גם בחלון –
ברירת המחדל היאdouble אבל יש פונקציות שמחזירות סוגים ,אחרים...
לעיתים נבחר משתנים כמו uint8...כדי לחסוך בזיכרון
15/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
תנאים לוגיים וחיפושים
:אופרטורים לוגיים
–Not ,)~(
שוויון == , –
, ~=שונה מ –
> <גדול או קטן מ –
חיפוש איברים: הפונקציה find לוגיתמחפשת איברים במטריצה
–inds = find)A == 3(;
–]rs, cs = [find)A == 3(;
–inds = find)v == 3, 5 , ‘first’( ;
>> a = [1 2 3 ; 4 5 6 ; 7 8 9]a = 1 2 3 4 5 6 7 8 9>> inds = find(mod(a , 2) == 0)inds = 2 4 6 8>> [r,c] = find(mod(a , 2) == 0); [r c]ans = 2 1 1 2 3 2 2 3>> inds = find(mod(a,2) , 2 , 'first')inds = 1 3>>
16/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
גרפיקה ותצוגה
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/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
עזרה במטלב
:כדי לקבל עזרה על פונקציהhelp func_name
כדי לחפש פונקציה ששמהlookfor keywordלא ידוע
כדי לקבל כלי עזרהאינטראקטיבי
helpwin/helpdesk
איזה משתנים קיימים בשדה whosהעבודה
! : פקודות למ"הcommand
>> Help eigEIG 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 differentiationNUDERST Selects the step size for numerical differentiationDIFF Alternative entry to the symbolic differentiation function.
In unix: !ls or !mkdir
18/33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
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/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
איך (לא) מתכנתים בפועל?
אפשר פשוט לכתוב פקודה אחרי פקודה בחלון הראשי
טוב לבדיקות קצרות, לבדוק אם משהו עובד, ...–
אפשר "להעלות באוב" בפקודות קודמות, לחיצה על מקש "למעלה"–אם התחלנו לכתוב פקודה, ידפדף בפקודות קודמות בעלות אותה התחלה•
?למה זה לא טוב
אי אפשר להריץ שוב בקלות –
הולך לאיבוד–
debuggingקשה לעשות –
קשה להריץ שוב עם פרמטרים אחרים...–
20/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
איך (כן) מתכנתים בפועל?
לכתוב סקריפט
( שבו רצף פקודותm.קובץ )סיומת –
)עובד ומשתנה ערכים קימים(בזכרון שבו מפעיליםפועל –
פונקציה
(, עם קלט )אופציונאלי( ופלט )אופציונאלי(m.קובץ )סיומת –
)לא משנה משתנים פרט לפלט( בזכרון נפרדפועל –
)Out1, Out2 = [Some_Cool_Function)In1 , In2 , In3[כותרת: –
קיימת אפשרות לעבוד עם מספר "משתנה" של קלטים ופלטים: –varargin, varargout
21/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
איך (כן) מתכנתים בפועל? - המשך
שונות
כל טקסט אחרי % )אחוז( הן הערות–
, כל שורה היא פקודה חדשה. Cבניגוד ל–אם רוצים "לחבר" )נוחות קריאה(, יש לשים "..." בסוף השורה )טקסט אחרי •
זה באותה שורה – הערה(
מחזירה את השליטה למי שקרא לפונקציה returnפקודת –
לקובץ.command window: מקליט את כל מה שקורה ב diaryכלי שימושי –
:תיקיותMatlab Path
מטלב מחפש פונקציות שנקראות בתיקייה הנוכחית–
מעבר לכך, יש תיקיות עם פונקציות ספריה שמחפש בהן אוטומטית–
, או ידנית על addpathניתן להוסיף תיקיות לחיפוש, ע"י פונקציות כמו –.File -< Set Pathידי
22/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
Debuggingקצת על
,כיוון שמטלב הוא אינטרפטר, אפשר לעצור אחרי כל פקודהלבדוק את מצב המשתנים, לשנות את ערכם, לבדוק השפעה
של שורות קוד ספציפיות, וכו' – מאד נוח. לשיםbreakpointלוחצים על ה "–" ליד מספר השורה – :מקשים שימושים
–F5המשך לרוץ –
–F10להריץ את הפקודה הבאה –
–F11 להריץ את הפקודה הבאה, ואם זאת פונקציה, להיכנס – לתוכה
–F9)להריץ את הקוד המסומן )כמו להעתיק לשורת הפקודה –
23/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
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/33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
בקרת הזרימה
פקודתif: if (A > B),
statement;
elseif (A< B),
statement;
elseif ~A, statement;
else,
statement;
end
if i==1,
statement;
end
if res(n,2) ~= 0,
statement;
else,
statement;
end
25/33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
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/33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
forפקודת
:לולאה פשוטה
for n=1:1:4,
subplot(2,2,n)
plot(a(:,1),a(:,n+1))
title(num2str(n))
end
27/33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
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
end
28/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
לולאות במטלב – בזבוז זמן
יש להימנע ככל האפשר משימוש בלולאות
פעולות במטלב עדיף לעשות בצורה וקטורית/מטריצית )בבת אחת על כל הוקטור או מטריצה(, ולא בלולאות
...דרושה מיומנות על מנת לעשות בצורה מיטבית
>> a = rand(3000);>> b = a; tic; for c1 = 1 : numel(a), b(c1) = a(c1).^2 + 3; end; toc;Elapsed time is 18.259007 seconds.>> tic; c = a.^2 + 3; tocElapsed time is 0.175207 seconds.>>
29/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
תמונות במטלב
בד"כ נייצג תמונות במטלב על ידי מטריצה
דו-מימדית – העוצמה בכל פיקסל.
– תמונות צבע מטריצה תלת מימדית
ערוצי צבע בכל 3)פיקסל(
,אפשר לחתוך תמונה לשנות ערכים...
30/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
קריאה / כתיבה של תמונות
הפונקציה imreadקוראת כמעט את כל הפורמטים
הפונקציה imwrite כותבת בפורמטים רבים, כדי לשמור TIF:ללא כיווץ
imwrite)Im , ‘path\filename.tif' , 'tif' , 'compression' , 'none'(;
( אפשר לשמור חלון figure :על ידי )
print –djpeg filename or print –dtiff filename
הפונקציה imfinfo נותנת מידע על קובץ תמונה, בלי לקרוא אותו ממש )גודל, סוג וכו'(.
31/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
תצוגה של תמונות
הפונקציה figure; פותחת חלון תצוגה חדש )אחרת ;)figure)kנשתמש באותו חלון תצוגה(. הפונקציה
אם קיים, או פותחת חדש אם לא.kעוברת לחלון מס'
הפונקציה imshow)Im( מציגה את התמונה בחלון על הפונקציה(helpהנוכחי )כדאי לקרוא
הפונקציה surf מאפשרת תצוגה כמו מפת גבהים
32/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
תצוגה של תמונות - המשך
הכלי הגרפי מאפשר לעשות Zoom לבדוק ערך של ,פיקסל, ועוד.
:כלים שימושיים נוספים
– impixelinfoval
– imcrop
– zoom on או zoom off
–Imresizeמאפשר לשנות גודל של תמונה
33/33 עיבוד תמונות ואותות במחשבMatlab: 1תרגול מס'
סיכום
מטלב הוא interpeterמריץ שורה אחרי שורה ,
מומלץ לכתוב פונקציות וסקריפטים
כרגיל – לתעד היטב, שמות משתנים ברורים
קוד ברור הוא התיעוד הטוב ביותר...–
המון כלים מוכנים, פונקציות ספריה
אפשר לעשות דברים "מורכבים" בקלות תכנותית
היעילות סובלת...–