end

‫מבוא לעיבוד תמונה‬
‫תרגול מספר ‪1‬‬
‫מבוא לעיבוד תמונה‬
‫‪1‬‬
‫העבודה הבסיסית ב‪Matlab -‬‬
‫‪‬‬
‫‪‬‬
‫‪ Matlab‬היא סביבה אינטראקטיבית לחישוב מדעי‬
‫והנדסי‪ ,‬ויזואליזציה ותכנון אלגוריתמים‪.‬‬
‫איך למצוא מידע נוסף‪:‬‬
‫‪‬‬
‫‪‬‬
‫פקודות ‪ help, helpwin, helpdesk, demo‬מתוך‬
‫סביבת ה‪Matlab -‬‬
‫באינטרנט‪:‬‬
‫‪http://www.mathworks.com/support/‬‬
‫מבוא לעיבוד תמונה‬
‫‪2‬‬
‫מטריצות ב‪Matlab -‬‬
‫מטריצות מלבניות הן מבנה הנתונים העיקרי‪.‬‬
‫כדי לבנות מטריצה פשוט כותבים‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫]‪ - a=[0.2,7,11,5‬וקטור‪-‬שורה (אופרטור ‪ ,‬שרשור לאורך שורה)‬
‫ וקטור ]‪( x =[5,7,9,11‬אופרטור ‪)a:b:c‬‬‫‪x=5:2:11‬‬
‫]‪m=[2.1;66;11;9‬עמודה וקטור‬
‫‪A=[3 4 5; 4 7 9; 2 6 7] - 3X3‬מטריצה‬
‫הרכבת מטריצה מתת מטריצות ]‪B=[a b;c d‬‬
‫העתקת תת מטריצה )‪A=B(3:5, 4:7‬‬
‫הוצאת עמודות מסוימות מהמטריצה ‪A=B(:,[1 3 2 4]) B‬‬
‫)‪A=B’ - (transpose‬שחלוף מטריצה‬
‫מבוא לעיבוד תמונה‬
‫‪3‬‬
‫פעולות עם מטריצות‬
zeros(3,5), rand(5,1) ones(6,2),eye (6,2( :‫ יצירת מטריצות ייחודיות‬
^,)‫(חילוק מטריצי‬/,)‫*(כפל מטריצי‬,-,+ :‫פקודות על מטריצות‬
A*x-y , a+b , A^2 :‫דוגמאות‬
: element wise ‫פקודות על איברים מתאימים במטריצות‬
a.*b , a.^2 , a./b
sqrt(x), sin(y), exp(a+b), result=isempty(a (:‫הפעלת פונקציות‬
[v,d] = eig(x)




4



S=sum(A) %S is a row vector of the columns sums of A
S=sum(A,2) %S is a column vector of the rows sums of A
S=sum(sum(A)) %sum of matrix A
[NumRows , NumColumns]=size(M)
‫מבוא לעיבוד תמונה‬
Visualization and Graphics








5
plot(x,y), plot(x,sin(x)) %plot 1-D function
figure , figure(k)%open a new figure
hold on, hold off
mesh(x_ax,y_ax,z_mat)%view surface
contour(z_mat) %view z as top. map
subplot(3,1,2) %several plots in figure
axis([xmin xmax ymin ymax])
title(‘figure title’) %add title to figure
‫מבוא לעיבוד תמונה‬
)‫ממדי (דוגמה‬-‫ דו‬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)
‫או‬

6
mesh(x,y,Z)
title(‘Sinc(sqrt(x^2+y^2))’)
‫מבוא לעיבוד תמונה‬
‫‪M-files‬‬
‫‪‬‬
‫בד”כ לא נוח לעבוד בצורה אינטראקטיבית בלבד‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫מאבדים את כל מה שנעשה בין ‪ session‬ל‪.session -‬‬
‫ניתן לעבוד בעורך )‪ (editor‬המועדף או בעורך של ‪ Matlab‬ע”י ‪.edit‬‬
‫כדי להפעיל ‪ my_m_file.m script‬פשוט כותבים ב ‪ Matlab‬את‬
‫השם ‪ my_m_file‬וזה מריץ את הפקודות סדרתית בסביבה‬
‫הגלובלית‪.‬‬
‫הגדרה של פונקציות‪:‬‬
‫‪‬‬
‫‪‬‬
‫גלובליות ‪ -‬כל פונקציה בקובץ ניפרד בעל אותו שם‪.‬‬
‫לוקליות ‪ -‬לאחר הפונקציה הראשית מגדירים פנקציות נוספות בהן‬
‫משתמשים‪.‬‬
‫מבוא לעיבוד תמונה‬
‫‪7‬‬
Matlab -‫פונקציות ב‬
:‫ המכיל‬pyt.m ‫נייצר קובץ‬
function [c,d,e]= pyt(a,b)
% returns the hypotenuse in a right angle
% triangle according to Pythagoras theorem.
% c is the hypotenuse,
% d and e are the two sharp angles
c=sqrt(a.^2+b.^2);
d=atan(b/a);
e=pi/2-d;
8
‫מבוא לעיבוד תמונה‬
‫ספריות החיפוש של ‪Matlab‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫חיפוש הקבצים מבוצע בכל הספריות המופיעות ב‪CD -‬‬
‫וב‪.path -‬‬
‫ניתן לכתוב ‪ cd‬או ‪ path‬על‪-‬מנת לראות את תוכנם‪.‬‬
‫ניתן לכתוב‪ cd d:\mydir :‬על מנת לשנות את ספריית‬
‫העבודה הנוכחית‪.‬‬
‫ניתן לכתוב ‪ path(path,’d:\mydir’) :‬על‪-‬מנת להוסיף‬
‫את ‪ d:\mydir‬ל‪( path -‬לא נשמר ביציאה מ‪.)Matlab -‬‬
‫ניתן להשתמש גם ב‪.Path browser -‬‬
‫מבוא לעיבוד תמונה‬
‫‪9‬‬
‫שמירת ‪workspace‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הפקודה ‪ whos‬מציגה את המשתנים שבזיכרון‪.‬‬
‫הפקודה ‪ save file_name‬שומרת משתנים אלה בקובץ‬
‫‪ file_name.mat‬וניתן לשחזר משתנים אלה לתוך‬
‫הזיכרון ע"י ‪.load file_name‬‬
‫הפקודה ‪ clear a‬מוחקת את משתנה ‪ a‬מהזכרון‪.‬‬
‫הפקודה ‪ clear‬מוחקת את כל המשתנים שבזיכרון‪.‬‬
‫מבוא לעיבוד תמונה‬
‫‪10‬‬
‫בקרת הזרימה‬
if: ‫פקודת‬

if i==1,
statement;
end

if res(n,2) ~= 0,
statement;
else,
statement;
end
11


if (A > B),
statement;
elseif (A< B),
statement;
elseif ~A,
statement;
else,
statement;
end
‫מבוא לעיבוד תמונה‬
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 ‫אין גלישה כמו ב‬
12
‫מבוא לעיבוד תמונה‬
for ‫פקודת‬
:‫ לולאה פשוטה‬
for n=1:1:4,
subplot(2,2,n)
plot(a(:,1),a(:,n+1))
title(num2str(n))
end
13
‫מבוא לעיבוד תמונה‬
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
14
‫מבוא לעיבוד תמונה‬
‫פונקצית ‪ find‬ותנאים לוגיים‬
‫‪‬‬
‫‪‬‬
‫תנאים לוגיים~)‪== , < , > , (not equal)~= ,(not‬‬
‫)‪ find(a==3‬מחזירה אינדקסים ב ‪ a‬לאיברים שמקיימים את‬
‫התנאי הלוגי‪ .‬הפונקציה מחזירה אינדקס יחיד במטריצה (שרץ לאורך‬
‫העמודות) או זוג אינדקסים )‪( (y,x‬תלוי במספר פרמטרי החזרה)‬
‫]‪a=[1 2 3;4 5 6;7 8 9‬‬
‫=‪a‬‬
‫‪1 2 3‬‬
‫‪4 5 6‬‬
‫‪7 8 9‬‬
‫)‪» z=find(a>7‬‬
‫=‪z‬‬
‫‪6‬‬
‫‪9‬‬
‫)‪» [y,x]=find(a>7‬‬
‫=‪y‬‬
‫‪3‬‬
‫‪3‬‬
‫=‪x‬‬
‫‪2‬‬
‫‪3‬‬
‫מבוא לעיבוד תמונה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪15‬‬
‫ייצוג תמונה ב‪Matlab -‬‬
‫‪95 102 94 102 95 98 102 99 103 105 110‬‬
‫‪94 99 94 101 100 98 100 101 101 107 104‬‬
‫‪97 86 83 97 96 98 104 96 100 102 102‬‬
‫‪105 91 85 93 89 98 92 95 98 100 102‬‬
‫‪106 105 99 90 93 96 84 88 93 89 89‬‬
‫‪98 94 102 99 81 87 86 84 90 91 88‬‬
‫‪101 104 87 82 90 84 86 87 86 95 102‬‬
‫‪99 102 90 74 92 101 87 74 77 83 100‬‬
‫‪92 95 102 100 92 96 110 93 72 71 83‬‬
‫‪101 87 103 101 105 88 76 94 93 71 69‬‬
‫‪105 99 105 104 111 101 84 59 78 102 72‬‬
‫מבוא לעיבוד תמונה‬
‫‪16‬‬
‫ייצוג תמונה ב‪Matlab -‬‬
‫‪‬‬
‫כמו קודם נצייר את )‪ Z=sinc(R‬ע“י ‪.mesh‬‬
‫‪ Z‬היא מטריצה המוצגת כאן כמשטח‪.‬‬
‫מבוא לעיבוד תמונה‬
‫‪17‬‬
‫ייצוג תמונה ב‪Matlab -‬‬
‫‪‬‬
‫‪‬‬
‫נתייחס ל‪( Z -‬הגובה) בתור תמונה )][‪imshow(Z,‬‬
‫הבהירות של הפיקסל )‪ (x,y‬בתמונה מתאימה לגובה‬
‫)‪.Z(x,y‬‬
‫מבוא לעיבוד תמונה‬
‫‪18‬‬
‫ייצוג תמונה ב‪Matlab -‬‬
‫‪‬‬
‫‪‬‬
‫אפשר להגדיל גם את ‪ Z‬ע"י ‪ zoom on‬וסימון‬
‫ע"י עכבר‪.‬‬
‫אפשר גם בלחצן בחלון הגרפי‪.‬‬
‫מבוא לעיבוד תמונה‬
‫‪19‬‬
‫סוגי תמונות‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ – Indexed‬מטריצה של ערכים ]‪ [1-P‬שהם אינדקסים למפת‬
‫הצבעים )‪.(colormap‬‬
‫‪ – Intensity‬מטריצה של רמות אפור ]‪[0-255‬המייצגות את הטווח‬
‫הדינמי של הערכים‪.‬‬
‫‪ – Binary‬ערכים לוגים ממופים‪ – 0 :‬שחור‪ – 1 ,‬לבן‪.‬‬
‫‪ – RGB‬מטריצה תלת ממדי של ערכי צבע‪ .‬בכל רמה הטווח‬
‫הדינמי ממופה‪.‬‬
‫‪[X,map]=imread(‘file’); %Indexed‬‬
‫‪I=imread(‘pout.tif’); %intensity‬‬
‫;)’‪imwrite(I,‘file.fmt’, ‘fmt‬‬
‫המרה בין תמונות‪:‬‬
‫‪gray2ind,ind2gray, rgb2ind, ind2rgb, rgb2gray, im2bw‬‬
‫מבוא לעיבוד תמונה‬
‫‪20‬‬
‫פקודות נוספות‬
‫‪‬‬
‫‪ – print -djpeg filename‬הדפסת ‪ figure‬לקובץ ‪filename.jpg‬‬
‫‪‬‬
‫)‪ –im2double(img), im2uint8(img‬מעביר תמונה בין טיפוס ‪8( uint8‬‬
‫ביט) ו ‪ .double -‬אי אפשר לבצע את כל הפעולות אריתמטיות על ‪. uint8‬‬
‫‪‬‬
‫פעולות גאומטריות‪:‬‬
‫‪ - a=imcrop(img) ‬לחתוך תת תמונה ע“י סימון עם העכבר‪.‬‬
‫‪ imresize(img,[10 10],’method’) ‬לשנות גודל תמונה לגודל‬
‫‪.10X10‬‬
‫‪ Imrotate(img,angle,’method’) ‬סיבוב בזוית‪.‬‬
‫מבוא לעיבוד תמונה‬
‫‪21‬‬