![Het voorschrift van uw oogbol in de gaten houden: een BME60B-project - Ajarnpa Het voorschrift van uw oogbol in de gaten houden: een BME60B-project - Ajarnpa](https://i.howwhatproduce.com/images/001/image-791-57-j.webp)
Inhoudsopgave:
- Stap 1: Foto's maken
- Stap 2: Laad de afbeeldingen in MATLAB
- Stap 3: Beeldanalyse
- Stap 4: Bereken de breedte van de witte vierkanten op het dambord
- Stap 5: Herhaal stap 3 en 4 voor de testafbeelding
- Stap 6: Bereken de vergroting van de lens
- Stap 7: R-kwadraat vinden en het recept van de gebruiker via interpolatie
- Stap 8: Het recept van de gebruiker in een grafiek weergeven
- Stap 9: Beperk uw recept
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-23 15:01
![Het recept van uw oogbol in de gaten houden: een BME60B-project Het recept van uw oogbol in de gaten houden: een BME60B-project](https://i.howwhatproduce.com/images/001/image-791-58-j.webp)
Door: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste
Vergroting is een van de belangrijkste kenmerken die aanwezig zijn voor leesbrillen, die worden geclassificeerd op basis van hun voorschrift van dioptrie. Volgens de Michigan Technology University is een dioptrie een brandpuntsafstand van de lens, meestal gemeten in mm, in meters (Michigan Technology University). Omdat een leesbril bolle lenzen heeft, zou de brandpuntsafstand positief zijn, waardoor de dioptrie ook positief zou zijn (HyperPhysics). De brandpuntsafstand neemt toe naarmate de afstand tussen het object verder van de eigenlijke lens komt, en dit leidt ertoe dat de dioptrieën afnemen omdat ze omgekeerd evenredig zijn. Daarom zou het hebben van een leesbril met extra dioptrieën de lens helpen om in het zicht in te zoomen, zodat het lijkt alsof de brandpuntsafstand kleiner is door de waarde van de dioptrieën te vergroten.
De gepresenteerde code zal worden gebruikt om de dioptrie van een lens met een onbekende sterkte te voorspellen. Er worden twee inputs gebruikt om het recept te berekenen: een foto van de gecontroleerde achtergrond zonder gebruik van lenzen, en een andere foto van dezelfde achtergrond maar door de lens naar keuze. Het programma meet de vervorming tussen deze twee foto's. Van daaruit kunnen we de dioptrie van de lens schatten en een resultaat produceren dat de gebruiker kan bekijken.
Voor deze Instructable heb je nodig:
- Een zwart-wit dambordpatroon gedrukt op een vel papier van 11x8.5 inch
- Een camera met de mogelijkheid om de focus te vergrendelen
- Een statief of iets dergelijks om de camera vast te zetten
- Diverse voorschriften voor leesbrillen
- MATLAB
Stap 1: Foto's maken
![Foto's nemen Foto's nemen](https://i.howwhatproduce.com/images/001/image-791-59-j.webp)
![Foto's nemen Foto's nemen](https://i.howwhatproduce.com/images/001/image-791-60-j.webp)
![Foto's nemen Foto's nemen](https://i.howwhatproduce.com/images/001/image-791-61-j.webp)
Om de vergroting van een lens te berekenen, moet je deze kunnen vergelijken met de werkelijke grootte van het object. Voor dit project zullen we een vergroot beeld vergelijken met een controlebeeld.
De eerste stap is dus om twee foto's van hetzelfde beeld te maken - de eerste door alleen de camera en de tweede door de lens van de leesbril die u wilt testen.
Je maakt een foto van een zwart-wit dambord van 8,5 x 11 inch met een raster van 1 inch. Stel uw camera 11 inch uit de buurt van het dambord. Vergrendel de focus op het dambord voordat u de foto's maakt.
Maak een foto van het dambord zonder de leesbril. Plaats vervolgens zonder iets te bewegen de leesbril voor de camera en maak de tweede foto.
Zorg ervoor dat de positie van uw camera niet verschuift tussen opnamen. Het enige dat tussen de twee foto's zou moeten veranderen, is de aanwezigheid van de brillens voor de camera.
Als u klaar bent met de foto's, uploadt u ze naar uw computer.
Stap 2: Laad de afbeeldingen in MATLAB
![Laad de afbeeldingen in MATLAB Laad de afbeeldingen in MATLAB](https://i.howwhatproduce.com/images/001/image-791-62-j.webp)
Open een nieuw schrift.
Geef eerst de map op waar de foto's zijn opgeslagen. Gebruik vervolgens de dir-functie om.jpg-afbeeldingen uit te pakken (of welk bestandstype uw afbeelding ook is).
Dir = 'C:\Users\kuras\Desktop\classes\SQ2\BME60b\Sandbox\testphotos'; GetDir = dir('*.jpg');
Voor ons project wilden we de gebruiker van het programma vragen welke bestanden ze wilden vergelijken. De eerste sectie vraagt de gebruiker om het controlebeeld te specificeren, en het tweede vraagt de gebruiker om het testbeeld te specificeren.
- %Vraag de gebruiker welk bestand het controlebeeld is.
- Control = input('# van controleafbeelding.\n');
- ControlFile = [GetDir(Control).naam]
- %Vraag de gebruiker welk bestand de afbeelding is die ze willen analyseren.
- ChooseFile = input('\n# van de afbeelding die u wilt analyseren.\n');
- PrescripFile = [GetDir(ChooseFile).naam];
Stap 3: Beeldanalyse
![Foto analyse Foto analyse](https://i.howwhatproduce.com/images/001/image-791-63-j.webp)
![Foto analyse Foto analyse](https://i.howwhatproduce.com/images/001/image-791-64-j.webp)
Een gekleurde afbeelding in MATLAB heeft de grootte MxNx3, terwijl een afbeelding in grijswaarden MxN heeft. Dit betekent dat het sneller is om een afbeelding in grijswaarden te verbeteren/bewerken omdat er minder gegevens zijn om bij te houden. Gebruik rgb2gray om de afbeelding naar grijswaarden te converteren. (De imrotate-functie werd gebruikt omdat onze foto's horizontaal kwamen - deze regel code kan al dan niet nodig zijn in uw versie.)
- %converteren naar grijswaarden en roteren
- I = imread (ControlFile);
- ik = rgb2gray(I);
- I = imroteren (I, 90);
Geef vervolgens de afbeelding weer. De subplot-functie wordt gebruikt zodat het testbeeld in latere stappen naast de besturing kan staan.
- %Scherm
- Figuur 1);
- subplot(1, 2, 1)
- imshow(ik);
- titel (ControlFile);
Gebruik imcrop om de gebruiker te vragen het dambord uit de volledige afbeelding bij te snijden. De volgende code toont ook een berichtvenster om instructies aan de gebruiker te geven.
- % dambord uitsnijden voor analyse
- waitfor(msgbox({'Gebruik het dradenkruis om het dambord uit te snijden.', 'Dubbelklik vervolgens op het interessegebied.'}));
- I_crop = imcrop(I);
Gebruik imbinarize om de afbeelding te binariseren.
I_binary = imbinariseren (I_crop);
Stap 4: Bereken de breedte van de witte vierkanten op het dambord
![Bereken de breedte van de witte vierkanten op het dambord Bereken de breedte van de witte vierkanten op het dambord](https://i.howwhatproduce.com/images/001/image-791-65-j.webp)
![Bereken de breedte van de witte vierkanten op het dambord Bereken de breedte van de witte vierkanten op het dambord](https://i.howwhatproduce.com/images/001/image-791-66-j.webp)
![Bereken de breedte van de witte vierkanten op het dambord Bereken de breedte van de witte vierkanten op het dambord](https://i.howwhatproduce.com/images/001/image-791-67-j.webp)
Vraag de gebruiker vervolgens om een lijn over de afbeelding te tekenen met imline. Deze lijn moet horizontaal over het dambord lopen. Het moet beginnen en eindigen op een zwart vierkant (het maakt niet uit waar) - dit is omdat we de breedte van de witte vierkanten zullen meten, niet de zwarte.
- %teken lijn
- Figuur 1)
- subplot(1, 2, 1)
- imshow(I_binair);
- waitfor(msgbox({'Klik en sleep om een lijn te tekenen die 9 vakken overspant, van een zwarte ruimte naar een zwarte ruimte.', 'Dubbelklik om te bevestigen.'}));
- lijn = imline;
- positie = wacht(lijn);
- eindpunten = line.getPosition;
Extraheer de X- en Y-coodinaten voor de eindpunten van de getekende lijn.
- X = eindpunten(:, 1)
- Y = eindpunten(:, 2);
Gebruik improfile om een grafiek te maken op basis van de intensiteiten die langs de getekende lijn worden gevonden. Dit moet lijken op een blokgolf van 0 (zwart) tot 1 (wit). Bereken ook de toppen en hun locaties.
- Figuur 2)
- subplot(1, 2, 1)
- title('Beeldintensiteit over de improfiellijn (Controle)')
- improfile (I_binair, X, Y); rooster aan;
- [~, ~, c1, ~, ~] = improfile(I_binary, X, Y);
- [pieken, loc] = vindpieken(c1(:,:, 1));
- vasthouden
- plot(loc, pieken, 'ro');
- wacht af
Zoek de lengte van elk plateau op de improfile-grafiek met behulp van een for-lus. Voer de for-lus uit voor hetzelfde aantal pieken als in de improfile-grafiek. Om de lengte van elk plateau te berekenen, gebruikt u de functie 'vinden' om alle locaties te vinden waar er een '1' is in plaats van een '0' intensiteitswaarde. Bereken vervolgens de lengte van die array om de totale lengte van het plateau te krijgen, die gelijk moet zijn aan de breedte van een wit vierkant in pixels. ControlPlateauList = zeros(1, length(loc));
voor i = 1: lengte (loc)
als ik == lengte(loc)
plateau = find(c1(loc(i):end,:, 1));
anders
plateau = find(c1(loc(i):loc(i+1)-1,:, 1));
einde
ControlPlateauList(i) = lengte(plateau);
einde
Stap 5: Herhaal stap 3 en 4 voor de testafbeelding
![Herhaal stap 3 en 4 voor de testafbeelding Herhaal stap 3 en 4 voor de testafbeelding](https://i.howwhatproduce.com/images/001/image-791-68-j.webp)
*Opmerking: wanneer u de niet-profiellijn op de testafbeelding tekent, moet u ervoor zorgen dat u deze over de vierkanten trekt die overeenkomen met de lijn die u op de controleafbeelding hebt getekend.
Stap 6: Bereken de vergroting van de lens
![Bereken de vergroting van de lens Bereken de vergroting van de lens](https://i.howwhatproduce.com/images/001/image-791-69-j.webp)
De vergrote metingen worden berekend door het gemiddelde van de lengte van het plateau, dat werd berekend in stap 5, te delen door het gemiddelde van de lengte van het controleplateau, dat werd berekend in stap 4. Dit wordt berekend op 1,0884.
vergroting = mean(plateauList)/mean(ControlPlateauList);
Stap 7: R-kwadraat vinden en het recept van de gebruiker via interpolatie
![Het vinden van R-kwadraat en het recept van de gebruiker via interpolatie Het vinden van R-kwadraat en het recept van de gebruiker via interpolatie](https://i.howwhatproduce.com/images/001/image-791-70-j.webp)
De code gebruiken:
- md1 = fitlm (GivenPrescription, MagArray);
- Rkwadraat = md1. Rkwadraat. Gewone;
We kunnen de R-kwadraatwaarde van de grafiek GivenPresciption (onze lenzen gegeven waarden) versus MagArray (een reeks van de vergrotingsmetingsverhoudingen die we eerder hebben berekend) vinden. Door een voldoende hoge R-kwadraatwaarde te hebben, kan worden afgeleid dat er een voldoende sterke correlatie is om het gebruik van deze methode te rechtvaardigen. Voor dit specifieke geval was de R-kwadraatwaarde 0,9912, wat een sterke correlatie suggereert en daarom gerechtvaardigd is om deze methode in analyse te gebruiken.
De functie gebruiken:
Prescription = interp1(MagArray, GivenPrescription, vergroting, 'lineair');
We kunnen de corresponderende receptwaarde (op de x-as) van onze vergrotingsverhouding (een waarde op de y-as) interpoleren en vinden wat het recept van de gebruiker is.
Het interpoleren van gegevens is belangrijk om deze methode te laten werken, omdat het ons in staat stelt om aannames te doen over informatie die we niet hebben, op basis van de informatie die we wel hebben. Hoewel een lijn met de beste pasvorm technisch gezien een sterkere kandidaat zou zijn voor deze veronderstelling, heeft het creëren van grenzen om het aantal outputs te verminderen hetzelfde effect als brillen op sterkte hoe dan ook in toenemende uniforme waarden. Dit wordt uitgelegd in latere stappen.
Stap 8: Het recept van de gebruiker in een grafiek weergeven
![Het recept van de gebruiker in een grafiek weergeven Het recept van de gebruiker in een grafiek weergeven](https://i.howwhatproduce.com/images/001/image-791-71-j.webp)
Met behulp van de volgende code:
- figuur;
- plot (GivenPrescription, MagArray, '-g')
- vasthouden
- plot (recept, vergroting, 'bp')
- wacht af
- rooster
- legend('Gegevens', 'Geïnterpoleerde punten', 'Locatie', 'NW')
We kunnen een grafiek plotten die de vergrotingsratio's versus het gegeven recept weergeeft met een groene lijn en de gevonden gegevens van onze berekende vergroting versus ons geïnterpoleerde recept met een blauwe ster. Vervolgens labelt de legenda de titel, x-as en y-as en plaatst de legenda in de linkerbovenhoek.
Stap 9: Beperk uw recept
![Beperk uw recept Beperk uw recept](https://i.howwhatproduce.com/images/001/image-791-72-j.webp)
De volgende code wordt gebruikt om de afronding voor het recept te maken:
-
als recept <= 1.125
BerekendPrescription = '1.0';
-
elseif Recept <= 1.375
BerekendPrescription = '1,25';
-
elseif Recept <= 1.625
BerekendPrescription = '1,5';
-
elseif Recept <= 1.875
BerekendPrescription = '1.75';
-
elseif Recept <= 2.25
BerekendPrescription = '2.0';
-
elseif Recept <= 2.625
BerekendPrescription = '2,5';
-
elseif Recept <= 3
BerekendPrescription = '2.75';
-
elseif Recept <= 3.375
BerekendPrescription = '3.25';
-
anders
BerekendPrescription = 'onbekend';
- einde
Het recept dat door interpolatie wordt gevonden, komt niet noodzakelijk overeen met het werkelijke recept - dit komt omdat er altijd kleine variaties in het analyseren van de foto zullen zijn als gevolg van menselijke fouten. We hebben deze stap dus nodig om het eigenlijke recept te classificeren.
De voorschriften die worden gegeven beginnen meestal vanaf 1,0 dioptrie en nemen toe met 0,25 in hun voorschriften, dus na het berekenen van het recept willen we het recept bepalen dat het beste past bij wat de gebruiker nodig heeft. Na het berekenen van het recept, lopen we het door de gegeven If-instructies om de waarde te controleren en te bepalen welk recept nodig is. Alles kleiner dan of gelijk aan 1,125, dan is het recept 1,0. Alles kleiner dan of gelijk aan 1,375, is het recept 1,25. Alles kleiner dan of gelijk aan 1,625, is het recept 1,5. Alles kleiner dan of gelijk aan 1,845, is het recept 1,75. Enzovoort.
We laten de waarden toenemen omdat we controleren of de waarden kleiner zijn dan. Als we de waarden zouden verlagen, zou het eerste if-statement altijd het eerste if-statement lezen. Als het recept het kleinste is, willen we dat het het meteen als het kleinste herkent, dus daarom zijn we begonnen met de kleinste waarde. Alles hoger dan de hoogste waarde betekent dat het recept niet binnen het bereik van onze gegevens ligt, dus het geeft de "Onbekende" tekenreekswaarde.
Aanbevolen:
Automatisch een programma starten bij het aansluiten van een laptop op een dockingstation: 5 stappen
![Automatisch een programma starten bij het aansluiten van een laptop op een dockingstation: 5 stappen Automatisch een programma starten bij het aansluiten van een laptop op een dockingstation: 5 stappen](https://i.howwhatproduce.com/images/001/image-1182-5-j.webp)
Een programma automatisch starten wanneer u een laptop op een dockingstation aansluit: deze instructie gaat over het uitvoeren van een programma of een toepassing wanneer u uw laptop op een dockingstation aansluit. In dit voorbeeld gebruik ik Lenovo T480 Windows 10
Password Keeper op Aruino Pro Micro of waarom het simpel houden als er een uitgebreide manier bestaat!: 15 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
![Password Keeper op Aruino Pro Micro of waarom het simpel houden als er een uitgebreide manier bestaat!: 15 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?" Password Keeper op Aruino Pro Micro of waarom het simpel houden als er een uitgebreide manier bestaat!: 15 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"](https://i.howwhatproduce.com/images/003/image-7692-44-j.webp)
Password Keeper op Aruino Pro Micro of waarom het simpel houden als er een uitgebreide manier bestaat!: Het lijkt erop dat het grootste probleem met microcontrollers voor liefhebbers van elektronica (vooral beginners) is om erachter te komen waar ze moeten worden toegepast :) , lijkt steeds meer op zwarte magie. Alleen 80-Lvl wisards zijn
Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!!
![Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!! Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!!](https://i.howwhatproduce.com/images/002/image-5221-70-j.webp)
Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen … Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!! Toegevoegde info: als je ooit naar een website gaat en een nummer speelt dat je leuk vindt en wilt, dan is hier de instructie voor jou, niet mijn schuld als je iets verknoeit (de enige manier waarop het zal gebeuren is als je dingen begint te verwijderen zonder reden )ik heb muziek kunnen krijgen voor
Instructies voor het voltooien van de mock-up van het ontwerp van de rupsschuif voor het heffen/verlagen van in het midden gemonteerde voetsteunen op elektrische rolstoelen - Ajarn
![Instructies voor het voltooien van de mock-up van het ontwerp van de rupsschuif voor het heffen/verlagen van in het midden gemonteerde voetsteunen op elektrische rolstoelen - Ajarn Instructies voor het voltooien van de mock-up van het ontwerp van de rupsschuif voor het heffen/verlagen van in het midden gemonteerde voetsteunen op elektrische rolstoelen - Ajarn](https://i.howwhatproduce.com/preview/how-and-what-to-produce/10965749-instructions-on-completing-mock-up-of-track-slide-design-for-liftlower-of-center-mounted-footrests-on-power-wheel-chairs-9-steps-with-pictures-j.webp)
Instructies voor het voltooien van de mock-up van het ontwerp van de rupsschuif voor het omhoog/omlaag brengen van in het midden gemonteerde voetsteunen op elektrische rolstoelen: in het midden gemonteerde voetsteunen kunnen omhoog worden gebracht om onder de zitting goed te worden opgeborgen en omlaag om te worden ingezet. Een mechanisme voor onafhankelijke bediening van het opbergen en plaatsen van de voetsteun is niet inbegrepen in elektrische rolstoelen op de markt, en PWC-gebruikers hebben de behoefte geuit
Een oude luidspreker repareren: een doe-het-zelfgids voor het verbeteren van uw stereo-installatie: 7 stappen
![Een oude luidspreker repareren: een doe-het-zelfgids voor het verbeteren van uw stereo-installatie: 7 stappen Een oude luidspreker repareren: een doe-het-zelfgids voor het verbeteren van uw stereo-installatie: 7 stappen](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11125023-fixing-an-old-speaker-a-diy-guide-to-improving-your-home-stereo-7-steps-j.webp)
Een oude luidspreker repareren: een doe-het-zelfgids voor het verbeteren van uw thuisstereo: wilt u een nieuw paar luidsprekers voor thuisgebruik, maar kunt u het zich niet veroorloven honderden dollars uit te geven? Waarom repareert u dan niet zelf een oude luidspreker voor slechts $ 30 !? Het vervangen van een luidsprekerdriver is een eenvoudig proces, of je nu een opgeblazen luidspreker hebt