Pull to refresh

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

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

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

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

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


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


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



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

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



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

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

Что такое FOV


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

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

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

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

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

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

Articles