Tartalomjegyzék:
- 1. lépés: Készítsen fényképeket
- 2. lépés: Töltse be a képeket a MATLAB -ba
- 3. lépés: Képelemzés
- 4. lépés: Számítsa ki a kockás táblák fehér négyzeteinek szélességét
- 5. lépés: Ismételje meg a 3. és 4. lépést a tesztképhez
- 6. lépés: Számítsa ki az objektív nagyítását
- 7. lépés: Az R-négyzet és a felhasználó receptjének megkeresése interpoláció útján
- 8. lépés: A felhasználó receptjének megjelenítése grafikonon
- 9. lépés: Szűkítse a receptjét
Videó: Szemgolyó A szemgolyó receptje: BME60B projekt: 9 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Szerző: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
A nagyítás az egyik legfontosabb jellemzője az olvasószemüvegnek, amelyet dioptriák alapján írnak fel. A Michigani Technológiai Egyetem szerint a dioptria a lencse fókusztávolsága, általában mm -ben mérve, mértékegységben (Michigan Technology University). Mivel az olvasószemüveg domború lencsékkel rendelkezik, a fókusztávolság pozitív lenne, és a dioptria is pozitív lenne (HyperPhysics). A gyújtótávolság növekszik, ahogy a tárgy közötti távolság egyre távolodik a tényleges lencsétől, és ez a dioptria csökkenéséhez vezet, mivel fordítottan arányos. Ezért, ha további dioptriás olvasószemüveggel rendelkezik, az lencse nagyíthatná a nézetet, és úgy tűnhet, hogy a dioptria értékének növelésével a gyújtótávolság kisebb lesz.
A bemutatott kód az ismeretlen recept alapján előállított lencse dioptriájának előrejelzésére szolgál. A recept kiszámításához két bemenetet használnak: egy fényképet a szabályozott háttérről, lencse használata nélkül, és egy másik fényképet ugyanarról a háttérről, de a választott lencsén keresztül. A program mérni fogja a két fénykép közötti torzítást. Innentől kezdve meg tudjuk becsülni a lencse dioptriáját, és eredményt készíthetünk a felhasználó számára.
Ehhez az utasításhoz szüksége lesz:
- Fekete-fehér sakktábla-minta, 11x8,5 méretű papírlapra nyomtatva
- Kamera, amely rögzíti a fókuszt
- Állvány, vagy valami hasonló a kamera rögzítéséhez
- Különféle olvasószemüveg -előírások
- MATLAB
1. lépés: Készítsen fényképeket
Az objektív nagyításának kiszámításához képesnek kell lennie összehasonlítani azt az objektum tényleges méretével. Ehhez a projekthez egy nagyított képet fogunk összehasonlítani egy kontrollképpel.
Így az első lépés az, hogy két fényképet készít ugyanarról a képről - az elsőt csak a kamerán keresztül, a másodikat pedig a tesztelni kívánt olvasószemüveg lencséjén keresztül.
Képet készít egy 8,5x11 hüvelykes fekete -fehér kockás tábláról, 1 hüvelykes rácskal. Állítsa be fényképezőgépét 11 centiméterre a kockatáblától. A fényképek készítése előtt rögzítse a fókuszt a kockatáblán.
Készítsen fényképet a sakktábláról olvasószemüveg nélkül. Ezután anélkül, hogy bármit is mozgatna, tegye az olvasószemüveget a fényképezőgép elé, és készítse el a második fényképet.
Ügyeljen arra, hogy a fényképezőgép helyzete ne mozduljon el a felvételek között. Az egyetlen dolog, amin változtatni kell a két fénykép között, az a szemüveglencse jelenléte a kamera előtt.
Ha elkészült a fotókkal, töltse fel őket a számítógépére.
2. lépés: Töltse be a képeket a MATLAB -ba
Nyisson meg egy új szkriptet.
Először adja meg a könyvtárat, ahol a fényképek tárolódnak. Ezután használja a dir függvényt a-j.webp
Dir = 'C: / Users / kuras / Desktop / class / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Projektünk során meg akartuk kérni a program felhasználóját, hogy mely fájlokat szeretné összehasonlítani. Az első szakasz a vezérlőkép megadását kéri a felhasználótól, a második pedig a tesztkép megadását.
- %Kérdezze meg a felhasználót, hogy melyik fájl a vezérlőkép.
- Control = input ('vezérlőkép száma. / N');
- ControlFile = [GetDir (Control).name]
- %Kérdezze meg a felhasználót, hogy melyik fájl az a kép, amelyet elemezni szeretne.
- SelectFile = input ('\ n# az elemezni kívánt kép. / N');
- PrescripFile = [GetDir (SelectFile).name];
3. lépés: Képelemzés
A MATLAB színes képe MxNx3 méretű, míg a szürkeárnyalatos kép MxN. Ez azt jelenti, hogy gyorsabb a szürkeárnyalatos kép javítása/szerkesztése, mert kevesebb adat van a nyomon követéshez. Az rgb2gray használatával konvertálja a képet szürkeárnyalatosra. (Az imrotate funkciót azért használtuk, mert fotóink vízszintesen jelentek meg - ez a kódsor lehet, hogy nem szükséges az Ön verziójában.)
- %szürkeárnyalatossá alakul és forog
- I = imread (ControlFile);
- I = rgb2szürke (I);
- I = imrotátus (I, 90);
Ezután jelenítse meg a képet. Az alrészlet funkciót arra használják, hogy a tesztkép a későbbi lépésekben a vezérlő mellett lehessen.
- %kijelző
- 1.ábra);
- részterület (1, 2, 1)
- imshow (I);
- cím (ControlFile);
Az imcrop segítségével kérje meg a felhasználót, hogy vágja ki a kockatáblát a teljes képből. A következő kód egy üzenetdobozt is tartalmaz, amely utasításokat ad a felhasználónak.
- %kivágott checkerboard elemzéshez
- waitfor (msgbox ({'Használja a keresztszőrt a kockatábla kivágásához.', 'Ezután kattintson duplán a kívánt területre.'}));
- I_crop = imcrop (I);
A kép binarizálásához használja az imbinarize parancsot.
I_binary = imbinarize (I_crop);
4. lépés: Számítsa ki a kockás táblák fehér négyzeteinek szélességét
Ezután kérje meg a felhasználót, hogy húzzon egy vonalat a képen az imline segítségével. Ennek a vonalnak vízszintesen kell futnia a kockatáblán. Egy fekete négyzeten kell kezdődnie és végződnie (nem mindegy, hol)- ez azért van, mert a fehér négyzetek szélességét fogjuk mérni, nem pedig a feketéket.
- %húzási vonal
- 1.ábra)
- részterület (1, 2, 1)
- imshow (I_binary);
- waitfor (msgbox ({'Kattintson és húzza a 9 mezőt áthúzó vonal megrajzolásához, a fekete mezőből a fekete mezőbe.', 'A megerősítéshez kattintson duplán.'});
- sor = imline;
- pozíció = várakozás (sor);
- végpontok = line.getPosition;
Húzza ki a rajzolt vonal végpontjainak X és Y koinátját.
- X = végpontok (:, 1)
- Y = végpontok (:, 2);
Az improfile segítségével készíthet gráfot a húzott vonal mentén talált intenzitások alapján. Ennek egy négyzethullámhoz kell hasonlítania 0 (fekete) és 1 (fehér) között. Számítsa ki a csúcsokat és azok helyét is.
- 2. ábra)
- részterület (1, 2, 1)
- title ('Kép intenzitása az improfile vonalon (Control)')
- improfile (I_binary, X, Y); rács be;
- [~, ~, c1, ~, ~] = improfile (I_binary, X, Y);
- [csúcsok, loc] = findpeaks (c1 (:,:, 1));
- kitartás
- telek (loc, csúcsok, 'ro');
- távol tartja magát
Keresse meg az egyes fennsíkok hosszát az improfile gráfon egy for ciklus segítségével. Futtassa a for ciklust ugyanannyi csúcsra, mint amennyi az improfile gráfban van. Az egyes fennsíkok hosszának kiszámításához használja a „Find” funkciót, hogy megtalálja az összes olyan helyet, ahol „1” van a „0” intenzitásérték helyett. Ezután számítsa ki a tömb hosszát, hogy megkapja a fennsík teljes hosszát, amelynek meg kell egyeznie egy fehér négyzet szélességével pixelben. ControlPlateauList = nullák (1, hossz (loc));
i = 1 esetén: hossz (loc)
ha i == hossz (loc)
fennsík = lelet (c1 (loc (i): vége,:, 1));
más
fennsík = lelet (c1 (loc (i): loc (i+1) -1,:, 1));
vége
ControlPlateauList (i) = hossz (fennsík);
vége
5. lépés: Ismételje meg a 3. és 4. lépést a tesztképhez
*Megjegyzés: amikor az improfile vonalat rajzolja a tesztképre, ügyeljen arra, hogy azt a négyzeteken keresztül húzza meg, amelyek megfelelnek a vezérlőképen rajzolt vonalnak.
6. lépés: Számítsa ki az objektív nagyítását
A felnagyított méréseket úgy kell kiszámítani, hogy a fennsík hosszának átlagát, amelyet az 5. lépésben számoltak ki, elosztjuk a kontrollplató hosszának átlagával, amelyet a 4. lépésben számoltunk ki. Ez 1,0884.
nagyítás = átlag (fennsík lista)/átlag (kontrollplató lista);
7. lépés: Az R-négyzet és a felhasználó receptjének megkeresése interpoláció útján
A kód használata:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Megtaláljuk a GivenPresciption (a lencséink által megadott értékek) grafikon R-négyzet értékét a MagArray-vel (a korábban kiszámított nagyítási arányok tömbje). Ha elég magas az R-négyzet értéke, akkor arra lehet következtetni, hogy elég erős korreláció áll fenn ennek a módszernek a használatához. Ebben a konkrét esetben az R-négyzet értéke 0,9912 volt, ami erős korrelációra utal, és ezért indokolt ennek a módszernek az elemzésben történő alkalmazása.
A funkció használata:
Előírás = interp1 (MagArray, GivenPrescription, nagyítás, 'lineáris');
Interpolálhatjuk a nagyítási arányunk megfelelő receptértékét (az x tengelyen) (érték az y tengelyen), és megtalálhatjuk, hogy mi a felhasználó receptje.
Az adatok interpolálása fontos ahhoz, hogy ez a módszer működjön, mivel lehetővé teszi számunkra, hogy a rendelkezésünkre álló információk alapján feltételezéseket tegyünk a rendelkezésünkre álló információkkal kapcsolatban. Míg a legjobban illeszkedő sor technikailag erősebb jelölt lenne erre a feltételezésre, a határok megteremtése a kimenetek számának csökkentése érdekében ugyanazt a hatást fejti ki, mint a vényköteles szemüvegek növekvő egységes értékei. Ezt a későbbi lépésekben magyarázzák.
8. lépés: A felhasználó receptjének megjelenítése grafikonon
A következő kód használatával:
- ábra;
- plot (GivenPrescription, MagArray, '-g')
- kitartás
- cselekmény (recept, nagyítás, "bp")
- távol tartja magát
- rács
- jelmagyarázat („Adatok”, „Interpolált pontok”, „Hely”, „ÉNy”)
Ábrázolhatunk egy grafikont, amely zöld vonallal mutatja a nagyítási arányokat a megadott előírással szemben, és a számított nagyítás talált adatait, összehasonlítva a kék csillaggal interpolált receptünkkel. Ezután a felirat felcímkézi a címet, az x tengelyt és az y tengelyt, és elhelyezi a jelmagyarázatot a bal felső sarokban.
9. lépés: Szűkítse a receptjét
Az alábbi kódot használják a recept kerekítéséhez:
-
ha Vényköteles <= 1,125
CalculatedPrescription = '1.0';
-
elseif Vényköteles <= 1,375
CalculatedPrescription = '1,25';
-
elseif Vényköteles <= 1.625
CalculatedPrescription = '1.5';
-
elseif Vényköteles <= 1.875
CalculatedPrescription = '1.75';
-
elseif Vényköteles <= 2,25
CalculatedPrescription = '2.0';
-
elseif Vényköteles <= 2,625
CalculatedPrescription = '2.5';
-
elseif Vényköteles <= 3
CalculatedPrescription = '2.75';
-
elseif Vényköteles <= 3.375
CalculatedPrescription = '3.25';
-
más
CalculatedPrescription = 'ismeretlen';
- vége
Az interpoláció során talált recept nem feltétlenül tükrözi a tényleges receptet - ez azért van, mert emberi hiba miatt a fotó elemzésében mindig lesznek kis eltérések. Így szükségünk van erre a lépésre, hogy minősítsük a tényleges receptet.
A megadott előírások általában 1,0 dioptriából indulnak ki, és a receptjeikben 0,25 -tel növekednek, így a recept kiszámítása után szeretnénk meghatározni azt a receptet, amely a legjobban megfelel a felhasználónak. A recept kiszámítása után végigfuttatjuk a megadott If utasításokon, hogy ellenőrizze annak értékét és meghatározzuk, melyik receptre van szükség. Ha 1,125 -nél kisebb vagy egyenlő, akkor az előírás 1,0. Ha 1,375 -nél kisebb vagy egyenlő, az előírás 1,25. Ha az 1.625 -nél kisebb vagy egyenlő, az előírás 1.5. Ha 1,845 -nél kisebb vagy egyenlő, az előírás 1,75. Stb.
Az értékek növekednek, mivel ellenőrizzük, hogy az értékek kisebbek -e. Ha a csökkenő értékeket csináljuk, akkor az első if utasítás mindig olvassa az első if utasítást. Ha a recept a legkisebb, azt akarjuk, hogy azonnal felismerje a legkisebbnek, ezért a legkisebb értékkel kezdtük. Bármi magasabb, mint a legmagasabb érték, azt jelenti, hogy a recept nem tartozik az adataink tartományába, így az „Ismeretlen” karakterláncot adja meg.
Ajánlott:
Gimbal stabilizátor projekt: 9 lépés (képekkel)
Gimbal Stabilizer Project: Hogyan készítsünk egy kardántengelyt? Ismerje meg, hogyan készítsen kéttengelyes kardántengelyt az akciókamerájához. A mai kultúrában mindannyian szeretjük a videókat rögzíteni és megörökíteni a pillanatokat, különösen akkor, ha Ön olyan tartalomkészítő, mint én, biztosan szembesült azzal a problémával, hogy ilyen remegő videó
Automatizált EKG-BME 305 Végső projekt Extra jóváírás: 7 lépés
Automatizált EKG-BME 305 A végső projekt extra jóváírása: Egy elektrokardiogram (EKG vagy EKG) a dobogó szív által kibocsátott elektromos jelek mérésére szolgál, és nagy szerepet játszik a szív- és érrendszeri betegségek diagnosztizálásában és prognózisában. Az EKG -n szerzett információk egy része tartalmazza a ritmust
(IOT projekt) Időjárási adatok lekérése az ESP8266 és az Openweather API használatával: 5 lépés
(IOT Project) Időjárási adatok lekérése az ESP8266 és az Openweather API használatával: Ebben az utasításban egy egyszerű IOT projektet fogunk felépíteni, amelyben lekérjük városunk időjárási adatait az openweather.com/api webhelyről, és megjelenítjük azokat a Feldolgozó szoftver segítségével
Elektronikus varázslat 8 labda és szemgolyó: 11 lépés (képekkel)
Elektronikus Magic 8 Ball és szemgolyó: A Magic 8 Ball digitális változatát akartam létrehozni … Ennek a teste 3D nyomtatással készült, és a kijelzőt kék színű poliéderről egy kis OLED -re változtatták, amelyet véletlenszerű szám vezérel generátor programozva egy Arduino NANO -ba. Akkor én
LED izzó utólagos felszerelése a Halo 998 szemgolyó -vágáshoz: 8 lépés
LED izzó utólagos felszerelés a Halo 998 szemgolyó szegélyhez: Ez az útmutató leírja, hogyan kell módosítani a Halo 998 szemgolyó díszítőelemeket, hogy elfogadják a LumiSelect PAR/R16 fényerősségű izzót a earthled.com webhelyről. A LED izzó túl nagy ahhoz, hogy beférjen a díszítés szemgolyó nyílásába darab, de egy kis hatékonysággal