תוכן עניינים:
- שלב 1: צלם תמונות
- שלב 2: טען את התמונות ב- MATLAB
- שלב 3: ניתוח תמונה
- שלב 4: חשב את רוחב הריבועים הלבנים על לוח השחמט
- שלב 5: חזור על שלבים 3 ו -4 עבור תמונת הבדיקה
- שלב 6: חשב את הגדלת העדשה
- שלב 7: מציאת R-squared ומרשם המשתמש באמצעות אינטרפולציה
- שלב 8: הצגת מרשם המשתמש על גרף
- שלב 9: צמצם את המרשם שלך
וִידֵאוֹ: עיטוף מרשם גלגל העין שלך: פרויקט BME60B: 9 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:12
מאת: האנה סיילוס, סאנג הי קים, תומאס וזקז, פטריק ויסטה
הגדלה היא אחד המאפיינים המרכזיים הקיימים במשקפי קריאה, המסווגים לפי מרשם דיופטרים. על פי אוניברסיטת הטכנולוגיה של מישיגן, דיופטר הוא אורך המוקד של העדשה, הנמדד בדרך כלל במ מ, ביחידת המטרים (אוניברסיטת הטכנולוגיה של מישיגן). מכיוון שמשקפי קריאה כוללים עדשות קמורות, אורך המוקד יהיה חיובי, דבר שיגרום גם לדיופטים להיות חיוביים (HyperPhysics). אורך המוקד גדל ככל שהמרחק בין האובייקט מתרחק מהעדשה בפועל, וזה מוביל לדיופטים לרדת מכיוון שהם פרופורציונליים הפוכים. לכן, משקפי קריאה עם דיופטרים נוספים יעזרו לעדשה להגדיל את התצוגה כך שייראה שאורך המוקד יהיה פחות על ידי העלאת ערך הדיופטרים.
הקוד המוצג ישמש לחיזוי דיופטר של עדשה ללא מרשם לא ידוע. שתי תשומות משמשות לחישוב המרשם: תצלום של הרקע המבוקר ללא שימוש בעדשות, ותצלום נוסף של אותו רקע אך באמצעות עדשת הבחירה. התוכנית תמדוד את העיוות בין שני התצלומים הללו. משם נוכל לאמוד את דיופטר העדשה ולהפיק תוצאה לצפייה של המשתמש.
לצורך הוראה זו תזדקק ל:
- תבנית לוח שחמט בשחור-לבן המודפסת על נייר בגודל 11x8.5
- מצלמה עם יכולת לנעול את המיקוד שלה
- חצובה, או משהו דומה לאבטחת המצלמה
- מרשמים שונים של משקפי קריאה
- MATLAB
שלב 1: צלם תמונות
על מנת לחשב את הגדלת העדשה, עליך להיות מסוגל להשוות אותה לגודל האובייקט בפועל. עבור פרויקט זה, נשווה תמונה מוגדלת לתמונת בקרה.
לפיכך, השלב הראשון הוא לצלם שתי תמונות של אותה תמונה - הראשונה רק באמצעות המצלמה, והשנייה דרך עדשת משקפי הקריאה שברצונך לבדוק.
אתה תצלם לוח שחמט בגודל 8.5x11 אינץ 'בשחור עם רשת 1 אינץ'. הגדר את המצלמה שלך במרחק של 11 מטרים מהלוח השחמט. לפני צילום התמונות, נעל את המיקוד על לוח השחמט.
צלם את לוח השחמט ללא משקפי הקריאה. לאחר מכן, מבלי להזיז דבר, הנח את משקפי הקריאה מול המצלמה וצלם את התמונה השנייה.
ודא שמיקום המצלמה שלך לא זז בין הצילומים. הדבר היחיד שצריך להשתנות בין שתי התמונות הוא הנוכחות של עדשת המשקפיים מול המצלמה.
כשתסיים עם התמונות, העלה אותן למחשב שלך.
שלב 2: טען את התמונות ב- MATLAB
פתח סקריפט חדש.
ראשית, ציין את הספרייה שבה מאוחסנים התמונות. לאחר מכן, השתמש בפונקציית dir לחילוץ תמונות-j.webp
Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
עבור הפרויקט שלנו, רצינו לבקש מהמשתמש בתוכנית לאילו קבצים הוא רוצה להשוות. החלק הראשון מבקש מהמשתמש לציין את תמונת הבקרה, והשני מבקש מהמשתמש לציין את תמונת הבדיקה.
- שאל את המשתמש איזה קובץ הוא תמונת הבקרה.
- Control = קלט ('מספר תמונת הפקד. / N');
- ControlFile = [GetDir (Control).name]
- שאל את המשתמש איזה קובץ הוא התמונה שהם רוצים לנתח.
- ChooseFile = קלט ('\ n# של התמונה שברצונך לנתח. / N');
- PrescripFile = [GetDir (ChooseFile).name];
שלב 3: ניתוח תמונה
תמונה צבעונית ב- MATLAB היא בגודל MxNx3, בעוד שתמונה בגווני אפור היא MxN. המשמעות היא שזה מהיר יותר לשפר/לערוך תמונה בגווני אפור מכיוון שיש פחות נתונים לעקוב אחריהם. השתמש ב- rgb2gray כדי להמיר את התמונה לגווני אפור. (הפונקציה imrotate שימשה מכיוון שהתמונות שלנו הגיעו לרוחב - שורת קוד זו עשויה להיות נחוצה בגרסה שלך או לא.)
- %להמיר לגווני אפור ולסובב
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = imrotate (I, 90);
לאחר מכן, הצג את התמונה. פונקציית חלקת המשנה משמשת כך שתמונת הבדיקה תוכל להיות ליד הפקד בשלבים מאוחרים יותר.
- %לְהַצִיג
- איור 1);
- עלילת משנה (1, 2, 1)
- imshow (I);
- title (ControlFile);
השתמש ב- imcrop כדי לבקש מהמשתמש לחתוך את לוח השחמט מתוך התמונה המלאה. הקוד הבא מציג גם תיבת הודעות המספקת הוראות למשתמש.
- %חיתוך לוח שחמט לניתוח
- waitfor (msgbox ({'השתמש בשערות הצולבות כדי לחתוך לוח שחמט.', 'לאחר מכן לחץ פעמיים על אזור עניין.}}));
- I_crop = imcrop (I);
השתמש ב- imbinarize לבינאריזציה של התמונה.
I_binary = imbinarize (I_crop);
שלב 4: חשב את רוחב הריבועים הלבנים על לוח השחמט
לאחר מכן, בקש מהמשתמש לצייר קו על פני התמונה באמצעות imline. קו זה אמור לרוץ אופקית על פני לוח השחמט. זה צריך להתחיל ולסיים בריבוע שחור (לא משנה היכן)- זאת מכיוון שנמדוד את רוחב הריבועים הלבנים, לא את השחורים.
- %ציור קו
- איור 1)
- עלילת משנה (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'לחץ וגרור כדי לצייר קו המשתרע על 9 תיבות, מרווח שחור למרחב שחור.', 'לחץ לחיצה כפולה לאישור.'}));
- line = imline;
- מיקום = המתן (שורה);
- נקודות קצה = line.getPosition;
חלץ את הקואדינציות X ו- Y עבור נקודות הקצה של הקו המשורטט.
- X = נקודות קצה (:, 1)
- Y = נקודות קצה (:, 2);
השתמש בלא תקין כדי לייצר גרף המבוסס על העוצמות הנמצאות לאורך הקו המצויר. זה אמור להידמות לגל מרובע הנע בין 0 (שחור) ל -1 (לבן). חשב גם את הפסגות ואת מיקומן.
- איור (2)
- עלילת משנה (1, 2, 1)
- כותרת ('עוצמת התמונה על פני הקו הבלתי מותאם (שליטה)')
- לא תקין (I_binary, X, Y); רשת על;
- [~, ~, c1, ~, ~] = לא תקין (I_binary, X, Y);
- [peaks, loc] = findpeaks (c1 (:,:, 1));
- תחזיק מעמד
- עלילה (לוק, פסגות, 'רו');
- להדוף
מצא את אורך כל רמה בגרף הבלתי מתאים באמצעות לולאת for. הפעל את לולאת ה- for עבור אותה כמות פסגות שיש בגרף הבלתי מתאים. כדי לחשב את אורך כל רמה, השתמש בפונקציית 'מצא' כדי למצוא את כל המיקומים שבהם יש ערך '1' במקום ערך '0'. לאחר מכן, חשב את אורך המערך כדי לקבל את האורך הכולל של הרמה, שאמור להיות שווה לרוחב הריבוע הלבן בפיקסלים. ControlPlateauList = אפסים (1, אורך (לוק));
עבור i = 1: אורך (לוק)
אם i == אורך (לוק)
רמה = למצוא (c1 (לוק (i): סוף,:, 1));
אַחֵר
רמה = מצא (c1 (לוק (i): לוק (i+1) -1,:, 1));
סוֹף
ControlPlateauList (i) = אורך (רמה);
סוֹף
שלב 5: חזור על שלבים 3 ו -4 עבור תמונת הבדיקה
*הערה: בעת ציור הקו הבלתי תקין על תמונת הבדיקה, הקפד לצייר אותו על פני הריבועים התואמים את הקו שציירת בתמונת הבקרה.
שלב 6: חשב את הגדלת העדשה
המדידות המוגדלות מחושבות על ידי חלוקת ממוצע אורך הרמה, שחושב בשלב 5, בממוצע אורך רמת הפיקוח, שחושב בשלב 4. זה מחושב ל -1.0884.
הגדלה = ממוצע (plateauList)/ממוצע (ControlPlateauList);
שלב 7: מציאת R-squared ומרשם המשתמש באמצעות אינטרפולציה
שימוש בקוד:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
אנו יכולים למצוא את הערך R בריבוע של התרשים GivenPresciption (הערכים הנתונות לעדשות שלנו) לעומת MagArray (מערך של יחסי מדידות ההגדלה שחישבנו קודם לכן). על ידי ערך גבוה מספיק בריבוע R, ניתן להסיק שיש מתאם חזק מספיק כדי להצדיק את השימוש בשיטה זו. במקרה הספציפי הזה, ערך ה- R בריבוע היה 0.9912, מה שמעיד על מתאם חזק ולכן מוצדקים להשתמש בשיטה זו בניתוח.
שימוש בפונקציה:
Prescription = interp1 (MagArray, GivenPrescription, הגדלה, 'לינארית');
אנו יכולים לבצע אינטרפולציה של ערך המרשם המתאים (על ציר ה- x) של יחס ההגדלה שלנו (ערך על ציר y) ולמצוא מה המרשם של המשתמש.
אינטרפולציה של נתונים חשובה כדי ששיטה זו תפעל מכיוון שהיא מאפשרת לנו להניח הנחות לגבי מידע שאין לנו, בהתבסס על המידע שיש לנו. אמנם קו ההתאמה הטובה ביותר מבחינה טכנית יהיה מועמד חזק יותר להנחה זו, אך יצירת גבולות להפחתת מספר התפוקות משרתת את אותה השפעה כמו שמשקפי מרשם מגיעים בערכים אחידים מצטברים בכל מקרה. זה מוסבר בשלבים מאוחרים יותר.
שלב 8: הצגת מרשם המשתמש על גרף
שימוש בקוד הבא:
- דמות;
- עלילה (GivenPrescription, MagArray, '-g')
- תחזיק מעמד
- עלילה (מרשם, הגדלה, 'bp')
- להדוף
- רֶשֶׁת
- legend ('נתונים', 'נקודות אינטרפולציה', 'מיקום', 'NW')
אנו יכולים לשרטט גרף המציג את יחסי ההגדלה מול המרשם הנתון עם קו ירוק ואת הנתונים שנמצאו של ההגדלה המחושבת שלנו מול המרשם האינטרפולציה שלנו עם כוכב כחול. ואז האגדה מתייגת את הכותרת, ציר ה- x וציר ה- y וממקמת את המקרא בפינה השמאלית העליונה.
שלב 9: צמצם את המרשם שלך
הקוד הבא משמש לייצור העיגול למרשם:
-
אם מרשם <= 1.125
CalculatedPrescription = '1.0';
-
elseif מרשם <= 1.375
CalculatedPrescription = '1.25';
-
elseif מרשם <= 1.625
CalculatedPrescription = '1.5';
-
elseif מרשם <= 1.875
CalculatedPrescription = '1.75';
-
elseif מרשם <= 2.25
CalculatedPrescription = '2.0';
-
elseif מרשם <= 2.625
CalculatedPrescription = '2.5';
-
elseif מרשם <= 3
CalculatedPrescription = '2.75';
-
elseif מרשם <= 3.375
CalculatedPrescription = '3.25';
-
אַחֵר
CalculatedPrescription = 'לא ידוע';
- סוֹף
המרשם שנמצא באמצעות אינטרפולציה אינו משקף בהכרח את המרשם בפועל - זאת מכיוון שתמיד יהיו וריאציות קלות בניתוח הצילום עקב טעות אנוש. לפיכך, אנו זקוקים לשלב זה כדי לסווג את המרשם בפועל.
המרשמים הניתנים בדרך כלל מתחילים מ -1.0 דיופטר ועולים ב -25 במרשמים שלהם, לכן לאחר חישוב המרשם אנו רוצים לקבוע את המרשם המתאים ביותר למה שהמשתמש עשוי להזדקק לו. לאחר חישוב המרשם, אנו מפעילים אותו באמצעות הצהרות If הנתונות כדי לבדוק את ערכו ולקבוע איזה מרשם נחוץ. כל מה שפחות או שווה ל- 1.125, אז המרשם הוא 1.0. כל דבר פחות או שווה ל -1.375, המרשם הוא 1.25. כל דבר פחות או שווה ל -1.625, המרשם הוא 1.5. כל דבר פחות או שווה ל -1.845, המרשם הוא 1.75. וכן הלאה.
הערכים שלנו גדלים מכיוון שאנו בודקים אם הערכים נמוכים מ-. אם עשינו את הערכים יורדים אז המשפט הראשון אם היה קורא את המשפט אם הראשון כל הזמן. אם המרשם הוא הקטן ביותר, אנו רוצים שהוא יזהה אותו כקטן ביותר מיד, ולכן זו הסיבה שהערך הקטן ביותר הוא מה שהתחלנו איתו. כל דבר הגבוה מהערך הגבוה ביותר פירושו שהמרשם אינו בטווח הנתונים שלנו, ולכן הוא יעניק לקריאת המחרוזת "לא ידועה".
מוּמלָץ:
שליטה בתצוגת שבעה קטעים באמצעות מרשם המשמרות Arduino ו- 74HC595: 6 שלבים
שליטה בתצוגת שבעה קטעים באמצעות Arduino ו- 74HC595 Shift Register: היי, מה קורה, חבר'ה! Akarsh כאן מ- CETech.Seven Segment Displays טובות למראה והן תמיד כלי שימושי להצגת נתונים בצורה של ספרות אך יש בהם חיסרון שהוא כאשר אנו שולטים בתצוגת שבעה קטעים במציאות
העין השלישית (פרויקט ארדואינו): 3 שלבים
העין השלישית (פרויקט ארדואינו): תארו לעצמכם שאתם רוצים לצוד רוחות רפאים, אך אין לכם בדיוק ציוד מלבד לוח אוג'ואה, שרבים מהציידים והנפשים המנוסים שלו ממליצים בחום לא להשתמש בו, והטלפון שלכם כ מקליט EVP. ניסית לפתוח את y
שיפוץ נורת לד לחיתוך גלגל העין 998: 8 שלבים
שיפוץ נורת לד לחיתוך גלגל העין 998: הוראה זו מתארת כיצד לשנות את חלקי החיתוך של Halo 998 לגלגל העין בכדי לקבל את נורת העמודה LumiSelect PAR/R16 מ- earthled.com. נורת ה- LED גדולה מכדי להיכנס דרך פתח גלגל העין של החיתוך. חתיכה, אבל עם קצת EF
שימוש בלוח Dot Matrix עם מרשם Arduino ו- Shift: 5 שלבים
שימוש ב- Dot Matrix LED עם מרשם Arduino ו- Shift: ה- Siemens DLO7135 Dot Drix הוא פיסת אופטואלקטרוניקה מדהימה. היא מחויבת כתצוגה חכמה (D) Matrix 5x7 עם זיכרון/מפענח/דרייבר. יחד עם הזיכרון הזה, יש לו תצוגת ASCII בת 96 תווים עם עליון ותחתון
מרשם המשמרות 74HC164 והארדואינו שלך: 9 שלבים
מאגר המשמרות 74HC164 והרדואינו שלך: רשימות המשמרות הן חלק חשוב מאוד בהגיון הדיגיטלי, הן פועלות כדבק בין העולם המקביל והעולמי הסדרתי. הם מפחיתים את ספירת החוטים, משתמשים בסיכה ואפילו מסייעים בהורדת המעבד שלך על ידי היכולת לאחסן את הנתונים שלהם. הם מגיעים במגוון