Բովանդակություն:

Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ. 9 քայլ
Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ. 9 քայլ

Video: Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ. 9 քայլ

Video: Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ. 9 քայլ
Video: Ի՞նչ է սպասվում Հայաստանին։Գաղտնի բացահայտումներ Վանգայի գուշակություններից / @ArgamBlog 2024, Հուլիսի
Anonim
Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ
Eyeballing Your Eyeball- ի դեղատոմսը. BME60B նախագիծ

Հաննա Սիլոս, Սանգ Հի Քիմ, Թոմաս Վասկես, Պատրիկ Վիստ

Խոշորացումը ընթերցման ակնոցների հիմնական հատկություններից մեկն է, որոնք դասակարգվում են ըստ դիոպտերի նշանակման: Ըստ Միչիգանի տեխնոլոգիական համալսարանի, դիոպտերը օբյեկտիվի կիզակետային երկարությունն է, որը սովորաբար չափվում է մմ -ով, մետրերի միավորով (Միչիգանի տեխնոլոգիական համալսարան): Քանի որ ընթերցանության ակնոցներն ունեն ուռուցիկ ոսպնյակներ, կիզակետային հեռավորությունը դրական կլիներ, ինչը կհանգեցներ նաև դիոպտերի դրական լինելուն (HyperPhysics): Կիզակետային երկարությունը մեծանում է, երբ օբյեկտի միջև եղած հեռավորությունը ավելի է հեռանում իրական ոսպնյակից, և դա հանգեցնում է դիոպտերի նվազման, քանի որ դրանք հակադարձ համեմատական են: Հետևաբար, լրացուցիչ դիոպտերներով ընթերցանության ակնոցներ ունենալը կօգնի ոսպնյակին մեծացնել տեսադաշտը, այնպես որ այն կարող է թվալ, թե կիզակետային հեռավորությունն ավելի փոքր է `բարձրացնելով դիոպտերի արժեքը:

Ներկայացված ծածկագիրը կօգտագործվի անհայտ դեղատոմսով ոսպնյակի դիոպտերը կանխատեսելու համար: Դեղատոմսը հաշվարկելու համար օգտագործվում է երկու մուտք ՝ վերահսկվող ֆոնի լուսանկար ՝ առանց ոսպնյակներ օգտագործելու, և նույն ֆոնի մեկ այլ լուսանկար, բայց ընտրության օբյեկտիվի միջոցով: Willրագիրը չափելու է այս երկու լուսանկարների միջև աղավաղումը: Այնտեղից մենք կկարողանանք գնահատել ոսպնյակի դիոպտրիան և արդյունք տալ օգտվողի համար:

Այս հրահանգի համար ձեզ հարկավոր է.

  • Սև-սպիտակ շախմատային նախշ ՝ տպված 11x8.5 թղթի վրա
  • Տեսախցիկ ՝ իր ֆոկուսը փակելու ունակությամբ
  • Եռոտանի կամ նման բան ՝ տեսախցիկն ամրացնելու համար
  • Ընթերցանության բաժակների տարբեր դեղատոմսեր
  • MATLAB

Քայլ 1: Լուսանկարեք

Նկարել, լուսանկարել
Նկարել, լուսանկարել
Նկարել, լուսանկարել
Նկարել, լուսանկարել
Նկարել, լուսանկարել
Նկարել, լուսանկարել

Ոսպնյակի խոշորացումը հաշվարկելու համար հարկավոր է կարողանալ այն համեմատել օբյեկտի իրական չափի հետ: Այս նախագծի համար մենք համեմատելու ենք խոշորացված պատկերը վերահսկիչ պատկերի հետ:

Այսպիսով, առաջին քայլը նույն լուսանկարից երկու լուսանկար անելն է `առաջինը պարզապես տեսախցիկի միջոցով, իսկ երկրորդը` ընթերցման ակնոցների ոսպնյակի միջոցով, որը ցանկանում եք փորձարկել:

Դուք նկարելու եք 8,5x11in չափսերով սև ու սպիտակ վահանակ ՝ 1 դյույմ ցանցով: Տեղադրեք ձեր տեսախցիկը շախմատային տախտակից 11 հեռավորության վրա: Լուսանկարներ անելուց առաջ կողպեք կենտրոնացումը շախմատային տախտակի վրա:

Լուսանկարեք շախմատային տախտակը ՝ առանց ընթերցանության ակնոցների: Այնուհետեւ, առանց որեւէ բան շարժելու, ընթերցանության ակնոցները տեղադրեք տեսախցիկի առջեւ եւ երկրորդ լուսանկարը կատարեք:

Համոզվեք, որ տեսախցիկի դիրքը չի շարժվում կադրերի միջև: Երկու լուսանկարների միջև միակ բանը, որ պետք է փոխվի, տեսախցիկի առջև դրված ակնոցի ոսպնյակի առկայությունն է:

Երբ ավարտեք լուսանկարները, դրանք վերբեռնեք ձեր համակարգչում:

Քայլ 2: Պատկերները տեղադրեք MATLAB- ում

Տեղադրեք պատկերները MATLAB- ում
Տեղադրեք պատկերները MATLAB- ում

Բացեք նոր սցենար:

Նախ նշեք գրացուցակը, որտեղ պահվում են լուսանկարները: Այնուհետեւ, օգտագործեք dir գործառույթը:

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

Մեր նախագծի համար մենք ցանկանում էինք հուշել ծրագրի օգտագործողին, թե որ ֆայլերի հետ են նրանք ցանկանում համեմատել: Առաջին բաժինը օգտվողին խնդրում է նշել վերահսկիչ պատկերը, իսկ երկրորդը `թեստային պատկերը:

  • %Հարցրեք օգտվողին, թե որ ֆայլն է կառավարման պատկերը:
  • Control = մուտքագրում ('# վերահսկման պատկերի. / N');
  • ControlFile = [GetDir (Control).անուն]
  • %Հարցրեք օգտվողին, թե որ ֆայլն է պատկերը, որը նա ցանկանում է վերլուծել:
  • ChooseFile = մուտքագրում ('\ n# պատկերը, որը ցանկանում եք վերլուծել: / n');
  • PrescripFile = [GetDir (ChooseFile). Անունը];

Քայլ 3: Պատկերի վերլուծություն

Պատկերի վերլուծություն
Պատկերի վերլուծություն
Պատկերի վերլուծություն
Պատկերի վերլուծություն

MATLAB- ում գունավոր պատկերը MxNx3 չափի է, մինչդեռ մոխրագույն մասշտաբի պատկերը MxN է: Սա նշանակում է, որ ավելի արագ է բարելավել/խմբագրել մոխրագույն մասշտաբի պատկերը, քանի որ ավելի քիչ տվյալներ կան հետևելու համար: Օգտագործեք rgb2gray ՝ պատկերը գորշ մասշտաբի փոխարկելու համար: (Իմրոտատ ֆունկցիան օգտագործվել է, քանի որ մեր լուսանկարները հորիզոնական են հայտնվել. Կոդի այս տողը կարող է անհրաժեշտ լինել կամ չլինել ձեր տարբերակում):

  • %փոխակերպել մոխրագույնի և պտտել
  • I = imread (ControlFile);
  • I = rgb2gray (I);
  • I = իմոտատ (I, 90);

Հաջորդը, ցուցադրեք պատկերը: Ենթածրագրի գործառույթը օգտագործվում է այնպես, որ փորձարկման պատկերը հետագայում կարողանա լինել կառավարման կողքին:

  • %ցուցադրում
  • գործիչ (1);
  • ենթահող (1, 2, 1)
  • ցուցադրել (I);
  • վերնագիր (ControlFile);

Օգտագործեք imcrop ՝ օգտվողին հուշելու համար, որ տախտակը կտրի ամբողջական պատկերից: Հետևյալ ծածկագիրը ցույց է տալիս նաև հաղորդագրության տուփ ՝ օգտվողին ցուցումներ տալու համար:

  • %կտրատել checkerboard վերլուծության համար
  • waitfor (msgbox ({'Օգտագործեք խաչմերուկներ `ստուգիչ տախտակ կտրելու համար:', 'Այնուհետեւ կրկնակի սեղմեք հետաքրքրության տարածքը:'}));
  • I_crop = imcrop (I);

Օգտագործեք imbinarize ՝ պատկերը երկուականացնելու համար:

I_binary = imbinarize (I_crop);

Քայլ 4. Հաշվարկեք վահանակի սպիտակ քառակուսիների լայնությունը:

Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը
Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը
Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը
Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը
Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը
Հաշվիր շախմատային տախտակի սպիտակ քառակուսիների լայնությունը

Հաջորդը, օգտագործողին հուշեք գծի գծել պատկերի վրա ՝ օգտագործելով imline: Այս գիծը պետք է հորիզոնական անցնի շախմատային տախտակի վրայով: Այն պետք է սկսվի և ավարտվի սև քառակուսու վրա (նշանակություն չունի, թե որտեղ)- սա այն պատճառով է, որ մենք չափելու ենք ոչ թե սև, այլ սպիտակ քառակուսիների լայնությունը:

  • %գծի գիծ
  • գործիչ (1)
  • ենթահող (1, 2, 1)
  • imshow (I_binary);
  • waitfor (msgbox ({'Կտտացրեք և քաշեք ՝ 9 տուփեր ընդգրկող գիծ գծելու համար ՝ սև տարածությունից մինչև սև տարածություն:', 'Կրկնակի սեղմեք `հաստատելու համար:'}));
  • տող = իմլին;
  • դիրք = սպասել (տող);
  • վերջնակետեր = line.getPosition;

Քաշված գծի վերջնակետերի համար հանեք X և Y կոդինատները:

  • X = վերջնակետեր (:, 1)
  • Y = վերջնակետեր (:, 2);

Օգտագործեք improfile ՝ գրաֆիկ ստեղծելու համար ՝ հիմնված գծված գծի երկայնքով հայտնաբերված ինտենսիվության վրա: Սա պետք է նմանվի քառակուսի ալիքի ՝ սկսած 0 -ից (սև) մինչև 1 (սպիտակ): Հաշվիր նաև գագաթները և դրանց գտնվելու վայրը:

  • գործիչ (2)
  • ենթահող (1, 2, 1)
  • վերնագիր ('Պատկերի ինտենսիվությունը անպատշաճ գծի վրայով (Կառավարում)')
  • անպատշաճ (I_binary, X, Y); ցանցը միացված է;
  • [~, ~, c1,, ~] = անպատշաճ (I_binary, X, Y);
  • [գագաթներ, loc] = գտնելու գագաթներ (c1 (:,:, 1));
  • սպասիր
  • հողամաս (loc, peaks, 'ro');
  • հետաձգել

Գտեք յուրաքանչյուր սարահարթի երկարությունը իմպրոֆիլային գրաֆիկի վրա ՝ օգտագործելով for loop: Գործարկեք for loop- ը նույն քանակությամբ գագաթների համար, որոնք կան անպատրաստ գրաֆիկում: Յուրաքանչյուր սարահարթի երկարությունը հաշվարկելու համար օգտագործեք «գտնել» գործառույթը ՝ գտնելու բոլոր այն վայրերը, որտեղ «1» -ի փոխարեն կա «0» ինտենսիվության արժեք: Այնուհետև հաշվարկեք այդ զանգվածի երկարությունը ՝ ստանալու բարձրավանդակի ընդհանուր երկարությունը, որը պետք է հավասար լինի պիքսելներով սպիտակ քառակուսի լայնությանը: ControlPlateauList = զրոներ (1, երկարություն (loc));

i = 1 համար: երկարություն (տեղ)

եթե ես == երկարություն (տեղ)

սարահարթ = գտնել (c1 (loc (i): վերջ,,, 1));

ուրիշ

սարահարթ = գտնել (c1 (loc (i): loc (i+1) -1,,,, 1));

վերջ

ControlPlateauList (i) = երկարություն (սարահարթ);

վերջ

Քայլ 5. Կրկնեք փորձարկման պատկերի 3 -րդ և 4 -րդ քայլերը

Կրկնեք 3 -րդ և 4 -րդ քայլերը փորձարկման պատկերի համար
Կրկնեք 3 -րդ և 4 -րդ քայլերը փորձարկման պատկերի համար

*Նշում. Փորձարկման պատկերի վրա անպատշաճ գիծը գծելիս համոզվեք, որ այն գծեք այն քառակուսիներով, որոնք համապատասխանում են վերահսկման պատկերի գծած գծին:

Քայլ 6: Հաշվիր ոսպնյակի խոշորացումը:

Հաշվիր ոսպնյակի խոշորացումը
Հաշվիր ոսպնյակի խոշորացումը

Խոշորացված չափումները հաշվարկվում են բարձրավանդակի երկարության միջինը, որը հաշվարկվել է 5 -րդ քայլում, հսկիչ սարահարթի երկարության միջինով, որը հաշվարկվել է 4 -րդ քայլում: Սա հաշվարկված է 1.0884:

խոշորացում = միջին (սարահարթ)/միջին (ControlPlateauList);

Քայլ 7: Գտնել R- քառակուսին և Օգտատիրոջ դեղատոմսը միջամտության միջոցով

Գտնել R- քառակուսին և Օգտատիրոջ դեղատոմսը միջնորդության միջոցով
Գտնել R- քառակուսին և Օգտատիրոջ դեղատոմսը միջնորդության միջոցով

Օգտագործելով ծածկագիրը.

  • md1 = fitlm (GivenPrescription, MagArray);
  • Rsquared = md1. Rsquared. Սովորական;

Մենք կարող ենք գտնել GivenPresciption (մեր ոսպնյակներին տրված արժեքները) գրաֆիկի R- քառակուսու արժեքը ընդդեմ MagArray- ի (ավելի վաղ հաշվարկված խոշորացման չափումների գործակիցների զանգված): Ունենալով բավականաչափ բարձր R- քառակուսի արժեք, կարելի է եզրակացնել, որ գոյություն ունի բավականաչափ ուժեղ հարաբերակցություն ՝ արդարացնելու այս մեթոդի կիրառումը: Այս կոնկրետ դեպքի համար R- քառակուսի արժեքը կազմել է 0.9912, ինչը ենթադրում է ուժեղ փոխկապակցվածություն և, հետևաբար, արդարացված է այս մեթոդը վերլուծության մեջ օգտագործելու մեջ:

Օգտագործելով գործառույթը.

Դեղատոմս = interp1 (MagArray, GivenPrescription, խոշորացում, «գծային»);

Մենք կարող ենք միջամտել մեր խոշորացման հարաբերակցության համապատասխան դեղատոմսի արժեքը (x առանցքի վրա) (արժեքը y առանցքի վրա) և գտնել, թե որն է օգտագործողի դեղատոմսը:

Տվյալների միջամտությունը կարևոր է այս մեթոդի աշխատանքի համար, քանի որ այն թույլ է տալիս մեզ ենթադրություններ անել մեր ունեցած տեղեկատվության վերաբերյալ ՝ հիմնվելով եղած տեղեկատվության վրա: Թեև ամենալավ պիտանի գիծը տեխնիկապես այս ենթադրության համար ավելի ուժեղ թեկնածու կլիներ, ելքերի քանակը նվազեցնելու համար սահմաններ ստեղծելը նույն ազդեցությունն է թողնում, ինչ դեղատոմսով ակնոցները, այնուամենայնիվ, ձեռք են բերում լրացուցիչ միասնական արժեքներ: Սա բացատրվում է հետագա քայլերում:

Քայլ 8. Օգտվողի դեղատոմսը գրաֆիկի վրա ցուցադրելը

Օգտատիրոջ դեղատոմսը գրաֆիկի վրա ցուցադրելը
Օգտատիրոջ դեղատոմսը գրաֆիկի վրա ցուցադրելը

Օգտագործելով հետևյալ ծածկագիրը.

  • գործիչ;
  • սյուժե (GivenPrescription, MagArray, '-g')
  • սպասիր
  • հողամաս (դեղատոմս, խոշորացում, «bp»)
  • հետաձգել
  • ցանց
  • լեգենդ («Տվյալներ», «Մեջտեղադրված միավորներ», «Տեղակայություն», «ԲԱ»)

Մենք կարող ենք գծել մի գրաֆիկ, որը ցույց է տալիս Կանաչ գծով «Խոշորացման հարաբերակցությունը ընդդեմ տրված դեղատոմսի» և մեր հաշվարկված խոշորացման գտած տվյալները ՝ կապույտ աստղով դեղատոմսի դիմաց: Այնուհետև լեգենդը պիտակավորում է վերնագիրը, x առանցքը և y առանցքը և տեղադրում լեգենդը վերին ձախ անկյունում:

Քայլ 9: Նեղացրեք ձեր դեղատոմսը:

Նեղացրեք ձեր դեղատոմսը
Նեղացրեք ձեր դեղատոմսը

Հետևյալ ծածկագիրը օգտագործվում է դեղատոմսի կլորացման համար.

  • եթե դեղատոմս <= 1.125

    CalculatedPrescription = '1.0';

  • elseif Դեղատոմս <= 1.375

    CalculatedPrescription = '1.25';

  • elseif Դեղատոմս <= 1.625

    CalculatedPrescription = '1.5';

  • elseif Դեղատոմս <= 1.875

    CalculatedPrescription = '1.75';

  • elseif Դեղատոմս <= 2.25

    CalculatedPrescription = '2.0';

  • elseif Դեղատոմս <= 2.625

    CalculatedPrescription = '2.5';

  • elseif Դեղատոմս <= 3

    CalculatedPrescription = '2.75';

  • elseif Դեղատոմս <= 3.375

    CalculatedPrescription = '3.25';

  • ուրիշ

    CalculatedPrescription = 'անհայտ';

  • վերջ

Ինտերպոլացիայի միջոցով հայտնաբերված դեղատոմսը պարտադիր չէ, որ արտացոլի իրական դեղատոմսը, քանի որ մարդկային սխալի պատճառով լուսանկարը վերլուծելիս միշտ կլինեն փոքր տատանումներ: Այսպիսով, մեզ անհրաժեշտ է այս քայլը `իրական դեղատոմսը դասակարգելու համար:

Սովորաբար տրվող դեղատոմսերը սկսվում են 1.0 դիոպտերից և դրանց դեղատոմսերում ավելանում են 0.25 -ով, ուստի դեղատոմսը հաշվարկելուց հետո մենք ցանկանում ենք որոշել այն դեղատոմսը, որը լավագույնս համապատասխանում է այն, ինչ օգտվողին կարող է անհրաժեշտ լինել: Դեղատոմսը հաշվարկելուց հետո մենք այն անցնում ենք տրված If հայտարարությունների միջոցով `դրա արժեքը ստուգելու և որոշելու համար, թե որ դեղատոմսն է անհրաժեշտ: Thingանկացած բան պակաս կամ հավասար 1.125 -ի, ապա դեղատոմսը 1.0 է: 1.375 -ից փոքր կամ հավասար ցանկացած բան, դեղատոմսը 1.25 է: Ինչ -որ բան պակաս կամ հավասար 1.625 -ի, դեղատոմսը 1.5 է: 1.845 -ից փոքր կամ հավասար ցանկացած բան, դեղատոմսը 1.75 է: Եվ այսպես շարունակ:

Մեզ մոտ արժեքներն աճում են, քանի որ մենք ստուգում ենք, թե արդյոք արժեքները փոքր են: Եթե մենք անենք արժեքների նվազում, ապա առաջին if հայտարարությունը կկարդա առաջին if հայտարարությունը ամբողջ ժամանակ: Եթե դեղատոմսը ամենափոքրն է, մենք ցանկանում ենք, որ այն անմիջապես ճանաչվի որպես ամենափոքրը, ուստի այդ պատճառով ամենափոքր արժեքն այն է, ինչից սկսել ենք: Ամենաբարձր արժեքից բարձր որևէ բան նշանակում է, որ դեղատոմսը մեր տվյալների տիրույթում չէ, ուստի այն թույլ կտա կարդալ «Անհայտ» տողը:

Խորհուրդ ենք տալիս: