Përmbajtje:
- Hapi 1: Bëni Fotografi
- Hapi 2: Ngarkoni Imazhet në MATLAB
- Hapi 3: Analiza e imazhit
- Hapi 4: Llogaritni Gjerësinë e Katrorëve të Bardhë në Tabelën e Rendit
- Hapi 5: Përsëritni Hapat 3 dhe 4 për Imazhin e Testit
- Hapi 6: Llogaritni Zmadhimin e Thjerrëzës
- Hapi 7: Gjetja e katrorit R dhe receta e përdoruesit përmes interpolimit
- Hapi 8: Paraqitja e recetës së përdoruesit në një grafik
- Hapi 9: Ngushtoni recetën tuaj
Video: Eyeballing Receta e syrit tuaj: një projekt BME60B: 9 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Nga: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Zmadhimi është një nga karakteristikat kryesore të pranishme për syzet e leximit, të cilat klasifikohen sipas recetës së tyre të dioptrave. Sipas Universitetit Teknologjik të Miçiganit, një dioptri është një gjatësi fokale e thjerrëzave, e matur zakonisht në mm, në njësinë e metrave (Universiteti i Teknologjisë Michigan). Për shkak se syzet e leximit kanë lente konveks, gjatësia fokale do të ishte pozitive, duke bërë që edhe dioptrat të jenë pozitive (HyperPhysics). Gjatësia fokale rritet ndërsa distanca midis objektit largohet më shumë nga lentet aktuale, dhe kjo i bën dioptrat të zvogëlohen pasi ato janë anasjelltas proporcionale. Prandaj, të kesh syze leximi me dioptra shtesë do të ndihmonte lenten të zmadhonte pamjen, në mënyrë që të duket se gjatësia fokale është më e vogël duke rritur vlerën e dioptrave.
Kodi i paraqitur do të përdoret për të parashikuar dioptrin e një lente me një recetë të panjohur. Dy hyrje përdoren për të llogaritur recetën: një fotografi e sfondit të kontrolluar pa përdorur asnjë lente, dhe një fotografi tjetër e të njëjtit sfond, por përmes lenteve të zgjedhura. Programi do të masë shtrembërimin midis këtyre dy fotografive. Nga atje, ne do të jemi në gjendje të vlerësojmë dioptrin e thjerrëzave dhe të prodhojmë një rezultat që përdoruesi ta shikojë.
Për këtë Udhëzues, do t'ju duhet:
- Një model i bardhë dhe i bardhë i stampuar i shtypur në një fletë letre në një madhësi 11x8.5
- Një aparat fotografik me aftësinë për të bllokuar fokusin e tij
- Një trekëmbësh, ose diçka e ngjashme për të siguruar kamerën
- Receta të ndryshme të syzeve të leximit
- MATLAB
Hapi 1: Bëni Fotografi
Për të llogaritur zmadhimin e një lente, duhet të jeni në gjendje ta krahasoni atë me madhësinë aktuale të objektit. Për këtë projekt, ne do të krahasojmë një imazh të zmadhuar me një imazh kontrolli.
Kështu, hapi i parë është të bëni dy fotografi të të njëjtit imazh - e para përmes vetëm kamerës, dhe e dyta përmes lenteve të syzeve të leximit që dëshironi të provoni.
Ju do të bëni një fotografi të një tabele kontrolli bardh e zi 8.5x11in me një rrjet 1 inç. Vendosni kamerën tuaj 11in larg nga tabela e kontrollit. Para se të bëni fotografi, mbyllni fokusin në tabelën e kontrollit.
Bëni një fotografi të checkerboard pa syzet e leximit. Pastaj, pa lëvizur asgjë, vendosni syzet e leximit para kamerës dhe bëni foton e dytë.
Sigurohuni që pozicioni i kamerës tuaj të mos lëvizë midis shkrepjeve. E vetmja gjë që duhet të ndryshojë midis dy fotove është prania e lenteve të syzeve para kamerës.
Kur të keni mbaruar me fotot, ngarkoni ato në kompjuterin tuaj.
Hapi 2: Ngarkoni Imazhet në MATLAB
Hapni një skenar të ri.
Së pari, specifikoni drejtorinë ku ruhen fotografitë. Pastaj, përdorni funksionin dir për të nxjerrë imazhe-j.webp
Dir = 'C: / Përdoruesit / kuras / Desktop / class / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Për projektin tonë, ne donim të nxisnim përdoruesin e programit për skedarët me të cilët donin të krahasonin. Seksioni i parë i kërkon përdoruesit të specifikojë imazhin e kontrollit, dhe i dyti i kërkon përdoruesit të specifikojë imazhin e provës.
- %Pyetni përdoruesin se cili skedar është imazhi i kontrollit.
- Kontrolli = hyrja ('# e imazhit të kontrollit. / N');
- ControlFile = [GetDir (Kontrolli).emri]
- %Pyetni përdoruesin se cili skedar është imazhi që ata duan të analizojnë.
- ChooseFile = input ('\ n# imazhin që dëshironi të analizoni. / N');
- PrescripFile = [GetDir (ChooseFile).emër];
Hapi 3: Analiza e imazhit
Një imazh me ngjyrë në MATLAB është i madhësisë MxNx3, ndërsa një imazh i shkallës gri është MxN. Kjo do të thotë që është më e shpejtë të përmirësosh/modifikosh një imazh të shkallës gri sepse ka më pak të dhëna për të mbajtur nën kontroll. Përdorni rgb2gray për ta kthyer imazhin në shkallë gri. (Funksioni imrotate u përdor sepse fotot tona dolën në horizontale - kjo linjë kodi mund të jetë ose jo e nevojshme në versionin tuaj.)
- %konvertohet në shkallë gri dhe rrotullohet
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = imrotate (I, 90);
Tjetra, shfaqni imazhin. Funksioni i nënplotit përdoret në mënyrë që imazhi i provës të jetë në gjendje të jetë pranë kontrollit në hapat e mëvonshëm.
- %shfaqje
- figura (1);
- nënplot (1, 2, 1)
- imshow (I);
- titulli (ControlFile);
Përdorni imcrop për të nxitur përdoruesin të presë tabelën e kontrollit nga imazhi i plotë. Kodi i mëposhtëm gjithashtu tregon një kuti mesazhesh për t'i dhënë udhëzime përdoruesit.
- %prerje checkerboard për analiza
- waitfor (msgbox ({'Përdorni qimet e kryqëzuara për të nxjerrë tabelën e kontrollit.', 'Pastaj klikoni dy herë zonën e interesit.'}));
- I_crop = imcrop (I);
Përdorni imbinarize për të binarizuar imazhin.
I_binar = imbinarizoj (I_crop);
Hapi 4: Llogaritni Gjerësinë e Katrorëve të Bardhë në Tabelën e Rendit
Tjetra, nxitni përdoruesin të tërheqë një vijë nëpër imazh duke përdorur imline. Kjo linjë duhet të kalojë horizontalisht në të gjithë tabelat e kontrollit. Duhet të fillojë dhe të përfundojë në një shesh të zi (nuk ka rëndësi se ku)- kjo ndodh sepse ne do të matim gjerësinë e shesheve të bardhë, jo ato të zeza.
- %barazim linje
- figura (1)
- nënplot (1, 2, 1)
- imshow (I_binar);
- waitfor (msgbox ({'Kliko dhe tërhiq për të tërhequr vijën që përfshin 9 kuti, nga një hapësirë e zezë në një hapësirë të zezë.', 'Kliko dy herë për të konfirmuar.'}));
- linjë = imline;
- pozicioni = prit (rreshti);
- pikat fundore = line.getPosition;
Nxirrni kodinatet X dhe Y për pikat përfundimtare të vijës së tërhequr.
- X = pikat përfundimtare (:, 1)
- Y = pikat përfundimtare (:, 2);
Përdorni profrofile për të prodhuar një grafik bazuar në intensitetet e gjetura përgjatë vijës së tërhequr. Kjo duhet të ngjajë me një valë katrore që varion nga 0 (e zezë) në 1 (e bardhë). Llogarit majat dhe vendndodhjet e tyre gjithashtu.
- figura (2)
- nënplot (1, 2, 1)
- titulli ('Intensiteti i imazhit përgjatë vijës së paprofile (Kontrolli)')
- çrregullim (I_binar, X, Y); rrjeti i ndezur;
- [~, ~, c1,, ~] = profrofile (I_binar, X, Y);
- [majat, loc] = majat e gjetjes (c1 (:,:, 1));
- prit
- komplot (loc, majat, 'ro');
- mbaje mendjen
Gjeni gjatësinë e secilës rrafshnaltë në grafikun e profilizuar duke përdorur një lak for. Drejtoni ciklin for për të njëjtën sasi majash që gjenden në grafikun e pamjaftueshëm. Për të llogaritur gjatësinë e secilës pllajë, përdorni funksionin "gjeni" për të gjetur të gjitha vendet ku ka një "1" në vend të një vlere intensiteti "0". Pastaj, llogarisni gjatësinë e atij grupi për të marrë gjatësinë totale të rrafshnaltës, e cila duhet të jetë e barabartë me gjerësinë e një katrori të bardhë në pixel. ControlPlateauList = zero (1, gjatësia (loc));
për i = 1: gjatësi (lok)
nëse i == gjatësia (loc)
pllajë = gjej (c1 (loc (i): fund,,, 1));
tjeter
pllajë = gjej (c1 (loc (i): loc (i+1) -1,,, 1));
fund
ControlPlateauList (i) = gjatësia (pllajë);
fund
Hapi 5: Përsëritni Hapat 3 dhe 4 për Imazhin e Testit
*Shënim: kur vizatoni vijën e papërshtatshme në imazhin e provës, sigurohuni që ta vizatoni në sheshet që korrespondojnë me vijën që vizatuat në imazhin e kontrollit.
Hapi 6: Llogaritni Zmadhimin e Thjerrëzës
Matjet e zmadhuara llogariten duke pjesëtuar mesataren e gjatësisë së rrafshnaltës, e cila u llogarit në hapin 5, me mesataren e gjatësisë së pllajës së kontrollit, e cila u llogarit në hapin 4. Kjo llogaritet të jetë 1.0884.
zmadhim = mesatarja (lista e pllajës)/mesatarja (ControlPlateauList);
Hapi 7: Gjetja e katrorit R dhe receta e përdoruesit përmes interpolimit
Duke përdorur kodin:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Ne mund të gjejmë vlerën e katrorit R të grafikut GivenPresciption (vlerat e dhëna të lenteve tona) kundrejt MagArray (një grup i raporteve të matjeve të zmadhimit që kemi llogaritur më herët). Duke pasur një vlerë mjaft të lartë në katror R, mund të nxirret përfundimi se ekziston një korrelacion mjaft i fortë për të justifikuar përdorimin e kësaj metode. Për këtë rast të veçantë, vlera në katrorin R ishte 0.9912, që sugjeron një korrelacion të fortë dhe për këtë arsye janë të justifikuara në përdorimin e kësaj metode në analizë.
Duke përdorur funksionin:
Prescription = interp1 (MagArray, GivenPrescription, zmadhim, 'linear');
Ne mund të interpolojmë vlerën përkatëse të recetës (në boshtin x) të raportit tonë të zmadhimit (një vlerë në boshtin y) dhe të gjejmë se çfarë është receta e përdoruesit.
Ndërhyrja e të dhënave është e rëndësishme që kjo metodë të funksionojë pasi na lejon të bëjmë supozime për informacionin që nuk kemi, bazuar në informacionin që kemi. Ndërsa një linjë e përshtatshmërisë më të mirë do të ishte teknikisht një kandidat më i fortë për këtë supozim, krijimi i kufijve për të zvogëluar numrin e rezultateve shërbejnë të njëjtin efekt pasi syzet me recetë gjithsesi vijnë në vlera shtesë uniforme. Kjo shpjegohet në hapat e mëvonshëm.
Hapi 8: Paraqitja e recetës së përdoruesit në një grafik
Duke përdorur kodin e mëposhtëm:
- figura;
- komplot (GivenPrescription, MagArray, '-g')
- prit
- komplot (Recetë, zmadhim, 'bp')
- mbaje mendjen
- rrjetë
- legjendë ("Të dhëna", "Pika të interpoluara", "Vendndodhja", "NW")
Ne mund të vizatojmë një grafik që tregon Raportet e Zmadhimit kundrejt Recetës së dhënë me një vijë të gjelbër dhe të dhënat e gjetura të zmadhimit tonë të llogaritur kundrejt recetës sonë të interpoluar me një yll blu. Pastaj legjenda etiketon titullin, boshtin x dhe boshtin y dhe e vendos legjendën në këndin e sipërm të majtë.
Hapi 9: Ngushtoni recetën tuaj
Kodi i mëposhtëm përdoret për të prodhuar rrumbullakimin për recetën:
-
nëse Parashkrimi <= 1.125
CalculatedPrescription = '1.0';
-
elseif Recetë <= 1.375
Recetë e llogaritur = '1.25';
-
elseif Recetë <= 1.625
CalculatedPrescription = '1.5';
-
elseif Recetë <= 1.875
Recetë e llogaritur = '1.75';
-
elseif Recetë <= 2.25
CalculatedPrescription = '2.0';
-
elseif Recetë <= 2.625
CalculatedPrescription = '2.5';
-
elseif Recetë <= 3
Recetë e llogaritur = '2.75';
-
elseif Recetë <= 3.375
Recetë e llogaritur = '3.25';
-
tjeter
CalculatedPrescription = 'e panjohur';
- fund
Receta e gjetur përmes interpolimit nuk pasqyron domosdoshmërisht recetën aktuale - kjo ndodh sepse gjithmonë do të ketë ndryshime të vogla në analizimin e fotografisë për shkak të gabimit njerëzor. Kështu, ne kemi nevojë për këtë hap për të klasifikuar recetën aktuale.
Recetat që jepen zakonisht fillojnë nga 1.0 dioptra dhe rriten me.25 në recetat e tyre, kështu që pas llogaritjes së recetës ne duam të përcaktojmë recetën që i përshtatet më së miri asaj që përdoruesit mund t'i nevojiten. Pas llogaritjes së recetës, ne e kalojmë atë përmes deklaratave të dhëna If për të kontrolluar vlerën e tij dhe për të përcaktuar se cila recetë është e nevojshme. Çdo gjë më pak ose e barabartë me 1.125, atëherë receta është 1.0. Çdo gjë më pak ose e barabartë me 1.375, receta është 1.25. Çdo gjë më pak ose e barabartë me 1.625, receta është 1.5. Çdo gjë më pak ose e barabartë me 1.845, receta është 1.75. Dhe kështu me radhë.
Ne kemi vlerat në rritje pasi po kontrollojmë nëse vlerat janë më pak se. Nëse bëjmë që vlerat të zvogëlohen, atëherë deklarata e parë if do të lexonte deklaratën e parë if gjatë gjithë kohës. Nëse receta është më e vogla, ne duam që ajo ta njohë atë si më të voglin menjëherë, kështu që kjo është arsyeja pse vlera më e vogël është ajo me të cilën kemi filluar. Çdo gjë më e lartë se vlera më e lartë do të thotë që receta nuk është në varg të të dhënave tona, kështu që do të japë leximin e vargut "E panjohur".
Recommended:
Gjurmimi i lëvizjes së syrit të njeriut: 6 hapa
Ndjekja e Lëvizjes së Syrit Njerëzor: Ky projekt synon të kapë lëvizjen e syrit të njeriut dhe shfaq lëvizjen e tij në një sërë dritash LED të vendosura në formën e një syri. Ky lloj projekti potencialisht mund të ketë shumë përdorime në fushën e robotikës dhe veçanërisht huma
Receta e Kutisë së Shoqëruesit (Remix i harduerit / përkulja e qarkut): 11 hapa (me fotografi)
Receta e Kutisë së Kompanisë (Rimiksi i harduerit / përkulja e qarkut): Përzierja e harduerit është një mënyrë për të rishqyrtuar mundësitë e teknologjive muzikore. Kutitë shoqëruese janë instrumente muzikore elektronike DIY të lakuara. Tingujt që ata bëjnë varen nga qarku që përdoret. Pajisjet që kam bërë janë të bazuara në multi-eff
Detektor i shkeljes së syrit: 6 hapa (me fotografi)
Detektor i shkeljes së syrit: a.artikuj {font-size: 110.0%; font-weight: bold; font-style: italic; dekorimi i tekstit: asnjë; sfondi-ngjyra: e kuqe;} a.artikuj: rri pezull {sfondi-ngjyra: e zezë;} Ky udhëzues shpjegon se si të bëni një "zbulues të shkeljes së syrit" nga një AD82 i modifikuar
Nike LED Swoosh! Ky është një dekor i shkëlqyeshëm për një dhomë. Ky është një projekt që të gjithë mund ta përsërisin .: 5 hapa
Nike LED Swoosh! Ky është një dekor i shkëlqyeshëm për një dhomë. Ky është një projekt që të gjithë mund ta përsërisin .: Mjetet -masë-kaçavidë-hekur saldimi-sharrë për përballim-stërvitje elektrike-letër zmerile Furnizon-Rrip LED (RGB) 5m-kontrollues LED-Furnizim me energji 12V 4A-lëndë drusore 50-50-1500 2x-lëndë druri 20-20-3000 2x-kompensatë 500-1000mm-vida (45mm) 150x-vida (35mm) 30x-scr
Retrofit LED i llambave për shkurtimin e syrit Halo 998: 8 hapa
LED Bulb Retrofit for Halo 998 Eyeball Trim: Ky udhëzues përshkruan se si të modifikoni pjesët e zbukurimit të syrit Halo 998 për të pranuar llambën e dritës të zbehtë të LumiSelect PAR/R16 nga earthled.com. Llamba LED është shumë e madhe për t'u përshtatur me hapjen e syrit të zbukurimit. copë, por me pak ef