![Göz kürənizin resepti: BME60B Layihəsi: 9 addım Göz kürənizin resepti: BME60B Layihəsi: 9 addım](https://i.howwhatproduce.com/images/001/image-791-57-j.webp)
Mündəricat:
- Addım 1: Foto çəkin
- Addım 2: Şəkilləri MATLAB -a yükləyin
- Addım 3: Şəkil təhlili
- Addım 4: Dama lövhəsindəki Ağ Kvadratların Genişliyini hesablayın
- Addım 5: Test Şəkili üçün 3 və 4 -cü addımları təkrarlayın
- Addım 6: Lensin böyüdülməsini hesablayın
- Addım 7: R-kvadratını və İstifadəçinin İnterpolasiya yolu ilə reseptini tapın
- Addım 8: İstifadəçinin reseptini qrafiklə göstərmək
- Addım 9: Reseptinizi Daraltın
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-23 12:54
![Göz kürənizin resepti: BME60B Layihəsi Göz kürənizin resepti: BME60B Layihəsi](https://i.howwhatproduce.com/images/001/image-791-58-j.webp)
Müəllif: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Büyütmə, diopterlərin təyin edilməsi ilə təsnif edilən eynəkləri oxumaq üçün mövcud olan əsas xüsusiyyətlərdən biridir. Miçiqan Texnologiya Universitetinə görə, bir diopter lensin fokus uzunluğudur və ümumiyyətlə mm ilə ölçülür (Michigan Texnologiya Universiteti). Oxuyan eynəklərin qabarıq linzaları olduğundan, fokus uzunluğu pozitiv olardı və bu da diopterlərin müsbət olmasına səbəb olardı (HyperPhysics). Fokus məsafəsi obyekt arasındakı məsafə həqiqi lensdən uzaqlaşdıqca artır və bu, diopterlərin tərs mütənasib olması səbəbindən azalmasına səbəb olur. Buna görə də, əlavə diopterləri olan oxuyan eynəklərin olması, lensin görünüşünü böyütməsinə kömək edərdi ki, bu da diopterlərin dəyərini artıraraq fokus uzunluğunun daha az olduğu görünə bilər.
Təqdim olunan kod, naməlum reseptli bir lensin diopteriyasını proqnozlaşdırmaq üçün istifadə ediləcək. Resepti hesablamaq üçün iki giriş istifadə olunur: heç bir linzadan istifadə edilmədən idarə olunan fonun fotoşəkili və eyni fonda, lakin seçilmiş obyektivdən başqa bir fotoşəkil. Proqram bu iki fotoşəkil arasındakı təhrifi ölçəcək. Oradan, lensin dioptrisini təxmin edə və istifadəçinin görməsi üçün bir nəticə çıxara biləcəyik.
Bu Təlimat üçün sizə lazım olacaq:
- 11x8.5 ölçüdə kağız üzərində çap olunmuş ağ-qara dama taxtası nümunəsi
- Diqqətini kilidləmək qabiliyyətinə malik bir kamera
- Bir tripod və ya kameranı qorumaq üçün bənzər bir şey
- Oxuma eynəklərinin müxtəlif reseptləri
- MATLAB
Addım 1: Foto çəkin
![Şəkillər çək Şəkillər çək](https://i.howwhatproduce.com/images/001/image-791-59-j.webp)
![Şəkillər çək Şəkillər çək](https://i.howwhatproduce.com/images/001/image-791-60-j.webp)
![Şəkillər çək Şəkillər çək](https://i.howwhatproduce.com/images/001/image-791-61-j.webp)
Bir lensin böyüdülməsini hesablamaq üçün onu obyektin həqiqi ölçüsü ilə müqayisə etməlisiniz. Bu layihə üçün böyüdülmüş bir görüntünü bir nəzarət görüntüsü ilə müqayisə edəcəyik.
Beləliklə, ilk addım eyni şəkildəki iki fotoşəkil çəkməkdir - birincisi yalnız kamera vasitəsilə, ikincisi isə test etmək istədiyiniz oxu eynəyinin obyektivindən.
1 düymlük ızgaralı 8.5x11in ölçülü qara və ağ dama taxtasının şəklini çəkəcəksiniz. Kameranızı dama taxtasından 11 düym uzaqda qurun. Fotoşəkillər çəkməzdən əvvəl diqqəti dama taxtasına bağlayın.
Oxuma eynəyi olmadan dama taxtasının şəklini çəkin. Sonra heç bir şeyi tərpətmədən oxu eynəyini kameranın qarşısına qoyun və ikinci fotoşəkili çəkin.
Kameranızın mövqeyinin çəkilişlər arasında hərəkət etmədiyinə əmin olun. İki fotoşəkil arasında dəyişməli olan tək şey, kamera qarşısında eynək lensinin olmasıdır.
Şəkilləri bitirdikdən sonra onları kompüterinizə yükləyin.
Addım 2: Şəkilləri MATLAB -a yükləyin
![Şəkilləri MATLAB -a yükləyin Şəkilləri MATLAB -a yükləyin](https://i.howwhatproduce.com/images/001/image-791-62-j.webp)
Yeni bir skript açın.
Əvvəlcə fotoşəkillərin saxlandığı qovluğu göstərin. Sonra-j.webp
Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Layihəmiz üçün faylları müqayisə etmək istədikləri proqramın istifadəçisini xəbərdar etmək istədik. Birinci hissə istifadəçidən nəzarət şəklini, ikinci hissə isə istifadəçidən test şəklini göstərməsini xahiş edir.
- İstifadəçidən hansı faylın nəzarət görüntüsü olduğunu soruşun.
- Control = giriş ('nəzarət görüntüsünün#. / N');
- ControlFile = [GetDir (Control).adı]
- İstifadəçidən hansı faylın təhlil etmək istədiklərini soruşun.
- SelectFile = giriş ('\ n# analiz etmək istədiyiniz şəkil. / N');
- PrescripFile = [GetDir (SelectFile).adı];
Addım 3: Şəkil təhlili
![Şəkil təhlili Şəkil təhlili](https://i.howwhatproduce.com/images/001/image-791-63-j.webp)
![Şəkil təhlili Şəkil təhlili](https://i.howwhatproduce.com/images/001/image-791-64-j.webp)
MATLAB -da rəngli bir şəkil MxNx3 ölçüsündədir, boz rəngli görüntü isə MxN -dir. Bu o deməkdir ki, boz rəngli görüntünü artırmaq/redaktə etmək daha sürətlidir, çünki onu izləmək üçün daha az məlumat var. (İmrotate funksiyası, fotoşəkillərimiz üfüqi vəziyyətdə olduğu üçün istifadə edildi - bu kod xətti versiyanızda lazım ola bilər və ya olmaya bilər.)
- %boz rəngə çevirin və döndərin
- I = oxuyun (ControlFile);
- I = rgb2gray (I);
- I = imrotat (I, 90);
Sonra, görüntünü göstərin. Subplot funksiyası, test görüntüsünün sonrakı addımlarda nəzarətin yanında ola bilməsi üçün istifadə olunur.
- %ekran
- rəqəm (1);
- alt plan (1, 2, 1)
- imshow (I);
- başlıq (ControlFile);
İstifadəçidən dama lövhəsini tam görüntüdən çıxarmasını istəmək üçün imcrop istifadə edin. Aşağıdakı kod da istifadəçiyə təlimat vermək üçün bir mesaj qutusu göstərir.
- təhlili üçün dama çıxarmaq
- waitfor (msgbox ({'Dama taxtasını kəsmək üçün çarpaz tüklərdən istifadə edin.', 'Sonra maraq dairəsinə iki dəfə klikləyin.'})));
- I_crop = imcrop (I);
Görüntünü ikiqatlaşdırmaq üçün imbinarize istifadə edin.
I_binary = imbinarize (I_crop);
Addım 4: Dama lövhəsindəki Ağ Kvadratların Genişliyini hesablayın
![Dama lövhəsindəki Ağ Meydanların Genişliyini hesablayın Dama lövhəsindəki Ağ Meydanların Genişliyini hesablayın](https://i.howwhatproduce.com/images/001/image-791-65-j.webp)
![Dama lövhəsindəki Ağ Meydanların Genişliyini hesablayın Dama lövhəsindəki Ağ Meydanların Genişliyini hesablayın](https://i.howwhatproduce.com/images/001/image-791-66-j.webp)
![Dama lövhəsindəki ağ kvadratların enini hesablayın Dama lövhəsindəki ağ kvadratların enini hesablayın](https://i.howwhatproduce.com/images/001/image-791-67-j.webp)
Sonra, istifadəçini imline istifadə edərək görüntünün üzərində bir xətt çəkməsini istəyin. Bu xətt dama taxtası boyunca üfüqi şəkildə uzanmalıdır. Qara meydanda başlamalı və bitməlidir (harada olmasının əhəmiyyəti yoxdur)- bunun səbəbi qara kvadratların deyil, ağ kvadratların enini ölçəcəyik.
- %xətt çək
- rəqəm (1)
- alt plan (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Qara boşluqdan qara boşluğa 9 qutunu əhatə edən xətt çəkmək üçün klikləyin və sürükləyin.', 'Təsdiq etmək üçün iki dəfə basın.')));
- xətt = imline;
- mövqe = gözləyin (xətt);
- son nöqtələr = line.getPosition;
Çizilmiş xəttin son nöqtələri üçün X və Y koordinatlarını çıxarın.
- X = son nöqtələr (:, 1)
- Y = son nöqtələr (:, 2);
Çizilmiş xətt boyunca tapılan intensivliklərə əsaslanaraq bir qrafik yaratmaq üçün qeyri -adi istifadə edin. Bu 0 (qara) ilə 1 (ağ) arasında dəyişən bir kvadrat dalğaya bənzəməlidir. Zirvələri və onların yerlərini də hesablayın.
- rəqəm (2)
- alt plan (1, 2, 1)
- başlıq ('Yaratılmayan xətt boyunca görüntü intensivliyi (Nəzarət)')
- uyğun olmayan (I_binary, X, Y); ızgara;
- [~, ~, c1, ~, ~] = uyğunsuz (I_binary, X, Y);
- [zirvələr, loc] = findpeaks (c1 (:,,, 1));
- gözlə
- süjet (lok, zirvələr, 'ro');
- dayanmaq
For loop istifadə edərək, hər bir yaylağın uzunluğunu uyğun olmayan qrafikdə tapın. Qeyri -adi qrafikdəki eyni sayda zirvələr üçün for loopunu işlədin. Hər yaylağın uzunluğunu hesablamaq üçün '0' intensivlik dəyəri yerinə '1' olduğu bütün yerləri tapmaq üçün 'tap' funksiyasından istifadə edin. Ardından, ağ kvadratın eni ilə bərabər olan platonun ümumi uzunluğunu əldə etmək üçün o cərgənin uzunluğunu hesablayın. ControlPlateauList = sıfır (1, length (loc));
i = 1 üçün: uzunluq (loc)
əgər mən == uzunluq (yer)
yayla = tap (c1 (loc (i): son,:, 1));
başqa
yayla = tap (c1 (loc (i): loc (i+1) -1,:, 1));
bitmək
ControlPlateauList (i) = uzunluq (yayla);
bitmək
Addım 5: Test Şəkili üçün 3 və 4 -cü addımları təkrarlayın
![Test Şəkli üçün 3 və 4 -cü addımları təkrarlayın Test Şəkli üçün 3 və 4 -cü addımları təkrarlayın](https://i.howwhatproduce.com/images/001/image-791-68-j.webp)
*Qeyd: test şəklinə uyğun olmayan xətt çəkərkən, onu nəzarət görüntüsündə çəkdiyiniz xəttə uyğun olan meydanların üzərinə çəkdiyinizə əmin olun.
Addım 6: Lensin böyüdülməsini hesablayın
![Lensin böyüdülməsini hesablayın Lensin böyüdülməsini hesablayın](https://i.howwhatproduce.com/images/001/image-791-69-j.webp)
Böyüdülmüş ölçülər, 5 -ci addımda hesablanan yaylağın uzunluğunun ortalamasının 4 -cü addımda hesablanan nəzarət yaylasının uzunluğunun ortasına bölünməsi ilə hesablanır. Bunun 1.0884 olduğu hesablanır.
böyütmə = ortalama (platoList)/orta (ControlPlateauList);
Addım 7: R-kvadratını və İstifadəçinin İnterpolasiya yolu ilə reseptini tapın
![R-kvadratını və İstifadəçinin İnterpolasiya yolu ilə reseptini tapmaq R-kvadratını və İstifadəçinin İnterpolasiya yolu ilə reseptini tapmaq](https://i.howwhatproduce.com/images/001/image-791-70-j.webp)
Kodu istifadə edərək:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinal;
GiveNPresciption (linzalarımız verilən dəyərlər) və MagArray (əvvəllər hesabladığımız böyütmə ölçü nisbətlərinin bir sıra) qrafikinin R-kvadrat dəyərini tapa bilərik. Kifayət qədər yüksək R-kvadrat dəyərinə malik olmaqla, bu metodun istifadəsini əsaslandıracaq qədər güclü bir əlaqənin olduğu qənaətinə gəlmək olar. Bu xüsusi hal üçün, R-kare dəyəri 0.9912 idi, bu da güclü bir əlaqəni göstərir və buna görə də bu metodun analizdə istifadə edilməsində əsaslandırılır.
Funksiyadan istifadə edərək:
Resept = interp1 (MagArray, GivenPrescription, böyütmə, 'xətti');
Böyütmə nisbətimizin (x oxunda) uyğun resept dəyərini (y oxunda bir dəyər) interpolasiya edə və istifadəçinin reseptinin nə olduğunu tapa bilərik.
Əldə etdiyimiz məlumatlara əsaslanaraq əlimizdə olmayan məlumatlar haqqında fərziyyələr aparmağımıza imkan verdiyindən bu metodun işləməsi üçün interpolasiya məlumatları vacibdir. Ən yaxşı uyğunluq xətti bu fərziyyəyə texniki cəhətdən daha güclü bir namizəd olsa da, çıxış sayını azaltmaq üçün sərhədlər yaratmaq, resept eynəklərinin artan vahid dəyərlərə sahib olması ilə eyni təsiri təmin edir. Bu sonrakı mərhələlərdə izah ediləcəkdir.
Addım 8: İstifadəçinin reseptini qrafiklə göstərmək
![İstifadəçinin reseptini qrafiklə göstərmək İstifadəçinin reseptini qrafiklə göstərmək](https://i.howwhatproduce.com/images/001/image-791-71-j.webp)
Aşağıdakı kodu istifadə edərək:
- rəqəm;
- süjet (GivenPrescription, MagArray, '-g')
- gözlə
- süjet (resept, böyütmə, 'bp')
- dayanmaq
- ızgara
- əfsanə ('Data', 'Interpolated Points', 'Location', 'NW')
Yaşıl bir xətt ilə böyüdülmüş nisbətləri və verilən reseptə və mavi ulduzlu interpolasiya edilmiş reseptimizə görə hesablanmış böyütmə məlumatlarımızı göstərən bir qrafik qura bilərik. Sonra əfsanə başlığı, x oxunu və y oxunu etiketləyir və əfsanəni sol üst küncdə yerləşdirir.
Addım 9: Reseptinizi Daraltın
![Reseptinizi Daraltın Reseptinizi Daraltın](https://i.howwhatproduce.com/images/001/image-791-72-j.webp)
Reseptin yuvarlaqlaşdırılması üçün aşağıdakı kod istifadə olunur:
-
əgər resept <= 1.125
CalculatedPrescription = '1.0';
-
elseif Resept <= 1.375
CalculatedPrescription = '1.25';
-
elseif Resept <= 1.625
CalculatedPrescription = '1.5';
-
elseif Resept <= 1.875
CalculatedPrescription = '1.75';
-
elseif Resept <= 2.25
CalculatedPrescription = '2.0';
-
elseif Resept <= 2.625
CalculatedPrescription = '2.5';
-
elseif Resept <= 3
CalculatedPrescription = '2.75';
-
elseif Resept <= 3.375
CalculatedPrescription = '3.25';
- başqa
CalculatedPrescription = 'naməlum';
- bitmək
İnterpolasiya yolu ilə tapılan resept mütləq həqiqi resepti əks etdirmir - bunun səbəbi, insan səhvi səbəbindən fotoşəkilin təhlilində həmişə kiçik dəyişikliklər olacaq. Beləliklə, həqiqi resepti təsnif etmək üçün bu addıma ehtiyacımız var.
Verilən reseptlər adətən 1.0 diopterdən başlayır və reseptlərində.25 artar, buna görə də resepti hesabladıqdan sonra istifadəçiyə lazım ola biləcək resepti ən uyğun şəkildə təyin etmək istəyirik. Resepti hesabladıqdan sonra, dəyərini yoxlamaq və hansı reseptin lazım olduğunu müəyyən etmək üçün verilən If ifadələrində keçiririk. 1.125 -dən az və ya bərabər bir şey varsa, resept 1.0 -dir. 1.375 -dən az və ya bərabər bir şey, resept 1.25 -dir. 1.625 -dən az və ya bərabər bir şey, resept 1.5 -dir. 1.845 -dən az və ya bərabər bir şey, resept 1.75 -dir. Və s.
Dəyərlərin daha az olub olmadığını yoxladığımız üçün dəyərlərimiz artır. Azalan dəyərləri etsək, ilk if ifadəsi ilk if ifadəsini hər zaman oxuyacaq. Əgər resept ən kiçikdirsə, dərhal ən kiçiyi kimi tanımasını istəyirik, buna görə də ən kiçik dəyərlə başladığımız şeydir. Ən yüksək dəyərdən yüksək bir şey, reseptin məlumatlarımıza uyğun olmadığını bildirir, buna görə də "Naməlum" sətir oxunuşunu verəcəkdir.
Tövsiyə:
Gözəl göz: 10 addım
![Gözəl göz: 10 addım Gözəl göz: 10 addım](https://i.howwhatproduce.com/images/001/image-50-32-j.webp)
Watchful Eye: Watchful Eye, insanlara dostlarının və sevdiklərinin birlikdə bir gecədən sonra evlərini təhlükəsiz etdiklərini bilmələrinə kömək etmək məqsədi ilə hazırlanmış bir PIR sensor obyektidir. Bir -birimizin yanından ayrılaraq "Hamımız o gecələri keçiririk:"
Göz İzləmə ilə Hərəkətli Motor: 8 addım
![Göz İzləmə ilə Hərəkətli Motor: 8 addım Göz İzləmə ilə Hərəkətli Motor: 8 addım](https://i.howwhatproduce.com/images/001/image-501-26-j.webp)
Göz İzləmə ilə Hərəkətli Motor: Hal -hazırda göz izləmə sensorları müxtəlif sahələrdə daha çox yayılmışdır, lakin kommersiya baxımından daha çox interaktiv oyunlar üçün tanınırlar. Bu dərslik çox mürəkkəb olduğundan və getdikcə daha çox istifadə edildiyinə görə sensorları inkişaf etdirmək kimi davranmır
Göz Qəyyumu: Səs Tetikli Göz Qoruması: 9 Addım (Şəkillərlə birlikdə)
![Göz Qəyyumu: Səs Tetikli Göz Qoruması: 9 Addım (Şəkillərlə birlikdə) Göz Qəyyumu: Səs Tetikli Göz Qoruması: 9 Addım (Şəkillərlə birlikdə)](https://i.howwhatproduce.com/images/010/image-29909-j.webp)
Eye Guardian: Sound Triggered Eye Protection: Eye Guardian, Arduino ilə işləyən, Yüksək Desibelli davamlı səslə tetiklenen göz qoruyucu geyimdir. Ağır avadanlıq səsini algılar və avadanlıq işləyərkən qoruyucu gözlükləri azaldır. İlk addımda Inspirati'yi izah edəcəyəm
Üçüncü Göz (Arduino Layihəsi): 3 addım
![Üçüncü Göz (Arduino Layihəsi): 3 addım Üçüncü Göz (Arduino Layihəsi): 3 addım](https://i.howwhatproduce.com/images/004/image-10597-j.webp)
Üçüncü Göz (Arduino Layihəsi): Xəyal ovuna getmək istədiyinizi təsəvvür edin, ancaq bir çox təcrübəli ovçu və psixi istifadə etməməyi tövsiyə etdiyiniz ouija lövhəsindən başqa heç bir avadanlığınız yoxdur və telefonunuz EVP qeyd cihazı. Açmağa cəhd etdinizmi
Mənim Kiçik Vallahım: Boğaz Resepti + Bir neçə Məsləhət və Fənd: 8 Adım
![Mənim Kiçik Vallahım: Boğaz Resepti + Bir neçə Məsləhət və Fənd: 8 Adım Mənim Kiçik Vallahım: Boğaz Resepti + Bir neçə Məsləhət və Fənd: 8 Adım](https://i.howwhatproduce.com/images/001/image-2263-59-j.webp)
Mənim Kiçik Vallahım: Bir Vərdiş Tarifi + Bir neçə Məsləhət və Fənd: XƏBƏRDARLIQ: İndi mənim ilk Təlimatçılığa girirsən və çox axmaqlıq və planlaşdırma və/və ya bacarıq çatışmazlığı ilə qarşılaşa bilərsən. Hər gün istifadə etdiyim şəxsi Tiny Whoop quruluşumdur, buna görə də paylaşacağımı düşündüm. Səyahət dostudur (yox