תוכן עניינים:

אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB: 33 שלבים
אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB: 33 שלבים

וִידֵאוֹ: אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB: 33 שלבים

וִידֵאוֹ: אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB: 33 שלבים
וִידֵאוֹ: Sjögren Syndrome and the Autonomic Nervous System: When, How, What Now? 2024, נוֹבֶמבֶּר
Anonim
אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB
אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB
אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB
אבחון אוטומטי של רטינופתיה סוכרתית באמצעות MATLAB

(עיין במתאר הקוד למעלה)

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

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 כדי להתכונן להפעלת קוד

נקה את Matlab כדי להתכונן לריצת קוד
נקה את Matlab כדי להתכונן לריצת קוד

הוסף לקוד:

1. סגור הכל (סוגר את כל התמונות שנפתחו בעבר)

2. clearvars - למעט אבחנות רשמיות (מנקה את כל המשתנים למעט קובץ ה- txt הרשמי שאובחן בעבר)

3. cclc (מנקה חלון הפקודה)

שלב 6: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית

בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית
בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית
בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית
בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית

1. קח את קובץ הטקסט לאבחון וחלץ את שמות התמונות. שמות אלה נמצאים בעמודה הראשונה של קובץ הטקסט, כך שחילוץ אותם הקלד 'רשמי אבחון (:, 1)'. מטריצת שמות התמונות הוקצתה למשתנה, "מספר_כל_דמות_דמות"

2. המר את המשתנה all_image_numbers ממערך תאים למערך מטריצות באמצעות הפונקציה cell2mat

שלב 7: בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)

בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)
בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)
בחר 10 תמונות עיניים רגילות ו -10 תמונות עם תסמיני רטינופתיה סוכרתית (המשך)
בחר 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

צור 2 משתנים (רגילים ומאובחנים) והגדר אותם כשווים ל- 0
צור 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

מצא את האובייקטים עם קישוריות של לפחות 8
מצא את האובייקטים עם קישוריות של לפחות 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 כתמים …
אם יש יותר מ -5 כתמים …

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

סיים את הצהרת ה- if.

שלב 30: חזור על תהליך הסינון לתמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3

חזור על תהליך הסינון עבור תמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3
חזור על תהליך הסינון עבור תמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3
חזור על תהליך הסינון עבור תמונות רגילות עם ערכי ספרות תמונה כ -2 ו -3
חזור על תהליך הסינון עבור תמונות רגילות עם ערכי ספרות תמונה כ -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', תחת_גבול, עליון_גבול)

מוּמלָץ: