עיבוד אותות ותמונות במחשב

31
ץץץץץץץ ץץץץץץץ ץץץץץץץ ץץץץץץץ יייי יייייייי יייי יייייייי: : [email protected] [email protected] ייייי ייייי346 346 , יי: , יי:4619 4619 י’ יייי יייי: י’ יייי יייי:18:30- 18:30- 19:30 19:30 ייייי ייייי ייייי ייייי ייייייי ייייי ייייייי ייייי

Upload: nirav

Post on 12-Jan-2016

58 views

Category:

Documents


0 download

DESCRIPTION

עיבוד אותות ותמונות במחשב. אלכסנדר ברנגולץ דואר אלקטרוני : [email protected] פישבך 346, טל: 4619 שעות קבלה: ב’ 18:30-19:30. היכן תעבדו ?. תואר ראשון : תחנות st194s5-st209s5 UltraSparc בחדר 402 תחנות st100hp-st150hp HP/712/100 בחדר 200 שרת HP/9000/879/K260 csst דרך telnet - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: עיבוד אותות ותמונות במחשב

אלכסנדר ברנגולץאלכסנדר ברנגולץ

[email protected]@cs.technion.ac.il: : דואר אלקטרונידואר אלקטרוני

46194619, טל: , טל: 346346פישבך פישבך

18:30-19:3018:30-19:30שעות קבלה: ב’ שעות קבלה: ב’

אלכסנדר ברנגולץאלכסנדר ברנגולץ

[email protected]@cs.technion.ac.il : :דואר אלקטרונידואר אלקטרוני

46194619, טל: , טל: 346346פישבך פישבך

18:30-19:3018:30-19:30שעות קבלה: ב’ שעות קבלה: ב’

עיבוד אותות ותמונות במחשבעיבוד אותות ותמונות במחשבעיבוד אותות ותמונות במחשבעיבוד אותות ותמונות במחשב

Page 2: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

היכן תעבדו?היכן תעבדו?

:תואר ראשון:תואר ראשון402402בחדר בחדר st194s5-st209s5 UltraSparcst194s5-st209s5 UltraSparcתחנות תחנות –200200בחדר בחדר st100hp-st150hp HP/712/100st100hp-st150hp HP/712/100תחנות תחנות –telnettelnetדרך דרך HP/9000/879/K260 csstHP/9000/879/K260 csstשרת שרת –

תואר שניתואר שני::telnettelnetדרך דרך Sparc Ultra-Enterprise csdSparc Ultra-Enterprise csdשרת שרת ––X-terminalsX-terminals בחדריםבחדרים

:שאלות על בעיות במערכתשאלות על בעיות במערכת [email protected]@cs.technion.ac.ilבדואר האלקטרוני ל- בדואר האלקטרוני ל-

Page 3: עיבוד אותות ותמונות במחשב

33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabהעבודה הבסיסית ב-העבודה הבסיסית ב-MatlabMatlabהעבודה הבסיסית ב-העבודה הבסיסית ב-

MatlabMatlab היא סביבה אינטראקטיבית לחישוב מדעי והנדסיהיא סביבה אינטראקטיבית לחישוב מדעי והנדסי ..ולויזואליזציה המבוססת על מטריצותולויזואליזציה המבוססת על מטריצות

.מידע בסיסי - הרצאה זו. מידע בסיסי - הרצאה זואיך למצוא מידע נוסףאיך למצוא מידע נוסף::

MatlabMatlabמתוך ה-מתוך ה- help, helpwin, helpdesk, demohelp, helpwin, helpdesk, demoפקודות פקודות –

באינטרנט:באינטרנט:–

http://www.cs.technion.ac.il/~aer/matlab-help/helpdeskhttp://www.cs.technion.ac.il/~aer/matlab-help/helpdesk..htmlhtml

–Matlab PrimerMatlab Primer:: http://www.technion.ac.il/~aer/Books/Matlab-Primer-4.1.ps.gzhttp://www.technion.ac.il/~aer/Books/Matlab-Primer-4.1.ps.gz

Page 4: עיבוד אותות ותמונות במחשב

44 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabמטריצות ב-מטריצות ב-MatlabMatlabמטריצות ב-מטריצות ב-

..MatlabMatlab מלבניות הן מבנה הנתונים העיקרי ב- מלבניות הן מבנה הנתונים העיקרי ב-מטריצותמטריצות

כדי להכניס מטריצה פשוט כותבים: כדי להכניס מטריצה פשוט כותבים:– [[l=[3 7 11 5l=[3 7 11 5 - - אברים אברים44וקטור-שורה בן וקטור-שורה בן – x=0:0.01:1x=0:0.01:1 - - 11וקטור וקטורx101x101 אבריםאברים– [[m=[2;66;11;9m=[2;66;11;9 - - וקטור-עמודהוקטור-עמודה– [ [A=[3 4 5; 4 7 9; 2 6 7A=[3 4 5; 4 7 9; 2 6 7 - - 33מטריצה מטריצהx3x3– [[B=[m m;m mB=[m m;m m - - הרכבת מטריצה מוקטוריםהרכבת מטריצה מוקטורים– ((A=B(3:5, 4:7A=B(3:5, 4:7 - - הוצאת תת-מטריצההוצאת תת-מטריצה– [([(A=B(:,[A=B(:,[1 3 2 41 3 2 4 - -החלפת מקום של שני עמודותהחלפת מקום של שני עמודות

Page 5: עיבוד אותות ותמונות במחשב

55 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

פעולות עם מטריצותפעולות עם מטריצותפעולות עם מטריצותפעולות עם מטריצות

:יצירת מטריצות ייחודיות: יצירת מטריצות ייחודיות((zeros(3,5(, ones(6,2zeros(3,5(, ones(6,2:פקודות על מטריצות, וקטורים ואברים בודדים:פקודות על מטריצות, וקטורים ואברים בודדים

^,\,/,*,-,+^,\,/,*,-,+

a^2a^2 אואו a+ba+b אואו A*x-yA*x-yפקודות על אברים מתאימים במטריצות )כמופקודות על אברים מתאימים במטריצות )כמו

מערכים(:מערכים(:בב

a./ba./b אואו a.^2a.^2 אואו a.*ba.*b :פונקציות: פונקציות((sqrt(x(, sin(y(, exp(a+ib(, besselj(k,zsqrt(x(, sin(y(, exp(a+ib(, besselj(k,z

Page 6: עיבוד אותות ותמונות במחשב

66 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

Visualization and GraphicsVisualization and GraphicsVisualization and GraphicsVisualization and Graphics

plot(x,y(, plot(x,sin(x((, plot(sin(2*x(,cos(3*x((, plot(x,y(, plot(x,sin(x((, plot(sin(2*x(,cos(3*x((, semilogy(x,exp(x(,x,gamma(x((semilogy(x,exp(x(,x,gamma(x((

figure figure and and figure(k(figure(k( hold on, hold off, holdhold on, hold off, hold mesh(x,y,z(, mesh(z(, meshc(z(mesh(x,y,z(, mesh(z(, meshc(z( contour(z(contour(z( subplot(3,1,2(subplot(3,1,2( axis([0 22 3 7[(,axis([0 22 3 7[(,

axis([min(x( max(x( -1 1[(axis([min(x( max(x( -1 1[(

Page 7: עיבוד אותות ותמונות במחשב

77 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

SincSinc )דו-ממדי )דוגמה(דו-ממדי )דוגמה SincSinc )דו-ממדי )דוגמה(דו-ממדי )דוגמה

a=-9:.2:9;a=-9:.2:9; [x y[ = meshgrid(a(;[x y[ = meshgrid(a(; R = sqrt(x.^2+y.^2(+eps;R = sqrt(x.^2+y.^2(+eps; Z = sin(R(./R;Z = sin(R(./R; mesh(a,a,Z( mesh(a,a,Z(

אואו

mesh(x,y,Z(mesh(x,y,Z( title)‘Sinc)x^2+y^2(’(title)‘Sinc)x^2+y^2(’(

Page 8: עיבוד אותות ותמונות במחשב

88 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

בקרת הזרימהבקרת הזרימהבקרת הזרימהבקרת הזרימה

פקודת פקודתifif:: if if (A > B((A > B(

‘‘greater’greater’

elseif elseif (A< B((A< B(

‘‘smaller’smaller’

elseif elseif (A == B((A == B( ‘equal’‘equal’

else else

‘‘Unexpected situation’Unexpected situation’

endend

ifif isunixisunix

‘‘unix’unix’

endend

ifif res(n,2( ~= 0res(n,2( ~= 0

‘‘odd’odd’

elseelse

‘‘even’even’

endend

Page 9: עיבוד אותות ותמונות במחשב

99 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב © א’ ברנגולץ© א’ ברנגולץ

switchswitch פקודתפקודת switchswitch פקודתפקודת

switchswitch (rem(n,4( ==0(+ (rem(n,2(==0((rem(n,4( ==0(+ (rem(n,2(==0(

case 0case 0‘‘odd’odd’

case 1case 1‘‘single even’single even’

case 2case 2‘‘double even’double even’

otherwiseotherwiseerror(‘This is impossible’(error(‘This is impossible’(

endendאחד מתבצע ! אחד מתבצע ! casecaseרק רק

Page 10: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב00

© א’ ברנגולץ© א’ ברנגולץ

forforפקודת פקודת forforפקודת פקודת

:לולאה פשוטה:לולאה פשוטה

forfor n=1:4n=1:4

subplot(2,2,n(subplot(2,2,n(

plot(a(:,1(,a(:,n+1((plot(a(:,1(,a(:,n+1((

title(sprintf(‘n=%d’,n+1(title(sprintf(‘n=%d’,n+1(

endend

Page 11: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב11

© א’ ברנגולץ© א’ ברנגולץ

forforפקודת פקודת forforפקודת פקודת

:לולאה מקוננת:לולאה מקוננת

forfor i=1:25i=1:25

forfor j=1:2:41j=1:2:41

M=sin(i^2+j^3(;M=sin(i^2+j^3(;

endend

endend

Page 12: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב22

© א’ ברנגולץ© א’ ברנגולץ

whilewhileפקודות פקודות whilewhileפקודות פקודות

a = 4; fa=sin(a(;a = 4; fa=sin(a(;b = 2; fb = sin(b(;b = 2; fb = sin(b(;whilewhile a - b > 5 * eps a - b > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;elseelse

b = x; fb = fx;b = x; fb = fx;endend

endend

Page 13: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב33

© א’ ברנגולץ© א’ ברנגולץ

breakbreak וו whilewhileפקודות פקודות breakbreak וו whilewhileפקודות פקודות

a = 4; fa=sin(a(;a = 4; fa=sin(a(;b = 2; fb = sin(b(;b = 2; fb = sin(b(;whilewhile a - b > 5 * eps a - b > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;if fx == 0if fx == 0

breakbreakelse else if if sign(fx( == sign(fa( sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;elseelse

b = x; fb = fx;b = x; fb = fx;endend

endend

Page 14: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב44

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabפונקציות ב-פונקציות ב-MatlabMatlabפונקציות ב-פונקציות ב-

functionfunction x=x= solvesolve(a,b((a,b(

fa=sin(a(; fb = sin(b(;fa=sin(a(; fb = sin(b(;

while abs(a - b( > 5 * eps while abs(a - b( > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;

if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;

elseelse

b = x; fb = fx;b = x; fb = fx;

endend

endend

המכיל:המכיל: solve.msolve.mנייצר קובץ נייצר קובץ

Page 15: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב55

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabפונקציות ב-פונקציות ב-MatlabMatlabפונקציות ב-פונקציות ב-

functionfunction xx== solvesolve(a,b((a,b(

fa=sin(a(; fb = sin(b(;fa=sin(a(; fb = sin(b(;

while abs(a - b( > 5 * eps while abs(a - b( > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;

if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;

elseelse

b = x; fb = fx;b = x; fb = fx;

endend

endend

המכיל:המכיל: solve.msolve.mנייצר קובץ נייצר קובץ

Page 16: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב66

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabפונקציות ב-פונקציות ב-MatlabMatlabפונקציות ב-פונקציות ב-

functionfunction [x,fx][x,fx]== solvesolve(a,b((a,b(

fa=sin(a(; fb = sin(b(;fa=sin(a(; fb = sin(b(;

while abs(a - b( > 5 * eps while abs(a - b( > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;

if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;

elseelse

b = x; fb = fx;b = x; fb = fx;

endend

endend

המכיל:המכיל: solve.msolve.mנייצר קובץ נייצר קובץ

Page 17: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב77

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabפונקציות ב-פונקציות ב-MatlabMatlabפונקציות ב-פונקציות ב-

functionfunction [x,fx]=[x,fx]= solvesolve(a,b)(a,b)

fa=sin(a(; fb = sin(b(;fa=sin(a(; fb = sin(b(;

while abs(a - b( > 5 * eps while abs(a - b( > 5 * eps

x = (a+b(/2; fx = sin(x(;x = (a+b(/2; fx = sin(x(;

if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;

elseelse

b = x; fb = fx;b = x; fb = fx;

endend

endend

המכיל:המכיל: solve.msolve.mנייצר קובץ נייצר קובץ

Page 18: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב88

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabפונקציות ב-פונקציות ב-MatlabMatlabפונקציות ב-פונקציות ב-

functionfunction [x,fx]=[x,fx]= solvesolve(a,b,(a,b,ff))

fa=fa=feval(f,a)feval(f,a);; fb = fb = feval(f,b)feval(f,b);;

while abs(a - b( > 5 * eps while abs(a - b( > 5 * eps

x = (a+b(/2; fx = x = (a+b(/2; fx = feval(f,x)feval(f,x);;

if if sign(fx( == sign(fa(sign(fx( == sign(fa(

a = x; fa=fx;a = x; fa=fx;

elseelse

b = x; fb = fx;b = x; fb = fx;

endend

endend

המכיל:המכיל: solve.msolve.mנייצר קובץ נייצר קובץ

Page 19: עיבוד אותות ותמונות במחשב

11 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב99

© א’ ברנגולץ© א’ ברנגולץ

M-filesM-filesM-filesM-files בד”כ לא נוח לעבוד בצורה אינטראקטיבית בלבד בד”כ לא נוח לעבוד בצורה אינטראקטיבית בלבד

sessionsessionל - ל - sessionsessionמאבדים את כל מה שנעשה בין מאבדים את כל מה שנעשה בין –המועדף המועדף ( ( editoreditorלא ניתן לעבוד בעורך )לא ניתן לעבוד בעורך )–

כדי להפעיל קובץ כדי להפעיל קובץmy_m_file.mmy_m_file.m -פשוט כותבים ב-פשוט כותבים בMatlabMatlab את השם את השםmy_m_filemy_m_file ...וזה עובד...וזה עובד

פקודות שימושיותפקודות שימושיות::– load Mydata.datload Mydata.dat - - טוענת את תוכן הקובץ טוענת את תוכן הקובץMydata.datMydata.dat למשתנה למשתנהMydataMydataMatlabMatlabב-ב-” ” CommandCommandמבצעת את ה-”מבצעת את ה-” - - eval(‘Commandeval(‘Command(י(י –– whatwhat - - מחזירה את השמות של מחזירה את השמות שלM-filesM-files בבcurrent directorycurrent directory – whowho and and whoswhos - - מחזירות את שמות המשתנים המוגדרים כעתמחזירות את שמות המשתנים המוגדרים כעת– ))s=sprintf(‘Mydata%d’,is=sprintf(‘Mydata%d’,i - - -זהה לאותה פקודה ב-זהה לאותה פקודה בCC

Page 20: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב00

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabייצוג תמונה ו-ייצוג תמונה ו-MatlabMatlabייצוג תמונה ו-ייצוג תמונה ו-

95 102 94 102 95 98 102 99 103 105 11095 102 94 102 95 98 102 99 103 105 110

94 99 94 101 100 98 100 101 101 107 10494 99 94 101 100 98 100 101 101 107 104

97 86 83 97 96 98 104 96 100 102 10297 86 83 97 96 98 104 96 100 102 102

105 91 85 93 89 98 92 95 98 100 102105 91 85 93 89 98 92 95 98 100 102

106 105 99 90 93 96 84 88 93 89 89106 105 99 90 93 96 84 88 93 89 89

98 94 102 99 81 87 86 84 90 91 8898 94 102 99 81 87 86 84 90 91 88

101 104 87 82 90 84 86 87 86 95 102101 104 87 82 90 84 86 87 86 95 102

99 102 90 74 92 101 87 74 77 83 10099 102 90 74 92 101 87 74 77 83 100

92 95 102 100 92 96 110 93 72 71 8392 95 102 100 92 96 110 93 72 71 83

101 87 103 101 105 88 76 94 93 71 69101 87 103 101 105 88 76 94 93 71 69

105 99 105 104 111 101 84 59 78 102 72105 99 105 104 111 101 84 59 78 102 72

Page 21: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב11

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-

כמו קודם נייצר כמו קודם נייצר((Z=sinc(RZ=sinc(R

Page 22: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב22

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-

-נתיחס ל-נתיחס לZZ בתור תמונה בתור תמונה((image(100*Zimage(100*Z

Page 23: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב33

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-

-נפעיל פקודה שכוללת את הנרמול ל-נפעיל פקודה שכוללת את הנרמול לZZ : : ((imagesc(Zimagesc(Z

Page 24: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב44

© א’ ברנגולץ© א’ ברנגולץ

MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-MatlabMatlabייצוג תמונה ב-ייצוג תמונה ב-

אפשר להגדיל גם את אפשר להגדיל גם אתZZ::

Page 25: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב55

© א’ ברנגולץ© א’ ברנגולץ

פקודות נוספותפקודות נוספותפקודות נוספותפקודות נוספות

>>print -depsc2 print -depsc2 <filename<filename - - הדפסת תמונה או הדפסת תמונה אואיוראיור

((im2double)img(im2double)img(, , im2uint8)imgim2uint8)img - -הופך תמונההופך תמונה‘(‘(X,map]=imread)‘fileX,map]=imread)‘file]] - - לקרוא תמונה מקובץלקרוא תמונה מקובץ((imwrite)X,imwrite)X,map,map,’file’,fmt’file’,fmt - - רשום תמונה לקובץרשום תמונה לקובץ((imshow)imgimshow)img,n,n - - להציג תמונה ב להציג תמונה בnn רמות אפוררמות אפור

Page 26: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב66

© א’ ברנגולץ© א’ ברנגולץ

CCחומר מתקדם - תכנות ב-חומר מתקדם - תכנות ב- MatlabMatlabל-ל-

CCחומר מתקדם - תכנות ב-חומר מתקדם - תכנות ב- MatlabMatlabל-ל- וכעת נרצה לבנות פונקציה וכעת נרצה לבנות פונקציהmyfuncmyfunc שנוכל לקרוא לה שנוכל לקרוא לה

::MatlabMatlabמתוך מתוך

[x, y]=myfunc(a,b,c)[x, y]=myfunc(a,b,c) לשם כך נרשום קובץ לשם כך נרשום קובץmyfunc.cmyfunc.c :ובו פונקציה:ובו פונקציה

נקמפל אותונקמפל אותו mex mex myfuncmyfunc.c.c ...ונפעיל...ונפעיל

##include <mex.h>include <mex.h>void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[]) {{ mexPrintf("Number of input arguments %d\n", nrhs);mexPrintf("Number of input arguments %d\n", nrhs); mexPrintf("Number of output arguments %d\n", nlhs); mexPrintf("Number of output arguments %d\n", nlhs); }}

##include <mex.h>include <mex.h>void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[]) {{ mexPrintf("Number of input arguments %d\n", nrhs);mexPrintf("Number of input arguments %d\n", nrhs); mexPrintf("Number of output arguments %d\n", nlhs); mexPrintf("Number of output arguments %d\n", nlhs); }}

Page 27: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב77

© א’ ברנגולץ© א’ ברנגולץ

קבלת מידע נוסף על הנתוניםקבלת מידע נוסף על הנתוניםקבלת מידע נוסף על הנתוניםקבלת מידע נוסף על הנתונים

](](mxGetNumberOfDimensions)phrs]imxGetNumberOfDimensions)phrs]i מספר ממדים במערך - מספר ממדים במערך -]]phrs]iphrs]i ](](mxGetDimensions)phrs]imxGetDimensions)phrs]i ממדים של מערך - ממדים של מערך -]]phrs]iphrs]i](](mxGetM)phrs]imxGetM)phrs]i ו ו](](mxGetN)phrs]imxGetN)phrs]i ממדים של מטריצה דו-ממדית- ממדים של מטריצה דו-ממדית -](](void *mxGetData)phrs]ivoid *mxGetData)phrs]i - - של( של מצביע להתחלה של נתונים במערך( מצביע להתחלה של נתונים במערךMatlabMatlab))](](mxIsInt8)...(mxIsInt8)...( , ,mxIsComplex)...(mxIsComplex)...( , ,mxIsDouble)phrs]imxIsDouble)phrs]i - - בדיקות בדיקות

שום בדיקה של נכונות הנתונים המועברים לתוכניות חיצוניות. שום בדיקה של נכונות הנתונים המועברים לתוכניות חיצוניות. MatlabMatlab ב- ב-איןאיןכל הבדיקות על האחראיות הבלעדית של מתכנת הפונקציה.כל הבדיקות על האחראיות הבלעדית של מתכנת הפונקציה.

##include <mex.h>include <mex.h>void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[]) { …}{ …}

##include <mex.h>include <mex.h>void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[]) { …}{ …}

חשוב מאודחשוב מאוד

Page 28: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב88

© א’ ברנגולץ© א’ ברנגולץ

נייצר משהו משלנו...נייצר משהו משלנו...נייצר משהו משלנו...נייצר משהו משלנו...

יצירת מטריצת יצירת מטריצתMatlabMatlab::

:יצירת מערך בממד כלשהו:יצירת מערך בממד כלשהו

-אפילו אם כמות משתני יציאה היא אפס, ניתן לכתוב ל- אפילו אם כמות משתני יציאה היא אפס, ניתן לכתוב ל]]phls]0phls]0,, בעת חזרה מפונקציהבעת חזרה מפונקציה ansansערכו יישמר במשתנה ערכו יישמר במשתנה

plhs]i] = mxCreateDoubleMatrix)rows, cols, mxCOMPLEX(;plhs]i] = mxCreateDoubleMatrix)rows, cols, mxCOMPLEX(;data_real = mxGetPr)plhs]i](; /* already )double *( */ data_real = mxGetPr)plhs]i](; /* already )double *( */ data_img = mxGetPi)plhs]i](;data_img = mxGetPi)plhs]i](;

plhs]i] = mxCreateDoubleMatrix)rows, cols, mxCOMPLEX(;plhs]i] = mxCreateDoubleMatrix)rows, cols, mxCOMPLEX(;data_real = mxGetPr)plhs]i](; /* already )double *( */ data_real = mxGetPr)plhs]i](; /* already )double *( */ data_img = mxGetPi)plhs]i](;data_img = mxGetPi)plhs]i](;

int dims]]={rows,cols,8,9,11}int dims]]={rows,cols,8,9,11}plhs]i] = mxCreateNumericArray)num_dims, dims, plhs]i] = mxCreateNumericArray)num_dims, dims,

mxINT16_CLASS, mxREAL(;mxINT16_CLASS, mxREAL(;data = )short *( mxGetPr)plhs]i](; /* was )double *( */ data = )short *( mxGetPr)plhs]i](; /* was )double *( */

int dims]]={rows,cols,8,9,11}int dims]]={rows,cols,8,9,11}plhs]i] = mxCreateNumericArray)num_dims, dims, plhs]i] = mxCreateNumericArray)num_dims, dims,

mxINT16_CLASS, mxREAL(;mxINT16_CLASS, mxREAL(;data = )short *( mxGetPr)plhs]i](; /* was )double *( */ data = )short *( mxGetPr)plhs]i](; /* was )double *( */

Page 29: עיבוד אותות ותמונות במחשב

22 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב99

© א’ ברנגולץ© א’ ברנגולץ

פונקציות אחרותפונקציות אחרותפונקציות אחרותפונקציות אחרות

)...()...(mxFree)...(mxFree)...( , ,mxRealloc)...(mxRealloc)...( , ,mxCalloc)...(mxCalloc)...( , ,mxMallocmxMalloc - - להבדיל להבדילהפונקציות האלו עובדות עם מנהל הפונקציות האלו עובדות עם מנהל CCבפונקציות סטנדרטיות של בפונקציות סטנדרטיות של משימושמשימוש

ולמשל, מפנות זיכרון בסיום של הרצת הפונקציה.ולמשל, מפנות זיכרון בסיום של הרצת הפונקציה., , MatlabMatlabזיכרון של זיכרון של )…()…(mxDestroyArraymxDestroyArray - -מפנה זיכרוןמפנה זיכרון)…()…(mxMakeArrayPersistentmxMakeArrayPersistent - -.אוסר פנוי המערך בסיום הפונקציה.אוסר פנוי המערך בסיום הפונקציה

)...()...(mxSetM)...(mxSetM)...( , ,mxSetDimensions)...(mxSetDimensions)...( , ,mxSetDatamxSetDataשינוי בנתונים-שינוי בנתונים-“(“(mxSetName)mxArray *,”namemxSetName)mxArray *,”name - - לתת\לשנות שם נרשם במערךלתת\לשנות שם נרשם במערך

“(“(mexPrintf)“msgmexPrintf)“msg במקום - במקום - “(“(printf)”msgprintf)”msg“(“(mexWarnMsgTxt)“msgmexWarnMsgTxt)“msg במקום - במקום - “(“(fprintf)stderr,”msgfprintf)stderr,”msg “(“(mexErrMsgTxt)“msgmexErrMsgTxt)“msg.גורם גם לסיום התוכנית. - גורם גם לסיום התוכנית -

Page 30: עיבוד אותות ותמונות במחשב

33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב00

© א’ ברנגולץ© א’ ברנגולץ

מתוכנית מתוכניתMatlabMatlabקריאה לפונקציות קריאה לפונקציות מתוכנית מתוכניתMatlabMatlabקריאה לפונקציות קריאה לפונקציות

נייצר פונקציה נייצר פונקציהmysinmysin זהה לפונקציה זהה לפונקציה sinsin הקיימת הקיימת::mysin.cmysin.cלשם כך נרשום בקובץ לשם כך נרשום בקובץ . . MatlabMatlabבב

##include <mex.h>include <mex.h>

void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[])

{{

mexCallMATLAB(nlhs,plhs,nrhs,prhs,”sin”); mexCallMATLAB(nlhs,plhs,nrhs,prhs,”sin”);

}}

##include <mex.h>include <mex.h>

void mexFunction(int nlhs,void mexFunction(int nlhs, mxArray *plhs[],mxArray *plhs[],

int nrhs, constint nrhs, const mxArray *prhs[]) mxArray *prhs[])

{{

mexCallMATLAB(nlhs,plhs,nrhs,prhs,”sin”); mexCallMATLAB(nlhs,plhs,nrhs,prhs,”sin”);

}}

Page 31: עיבוד אותות ותמונות במחשב

33 עיבוד תמונות ואותות במחשב עיבוד תמונות ואותות במחשב11

© א’ ברנגולץ© א’ ברנגולץ

טיפול בעצמים הקיימים מחוץ טיפול בעצמים הקיימים מחוץ לתוכניתלתוכנית

טיפול בעצמים הקיימים מחוץ טיפול בעצמים הקיימים מחוץ לתוכניתלתוכנית

“(“(mxArray *mexGetArray)“matrix_name”, “workspacemxArray *mexGetArray)“matrix_name”, “workspace-- להוציא להוציא((base, caller, globalbase, caller, global ) )מסביבת עבודהמסביבת עבודה” ” matrix_namematrix_name “ “בשםבשם מערךמערך

“(“(mexPutArray)mxArray *, “workspacemexPutArray)mxArray *, “workspace - -להעביר לסביבת עבודהלהעביר לסביבת עבודה

“(“(mexEvalString)“Command to executemexEvalString)“Command to execute - --לבצע פקודה ב-לבצע פקודה בMatlabMatlab

“(“(mxArray *mexGet)figure,”propertymxArray *mexGet)figure,”property- -

*( *(mexSet)figure,”property”, mxArraymexSet)figure,”property”, mxArray- - טיפול באיוריםטיפול באיורים