Мазмұны:
- 1 -қадам: суретке түсіру
- 2 -қадам: суреттерді MATLAB -қа жүктеңіз
- 3 -қадам: кескінді талдау
- 4 -қадам: шахмат тақтасындағы ақ шаршылардың енін есептеңіз
- 5 -қадам: Сынақ кескіні үшін 3 және 4 -қадамдарды қайталаңыз
- 6 -қадам: Объективтің үлкейтуін есептеңіз
- 7-қадам: R-квадрат пен интерполяция арқылы пайдаланушының рецептісін табу
- 8 -қадам: Пайдаланушының рецептісін графикте көрсету
- 9 -қадам: рецептіңізді тарылтыңыз
Бейне: Көз алмасының рецепті: BME60B жобасы: 9 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
Авторы: Ханна Силос, Санг Хи Ким, Томас Васкес, Патрик Висте
Ұлғайтқыш - диоптерлердің рецепті бойынша жіктелген көзілдірікті оқуға арналған негізгі ерекшеліктердің бірі. Мичиган технологиялық университетінің мәліметі бойынша, диоптер - бұл линзаның фокус ұзындығы, әдетте мм -де, метр бірлігінде (Мичиган технологиялық университеті). Оқу көзілдірігінде дөңес линзалар болғандықтан, фокустық қашықтық оң болады, бұл диоптерлердің оң болуына әкеледі (HyperPhysics). Нысан арасындағы қашықтық нақты линзадан алыстаған сайын фокус ұзындығы артады және бұл диоптерлердің кері пропорционалды болуына байланысты төмендеуіне әкеледі. Сондықтан, қосымша диоптриясы бар оқу көзілдірігінің болуы линзаның көрінісін ұлғайтуға көмектеседі, осылайша диоптерлердің мәнін жоғарылату арқылы фокустық қашықтық аз болып көрінуі мүмкін.
Ұсынылған код рецепті белгісіз линзаның диоптриясын болжау үшін қолданылады. Рецептіні есептеу үшін екі кіріс қолданылады: линзаларды қолданбай басқарылатын фонның фотосуреті және сол фондағы, бірақ таңдаған объектив арқылы түсірілген басқа фотосурет. Бағдарлама осы екі фотосуреттің арасындағы бұрмалануды өлшейді. Сол жерден біз линзаның диоптриясын бағалай аламыз және пайдаланушы көруі үшін нәтиже шығара аламыз.
Бұл нұсқаулық үшін сізге қажет:
- Ақ-қара түсті шахмат үлгісі 11x8,5 қағазға басылған
- Фокусты жабу мүмкіндігі бар камера
- Штатив немесе камераны бекіту үшін ұқсас нәрсе
- Оқуға арналған көзілдіріктің әр түрлі рецептілері
- MATLAB
1 -қадам: суретке түсіру
Линзаның үлкейтуін есептеу үшін оны объектінің нақты өлшемімен салыстыра білу керек. Бұл жоба үшін біз үлкейтілген суретті басқарылатын кескінмен салыстыратын боламыз.
Осылайша, бірінші қадам - бір суреттің екі фотосуретін түсіру - біріншісі - тек камера арқылы, екіншісі - тексергіңіз келетін оқу көзілдірігінің линзасы арқылы.
Сіз 1 дюймдік торы бар 8,5x11in өлшемді қара -ақ шахмат суретін түсіресіз. Камераны шахмат тақтасынан 11 метр қашықтықта орнатыңыз. Фотоға түсер алдында фокусты шахмат тақтасына бекітіңіз.
Көзілдіріксіз шахмат тақтасын суретке түсіріңіз. Содан кейін, ештеңені қозғамай, оқу көзілдірігін камераның алдына қойып, екінші суретке түсіріңіз.
Камераның орналасуы кадрлар арасында қозғалмайтынына көз жеткізіңіз. Екі фотосуреттің арасында өзгеруі керек жалғыз нәрсе - камераның алдында көзілдіріктің объективі болуы.
Фотосуреттерді аяқтағаннан кейін оларды компьютерге жүктеңіз.
2 -қадам: суреттерді MATLAB -қа жүктеңіз
Жаңа сценарийді ашыңыз.
Алдымен фотосуреттер сақталатын каталогты көрсетіңіз. Содан кейін-j.webp
Dir = 'C: / Users / kuras / Desktop / classes / SQ2 / BME60b / Sandbox / testphotos'; GetDir = dir ('*. Jpg');
Біздің жоба үшін біз файлдарды салыстырғысы келетін бағдарламаның пайдаланушысын шақырғымыз келді. Бірінші бөлім пайдаланушыдан басқару бейнесін көрсетуді сұрайды, ал екіншісі пайдаланушыдан тест кескінін көрсетуді сұрайды.
- %Пайдаланушыдан қай файлдың басқару суреті екенін сұраңыз.
- Control = input ('бақылау суретінің саны. / N');
- ControlFile = [GetDir (Control).name]
- %Пайдаланушыдан қай файл талдағысы келетінін сұраңыз.
- SelectFile = енгізу ('\ n# талдағыңыз келетін кескіннің саны. / N');
- PrescripFile = [GetDir (SelectFile).атауы];
3 -қадам: кескінді талдау
MATLAB -тегі түрлі -түсті сурет MxNx3 өлшемінде, ал сұр шкаласы MxN. Бұл сұр реңкті суретті жақсарту/өңдеу жылдамырақ екенін білдіреді, себебі оны бақылау үшін деректер аз. Суретті сұр реңкке түрлендіру үшін rgb2gray пайдаланыңыз. (Имротат функциясы біздің фотосуреттер көлденең келгендіктен қолданылды - бұл код жолы сіздің нұсқада қажет болуы мүмкін немесе қажет емес.)
- %сұр реңкке айналады және айналады
- I = imread (ControlFile);
- I = rgb2gray (I);
- I = имротат (I, 90);
Әрі қарай, суретті көрсетіңіз. Ішкі жоспар функциясы сынақ кескіні келесі қадамдарда басқару элементінің жанында болуы үшін пайдаланылады.
- %дисплей
- сурет (1);
- ішкі жоспар (1, 2, 1)
- imshow (I);
- тақырып (ControlFile);
Қолданушыны шахмат тақтасын толық кескіннен қиюды сұрау үшін imcrop пайдаланыңыз. Келесі код сонымен қатар пайдаланушыға нұсқаулар беру үшін хабарлама терезесін көрсетеді.
- %талдау үшін шахмат тақтасын шығарыңыз
- 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);
Сызық бойында табылған интенсивтілікке негізделген график құру үшін импрофайлды қолданыңыз. Бұл 0 (қара) мен 1 (ақ) аралығында болатын шаршы толқынға ұқсауы керек. Шыңдар мен олардың орнын есептеңіз.
- сурет (2)
- ішкі жоспар (1, 2, 1)
- тақырып ('Кескіннің қате сызығы бойынша қарқындылығы (Басқару)')
- жетілдірілмеген (I_binary, X, Y); тор қосылған;
- [~, ~, c1, ~, ~] = жетілдірілмеген (I_binary, X, Y);
- [Peaks, loc] = findpeaks (c1 (:,,:, 1));
- күте тұр
- сюжет (лок, шыңдар, 'ro');
- тоқтата тұру
Форф циклінің көмегімен импрофильді графиктен әр үстірттің ұзындығын табыңыз. Болжамсыз диаграммадағы шыңдардың бірдей саны үшін for циклін іске қосыңыз. Әр үстірттің ұзындығын есептеу үшін «табу» функциясын қолданып, қарқындылықтың «0» орнына «1» болатын барлық орындарды табыңыз. Содан кейін, ақ квадраттың еніне пиксельмен тең болатын үстірттің жалпы ұзындығын алу үшін сол жиымның ұзындығын есептеңіз. ControlPlateauList = нөлдер (1, length (loc));
i = 1 үшін: ұзындық (loc)
егер мен == ұзындығы (loc)
үстірт = табу (c1 (loc (i): соңы,:, 1));
басқа
үстірт = табу (c1 (loc (i): loc (i+1) -1,:, 1)));
Соңы
ControlPlateauList (i) = ұзындығы (үстірт);
Соңы
5 -қадам: Сынақ кескіні үшін 3 және 4 -қадамдарды қайталаңыз
*Ескертпе: сынақ кескініне сәйкес емес сызық салғанда, оны бақылау кескінінде сызылған сызыққа сәйкес келетін квадраттар бойымен жүргізгеніңізге көз жеткізіңіз.
6 -қадам: Объективтің үлкейтуін есептеңіз
Үлкейтілген өлшемдер 5 -қадамда есептелген үстірттің ұзындығының 4 -қадамда есептелген бақылау үстірті ұзындығының ортасына бөлу арқылы есептеледі. Бұл 1.0884 деп есептеледі.
ұлғайту = орташа (plateauList)/орташа (ControlPlateauList);
7-қадам: R-квадрат пен интерполяция арқылы пайдаланушының рецептісін табу
Кодты қолдану:
- md1 = fitlm (GivenPrescription, MagArray);
- Rsquared = md1. Rsquared. Ordinary;
Біз GivenPresciption графигінің R-квадраттық мәнін таба аламыз (біздің линзалар берілген мәндер) және MagArray (біз бұрын есептеген үлкейту өлшемдерінің коэффициенті). R-квадраттың жеткілікті жоғары мәніне ие бола отырып, бұл әдісті қолдануды дәлелдейтін жеткілікті күшті корреляция бар деп қорытынды жасауға болады. Бұл нақты жағдай үшін R-квадрат мәні 0,9912 болды, бұл күшті корреляцияны болжайды, сондықтан талдау кезінде осы әдісті қолдануда негізделген.
Функцияны қолдану:
Prescription = interp1 (MagArray, GivenPrescription, ұлғайту, 'сызықтық');
Біз үлкейту коэффициентінің (х осінде) сәйкес рецепт мәнін (у осіндегі мән) интерполяциялай аламыз және пайдаланушының рецепті не екенін таба аламыз.
Бұл әдіс жұмыс істеуі үшін интерполяциялық деректер маңызды, өйткені ол бізде жоқ ақпарат туралы болжам жасауға мүмкіндік береді. Ең қолайлы сызық техникалық тұрғыдан бұл болжамға неғұрлым күшті үміткер болар еді, бірақ шығыс санын азайту үшін шекараны құру сол әсерді береді, себебі рецепт көзілдірігі біркелкі мәндерде болады. Бұл кейінгі қадамдарда түсіндіріледі.
8 -қадам: Пайдаланушының рецептісін графикте көрсету
Келесі кодты қолдану:
- фигура;
- сюжет (GivenPrescription, MagArray, '-g')
- күте тұр
- сюжет (рецепт, үлкейту, 'bp')
- тоқтата тұру
- тор
- легенда ('Деректер', 'Интерполяцияланған нүктелер', 'Орналасу', 'NW')
Біз үлкейту коэффициенттерін жасыл сызықпен көрсетілген диаграмманы және көк жұлдызы бар интерполяцияланған рецептімізге сәйкес есептелген үлкейтудің табылған мәліметтерін көрсете аламыз. Содан кейін легенда тақырыпты, х осін және у осін белгілейді және таңбаны сол жақ жоғарғы бұрышқа орналастырады.
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 диоптерден басталады және олардың рецептілерінде.25 -ке артады, сондықтан рецептті есептегеннен кейін біз қолданушыға қажет болуы мүмкін рецептіні анықтағымыз келеді. Рецепт есептелгеннен кейін, біз оның мәнін тексеру және рецепт қажет екенін анықтау үшін берілген If операторлары арқылы жүгіреміз. Кез келген нәрсе 1.125 -тен төмен немесе тең болса, онда рецепт 1.0. 1.375 -тен төмен немесе тең нәрсе - рецепт 1.25. 1.625 -тен төмен немесе тең нәрсе - рецепт 1,5. Кез келген нәрсе 1.845 -тен төмен немесе тең болса, рецепт 1.75 құрайды. Және тағы басқа.
Бізде мәндер кіші екенін тексергеннен кейін жоғарылайды. Егер біз мәндерді төмендететін болсақ, онда бірінші if операторы әрқашан if операторын оқиды. Егер рецепт ең кішкентай болса, біз оны бірден ең кішкентайы деп танығанын қалаймыз, сондықтан біз ең кіші құндылықты біз бастадық. Ең жоғары мәннен жоғары нәрсе рецепт біздің деректермен сәйкес келмейтінін білдіреді, сондықтан ол «Белгісіз» жолын оқуға мүмкіндік береді.
Ұсынылған:
Сақ көз: 10 қадам
Көзді қарау: Көзді қарау - бұл PIR сенсорының объектісі, ол адамдарға достарымен және жақындарының түнді бірге өткізгеннен кейін үйге қауіпсіз еткенін білуге көмектесу мақсатында жасалған. Біз барлығымыз бір түнде бір -бірімізден кетіп қалсақ, "
Адамның көз қозғалысын бақылау: 6 қадам
Адам көзінің қозғалысын бақылау: Бұл жоба адам көзінің қозғалысын түсіруге бағытталған және оның қозғалысын көздің пішінінде орналасқан жарықдиодты шамдар жиынтығында көрсетеді. Жобаның бұл түрі робототехника саласында, әсіресе гума саласында көп қолданылуы мүмкін
Серіктес қорапшасының рецепті (аппараттық ремикс / схеманың иілуі): 11 қадам (суреттермен)
Companion Box Recipe (Hardware Remix / Circuit Bending): Аппараттық ремиксинг-бұл музыкалық технологиялардың мүмкіндіктерін қайта тексеру әдісі. Серіктес қораптар - бұл электронды музыкалық аспаптар. Олар шығаратын дыбыстар қолданылатын тізбекке байланысты. Мен жасаған құрылғылар мультиэффектке негізделген
Қайта өңделген материалдан портативті дәнекерлеу станциясы. / Estación De Soldadura Portátil Hecha Con материалдық рецепті: 8 қадам (суреттермен)
Қайта өңделген материалдан портативті дәнекерлеу станциясы. / Estación De Soldadura Portátil Hecha Con Material Reciclado: Әкем керемет суретші және авантюрист болды, сонымен қатар ол DIY мәдениетінің үлкен жанкүйері болды. Ол үйге жиһаз бен шкафты жақсартуды, антикварлық шамдарды қайта өңдеуден тұратын көптеген өзгерістер енгізді, тіпті саяхат үшін VW комбиін өзгертті
Үшінші көз (Arduino жобасы): 3 қадам
Үшінші көз (Arduino жобасы): Сіз елес аулауға барғыңыз келетінін елестетіп көріңіз, бірақ сізде көптеген тәжірибелі аңшылар мен экстрасенстер қолдануға болмайтын оуижа тақтасынан басқа жабдық жоқ. EVP жазғыш. Сіз ашуға тырысып көрдіңіз бе