فهرست مطالب:
- مرحله 1: عکس بگیرید
- مرحله 2: بارگذاری تصاویر در متلب
- مرحله 3: تجزیه و تحلیل تصویر
- مرحله 4: عرض مربع های سفید را در صفحه شطرنج محاسبه کنید
- مرحله 5: مراحل 3 و 4 را برای تصویر آزمایش تکرار کنید
- مرحله 6: بزرگنمایی لنز را محاسبه کنید
- مرحله 7: پیدا کردن مربع R و نسخه کاربر از طریق درون یابی
- مرحله 8: نمایش نسخه کاربر بر روی نمودار
- مرحله 9: نسخه خود را محدود کنید
تصویری: Eyeballing your Eyeball's Eyeballing: یک پروژه BME60B: 9 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
نویسنده: هانا سیلوس ، سان هی هی کیم ، توماس واسکز ، پاتریک ویست
بزرگنمایی یکی از ویژگی های کلیدی موجود در عینک خواندن است که با تجویز دیوپترها طبقه بندی می شود. به گفته دانشگاه فناوری میشیگان ، دیوپتر فاصله کانونی عدسی است که معمولاً بر حسب میلی متر در واحد متر اندازه گیری می شود (دانشگاه فناوری میشیگان). از آنجا که عینک های مطالعه دارای لنزهای محدب هستند ، فاصله کانونی مثبت خواهد بود و باعث مثبت شدن دیوپترها نیز می شود (HyperPhysics). فاصله کانونی با افزایش فاصله بین جسم از لنز واقعی افزایش می یابد و این امر باعث می شود دیوپترها به دلیل تناسب معکوس کاهش پیدا کنند. بنابراین ، داشتن عینک مطالعه با دیوپترهای اضافی به لنز کمک می کند تا در تصویر بزرگنمایی کند ، به طوری که ممکن است با افزایش ارزش دیوپترها فاصله کانونی کمتر به نظر برسد.
از کد ارائه شده برای پیش بینی دیوپتر لنز با نسخه ای ناشناخته استفاده می شود. از دو ورودی برای محاسبه نسخه استفاده می شود: یک عکس از پس زمینه کنترل شده بدون استفاده از لنز ، و یک عکس دیگر با همان زمینه اما از طریق لنز انتخابی. این برنامه اعوجاج بین این دو عکس را اندازه گیری می کند. از آنجا ، ما می توانیم دیوپتر لنز را تخمین زده و نتیجه ای را برای کاربر ایجاد کنیم.
برای این دستورالعمل ، شما نیاز دارید:
- یک الگوی شطرنجی سیاه و سفید بر روی کاغذ با ابعاد 11x8.5 چاپ شده است
- دوربینی با قابلیت قفل کردن فوکوس خود
- سه پایه یا چیزی مشابه برای ایمن سازی دوربین
- نسخه های مختلف عینک مطالعه
- متلب
مرحله 1: عکس بگیرید
برای محاسبه بزرگنمایی عدسی ، باید بتوانید آن را با اندازه واقعی شی مقایسه کنید. برای این پروژه ، ما یک تصویر بزرگنمایی شده را با یک تصویر کنترل مقایسه می کنیم.
بنابراین ، اولین قدم این است که دو عکس از یک عکس بگیرید - اولین عکس فقط از طریق دوربین ، و دومی از طریق عینک مطالعه که می خواهید آزمایش کنید.
شما از یک صفحه شطرنج سیاه و سفید 8.5 در 11 اینچ با یک شبکه 1 اینچ عکس می گیرید. دوربین خود را در فاصله 11 اینچی از صفحه شطرنج تنظیم کنید. قبل از گرفتن عکس ، فوکوس را روی صفحه شطرنج قفل کنید.
از صفحه شطرنج بدون عینک مطالعه عکس بگیرید. سپس ، بدون حرکت دادن چیزی ، عینک مطالعه را جلوی دوربین قرار دهید و عکس دوم را بگیرید.
اطمینان حاصل کنید که موقعیت دوربین شما بین عکس ها حرکت نمی کند. تنها چیزی که باید بین دو عکس تغییر کند وجود عدسی عینک در جلوی دوربین است.
پس از اتمام کار با عکس ها ، آنها را در رایانه خود بارگذاری کنید.
مرحله 2: بارگذاری تصاویر در متلب
یک اسکریپت جدید باز کنید.
ابتدا دایرکتوری محل ذخیره عکس ها را مشخص کنید. سپس ، از تابع dir برای استخراج تصاویر-j.webp
Dir = 'C: / Users / kuras / Desktop / class / 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) ؛
در مرحله بعد ، تصویر را نمایش دهید. تابع subplot استفاده می شود تا تصویر آزمایشی بتواند در مراحل بعدی در کنار کنترل قرار گیرد.
- ٪نمایش دادن
- شکل 1)؛
- فرع فرعی (1 ، 2 ، 1)
- نمایش (I) ؛
- عنوان (ControlFile) ؛
از imcrop استفاده کنید تا از کاربر بخواهید تخته شطرنج را از تصویر کامل برش دهد. کد زیر همچنین یک جعبه پیام برای ارائه دستورالعمل به کاربر نشان می دهد.
- ٪ تخته شطرنج را برای تجزیه و تحلیل برش دهید
- waitfor (msgbox ({'از موهای متقاطع برای بریدن صفحه شطرنجی استفاده کنید.' ، 'سپس روی ناحیه مورد علاقه خود دوبار کلیک کنید.'}))؛
- I_crop = imcrop (I)؛
برای باینار کردن تصویر از imbinarize استفاده کنید.
I_binary = بی نامگذاری (I_crop) ؛
مرحله 4: عرض مربع های سفید را در صفحه شطرنج محاسبه کنید
در مرحله بعد ، از کاربر بخواهید با استفاده از imline خطی را در سراسر تصویر بکشد. این خط باید به صورت افقی در سراسر صفحه شطرنجی اجرا شود. این باید در یک مربع سیاه شروع و پایان یابد (مهم نیست کجا)- این بدان دلیل است که ما عرض مربع های سفید را اندازه گیری می کنیم ، نه مربع های سیاه.
- ٪ رسم خط
- شکل 1)
- فرع فرعی (1 ، 2 ، 1)
- نمایش (I_binary) ؛
- waitfor (msgbox ({'برای کشیدن خطی که 9 جعبه را ترسیم می کند ، از یک فضای سیاه به یک فضای سیاه.' ، 'برای تأیید دوبار کلیک کنید.'})) ؛
- خط = خط مستقیم ؛
- موقعیت = انتظار (خط) ؛
- endpoints = line.getPosition؛
برای نقاط انتهایی خط ترسیم شده ، کدئینات X و Y را استخراج کنید.
- X = نقاط پایانی (:، 1)
- Y = نقاط پایانی (: ، 2) ؛
برای ایجاد نمودار بر اساس شدت یافت شده در امتداد خط ترسیم شده ، از improfile استفاده کنید. این باید شبیه یک موج مربعی از 0 (سیاه) تا 1 (سفید) باشد. قله ها و مکان آنها را نیز محاسبه کنید.
- شکل 2)
- فرع فرعی (1 ، 2 ، 1)
- عنوان ('شدت تصویر در خط غیرفعال (کنترل)')
- غیرفعال (I_binary، X، Y)؛ شبکه روشن است ؛
- [~ ، ~ ، c1 ، ، ~] = غیرفعال (I_binary، X، Y)؛
- [قله ، loc] = findpeaks (c1 (:،: ، 1)) ؛
- صبر کن
- طرح (محل ، قله ، 'ro') ؛
- ایستادن
با استفاده از حلقه for ، طول هر فلات را در نمودار improfile بیابید. حلقه for را برای همان قله هایی که در نمودار غیرفعال وجود دارد اجرا کنید. برای محاسبه طول هر فلات ، از تابع "پیدا" برای یافتن همه مکانهایی که به جای مقدار شدت "1" در آن 1 وجود دارد ، استفاده کنید. سپس ، طول آن آرایه را محاسبه کنید تا طول کل فلات را بدست آورید ، که باید برابر عرض یک مربع سفید در پیکسل باشد. ControlPlateauList = صفر (1 ، طول (loc))
برای i = 1: طول (loc)
اگر من == طول (loc)
فلات = find (c1 (loc (i): end،:، 1))؛
دیگری
فلات = پیدا کردن (c1 (loc (i): loc (i+1) -1 ،: ، 1)) ؛
پایان
ControlPlateauList (i) = طول (فلات) ؛
پایان
مرحله 5: مراحل 3 و 4 را برای تصویر آزمایش تکرار کنید
*توجه: هنگام کشیدن خط غیرفعال روی تصویر آزمایشی ، مطمئن شوید که آن را در مربع هایی که مطابق خطی است که روی تصویر کنترل کشیده اید بکشید.
مرحله 6: بزرگنمایی لنز را محاسبه کنید
اندازه گیری های بزرگنمایی شده با تقسیم میانگین طول فلات ، که در مرحله 5 محاسبه شد ، با میانگین طول فلات کنترل ، که در مرحله 4 محاسبه شد محاسبه می شود. این مقدار 1.0884 محاسبه می شود.
بزرگنمایی = میانگین (plateauList)/میانگین (ControlPlateauList) ؛
مرحله 7: پیدا کردن مربع R و نسخه کاربر از طریق درون یابی
با استفاده از کد:
- md1 = fitlm (GivenPrescription ، MagArray) ؛
- Rsquared = md1. Rsquared. Ordinary؛
ما می توانیم مقدار مربع R از نمودار GivenPresciption (مقادیر عدسی های ما) در مقابل MagArray (آرایه ای از نسبت های اندازه گیری بزرگنمایی که قبلاً محاسبه کرده ایم) را بیابیم. با داشتن مقدار مربع R به اندازه کافی بالا ، می توان استنباط کرد که همبستگی کافی برای توجیه استفاده از این روش وجود دارد. برای این مورد خاص ، مقدار مربع R 0.9912 بود که نشان دهنده همبستگی قوی است و بنابراین استفاده از این روش در تجزیه و تحلیل موجه است.
استفاده از تابع:
نسخه = interp1 (MagArray ، GivenPrescription ، بزرگنمایی ، "خطی") ؛
ما می توانیم مقدار تجویز مربوطه (در محور x) نسبت بزرگنمایی خود (مقدار در محور y) را در نظر بگیریم و نسخه مصرف کننده را پیدا کنیم.
درون یابی داده ها برای این روش مهم است زیرا به ما امکان می دهد بر اساس اطلاعاتی که داریم ، در مورد اطلاعاتی که نداریم فرض هایی انجام دهیم. در حالی که از نظر تکنیکی بهترین گزینه برای این فرض است ، ایجاد محدودیت برای کاهش تعداد خروجی ها همان تأثیر را دارد که به هر حال عینک های تجویزی در مقادیر یکنواخت افزایش می یابند. این در مراحل بعدی توضیح داده شده است.
مرحله 8: نمایش نسخه کاربر بر روی نمودار
با استفاده از کد زیر:
- شکل؛
- طرح (GivenPrescription ، MagArray ، '-g')
- صبر کن
- طرح (نسخه ، بزرگنمایی ، 'bp')
- ایستادن
- توری
- افسانه ('Data'، 'Interpolated Points'، 'Location'، '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 دیوپتر شروع می شوند و در نسخه های آنها 0.25 افزایش می یابد ، بنابراین پس از محاسبه نسخه ، می خواهیم نسخه ای را که به بهترین نحو با نیازهای کاربر مطابقت دارد ، تعیین کنیم. پس از محاسبه نسخه ، آن را از طریق دستورات داده شده If برای بررسی ارزش آن و تعیین نسخه ای که لازم است ، اجرا می کنیم. هر چیزی کمتر یا مساوی 1.125 ، پس نسخه 1.0 است. هر چیزی کمتر از 1.375 و نسخه آن 1.25 است. هرچیزی که کمتر یا مساوی 1.625 باشد ، نسخه 1.5 است. هرچیزی که کمتر یا مساوی 1.845 باشد ، نسخه 1.75 است. و غیره
ما مقادیر را افزایش می دهیم زیرا در حال بررسی این هستیم که آیا مقادیر کمتر از است یا خیر. اگر مقادیر را کاهش دهیم ، اولین عبارت if اولین عبارت if را تمام وقت می خواند. اگر نسخه کوچکترین است ، ما می خواهیم آن را به عنوان کوچکترین تشخیص دهد ، بنابراین به همین دلیل است که کوچکترین ارزش همان چیزی است که ما با آن شروع کردیم. هر چیزی بالاتر از بالاترین مقدار به این معناست که نسخه با داده های ما در محدوده نیست ، بنابراین رشته "ناشناخته" را می خواند.
توصیه شده:
نحوه ایجاد رادار با استفاده از آردوینو برای پروژه علمی - بهترین پروژه های آردوینو: 5 مرحله
نحوه ایجاد رادار با استفاده از آردوینو برای پروژه علمی | بهترین پروژه های آردوینو: سلام دوستان ، در این مقاله آموزشی به شما نشان خواهم داد که چگونه یک سیستم راداری شگفت انگیز ایجاد کنید که با استفاده از آردوینو نانو ساخته شده است. این پروژه برای پروژه های علمی ایده آل است و اگر برنده شدن جایزه عالی باشد ، می توانید به راحتی با سرمایه گذاری و شانس بسیار کمتری این کار را انجام دهید
Electronic Magic 8 Ball and Eyeball: 11 Step (همراه با تصاویر)
Electronic Magic 8 Ball and Eyeball: من می خواستم یک نسخه دیجیتالی از Magic 8 Ball ایجاد کنم … بدنه این دستگاه به صورت سه بعدی چاپ شده است و صفحه نمایش آن از چند وجهی در رنگ آبی به OLED کوچک تغییر یافته است که توسط یک عدد تصادفی کنترل می شود. ژنراتور برنامه ریزی شده در Arduino NANO. سپس من
10 پروژه اصلی آردوینو برای مبتدیان! حداقل با یک تخته حداقل 15 پروژه بسازید!: 6 مرحله
10 پروژه اصلی آردوینو برای مبتدیان! حداقل با یک تخته حداقل 15 پروژه بسازید!: پروژه آردوینو & amp؛ هیئت آموزشی ؛ شامل 10 پروژه اصلی آردوینو است. همه کد منبع ، فایل Gerber و موارد دیگر. بدون SMD! لحیم کاری آسان برای همه. اجزای قابل جابجایی و تعویض آسان. شما می توانید حداقل 15 پروژه را با یک برنامه
مشعل مجهز به USB! این پروژه می تواند از طریق پلاستیک / چوب / کاغذ بسوزد (پروژه سرگرم کننده همچنین باید چوبی بسیار ظریف باشد): 3 مرحله
مشعل مجهز به USB! این پروژه می تواند از طریق پلاستیک / چوب / کاغذ بسوزد (پروژه سرگرم کننده همچنین باید چوب بسیار ظریفی باشد): این USB را به کار نبرید !!!! از همه نظرات متوجه شدم که می تواند به رایانه شما آسیب برساند. کامپیوتر من خوب است از شارژر تلفن 600 ولت 5 ولت استفاده کنید. من از این استفاده کردم و خوب کار می کند و اگر از یک دوشاخه ایمنی برای قطع برق استفاده کنید ، هیچ چیزی آسیب نمی بیند
LED Bulb Retrofit برای Halo 998 Eyeball Trim: 8 مرحله
LED Bulb Retrofit for Halo 998 Eyeball Trim: این دستورالعمل نحوه اصلاح قطعات چشم Halo 998 را برای پذیرش لامپ LumiSelect PAR/R16 از earthled.com توضیح می دهد. لامپ LED آنقدر بزرگ است که نمی تواند از طریق سوراخ چشم چشم تزئین شود قطعه ، اما با کمی ef