Talaan ng mga Nilalaman:
- Hakbang 1: Kumuha ng mga Larawan
- Hakbang 2: I-load ang Mga Larawan Sa MATLAB
- Hakbang 3: Pagsusuri sa Imahe
- Hakbang 4: Kalkulahin ang Lapad ng Mga Puting Kwadro sa Checkerboard
- Hakbang 5: Ulitin ang Mga Hakbang 3 at 4 para sa Larawan ng Pagsubok
- Hakbang 6: Kalkulahin ang Laki ng Lens
- Hakbang 7: Paghanap ng R-square at Reseta ng Gumagamit Sa Pamamagitan ng Pag-iisa
- Hakbang 8: Ipinapakita ang Reseta ng Gumagamit sa isang Grap
- Hakbang 9: Paliitin ang Iyong Reseta
Video: Pag-eyeball ng Reseta ng iyong Eyeball: isang Proyekto ng BME60B: 9 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Ni: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Ang pagpapalaki ay isa sa mga pangunahing tampok na naroroon para sa baso ng pagbabasa, na nauri sa pamamagitan ng kanilang reseta ng diopters. Ayon sa Michigan Technology University, ang isang diopter ay isang focal haba ng lens, karaniwang sinusukat sa mm, sa unit ng metro (Michigan Technology University). Dahil ang baso ng baso ay may mga lente ng matambok, ang haba ng pokus ay magiging positibo, na magiging sanhi ng mga diopters na maging positibo rin (HyperPhysics). Ang haba ng focal ay tumataas habang ang distansya sa pagitan ng bagay ay nakakakuha ng mas malayo mula sa aktwal na lens, at humahantong ito sa pagbaba ng mga diopters dahil magkabaligtad ang proporsyonal. Samakatuwid, ang pagkakaroon ng baso sa pagbabasa na may karagdagang mga diopters ay makakatulong sa lens na mag-zoom sa view upang maaaring mukhang mas mababa ang focal haba sa pamamagitan ng pagtaas ng halaga ng diopters.
Ang ipinakita na code ay gagamitin upang hulaan ang diopter ng isang lens na may hindi kilalang reseta. Ginagamit ang dalawang mga input upang makalkula ang reseta: isang larawan ng kinokontrol na background nang hindi gumagamit ng anumang mga lente, at isa pang litrato ng parehong background ngunit sa pamamagitan ng lens na pinili. Susukat ng programa ang pagbaluktot sa pagitan ng dalawang litratong ito. Mula doon, magagawa naming tantyahin ang diopter ng lens at makagawa ng isang resulta upang matingnan ng gumagamit.
Para sa Maituturo na ito, kakailanganin mo ang:
- Isang pattern na black-and-white checkerboard na nakalimbag sa isang 11x8.5 sa isang sheet ng papel
- Isang kamera na may kakayahang i-lock ang pokus nito
- Isang tripod, o katulad na bagay upang ma-secure ang camera
- Iba't ibang mga reseta ng baso ng baso
- MATLAB
Hakbang 1: Kumuha ng mga Larawan
Upang makalkula ang pagpapalaki ng isang lens, kailangan mong ihambing ito sa aktwal na laki ng bagay. Para sa proyektong ito, ihinahambing namin ang isang pinalaki na imahe sa isang kontrol na imahe.
Kaya, ang unang hakbang ay kumuha ng dalawang larawan ng parehong imahe - ang una sa pamamagitan lamang ng kamera, at ang pangalawa sa pamamagitan ng lens ng mga baso na binabasa na nais mong subukan.
Kukuha ka ng larawan ng isang 8.5x11in na itim at puting checkerboard na may isang grid na 1in. I-set up ang iyong camera 11in ang layo mula sa checkerboard. Bago kumuha ng mga larawan, i-lock ang focus sa checkerboard.
Kumuha ng larawan ng checkerboard nang walang baso sa pagbabasa. Pagkatapos, nang walang paggalaw, ilagay ang baso sa harap ng camera at kunan ang pangalawang larawan.
Tiyaking ang posisyon ng iyong camera ay hindi gumagalaw sa pagitan ng mga pag-shot. Ang tanging bagay na dapat baguhin sa pagitan ng dalawang larawan ay ang pagkakaroon ng baso ng lente sa harap ng camera.
Kapag tapos ka na sa mga larawan, i-upload ang mga ito sa iyong computer.
Hakbang 2: I-load ang Mga Larawan Sa MATLAB
Magbukas ng bagong script.
Una, tukuyin ang direktoryo kung saan nakaimbak ang mga larawan. Pagkatapos, gamitin ang dir function upang kumuha ng mga imahe ng-j.webp
Dir = 'C: / Users / kuras / Desktop / class / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Para sa aming proyekto, nais naming himukin ang gumagamit ng programa kung aling mga file ang nais nilang ihambing. Hinihiling ng unang seksyon sa gumagamit na tukuyin ang imahe ng kontrol, at ang pangalawa ay nagtanong sa gumagamit na tukuyin ang imahe ng pagsubok.
- % Tanungin ang gumagamit kung aling file ang control image.
- Control = input ('# ng control image. / N');
- ControlFile = [GetDir (Control).name]
- % Tanungin ang gumagamit kung aling file ang imaheng nais nilang pag-aralan.
- ChooseFile = input ('\ n # ng imahe na nais mong pag-aralan. / N');
- PrescripFile = [GetDir (ChooseFile).name];
Hakbang 3: Pagsusuri sa Imahe
Ang isang may kulay na imahe sa MATLAB ay may sukat na MxNx3, samantalang ang isang grayscale na imahe ay MxN. Nangangahulugan ito na ito ay mas mabilis upang mapahusay / mag-edit ng isang grayscale na imahe dahil mayroong mas kaunting data upang subaybayan. Gumamit ng rgb2gray upang i-convert ang imahe sa grayscale. (Ginamit ang pagpapaandar na imrotate dahil ang aming mga larawan ay dumating sa pahalang - ang linya ng code na ito ay maaaring o hindi kinakailangan sa iyong bersyon.)
- % convert sa grayscale at paikutin
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = gumagaya (I, 90);
Susunod, ipakita ang imahe. Ginamit ang pagpapaandar ng subplot upang ang imahe ng pagsubok ay maaaring maging susunod sa kontrol sa mga susunod na hakbang.
- % display
- pigura (1);
- subplot (1, 2, 1)
- imshow (I);
- pamagat (ControlFile);
Gumamit ng imcrop upang i-prompt ang gumagamit na i-crop ang checkerboard mula sa buong imahe. Nagpapakita rin ang sumusunod na code ng isang kahon ng mensahe upang magbigay ng mga tagubilin sa gumagamit.
- % i-cut ang checkerboard para sa pagtatasa
- waitfor (msgbox ({'Gumamit ng mga cross hair upang mag-crop ng checkerboard.', 'Pagkatapos ay i-double click ang lugar ng interes.'}));
- I_crop = imcrop (I);
Gumamit ng imbinarize upang ma-binary ang imahe.
I_binary = imbinarize (I_crop);
Hakbang 4: Kalkulahin ang Lapad ng Mga Puting Kwadro sa Checkerboard
Susunod, i-prompt ang gumagamit na gumuhit ng isang linya sa buong imahe gamit ang imline. Ang linya na ito ay dapat na tumakbo nang pahalang sa buong checkerboard. Dapat itong magsimula at magtapos sa isang itim na parisukat (hindi mahalaga kung saan) - ito ay dahil sinusukat namin ang lapad ng mga puting parisukat, hindi ang mga itim.
- % gumuhit ng linya
- pigura (1)
- subplot (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'I-click at i-drag upang gumuhit ng linya na sumasaklaw sa 9 na kahon, mula sa isang itim na puwang hanggang sa isang itim na puwang.', 'I-double click upang kumpirmahin.'}));
- linya = imline;
- posisyon = maghintay (linya);
- mga endpoint = line.getPosition;
I-extract ang X at Y coodinates para sa mga endpoint ng iginuhit na linya.
- X = mga endpoint (:, 1)
- Y = mga endpoint (:, 2);
Gumamit ng hindi maayos upang makabuo ng isang grap batay sa mga intensidad na matatagpuan sa linya ng iginuhit. Ito ay dapat maging katulad ng isang parisukat na alon mula sa 0 (itim) hanggang 1 (puti). Kalkulahin ang mga taluktok at ang kanilang mga lokasyon pati na rin.
- Figure 2)
- subplot (1, 2, 1)
- pamagat ('Intindi ng imahe sa kabuuan ng linya ng hindi pagkakatugma (Control)')
- hindi maayos (I_binary, X, Y); grid sa;
- [~, ~, c1, ~, ~] = hindi maayos (I_binary, X, Y);
- [peaks, loc] = findpeaks (c1 (:,:, 1));
- hawakan mo
- balangkas (loc, peaks, 'ro');
- pigilan
Hanapin ang haba ng bawat talampas sa improfile graph gamit ang isang para sa loop. Patakbuhin ang para sa loop para sa parehong halaga ng mga taluktok doon sa hindi mabuting graph. Upang makalkula ang haba ng bawat talampas, gamitin ang pagpapaandar na 'hanapin' upang hanapin ang lahat ng mga lokasyon kung saan mayroong isang '1' sa halip na isang '0' na halaga ng kasidhian. Pagkatapos, kalkulahin ang haba ng array na iyon upang makuha ang kabuuang haba ng talampas, na dapat katumbas ng lapad ng isang puting parisukat sa mga pixel. ControlPlateauList = zero (1, haba (loc));
para sa i = 1: haba (loc)
kung ako == haba (loc)
talampas = hanapin (c1 (loc (i): pagtatapos,:, 1));
iba pa
talampas = hanapin (c1 (loc (i): loc (i + 1) -1,:, 1));
magtapos
ControlPlateauList (i) = haba (talampas);
magtapos
Hakbang 5: Ulitin ang Mga Hakbang 3 at 4 para sa Larawan ng Pagsubok
* Tandaan: kapag iginuhit ang hindi maayos na linya sa imahe ng pagsubok, siguraduhing iguhit ito sa mga parisukat na tumutugma sa linya na iginuhit mo sa control image.
Hakbang 6: Kalkulahin ang Laki ng Lens
Ang pinalaki na mga sukat ay kinakalkula sa pamamagitan ng paghahati ng ibig sabihin ng haba ng talampas, na kinakalkula sa hakbang 5, sa pamamagitan ng ibig sabihin ng haba ng control plateau, na kinakalkula sa hakbang 4. Kinakalkula ito sa 1.0884.
pag-magnify = mean (plateauList) / mean (ControlPlateauList);
Hakbang 7: Paghanap ng R-square at Reseta ng Gumagamit Sa Pamamagitan ng Pag-iisa
Gamit ang code:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Mahahanap natin ang R-square na halaga ng grap na GivenPrescipas (ang aming ibinigay na mga lente na halaga) kumpara sa MagArray (isang hanay ng mga ratios sa pagsukat ng pagpapalaki na kinakalkula namin nang mas maaga). Sa pamamagitan ng pagkakaroon ng sapat na mataas na R-square na halaga, mahihinuha na mayroong isang malakas na sapat na ugnayan upang bigyang-katwiran ang paggamit ng pamamaraang ito. Para sa partikular na kasong ito, ang R-square na halaga ay 0.9912, na nagpapahiwatig ng isang malakas na ugnayan at samakatuwid ay makatuwiran sa paggamit ng pamamaraang ito sa pagtatasa.
Gamit ang pagpapaandar:
Reseta = interp1 (MagArray, GivenPrescription, paglaki, 'linear');
Maaari naming interpolate ang kaukulang halaga ng reseta (sa x-axis) ng aming ratio ng pagpapalaki (isang halaga sa y-axis) at hanapin kung ano ang reseta ng gumagamit.
Ang interpolating data ay mahalaga upang gumana ang pamamaraang ito dahil pinapayagan kaming gumawa ng mga pagpapalagay tungkol sa impormasyong wala sa amin, batay sa impormasyong mayroon kami. Habang ang isang linya ng pinakamahusay na magkasya ay magiging mas malakas na kandidato para sa palagay na ito, ang paglikha ng mga hangganan upang mabawasan ang bilang ng mga output ay nagsisilbi ng parehong epekto habang ang mga de-resetang baso ay dumating sa mga karagdagang pagtaas ng pare-parehong halaga. Ipinaliwanag ito sa susunod na mga hakbang.
Hakbang 8: Ipinapakita ang Reseta ng Gumagamit sa isang Grap
Gamit ang sumusunod na code:
- pigura;
- balangkas (GivenPrescription, MagArray, '-g')
- hawakan mo
- balangkas (Reseta, pagpapalaki, 'bp')
- pigilan
- parilya
- alamat ('Data', 'Interpolated Points', 'Lokasyon', 'NW')
Maaari kaming magbalangkas ng isang grap na nagpapakita ng Mga Ratio ng Paglaki kumpara sa Naibigay na Reseta na may berdeng linya at ang nahanap na data ng aming kinakalkula na paglaki kumpara sa aming interpolated na reseta na may asul na bituin. Pagkatapos ang label ay lagda ng pamagat, x-axis, at y-axis at inilalagay ang alamat sa kaliwang sulok sa itaas.
Hakbang 9: Paliitin ang Iyong Reseta
Ang sumusunod na code ay ginagamit upang makagawa ng pag-ikot para sa reseta:
-
kung Reseta <= 1.125
CalculatedPrescription = '1.0';
-
kung hindi man Reseta <= 1.375
CalculatedPrescription = '1.25';
-
kung hindi man Reseta <= 1.625
CalculatedPrescription = '1.5';
-
kung hindi man Reseta <= 1.875
CalculatedPrescription = '1.75';
-
kung hindi man Reseta <= 2.25
CalculatedPrescription = '2.0';
-
kung hindi man Reseta <= 2.625
CalculatedPrescription = '2.5';
-
kung hindi man Reseta <= 3
CalculatedPrescription = '2.75';
-
kung hindi man Reseta <= 3.375
CalculatedPrescription = '3.25';
- iba pa
CalculatedPrescription = 'hindi alam';
- magtapos
Ang reseta na natagpuan sa pamamagitan ng interpolation ay hindi kinakailangang sumasalamin sa aktwal na reseta - ito ay dahil palaging may bahagyang pagkakaiba-iba sa pag-aaral ng larawan dahil sa error ng tao. Sa gayon, kailangan namin ang hakbang na ito upang maiuri ang aktwal na reseta.
Ang mga reseta na ibinibigay ay karaniwang nagsisimula mula sa 1.0 diopters at tataas ng.25 sa kanilang mga reseta, kaya pagkatapos kalkulahin ang reseta nais naming matukoy ang reseta na pinakaangkop sa maaaring kailanganin ng gumagamit. Matapos makalkula ang reseta, pinapatakbo namin ito sa ibinigay Kung mga pahayag upang suriin ang halaga nito at matukoy kung aling reseta ang kinakailangan. Anumang mas mababa sa o katumbas ng 1.125, pagkatapos ang reseta ay 1.0. Anumang mas mababa sa o katumbas ng 1.375, ang reseta ay 1.25. Anumang mas mababa sa o katumbas ng 1.625, ang reseta ay 1.5. Anumang mas mababa sa o katumbas ng 1.845, ang reseta ay 1.75. At iba pa.
Mayroon kaming mga pagpapataas ng halaga mula nang sinusuri namin kung ang mga halaga ay mas mababa sa. Kung ginawa namin ang mga halagang bumababa kung gayon ang una kung pahayag ay basahin ang una kung pahayag sa lahat ng oras. Kung ang reseta ang pinakamaliit, nais naming kilalanin ito bilang pinakamaliit kaagad, kaya't bakit ang pinakamaliit na halaga ay kung ano ang nagsimula kami. Anumang mas mataas kaysa sa pinakamataas na halaga ay nangangahulugang ang reseta ay hindi nasa saklaw ng aming data, kaya bibigyan nito ang "Hindi kilalang" pagbasa ng string.
Inirerekumendang:
Paano Magdagdag ng Mga Tampok ng IOT sa Iyong Mga Proyekto: 5 Mga Hakbang
Paano Magdagdag ng Mga Tampok ng IOT sa Iyong Mga Proyekto: Walang mas mahusay kaysa sa paggawa ng isang proyekto sa DIY na pumapalit sa isang produktong komersyal na sa tingin mo kapaki-pakinabang. Sa totoo lang, may isang bagay na mas mahusay kaysa doon. Pagdaragdag ng kakayahan ng IOT sa iyong proyekto. Pagdating sa pag-aautomat, ang mga nagsisimula ay karaniwang nakakatakot
Mga Rainbow LEDs para sa Iyong Mga Proyekto: 4 na Hakbang (na may Mga Larawan)
Mga Rainbow LEDs para sa Iyong Mga Proyekto: Kumusta kayong lahat! Ginagamit ko ang mga LED na ito para sa maraming mga pandekorasyon na proyekto at ang resulta ay laging kamangha-mangha kaya nais kong ibahagi sa iyo ang aking mga karanasan nakita ko maraming tao ang bumibili ng mga RGB LED strip control at gumagamit ng tulad ng 3 o 5 sa mode ng pagbabago ng kulay sa
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: 6 Mga Hakbang
10 Pangunahing Mga Proyekto ng Arduino para sa Mga Nagsisimula! Gumawa ng hindi bababa sa 15 Mga Proyekto Na May Isang solong Lupon !: Arduino Project & Lupon ng Tutorial; May kasamang 10 pangunahing mga proyekto ng Arduino. Lahat ng mga source code, ang Gerber file at marami pa. Walang SMD! Madaling paghihinang para sa lahat. Madaling naaalis at mapapalitan na mga bahagi. Maaari kang gumawa ng hindi bababa sa 15 mga proyekto sa isang solong bo
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: 4 Mga Hakbang (na may Mga Larawan)
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: Mahirap ang mga password … at ang pag-alala sa isang ligtas ay mas mahirap pa! Bukod dito kung mayroon kang kasama, nagbabagong password ay magtatagal ito upang mai-type. Ngunit huwag matakot sa aking mga kaibigan, mayroon akong solusyon dito! Lumikha ako ng isang maliit na awtomatikong pag-type ng makina na
Mga Tip upang Gawin ang Iyong Ideya sa Proyekto na isang Reality: 6 Mga Hakbang (na may Mga Larawan)
Mga Tip upang Gawin ang Iyong Ideya sa Proyekto na isang Reality: Ang pinakapritikang bahagi ng isang matagumpay na proyekto ay ang pagkakaroon ng isang tunay na mahusay na ideya, ngunit kung minsan ang ideya ay ang madaling bahagi! Pagkatapos nito ay dumating ang pagsusumikap sa paggawa ng isang random na flash ng henyo sa isang bagay na ang mga tao " ooh " at " ah " ov