עבור לתוכן

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

Featured Replies

פורסם

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

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

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

1) קריאת DICOM

2) כפל ו "RESHAPE" למטריצות (באופן יעיל, אני יכול לכתוב אחד, בכמה שורות, אבל זה יהיה O(n^3) ולי יש מטריצות ענקיות.

3) imrotate של מטלב, מימוש בC זה חלק מה image processing toolbox.

4) פונקציות find של מטלב.

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

פורסם
  • מחבר

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

מצאתי ברשימה ספריה מסויימת, שאני צריך עוד לבדוק של Linear algebra. אבל גם אם זה מה שצריך, זה רק 1 מתוך 4.

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

אין איזה קובץ h וCPP פשוט שעושה רק קריאת DICOM, רק הכפלת מטריצות וכדומה, לעזאזל...

פורסם
  • מחבר

לא יודע, אני רק יודע שבמטלב יש dicomread שזאת פונקציה פשוטה שממירה את התמונה למערך uint16 ארבע מימדי, פשוט וקל.

(ופגשתי חלק מהאתרים שהבאת פה, תודה)

אנחנו מקבלים את המידע בDICOM, אני חושב שאם נמיר אותו לפורמט אחר, נאבד מידע ברב הקידודים.

פורסם

תעביר אותו ל bitmap לא דחוס, ואז תוכל לקרוא אותו גם..

פורסם
  • מחבר

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

פורסם

נו, כן... הבנתי את זה, תבדוק עם imagemagick, הוא בטח הופך את זה ל BMP בקלות..

פורסם

תראה, זה לא יבוא בקלות. כל הרעיון ב-matlab זה שעשו בשבילך הרבה מהעבודה כדי שתוכל להתרכז בעיבוד אות ובאלגוריתמיקה.

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

לגבי הכפלת מטריצות, תחפש ב-numerical recipes in C שאפשר גם למצוא אותו ברשת בחינם - www.nr.com. זה לא בהכרח הקוד הכי טוב בעולם, אבל כזכור לי יש שם קובץ פשוט להכפיל מטריצות. החסרון: הם מצפים למטריצות בפורמט שהם מבינים.

פורסם

ד"א אפשר גם לנסות לעבור ל matlab 64 bit וגם יש toolkit לעשות עיבוד מקבילי שאולי יכול לעזור מבחינת ביצועים.

פורסם

למטלב יש כלים שמאפשרים להפוך קוד Matlab וקוד Simulink לקוד C (ואפילו VHDL).

כמובן שהם עולים כסף.

פורסם

תגיד, ההמרה הזו הופכת את הקוד ל 100% PURE ANSI-C שאפשר להריץ אותו ללא תלות ב VM של matlab במחשבי linux/windows, או שעדיין זה בפועל צריך להסתמך על חלקים שרצים במנוע של matlab ?

פורסם
  • מחבר

למטלב יש כלים שמאפשרים להפוך קוד Matlab וקוד Simulink לקוד C (ואפילו VHDL).

כמובן שהם עולים כסף.

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

בכל מקרה, אין לי את הכלי הזה וזה לא רלוונטי כל כך.

פורסם

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

בכל מקרה, אין לי את הכלי הזה וזה לא רלוונטי כל כך.

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

אני לא יודע לגבי 100% ANSI-C. יתכן שזה 100% ANSI פלוס איזשהי ספריה של MATLAB.

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

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

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

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

פורסם
  • מחבר

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

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

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

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים