Orodha ya maudhui:

Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B: Hatua 9
Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B: Hatua 9

Video: Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B: Hatua 9

Video: Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B: Hatua 9
Video: Majambazi walipopambana na Polisi baada ya kuiba pesa NMB Bank 2024, Julai
Anonim
Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B
Kupiga Maagizo ya Mpira wa Jicho lako: Mradi wa BME60B

Na: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste

Ukuzaji ni moja ya huduma muhimu zilizopo kwa glasi za kusoma, ambazo zinaainishwa na maagizo yao ya diopta. Kulingana na Chuo Kikuu cha Teknolojia cha Michigan, diopter ni urefu wa lensi, kawaida hupimwa kwa mm, katika kitengo cha mita (Chuo Kikuu cha Teknolojia cha Michigan). Kwa sababu glasi za kusoma zina lensi mbonyeo, urefu wa kitovu ungekuwa mzuri, na kusababisha diopta kuwa chanya pia (HyperPhysics). Urefu wa kulenga huongezeka kadiri umbali kati ya kitu unavyozidi kwenda mbali na lensi halisi, na hii inasababisha diopta kupungua kwa kuwa zina usawa. Kwa hivyo, kuwa na glasi za kusoma na diopta za ziada kutasaidia lensi kukuza karibu na mtazamo ili ionekane kama urefu wa kitovu ni mdogo kwa kuongeza thamani ya diopta.

Nambari iliyowasilishwa itatumika kutabiri diopter ya lensi na dawa isiyojulikana. Pembejeo mbili hutumiwa kuhesabu maagizo: picha ya msingi uliodhibitiwa bila kutumia lensi yoyote, na picha nyingine ya msingi huo huo lakini kupitia lensi ya chaguo. Mpango huo utapima upotoshaji kati ya picha hizi mbili. Kutoka hapo, tutaweza kukadiria diopta ya lensi na kutoa matokeo kwa mtumiaji kutazama.

Kwa Agizo hili, utahitaji:

  • Mchoro wa ubao mweusi na nyeupe uliochapishwa kwenye karatasi ya 11x8.5
  • Kamera yenye uwezo wa kufunga umakini wake
  • Tatu, au kitu sawa na salama kamera
  • Maagizo anuwai ya glasi za kusoma
  • MATLAB

Hatua ya 1: Piga Picha

Piga picha
Piga picha
Piga picha
Piga picha
Piga picha
Piga picha

Ili kuhesabu ukuzaji wa lensi, unahitaji kuweza kulinganisha na saizi halisi ya kitu. Kwa mradi huu, tutalinganisha picha iliyokuzwa na picha ya kudhibiti.

Kwa hivyo, hatua ya kwanza ni kuchukua picha mbili za picha ile ile - ya kwanza kupitia kamera tu, na ya pili kupitia lensi ya glasi za kusoma unazotaka kujaribu.

Utakuwa unapiga picha ya ubao wa kuangalia nyeusi na nyeupe wa 8.5x11in na gridi ya 1in. Sanidi kamera yako 11in mbali na ubao wa kukagua. Kabla ya kuchukua picha, funga mwelekeo kwenye ubao wa kukagua.

Chukua picha ya ubao wa kukagua bila glasi za kusoma. Kisha, bila kusonga chochote, weka glasi za kusoma mbele ya kamera na upiga picha ya pili.

Hakikisha kwamba msimamo wa kamera yako hauingii kati ya risasi. Kitu pekee ambacho kinapaswa kubadilika kati ya picha hizo mbili ni uwepo wa lensi za glasi mbele ya kamera.

Ukimaliza na picha, pakia kwenye kompyuta yako.

Hatua ya 2: Pakia Picha kwenye MATLAB

Pakia Picha kwenye MATLAB
Pakia Picha kwenye MATLAB

Fungua hati mpya.

Kwanza, taja saraka ambapo picha zimehifadhiwa. Kisha, tumia kazi ya dir kutoa picha za-j.webp

Dir = 'C: / Watumiaji / kuras / Desktop / madarasa / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');

Kwa mradi wetu, tulitaka kushawishi mtumiaji wa programu hiyo ambayo faili walitaka kulinganisha. Sehemu ya kwanza inamwuliza mtumiaji kutaja picha ya kudhibiti, na ya pili inamwuliza mtumiaji kutaja picha ya jaribio.

  • Uliza mtumiaji faili ipi ni picha ya kudhibiti.
  • Udhibiti = pembejeo ('# ya picha ya kudhibiti. / N');
  • ControlFile = [GetDir (Udhibiti). Jina]
  • Uliza mtumiaji faili ipi ni picha ambayo wanataka kuchambua.
  • SelectFile = input ('\ n # ya picha unayotaka kuchambua. / N');
  • PrescripFile = [GetDir (SelectFile). Jina];

Hatua ya 3: Uchambuzi wa Picha

Uchambuzi wa Picha
Uchambuzi wa Picha
Uchambuzi wa Picha
Uchambuzi wa Picha

Picha ya rangi katika MATLAB ni ya saizi ya MxNx3, wakati picha ya kijivu ni MxN. Hii inamaanisha kuwa ni haraka kuongeza / kuhariri picha ya kijivu kwa sababu kuna data ndogo ya kuweka wimbo wa Tumia rgb2gray kubadilisha picha kuwa kijivu. (Kazi ya imrotate ilitumika kwa sababu picha zetu zilikuja kwa usawa - safu hii ya nambari inaweza kuwa au sio lazima katika toleo lako.)

  • % hubadilisha kuwa kijivu na huzunguka
  • I = imread (Udhibiti wa Faili);
  • I = rgb2gray (I);
  • I = kuiga (I, 90);

Ifuatayo, onyesha picha. Kazi ndogo ndogo hutumiwa ili picha ya jaribio itaweza kuwa karibu na udhibiti katika hatua za baadaye.

  • Maonyesho%
  • takwimu (1);
  • sehemu ndogo (1, 2, 1)
  • onyesha (I);
  • kichwa (ControlFile);

Tumia imcrop kumfanya mtumiaji apate ubao wa kukagua nje ya picha kamili. Nambari ifuatayo pia inaonyesha sanduku la ujumbe ili kutoa maagizo kwa mtumiaji.

  • Punguza ubao wa kukagua kwa uchambuzi
  • waitfor (msgbox ({'Use the cross hair to crop out checkerboard.', 'Kisha bonyeza mara mbili eneo la kupendeza.'}));
  • I_crop = imcrop (I);

Tumia imbinarize kupiga picha.

I_binary = imbinarize (I_crop);

Hatua ya 4: Mahesabu ya Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua

Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua
Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua
Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua
Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua
Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua
Hesabu Upana wa Viwanja Nyeupe kwenye Ubao wa kukagua

Halafu, mshawishi mtumiaji kuteka mstari kwenye picha kwa kutumia imline. Mstari huu unapaswa kukimbia usawa kwenye ubao wa kukagua. Inapaswa kuanza na kuishia kwenye mraba mweusi (haijalishi ni wapi) - hii ni kwa sababu tutakuwa tukipima upana wa mraba mweupe, sio weusi.

  • Chora mstari
  • takwimu (1)
  • sehemu ndogo (1, 2, 1)
  • onyesha (I_binary);
  • waitfor (msgbox ({'Bonyeza na uburute kuteka laini iliyo na masanduku 9, kutoka nafasi nyeusi hadi nafasi nyeusi.', 'Bonyeza mara mbili ili uthibitishe.'}));
  • mstari = imline;
  • msimamo = subiri (mstari);
  • ncha za mwisho = mstari.pataPosition;

Ondoa X na Y coodinates kwa ncha za mwisho wa mstari uliochorwa.

  • X = ncha za mwisho (:, 1)
  • Alama za mwisho = (:, 2);

Tumia maelezo mafupi kutengeneza grafu kulingana na nguvu zilizopatikana kwenye laini iliyochorwa. Hii inapaswa kufanana na wimbi la mraba linaloanzia 0 (nyeusi) hadi 1 (nyeupe). Mahesabu ya kilele na maeneo yao pia.

  • takwimu (2)
  • sehemu ndogo (1, 2, 1)
  • kichwa ('Ukali wa picha kwenye mstari usiofaa (Udhibiti)')
  • isiyo ya kawaida (I_binary, X, Y); gridi juu;
  • [~, ~, c1, ~, ~] = improfile (I_binary, X, Y);
  • [kilele, mahali] = vichwa vya upataji (c1 (:,:, 1));
  • subiri
  • njama (loc, peaks, 'ro');
  • shikilia

Pata urefu wa kila tambarare kwenye grafu isiyofaa kutumia kitanzi. Endesha kitanzi kwa kiwango sawa cha kilele kilicho kwenye grafu ya wasifu. Ili kuhesabu urefu wa kila eneo tambarare, tumia kazi ya 'kupata' kupata maeneo yote ambayo kuna '1' badala ya thamani ya kiwango cha '0'. Kisha, hesabu urefu wa safu hiyo ili kupata urefu wote wa nyanda, ambayo inapaswa sawa na upana wa mraba mweupe katika saizi. ControlPlateauList = zero (1, urefu (loc));

kwa i = 1: urefu (loc)

ikiwa i == urefu (loc)

tambarare = pata (c1 (loc (i): mwisho,:, 1));

mwingine

Plateau = pata (c1 (loc (i): loc (i + 1) -1,:, 1));

mwisho

ControlPlateauList (i) = urefu (nyanda za juu);

mwisho

Hatua ya 5: Rudia Hatua 3 na 4 kwa Picha ya Jaribio

Rudia Hatua 3 na 4 kwa Picha ya Jaribio
Rudia Hatua 3 na 4 kwa Picha ya Jaribio

* Kumbuka: wakati wa kuchora laini ya wasifu kwenye picha ya jaribio, hakikisha kuichora kwenye mraba ambayo inalingana na laini uliyochora kwenye picha ya kudhibiti.

Hatua ya 6: Hesabu Ukuzaji wa Lens

Hesabu Ukuzaji wa Lens
Hesabu Ukuzaji wa Lens

Vipimo vilivyokuzwa huhesabiwa kwa kugawanya maana ya urefu wa tambarare, ambayo ilihesabiwa katika hatua ya 5, kwa maana ya urefu wa eneo tambarare la kudhibiti, ambalo lilihesabiwa katika hatua ya 4. Hii imehesabiwa kuwa 1.0884.

ukuzaji = maana (orodha ya Plateau) / maana (ControlPlateauList);

Hatua ya 7: Kupata R-mraba na Utaftaji wa Dawa ya Mtumiaji Kupitia Utafsiri

Kupata R-mraba na Maagizo ya Mtumiaji kupitia Ufafanuzi
Kupata R-mraba na Maagizo ya Mtumiaji kupitia Ufafanuzi

Kutumia nambari:

  • md1 = fitlm (Uandikishaji uliopewa, MagArray);
  • Iliyotengwa = md1. Iliyotengwa. Kawaida;

Tunaweza kupata thamani ya mraba-mraba ya grafu iliyopewaPresciption (lensi zetu zilizopewa maadili) dhidi ya MagArray (safu ya uwiano wa vipimo vya ukuzaji tuliohesabu hapo awali). Kwa kuwa na kiwango cha mraba cha kutosha cha R, inaweza kudhaniwa kuwa kuna uhusiano mzuri wa kutosha kuhalalisha utumiaji wa njia hii. Kwa kesi hii, thamani ya mraba-R ilikuwa 0.9912, ambayo inapendekeza uwiano mkubwa na kwa hivyo ni haki ya kutumia njia hii katika uchambuzi.

Kutumia kazi:

Dawa = interp1 (MagArray, GivenPrescription, ukuzaji, 'linear');

Tunaweza kutofautisha thamani inayofanana ya dawa (kwenye mhimili wa x) ya uwiano wetu wa ukuzaji (thamani kwenye mhimili wa y) na upate maagizo ya mtumiaji ni nini.

Kutafsiri data ni muhimu kwa njia hii kufanya kazi kwani inatuwezesha kufanya dhana juu ya habari ambazo hatuna, kulingana na habari tunayo. Wakati laini inayofaa zaidi ingekuwa mgombea mwenye nguvu kwa dhana hii, na kuunda mipaka ya kupunguza idadi ya matokeo hutoa athari sawa na glasi za maagizo huja kwa viwango vya sare za ziada wakati wowote. Hii inaelezewa katika hatua za baadaye.

Hatua ya 8: Kuonyesha Agizo la Mtumiaji kwenye Grafu

Kuonyesha Maagizo ya Mtumiaji kwenye Grafu
Kuonyesha Maagizo ya Mtumiaji kwenye Grafu

Kutumia nambari ifuatayo:

  • takwimu;
  • njama (Imepewa Uandikishaji, MagArray, '-g')
  • subiri
  • kiwanja (Dawa, ukuzaji, 'bp')
  • shikilia
  • gridi ya taifa
  • hadithi ('Takwimu', 'Pointi Zilizochanganuliwa', 'Mahali', 'NW')

Tunaweza kupanga grafu inayoonyesha Viwango vya Ukuzaji dhidi ya Dawa Iliyopewa na laini ya kijani na data iliyopatikana ya ukuzaji wetu uliohesabiwa dhidi ya maagizo yetu yaliyounganishwa na nyota ya bluu. Kisha hadithi inaandika jina, x-axis, na y-axis na inaweka hadithi kwenye kona ya juu kushoto.

Hatua ya 9: Punguza Maagizo yako

Punguza Agizo Lako
Punguza Agizo Lako

Nambari ifuatayo inatumiwa kutoa kuzunguka kwa maagizo:

  • ikiwa Dawa <= 1.125

    MahesabuPrescription = '1.0';

  • mwingine ikiwa Maagizo <= 1.375

    MahesabuPrescription = '1.25';

  • mwingine ikiwa Maagizo <= 1.625

    MahesabuPrescription = '1.5';

  • vinginevyo kama Maagizo <= 1.875

    MahesabuPrescription = '1.75';

  • vinginevyo kama Maagizo <= 2.25

    MahesabuPrescription = '2.0';

  • vingine ikiwa Maagizo <= 2.625

    MahesabuPrescription = '2.5';

  • vinginevyo kama Dawa <= 3

    MahesabuPrescription = '2.75';

  • vingine ikiwa Dawa <= 3.375

    MahesabuPrescription = '3.25';

  • mwingine

    MahesabuPrescription = 'haijulikani';

  • mwisho

Dawa inayopatikana kupitia kuingiliana sio lazima ionyeshe maagizo halisi - hii ni kwa sababu kutakuwa na tofauti kidogo katika kuchambua picha kwa sababu ya makosa ya kibinadamu. Kwa hivyo, tunahitaji hatua hii kuainisha dawa halisi.

Maagizo ambayo hupewa kawaida huanza kutoka kwa diopta 1.0 na huongezeka kwa.25 katika maagizo yao, kwa hivyo baada ya kuhesabu maagizo tunataka kuamua dawa inayofaa zaidi kile mtumiaji anaweza kuhitaji. Baada ya kuhesabu maagizo, tunayatumia kupitia taarifa zilizopewa ikiwa ikiwa kuangalia thamani yake na kuamua ni maagizo gani muhimu. Chochote chini au sawa na 1.125, basi dawa ni 1.0. Chochote chini au sawa na 1.375, maagizo ni 1.25. Chochote chini au sawa na 1.625, dawa ni 1.5. Chochote chini au sawa na 1.845, maagizo ni 1.75. Nakadhalika.

Tunayo maadili yanayoongezeka kwani tunaangalia ikiwa maadili ni chini ya. Ikiwa tulipunguza maadili basi ya kwanza ikiwa taarifa ingesoma taarifa ya kwanza ikiwa wakati wote. Ikiwa dawa ni ndogo zaidi, tunataka kuitambua kama ndogo mara moja, kwa hivyo ndio sababu dhamana ndogo ndio tumeanza nayo. Chochote kilicho juu kuliko dhamana ya juu kinamaanisha kuwa maagizo hayatokani na data zetu, kwa hivyo itatoa usomaji wa kamba "isiyojulikana".

Ilipendekeza: