Turinys:
- 1 žingsnis: fotografuokite
- 2 veiksmas: įkelkite vaizdus į MATLAB
- 3 žingsnis: vaizdo analizė
- 4 žingsnis: Apskaičiuokite šaškių lentos baltų kvadratų plotį
- 5 veiksmas: pakartokite 3 ir 4 veiksmus bandomajam vaizdui
- 6 žingsnis: apskaičiuokite objektyvo padidinimą
- 7 žingsnis: R kvadrato ir vartotojo recepto radimas naudojant interpoliaciją
- 8 veiksmas: vartotojo recepto rodymas diagramoje
- 9 žingsnis: susiaurinkite receptą
Video: Akių obuolių receptas: BME60B projektas: 9 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Autoriai: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Padidinimas yra viena iš pagrindinių akinių, kurios klasifikuojamos pagal dioptrijų receptą, ypatybių. Pasak Mičigano technologijos universiteto, dioptrija yra objektyvo židinio nuotolis, paprastai matuojamas mm, metrais (Mičigano technologijos universitetas). Kadangi skaitymo akiniai turi išgaubtus lęšius, židinio nuotolis būtų teigiamas, todėl ir dioptrijos būtų teigiamos (HyperPhysics). Židinio nuotolis didėja, kai atstumas tarp objekto nutolsta nuo tikrojo objektyvo, todėl dioptrijos mažėja, nes jos yra atvirkščiai proporcingos. Todėl, turint skaitymo akinius su papildomomis dioptrijomis, objektyvas padidintų vaizdą taip, kad padidėjus dioptrijų vertei gali atrodyti, kad židinio nuotolis yra mažesnis.
Pateiktas kodas bus naudojamas prognozuojant lęšio, kurio receptas nežinomas, dioptriją. Receptui apskaičiuoti naudojami du įėjimai: valdomo fono nuotrauka nenaudojant jokių lęšių ir kita to paties fono nuotrauka, bet per pasirinktą objektyvą. Programa įvertins šių dviejų nuotraukų iškraipymus. Iš ten galėsime įvertinti objektyvo dioptriją ir pateikti rezultatą, kurį vartotojas galės peržiūrėti.
Šiam „Instructable“jums reikės:
- Nespalvotas šaškių lentos raštas, atspausdintas ant 11x8,5 dydžio popieriaus lapo
- Fotoaparatas su galimybe fiksuoti fokusavimą
- Trikojis ar kažkas panašaus į fotoaparatą
- Įvairūs skaitymo akinių receptai
- MATLAB
1 žingsnis: fotografuokite
Norėdami apskaičiuoti objektyvo padidinimą, turite sugebėti jį palyginti su faktiniu objekto dydžiu. Šiame projekte mes palyginsime padidintą vaizdą su kontroliniu vaizdu.
Taigi, pirmas žingsnis yra nufotografuoti dvi to paties vaizdo nuotraukas - pirmą tik per fotoaparatą, o antrą - per skaitymo akinių, kuriuos norite išbandyti, objektyvą.
Fotografuosite 8,5 x 11 colių juodai baltą šaškių lentą su 1 colių tinkleliu. Nustatykite fotoaparatą 11 toli nuo šaškių lentos. Prieš fotografuodami užfiksuokite fokusą šaškių lentelėje.
Nufotografuokite šaškių lentą be skaitymo akinių. Tada nieko nejudindami padėkite skaitymo akinius prieš fotoaparatą ir padarykite antrą nuotrauką.
Įsitikinkite, kad fotoaparato padėtis nesikeičia tarp nuotraukų. Vienintelis dalykas, kuris turėtų pasikeisti tarp dviejų nuotraukų, yra akinių lęšio buvimas prieš kamerą.
Kai baigsite nuotraukas, įkelkite jas į savo kompiuterį.
2 veiksmas: įkelkite vaizdus į MATLAB
Atidarykite naują scenarijų.
Pirmiausia nurodykite katalogą, kuriame saugomos nuotraukos. Tada naudokite „dir“funkciją, kad išgautumėte-j.webp
Dir = 'C: / Users / kuras / Desktop / class / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Savo projekte norėjome paraginti programos vartotoją, kuriuos failus jie norėjo palyginti. Pirmasis skyrius prašo vartotojo nurodyti kontrolinį vaizdą, o antrasis - vartotojo bandomąjį vaizdą.
- %Paklauskite vartotojo, kuris failas yra kontrolinis vaizdas.
- Valdymas = įvestis („kontrolinio vaizdo#. / N“);
- ControlFile = [GetDir (Control).name]
- %Paklauskite vartotojo, kuris failas yra vaizdas, kurį jis nori analizuoti.
- SelectFile = input ('\ n# paveikslėlio, kurį norite analizuoti. / N');
- PrescripFile = [GetDir (ChooseFile).name];
3 žingsnis: vaizdo analizė
Spalvotas vaizdas MATLAB yra MxNx3 dydžio, o pilkos spalvos vaizdas yra MxN. Tai reiškia, kad greičiau patobulinti/redaguoti pilkų atspalvių vaizdą, nes yra mažiau duomenų, kuriuos reikia sekti. Naudokite rgb2gray, jei norite konvertuoti vaizdą į pilkos spalvos skalę. (Imrotate funkcija buvo naudojama, nes mūsų nuotraukos buvo horizontaliai - ši kodo eilutė gali būti nereikalinga jūsų versijoje.)
- %konvertuoti į pilkos spalvos ir pasukti
- I = imread („ControlFile“);
- I = rgb2 pilka (I);
- I = imatuoti (I, 90);
Tada parodykite vaizdą. Pogrupio funkcija naudojama tam, kad vėliau bandomasis vaizdas galėtų būti šalia valdiklio.
- %ekranas
- figūra 1);
- papildomas sklypas (1, 2, 1)
- imshow (I);
- pavadinimas („ControlFile“);
Naudokite „imcrop“, kad paragintumėte naudotoją apkarpyti šaškių lentą iš viso vaizdo. Šis kodas taip pat rodo pranešimų laukelį, kuriame pateikiamos instrukcijos vartotojui.
- %apkarpyti šaškių lentą analizei
- waitfor (msgbox ({'Naudokite kryželius, kad iškirptumėte šaškių lentą.', 'Tada dukart spustelėkite dominančią sritį.'}));
- I_crop = imcrop (I);
Naudokite imbinarize, kad vaizdas būtų dvejetainis.
I_binary = imbinarize (I_crop);
4 žingsnis: Apskaičiuokite šaškių lentos baltų kvadratų plotį
Tada paraginkite vartotoją nubrėžti liniją per vaizdą naudodami „imline“. Ši linija turėtų eiti horizontaliai per šaškių lentą. Jis turėtų prasidėti ir baigtis juodame kvadrate (nesvarbu, kur)- taip yra todėl, kad matuojame ne juodų, o baltų kvadratų plotį.
- %brėžti liniją
- figūra 1)
- papildomas sklypas (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Spustelėkite ir vilkite, kad nubrėžtumėte liniją, apimančią 9 langelius, iš juodos vietos į juodą erdvę.', 'Dukart spustelėkite, kad patvirtintumėte.'});
- linija = imline;
- pozicija = laukti (eilutė);
- galiniai taškai = line.getPosition;
Ištraukite nubrėžtos linijos galinių taškų X ir Y koodinatus.
- X = galiniai taškai (:, 1)
- Y = galiniai taškai (:, 2);
Naudokite „improfile“, kad sukurtumėte grafiką pagal intensyvumą, nustatytą palei nubrėžtą liniją. Tai turėtų būti panaši į kvadratinę bangą nuo 0 (juoda) iki 1 (balta). Taip pat apskaičiuokite viršūnes ir jų vietas.
- paveikslas (2)
- papildomas sklypas (1, 2, 1)
- pavadinimas („Vaizdo intensyvumas visoje įrašymo linijoje (valdymas)“)
- improfile (I_binary, X, Y); tinklelis;
- [~, ~, c1, ~, ~] = improfile (I_binary, X, Y);
- [smailės, loc] = findpeaks (c1 (:,:, 1));
- palauk
- sklypas (loc, smailės, 'ro');
- susilaikyti
Naudodami for ciklą, suraskite kiekvieno plokščiakalnio ilgį improfiliniame grafike. Vykdykite „for“ciklą tokiam pačiam smailių kiekiui, koks yra improvizuoto grafiko. Norėdami apskaičiuoti kiekvieno plokščiakalnio ilgį, naudokite funkciją „rasti“, kad surastumėte visas vietas, kuriose yra „1“, o ne „0“intensyvumo vertė. Tada apskaičiuokite to masyvo ilgį, kad gautumėte bendrą plokščiakalnio ilgį, kuris turėtų būti lygus balto kvadrato pločio pločiui. ControlPlateauList = nuliai (1, ilgis (loc));
i = 1: ilgis (lok)
jei i == ilgis (loc)
plokščiakalnis = radinys (c1 (loc (i): galas,:, 1));
Kitas
plokščiakalnis = radinys (c1 (loc (i): loc (i+1) -1,:, 1));
galas
ControlPlateauList (i) = ilgis (plokščiakalnis);
galas
5 veiksmas: pakartokite 3 ir 4 veiksmus bandomajam vaizdui
*Pastaba: nubrėždami bandomojo vaizdo improfilinę liniją, būtinai nubrėžkite ją per kvadratus, atitinkančius liniją, kurią nubrėžėte ant kontrolinio vaizdo.
6 žingsnis: apskaičiuokite objektyvo padidinimą
Padidinti matavimai apskaičiuojami padalijus plokščiakalnio ilgio vidurkį, kuris buvo apskaičiuotas 5 žingsnyje, iš kontrolinio plynaukštės ilgio vidurkio, kuris buvo apskaičiuotas 4 žingsnyje. Tai apskaičiuojama kaip 1,0884.
padidinimas = vidurkis (plokščiakalbis)/vidurkis (kontrolinis plokščiakalbis);
7 žingsnis: R kvadrato ir vartotojo recepto radimas naudojant interpoliaciją
Naudojant kodą:
- md1 = fitlm („GivenPrescription“, „MagArray“);
- Rsquared = md1. Rsquared. Ordinary;
Grafiko „R“kvadrato reikšmę galime rasti „GivenPresciption“(mūsų lęšių nurodytos vertės) ir „MagArray“(anksčiau apskaičiuotų padidinimo matavimų masyvo masyvas). Turint pakankamai didelę R kvadrato reikšmę, galima daryti išvadą, kad yra pakankamai stipri koreliacija, pateisinanti šio metodo naudojimą. Šiuo konkrečiu atveju R kvadrato vertė buvo 0,9912, o tai rodo stiprią koreliaciją, todėl yra pagrįsta naudoti šį metodą analizėje.
Naudojant funkciją:
Receptas = interp1 („MagArray“, „GivenPrescription“, padidinimas, „linijinis“);
Mes galime interpoliuoti padidinimo koeficiento (reikšmę y ašyje) atitinkančią recepto vertę (x ašyje) ir sužinoti, kas yra vartotojo nurodymas.
Duomenų interpoliavimas yra svarbus, kad šis metodas veiktų, nes leidžia mums daryti prielaidas apie informaciją, kurios neturime, remiantis turima informacija. Nors tinkamiausia linija būtų techniškai stipresnė kandidatė į šią prielaidą, ribų, skirtų išėjimų skaičiui sumažinti, sukūrimas yra toks pat, kaip ir receptinių akinių, kurių vienodos vertės padidėja. Tai paaiškinama vėlesniuose žingsniuose.
8 veiksmas: vartotojo recepto rodymas diagramoje
Naudojant šį kodą:
- figūra;
- sklypas („GivenPrescription“, „MagArray“, „-g“)
- palauk
- siužetas (Receptas, padidinimas, „bp“)
- susilaikyti
- tinklelis
- užrašas („Duomenys“, „Interpoliuoti taškai“, „Vieta“, „NW“)
Galime nubraižyti grafiką, kuriame žalios linijos rodomi didinimo koeficientai, palyginti su nurodytu receptu, ir rasti apskaičiuoto padidinimo duomenys, palyginti su mūsų interpoliuotu mėlynos žvaigždės receptu. Tada legenda pažymi pavadinimą, x ašį ir y ašį ir pateikia legendą viršutiniame kairiajame kampe.
9 žingsnis: susiaurinkite receptą
Receptui suapvalinti naudojamas šis kodas:
-
jei Receptas <= 1,125
CalculatedPrescription = '1.0';
-
elseif Receptas <= 1,375
CalculatedPrescription = '1,25';
-
elseif Receptas <= 1.625
CalculatedPrescription = '1.5';
-
elseif Receptas <= 1.875
CalculatedPrescription = '1.75';
-
elseif Receptas <= 2,25
CalculatedPrescription = '2.0';
-
elseif Receptas <= 2.625
CalculatedPrescription = '2.5';
-
elseif Receptas <= 3
CalculatedPrescription = '2.75';
-
elseif Receptas <= 3.375
CalculatedPrescription = '3.25';
-
Kitas
CalculatedPrescription = 'nežinoma';
- galas
Interpoliuotas receptas nebūtinai atspindi tikrąjį receptą - taip yra todėl, kad analizuojant nuotrauką dėl žmogaus klaidos visada bus nedidelių skirtumų. Taigi mums reikia šio žingsnio, kad būtų galima klasifikuoti tikrąjį receptą.
Skiriami receptai paprastai prasideda nuo 1,0 dioptrijos ir jų receptuose padidėja 0,25, todėl, apskaičiavę receptą, norime nustatyti receptą, kuris geriausiai atitiktų tai, ko vartotojui gali prireikti. Apskaičiavę receptą, paleidžiame jį per nurodytus If teiginius, norėdami patikrinti jo vertę ir nustatyti, kuris receptas yra būtinas. Jei viskas yra mažesnė arba lygi 1,125, tada receptas yra 1,0. Jei viskas yra mažesnė arba lygi 1,375, receptas yra 1,25. Jei viskas yra mažesnė arba lygi 1,625, receptas yra 1,5. Jei viskas yra mažesnė arba lygi 1,845, receptas yra 1,75. Ir taip toliau.
Vertės didėja, nes tikriname, ar vertės yra mažesnės nei. Jei reikšmės mažėtų, tada pirmasis teiginys visą laiką skaitytų pirmąjį, jei teiginys. Jei receptas yra mažiausias, mes norime, kad jis iš karto jį pripažintų mažiausiu, todėl mažiausia vertė yra tai, nuo ko pradėjome. Viskas, kas didesnė už didžiausią vertę, reiškia, kad receptas neatitinka mūsų duomenų, todėl „Nežinoma“eilutė bus rodoma.
Rekomenduojamas:
Papildomos dėžutės receptas (aparatinės įrangos remiksas / grandinės lenkimas): 11 žingsnių (su paveikslėliais)
Papildomos dėžutės receptas (aparatinės įrangos remiksas / grandinės lenkimas): aparatinės įrangos permaišymas yra būdas iš naujo išnagrinėti muzikos technologijų pranašumus. „Companion Boxes“yra grandinės išlenkti „pasidaryk pats“elektroniniai muzikos instrumentai. Jų skleidžiami garsai priklauso nuo naudojamos grandinės. Mano sukurti prietaisai yra pagrįsti daugiafunkciniu
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): 3 žingsniai
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): NEDARYKITE ŠIO NAUDOTI USB! iš visų komentarų sužinojau, kad tai gali pakenkti jūsų kompiuteriui. mano kompiuteris gerai. Naudokite 600 mA 5v telefono įkroviklį. Aš tai naudoju ir jis veikia gerai, ir niekas negali būti sugadintas, jei naudosite apsauginį kištuką, kad sustabdytumėte maitinimą
LED lemputės modernizavimas „Halo 998“akių obuolių apdailai: 8 žingsniai
LED lemputės modifikavimas „Halo 998“akių obuolių apdailai: šioje instrukcijoje aprašoma, kaip pakeisti „Halo 998“akies obuolio apdailos detales, kad jos atitiktų „LumiSelect PAR/R16“reguliuojamą lemputę iš „earthled.com“. LED lemputė yra per didelė, kad tilptų per akies obuolio angą gabalas, bet šiek tiek
Obuolių sėklos „Maracas“: 4 žingsniai
Obuolių sėklos „Maracas“: ar jums patinka jūsų aplinka? Meilė marakams? Štai kaip perdirbti namų apyvokos daiktus į marakas
Kaip pasigaminti obuolių girliandą rudeniui ar grįžimui į mokyklą: 13 žingsnių (su nuotraukomis)
Kaip padaryti obuolių girliandą rudeniui ar grįžti į mokyklą: Anjeanette iš „RootsAndWingsCo“padarė šią žavingą obuolių girliandą iš veltinio ir medžiagos. Tai buvo paprastas projektas, kurį gali padaryti net tie, kurie sako, kad nemoka siūti! (Kol galėsite užsukti adatą.)