יום שישי, 4 באפריל 2014

מנהל מוצרי עיבוד התמונה והראיה הממוחשבת של חברת MathWorks ביקר בישראל

ברוס טננבאום, מנהל מוצרי עיבוד התמונה והראיה הממוחשבת של חברת MathWorks, ביקר בישראל בתחילת החודש לרגל כנס הראיה הממוחשבת הישראלי השנתי IMVC שמתקיים זו השנה החמישית ברציפות. במסגרת הכנס הרצה טננבאום בפני מאות מהנדסים וחוקרים על "המעבר ממחקר בתחומים עיבוד תמונה וראיה ממוחשבת, למימושים בעולם האמיתי".
טננבאום במהלך הרצאתו בכנס IMVC, לחצו להגדלה
פרט להרצאתו בכנס, קיים טננבאום 8 פגישות עם עשרות משתמשים שונים של כלי MathWorks בארץ, מחברות מובילות מהשוק הרפואי, הביטחוני והאלקטרוני. בפגישות הדגים האמריקאי את היכולות החדשות של כלי עיבוד התמונה והראיה הממוחשבת של חברת MathWorks, ושמע את הדרישות השונות של הלקוחות הישראלים ליכולות נוספות שהיו רוצים לראות בכלים.

בין הדוגמאות שהציג טננבאום במהלך ביקורו ניתן למנות דוגמה לזיהוי תווים (OCR), דוגמה לרגיסטרציה של תמונת IR עם תמונה הנרכשת ממצלמת אינטרנט פשוטה (Intensity-Based Registration), דוגמה לגילוי אוטומטי של פנים (אלגוריתם Viola-Jones) ועקיבה אחריהם (בשיטת (KLT, דוגמה ליכולת להאיץ אלגוריתמי עיבוד תמונה וראיה ממוחשבת באמצעות שימוש בכרטיס המסך (GPU) או באמצעות המרה אוטומטית שלהם לקוד C (בעזרת MATLAB Coder, יכולת אשר שופרה משמעותית בגרסת R2014a), דוגמה לשימוש בפיצ'רים לצורך מציאת אובייקט בתמונה, דוגמה לשערוך פרמטרים אינטרינזים ואקסטרינזים של מצלמה (Camera Calibration), דוגמה לביצוע סגמנטציה של תמונה תוך שימוש בשיטת Active Contours, ודוגמה לזיהוי מחוות.

בדוגמת זיהוי המחוות, יצר האמריקאי skeleton בסביבת MATLAB בזמן אמת, תוך שימוש במערכת חישת-התנועה Kinect (המבוססת על טכנולוגיה של חברת פריים-סנס הישראלית , שנרכשה לאחרונה על ידי חברת Apple). על סמך ה-skeleton מצא האלגוריתם את ידו של המצולם, ותוך שימוש בפעולות מורפולוגיות ו-Blob Analysis – הצליח לקבוע האם האדם מסמן בידו "אבן", "נייר" או "מספרים". בתמונה למטה ניתן לראות את טננבאום מדגים את האלגוריתם בזמן אמת – המצולם מסמן "מספרים", בחלון התצוגה השמאלי מסומן בירוק מרכז הכובד של היד ומסומנות באדום שתי האצבעות אשר זוהו, ובחלון התצוגה הימני מוצגת התמונה הנרכשת בזמן אמת, ועליה ה-skeleton (באדום), אזור היד (ריבוע צהוב), וחיווי המעיד על כך שהאלגוריתם גילה שהאדם בחר ב"מספרים" (scissors). 
טננבאום מדגים זיהוי מחוות, לחצו להגדלה
"זה היה הביקור הראשון שלי בישראל, והוא היה מוצלח במיוחד", סיכם ברוס טננבאום את השבוע העמוס שעבר, "אני בטוח שבמהלך השבוע הזה נחשפו עוד ועוד אנשים ליכולות המתקדמות של כלי MathWorks בתחומים רכישת תמונה (Image Acquisition), עיבוד תמונה (Image Processing), ראיה ממוחשבת (Computer Vision System Toolbox), המרה אוטומטית של קוד MATLAB לקוד C (MATLAB Coder), האצת ביצועי אלגוריתמים (Parallel Computing Toolbox), ניתוח והצגת מידע גיאוגרפי (Mapping Toolbox) וכו'. גם אני למדתי המון על צרכי השוק הישראלי, ואני מאמין שהדרישות השונות שהועלו יקבלו מענה בגרסאות הקרובות של כלי MathWorks. התרשמתי מאוד מהרמה המקצועית של האנשים עימם נפגשתי ומהדברים שאותם הם מפתחים, ואני כבר מצפה לביקור הבא שלי בישראל".
כל הדוגמאות בהן עשה טננבאום שימוש נמצאות ברשותי, במידה ותרצו לקבל אותן או שאגיע על מנת להציגן אצלכם, אנא כתבו לי ל-  royf@systematics.co.il

יום חמישי, 20 במרץ 2014

Rational Fitting


אני שמח לארח בבלוג כותב חדש, גיל הנדלסמן, מהנדס אפליקציה העובד יחד עמי בחברת סיסטמטיקס. גיל הוא מהנדס אלקטרוניקה עם למעלה מ-10 שנות ניסיון בתחום התקשורת והמוליכים למחצה, והוא מוביל בסיסטמטיקס את תחום התקשורת לסוגיה, ובפרט - RF.
יישומים רבים, ובמיוחד יישומי תקשורת,  נדרשים לעבד מידע בתחום הזמן (Time Domain) על סמך אופיו בתחום התדר (Frequency Domain). עד לא מזמן, פתרון נפוץ לכך היה שימוש במודלים של "טורי פורייה" או "התמרות פורייה" (פונקציתFFT , שפותחה בשנות השישים של המאה הקודמת, המתבססת על מודל Cooley–Tukey של התמרת פורייה בדידה, ודאי מוכרת לרוב קוראי הפוסט). הטענה בבסיסה של שיטה זו היא שתחת תנאים מסוימים ניתן להציג כל אות בעזרת סכום (טור) אינסופי של פונקציות הרמוניות. אך עם התקדמות הטכנולוגיה, המידע נעשה מהיר ומגוון יותר, והאתגרים בניתוחו (וכן בסימולציה שלו) נעשו קשים יותר, ובאופן טבעי - התעשייה החלה לחפש מודלים מהירים יותר ויעילים יותר.
בסוף המאה הקודמת, וליתר דיוק - ביולי 1999, פרסמו צמד חוקרים, ביורן גוסטבן ואדם סמליאן, שיטה חדשה במטרה לענות על הצורך לעיל, שזכתה לשם "התאמה וקטורית" (Vector Fitting), ואשר עם השנים הותאמה ליישומי תקשורת. העיקרון בבסיסה של שיטה זו הוא מציאת קטבים ו- residues שמתאימים ((fit בצורה מדויקת כרצוננו אל האות המקורי, כאשר ניתן בעזרת מספר רב יותר של קטבים וresidues- להשיג התאמה מדויקת יותר (מספר הקטבים וה-residues תמיד יהיה זהה). רבים מתבלבלים בין אפסים ל-residues, אז זה המקום להדגיש שבשיטה זו המונה הינו חלק מפתרון של בעיה קומפלקסית, ולכן ניקרא residues ולא אפסים (בשונה מפונקצית תמסורת). השיטה עובדת באופן איטרטיבי, כאשר נבחרים קטבים ראשונים ובעזרת ה-residues נמצא פתרון למערכת לינארית. בשיטה זו, המניפולציות מבוצעות לא על האות המקורי, אלא על תוצאותיה.
להלן נוסחה של Rational Fitting - פרמטרD  הינו רכיב סקאלרי והרכיבים  C ו-A   יכולים להיות (וברוב המקרים גם יהיו) וקטורים:


בשנים האחרונות שיטה זו תופסת תאוצה בקרב מפתחים וזאת כיוון שביישומים רבים שיטה זו עולה על קודמתה (
FFT) ומצליחה ליעל את תהליך עיבוד המידע – היא מאפשרת לקבל בזמן קצר יותר תוצאות באותה רמת הדיוק כמו קודמתה. בנוסף - היא מותאמת הרבה יותר לשיטות הנומריות עליהן המחשוב מתבסס.
מימוש של שיטה זו קיים בMATLAB- בכלי ה- RF Toolbox, בפונקציה הנקראת rationalfit (למטה מובאת השוואה בין הרצת IFFT והרצת Rational Fitting בסביבת MATLAB). בעזרת פונקציה אחת, מהירה ונוחה, ניתן להמיר את אות המידע (לדוגמא קובץ פרמטרי מערכת - S-parameters) לתוצאות אשר מוצגות במשטח העבודה כאובייקט בעל פרמטרים רלוונטיים. ובעזרת פונקציות נוספות - ניתן להציג את תגובת המדרגה של האות בציר הזמן לאחר הפעלת הפונקציה  rationalfit(פקודת stepresp), ולהשלים את פעולת הצגת האות בציר התדר (פקודת freqresp). המעוניינים יכולים להוריד ע"י לחיצה כאן שני קבצים שאחד מהם הינו קוד המדגים הלכה למעשה את השימוש בפונקציות לעיל - בדוגמה האינפורמציה בקובץ המידע S21 עוברת בפונקציה rationalfit ולאחר מכן מוצגת כתגובת מדרגה בציר הזמן.


לסיום, בעלי  רישיון
RF Toolbox  מגרסה R2013a ומעלה יכולים ליהנות מאפליקציה מעניינת שפותחה לאחרונה ע"י קולגה שלי ב-MathWorks, המאפשרת התאמה (fit) מהירה של S-parameters, הגדרת רמת הדיוק, ההשהיה, הגדרת קטבים משמעותיים וכן הצגת התוצאות במשטח העבודה (לחצו לקישור לאפליקציה).

יום חמישי, 27 בפברואר 2014

געגועים ללאס וגאס | סימולציה של מזרקות הבלאג'יו


אני שמח לארח בבלוג פעם נוספת את יגאל ירוסלבסקי, אשר כבר כתב פה בעבר (לחצו לקריאת הפוסט האחרון שלו).
בתחילת החודש חזרתי מנסיעת עבודה לארה"ב, במהלכה הייתי בעיקר בסן-דייגו, אך גם קצת בלאס וגאס.
לאס וגאס היא עיר מדהימה, עיר חטאים של ממש, וכמעט כל דבר בה מיועד אך ורק למען מטרה אחת – לגרום לכם להוציא עוד ועוד כסף. יש שם הכל מהכל - הצגות, מסעדות, מסיבות, שולחנות משחק, להקות שמנגנות מוזיקה חיה וכו'. אך הדבר שהרשים אותי יותר מכל דבר אחר, היה המזרקות של קזינו בלאג'יו. טוב, זה לא ממש מפתיע, הרי אני מהנדס, ומזרקות הבלאג'יו הן יצירת אומנות הנדסית (וגם הבלוג הזה אינו בלוג טיולים...)
מזרקות הבלאג'יו הרשימו אותי עד כדי כך, שהלכתי לראותן 5 פעמים, חיפשתי עליהן מידע שימושי באינטרנט, וכמובן שהתלהבתי כאשר רועי שלח אליי קישור לסימולציית Simulink של המזרקות הנפלאות האלה.
Simulink, למי שלא מכיר, היא סביבה מובילה לפיתוח וסימולציה של מערכות
רב-תחומיות (
Multidomain), וככזאת - הסביבה הינה מושלמת לסימולציה של מערכות המשלבות בקרה ספרתית, מכאניקה ואף זרימה. וזה אידיאלי עבור סימלוץ מזרקות הבלאג'יו, שכן כל אחד מיותר מ-100 סילוני המזרקות הוא מערכת אלקטרומכאנית הכוללת משאבת מים בלחץ גבוה, מנועי שליטה על כיוון הסילון ותאורה, והכל מבוקר על ידי תוכנת מחשב המסנכרנת את הסילונים עם המנגינה שמשתנה בכל רבע שעה. נשמע מסובך? מסתבר שלא, לפחות לא עם Simulink.

על מנת לקרוא על מודל מזרקות הבלאג'יו שפותח והועלה ל-File Exchange על ידי John Hedengren, לראות סרטון הדגמה של המודל בפעולה וכמובן להוריד את המודל - לחצו פה.

 

יום שלישי, 28 בינואר 2014

מציאת עיגולים בתמונה

רבים מכירים את התמרת Hough המשמשת לצורך מציאת קוים ישרים בתמונה, ואשר ממומשת ב-Image Processing Toolbox באמצעות הפקודה Hough.
כידוע, ההתמרה הזו הורחבה לפני עשרות שנים כך שתוכל לשמש לצורך מציאת צורות שרירותיות שונות, לאו דווקא קוים ישרים, אלא למשל עיגולים.
לפני כשנתיים, בגרסת R2012a, נוספו ל-Image Processing Toolbox שתי פקודות המשמשות למציאת עיגולים בתמונה (imfindcircles) ולציור העיגולים אשר נמצאו (viscircles).
ננסה למצוא את העיגולים בתמונה הבאה ולהציגם (ניתן ללחוץ עליה כדי להגדילה):


בתמונה יש עיגולים במימדים שונים, ועל מנת לקבל תחושה לגבי טווח הקטרים שלהם, ניתן להיעזר בפקודה imdistline:
הפקודה מביאה להופעת סרגל מדידה הניתן להזזה ומתיחה/כיווץ (ראו על המטבע של חצי השקל), ובעזרת הכלי ניתן להסיק כי קוטר העיגול הגדול ביותר בתמונה (מטבע של חצי שקל) הוא כ-410 פיקסלים, כלומר – רדיוס העיגול הגדול הגדול ביותר הוא כ-205 פיקסלים. באופן דומה, רדיוס העיגול הקטן ביותר (מטבע של שקל) הינו כ-130 פיקסלים.
למרבה הצער, הפעלת הפקודה imfindcircles על התמונה תוך שימוש בתחום רדיוסים זה  אינה מניבה רשימה של מרכזי עיגולים ורדיוסים שלהם:
שתי סיבות לתוצאה העגומה הנ"ל. האחת הינה שברירת המחדל של הפקודה היא לחפש עיגולים אשר בהירים יותר מהרקע, וזה לא המצב בתמונה הנ"ל, ועל כן יש לשנות פרמטר בשם ObjectPolarity. אולם, מבדיקה, גם שינוי פרמטר זה אינו מספיק, ויש לשלוט על פרמטר נוסף בשם Sensitivity, הקשור למידת ה"מתירנות" של גלאי העיגולים (עד כמה הוא מוכן "לעגל פינות" ולהכריז על אובייקט מסויים כעיגול). הפרמטר מקבל ערכים בין 0 ל-1, וברירת המחדל שלו היא 0.85, ועל כן נגדיל את הערך הזה.
ניתן לראות כי הפקודה החזירה ארבעה מרכזים של עיגולים, ורדיוסים תואמים. על מנת לוודא שאכן מדובר במטבעות אשר בתמונה, ניתן להשתמש בפקודה viscircles כדי לצייר עיגולים סביב אותם מרכזים, ברדיוסים המתאימים, והנה התוצאה:
לשתי הפקודות, imfindcircles ו-viscircles פרמטרים נוספים שכדאי להכיר, ועל כן מומלץ להיעזר בתיעוד שלהן. לחצו לתיעוד של  imfindcircles ולתיעוד של viscircles .

יום שלישי, 31 בדצמבר 2013

ניקיון בררני


קרה לכם פעם שרציתם למחוק משתנים רבים מה-workspace, אך לא את כל אלה
שבו ? למשל, נניח שב-
workspace שלנו יש משתנים ששמותיהם הינם שמות האותיות ב-ABC, ואנו מעוניינים לשמור רק את משתנה R.

אחת הדרכים לעשות זאת היא באמצעות פקודת clear, תוך ציון שמות כל המשתנים שאתם מעוניינים למחוק:  clear A B C D…Q S T…Z

דרך אחרת הינה לסמן את כל המשתנים המיותרים ב-workspace, ללחוץ על הלחצן הימני של העכבר, ולבחור ב-delete.

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

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

clearvars –except R

ואגב, אם ה-workspace שלכם נראה כמו זה:


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

clearvars -except A*

למידע נוסף על clearvars, כולל סינטקסים נוספים לשימוש בפונקציה – לחצו כאן.

 

יום רביעי, 27 בנובמבר 2013

נתח לוגי

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


-          שלום, אני יגאל, וגם אני הייתי סטודנט להנדסת חשמל
-          כולם ביחד: אנחנו אוהבים אותך יגאל
-          ובאותם הימים עבדתי במשרת סטודנט באחת מחברות ההזנק הישראליות שלימים נמכרה לחברת ענק בינלאומית
-          כולם ביחד: אנחנו גאים בך, יגאל
-          התפקיד שלי היה לבנות סביבת אימות לקוד לוגי שנכתב ע"י המפתחים, להריץ אותו ע"ג שרתי הסימולציה ולנתח את התוצאות שלו
-          כמה מהאנשים בקהל מהנהנים בראשם בהבנה
-          הו, כמה שעות נפלאות העברתי בניתוח צורות גלים (waveforms) וניסיונות להבין מדוע נכשלה הסימולציה
-          מהנדס בחולצת פסים בגוונים של כחול בשורה שלישית: תגיד להם איש, תגיד להם!
-          למעשה, גם היום קשה לדמיין דרך יותר נוחה לנתח התנהגות מערכות לוגיות ומכונות מצבים מאשר צורת גל לוגית או נתח לוגי (Logic Analyzer). אלא ששום דבר לא נמשך לנצח, וברגע שעברתי מתחום הפיתוח הלוגי לתחום האלגוריתמיקה והנדסת מערכת נשארתי ללא כלי waveform שכל כך אהבתי, שכן במשפחת MATLAB & Simulink לא היו את הכלים האלה...
-          מהנדסת בג'קט אפור, היושבת בשורה הראשונה, מזילה דמעה שקטה של הזדהות ומנגבת אותה בנייר טישו
-          וכך, למרות כל הקושי, נשארתי waveform clean במשך כמה שנים טובות
-          קול מאחת השורות האחוריות: תהיה חזק, אתה לא לבד במלחמה היום יומית הזאת!
-          אז ככה, יש לי משהו חשוב לספר לכם! לא רבים יודעים, אבל החל מגרסת R2013a של כלי MathWorks הצטרף ל DSP System Toolbox כלי חדש, ה Logic Analyzer!
-          מחיאות כפיים, שריקות של עידוד, קולות YEAH מוקלטים ברקע... FADE TO BLACK... כתוביות... מנגינה... 

כפי שהבנתם, נושא הפוסט הוא כלי מדידה יחסית חדש - ה dsp.LogicAnalyzer, שנכלל ב DSP System Toolbox. הכלי מאפשר לבצע ניתוח שינוי ערך האות (signal transition) בתחום הזמן כאשר מספר הערוצים לניתוח מוגבל רק ע"י יכולת המחשב שלכם. מתוקף היותו של Logic Analyzer ממומש כ System Object, יש לו הן את היכולת לנתח את כל האותות המוכנסים אליו כחתיכה (frame) אחת לכל ערוץ, והן את היכולת לתח את האותות בצורת דגימות זורמות (streaming signal processing). וכפי שהתרגלתם בעבודתכם בסביבת MATLAB, גם ה Logic Analyzer תומך במגוון שורשי יסוד (Radixes), פורמטים וצורות תצוגה. מגניב? בטח מגניב! אז בוא נראה דוגמא...
הנה תרשים בלוקים (הניתן להגדלה ע"י לחיצה) ובו Digital Up-Converter:

בקודMATLAB , התהליך נראה כך:


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


נקרא כעת לאובייקט ה
Logic Analyzer :

שימו לב לכך שהגדרות שמות הערוצים, ה
Radix לכל ערוץ, קצב הדגימה של התצוגה והמפריד (Divider) - הם רק חלק מהאפשרויות העומדות לרשות המשתמש באובייקט לטובת שיפור צורת התצוגה והפיכת לברורה יותר. תוצאת הפעלת האובייקט הזה היא:

מה שקבלנו כאן הוא למעשה "תחליף זמין" לכלי
Waveform Display הנכללים בדרך כלל בכלי סימולצית קוד חומרה כמו Mentor Graphics ModelSim ומתחריו. הכלי מאפשר לנו לנתח התנהגות דינמית של אותות המערכת ברמת מעבר בודד, מה שהופך את הכלי למושלם לעבודות דיבוג של בעיות בעלות אופי דינאמי. הכלי יקל עלינו לוודא שאותות
סימון (
Signaling) או בקרה (Control) מופעלים בתזמון נכון, ובעיות כמו אובדן חלק מהמידע כתוצאה מאותות בקרה שמופעלים בתזמון לא נכון - לא יתרחשו.
מפני שהכלי ממומש כ System Object, השימוש בו אפשרי לא רק בסביבת MATLAB אלא גם בסביבת Simulink, רק חשוב לציין ששימוש בסביבה האחרונה ידרוש מהמשתמש גם פעולה של  Logging לאותם אותות שהוא יהיה מעוניין לנתח.

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