66
דד"ד1 Particle Image Velocity סססס ססס200281905 סססס סססס302922919 31/2/2012

דוח PIV

  • Upload
    eitank9

  • View
    64

  • Download
    0

Embed Size (px)

Citation preview

Page 1: דוח PIV

בס"ד

1

200281905גלעד זיס 302922919איתן קרמר

31/2/2012

Page 2: דוח PIV

בס"ד

לקב"ה שסייענו להתמודד עם האתגר הגדול של הפרויקט.

לפרופ' אריק פרדג'שתמך בנו לאורך הפרויקט ותמיד עודד אותנו.

לד"ר אריה טייטלבאוםשהקשיב ועזר בעת הצורך.

לגב' חנה טויטושתמכה עד הסוף ובלי הגבלת זמן בכל תלונה ובקשה שלנו.

לנתנאל לויחבר, שעזר עם ההתמודדות עם תוכנת מטלב.

Eize J Stamhuis ו William Thielickeל שהתחילו בפיתוח הפרויקט ונתנו לנו את הבסיס להמשך.

2

תודות

Page 3: דוח PIV

בס"ד

תקציר עבודתנו עוסקת בעיבוד תמונה. אנחנו לוקחים תמונות של חלקיקים בחומר נע )כגון מים( ומשווים בין התמונות וכך משיגים ווקטורים שמהם ניתן להשיג מידע רב ולהציג אותו בדרכים שונות. אנו עובדים בשיטה

. בעזרת שיטה זו ניתן לחזות אתPIV – particle image velocityהנקראת .1הזרמים והמהירויות של החומר בכל נקודה על ידי חישובים

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

מטרתו.

designעשינו זאת באמצעות שימוש בשיטות שונות של דפוסי עיצוב )patterns)2( ומספר כללי תכנות design principles)3על ידי בחירה מושכלת .

עצמו לפרויקט אותם להתאים צריכים היינו )שכן ובכללים בדפוסים - מהרגיל השונה תהיהMatlabולשפה החדשה שהמערכת דאגנו )

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

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

עוד אפשריות בעתיד, בלי להרוס את מה שכבר קיים.

הפרויקט, במצבו הנוכחי אכן פשוט לקריאה כי כל הפעולות נמצאות בקבצים שהם אמורות להיות בהם ולפי שם הקובץ קל למצוא אותם

ובעזרת קריאת התיעוד קל להבין מה הם עושים.

שימוש בעזרת יותר קלה בצורה המערכת את להריץ ניתן כעת בחלונות שונים כך שניתן במקביל לבצע מספר פעולות שונות.

1. 6 רקע תיאורטי - עמוד

2 Content Group 11 - עמוד ,Chain Of Responsibility 12 עמוד.3 Open/Close 10 - עמוד ,Separation Of Concerns 11 עמוד.4 Reusable Code 8 – עמוד.

3

Page 4: דוח PIV

בס"ד

ובנוסף ניתן כעת להוסיף אפשרויות למערכת בלי להסתבך בערימת קוד לא מתועדת ולא מובנת ובלי ליצור המון בעיות נלוות, אלא פשוטבחלון הראשי לחצן ולהוסיף לקובץ הראשי קובץ שמותאם להוסיף

שיקרא לחלון הפעולות החדש.

, תיאור השיטות עימהן נבנתה המערכתPIVבמסמך זה יתואר הנושא .5והסבר על המערכת בפועל

תוכן עניינים

שער........................................................................

.................1

תודות.......................................................................

................2

תקציר

..............................................................................

.......3

תוכן

עניינים.....................................................................

.........4

1

מבוא.......................................................................

..............5

הבעיה הכוללת והבעיה1.1

5הספציפית ......................................

5.13 המערכת בפועל - עמוד

4

Page 5: דוח PIV

בס"ד

המטרה הספציפית של1.2

5הפרויקט..........................................

תרומת הפרויקט לפתרון הבעיה1.3

5הספציפית...........................

חווית1.4

6ההתמודדות.............................................................

רקע2

תיאורטי....................................................................

......7

המערכת3 תכנון

9הממוחשבת........................................................

המערכת הממוחשבת שנבנתה4

14בפועל...........................................

5

דיון.........................................................................

.............17

אפשרויות6

שיווק.....................................................................

18

7

סיכום.......................................................................

............19

8

ביבליוגרפיה...............................................................

............20

5

Page 6: דוח PIV

בס"ד

9

נספחים....................................................................

.............21

רשימת איורים*

.7קורלציה, עמוד .1.7נגזרת המהירות, עמוד .2.14עץ המערכת, עמוד .3

רשימת נספחים *1.Summary, page 21 21 – תקציר באנגלית, עמוד..23, עמוד מדריך למשתמש.2.24, עמוד הדמיה של ריצה מלאה של הפרוייקט.3.45, עמוד החלונות הקיימים.4

מבוא

הבעיה הכוללת והבעיה הספציפית 1.1

הבעיה העיקרית הייתה שיפוץ של תוכנה.

זאת אומרת, קיבלנו תוכנה מוכנה אשר לא ניתנת לשיפור עד כתיבתה

מחדש ולכן הבעיה העיקרית הייתה תוכנה שאינה ניתנת לשימור ושדרוג.

הבעיה הספציפית שלנו הייתה התמודדות עם קוד לא ברור בלי הערות

עיצוב תוכנה, על מנת ובלי שום סדר הגיוני או שימוש בתכונות של

שנוכל לעצב אותו מחדש בצורה ברורה.

המטרה הספציפית של הפרויקט 1.2

6

Page 7: דוח PIV

בס"ד

החשיבות הגדולה של הפרויקט שעשינו הוא בעצם באפשרות

הפיתוח העתידי שהדבר מאפשר.

נוחה ולא הייתה מאוד מסורבלת עכשיו עד קיימת התוכנה שהייתה

לעבודה, וכמעט בלתי אפשרית לפיתוח עתידי.

ולכן בעזרת הרבה עבודה דאגנו לשפר את התוכנה על מנת שתהיה

אפשרות להמשיך בפיתוח עתידי כגון מעבר לתלת מימד בתוכנה.

תרומת הפרויקט לפתרון הבעיה הספציפית 1.3

בפרויקט שלנו פתרנו את הבעיה והפכנו את המערכת לניתנת

לפיתוח, כלומר, עכשיו ניתן בקלות להוסיף פונקציות חדשות למערכת

בלי לשנות אותה.

המערכת בנויה על פי כללי עיצוב תוכנה ועם תיעוד כאשר לא מופיע

יותר מדי קוד באותו מקום ככה שהכול מאוד קריא ומובן.

חווית ההתמודדות 1.4

שני ומצד מאתגרת אחד מצד הייתה ההתמודדות של החוויה

מהנה.

בתור התחלה היה מאוד קשה להבין את הקוד שהיה מאוד לא ברור

בצורה רצינית במהירות גבוהה.Matlabולהיכנס אל תוך עמקי ה

אבל לאחר מכן, כשהתחלנו לראות תוצאות והתחלנו להיכנס אל תוך

ונותנתMatlabהחוויה של תכנות ב יותר מהנה העבודה הפכה להיות

הרגשת סיפוק גם מבחינת ההצלחה שלנו בעבודה וגם מבחינת התרומה

שתהיה לפרויקט בעתיד.

7

Page 8: דוח PIV

בס"ד

8

Page 9: דוח PIV

בס"ד

רקע תאורטי

Particle Image Velocimetry זוהי שיטה אחת מתוך מספר(1)מאמר שבה מגלים וקטורי תנועה ומהירות על ידי מעקב אחרי(2)מאמר שיטות קיימות

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

לפי הפרש הזמן שבין הצילומים.

המערכת מורכבת משני לייזרים רבי עוצמה,"בטכניון עושים זאת כך: מערכת הדמיה מהירה, ויכולת חישוב מרשימה. מערכת עדשות מיוחדת

ננו שניות -2-3מייצרת משטח אור הנוצר על ידי הבזקי אור קצרים מאוד )של שנייה( ... מערכת ההדמיה לוכדת זוגות תמונות של חלקיקים10-9

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

(1 )קישור שדה הכוחות, תכונות ההסעה ועוצמות הערבוב של שדה הזרימה."

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

תמונה מלאה של הוקטורים.

9

Page 10: דוח PIV

בס"ד

: קורלציה(1)איור

היעד מחלקים נגזרות המהירות וקטורי אזור החלקיקים של זרימת )של אור: פעימות שתי בין חלקיקים תנועת הזרועה( על ידי מדידת

: נגזרת המהירות(2)איור

הקלטת שתי PIV תמונות הזריעה. אחרי לעקוב ניתן פשוט חזותיים, הם כדי לעקוב אחר תנועות של חלקיקים נותן פעימות אור במסגרת אותה התמונה

הזרימה. מבנה ברורה של תחושה ויזואליתשמן טיפות כלל בדרך הם אוויר תנועות בניתוח המוזרעים החלקיקים

מיקרומטר. בשביל תנועות מים משתמשים בדרך5 מיקרומטר עד 1של  בטווח 100עד   מיקרומטר5בטווח של  חלולים כלל בקלקר פוליאמיד או בחלקי זכוכית

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

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

וניתוחים. התוכנה גם נותנת נוחות בניתוח כגון ניתוח אזורים מסוימים או אי ניתוח אזורים

מסוימים. במערכת שקיבלנו היה קושי בהבנת קוד המערכת, דבר שהקשה עד מאוד עלחוסר הייתה שקיבלנו במערכת העיקרית המגבלה אבל שלה. התחזוקה האפשרות שלה להתפתח ולכן תפקידנו העיקרי היה לתת למערכת חיים חדשים, כך שהיא תוכל להתפתח בעתיד וכן יהיה ניתן לתחזק אותה ביתר קלות. עוד על

כך בפרק הבא על תכנון המערכת הממוחשבת.

10

Page 11: דוח PIV

בס"ד

11

Page 12: דוח PIV

בס"ד

תכנון המערכת הממוחשבת

תיאור המערכת: את המערכת קיבלנו בצורה הראשונית שלה, כאשר היא נבנתה בצורה לא יעילה שאינה ניתנת לתחזוקה או פיתוח עתידי - תפקידנו בפרויקט היה לשכתב

( ידי שימוש במספר דפוסי עיצוב ( ומספרdesign patternsאת הקוד על ( על מנת להפוך את התוכנה לצורה שלdesign principlesכללי תכנות )

תוכנה הניתנת לתפעול ותחזוקה וגם לפיתוח עתידי. שאיתם נעבוד על מנת לשכתבdesign patternsלכן חשבנו על מספר

את התוכנה.שינינו במקצת לפי מחשבה על מנת להתאיםdesign patternsאת ה

.Matlabאותם אל הפרויקט הנוכחי ואל שפת

הדבר הראשון שהיה חשוב לנו בפרויקט זה להפוך אותו לקוד שניתן לשימושקוד של עבודה צורת הוא עבדנו פיו שעל הראשון הדבר ולכן ולתחזוקה,

reusable)(5 )מאמר )ניתן לשימוש חוזר.צורך בלי שוב בו להשתמש שאפשר קוד זהו חוזר לשימוש שניתן קוד

בשינויים בלי קשר לתוכנה שרוצה להשתמש בה.יומן שיכול לשמש להרבה דברים כגון יש הרבה דוגמאות לזה בחיים כמו בדיקת תאריכים, קביעת פגישות, וסימון ימי הולדת. כאשר אין צורך בשום שינוי

ביומן בשביל לעשות בו כמה שימושים.פונקציות ואפילו מתחיל אמור לדעת שיש הרבה גם, שכל מתכנת כמובן פונקציות הן גם פונקציות אלה אנו משתמשים, כל שפה שבהם קיימות של שניתנות לשימוש חוזר, כאשר כל אחד מחליט לאיזה צורך הוא רוצה להשתמש

בהן.ואין צורך לעשות שינוי בפונקציה עצמה כאשר רוצים לעשות בה שימוש.

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

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

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

של המתכנת.

12

Page 13: דוח PIV

בס"ד

הדברים הראשונים והבסיסיים ביותר הם לייצור משתנים בעלי שם משמעותי שיעזרו לקורא להבין ושימוש בהערות מפורטות שיעזרו לך ולאחרים להבין את

הקוד בצורה טובה. דבר נוסף הוא, בדיקה חוזרת של הקוד לאחר הכתיבה וחשיבה האם הוא קוד

שניתן לשימוש חוזר? האם הוא יוכל לשמש מספר פונקציות שונות?ערך שמקבלות בפונקציות שימוש הוא כזה דבר למימוש אפשרית צורה ומקבלים - לדוגמא פעולות חשבוניות שפשוט שולחים ערכים ומחזירות ערך חזרה את התשובה, דבר כזה יכול להיות משומש על ידי מספר אפליקציות שונות

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

שמשתמש בו. ( שמשתמשים בו עוזר לעשותdesign patternכמובן שכל צורת עיצוב )את הקוד ניתן לשימוש חוזר.

בפרויקט הנוכחי מטרתנו הייתה להפוך את הקוד בדיוק לכל מה שהזכרנולמעלה,

ולכן הדבר הראשון שהתבצע בפרויקט היה שיכתוב של הקוד מחדש בצורהוהוספת נמצא, הוא ומובן שמתאים להקשר שבו יעיל של משתנים עם שם

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

מחדש של כל הפרויקט. מפה נמשיך להסביר על השיטות שעימהן עבדנו בשביל לקדם את הפרויקטהקיימות במגבלות בהתחשב לשימוש ניתנת והכי ברורה הכי בצורה שתהיה

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

Matlab.שלא תמיד כל השיטות מתאימות לצורת התכנות שלה

13

Page 14: דוח PIV

בס"ד

+3 )קישור .Open/Close Principleהכלל הראשון שעל פיו עבדנו הוא ה (4מאמר

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

יגרום להרבה שינויים בתוכנה שכבר קיימת.שתי סיבות לדבר:

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

על כל דבר חדש שנוסיף. . ככל שהתוכנה תגדל ככה גם יגדלו השינויים שיצטרכו לעשות על כל דבר2

חדש שיתווסף..Open/Close Principleולכן הגיע העיקרון של

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

יהיה אפשר להרחיב את המוצרים הקיימים אבל לא לשנות זאת אומרת, אותם.

לדוגמא )דוגמא שלילית וחיובית(:צורה לא נכונה של בניית תוכנה:

יצירת מחלקה שמטרתה ציור של צורות, המחלקה מכירה מספר צורות שלכלאחת מהן היא כותבת פונקציה משלה לציור הצורה.

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

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

צורה נכונה לפי העיקרון:יורשות ממנה, לתת למחלקה הראשית להכיר מחלקה אחת שכל הצורות ולהצריך כל אחת מהיורשות לכתוב בעצמה את הפונקציה שמדפיסה את הצורה

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

שנצטרך לעשות זה את הצורה החדשה, ולא נגע במחלקה הראשית בכלל.

הצורה שבה כלל זה שימש אותנו בפרויקט היה הפונקציה הראשית שמציירתאת הגרף על המסך הראשי של התוכנה.

14

Page 15: דוח PIV

בס"ד

לקחנו את הפונקציה שמציירת את התמונה על המסך והוצאנו אותה מתוךהפרויקט הראשי.

בצורה הזו, כל פונקציה שרוצה לצייר על המסך הראשי צריכה רק לשנות אתאל קריאה ופשוט לשלוח על המסך לצייר רוצה היא פיהם המשתנים שעל

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

המציירת.

( עליו שדיברנו הראשון הכלל את מקיים גם כמובן זה reusableדבר code) קישור( ידי מספר(7 ניתנת לשימוש חוזר על - מכיוון שפונקצית הציור

וחלקם גרף מציירים חלק מהמסכים מציירים, לדבר שהם קשר בלי מסכים מציירים תמונה, וחלקם משלבים וקטורים על התמונה.

(6 )קישור .content groupהעיקרון הבא שעל פיו עבדנו הוא

כלל זה הוא אינו כלל תכנותי רגיל אלא כלל תכנותי של מסכים.כלל זה בא במטרה לשפר מספר דברים:

. במקרה וצריך להציג הרבה דברים במסך אחד.1 . במקרה ואפשר להפוך הרבה מידע לקבוצות של דברים הקשורים אחד2לשני.

להבין את לו ולעזור לנוחות של המשתמש לעזור מנת אומר שעל הכלל התוכנה שבה הוא רוצה להשתמש )במקרה הזה, התוכנה שלנו( נעשה כמיטב

יכולתנו לחלק את האובייקטים שלנו לקבוצת בעלות הקשר.לדוגמא: כל הכפתורים שעושים פעולות מתמטיות יהיו באותו איזור.

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

דבר זה החל עוד לפני הגעתנו לפרויקט.)אזורים( כאשר היה תפריטregionsהתוכנה הייתה מחולקת בצורה של

נושא ותמיד לפי ניווט למעלה שככל שהתוכנה התקדמה, התצוגה השתנתה, מסוים.

כל תפריט הייתה לו את המטרה שלו בשביל שלמשתמש תהיה עבודה נוחהולא סתם כאב ראש.

החלוקה הייתה יחסית טובה לפי אזורים ונושאים אבל עדיין הצריכה שינויים.

15

Page 16: דוח PIV

בס"ד

תפקידנו בנושא הזה היה בתור דבר ראשון לשלב מספר חלקים ביחד ולפרק חלקים אחרים לתת חלקים על מנת לשפר את איכות השימוש בתוכנה ועל מנת

לשפר את ההבנה של המשתמש את צורת העבודה הנכונה בתוכנה.דבר שני, ויותר חשוב, הפרדנו כל איזור למסך שונה בפני עצמו.

מאפשר שזה מכיוון בתוכנה, השימוש יכולת את מאוד שיפר זה דבר למשתמש לראות מספר חלונות בו זמנית ולהבין איך כל חלק עושה את תפקידו

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

אמור המשתמש לעבוד עם התוכנה.הוא לחלונות בחלוקה שהשתלב נוסף - Socעיקרון separation of

concerns. (3 + מאמר 4 )קישור

עיקרון זה הוא עוד עיקרון בתכנות שאומר שעל מנת לעשות את התוכנה ליותר יעילה, קריאה וניתנת לשימוש חוזר כדאי לפרק את התוכנה לכמה שיותר

חלקים קטנים כאשר לכל חלק יש את התפקיד שלו בתוכנית הגדולה. בצורה הזו משתדלים שכל חלק יחפוף כמה שפחות את החלקים האחרים

שבתוכנה.עיקרון זה גם נותן לנו את חופש הפעולה הנפרדת.

כל אחד יכול לעבוד החלק שלו בלי צורך לדעת מה האחרים עושים. דוגמא לזה היא מכונית: האדם שעובד על המנוע לא צריך לדעת מה האדם

שעובד על הגלגלים עושה. לכל אחד יש את התפקיד שלו, ויש מי שדואג שאחרי זה הכול יעבוד כמו

שצריך אחד עם השני. אם לא שמים לב לדברים האלה, כשרוצים לשנות משהו קטן זה יכול לגרום

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

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

לעבור שינויים בלי להשפיע על השני(.

בנוסף לשני אלה היה עוד עיקרון שעזר לנו בחלוקה לחלונות:(5 )קישור .Chain of Responsibilityהעיקרון נקרא

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

בנוסף על פי עיקרון זה צריך לבנות את הפרויקט בצורה של שרשרת.מה זאת אומרת?

16

Page 17: דוח PIV

בס"ד

מחלקים את הפרויקט למספר חלקים כאשר כל חלק אמור לבוא בתור ולקדםאת המטרה הראשית של הפרויקט.

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

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

את החלק עצמו בלי לגעת בשאר הפרויקט. לצורך העניין אם רוצים גלגלים אחרים למכונית פשוט נחליף בפס הייצור את

החלק של הגלגלים ולא צריך בכלל לגעת בשאר פס הייצור. ככה דאגנו גם בפרויקט שלנו לייצור את החלקים בצורת שרשרת שכל מסך מוביל אל המסך הבא אחריו בצורה כזו שביחד הם משלימים אחד את השני ובנוסף הם לא תלויים אחד בשני ואפשר להוסיף או לשנות חלקים מסוימים בתוך

הפרויקט בצורה הרבה יותר קלה.

המערכת הממוחשבת שנבנתה בפועל/פעולתהתוכנה

המערכת מחולקת למספר רב של מסכים אשר כל אחד מהם בעצם

מהווה מבנה נתונים בעצמו.

לכל חלון קיים משתנה גלובלי שמהווה את הבסיס של החלון, הוא

שומר את הנתונים של החלון ואת כל האיברים שלו כגון כפתורים מסכים

וכו'.

החלון שאיתו פותחים את הפרויקט הוא כמובן החלון הראשי שממנו

(1 )תמונה מגיעים אל שאר החלונות .

עץ, כאשר השורש הוא החלון בנויה בצורה של המערכת בעצם

הראשי.

17

Page 18: דוח PIV

בס"ד

: עץ המערכת(3)איור

מנווטים וממנו הראשי החלון עם לעבוד מתחילים והלאה מכאן

במהלך השימוש בתוכנה.

החלון מכיל את השמות של כל החלונות כאשר לכל חלון יש כפתור

משלו בפותח אותו לשימוש, ובנוסף החלון בעצך משמש בתור ספריה

לכל הפרויקט מכיוון שהוא מכיל משתנים גלובליים שמשמשים את כל

הפרויקט.

החלון הראשי מכיל גם את הגרף שעליו מציירים במהלך כל השימוש

בתוכנה ולכן בשביל לבצע הכול ביעילות המרבית ועל פי כללי התכנות

שהבאנו למעלה הוספנו פונקציה חיצונית שניתנת לשימוש על ידי כל

החלונות שמטרתה היא ציור על הגרף על פי הנתונים שמביאים לה.

נותן את הדבר הראשון שצריך לבצע הוא פתיחת קובץ – החלון

האפשרות לבחור שתי תמונות שעליהן בעצם נבצע את כל העבודה.(43)תמונה

מכאן והלאה הסדר יכול להשתנות, אך לצורך ההסבר נעבוד על פי

בסדר המקורי.

ניתוח לפני שבאות ההגדרות את שמכיל חלון – ההגדרות חלון

התמונות, חלון זה משנה חלק מההגדרות הגלובליות על מנת לבצע את

הניתוח של התמונות.

(44 )תמונה חלון זה אינו מכיל לוגיקה רצינית אלא רק שמירת נתונים.

18

Page 19: דוח PIV

בס"ד

– חלון זה גם הוא מגיע לפני הניתוח ומטרתו השפעהExclusionחלון

על אזורי הניתוח, כלומר, אפשרות לסמן איזה איזור רוצים לנתח או

(45 )תמונה איזה איזור לא רוצים לנתח.

חלון זה משפיע על ההגדרות הגלובליות ומוסיף אליהן את האזורים

המוזכרים.

על מנת לבצע דבר זה השתמשנו בקישור אל המשתנים הגלובליים

של החלון הראשי בשביל לגשת אל הגרף ולצייר בתוכו.

ובתוכו נמצאת זה בעצם מבצע את הניתוח – חלון חלון הניתוח

(46 )תמונה הלוגיקה הראשית של התוכנה.

את ומבצע הפרויקט כל של ההגדרות את לתוכו מקבל החלון

הניתוח על התמונות על פי כל הנתונים ולאחר מכן מציג את הנתונים

על המסך הראשי.

על מנת לייעל את צורת הניתוח ולתת לו אפשרות לשינויים בצורה

קלה, הניתוח נכתב בקובץ נפרד מהחלון.

חלון הכלים – מטרתו היא ניווט נוח בין התמונות המנותחות, הוא

בעצם מכיל את התמונות הנגישות לנו כרגע ונותן אפשרות לבחור איזה

(47 )תמונה תמונה מציגים על המסך הראשי.

Vectorחלון Validationמטרתו לבצע סינון נוסף על הווקטורים -

הווקטורים של מסוימים נתונים שם לשנות ניתן הגרף, על שצוירו

(48 )תמונה ולראות את השינוי מתבצע בגרף הראשי.

חלון זה גם מוכל מהגדרות אבל ניתן לבצע שם שמירת שמבצעת

שינוי אוטומטי על הגרף.

19

Page 20: דוח PIV

בס"ד

כיולCalibrationחלון שמבצע חשוב מאוד חלון הוא זה חלון –

(49 )תמונה לתמונות, בעצם עושה אותם יותר ברורות וממוקדות מטרה.

מוסיפים תמונה עם כיוון זרימה ברור שעל ידיה אפשר לשפר את

איכות ידנית קו שעוזר לשפר את או להוסיף איכות הניתוח שבוצע,

הניתוח.

מסך זה גם נותן אפשרות להוסיף את הזמן המקורי של ההפרשים

בין התמונות ואת המרחק האמיתי במ"מ גם בשביל לשפר את איכות

הניתוח.

גם מסך זה מקושר אל החלון הראשי על מנת לבצע את הניתוחים

על הגרף.

– מסך זה מוציא מסקנות מהניתוח על פיDerive Parametersמסך

להדגיש כדי מסוימים אזורים לצבוע כגון בוחר, שהמשתמש נתונים

(50 )תמונה אותם.

Modifyמסך Plot Appearanceהניתוח של ההגדרות את משנה –

(51 )תמונה בשביל תצוגה שונה, כגון שינוי גודל הווקטורים על המסך.

– מוציא נתונים מהמסך על פיExtract Parameters From Poly Lineמסך

ואפשרות הנתונים עם טבלה להציג אפשרות ונותן עיגול או שורה

(52 )תמונה לשמירתם.

Extractמסך Parameters From Areaאיזור על סימון של – מאפשר

(53 )תמונה המסך בשביל להוציא נתונים עליו.

20

Page 21: דוח PIV

בס"ד

– מאפשר לבדוק זוויות על ידי סימוןMeasure Distance And Angleמסך

הזווית ומראות את גבי הגרף על שיוצרות משולש נקודות על המסך

(54 )תמונה במיקום.

שלStatisticsמסך הניתוח על סטטיסטיקות להוציא מאפשר –

התמונות על פי איזורים, כגון התזוזה במקומות מסוימים לעומת אחרים.(55)תמונה

– מאפשריםSave As MATLAB File ו Export As Ascii Chatמסכים

(56-57 )תמונות שמירה של הנתונים ושל הניתוחים שמבצעים בתוכנה.

דיון

המערכת שנבנתה בנויה בצורה יעילה וניתנת לתחזוקה אז למרות

שאין בה שיפור ביצועים וניתוח לעומת תוכנות אחרות שקיימות כיום,

תוכנה זו ניתנת לשיפור והתקדמות.

אפשרות רצינית לקידום הפרויקט זה אפשרות לשדרג את הניתוח

לתלת מימד במקום הניתוח הקיים של דו מימד.

אף אחד עוד לא ביצע את הניתוח של תלת מימד אף על פי שקימות

תמונות אשר ניתן לנתח.

את התוכנה שלנו עשינו בצורה משופרת שנותנת אפשרות לשדרוג

לתלת מימד.

21

Page 22: דוח PIV

בס"ד

בשביל פיתוחPIVולכן למסקנה התוכנה עזרה לשיפור כללי בנושא

עתידי.

22

Page 23: דוח PIV

בס"ד

אפשרויות שיווק

המערכת הזאת נוצרה מתחילתה בתור מערכת קוד פתוח, ולכן ראוי

כן כקוד פתוח הנותן גם שהמערכת המשופרת שלנו תהיה משווקת

אותו לשפר או אותו לעדכן וגם שהוא כמו בו להשתמש לאחרים

בהתאם לצורכיהם.

הפרויקט נועד לשימוש של חוקרים שיכולים לקבל מהפרויקט מידע

על הזרימה בתמונות שהם צילמו. מידע זה כגון: ווקטורים, מהירות ועוד

ניתן להסקה מכל התמונה ככלל או מחלק מסוים ממנה אם על ידי

ולהצגה ידי אפשרויות שונות בחירת החלק הרצוי או הלא רצוי, על

באמצעות כמה דרכים כגון הצבעים על התמונה, טבלת היסטוגרמה,

טבלת פיזור ועוד.

על שונות למסקנות להגיע ניתן החומר, זרימת הבנת ידי על

התרחשות עכשווית ואף לחזות דברים עתידיים. לדוגמא, במטאורולוגיה,

כיוון את לחזות וגם העננים, מזרימת מידע המון להסיק ניתן

התקדמותם.

עוד לה להוסיף כדי הזו המערכת פיתוח את שימשיכו גם כדאי

אפשרויות ניתוח שלא קימות כרגע וגם לשכלל את המערכת למשהו

חדש ממש, כמו למשל, למערכת שיכולה לקבל תמונות תלת ממדיות

ולהסיק מהן מידע. דבר זה יתרום המון הן לחוקרים והן לטכנולוגית

המחשוב.

ניתן לראות בקלות את התרומה הרבה בדוגמא שציינתי קודם על

עולם המטאורולוגיה. יהיה ניתן להסיק האם יש סיכוי גדול לגשם גם

23

Page 24: דוח PIV

בס"ד

בזמן צילום התמונה, וגם לחזות את התקדמות העננים והתעבותם ועל

כן את הסיכוי לגשם.

24

Page 25: דוח PIV

בס"ד

סיכום

העבודה שלנו הייתה טובה, היא כללה למידת שפה חדשה, למידת

וכללים על מנת לבנות מחדש את קוד לא מתועד, שימוש בדפוסים

וניתן להוסיף לה חלקים המערכת בצורה שניתן להבין אותה בקלות

חדשים בלי לגעת בחלקים הישנים.

המערכת עובדת בצורה טובה והיא נראית טוב מבחינה ויזואלית וקל

יותר לנצל את השימושיות שבה.

לדעתנו, המערכת החדשה תחליף את הישנה וכולם ישמחו לשינוי

המרענן והנוח, וגם מאחר שהמערכת כעת ניתנת לשדרוג ביתר קלות,

תהיה עדיפות לשימוש בה, כי זה רק עניין של זמן עד השדרוג הבא, עד

התוספת הבאה...

25

Page 26: דוח PIV

בס"ד

ביבליוגרפיה

מאמרים:

1. Use of Particle Tracking Velocimetry for Measurements of Granular Flows:

Review and Application - by N. Jesuthasan, B. R. Baliga from Department

of Mechanical Engineering, McGill University. And S. B Savage fro, the

Department of Civil Engineering and Applied Mechanics, McGill

University.

2. Non Uniform Multi resolution Method for Optical Flow and Phase Portrait

Models: Environmental Application - by Isaac Cohen and Isabelle Herlin.

3. Separation of Concerns – by Walter L. Hursch, Cristina Videira Lopes.

4. The Open-Closed Principle – by Robert C. Martin.

5. Aspect in action: Particle aspect oriented programming – by Laddad

Ramnivas.

קישורים:

בטכניוןPIV. העבודה בנושא 1

http://cee.technion.ac.il/CivilEng/Templates/showpage.asp?DBID=1&LNGID=2&TMID=84&FID=578

. רקע תאורטי2

http://www.dantecdynamics.com/Default.aspx?ID=820

3 .Open close principlehttp://www.oodesign.com/open-close-principle.html

4 .Soc principlehttp://en.wikipedia.org/wiki/Separation_of_concerns

5 .Cor principlehttp://www.oodesign.com/chain-of-responsibility-pattern.html

6 .UI PATTERN content groupshttp://patternry.com/p=content-groups/

26

Page 27: דוח PIV

בס"ד

7 .Reusable codehttp://msdn.microsoft.com/en-us/library/aa140527)v=office.10(.aspx

נספחים

1. Summary:

Our work is about Image Processing. We are taking pictures of particles in a moving material )such as water( and compare between the pictures to get Vectors which can give us a lot of information about the direction and speed of the material6.

We are working in a method called PIV – Particle Image Velocity, with this Method it is possible to predict the flow direction and speed of the material on every point of the picture.

The target of the project was to take an existing project and to upgrade it so it could be maintained and upgraded more easily and the code will be more understandable.

We did it by using few aspects of design patterns7 and design principles8, by doing rational decisions in the patterns and principles and not just using them – coming from the reason we were working in the Matlab language.

We made sure that the new Program will be more readable and clear by dividing the code to many small parts that each had his own target and by adding much more documentation on the code itself.

The Method was implemented by creating many new GUI's who each had his own target in the full project.

6 Theoretical background – page 6.7 Content group – page 11, Chain of Responsibility – page 12.8 Open/Close principle – page 10, Separation of concerns – page 11.

27

Page 28: דוח PIV

בס"ד

In this way it is very simple to add more possibilities to the program and allowing it to be upgraded by just adding a new file to the full program9.

The project in its current state is very readable because each of the Methods is in the exact place they should be so it is very easy to find and understand them.

It is also possible to run few Windows at the same time now, because of the fact that each window stands by its own.The importance of this is that now, everyone can help develop this project because of its more understandable code.

In this document we will describe the PIV subject and the Patterns we work with to design the project along with the Actual system10.

9 Reusable code – page 8.10 The actual System – page 13.

28

Page 29: דוח PIV

בס"ד

:מדריך למשתמש.2

את להפעיל צריך התוכנה עם בעבודה להתחיל בשביל MainWindow.m.שהוא המסך הראשי של התוכנה ,

לאחר מכן, צריך לעבוד לפי הסדר עם הכפתורים אחרת ישנו סיכוישזה לא יעבוד )לא חייבים את כל הכפתורים אבל חשוב לפי הסדר(.

דבר ראשון צריך לבחור שתי תמונות שעליהן רוצים לעבוד )לבצע עליהן open file -> loadאת הניתוח של תנועת החלקיקים( - זה מבוצע בכפתור

images changeלאחר מכן אפשר לשנות את ההגדרות לפני הניתוח על ידי

setting.

אם רוצים להוסיף מסכה או רק לדגום חלק מסויים מהתמונה צריך(.analyze לפני הניתוח )exclusionsלהפעיל את כפתור ה

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

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

והוצאת מידע ממנו - ושמירת נתונים למחשב.

29

Page 30: דוח PIV

בס"ד

הדמיה של ריצה מלאה של הפרוייקט.3

עלייה ראשונית

(1 )תמונה

בחלון הראשיopen fileלחיצה על

(2)תמונה

30

Page 31: דוח PIV

בס"ד

Load imagesלחיצה על

(3)תמונה

Doneבחירת התמונות הרצויות ולחיצה על

(4)תמונה

בחלון הראשיchange settingsלחיצה על

31

Page 32: דוח PIV

בס"ד

(5)תמונה

שינויי הגדרות ושמירה

(6)תמונה

בחלון הראשיExclusionsלחיצה על

32

Page 33: דוח PIV

בס"ד

(7)תמונה

ובחירת האזור הרצוי לנו על התמונהselect ROIלחיצה על

(8)תמונה

וציור האזור המכוסהDraw mask)s( for current frameלחיצה על

33

Page 34: דוח PIV

בס"ד

(9)תמונה

בחלון הראשיanalyzeלחיצה על

(10)תמונה

Analyze current frameלחיצה על האחוזים מתמלאים ולבסוף מתקבלת התמונה הבאה

34

Page 35: דוח PIV

בס"ד

(11)תמונה

בחלון הראשיToolsלחיצה על

(12)תמונה

שמחליפה בין התמונות )אך מכיוון ששניהן כמעטToggle A/Bלחיצה על זהות, קשה לראות הבדל(

35

Page 36: דוח PIV

בס"ד

(13)תמונה

בחלון הראשיVector Validationלחיצה על

(14)תמונה

Select velocity limitsלחיצה על

36

Page 37: דוח PIV

בס"ד

(15)תמונה

ובחירה האזור הרצוי

(16)תמונה

ושחרור הלחיצה

37

Page 38: דוח PIV

בס"ד

(17)תמונה

Apply to current frameשינוי כמה מהאפשרויות ולחיצה על

(18)תמונה

)Undo all validations )all framesלחיצה על

38

Page 39: דוח PIV

בס"ד

(19)תמונה

בחלון הראשיCalibrationלחיצה על

(20)תמונה

וגם לחיצה על שני נקודות עלSelect reference distanceלחיצה על התמונה

39

Page 40: דוח PIV

בס"ד

(21)תמונה

Apply calibrationשינוי חלק מההגדרות ולחיצה על

(22)תמונה

בחלון הראשיDerive Parametersלחיצה על

40

Page 41: דוח PIV

בס"ד

(23)תמונה

Divergence לDisplay parameterשינוי ה

(24)תמונה

mean על ידי לחיצה על הכפתורים V ו-Uשינוי עוד כמה הגדרות וחישוב u-ו mean v

Apply to current frameולחיצה על

41

Page 42: דוח PIV

בס"ד

(25)תמונה

שצץ כי חלק מהשטח מוסתר במסכהOKועכשיו על

(26)תמונה

בחלון הראשיModify Plot Appearanceלחיצה על

42

Page 43: דוח PIV

בס"ד

(27)תמונה

Applyשינוי ההגדרות ולחיצה על

(28)תמונה

בחלון הראשיExtract Parameters From Poly Lineלחיצה על

43

Page 44: דוח PIV

בס"ד

(29)תמונה

! וגם לחיצות על התמונה כדיDraw ולחיצה על Type ו-Parameterבחירת לצייר את הקו או המעגל

(30)תמונה

Plot dataלחיצה על המקש הימיני בעכבר כדי לסיים לצייר ולחיצה על

44

Page 45: דוח PIV

בס"ד

(31)תמונה

בחלון הראשיExtract Parameters From Areaלחיצה על

(32)תמונה

ולחיצה על כפתור של סוג החישובParameter for integral/meanבחירת ( ואז ציירתי אזור על התמונהArea mean valueשיעשה )לחצתי פה על

45

Page 46: דוח PIV

בס"ד

(33)תמונה

בחלון הראשיMesaure Distance And Angleלחיצה על

(34)תמונה

ובחירת שני נקודות על התמונהSet pointsלחיצה על

46

Page 47: דוח PIV

בס"ד

(35)תמונה

בחלון הראשיStatisticsלחיצה על

(36)תמונה

Histogram ולחיצה על Histogram plotבחירת

47

Page 48: דוח PIV

בס"ד

(37)תמונה

Scatter plot u & vלחיצה על

(38)תמונה

בחלון הראשיExport As ASCII Chartלחיצה על

48

Page 49: דוח PIV

בס"ד

(39)תמונה

Export current frameשיוני האפשרויות ולחיצה על

(40)תמונה

Saveלחיצה על בחלון הראשיSave As MATLAB Fileלחיצה על

49

Page 50: דוח PIV

בס"ד

(41)תמונה

Save current frameשינוי ולחיצה על

(42)תמונה

50

Page 51: דוח PIV

בס"ד

:(1, מלבד החלון הראשי )שכבר מופיע בתמונה . החלונות הקיימים4

open file (43 )תמונה

change settings (44 )תמונה

51

Page 52: דוח PIV

בס"ד

Exclusions (45 )תמונה

analyze (46 )תמונה

Tools (47 )תמונה

52

Page 53: דוח PIV

בס"ד

Vector Validation (48 )תמונה

calibration (49 )תמונה

53

Page 54: דוח PIV

בס"ד

Derive Parameters (50 )תמונה

Modify Plot Appearance (51 )תמונה

54

Page 55: דוח PIV

בס"ד

Extract Parameters From Poly Line (52 )תמונה

Extract Parameters From Area (53 )תמונה

Mesaure Distance And Angle (54 )תמונה

55

Page 56: דוח PIV

בס"ד

Statistics (55 )תמונה

Export As ASCII Chart (56 )תמונה

Save As MATLAB File (57 )תמונה

56