جدول المحتويات:

إيبالينج وصفة مقلة عينك: مشروع BME60B: 9 خطوات
إيبالينج وصفة مقلة عينك: مشروع BME60B: 9 خطوات

فيديو: إيبالينج وصفة مقلة عينك: مشروع BME60B: 9 خطوات

فيديو: إيبالينج وصفة مقلة عينك: مشروع BME60B: 9 خطوات
فيديو: بيتزا المقلاة في 10 دقائق .. وصفة صيفية سهلة و تحضر في وقت قصير 2024, يوليو
Anonim
إيبالينج وصفة مقلة عينك: مشروع BME60B
إيبالينج وصفة مقلة عينك: مشروع BME60B

بقلم: هانا سيلوس ، سانغ هي كيم ، توماس فاسكويز ، باتريك فيست

يعد التكبير أحد الميزات الرئيسية الموجودة في نظارات القراءة ، والتي يتم تصنيفها حسب وصفها من الديوبتر. وفقًا لجامعة ميتشيغان للتكنولوجيا ، فإن الديوبتر هو الطول البؤري للعدسة ، ويقاس عادةً بالملم في وحدة الأمتار (جامعة ميشيغان للتكنولوجيا). نظرًا لأن نظارات القراءة تحتوي على عدسات محدبة ، فإن البعد البؤري سيكون موجبًا ، مما يتسبب في أن تكون الديوبتر موجبة أيضًا (HyperPhysics). يزداد الطول البؤري كلما ابتعدت المسافة بين الجسم عن العدسة الفعلية ، وهذا يؤدي إلى تناقص الديوبتر لأنها متناسبة عكسيًا. لذلك ، فإن وجود نظارات قراءة مع ديوبتر إضافي سيساعد العدسة على تكبير العرض بحيث يبدو أن البعد البؤري أقل من خلال زيادة قيمة الديوبتر.

سيتم استخدام الكود المقدم للتنبؤ بالديوبتر للعدسة بوصفة غير معروفة. يتم استخدام مدخلين لحساب الوصفة الطبية: صورة للخلفية الخاضعة للرقابة دون استخدام أي عدسات ، وصورة أخرى لنفس الخلفية ولكن من خلال العدسة المختارة. سيقوم البرنامج بقياس التشوه بين هاتين الصورتين. من هناك ، سنكون قادرين على تقدير ديوبتر العدسة وإعطاء نتيجة ليراها المستخدم.

بالنسبة إلى Instructable ، ستحتاج إلى:

  • نمط رقعة الشطرنج بالأبيض والأسود مطبوع على ورقة مقاس 11x8.5
  • كاميرا قادرة على قفل التركيز البؤري
  • حامل ثلاثي القوائم ، أو شيء مشابه لتأمين الكاميرا
  • وصفات مختلفة لنظارات القراءة
  • ماتلاب

الخطوة 1: التقط الصور

التقاط الصور
التقاط الصور
التقاط الصور
التقاط الصور
التقاط الصور
التقاط الصور

من أجل حساب تكبير العدسة ، يجب أن تكون قادرًا على مقارنتها بالحجم الفعلي للكائن. بالنسبة لهذا المشروع ، سنقارن صورة مكبرة بصورة تحكم.

وبالتالي ، فإن الخطوة الأولى هي التقاط صورتين لنفس الصورة - الأولى من خلال الكاميرا فقط ، والثانية من خلال عدسة نظارات القراءة التي تريد اختبارها.

ستلتقط صورة للوح الشطرنج بالأبيض والأسود مقاس 8.5 × 11 بوصة بشبكة 1 بوصة. قم بإعداد الكاميرا 11in بعيدًا عن رقعة الشطرنج. قبل التقاط الصور ، اقفل التركيز على رقعة الشطرنج.

التقط صورة للوحة الشطرنج بدون نظارات القراءة. ثم ، دون تحريك أي شيء ، ضع نظارات القراءة أمام الكاميرا والتقط الصورة الثانية.

تأكد من أن موضع الكاميرا لا يتحرك بين اللقطات. الشيء الوحيد الذي يجب تغييره بين الصورتين هو وجود عدسة النظارات أمام الكاميرا.

عند الانتهاء من الصور ، قم بتحميلها على جهاز الكمبيوتر الخاص بك.

الخطوة 2: قم بتحميل الصور إلى MATLAB

قم بتحميل الصور في MATLAB
قم بتحميل الصور في MATLAB

افتح نصًا جديدًا.

أولاً ، حدد الدليل حيث يتم تخزين الصور. بعد ذلك ، استخدم وظيفة dir لاستخراج صور-j.webp

Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos' ؛ GetDir = dir ('*. jpg') ؛

بالنسبة لمشروعنا ، أردنا مطالبة مستخدم البرنامج بالملفات التي يريد المقارنة بينها. يطلب القسم الأول من المستخدم تحديد صورة التحكم ، بينما يطلب القسم الثاني من المستخدم تحديد صورة الاختبار.

  • ٪ اسأل المستخدم أي ملف هو صورة التحكم.
  • التحكم = الإدخال ('# من صورة التحكم. / n') ؛
  • ControlFile = [GetDir (Control).name]
  • اسأل المستخدم أي ملف هو الصورة التي يريد تحليلها.
  • ChooseFile = input ('\ n # من الصورة التي تريد تحليلها. / n') ؛
  • PrescripFile = [GetDir (ChooseFile).name] ،

الخطوة الثالثة: تحليل الصورة

تحليل الصور
تحليل الصور
تحليل الصور
تحليل الصور

الصورة الملونة في MATLAB بحجم MxNx3 ، بينما الصورة ذات التدرج الرمادي MxN. هذا يعني أنه من الأسرع تحسين / تحرير صورة ذات تدرج رمادي لأن هناك بيانات أقل لتتبعها. استخدم rgb2gray لتحويل الصورة إلى تدرج رمادي. (تم استخدام وظيفة imrotate لأن صورنا جاءت أفقية - قد يكون هذا السطر من التعليمات البرمجية ضروريًا أو لا يكون ضروريًا في نسختك.)

  • ٪ تحويل إلى تدرج الرمادي وتدوير
  • أنا = imread (ControlFile) ؛
  • أنا = rgb2gray (أنا) ؛
  • أنا = قلد (أنا ، 90) ؛

بعد ذلك ، اعرض الصورة. يتم استخدام وظيفة subplot بحيث تكون صورة الاختبار قادرة على أن تكون بجوار عنصر التحكم في خطوات لاحقة.

  • ٪عرض
  • شكل 1)؛
  • حبكة فرعية (1، 2، 1)
  • imshow (أنا) ؛
  • العنوان (ملف التحكم) ؛

استخدم 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 مربعات ، من مساحة سوداء إلى مساحة سوداء.'، 'انقر نقرًا مزدوجًا للتأكيد.'})) ؛
  • الخط = imline ؛
  • الموقف = الانتظار (الخط) ؛
  • نقاط النهاية = line.getPosition ؛

استخرج الإحداثيات X و Y لنقاط نهاية الخط المرسوم.

  • X = نقاط النهاية (: ، 1)
  • Y = نقاط النهاية (: ، 2) ؛

استخدم ملف التعريف لإنتاج رسم بياني بناءً على الشدة الموجودة على طول الخط المرسوم. يجب أن يشبه هذا موجة مربعة تتراوح من 0 (أسود) إلى 1 (أبيض). احسب القمم ومواقعها أيضًا.

  • الشكل 2)
  • حبكة فرعية (1، 2، 1)
  • العنوان ("كثافة الصورة عبر خط الملف الشخصي (التحكم)")
  • ملف تعريف (I_binary ، X ، Y) ؛ الشبكة مفعلة؛
  • [~ ، ~ ، c1 ، ~ ، ~] = ملف التعريف (I_binary ، X ، Y) ؛
  • [قمم ، loc] = findpeaks (c1 (:،:، 1)) ؛
  • يتمسك
  • مؤامرة (loc ، قمم ، 'ro') ؛
  • خارج القبضة

ابحث عن طول كل هضبة على الرسم البياني غير الشخصي باستخدام حلقة for. قم بتشغيل الحلقة for لنفس المقدار من القمم الموجودة في الرسم البياني لملفات التعريف. لحساب طول كل هضبة ، استخدم وظيفة "البحث" للعثور على جميع المواقع التي يوجد بها "1" بدلاً من "0" قيمة كثافة. بعد ذلك ، احسب طول تلك المصفوفة للحصول على الطول الإجمالي للهضبة ، والذي يجب أن يساوي عرض المربع الأبيض بالبكسل. ControlPlateauList = الأصفار (1، length (loc))؛

بالنسبة إلى i = 1: الطول (loc)

إذا أنا == الطول (loc)

الهضبة = البحث (c1 (loc (i): end ،: ، 1)) ؛

آخر

هضبة = البحث (c1 (loc (i): loc (i + 1) -1 ،: ، 1)) ؛

نهاية

ControlPlateauList (i) = الطول (الهضبة) ؛

نهاية

الخطوة 5: كرر الخطوتين 3 و 4 لصورة الاختبار

كرر الخطوتين 3 و 4 لصورة الاختبار
كرر الخطوتين 3 و 4 لصورة الاختبار

* ملاحظة: عند رسم خط ملف التعريف على صورة الاختبار ، تأكد من رسمه عبر المربعات التي تتوافق مع الخط الذي رسمته في صورة التحكم.

الخطوة 6: احسب تكبير العدسة

احسب تكبير العدسة
احسب تكبير العدسة

يتم حساب القياسات المكبرة بقسمة متوسط طول الهضبة ، التي تم حسابها في الخطوة 5 ، على متوسط طول هضبة التحكم ، والتي تم حسابها في الخطوة 4. ويحسب هذا ليكون 1.0884.

التكبير = متوسط (قائمة الهضبة) / يعني (ControlPlateauList) ؛

الخطوة 7: إيجاد R-squared ووصفة المستخدم عن طريق الاستيفاء

إيجاد مربع R ووصفة المستخدم عن طريق الاستيفاء
إيجاد مربع R ووصفة المستخدم عن طريق الاستيفاء

باستخدام الكود:

  • md1 = fitlm (GivenPrescription ، MagArray) ؛
  • Rsquared = md1. Rsquared. عادي ؛

يمكننا إيجاد القيمة التربيعية R للرسم البياني GivenPresciption (العدسات المعطاة القيم) مقابل MagArray (مجموعة نسب قياسات التكبير التي حسبناها سابقًا). من خلال الحصول على قيمة R عالية بما يكفي ، يمكن الاستدلال على وجود ارتباط قوي بما يكفي لتبرير استخدام هذه الطريقة. بالنسبة لهذه الحالة بالذات ، كانت قيمة R التربيعية 0.9912 ، مما يشير إلى وجود ارتباط قوي ، وبالتالي يكون له ما يبرره في استخدام هذه الطريقة في التحليل.

باستخدام الوظيفة:

الوصفة الطبية = interp1 (MagArray ، GivenPrescription ، التكبير ، "الخطي") ؛

يمكننا استيفاء قيمة الوصفة الطبية المقابلة (على المحور السيني) لنسبة التكبير لدينا (قيمة على المحور ص) وإيجاد وصفة المستخدم.

يعد استيفاء البيانات أمرًا مهمًا لكي تعمل هذه الطريقة لأنها تتيح لنا وضع افتراضات حول المعلومات التي لا نمتلكها ، بناءً على المعلومات المتوفرة لدينا. في حين أن الخط الأنسب من الناحية الفنية سيكون مرشحًا أقوى من الناحية الفنية لهذا الافتراض ، فإن إنشاء حدود لتقليل عدد المخرجات يخدم نفس التأثير حيث تأتي النظارات الطبية بقيم موحدة تدريجية على أي حال. هذا موضح في الخطوات اللاحقة.

الخطوة الثامنة: عرض الوصفة الطبية للمستخدم على الرسم البياني

عرض الوصفة الطبية للمستخدم على الرسم البياني
عرض الوصفة الطبية للمستخدم على الرسم البياني

باستخدام الكود التالي:

  • الشكل؛
  • المؤامرة (GivenPrescription ، MagArray ، "-g")
  • يتمسك
  • المؤامرة (الوصفة الطبية ، التكبير ، "bp")
  • خارج القبضة
  • جريد
  • أسطورة ('Data'، 'Interpolated Points'، 'Location'، 'NW')

يمكننا رسم رسم بياني يوضح نسب التكبير مقابل الوصفة الطبية بخط أخضر والبيانات التي تم العثور عليها لتكبيرنا المحسوب مقابل وصفتنا المقحمة بنجمة زرقاء. ثم تقوم وسيلة الإيضاح بتسمية العنوان والمحور السيني والمحور الصادي وتضع وسيلة الإيضاح في الزاوية اليسرى العليا.

الخطوة 9: تضييق الوصفة الطبية الخاصة بك

تضييق الوصفة الطبية الخاصة بك
تضييق الوصفة الطبية الخاصة بك

يتم استخدام الكود التالي لإنتاج تقريب الوصفة الطبية:

  • إذا كانت الوصفة الطبية <= 1.125

    وصف محسوب = '1.0' ؛

  • وصفة elseif <= 1.375

    وصف محسوب = '1.25' ؛

  • وصفة elseif <= 1.625.000

    وصف محسوب = '1.5' ؛

  • وصفة elseif <= 1.875.000

    الوصفة المحسوبة = '1.75' ؛

  • وصفة elseif <= 2.25

    وصف محسوب = '2.0' ؛

  • وصفة elseif <= 2.625.000

    وصف محسوب = '2.5' ؛

  • وصفة elseif <= 3

    الوصفة المحسوبة = '2.75' ؛

  • وصفات elseif <= 3.375

    وصف محسوب = '3.25' ؛

  • آخر

    CalculatedPrescription = 'غير معروف' ؛

  • نهاية

الوصفة التي تم العثور عليها من خلال الاستيفاء لا تعكس بالضرورة الوصفة الفعلية - هذا لأنه سيكون هناك دائمًا اختلافات طفيفة في تحليل الصورة بسبب خطأ بشري. وبالتالي ، نحن بحاجة إلى هذه الخطوة لتصنيف الوصفة الطبية الفعلية.

تبدأ الوصفات الطبية عادةً من 1.0 ديوبتر وتزيد بمقدار 0.25 في الوصفات الطبية ، لذلك بعد حساب الوصفة الطبية ، نريد تحديد الوصفة الطبية التي تناسب ما قد يحتاجه المستخدم. بعد حساب الوصفة الطبية ، نقوم بتشغيلها من خلال عبارات If المحددة للتحقق من قيمتها وتحديد الوصفة الطبية اللازمة. أي شيء أقل من أو يساوي 1.125 ، فإن الوصفة الطبية هي 1.0. أي شيء أقل من أو يساوي 1.375 ، فإن الوصفة الطبية هي 1.25. أي شيء أقل من أو يساوي 1.625 ، فإن الوصفة الطبية هي 1.5. أي شيء أقل من أو يساوي 1.845 ، فإن الوصفة الطبية هي 1.75. وما إلى ذلك وهلم جرا.

لدينا القيم المتزايدة لأننا نتحقق مما إذا كانت القيم أقل من. إذا فعلنا القيم المتناقصة ، فإن أول عبارة if ستقرأ أول عبارة if طوال الوقت. إذا كانت الوصفة الطبية هي الأصغر ، فنحن نريدها أن تتعرف عليها على أنها الأصغر على الفور ، ولهذا السبب فإن أصغر قيمة هي ما بدأنا به. أي شيء أعلى من أعلى قيمة يعني أن الوصفة الطبية لا تتوافق مع بياناتنا ، لذلك ستعطي قراءة السلسلة "غير معروف".

موصى به: