সুচিপত্র:

আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প: 9 টি ধাপ
আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প: 9 টি ধাপ

ভিডিও: আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প: 9 টি ধাপ

ভিডিও: আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প: 9 টি ধাপ
ভিডিও: আপনার চোখের পাওয়ার কত দেখে নিন? ৯২% মানুষই এই ভুলটা করে থাকে 2024, জুলাই
Anonim
আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প
আপনার চোখের পলকের প্রেসক্রিপশন: একটি BME60B প্রকল্প

লিখেছেন: হান্না সিলোস, সাং হি কিম, টমাস ভাজকুয়েজ, প্যাট্রিক ভিসতে

ম্যাগনিফিকেশন হল চশমা পড়ার অন্যতম প্রধান বৈশিষ্ট্য, যা তাদের ডায়াপ্টারের প্রেসক্রিপশন দ্বারা শ্রেণীবদ্ধ করা হয়। মিশিগান টেকনোলজি ইউনিভার্সিটির মতে, একটি ডায়োপ্টার হল লেন্সের ফোকাল দৈর্ঘ্য, সাধারণত মিমি ইউনিটে মিমি (মিশিগান টেকনোলজি ইউনিভার্সিটি) পরিমাপ করা হয়। যেহেতু চশমা পড়ার উত্তল লেন্স রয়েছে, ফোকাল দৈর্ঘ্য ইতিবাচক হবে, যার ফলে ডায়োপারগুলিও ইতিবাচক হবে (হাইপারফিজিক্স)। বস্তুর মধ্যকার দূরত্ব প্রকৃত লেন্স থেকে আরও দূরে সরে যাওয়ার সাথে সাথে ফোকাল দৈর্ঘ্য বৃদ্ধি পায় এবং এটি ডায়োপারগুলিকে হ্রাসের দিকে নিয়ে যায় কারণ তারা বিপরীতভাবে আনুপাতিক। অতএব, অতিরিক্ত ডাইপটারের সাথে চশমা পড়া লেন্সকে ভিউ জুম করতে সাহায্য করবে যাতে মনে হতে পারে যে ফোকাল দৈর্ঘ্য ডাইপটারের মান বাড়িয়ে কম।

উপস্থাপিত কোডটি একটি অজানা প্রেসক্রিপশন সহ একটি লেন্সের ডাইপটারের পূর্বাভাস দিতে ব্যবহৃত হবে। প্রেসক্রিপশন গণনা করার জন্য দুটি ইনপুট ব্যবহার করা হয়: কোন লেন্স ব্যবহার না করে নিয়ন্ত্রিত পটভূমির একটি ছবি, এবং একই পটভূমির আরেকটি ছবি কিন্তু পছন্দের লেন্সের মাধ্যমে। প্রোগ্রামটি এই দুটি ছবির মধ্যে বিকৃতি পরিমাপ করবে। সেখান থেকে, আমরা লেন্সের ডায়োপারটি অনুমান করতে এবং ব্যবহারকারীর দেখার জন্য একটি ফলাফল তৈরি করতে সক্ষম হব।

এই নির্দেশের জন্য, আপনার প্রয়োজন হবে:

  • কাগজের পাতায় 11x8.5 এ ছাপানো একটি কালো-সাদা চেকারবোর্ড প্যাটার্ন
  • একটি ক্যামেরা যার ফোকাস লক করার ক্ষমতা রয়েছে
  • একটি ট্রাইপড, বা ক্যামেরা সুরক্ষিত করার অনুরূপ কিছু
  • চশমা পড়ার বিভিন্ন প্রেসক্রিপশন
  • ম্যাটল্যাব

ধাপ 1: ছবি তুলুন

ছবি তোলা
ছবি তোলা
ছবি তোলা
ছবি তোলা
ছবি তোলা
ছবি তোলা

একটি লেন্সের বিবর্ধন গণনা করার জন্য, আপনাকে এটি বস্তুর প্রকৃত আকারের সাথে তুলনা করতে সক্ষম হতে হবে। এই প্রকল্পের জন্য, আমরা একটি বৃহত্তর চিত্রকে একটি নিয়ন্ত্রণ চিত্রের সাথে তুলনা করব।

সুতরাং, প্রথম ধাপ হল একই চিত্রের দুটি ছবি তোলা - প্রথমটি কেবল ক্যামেরার মাধ্যমে, এবং দ্বিতীয়টি পড়ার চশমার লেন্সের মাধ্যমে যা আপনি পরীক্ষা করতে চান।

আপনি 1in গ্রিড সহ 8.5x11in কালো এবং সাদা চেকারবোর্ডের ছবি তুলবেন। চেকারবোর্ড থেকে 11in দূরে আপনার ক্যামেরা সেট আপ করুন। ছবি তোলার আগে, চেকারবোর্ডে ফোকাস লক করুন।

পড়ার চশমা ছাড়া চেকারবোর্ডের ছবি তুলুন। তারপর, কিছু না সরিয়ে, ক্যামেরার সামনে পড়ার চশমা রাখুন এবং দ্বিতীয় ছবি তুলুন।

নিশ্চিত করুন যে আপনার ক্যামেরার অবস্থান শটের মাঝে না যায়। দুটি ফটোর মধ্যে যে জিনিসটি পরিবর্তন করা উচিত তা হল ক্যামেরার সামনে চশমার লেন্সের উপস্থিতি।

যখন আপনি ফটোগুলি সম্পন্ন করেন, সেগুলি আপনার কম্পিউটারে আপলোড করুন।

ধাপ 2: ম্যাটল্যাবে ছবিগুলি লোড করুন

ম্যাটল্যাবে ছবিগুলি লোড করুন
ম্যাটল্যাবে ছবিগুলি লোড করুন

একটি নতুন স্ক্রিপ্ট খুলুন।

প্রথমে, ফটোগুলি কোথায় সংরক্ষিত আছে তা নির্দেশ করুন। তারপর,-j.webp

Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*। Jpg');

আমাদের প্রকল্পের জন্য, আমরা প্রোগ্রামের ব্যবহারকারীকে অনুরোধ করতে চাই যে কোন ফাইলগুলির সাথে তারা তুলনা করতে চায়। প্রথম বিভাগটি ব্যবহারকারীকে কন্ট্রোল ইমেজ উল্লেখ করতে বলে, এবং দ্বিতীয়টি ব্যবহারকারীকে টেস্ট ইমেজ নির্দিষ্ট করতে বলে।

  • %ব্যবহারকারীকে জিজ্ঞাসা করুন কোন ফাইলটি কন্ট্রোল ইমেজ।
  • কন্ট্রোল = ইনপুট ('# কন্ট্রোল ইমেজ। / n');
  • ControlFile = [GetDir (Control).name]
  • %ব্যবহারকারীকে জিজ্ঞাসা করুন কোন ফাইলটি তারা বিশ্লেষণ করতে চায়।
  • SelectFile = ইনপুট ('image n# ইমেজ যা আপনি বিশ্লেষণ করতে চান। / n');
  • PrescripFile = [GetDir (ChooseFile).name];

ধাপ 3: চিত্র বিশ্লেষণ

চিত্র বিশ্লেষণ
চিত্র বিশ্লেষণ
চিত্র বিশ্লেষণ
চিত্র বিশ্লেষণ

MATLAB- এ একটি রঙিন ছবি MxNx3 আকারের, যেখানে একটি গ্রেস্কেল ইমেজ MxN। এর মানে হল যে একটি গ্রেস্কেল ইমেজ বাড়ানো/সম্পাদনা করা আরও দ্রুত কারণ ট্র্যাক রাখার জন্য কম ডেটা আছে। (ইমরোটেট ফাংশনটি ব্যবহার করা হয়েছিল কারণ আমাদের ছবিগুলি অনুভূমিকভাবে এসেছে - কোডের এই লাইনটি আপনার সংস্করণে প্রয়োজন হতে পারে বা নাও হতে পারে।)

  • %গ্রেস্কেল রূপান্তর এবং ঘোরান
  • আমি = imread (ControlFile);
  • আমি = rgb2gray (আমি);
  • আমি = imrotate (I, 90);

পরবর্তী, ছবিটি প্রদর্শন করুন। সাবপ্লট ফাংশনটি ব্যবহার করা হয় যাতে পরীক্ষার চিত্র পরবর্তী ধাপে নিয়ন্ত্রণের পাশে থাকতে সক্ষম হয়।

  • %ডিসপ্লে
  • চিত্র 1);
  • সাবপ্লট (1, 2, 1)
  • imshow (আমি);
  • শিরোনাম (কন্ট্রোলফিল);

ব্যবহারকারীকে সম্পূর্ণ চিত্র থেকে চেকারবোর্ড ক্রপ করার জন্য অনুরোধ করার জন্য imcrop ব্যবহার করুন। নিচের কোডটি ব্যবহারকারীকে নির্দেশনা প্রদানের জন্য একটি বার্তা বাক্সও দেখায়।

  • বিশ্লেষণের জন্য %চেকবোর্ড ক্রপ আউট
  • waitfor (msgbox ({'চেকবোর্ড ক্রপ করার জন্য ক্রস হেয়ার ব্যবহার করুন।', 'তারপর আগ্রহের এলাকায় ডাবল ক্লিক করুন।'));
  • I_crop = imcrop (I);

ইমেজ বাইনারাইজ করতে imbinarize ব্যবহার করুন।

I_binary = imbinarize (I_crop);

ধাপ 4: চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।

চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।
চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।
চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।
চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।
চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।
চেকারবোর্ডে সাদা বর্গক্ষেত্রের প্রস্থ গণনা করুন।

এরপরে, ব্যবহারকারীকে ইমলাইন ব্যবহার করে চিত্র জুড়ে একটি রেখা আঁকতে প্রম্পট করুন। এই লাইনটি চেকারবোর্ড জুড়ে অনুভূমিকভাবে চালানো উচিত। এটি একটি কালো বর্গ থেকে শুরু হওয়া উচিত এবং শেষ হওয়া উচিত (এটি কোথায় গুরুত্বপূর্ণ নয়)- এর কারণ আমরা সাদা বর্গক্ষেত্রের প্রস্থ পরিমাপ করব, কালো নয়।

  • %রেখা অংকন করুন
  • চিত্র 1)
  • সাবপ্লট (1, 2, 1)
  • imshow (I_binary);
  • অপেক্ষা করুন
  • লাইন = ইমলাইন;
  • অবস্থান = অপেক্ষা (লাইন);
  • শেষ পয়েন্ট = line.getPosition;

টানা লাইনের শেষ পয়েন্টের জন্য X এবং Y coodinates বের করুন।

  • এক্স = এন্ডপয়েন্ট (:, 1)
  • Y = শেষ পয়েন্ট (:, 2);

আঁকা রেখার সাথে পাওয়া তীব্রতার উপর ভিত্তি করে একটি গ্রাফ তৈরি করতে ইমপ্রোফাইল ব্যবহার করুন। এটি 0 (কালো) থেকে 1 (সাদা) পর্যন্ত বর্গাকার তরঙ্গের অনুরূপ হওয়া উচিত। শিখর এবং তাদের অবস্থানগুলিও গণনা করুন।

  • চিত্র ২)
  • সাবপ্লট (1, 2, 1)
  • শিরোনাম ('ইমপ্রোফাইল লাইন জুড়ে ছবির তীব্রতা (নিয়ন্ত্রণ)')
  • improfile (I_binary, X, Y); গ্রিড চালু;
  • [~, ~, c1, ~, ~] = improfile (I_binary, X, Y);
  • [শিখর, loc] = findpeaks (c1 (:,:, 1));
  • অপেক্ষা কর
  • চক্রান্ত (loc, peaks, 'ro');
  • বন্ধ রাখা

একটি লুপ ব্যবহার করে ইমপ্রোফাইল গ্রাফে প্রতিটি মালভূমির দৈর্ঘ্য খুঁজুন। Improfile গ্রাফে আছে একই পরিমাণ শিখরের জন্য for loop চালান। প্রতিটি মালভূমির দৈর্ঘ্য গণনা করতে, '0' তীব্রতার মানের পরিবর্তে '1' আছে এমন সমস্ত অবস্থান খুঁজে পেতে 'ফাইন্ড' ফাংশনটি ব্যবহার করুন। তারপর, মালভূমির মোট দৈর্ঘ্য পেতে সেই অ্যারের দৈর্ঘ্য গণনা করুন, যা পিক্সেলে একটি সাদা বর্গের প্রস্থের সমান হওয়া উচিত। ControlPlateauList = zeros (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: আর-স্কোয়ার্ড এবং ইন্টারপোলেশনের মাধ্যমে ব্যবহারকারীর প্রেসক্রিপশন খোঁজা

আর-স্কোয়ার্ড এবং ইন্টারপোলেশনের মাধ্যমে ব্যবহারকারীর প্রেসক্রিপশন খোঁজা
আর-স্কোয়ার্ড এবং ইন্টারপোলেশনের মাধ্যমে ব্যবহারকারীর প্রেসক্রিপশন খোঁজা

কোড ব্যবহার করে:

  • md1 = fitlm (প্রদত্ত প্রেসক্রিপশন, ম্যাগআরে);
  • Rsquared = md1. Rsquared. Ordinary;

আমরা গ্রাফের R- স্কোয়ার্ড মান পেতে পারি (আমাদের লেন্স দেওয়া মান) বনাম ম্যাগআরে (ম্যাগনিফার পরিমাপ অনুপাতের একটি অ্যারে যা আমরা আগে গণনা করেছি)। একটি উচ্চ পর্যাপ্ত আর-স্কোয়ার্ড মান থাকার দ্বারা, এটি অনুমান করা যেতে পারে যে এই পদ্ধতির ব্যবহারের ন্যায্যতা দেওয়ার জন্য যথেষ্ট শক্তিশালী সম্পর্ক রয়েছে। এই বিশেষ ক্ষেত্রে, আর-স্কোয়ার্ড মান ছিল 0.9912, যা একটি শক্তিশালী পারস্পরিক সম্পর্কের পরামর্শ দেয় এবং তাই বিশ্লেষণে এই পদ্ধতিটি ব্যবহার করা যুক্তিযুক্ত।

ফাংশন ব্যবহার করে:

প্রেসক্রিপশন = ইন্টারপ 1 (ম্যাগআরে, দেওয়া প্রেসক্রিপশন, ম্যাগনিফিকেশন, 'লিনিয়ার');

আমরা আমাদের বিবর্ধন অনুপাত (y- অক্ষের একটি মান) এর সংশ্লিষ্ট প্রেসক্রিপশন মান (x- অক্ষের উপর) বিভক্ত করতে পারি এবং ব্যবহারকারীর প্রেসক্রিপশন কী তা খুঁজে পেতে পারি।

এই পদ্ধতির কাজ করার জন্য ইন্টারপোলেটিং ডেটা গুরুত্বপূর্ণ কারণ এটি আমাদের কাছে থাকা তথ্যের উপর ভিত্তি করে আমাদের কাছে নেই এমন তথ্য সম্পর্কে অনুমান করতে দেয়। যদিও সেরা ফিটের একটি লাইন টেকনিক্যালি এই ধারণার জন্য একটি শক্তিশালী প্রার্থী হবে, আউটপুট সংখ্যা কমাতে সীমানা তৈরি করা একই প্রভাব পরিবেশন করে যেমন প্রেসক্রিপশন চশমা ক্রমবর্ধমান অভিন্ন মানগুলিতে আসে। এটি পরবর্তী ধাপে ব্যাখ্যা করা হয়েছে।

ধাপ 8: গ্রাফে ব্যবহারকারীর প্রেসক্রিপশন দেখাচ্ছে

গ্রাফে ব্যবহারকারীর প্রেসক্রিপশন দেখাচ্ছে
গ্রাফে ব্যবহারকারীর প্রেসক্রিপশন দেখাচ্ছে

নিম্নলিখিত কোড ব্যবহার করে:

  • চিত্র;
  • প্লট (প্রদত্ত প্রেসক্রিপশন, ম্যাগআরে, '-জি')
  • অপেক্ষা কর
  • প্লট (প্রেসক্রিপশন, ম্যাগনিফিকেশন, 'বিপি')
  • বন্ধ রাখা
  • গ্রিড
  • কিংবদন্তি ('ডেটা', 'ইন্টারপোলেটেড পয়েন্টস', 'লোকেশন', 'এনডব্লিউ')

আমরা একটি গ্রাফ তৈরি করতে পারি যা ম্যাগনিফিকেশন রেশিও বনাম প্রদত্ত প্রেসক্রিপশন বনাম সবুজ রেখা এবং আমাদের গণনা করা ম্যাগনিফিকেশনের প্রাপ্ত ডেটা বনাম ব্লু স্টার দিয়ে আমাদের ইন্টারপোলেটেড প্রেসক্রিপশন দেখায়। তারপর কিংবদন্তি শিরোনাম, x- অক্ষ, এবং y- অক্ষ লেবেল এবং উপরের বাম কোণে কিংবদন্তি রাখে।

ধাপ 9: আপনার প্রেসক্রিপশন সংকীর্ণ করুন।

আপনার প্রেসক্রিপশন সংকীর্ণ করুন।
আপনার প্রেসক্রিপশন সংকীর্ণ করুন।

প্রেসক্রিপশনের জন্য রাউন্ডিং তৈরি করতে নিম্নলিখিত কোডটি ব্যবহার করা হয়:

  • যদি প্রেসক্রিপশন <= 1.125

    CalculatedPrescription = '1.0';

  • অন্যথায় প্রেসক্রিপশন <= 1.375

    ক্যালকুলেটেড প্রেসক্রিপশন = '1.25';

  • অন্যথায় প্রেসক্রিপশন <= 1.625

    ক্যালকুলেটেড প্রেসক্রিপশন = '1.5';

  • অন্যথায় প্রেসক্রিপশন <= 1.875

    গণনা করা প্রেসক্রিপশন = '1.75';

  • elseif প্রেসক্রিপশন <= 2.25

    CalculatedPrescription = '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। ইত্যাদি।

আমাদের মান বাড়ছে কারণ আমরা যাচাই করছি মানগুলি কম। যদি আমরা মানগুলি হ্রাস করে থাকি তবে প্রথম if স্টেটমেন্টটি যদি if স্টেটমেন্টটি সব সময় পড়ে। যদি প্রেসক্রিপশনটি সবচেয়ে ছোট হয়, আমরা চাই যে এটি এখনই এটিকে সবচেয়ে ছোট হিসাবে স্বীকৃতি দিন, তাই আমরা যেটা দিয়ে শুরু করেছি সেই ক্ষুদ্রতম মূল্য। সর্বোচ্চ মূল্যের চেয়ে বেশি কিছু মানে হল যে প্রেসক্রিপশন আমাদের ডেটার সাথে সীমার মধ্যে নেই, তাই এটি "অজানা" স্ট্রিং রিডিং দেবে।

প্রস্তাবিত: