תוכן עניינים:
- שלב 1: דרישות מוקדמות
- שלב 2: דרישות מוקדמות (לא)
- שלב 3: דרישות מוקדמות (לא)
- שלב 4: דרישות מוקדמות (לא)
- שלב 5: נקה את Matlab כדי להתכונן להפעלת קוד
- שלב 6: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית
- שלב 7: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)
- שלב 8: צור 2 משתנים (רגילים ומאובחנים) והגדר אותם כשווים ל- 0
- שלב 9: צור לולאה להעלאה אוטומטית של תמונות רגילות
- שלב 10: צור לולאה להעלאה אוטומטית של תמונות רגילות (לא)
- שלב 11: חתוך את גבולות התמונה
- שלב 12: צור תמונה בקנה מידה אפור
- שלב 13: צור תמונה מנוגדת
- שלב 14: שפר את תמונת הניגודיות
- שלב 15: צור מסנן ממוצע
- שלב 16: שלב את מסנן הממוצעים עם התמונה המנוגדת
- שלב 17: צור מסכה ממוצעת חדשה על ידי הפחתת פיקסלים
- שלב 18: צור תמונה מסוננת בינארית
- שלב 19: הסר כתמים קטנים יותר המצויים בתמונות המסוננות
- שלב 20: צור רכיב בניית דיסק
- שלב 21: בצע פעולות סגירה מורפולוגיות
- שלב 22: מצא את האובייקטים עם קישוריות של לפחות 8
- שלב 23: מצא את המספר המרבי של הפיקסלים המחוברים
- שלב 24: הגדר את ערכי הפיקסלים המקסימליים ל- 0 ומצא פיקסלים עם> = 26 קישוריות פיקסל
- שלב 25: הסר כלי דם בתמונה
- שלב 26: תצוגת איור
- שלב 27: הסר כלי וספור כתמי דם
- שלב 28: אבחן את התמונה ברשתית על סמך מספר קרישי הדם שזוהו
- שלב 29: אם יש יותר מ -5 כתמים …
- שלב 30: חזור על תהליך הסינון לתמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3
- שלב 31: חזור על כל התהליך עבור התמונות המאובחנות
- שלב 32: ניתוח סטטיסטי
- שלב 33: מציאת מרווח ביטחון
וִידֵאוֹ: אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB: 33 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:16
(עיין במתאר הקוד למעלה)
רטינופתיה סוכרתית היא מחלת עיניים הקשורה לסוכרת הנגרמת מרמות גבוהות של סוכר בדם. רמות הסוכר הגבוהות בדם גורמות להתנפחות כלי הדם ברשתית, מה שמוביל לכלי דם מוגדלים ואף לדליפות כלי דם, מה שמוביל לכתמים כהים בתמונות הרשתית. עם קוד זה, אנו שואפים להשתמש במראה של כתמי דליפה של כלי דם כאינדיקטור לרטינופתיה סוכרתית ברקע, אם כי יידרשו טכניקות אבחון נוספות בעולם האמיתי. מטרת קוד זה היא להפוך את עיבוד ואבחון התמונות של הרשתית לאוטומטיות כדי לזהות סימנים של רטינופתיה סוכרתית המוצגת באמצעות כתמים כהים בתמונות הרשתית.
10 תמונות רשתית רגילות ו- 10 תמונות רשתית מאובחנות עובדו באמצעות קוד שקודם קורא ומסנן את התמונות ולאחר מכן מכמת את הנקודות הכהות כדי לקבוע אם קיימים תסמינים של רטינופתיה סוכרתית, בהתבסס על סף נתון. התוצאות מודפסות לאחר מכן על חלון הפקודה לצורך פרשנות הצופה.
שלב 1: דרישות מוקדמות
1. ודא שהתוכנית MATLAB הורדה למחשב שלך.
2. הורד את קובץ ה- txt שנמצא בקישור. (לחץ על 'ctrl+s' כדי לשמור באותה ספריה שבה קוד MATLAB)
שלב 2: דרישות מוקדמות (לא)
4. פתח את MATLAB והקלד 'uiimport' בחלון הפקודה.
5. בחר את הקובץ הרשמיdiagnoses.txt וייבא אותו ל- MATLAB כמטריצת תאים.
6. ודא שאתה רואה 'אבחנות רשמיות' כמשתנה בסביבת העבודה.
שלב 3: דרישות מוקדמות (לא)
7. הורד את הפונקציה ModWald.m, שניתן להשיג מהקוד מעל או להוריד אותו מ- Canvas.
(קוד נמסר על ידי פרופסור קינג ופרופסור צ'וי)
שלב 4: דרישות מוקדמות (לא)
8. הורד את 400 התמונות הגולמיות ממקטע הנתונים של פרויקט STARE.
שלב 5: נקה את Matlab כדי להתכונן להפעלת קוד
הוסף לקוד:
1. סגור הכל (סוגר את כל התמונות שנפתחו בעבר)
2. clearvars - למעט אבחנות רשמיות (מנקה את כל המשתנים למעט קובץ ה- txt הרשמי שאובחן בעבר)
3. cclc (מנקה חלון הפקודה)
שלב 6: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית
1. קח את קובץ הטקסט לאבחון וחלץ את שמות התמונות. שמות אלה נמצאים בעמודה הראשונה של קובץ הטקסט, כך שחילוץ אותם הקלד 'רשמי אבחון (:, 1)'. מטריצת שמות התמונות הוקצתה למשתנה, "מספר_כל_דמות_דמות"
2. המר את המשתנה all_image_numbers ממערך תאים למערך מטריצות באמצעות הפונקציה cell2mat
שלב 7: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)
3. בחר 10 תמונות עיניים רגילות להפעלת הקוד. התמונות שנבחרו במקרה זה היו 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
מקם מספרים אלה במטריצה והקצה אותם למשתנה שייקרא בעת טעינת התמונות.
4. חזור על שלב 3 עבור תמונות ברשתית שאובחנו כסובלות מרטינופתיה סוכרתית. התמונות שנבחרו במקרה זה היו 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
שלב 8: צור 2 משתנים (רגילים ומאובחנים) והגדר אותם כשווים ל- 0
צור את המשתנים האלה לפני לולאת ה- for לאתחל את מספרי הלולאה.
שלב 9: צור לולאה להעלאה אוטומטית של תמונות רגילות
1. צור לולאה עבור
2. הגדר משתנה ספירה (i, במקרה זה) למטריצה של ערכים 1-10. משתנה ספירה זה ישמש לכינוי כל תמונה בנפרד
3. קח את רכיב i במטריצת התמונות כדי לחלץ ולהמיר את שם התמונה ממחרוזת למספר באמצעות הפונקציה num2str.
מצא את מספר הספרות הקיימות בשם התמונה באמצעות הפונקציה numel. הקצה ערך זה למשתנה, ספרות_נורמלי. מספר זה צריך להיות 1 למספרים חד ספרתיים, 2 למספרים דו ספרתיים ו -3 למספרים משולשים. מידע זה ישמש להתקשרות אוטומטית לתמונות.
שלב 10: צור לולאה להעלאה אוטומטית של תמונות רגילות (לא)
3. צור הצהרת if המכילה את כל שלוש האפשרויות מהשלבים הקודמים. אם לשם התמונה יש ספרה אחת, התמונה תיקרא בשם "im000", אם יש לה 2 ספרות, התמונה תיקרא "im00", ואם יש לה 3 התמונה תקרא "im0".
4. תחת כל הצהרת if, הקצה משתנה לקריאת "im" מתחת למשפט המתאים אם אם עם מספר האפסים המתאים (כמתואר לעיל), ואחריו ה- i.
שלב 11: חתוך את גבולות התמונה
קח את התמונה המקורית והחל מסנן imcrop לחיסול גבולות שחורים והקצה למשתנה I_crop. מלבן החיתוך מצוין באמצעות מטריצה [95, 95, 500, 410].
שלב 12: צור תמונה בקנה מידה אפור
קח את התמונה החתוכה והחל את מסנן rbg2gray כדי לשנות את התמונה לגווני אפור. הקצה תמונה זו למשתנה I2.
שלב 13: צור תמונה מנוגדת
קח את התמונה I2 והשתמש ב- imadjust כדי לשנות את ערכי העוצמה מחדש.
קח ערכים הנמצאים בטווח [0.2, 0.7] וסדר אותם מחדש ל- [0, 1]. הגאמה מוגדרת ל -0.8 כדי להפוך את התמונה לבהירה יותר. הקצה את התמונה החדשה ל- I_adjusted.
שלב 14: שפר את תמונת הניגודיות
צלם את התמונה I_adjusted והשתמש בפונקציה adapthisteq כדי לשפר את הניגודיות.
תחביר Adapthisteq דורש את שם התמונה, I_adjusted, 'numTiles', גודל numTiles, 'nBins' ומספר הפחים. גודל numTiles מוגדר ל- [8 8], מחלק את התמונה לאריחים 8x8 ומספר הפחים מוגדר ל- 28. הקצה את התמונה ל- I_constrast.
שלב 15: צור מסנן ממוצע
צור משתנה בשם 'meanfilt' באמצעות הפונקציה fspecial. הזן 'פונקציה ממוצעת' ליצירת מסנן הממוצע והכנס [90 90] לגודל החלון הזזה.
שלב 16: שלב את מסנן הממוצעים עם התמונה המנוגדת
צור משתנה חדש בשם mask_mean והשתמש בפונקציית imfilter כדי לצלם את התמונה I_contrast ולהחיל את המסנן הממוצע שנוצר בעבר.
שלב 17: צור מסכה ממוצעת חדשה על ידי הפחתת פיקסלים
צור משתנה בשם mask_mean2 והשתמש בפונקציה imsubtract כדי להפחית את הערך של כל פיקסל ב- I_contrast מהפיקסל המקביל ב- mask_mean.
שלב 18: צור תמונה מסוננת בינארית
הפוך תמונות בגווני אפור לשחור ולבן באמצעות imbinarize. קלט mask_mean2, 'הסתגלות', 'קדמיות קדמיות', 'כהה', 'רגישות', 0.6. הקצה תמונה חדשה זו ל- mask_binarize.
שלב 19: הסר כתמים קטנים יותר המצויים בתמונות המסוננות
הסר אובייקטים עם קישוריות פחות מ -100 פיקסלים באמצעות הפונקציה bwareaopen ב- mask_binarize והגדר את ערך הסף ל- 100. הקצה את המשתנה כ- bw.
שלב 20: צור רכיב בניית דיסק
צור רכיב בניית דיסק (ברדיוס 2) באמצעות הפונקציה strel. הקצה אותו ל se.
שלב 21: בצע פעולות סגירה מורפולוגיות
קח את bw והחל את הפונקציה הקרובה על האלמנט המבני כדי לבצע פעולת סגירה מורפולוגית על האובייקט.
שלב 22: מצא את האובייקטים עם קישוריות של לפחות 8
קח את bw והשתמש ב- bwconncomp כדי למצוא את האובייקטים עם קישוריות של לפחות 8 בתמונה. הקצה את פלט המספר ל- cc_1.
שלב 23: מצא את המספר המרבי של הפיקסלים המחוברים
השתמש בפונקציית cellfun כדי לבצע את הפונקציה "numel" על כל תא ב- CC. זה מוצא את מספר האלמנטים בתא PixelIdxList. הקצה ערך ל- "numPixels".
מצא את הערכים המרביים ב- numPIxels. הקצה את המקסימום הגדול ביותר ל"גדול ביותר "ואת אינדקס הערך המרבי ל-" idx ".
שלב 24: הגדר את ערכי הפיקסלים המקסימליים ל- 0 ומצא פיקסלים עם> = 26 קישוריות פיקסל
= 26 קישוריות פיקסל "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 קישוריות פיקסל "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 קישוריות פיקסל "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 קישוריות פיקסל "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
הגדר את הפיקסלים עם הערכים הגדולים ביותר בתמונה "bw" ל- 0, והפוך את הפיקסלים לשחורים.
מצא את האובייקטים עם קישוריות של לפחות 26 פיקסלים בתמונה באמצעות bwconncomp. הקצה למשתנה cc_1.
שלב 25: הסר כלי דם בתמונה
הסר את כלי הדם שעדיין קיימים בתמונה באמצעות הפונקציה bwpropfilt עם טווח של [0, 0.9].
[0.9, 1] אינו נכלל מכיוון שערכים הקרובים ל -1 מציינים קו. הקצה ל- "RemoveVessels".
שלב 26: תצוגת איור
הצג כל תמונה מסוננת בעלילת משנה. Imshow. עם כניסות 'גבול' ו'הדוקות ', מציג כל תמונה במבנה חלקת משנה. הוסף כותרת לכל תמונה כדי להבחין באיזה מסנן נעשה שימוש.
שלב 27: הסר כלי וספור כתמי דם
1. קח את "RemoveVessels" והחל את תכונת 'Centroid' ב- regionprops כדי לזהות את הצנטרואידים של האובייקטים בתמונה. אובייקטים אלה צריכים להתאים לקרישי דם הקיימים בתמונה.
2. ספרו את מספר קרישי הדם שזוהו על ידי לקיחת אורך מטריצת הצנטרואיד.
שלב 28: אבחן את התמונה ברשתית על סמך מספר קרישי הדם שזוהו
השתמש באמירות if לאבחון תמונה על סמך מספר קרישי הדם שזוהו.
אם מספר הצנטרואידים שזוהו היה קטן או שווה ל -5, התמונה זוהתה כנורמלית.
אם מספר הצנטרואידים היה גדול מ -5, התמונה אובחנה כסובלת מרטינופתיה סוכרתית.
התוצאה מודפסת על חלון הפקודה באמצעות fprintf.
שלב 29: אם יש יותר מ -5 כתמים …
חזור על ההוראות לעיל עבור תמונות מאובחנות כהצהרה אחרת. חלק זה יפעל אם מספר הכתמים גדול מ -5.
סיים את הצהרת ה- if.
שלב 30: חזור על תהליך הסינון לתמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3
חזור על התהליך עבור שאר המקור אם הצהרות כאשר מספרים (מספר הספרות במספר התמונה) שוות ל -2 ו 3. פעולה זו משלימה את לולאת ה- for לתמונות הרגילות.
סיים את לולאת ה- for.
שלב 31: חזור על כל התהליך עבור התמונות המאובחנות
חזור על כל התהליך באמצעות התמונות המאובחנות המופיעות על ידי המטריצה "מספרים_לא_חלץ_מאובחנים".
הקפד לעבור על כל נתון (i) ולשנות אותו למספר (i+10) כך שהנתונים המאובחנים יופיעו כתמונות 11 עד 20.
שלב 32: ניתוח סטטיסטי
1. 'Actual_Diagnosis_Matrix' משמש להשוואת התוצאות לאבחון הרשמי המצוי בקובץ txt. 10 האפסים הראשונים מצביעים על כך ש -10 התמונות הראשונות צריכות להיות תקינות. 10 התמונות האחרונות מצביעות על כך שיש לסווג את 10 התמונות האחרונות כרטינופתיה סוכרתית.
2. סימן השוויון הכפול המשמש ליצירת 'מספר_נכון' יוצר מערך לוגי על ידי השוואת הערך של האלמנטים המתאימים של 'Actual_Diagnosis_Matrix' ל- 'Diagnosis_Matrix' שנוצר מלולאת ה- for.
על כל אלמנט התואם את האבחנה יתווסף 1, כלומר הקוד אבחן את התמונה בצורה נכונה. אם הוא לא נכון הוא יוסיף 0 למטריצה.
לאחר מכן, לקיחת סכום זה מצטברת לכל אלה. במילים אחרות, הוא מוצא את סכום התמונות המאובחנות כראוי.
3. 'Final_percentage_correct' הוא האחוז המחושב של מידת הדיוק של הקוד שאובחן ברטינופתיה סוכרתית. מספר התמונות המאובחנות נכון נחלק ב 20 (המספר הכולל של התמונות) ומוכפל ב -100 כדי למצוא את אחוז האבחנות המוצלחות.
שלב 33: מציאת מרווח ביטחון
1. ודא שהורדת את ModWald.m כדי לקרוא לזה כפונקציה. ללא הפונקציה, יהיה עליך לחשב את מרווח הביטחון בשיטת וולד ששונתה בעצמך.
2. לפונקציה ModWald יש 2 כניסות כאשר הראשונה היא מספר התמונות שזוהו כראוי, והשנייה היא כמות התמונות הכוללת.
3. הפונקציה ModWald תפיק את הגבול התחתון והעליון של מרווח הביטחון של הפרופורציות לדיוק הנתונים שנדגמו. במילים אחרות, זה ייתן מרווח של אחוזים שבו האחוז האמיתי של דיוק הקוד יהיה מונח.
4. השתמש ב- fprintf להלן כדי להפיק את הנתונים הסטטיסטיים ומרווח האמון לחלון הפקודה.
> fprintf ('%. 0f אחוזים מתמונות הרשתית אובחנו כהלכה על פי האבחנה הרשמית. / n / n', Final_percentage_correct)
> fprintf ('האחוז האמיתי שבו הקוד שלנו יאבחן נכון את הרטינופתיה הסוכרתית / n ייכנס לטווח של [%.3f, %.3f], בהתבסס על 20 תמונות שנדגמו / n', תחת_גבול, עליון_גבול)
מוּמלָץ:
סיוע חניה תיקון / אבחון קל: 4 שלבים
סיוע חניה תיקון / אבחון קל: אוקיי אפשר להתחיל, יש לי שברולט מפולת לשנת 2010 ויש לו 4 חיישני עזר לחניה בפגוש האחורי. ניתן להשתמש במכשיר הבלתי ניתן לביצוע הזה ולרכב למיטב ידיעתי, מזג האוויר שיש לך בחזית או Rea או שניהם. אז הלכתי לאהוב שלי
כוננים קשיחים: אבחון, פתרון בעיות ותחזוקה: 3 שלבים
כוננים קשיחים: אבחון, פתרון בעיות ותחזוקה: מהו כונן קשיח?- במילים פשוטות, הכונן הקשיח הוא מה ששומר את כל הנתונים שלך. הוא מכיל את הדיסק הקשיח, שבו כל הקבצים והתיקיות שלך ממוקמים פיזית. המידע מאוחסן באופן מגנטי בדיסק, כך שהוא נשאר בכונן גם כאשר
מדריך קידוד/אבחון של BMW INPA E60: 4 שלבים
מדריך קידוד/אבחון BMW INPA E60: במאמר זה אאסוף מספר מקרים אודות מקרה עבודה של BMW INPA ב- BMW E60, ואם יש לך מארז BMW INPA E60 אחר שברצונך לשתף עם אנשים, אנא שלח אל דואר אלקטרוני שלי. יכניס אותו לכאן כדי לשתף אותו
אוטומציה ביתית: לוח מתגים אוטומטי עם בקרת דימר באמצעות בלוטות 'באמצעות Tiva TM4C123G: 7 שלבים
אוטומציה ביתית: לוח מתגים אוטומטי עם בקרת דימר באמצעות Bluetooth באמצעות Tiva TM4C123G: כיום יש לנו שלט רחוק למכשירי הטלוויזיה שלנו ולמערכות אלקטרוניות אחרות, שהפכו את חיינו לקלים באמת. האם תהית אי פעם לגבי אוטומציה ביתית שתאפשר את השליטה במנורות צינור, מאווררים וחשמל אחר
מלאי - אבחון מחשבים מהיר שהוחלף כעת, ראה להלן: 6 שלבים
מלאי - אבחון מחשבים מהיר עכשיו הוחלף, ראה להלן: אם אי פעם תצטרך לעבוד על מחשב שאינו לפניך, אתה צריך מלאי מדויק. ההנחיה הזו באה אך ורק מכיוון שעמית מתקשה למצוא נהג למחשב. אשתמש ב- Aida32 אישי מ http://majorgeeks.com