- PVSM.RU - https://www.pvsm.ru -

Как я FOV измерил без циркуля и линейки

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

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

Стоп! А как привязать врагов к окружающей действительности?

Я сделал это очень просто.

Обработка изображения

Посмотрите на первую картинку видеозахвата.

Как я FOV измерил без циркуля и линейки

Я пробегаю по всей ширине (480 пикселей) изображения и суммирую RGB компоненты точек, лежащих с текущей точкой на одной вертикальной прямой. Получаем массив из 480 элементов.
На верхней части рисунка изображена красно-белая (оле!) гистограмма найденной функции.

То же самое проделываем со следующим кадром из видеопотока. Посмотрите на рисунок 2.

Как я FOV измерил без циркуля и линейки

Моя задача — совместить красно-белые гистограммы первого и второго кадра. Сдвигая графики друг относительно друга, я очень быстро нахожу оптимальное совпадение. Разница в сдвиге и есть искомое смещение реальности в моем iPhone в горизонтальном направлении.

Таким, образом виртуальный объект навсегда привязывается к реальному местоположению. В каждый момент времени мы знаем, насколько пикселов его сдвинуть в горизонтальной плоскости.
Хорошо ли работает алгоритм? Очень неплохо. Главное, не дергать телефон во время игры — данный подход не любит смещения более 40 пикселов за такт. А такт у камеры 20 кадров в секунду.
При резких движениях надо, видимо, использовать уже тяжелую артиллерию — гироскоп и акселерометр.

Что такое FOV

Каждое оптическое устройство имеет FOV (field of view). Будь то человеческий глаз или мыльница.
image
Что в FOV попадает — прибор видит. Прочее — нет, хоть убей. На картинке человек видит дерево, а машину не видит. Это может быть опасно.
FOV измеряется в градусах. У человека FOV около 120-ти градусов для каждого глаза. У зайца, например, 150. То есть двумя глазами заяц покрывает почти всю сферу видимости. Не видит заяц только ровно вперед 10 градусов и ровно назад 10 градусов. Косой…
Ладно, а какой FOV у моего iPhone?
Заглянул, разумеется, в интернет [1]. Бог мой, чтобы вычислить FOV iOS устройства, необходима специальная лаборатория с лазерными измерителями.

У меня нет такой лаборатории. А зачем? Я просто запустил вышеописанную программу. Сел на любимое вращающееся кресло. И повернулся на 360 градусов. Программа выдала размер сферы вокруг меня.
image
Программа выдала размер сферы вокруг меня.
В пикселах — стабильно для iPod последнего поколения 3050-3060 пикселей.

Таким образом FOV моего iPod равен 480*360/3060 = 56-57 градусов.

А лазер намерял 55.7.

Неплохая точность у меня получилась, согласитесь.

Скрытая реклама моего приложения, использующего вышесказанный алгоритм, помещена в теги. Только это между нами, ок?

Автор: PapaBubaDiop

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/mobile-development/55281

Ссылки в тексте:

[1] интернет: http://www.boinx.com/chronicles/2013/3/22/field-of-view-fov-of-cameras-in-ios-devices/

[2] Источник: http://habrahabr.ru/post/213019/