Лазерный дальномер из web камеры

Содержание

Денисюк Роман Эдуардович

Факультет компьютерных информационных кехнологий и автоматики

Кафедра электронной техники

Специальность «Научные, аналитические и экологические приборы и системы»

Обоснование, разработка и исследование лазерного дальномера для систем машинного зрения роботов

Научный руководитель: к. т. н., доц. Кузнецов Дмитрий Николаевич

Лазерный дальномер своими руками

Содержание

Введение

В продаже, есть большое количество дешевых датчиков – дальномеров, в их числе ультразвуковые и инфракрасные. Все эти устройства работают хорошо, но из-за значительного веса, не подходят для летающих роботов. Миниатюрный робот вертолет, например, может нести около 100&nbspг полезной нагрузки. Это даёт возможность использовать, для поиска препятствий и предотвращения столкновений с ними, машинное зрение, используя веб-камеры (или другие миниатюрные, беспроводные камеры с подключением к компьютеру через USB). А еще лучше, установить две камеры, что обеспечит роботу, стерео зрение, таким образом, благодаря информации о глубине изображения, улучшится обход препятствий. Недостатком этой идеи является сравнительно большой вес камеры.

1. Лазерный дальномер из веб-камеры

1.1. Принцип работы

Лазерная точка проектируется на возможное препятствие, лежащие в поле зрения камеры, расстояние до этого препятствия может быть легко вычислено. Математика здесь очень простая, обработку данных лучше всего производить в компьютерных приложениях. (см. рис. 1.1)

Рисунок 1.1 – Принцип действия дальномера

Итак, вот как это работает. Лазерный луч проецируется на объект в поле зрения камеры. Этот луч должен быть идеально параллелен оптической оси камеры. Лазерная точка захватывается вместе с остальной сценой. Простой алгоритм ищет на изображении яркие пиксели. Предполагая, что точка лазера является яркой на фоне более тёмной обстановки (я использовал обычную лазерную указку купленную в магазине за доллар), изначально положение точки в кадре не известно. Затем нам нужно рассчитать дальность до объекта, основываясь на том, где вдоль оси Y находится лазерная точка, чем ближе она к центру изображения, тем дальше находится объект.

Как мы видим из рисунка выше, расстояние (D) может быть рассчитано по формуле:

Конечно, для решения этого уравнения, вы должны знать, h – фиксированное расстояние между лазерной указкой и камерой. Знаменатель высчитывается так:

Для калибровки системы, мы будем собирать серию измерений, где нам известно, дальность до цели, а также количество пикселей центра изображения до точки лазера.

Используя следующее уравнение, мы можем вычислить угол наклона в зависимости от значения h, а также фактическое расстояние до каждой точки.

Теперь у нас есть расчётные значения, мы можем придумать отношения, что позволяет нам рассчитывать, дальность, зная количеством пикселей от центра изображения. Можно использовать линейную зависимость.

Зная калибровочные данные, можно посчитать:

1.2. Компоненты

Для сборки дальномера требуется не так много деталей: веб-камера и лазерная указка. Для соединения лазерной указки и камеры необходимо вырезать раму из жести или фанеры:

Собранный дальномер должен выглядеть примерно следующим образом:

1.3. Программное обеспечение

Программа-обработчик написана на двух языках: Visual C&nbsp++ и Visual Basic. Вы, вероятно, подумаете, что программа на Visual Basic проще, чем на VC&nbsp++ в плане кода, но во всём есть компромисс. Код на VC&nbsp++ можно собрать бесплатно (при условии, что у вас есть Visual Studio), в то время как код VB требует приобретение программных пакетов сторонних производителей (в дополнение к Visual Studio).

Коды программ написанных на Visual Basic и Visual C&nbsp++ можно найти по ссылке: www.cxem.net

1.4. Дальнейшая работа

Одним из конкретных улучшений, которые могут быть внесены в этот дальномер, является проекция горизонтальной лазерной линии, вместо точки. Таким образом, мы сможем вычислять расстояние до цели, для каждого ряда пикселов на изображении [1].

2. Фазовый лазерный дальномер

В даном разделе описаны натуральные испытания макетного образца фазового лазерного дальномера, полученного собственными силами.

2.1. Выбор метода измерений

Принцип действия дальномера физического типа заключается в измерении времени, которое затрачивает посланный дальномером сигнал для прохождения расстояния до объекта и обратно. Способность электромагнитного излучения распространяться с постоянной скоростью дает возможность определять дальность до объекта.

Существует несколько методов измерения дальности:

1. Метод триангуляции.

3. Импульсный метод.

4. Фазовый метод.

Разрабатываемый лазерный дальномер предлагается выполнить но основе фазового метода. Фазовый метод измерения расстояний основан на определении разности фаз посылаемых и принимаемых модулированных сигналов.

Режим работы устройства зависит от его температуры, с изменением которой незначительно изменяется фаза сигнала. Вследствие этого точное начало отсчета фазы определить нельзя. С этой целью фазовые измерения повторяются на эталонном отрезке (калибровочной линии) внутри прибора. Главное преимущество фазового метода измерения – более высокая точность, которая может достигать единиц миллиметров [2].

2.2. Создание макетного образца

Для проверки теоретических положений на практике, проверки устойчивости усилительных каскадов и предварительной оценки чувствительности и уровня шумов измерительного канала отраженного лазерного излучения был разработан и исследован его макетный образец.

В качестве излучателя при разработке макетного образца использован стандартный модуль красного лазерного светодиода (см. рис. 2.1) мощностью 5&nbspмВт длиной волны 650&nbspнм.

Читайте также:  Два простых аналоговых стабилизатора

Рисунок 2.1 – Модуль лазерного светодиода

Для регистрации отраженного лазерного излучения в качестве фотоприемника использован pin-фотодиод bpw24r (см. рис. 2.2). К преимуществам данного фотодиода следует отнести высокую чувствительность в красной области видимого спектра, узкую диаграмму направленности и малую емкость р-п-перехода (5&nbspпФ). Максимальная рабочая частота 35&nbspМГц.

Рисунок 2.2 – PIN-фотодиод bpw24r

Для генерации рабочего и опорного сигналов использован модуль DDS генератора сигналов на базе микросхемы AD9850 (см. рис. 2.3). Рабочий диапазон генерируемых синусоидальных колебаний лежит в пределах от 1&nbspГц до 40&nbspМГц, шаг перестройки 1&nbspГц, относительная нестабильность частоты 10 -5 .

Рисунок 2.3 – Модуль AD9850 DDS генератора сигналов

В качестве микропроцессорного модуля управления использована стандартная плата Arduino Uno (см. рис. 2.4) на базе современного микро-контроллера ATmega328 c тактовой частотой 16&nbspМГц.

Рисунок 2.4 – Микропроцессорный модуль Arduino Uno

На рисунке 2.5 приведена схема модулятора лазерного излучения. Гармоничный сигнал частотой 10 МГц и амплитудой 0,5 В с выхода DDS генератора поступает на электронный усилитель с коэффициентом усиления по напряжению KU&nbsp=&nbsp3, построен на базе операционного усилителя DA1 AD8042. С помощью подстроечного резистора R1 обеспечивается выбор оптимального положения рабочей точки по постоянному току.

Рисунок 2.5 – Функциональная схема модулятора лазерного излучения

На рисунке 2.6 представлена схема отраженного лазерного сигнала, состоящий из фотоусилителя на DA1, смесителя и двухкаскадного избирательного усилителя на DA2 и DA3. Фотопидсилювч превращает измерительный оптический сигнал в электрический. На выходе смесителя формируется низкочастотный разностный сигнал с частотой 1 кГц, который после фильтрации двухзвенный фильтром нижних частот (R3, R4, C4, C5) поступает на избирательный усилитель с коэффициентом усиления около 10000.

Модулятор лазерного излучения и измерительного канала отражен-ного сигнала собраны на отдельных беспаечних монтажных платах (см. рис. 2.7 и 2.8). Программное обеспечение модуля разработано в среде Arduino 1.0.5. Для управления DDS генератором использована стандартная библиотека AH_AD9850.h .

Рисунок 2.6 – Функциональная схема измерительного канала отраженного лазерного излучения

В результате испытаний макетного образца получили:

– Уровень шумов на выходе избирательного усилителя составляет 5&nbspмВ;

– Уровень полезного сигнала на выходе избирательного усилителя при расстоянии до объекта 2 м составляет 200&nbspмВ;

– Самовозбуждение усилителя отсутствует;

– Внешняя засветка фотодиода на результаты измерений не влияет.

Рисунок 2.7 – Макетная плата модулятора

Рисунок 2.8 – Макетная плата измерительного канала отраженного сигнала

3. Заключение

В целом результаты макетирование подтверждают способность предложенного способа измерений, основанного на технике прямого преобразования частоты. Чувствительность измерительного канала достаточна для регистрации отраженного лазерного сигнала. Уровень выходного сигнала позволяет в дальнейшем простыми средствами определять его фазу и вычислять расстояние до объекта.

roboforum.ru

Технический форум по робототехнике.

  • Список форумовМастерскаяНаши проекты
  • Изменить размер шрифта
  • Версия для печати
  • Магазин
  • Правила
  • Wiki
  • FAQ
  • Регистрация
  • Вход

Сканирующий лазерный дальномер

Re: Сканирующий лазерный дальномер

Zombie_Forever » 01 фев 2013, 23:22

Re: Сканирующий лазерный дальномер

citizen » 02 фев 2013, 20:35

Re: Сканирующий лазерный дальномер

Zombie_Forever » 03 фев 2013, 13:59

[quote=”citizen”]Здесь [url]https://sites.google.com/site/todddanko/home/webcam_laser_ranger[/url] упоминается дальномер на базе веб-камеры и указки.
Почему камера от мобильника?
Зачем вертикальный рассеиватель? Для 3D? Так для этих целей kinect есть.[/quote]
Камера от мобилы по 2 причинам:
1 дешево;
2 можно прикрутить к МК.
Вертикальный рассеиватель лазера для рисования не точки на препятствии, а линии. Что это нам даст ?
Это нам даст:
1 возможность построения 3Д на будущее(если захочется модернизировать ПО, а вообще это побочная возможность);
2 при правильном расположении камеры – минимум расчётов, за то будет известны расстояния как до объектов над уровнем пола, так и ниже его уровня(лестница например).

Все знают как работает “стандартный” способ определения расстояния с помощью камеры и лазера, но это совсем другое.

Re: Сканирующий лазерный дальномер

Angel71 » 03 фев 2013, 17:25

Re: Сканирующий лазерный дальномер

citizen » 03 фев 2013, 17:35

Матрица от телефона дает максимум 30 кадров в секунду (и только при хорошем освещении). Рассеиватель еще больше ослабит лазерный луч, так что обнаружить его матрицей будет практически нереально.
Обработка данных с камеры на контроллере не так уж проста.
По поводу часто упоминаемого 3D – что делать с данными? Даже 2D SLAM – не самая простая задача.

По поводу Айфона –
640×480@90fps – поток данных минимум 55 Мбайт/сек
320×240@120fps – – поток данных минимум 12 Мбайт/сек
При помощи чего такой поток обрабатывать?

Re: Сканирующий лазерный дальномер

Angel71 » 03 фев 2013, 17:50

Re: Сканирующий лазерный дальномер

Zombie_Forever » 03 фев 2013, 19:11

Ребят не забывайте, что те данные которые я показал обработать ну очень просто.
Фпс опять же выбирается в зависимости от поставленной задачи.
Если нужно для очень шустрого робота, то да, нужно чем больше – тем лучше тогда либо увеличение количества МК, либо потребуется более шустрый МК, а для робота типа пылесоса и подобных можно и меньше.
Согласен с Citizen по поводу ослабления луча, но эта болезнь любого дальномера с лазером.
Самое заманчивое в моей(возможно до меня это кто и проделывал, но я не нашел в интернете подобного) идее это:
1 ну очень дешевый прибор, по сравнению с тем же kinect;
2 возможность обработки полученных данных на МК(расчёты просты как 2 копейки даже для 3D);
3 камера (если обрабатывать на МК) подойдет от старых мёртвых телефонов по скольку расширение можно использовать самое минимальное – его будет более чем достаточно;

Проблемные места:
1 из за последовательного интерфейса камеры при помощи дешёвого МК на много фпс рассчитывать не приходится;
2 последствия первого пункта – скорость сканирования на 360 градусов может быть недостаточной, а если точнее очень медленной;
3 из за рассеивания лазера потери интенсивности свечения его, что в общем то проблема любого дальномера на лазере.

Re: Сканирующий лазерный дальномер

sub_null » 04 фев 2013, 01:53

Правильно было сказано про большой поток данных с сенсора. Если это не jpeg а RAW данные, то для их обработки необходим примерно такой девайс:
http://www.aliexpress.com/item/Mini-PC- . 77179.html

Кстати нужно учитывать, что угол на такой оптике небольшой, всего 60-70 градусов. Для навигации лучше больше.

В итоге получем сумму в 100$. В тоже время Kinect стоит все дешевле:
http://www.microsoftstore.com/store/mss . .216507400

Re: Сканирующий лазерный дальномер

Angel71 » 04 фев 2013, 03:45

Re: Сканирующий лазерный дальномер

Zombie_Forever » 04 фев 2013, 10:31

Читайте также:  Инверторный блок питания для завода автомобиля

[quote=”sub_null”]Правильно было сказано про большой поток данных с сенсора. Если это не jpeg а RAW данные, то для их обработки необходим примерно такой девайс:
http://www.aliexpress.com/item/Mini-PC- . 77179.html

Кстати нужно учитывать, что угол на такой оптике небольшой, всего 60-70 градусов. Для навигации лучше больше.

В итоге получем сумму в 100$. В тоже время Kinect стоит все дешевле:
http://www.microsoftstore.com/store/mss . .216507400 [/quote]
С такими мощностями и видеокамерой, на которые ты замахнулся уже можно делать мозг робота полностью, хотя за эти же деньги я бы купил миниАТХ с 2х яйцовым процом + веб камера(желательно RGB) + детали для ИК прожектора, тогда можно и от лазера отказаться вообще. Строить именно по изображению как в kinect да ещё и кучу других расчётов делать + полное управление всеми механизмами. В то же время с kinect + мозг робота это выйдет куда дороже.
Всё же методы с лазерами не нужно ассоциировать с kinect – совсем разные технологии, да и мощности требуемые для расчётов тоже, соответственно, разные, а от сюда и цена вопроса разная.
Вот например зачем мне камера за 30$, да ещё мне JPEG льёт ? С JPEG обработкой будет куча ресурсов МК (процессора) тратиться не на обработку данных идущих в картинке, а на обработку самого формата картинки. Тут RGB подходит больше всего, хотя YUV тоже сгодится, в любом случае лучше чем в формате JPEG.
Лазер рассеивать (делать развертку) можно без потери яркости 2 методами:
1 сам лазер вращать;
2 вращать отражатель (зеркало).
Да, не спорю, предложенный мной способ построения карты помещения будет не супер быстрый(из за дешевой и медленной камеры от сотика + МК типа PIC либо Amtel), но достаточно приемлемый, тем более в отличии от “стандартного” способа камера+лазер(точка) даст не только расстояние до объекта на определённой высоте, а даст расстояния до объектов ДО ОПРЕДЕЛЕННОЙ ВЫСОТЫ. В чём разница ? Например робот пылесос будет знать может ли он залезть под диван, в тоже время будет знать, что на полу лежит что то и сможет ли он это что то переехать, или лучше объехать.

Re: Сканирующий лазерный дальномер

citizen » 04 фев 2013, 11:11

Как сделать дальномер лазерный самостоятельно?

Итак, что же такое дальномер лазерный своими руками? Данное приспособление используется во многих сферах жизни человека. Им еще пользуются геологи и геодезисты. Это устройство можно использовать везде, где требуется произвести замеры расстояния с абсолютной точностью. По этой причине широкую популярность получили лазерные дальномеры, у которых высокие показатели точности и надежности. А можно ли соорудить такое устройство собственными руками?Такой дальномер выполняет измерения благодаря световым потокам. Сигналом выступает электромагнитное излучение, которое окрашено в нужный цвет. Зачастую оно бывает красным. По законам физики скорость света значительно выше скорости звука, поэтому время измерения равного промежутка будет отличаться.

Устройство лазерного дальномера.

Главные причины для установки лазерного дальномера

Использовать рулетку в некоторых случаях неудобно. За последнее десятилетие предпочтение отдается электронным устройствам.

Они работают по принципу бесконтактного способа.

Данное устройство состоит из следующих элементов: платы, микроконтроллера, усилителя сигнала лазера, лазера, фотоприемника, фильтра.
Лазерное излучение образовывается с помощью синусоидального сигнала. Его сложно получить, если частота 10 МГц. Рекомендуется использовать меандр с необходимой частотой. При усилении сигнала, который приходит из фотоприемника, нужно убрать ненужные гармоники специальным полосовым фильтром, работающим на частоте 10 МГц. На выходе образовывается сигнал, который напоминает синусоидальный.

Принцип работы лазерного дальномера

Схема работы лазерного дальномера.

Его принцип является очень простым. Это приемо-передающий прибор, излучающий и принимающий лазерный импульс, который отражается от поверхности.

Однако само по себе это устройство является сложным.

Важными моментами этого устройства являются многофункциональность, максимальный и минимальный промежуток выполнения измерений, точность устройства, воздействие внешних факторов на качество результатов.

Далее будет рассмотрено, как делается лазерный прибор для измерения расстояния.

Выполнение лазерного дальномера своими руками

Такое устройство может находить свое применение, если требуется определить промежуток до объекта, к которому очень сложно добраться.
Список необходимых инструментов и материалов:

Лазерный дальномер из веб камеры.

  • ножницы для работ с металлом;
  • полоски из железа;
  • 2 лазерные указки;
  • линейка;
  • доски;
  • инструмент для столярных работ.

Чтобы выполнить лазерный дальномер своими руками, нужно сначала взять ровную доску из древесины и укрепить на второй доске. Такая конструкция станет основанием для последующего устройства. Оно должно получиться ровным и стоять устойчиво.

Затем необходимо отмерить от одного края начальный отрезок, длина которого должна быть от 50 до 100 см. От того, каким будет промежуток, будет зависеть, насколько точным будет измерение промежутка.
Потом необходимо выполнить 2 равных визира. В этих целях нужно использовать 2 линейки из древесины. На их краях требуется закрепить мушки с прорезями аналогично оружейным. Выполняются они в виде пластинок из угольников железных либо алюминиевых. Далее они прикручиваются шурупчиками по боками деревянных линеек.

Теперь требуется выполнить осевые отверстия, которые будут располагаться строго по центру визиров. Линейки требуется укрепить по краям мерного участка. Нужно учитывать, чтобы 1 визир смог горизонтально вращаться вокруг собственной оси, а другой был надежно прикреплен. Прикрепить на 2 визирах лазерные указки.
Далее нужно расположить дальномер в положение, чтобы на требуемый объект направлялся невращающийся визир. Затем необходимо себе представить, что выполняется прицел на объект из оружия и направить другой визир на этот же объект. Выполняется определение угла между осью другого визира и начальным отрезком. Получится прямоугольный треугольник, где начальный отрезок выступает катетом, а еще известен примыкающий к нему угол. Если применять теорему тангенсов, то можно будет вычислить и второй катет. Его показатель и будет расстоянием до нужного объекта. Вот так выполняется дальномер своими руками.

Вот теперь известно, как правильно делается данное устройство. Из приведенной инструкции ясно, что особых усилий и специальных знаний и умений для этого не требуется. Важно придерживаться того алгоритма и советов, которые описаны выше. Таким лазерным дальномером своими руками будет очень удобно пользоваться, потому как свои силы, свои вложения труда и души намного важнее, и такой прибор очень долго вам прослужит. Стандартные рулетки для измерений уже теряют свою известность, популярность и широкое применение. А с таким прибором будете идти в ногу со временем и инновациями. А вышеописанная инструкция и советы смогут в этом помочь.
Желаем вам удачи!

Лазерный дальномер RZ-AS120 на 120м с цветным дисплеем и видеокамерой.

  • Цена: $99 (или $81 за версию на 80м)
  • Перейти в магазин
Читайте также:  Каскадный широкополосный усилитель мощности

Всякие дальномеры здесь уже обозревались, но с видеокамерой еще не было. Когда я увидел этот дальномер да еще и за приемлемые деньги, то решил взять на пробу, было интересно удобно ли пользоваться камерой или это просто не нужная функция. Все это под катом

Xарактеристики
Диапазон измерения 0,05-120 м
Измерения расстояния, площади, объема и косвенных измерений по теореме Пифагора
Электронный уровень
Точность измерения ± 2мм
Память на 100 ячеек
Порт USB

Пришел дальномер уже в привычной стандартной коробке


В комплекте:
— Дальномер
— Чехол
— Шнурок на руку
— 3 аккумулятора ААА на 800 mah
— Световозвращающая пластина
— usb — microusb кабель
— диск с программным обеспечением
— Инструкция



Аккумуляторы проверил на соответствие емкости, результаты почти такие же как у остальных обозреваемых мною дальномеров с аккумуляторами, то есть отличные.

Дальномер выполнен из пластика, сборка отличная, никаких скрипов, люфтов, щелей все как и у остальных подобных дальномерах, ничего нового.
Есть откидной штырь для измерения из труднодоступных мест и резьба 1/4″ для установки дальномера на штатив.




Здесь видим приемное окно, окошко лазера и видеокамеру


Электронный уровень

Проверим на точность.
Так как у меня есть дальномер который проверен на точность с дальномером leica, то и буду его использовать в качестве эталона. Кстати эти дальномеры кроме наличия камеры ни чем не отличаются. Разве что в обозреваемом дальномере стал немного ярче дисплей и шрифт стал жирнее и круглее (мне шрифт больше нравиться на желтом дальномере).

Начнем






Точность отличная.
Вот еще замер на солнце на 20м. Если бы не видеокамера, то я не смог бы сделать такой точный замер, так как найти точку на стене очень трудно, а так посмотрел на дисплей, запомнил где она, и уже ее на стене тоже видишь.

Теперь перейдем к самому интересному, а именно на сколько удобно пользоваться камерой.
Замер делал специально днем, на солнце и на максимальное расстояние. Так как некоторые говорили что в китайцах стоят хуже лазеры и на солнце они больше 20м (вроде такая цифра была) не меряют.
Замер делал до оконного проема.

немного ближе

На дальномере такая картинка (к сожалению фото дисплея не передает реальной картинки, в живую все выглядит лучше)

Точку не видно, но она попадает как раз в центр красного крестика.
Если камеру включить на близком расстоянии, то точка будет немного отклонятся, это так и должно быть.
.

Теперь опишу свое впечатление от использования такого дальномера.

Обычными дальномерами на улице на расстояние больше 20м очень трудно пользоваться, так как точку лазера не видно и если это просто замер от здания до здания, то проблем нет, а вот если нужно прицелиться, то это или трудно или вообще невозможно.
Здесь же проблем с измерением нет по всему диапазону измерений в любую погоду. Пользоваться очень удобно, тем кто делает много измерений на улице, рекомендую такой прибор.

Так же можно подключить дальномер к компьютеру, но просто считать данные из памяти уже не интересно, гораздо лучше если бы сохранялось фото измерения, но к сожалению такого китайцы еще не придумали.

В шапке обзора ссылка на гб, там где я покупал (107$), но на everbaing я нашел купоны и там его можно купить за 99 долларов, или версию на 80м за 81 доллар. Цены вполне нормальные учитывая функционал. У нас подобные приборы стоят намного дороже.

Удачных покупок! Если есть вопросы, задавайте в комментариях.

Идеи о технике, программировании и железе

пятница, 14 сентября 2012 г.

Делаем дальномер из лазерной указки и старой веб-камеры с помощью OpenCV

Когда-то давно, когда различные ультразвуковые дальномеры не были столь доступны, у меня возникла идея сделать свой оптический прибор из подручных материалов. Спустя несколько лет я наткнулся на этот проект. Я его немного переделал – так появилась данная статья.

Итак, начнём с теории данного устройства.
Так как в основе всего лежит элементарная школьная геометрия, поэтому с пониманием принципов у вас не возникнет проблем.

Как известно, любая веб-камера состоит из линзы с определённым фокусным расстоянием и матрицы на которую проецируется изображение.

Фото взято отсюда с http://robot-develop.org/archives/2026

Для удобства, мы немного переделаем наше построение. Вся схема умещается на изображении ниже.

Далее вы можете видеть готовую установку. Я сделал её из подручных материалов, а именно, из пластика от лазерного диска, лазерной указки и старой веб-камеры.

После того как сборка установки была закончена, я решил снять зависимость, чтобы проверить мои предположения. График вы видите ниже.

Для пробы я даже подобрал логарифмическую функцию для аппроксимации. Она даёт удовлетворительные результаты, но ещё лучше использовать точную формулу. Сложность состоит в отсутствии точных каллибровочных данных камеры. О решении этой проблемы в моей следующей статье.

Теперь переходим к программной части. Программа для оценки расстояний предельно проста. В общем-то её можно немного доработать, но для пущей ясности представлю её в изначальном виде.

// простая аппроксимация зависимости
double getdistance(int i)
<
return -10.603*log(i*1.0)+76.769;
>

/*
// на самом деле это должно выглядеть так

double getdistance(int i)
<
double Beta=0.002840909; // в моём случае
double h=19.0;
double fi=20/180*3.1415;

int main(int argc, char* argv[])
<

//int itcount=4; только для cvThreshold
// получаем любую подключённую камеру
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY);
assert( capture );

// Устанавливаем разрешение
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);

// узнаем ширину и высоту кадра для порядка(в некоторых случаях нужные параметры не устанавливаются)
double w > double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
printf(“[i] %.0f x %.0fn”, width, height );

IplImage* frame=0; // кадр из камеры
IplImage* Rframe=0;// с градациями серого

printf(“[i] press Enter for capture image and Esc for quit!nn”);

int counter=0;
char filename[512];

double framemin=0;
double framemax=0;
double framem >
frame = cvQueryFrame( capture );
Rframe = cvCreateImage( cvGetSize(frame), IPL_DEPTH_8U, 1 );

// Задаём параметры надписи
CvPoint pt = cvPoint( 10, 20 );
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,0.5, 0.5, 0, 1, CV_AA);

// используя шрифт выводим на картинку текст
double distance=0;
std::ostringstream dist;

// получаем кадр
frame = cvQueryFrame( capture );

// выбираем из frame красный канал в Rframe
cvSplit(frame,0,0,Rframe,0);

cvMinMaxLoc(Rframe, &framemin, &framemax, 0, &p);
// координаты самой яркой точки

printf(“[R] %d x %dn”, p.x, p.y);

// тут можно побаловаться с Threshold’ом
//framem > //for(int i=0;i //cvThreshold(Rframe, Rframe, framemid, framemax, CV_THRESH_TOZERO);

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector