विषयसूची:

अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट: 9 चरण
अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट: 9 चरण

वीडियो: अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट: 9 चरण

वीडियो: अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट: 9 चरण
वीडियो: आँखों का नंबर घटाने के लिए 5 तरीके | How to Get Rid of Spectacles Naturally 2024, नवंबर
Anonim
अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट
अपने नेत्रगोलक के नुस्खे पर ध्यान दें: एक BME60B प्रोजेक्ट

द्वारा: हन्ना सिलोस, संग ही किम, थॉमस वाज़क्वेज़, पैट्रिक विस्टे

आवर्धन चश्मा पढ़ने के लिए मौजूद प्रमुख विशेषताओं में से एक है, जिसे उनके डायोप्टर के नुस्खे द्वारा वर्गीकृत किया जाता है। मिशिगन टेक्नोलॉजी यूनिवर्सिटी के अनुसार, एक डायोप्टर लेंस की फोकल लंबाई है, जिसे आमतौर पर मीटर (मिशिगन टेक्नोलॉजी यूनिवर्सिटी) की इकाई में मिमी में मापा जाता है। क्योंकि पढ़ने वाले चश्मे में उत्तल लेंस होते हैं, फोकल लंबाई सकारात्मक होगी, जिससे डायोप्टर भी सकारात्मक होंगे (हाइपरफिजिक्स)। फोकल लंबाई बढ़ जाती है क्योंकि वस्तु के बीच की दूरी वास्तविक लेंस से और दूर हो जाती है, और इससे डायोप्टर कम हो जाते हैं क्योंकि वे व्युत्क्रमानुपाती होते हैं। इसलिए, अतिरिक्त डायोप्टर के साथ पढ़ने वाले चश्मे होने से लेंस को दृश्य को ज़ूम करने में मदद मिलेगी ताकि ऐसा लग सके कि डायोप्टर के मूल्य को बढ़ाकर फोकल लंबाई कम हो गई है।

प्रस्तुत कोड का उपयोग अज्ञात नुस्खे वाले लेंस के डायोप्टर की भविष्यवाणी करने के लिए किया जाएगा। नुस्खे की गणना के लिए दो इनपुट का उपयोग किया जाता है: किसी भी लेंस का उपयोग किए बिना नियंत्रित पृष्ठभूमि की एक तस्वीर, और उसी पृष्ठभूमि की एक और तस्वीर लेकिन पसंद के लेंस के माध्यम से। कार्यक्रम इन दो तस्वीरों के बीच की विकृति को मापेगा। वहां से, हम लेंस के डायोप्टर का अनुमान लगाने में सक्षम होंगे और उपयोगकर्ता को देखने के लिए एक परिणाम तैयार करेंगे।

इस निर्देश के लिए, आपको आवश्यकता होगी:

  • कागज की शीट में 11x8.5 पर मुद्रित एक श्वेत-श्याम बिसात पैटर्न
  • अपना फोकस लॉक करने की क्षमता वाला कैमरा
  • एक तिपाई, या कैमरे को सुरक्षित करने के लिए कुछ समान
  • चश्मा पढ़ने के विभिन्न नुस्खे
  • मतलब

चरण 1: तस्वीरें लें

तस्वीरें ले
तस्वीरें ले
तस्वीरें ले
तस्वीरें ले
तस्वीरें ले
तस्वीरें ले

लेंस के आवर्धन की गणना करने के लिए, आपको इसकी तुलना वस्तु के वास्तविक आकार से करने में सक्षम होना चाहिए। इस परियोजना के लिए, हम एक आवर्धित छवि की तुलना एक नियंत्रण छवि से करेंगे।

इस प्रकार, पहला कदम एक ही छवि की दो तस्वीरें लेना है - पहला सिर्फ कैमरे के माध्यम से, और दूसरा पढ़ने वाले चश्मे के लेंस के माध्यम से जिसे आप परीक्षण करना चाहते हैं।

आप 1in ग्रिड के साथ 8.5x11in काले और सफेद चेकरबोर्ड की तस्वीर ले रहे होंगे। अपना कैमरा चेकरबोर्ड से 11 इंच की दूरी पर सेट करें। फ़ोटो लेने से पहले, फ़ोकस को बिसात पर लॉक करें।

बिना पठन चश्मे के बिसात का फोटो लें। फिर, बिना कुछ हिलाए रीडिंग ग्लास को कैमरे के सामने रखें और दूसरी फोटो लें।

सुनिश्चित करें कि आपके कैमरे की स्थिति शॉट्स के बीच में नहीं चलती है। केवल एक चीज जो दो तस्वीरों के बीच बदलनी चाहिए, वह है कैमरे के सामने चश्मे के लेंस की उपस्थिति।

जब आप फ़ोटो का काम पूरा कर लें, तो उन्हें अपने कंप्यूटर पर अपलोड करें।

चरण 2: छवियों को MATLAB में लोड करें

छवियों को MATLAB में लोड करें
छवियों को MATLAB में लोड करें

एक नई स्क्रिप्ट खोलें।

सबसे पहले, उस निर्देशिका को निर्दिष्ट करें जहाँ फ़ोटो संग्रहीत हैं। फिर,-j.webp

Dir = 'C:\Users\kuras\Desktop\classes\SQ2\BME60b\Sandbox\testphotos'; गेटडिर = डीआईआर ('*.jpg');

हमारी परियोजना के लिए, हम प्रोग्राम के उपयोगकर्ता को संकेत देना चाहते थे कि वे किन फाइलों की तुलना करना चाहते हैं। पहला खंड उपयोगकर्ता को नियंत्रण छवि निर्दिष्ट करने के लिए कहता है, और दूसरा उपयोगकर्ता को परीक्षण छवि निर्दिष्ट करने के लिए कहता है।

  • % उपयोगकर्ता से पूछें कि कौन सी फ़ाइल नियंत्रण छवि है।
  • नियंत्रण = इनपुट ('# नियंत्रण छवि का। / n');
  • कंट्रोलफाइल = [गेटडिर (कंट्रोल) नाम]
  • % उपयोगकर्ता से पूछें कि वह कौन सी फ़ाइल है जिसका वे विश्लेषण करना चाहते हैं।
  • चुनेंफाइल = इनपुट ('\ n # छवि का आप विश्लेषण करना चाहते हैं। / n');
  • PrescripFile = [GetDir (चुनें फ़ाइल)। नाम];

चरण 3: छवि विश्लेषण

छवि विश्लेषण
छवि विश्लेषण
छवि विश्लेषण
छवि विश्लेषण

MATLAB में एक रंगीन छवि का आकार MxNx3 है, जबकि एक ग्रेस्केल छवि MxN है। इसका अर्थ है कि ग्रेस्केल छवि को बढ़ाना/संपादित करना तेज़ है क्योंकि ट्रैक रखने के लिए कम डेटा है। छवि को ग्रेस्केल में बदलने के लिए rgb2gray का उपयोग करें। (इमोटेट फ़ंक्शन का उपयोग किया गया था क्योंकि हमारी तस्वीरें क्षैतिज में आईं - कोड की यह पंक्ति आपके संस्करण में आवश्यक हो भी सकती है और नहीं भी।)

  • % ग्रेस्केल में बदलें और घुमाएं
  • मैं = इमरेड (कंट्रोलफाइल);
  • मैं = आरजीबी2ग्रे (आई);
  • मैं = इम्रोटेट (मैं, ९०);

अगला, छवि प्रदर्शित करें। सबप्लॉट फ़ंक्शन का उपयोग किया जाता है ताकि परीक्षण छवि बाद के चरणों में नियंत्रण के बगल में हो सके।

  • % प्रदर्शन
  • आकृति 1);
  • सबप्लॉट(1, 2, 1)
  • इम्शो (मैं);
  • शीर्षक (कंट्रोलफाइल);

उपयोगकर्ता को पूर्ण छवि से चेकरबोर्ड को क्रॉप करने के लिए प्रेरित करने के लिए इम्क्रॉप का उपयोग करें। निम्न कोड उपयोगकर्ता को निर्देश प्रदान करने के लिए एक संदेश बॉक्स भी दिखाता है।

  • विश्लेषण के लिए% बिसात काट लें
  • Waitfor(msgbox({'चेकरबोर्ड को क्रॉप आउट करने के लिए क्रॉस हेयर का उपयोग करें।', 'फिर रुचि के क्षेत्र पर डबल क्लिक करें।'}));
  • I_crop = फसल (मैं);

छवि को बिनराइज़ करने के लिए imbinarize का उपयोग करें।

I_binary = imbinarize (I_crop);

चरण 4: चेकरबोर्ड पर सफेद वर्गों की चौड़ाई की गणना करें।

बिसात पर सफेद चौकों की चौड़ाई की गणना करें।
बिसात पर सफेद चौकों की चौड़ाई की गणना करें।
बिसात पर सफेद चौकों की चौड़ाई की गणना करें।
बिसात पर सफेद चौकों की चौड़ाई की गणना करें।
बिसात पर सफेद चौकों की चौड़ाई की गणना करें।
बिसात पर सफेद चौकों की चौड़ाई की गणना करें।

इसके बाद, उपयोगकर्ता को imline का उपयोग करके छवि पर एक रेखा खींचने के लिए प्रेरित करें। यह रेखा बिसात पर क्षैतिज रूप से चलनी चाहिए। यह एक काले वर्ग पर शुरू और समाप्त होना चाहिए (इससे कोई फर्क नहीं पड़ता) - ऐसा इसलिए है क्योंकि हम सफेद वर्गों की चौड़ाई को मापेंगे, न कि काले वाले।

  • %रेखा खींचें
  • आकृति 1)
  • सबप्लॉट(1, 2, 1)
  • इमशो (I_बाइनरी);
  • Waitfor(msgbox({'ब्लैक स्पेस से ब्लैक स्पेस तक 9 बॉक्स में फैली रेखा खींचने के लिए क्लिक करें और खींचें।', 'पुष्टि करने के लिए डबल क्लिक करें।'}));
  • रेखा = इमलाइन;
  • स्थिति = प्रतीक्षा (पंक्ति);
  • एंडपॉइंट्स = लाइन। getPosition;

खींची गई रेखा के अंतिम बिंदुओं के लिए एक्स और वाई कोऑडिनेट्स निकालें।

  • एक्स = समापन बिंदु (:, 1)
  • वाई = एंडपॉइंट्स (:, 2);

खींची गई रेखा के साथ पाई गई तीव्रताओं के आधार पर ग्राफ बनाने के लिए इप्रोफाइल का उपयोग करें। यह 0 (काला) से लेकर 1 (सफेद) तक की एक वर्गाकार तरंग के सदृश होना चाहिए। चोटियों और उनके स्थानों की भी गणना करें।

  • चित्र 2)
  • सबप्लॉट(1, 2, 1)
  • शीर्षक ('इमप्रोफाइल रेखा के पार छवि तीव्रता (नियंत्रण)')
  • इप्रोफाइल (I_बाइनरी, एक्स, वाई); ग्रिड पर;
  • [~, ~, c1, ~, ~] = इम्प्रोफाइल (I_binary, X, Y);
  • [चोटियों, स्थान] = खोजपीक्स (सी 1 (:,:, 1));
  • रूको
  • प्लॉट (लोक, चोटियाँ, 'आरओ');
  • रोके रखना

लूप के लिए उपयोग करके इम्प्रोफाइल ग्राफ पर प्रत्येक पठार की लंबाई ज्ञात कीजिए। इंप्रोफाइल ग्राफ में उतनी ही चोटियों के लिए लूप के लिए चलाएं। प्रत्येक पठार की लंबाई की गणना करने के लिए, उन सभी स्थानों को खोजने के लिए 'ढूंढें' फ़ंक्शन का उपयोग करें जहां '0' तीव्रता मान के बजाय '1' है। फिर, पठार की कुल लंबाई प्राप्त करने के लिए उस सरणी की लंबाई की गणना करें, जो पिक्सेल में एक सफेद वर्ग की चौड़ाई के बराबर होनी चाहिए। ControlPlateauList = शून्य (1, लंबाई (लोक));

i = 1: लंबाई (स्थानीय) के लिए

अगर मैं == लंबाई (स्थानीय)

पठार = ढूंढें (सी 1 (लोक (i): अंत,:, 1));

अन्यथा

पठार = ढूंढें (c1(loc(i):loc(i+1)-1,:, 1));

समाप्त

ControlPlateauList(i) = लंबाई (पठार);

समाप्त

चरण 5: परीक्षण छवि के लिए चरण 3 और 4 दोहराएं

परीक्षण छवि के लिए चरण 3 और 4 दोहराएं
परीक्षण छवि के लिए चरण 3 और 4 दोहराएं

*नोट: परीक्षण छवि पर इम्प्रोफाइल रेखा खींचते समय, इसे उन वर्गों के आर-पार खींचना सुनिश्चित करें जो आपके द्वारा नियंत्रण छवि पर खींची गई रेखा के अनुरूप हों।

चरण 6: लेंस के आवर्धन की गणना करें।

लेंस के आवर्धन की गणना करें।
लेंस के आवर्धन की गणना करें।

बढ़े हुए माप की गणना पठार की लंबाई के माध्य को विभाजित करके की जाती है, जिसकी गणना चरण 5 में की गई थी, नियंत्रण पठार की लंबाई के माध्यम से, जिसकी गणना चरण 4 में की गई थी। इसकी गणना १.०८८४ है।

आवर्धन = माध्य (पठारसूची)/माध्य (कंट्रोलप्लेटोलिस्ट);

चरण 7: इंटरपोलेशन के माध्यम से आर-स्क्वायर और उपयोगकर्ता के नुस्खे ढूँढना

इंटरपोलेशन के माध्यम से आर-स्क्वायर और उपयोगकर्ता के नुस्खे ढूँढना
इंटरपोलेशन के माध्यम से आर-स्क्वायर और उपयोगकर्ता के नुस्खे ढूँढना

कोड का उपयोग करना:

  • md1 = फिटलम (दिया गया प्रिस्क्रिप्शन, मैगअरे);
  • रुपये वर्ग = md1. Rsquared.साधारण;

हम दिए गए प्रेसीप्शन (हमारे लेंस दिए गए मान) बनाम मैगएरे (आवर्धन माप अनुपात की एक सरणी जो हमने पहले गणना की थी) के आर-वर्ग मान को पा सकते हैं। एक उच्च पर्याप्त आर-वर्ग मूल्य होने से, यह अनुमान लगाया जा सकता है कि इस पद्धति के उपयोग को सही ठहराने के लिए एक मजबूत पर्याप्त सहसंबंध है। इस विशेष मामले के लिए, आर-वर्ग मान 0.9912 था, जो एक मजबूत सहसंबंध का सुझाव देता है और इसलिए विश्लेषण में इस पद्धति का उपयोग करने में उचित है।

फ़ंक्शन का उपयोग करना:

प्रिस्क्रिप्शन = इंटरप 1 (मैगएरे, गिवेन प्रिस्क्रिप्शन, आवर्धन, 'रैखिक');

हम अपने आवर्धन अनुपात (y-अक्ष पर एक मान) के संबंधित नुस्खे मूल्य (x-अक्ष पर) को प्रक्षेपित कर सकते हैं और यह पता लगा सकते हैं कि उपयोगकर्ता का नुस्खा क्या है।

इस पद्धति के काम करने के लिए इंटरपोलिंग डेटा महत्वपूर्ण है क्योंकि यह हमें उस जानकारी के बारे में धारणा बनाने की अनुमति देता है जो हमारे पास नहीं है, हमारे पास मौजूद जानकारी के आधार पर। जबकि सर्वोत्तम फिट की एक पंक्ति तकनीकी रूप से इस धारणा के लिए एक मजबूत उम्मीदवार होगी, आउटपुट की संख्या को कम करने के लिए सीमाएं बनाना उसी प्रभाव की सेवा करता है जैसे पर्चे चश्मा वैसे भी वृद्धिशील समान मूल्यों में आते हैं। इसे बाद के चरणों में समझाया गया है।

चरण 8: उपयोगकर्ता के नुस्खे को ग्राफ़ पर दिखाना

एक ग्राफ पर उपयोगकर्ता के नुस्खे दिखा रहा है
एक ग्राफ पर उपयोगकर्ता के नुस्खे दिखा रहा है

निम्नलिखित कोड का उपयोग करना:

  • आकृति;
  • प्लॉट (दिया गया प्रिस्क्रिप्शन, मैगअरे, '-जी')
  • रूको
  • प्लॉट (प्रिस्क्रिप्शन, आवर्धन, 'बीपी')
  • रोके रखना
  • ग्रिड
  • लीजेंड ('डेटा', 'इंटरपोलेटेड पॉइंट्स', 'लोकेशन', 'एनडब्ल्यू')

हम एक ग्राफ प्लॉट कर सकते हैं जो एक हरे रंग की रेखा के साथ आवर्धन अनुपात बनाम दिए गए नुस्खे को दिखाता है और हमारे परिकलित आवर्धन का पाया गया डेटा एक नीले तारे के साथ हमारे प्रक्षेपित नुस्खे को दिखाता है। फिर लेजेंड शीर्षक, x-अक्ष और y-अक्ष को लेबल करता है और लेजेंड को ऊपरी बाएँ कोने में रखता है।

चरण 9: अपने नुस्खे को संक्षिप्त करें।

अपने नुस्खे को कम करें।
अपने नुस्खे को कम करें।

नुस्खे के लिए गोलाई बनाने के लिए निम्नलिखित कोड का उपयोग किया जाता है:

  • यदि प्रिस्क्रिप्शन <= 1.125

    परिकलित प्रिस्क्रिप्शन = '1.0';

  • एल्सिफ़ प्रिस्क्रिप्शन <= 1.375

    परिकलित प्रिस्क्रिप्शन = '1.25';

  • एल्सिफ़ प्रिस्क्रिप्शन <= 1.625

    परिकलित प्रिस्क्रिप्शन = '1.5';

  • एल्सिफ़ प्रिस्क्रिप्शन <= 1.875

    परिकलित प्रिस्क्रिप्शन = '1.75';

  • अन्य नुस्खे <= 2.25

    परिकलित प्रिस्क्रिप्शन = '2.0';

  • एल्सिफ़ प्रिस्क्रिप्शन <= 2.625

    परिकलित प्रिस्क्रिप्शन = '2.5';

  • एल्सिफ़ प्रिस्क्रिप्शन <= 3

    परिकलित प्रिस्क्रिप्शन = '2.75';

  • अन्य नुस्खे <= 3.375

    परिकलित प्रिस्क्रिप्शन = '3.25';

  • अन्यथा

    परिकलित प्रिस्क्रिप्शन = 'अज्ञात';

  • समाप्त

प्रक्षेप के माध्यम से पाया गया नुस्खा जरूरी वास्तविक नुस्खे को प्रतिबिंबित नहीं करता है - ऐसा इसलिए है क्योंकि मानवीय त्रुटि के कारण फोटो का विश्लेषण करने में हमेशा थोड़ा बदलाव होगा। इस प्रकार, हमें वास्तविक नुस्खे को वर्गीकृत करने के लिए इस कदम की आवश्यकता है।

जो नुस्खे दिए जाते हैं वे आमतौर पर 1.0 डायोप्टर से शुरू होते हैं और उनके नुस्खे में.25 तक बढ़ जाते हैं, इसलिए नुस्खे की गणना के बाद हम उस नुस्खे को निर्धारित करना चाहते हैं जो उपयोगकर्ता की आवश्यकता के अनुसार सबसे उपयुक्त हो। नुस्खे की गणना के बाद, हम इसके मूल्य की जांच करने के लिए दिए गए यदि कथनों के माध्यम से चलाते हैं और यह निर्धारित करते हैं कि कौन सा नुस्खा आवश्यक है। 1.125 से कम या उसके बराबर कुछ भी, तो प्रिस्क्रिप्शन 1.0 है। 1.375 से कम या उसके बराबर कुछ भी, नुस्खा 1.25 है। 1.625 से कम या उसके बराबर कुछ भी, प्रिस्क्रिप्शन 1.5 है। 1.845 से कम या उसके बराबर कुछ भी, नुस्खा 1.75 है। और इसी तरह।

हमारे पास मूल्य बढ़ रहे हैं क्योंकि हम जाँच कर रहे हैं कि क्या मान इससे कम हैं। यदि हमने मूल्यों को कम किया है तो पहला यदि कथन हर समय पहले यदि कथन को पढ़ेगा। यदि नुस्खा सबसे छोटा है, तो हम चाहते हैं कि यह तुरंत इसे सबसे छोटा मान ले, इसलिए सबसे छोटा मूल्य वह है जिसके साथ हमने शुरुआत की थी। उच्चतम मूल्य से अधिक कुछ भी इसका मतलब है कि नुस्खा हमारे डेटा के साथ सीमा में नहीं है, इसलिए यह "अज्ञात" स्ट्रिंग रीडिंग देगा।

सिफारिश की: