...

вторник, 18 февраля 2014 г.

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

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.


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


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий