![Praćenje očne jabučice na recept: BME60B projekat: 9 koraka Praćenje očne jabučice na recept: BME60B projekat: 9 koraka](https://i.howwhatproduce.com/images/001/image-791-57-j.webp)
Sadržaj:
- Korak 1: Snimite fotografije
- Korak 2: Umetnite slike u MATLAB
- Korak 3: Analiza slike
- Korak 4: Izračunajte širinu bijelih kvadrata na šahovnici
- Korak 5: Ponovite korake 3 i 4 za probnu sliku
- Korak 6: Izračunajte uvećanje objektiva
- Korak 7: Pronalaženje R-kvadrata i korisničkog recepta putem interpolacije
- Korak 8: Prikaz korisničkog recepta na grafikonu
- Korak 9: Suzite recept
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-23 14:37
![Pregledavanje recepta vaše očne jabučice: projekat BME60B Pregledavanje recepta vaše očne jabučice: projekat BME60B](https://i.howwhatproduce.com/images/001/image-791-58-j.webp)
Napisali: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Uvećanje je jedna od ključnih značajki prisutnih naočala za čitanje, koje su klasificirane prema recepturi dioptrije. Prema Tehničkom sveučilištu Michigan, dioptrija je žižna daljina leće, obično mjerena u mm, u jedinicama metara (Michigan Technology University). Budući da naočale za čitanje imaju konveksne leće, žižna daljina bi bila pozitivna, uzrokujući i pozitivnu dioptriju (HyperPhysics). Žižna daljina se povećava kako se udaljenost između objekta sve više udaljava od stvarnog sočiva, što dovodi do smanjenja dioptrije jer su obrnuto proporcionalne. Stoga bi naočale za čitanje s dodatnom dioptrijom pomogle objektivu da zumira prikaz tako da se može činiti da je žižna daljina manja povećanjem vrijednosti dioptrije.
Predstavljeni kôd će se koristiti za predviđanje dioptrije sočiva nepoznatog recepta. Za unos recepta koriste se dva ulaza: fotografija kontrolirane pozadine bez upotrebe objektiva i još jedna fotografija iste pozadine, ali kroz objektiv po izboru. Program će mjeriti izobličenje između ove dvije fotografije. Odatle ćemo moći procijeniti dioptriju objektiva i proizvesti rezultat koji će korisnik moći vidjeti.
Za ovaj Instructable trebat će vam:
- Crno-bijeli uzorak šahovske ploče odštampan na listu papira dimenzija 11x8,5
- Kamera sa mogućnošću zaključavanja fokusa
- Stativ ili nešto slično za pričvršćivanje fotoaparata
- Razni recepti za naočare za čitanje
- MATLAB
Korak 1: Snimite fotografije
![Snimite fotografije Snimite fotografije](https://i.howwhatproduce.com/images/001/image-791-59-j.webp)
![Snimite fotografije Snimite fotografije](https://i.howwhatproduce.com/images/001/image-791-60-j.webp)
![Snimite fotografije Snimite fotografije](https://i.howwhatproduce.com/images/001/image-791-61-j.webp)
Da biste izračunali povećanje objektiva, morate ga moći usporediti sa stvarnom veličinom objekta. Za ovaj projekat ćemo upoređivati uvećanu sliku sa kontrolnom slikom.
Stoga je prvi korak snimiti dvije fotografije iste slike - prvu samo kamerom, a drugu kroz sočivo naočara za čitanje koje želite testirati.
Snimit ćete crno -bijelu šahovnicu dimenzija 8,5 x 11 inča s rešetkom od 1 inča. Postavite kameru 11 inča od šahovnice. Prije snimanja fotografija, fokus fokusirajte na šahovnicu.
Fotografirajte šahovnicu bez naočala za čitanje. Zatim, ne pomerajući ništa, stavite naočare za čitanje ispred kamere i snimite drugu fotografiju.
Pazite da se položaj vaše kamere ne pomjera između snimaka. Jedina stvar koja bi se trebala promijeniti između dvije fotografije je prisutnost naočara naočara ispred kamere.
Kada završite sa fotografijama, prenesite ih na računar.
Korak 2: Umetnite slike u MATLAB
![Učitajte slike u MATLAB Učitajte slike u MATLAB](https://i.howwhatproduce.com/images/001/image-791-62-j.webp)
Otvorite novu skriptu.
Prvo navedite direktorij u kojem su fotografije pohranjene. Zatim upotrijebite funkciju dir za izdvajanje-j.webp
Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Za naš projekt, željeli smo uputiti korisnika programa koje datoteke žele uporediti. Prvi odjeljak traži od korisnika da navede kontrolnu sliku, a drugi traži od korisnika da navede testnu sliku.
- %Pitajte korisnika koja je datoteka kontrolna slika.
- Control = input ('# kontrolne slike. / N');
- ControlFile = [GetDir (Control).name]
- %Pitajte korisnika koja datoteka je slika koju želi analizirati.
- ChooseFile = input ('\ n# slike koju želite analizirati. / N');
- PrescripFile = [GetDir (ChooseFile).name];
Korak 3: Analiza slike
![Analiza slike Analiza slike](https://i.howwhatproduce.com/images/001/image-791-63-j.webp)
![Analiza slike Analiza slike](https://i.howwhatproduce.com/images/001/image-791-64-j.webp)
Obojena slika u MATLAB -u je veličine MxNx3, dok je slika u sivim tonovima MxN. To znači da je brže poboljšati/urediti sliku u sivim tonovima jer ima manje podataka za praćenje. Koristite rgb2gray za pretvaranje slike u nijanse sive. (Funkcija imrotate je korištena jer su naše fotografije bile vodoravne - ova linija koda može, ali i ne mora biti potrebna u vašoj verziji.)
- %pretvori u sive i rotira
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = imrotirati (I, 90);
Zatim prikažite sliku. Funkcija podcrtavanja se koristi tako da testna slika može biti pored kontrole u kasnijim koracima.
- %prikaz
- slika (1);
- podcrt (1, 2, 1)
- imshow (I);
- naslov (ControlFile);
Upotrijebite imcrop da biste zatražili od korisnika da izreže šahovnicu sa cijele slike. Sljedeći kôd također prikazuje okvir s porukom koji daje upute korisniku.
- %izrezati šahovnicu za analizu
- waitfor (msgbox ({'Upotrijebite ukrštene dlačice za izrezivanje šahovske ploče.', 'Zatim dvaput kliknite područje interesa.'}));
- I_crop = imcrop (I);
Za binarnu sliku upotrijebite imbinarize.
I_binary = imbinarize (I_crop);
Korak 4: Izračunajte širinu bijelih kvadrata na šahovnici
![Izračunajte širinu bijelih kvadrata na šahovnici Izračunajte širinu bijelih kvadrata na šahovnici](https://i.howwhatproduce.com/images/001/image-791-65-j.webp)
![Izračunajte širinu bijelih kvadrata na šahovnici Izračunajte širinu bijelih kvadrata na šahovnici](https://i.howwhatproduce.com/images/001/image-791-66-j.webp)
![Izračunajte širinu bijelih kvadrata na šahovnici Izračunajte širinu bijelih kvadrata na šahovnici](https://i.howwhatproduce.com/images/001/image-791-67-j.webp)
Zatim zatražite od korisnika da nacrta liniju preko slike pomoću imline. Ova linija bi trebala ići vodoravno preko šahovnice. Trebalo bi početi i završiti na crnom kvadratu (nije važno gdje)- to je zato što ćemo mjeriti širinu bijelih kvadrata, a ne crnih.
- %linija izvlačenja
- slika (1)
- podcrt (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Kliknite i prevucite da biste nacrtali liniju koja se proteže kroz 9 okvira, od razmaka do razmaka.', 'Dvaput kliknite za potvrdu.'}));
- linija = imline;
- položaj = čekanje (red);
- endpoints = line.getPosition;
Izdvojite X i Y koordinate za krajnje tačke povučene linije.
- X = krajnje tačke (:, 1)
- Y = krajnje tačke (:, 2);
Upotrijebite improfile za izradu grafikona na temelju intenziteta koji se nalaze duž nacrtane linije. Ovo bi trebalo podsjećati na kvadratni val u rasponu od 0 (crno) do 1 (bijelo). Izračunajte vrhove i njihovu lokaciju.
- slika (2)
- podcrt (1, 2, 1)
- title ('Intenzitet slike preko improvizirane linije (kontrola)')
- improfile (I_binary, X, Y); grid on;
- [~, ~, c1, ~, ~] = neprovjerena datoteka (I_binarno, X, Y);
- [piaks, loc] = findpeaks (c1 (:,:, 1));
- Čekaj
- zemljište (loc, vrhovi, 'ro');
- izdrži
Pronađite dužinu svakog platoa na grafikonu neprovjerene forme pomoću for petlje. Pokrenite for petlju za istu količinu vrhova koliko postoji u grafikonu neprovjerene datoteke. Da biste izračunali duljinu svakog platoa, upotrijebite funkciju "pronađi" da pronađete sve lokacije na kojima postoji vrijednost "1" umjesto vrijednosti "0" intenziteta. Zatim izračunajte dužinu tog niza da biste dobili ukupnu dužinu platoa, koja bi trebala biti jednaka širini bijelog kvadrata u pikselima. ControlPlateauList = nule (1, dužina (loc));
za i = 1: dužina (loc)
ako je i == dužina (loc)
plato = pronaći (c1 (loc (i): kraj,:, 1));
else
plato = pronaći (c1 (loc (i): loc (i+1) -1,:, 1));
kraj
ControlPlateauList (i) = dužina (plato);
kraj
Korak 5: Ponovite korake 3 i 4 za probnu sliku
![Ponovite korake 3 i 4 za probnu sliku Ponovite korake 3 i 4 za probnu sliku](https://i.howwhatproduce.com/images/001/image-791-68-j.webp)
*Napomena: kada crtate improvizovanu liniju na probnoj slici, obavezno je nacrtajte preko kvadrata koji odgovaraju liniji koju ste nacrtali na kontrolnoj slici.
Korak 6: Izračunajte uvećanje objektiva
![Izračunajte uvećanje objektiva Izračunajte uvećanje objektiva](https://i.howwhatproduce.com/images/001/image-791-69-j.webp)
Uvećana mjerenja izračunavaju se dijeljenjem srednje dužine platoa, koja je izračunata u koraku 5, sa srednjom dužinom kontrolnog platoa, koja je izračunata u koraku 4. To se računa na 1,0884.
uvećanje = srednja vrednost (platoList)/srednja vrednost (ControlPlateauList);
Korak 7: Pronalaženje R-kvadrata i korisničkog recepta putem interpolacije
![Pronalaženje R-kvadrata i korisnički recept putem interpolacije Pronalaženje R-kvadrata i korisnički recept putem interpolacije](https://i.howwhatproduce.com/images/001/image-791-70-j.webp)
Koristeći kod:
- md1 = fitlm (S obzirom na recept, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Možemo pronaći vrijednost R-kvadrata grafikona GivenPresciption (naše leće daju vrijednosti) vs. MagArray (niz omjera mjerenja uvećanja koje smo izračunali ranije). Imajući dovoljno visoku vrijednost R-kvadrata, može se zaključiti da postoji dovoljno jaka korelacija koja opravdava upotrebu ove metode. U ovom konkretnom slučaju, vrijednost R-kvadrata bila je 0,9912, što ukazuje na jaku korelaciju i stoga je opravdano koristiti ovu metodu u analizi.
Koristeći funkciju:
Prescription = interp1 (MagArray, GivenPrescription, uvećanje, 'linearno');
Možemo interpolirati odgovarajuću propisanu vrijednost (na osi x) našeg omjera uvećanja (vrijednost na osi y) i pronaći koji je korisnički recept.
Interpoliranje podataka važno je za funkcioniranje ove metode jer nam omogućuje da na temelju informacija koje imamo donosimo pretpostavke o informacijama koje nemamo. Iako bi linija koja najbolje pristaje tehnički bila jači kandidat za ovu pretpostavku, stvaranje granica za smanjenje broja izlaza služi istom učinku kao što dioptrijske naočare u svakom slučaju dolaze u postupno ujednačenim vrijednostima. To se objašnjava u kasnijim koracima.
Korak 8: Prikaz korisničkog recepta na grafikonu
![Prikaz korisničkog recepta na grafikonu Prikaz korisničkog recepta na grafikonu](https://i.howwhatproduce.com/images/001/image-791-71-j.webp)
Koristeći sljedeći kod:
- figura;
- zaplet (S obzirom na recept, MagArray, '-g')
- Čekaj
- zaplet (recept, povećanje, 'bp')
- izdrži
- grid
- legenda ('Podaci', 'Interpolirane točke', 'Lokacija', 'SZ')
Možemo nacrtati grafikon koji prikazuje omjere uvećanja prema danom receptu sa zelenom linijom i pronađene podatke našeg izračunatog povećanja u odnosu na naš interpolirani recept sa plavom zvijezdom. Zatim legenda označava naslov, x-os i y-os i postavlja legendu u gornji lijevi kut.
Korak 9: Suzite recept
![Suzite recept Suzite recept](https://i.howwhatproduce.com/images/001/image-791-72-j.webp)
Sljedeći kôd koristi se za zaokruživanje recepta:
-
ako je recept <= 1.125
CalculatedPrescription = '1.0';
-
elseif Recept <= 1.375
CalculatedPrescription = '1.25';
-
elseif Recept <= 1.625
CalculatedPrescription = '1.5';
-
elseif Recept <= 1.875
CalculatedPrescription = '1.75';
-
elseif Recept <= 2.25
CalculatedPrescription = '2.0';
-
elseif Recept <= 2.625
CalculatedPrescription = '2.5';
-
elseif recept <= 3
CalculatedPrescription = '2.75';
-
elseif Recept <= 3.375
CalculatedPrescription = '3.25';
-
else
CalculatedPrescription = 'nepoznato';
- kraj
Recept koji je pronađen interpolacijom ne odražava nužno stvarni recept - to je zato što će uvijek doći do malih razlika u analizi fotografije zbog ljudske greške. Stoga nam je ovaj korak potreban za klasifikaciju stvarnog recepta.
Recepti koji se daju obično počinju od 1,0 dioptrije i povećavaju se za 0,25 u svojim receptima, pa nakon izračunavanja recepta želimo odrediti recept koji najbolje odgovara onome što bi korisniku moglo zatrebati. Nakon izračunavanja recepta, vodimo ga kroz date naredbe If da provjerimo njegovu vrijednost i odredimo koji je recept potreban. Sve što je manje ili jednako 1,125, tada je recept 1,0. Sve što je manje ili jednako 1,375, recept je 1,25. Sve što je manje ili jednako 1,625, recept je 1,5. Sve što je manje ili jednako 1,845, recept je 1,75. I tako dalje.
Vrijednosti se povećavaju jer provjeravamo jesu li vrijednosti manje od. Ako bismo smanjili vrijednosti, tada bi prva naredba if čitala prvu if naredbu cijelo vrijeme. Ako je recept najmanji, želimo da ga odmah prepozna kao najmanji, pa je zato najmanja vrijednost ono s čime smo počeli. Sve što je veće od najveće vrijednosti znači da recept nije u rasponu s našim podacima, pa će dati "Nepoznato" čitanje niza.
Preporučuje se:
Recept priložene kutije (hardverski remiks / savijanje kruga): 11 koraka (sa slikama)
![Recept priložene kutije (hardverski remiks / savijanje kruga): 11 koraka (sa slikama) Recept priložene kutije (hardverski remiks / savijanje kruga): 11 koraka (sa slikama)](https://i.howwhatproduce.com/images/002/image-3626-16-j.webp)
Recept Companion Box (Hardmik Remix / Circuit Bending): Remiks hardvera je način da se preispitaju mogućnosti muzičke tehnologije. Prateće kutije su savijeni elektronički muzički instrumenti napravljeni uradi sam. Zvukovi koje proizvode zavise od kola koje se koristi. Uređaji koje sam napravio zasnovani su na multi-effu
Praćenje i praćenje za male trgovine: 9 koraka (sa slikama)
![Praćenje i praćenje za male trgovine: 9 koraka (sa slikama) Praćenje i praćenje za male trgovine: 9 koraka (sa slikama)](https://i.howwhatproduce.com/images/007/image-19294-j.webp)
Track & trace za male trgovine: Ovo je sistem koji je napravljen za male trgovine koje bi trebalo montirati na e-bicikle ili e-skutere za kratke isporuke, na primjer pekara koja želi isporučivati peciva. Track and Trace je sistem koji koriste ca
DIY Pametni robotski alati za praćenje Auto kompleti za praćenje Auto fotoosjetljivi: 7 koraka
![DIY Pametni robotski alati za praćenje Auto kompleti za praćenje Auto fotoosjetljivi: 7 koraka DIY Pametni robotski alati za praćenje Auto kompleti za praćenje Auto fotoosjetljivi: 7 koraka](https://i.howwhatproduce.com/images/008/image-22349-j.webp)
DIY Pametni roboti za praćenje automobila Kompleti za praćenje Automobil Fotoosjetljivi: Dizajn SINONING ROBOT -a Možete kupiti od robota za praćenje Roboti TheoryLM393 čip uporedite dva fotootpornika, kada LED dioda sa jedne strane na BELOJ strani LED motora zaustavi se, s druge strane motora okreni se pa
My Tiny Whoop: recept za Whoop + nekoliko savjeta i trikova: 8 koraka
![My Tiny Whoop: recept za Whoop + nekoliko savjeta i trikova: 8 koraka My Tiny Whoop: recept za Whoop + nekoliko savjeta i trikova: 8 koraka](https://i.howwhatproduce.com/images/001/image-2263-59-j.webp)
My Tiny Whoop: Whoop Recept + nekoliko savjeta i trikova: UPOZORENJE: Sada ulazite u moj prvi Instructable i možda ćete naići na mnogo gluposti i nedostatka planiranja i/ili vještina. Budite svjesni. Ovo je moja lična postavka Tiny Whoop koju koristim svaki dan, pa sam mislila da ću je podijeliti. Pogodno je za putovanja (ne
Nadogradnja LED žarulje za ukras očne jabučice Halo 998: 8 koraka
![Nadogradnja LED žarulje za ukras očne jabučice Halo 998: 8 koraka Nadogradnja LED žarulje za ukras očne jabučice Halo 998: 8 koraka](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10968677-led-bulb-retrofit-for-halo-998-eyeball-trim-8-steps-j.webp)
Nadogradnja LED žarulje za Halo 998 ukras za očne jabučice: Ova uputa opisuje kako izmijeniti dijelove za očne jabučice Halo 998 kako bi prihvatili LumiSelect PAR/R16 žarulju za prigušivanje sa Earthled.com. LED žarulja je prevelika da bi stala kroz otvor očne jabučice na ukrasima. komad, ali s malo ef