Time of flight

    Знаете, меня порой удивляет причудливая структура общественного мнения. Взять к примеру технологию 3D-визуализации. Огромный общественный резонанс вызывают в последнее время технологии очков виртуальной реальности: Oculus Rift, Google Glass. Но ведь ничего нового тут нет, первые шлемы виртуальной реальности появились ещё в конце 90-х. Да, они были сложны, они опередили своё время, но почему тогда это не вызывало такого WOW-эффекта? Или 3D-принтеры. Статьи о том, как они круты или как быстро они захватят мир появляются в информационном поле два раза в неделю последние года три. Я не спорю, это круто и мир они таки захватят. Но ведь эта технология была создана ещё в 80х и с тех пор вяло прогрессирует. 3D-телевидение? 1915 год…

    Технологии все эти хороши и любопытны, но откуда столько шумихи из-за каждого чиха?

    Что, если я скажу, что в последние 10 лет была изобретена, разработана и внедрена в массовое производство технология 3D съёмки, очень сильно отличающаяся от любой другой? При этом технология уже повсеместно используемая. Отлаженная и доступная простым людям в магазинах. Вы слышали про неё? (наверное только специалисты по робототехнике и сопутствующим областям науки уже догадались, что я говорю про ToF-камеры).

    Что такое ToF камера? В русской Википедии (англ) вы не найдёте даже коротенького упоминания о том, что это такое. «Time of flight camera» переводится как «Времяпролётная камера». Камера определяет дальность через скорость света, измеряя время пролёта светового сигнала, испускаемого камерой, и отражённого каждой точкой получаемого изображения. Сегодняшним стандартом является матрица 320*240 пикселей (следующее поколение будет 640*480). Камера обеспечивает точность измерения глубины порядка 1 сантиметра. Да-да. Матрица из 76800 сенсоров, обеспечивающих точность измерения времени порядка 1/10,000,000,000 (10^-10) секунды. В продаже. За 150 баксов. А может вы ею даже пользуетесь.
    А теперь чуть подробнее про физику, принцип работы, и где вы встречали эту прелесть.

    Существуют три основных типа ToF-камер. Для каждого из типов используется своя технология измерения дальности положения точки. Самая простая и понятная — «Pulsed Modulation» она же «Direct Time-of-Flight imagers ». Даётся импульс и в каждой точке матрицы измеряется точное время его возвращения:

    По сути матрица состоит из триггеров, срабатывающих по фронту волны. Такой же способ используется в оптических синхронах для вспышек. Только тут на порядки точнее. В этом-то и основная сложность этого метода. Требуется очень точное детектирование времени срабатывания, что требует специфических технических решений (каких — я не смог найти). Сейчас такие сенсоры тестирует NASA для посадочных модулей своих кораблей.

    А вот картинки которые она выдаёт:

    Подсветки на них хватает, чтобы триггеры срабатывали на оптический поток отражённый с расстояния порядка 1 километра. На графике приведено число сработавших в матрице пикселя в зависимости от расстояния 90% работают на расстоянии в 1км:

    Второй способ — постоянная модуляция сигнала. Излучатель посылает некоторую модулированную волну. Приёмник находит максимум корреляции того, что он видит с этой волной. Это определяет время, которое сигнал потратил на то, чтобы отразиться и прийти на приёмник.

    Пусть излучается сигнал:

    где w — модулирующая частота. Тогда принятый сигнал будет выглядеть как:

    где b-некий сдвиг, a-амплитуда. Корреляция входящего и исходящего сигнала:


    Но полную корреляцию со всеми возможными сдвигами по времени произвести достаточно сложно за реальное время в каждом пикселе. Поэтому используется хитрый финт ушами. Полученный сигнал принимается в 4 соседних пикселя со сдвигом в 90⁰ по фазе и коррелируется сам с собой:

    Тогда сдвиг по фазе определяется как:

    Зная полученный сдвиг по фазе и скорость света получаем дальность до объекта:

    Эти камеры чуть попроще, чем те, что построены по первой технологии, но всё равно сложны и дороги. Делает их вот эта компания. И стоят они порядка 4килобаксов. Зато симпатишные и футуристичные:

    Третья технология — " Range gated imagers ". По сути затворная камера. Идея тут до ужаса проста и не требует ни высокоточных приёмников, ни сложной корреляции. Перед матрицей стоит затвор. Предположим, что он у нас идеальный и работает моментально. В момент времени 0 включается освещение сцены. Затвор закрывается в момент времени t. Тогда объекты, расположенные дальше, чем t/(2∙c), где с — скорость света видны не будут. Свет просто не успеет долететь до них и вернуться назад. Точка, расположенная вплотную к камере будет освещаться всё время экспозиции t и иметь яркость I. Значит любая точка экспозиции будет иметь яркость от 0 до I, и эта яркость будет репрезентацией расстояния до точки. Чем ярче — тем ближе.
    Осталось сделать всего пару мелочей: ввести в модель время закрытия затвора и поведение матрицы при этом событии, неидеальность источника освещения (для точечного источника света зависимость дальности и яркости не будет линейной), разную отражающую способность материалов. Это очень большие и сложные задачи, которые авторы устройств решили.
    Такие камеры самые неточные, но зато самые простые и дешёвые: всю сложность в них составляет алгоритм. Хотите пример того как выглядит такая камера? Вот он:

    Да-да, во втором Kinect стоит именно такая камера. Только не стоит путать второй Kinect с первым (на хабре когда-то давно была хорошая и подробная статья где всё же перепутали). В первом Kinect используется структурированная подсветка. Это куда более старая, менее надёжная и более медленная технология:

    Там используется обычная инфракрасная камера, которая смотрит на проектируемый паттерн. Его искажения определяют дальность (сравнение методов можно посмотреть вот тут).
    Но Kinect далеко не единственный представитель на рынке. Например Intel выпускает камеру за 150 долларов, которая выдаёт 3д карту изображения. Она ориентирована на более ближнюю зону, но у них есть SDK для анализа жестов в кадре. Вот ещё один вариант от SoftKinetic (у них тоже есть SDK, плюс они как-то завязаны на texas instruments).


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

    Комментарии 63

      +2
      Почему ждать пяток лет? Если интел продает за 150 баксов уже сейчас и там даже есть доставка в Россию?
      Не знал, что это настолько доступно уже, кажется дома появится еще одна игрушка.
        0
        Игрушка игрушкой, но проектов серьёзных на эту тему никто пока не стартует. Думаю, что бизнес побаивается пока технологии. Через пять лет появится уже серьёзные проекты, надеюсь. Одно дело купить поиграться, а совсем другое — попробовать создать серьёзный продукт.
          0
          Почему ждать пяток лет? [..] есть доставка в Россию

          Почта?
            0
            Эмм, что почта? Уже несколько лет многие из нас живут в режиме — заказал, забыл, радуешься посылке через месяц-другой, а так как заказы идут регулярно и более-менее равномерно, то и посылки приходят равномерно, пусть и с лагом в месяц. Ну и почта последние полгода жжёт — некоторые посылки приходили меньше чем за неделю — невероятное что-то, причём не только мне, но и товарищам.
              0
              Это была шутка.
          +3
          Почему же робомобили ездят с лидарами, а не такими камерами?
            +1
            Вопрос мощности на единичный пиксель. В лидарах каждое измерение — отдельный импульс. Тут один импульс — 76800 измерений. Лидар с той же мощностью лазера получает измерение с большего расстояния и при большей засветке солнцем. К тому же лидар даёт 360 градусов, а тут в любом случае будет направленный вперёд конус. Обе технологии немного для разных применений.
              0
              Разные требования к лазерной безопасности. У лидара уже 15 милливатт на подвижном луче будут требовать специальной защиты, ограничения условий по безопасности и т.п. Имея 75К сенсоров и широкий луч, можно во-первых, поднять мощность лазера, а во-вторых, увеличить время экспозиции (в те же 75К раз), сохранив такой же объём данных. За 1/3 секунды столько полезных фотонов прилетит, что и 10 микрон можно вытащить, не то, что сантиметр. Только непонятно, где это обсчитывать.
              –2
              В выходные был на Балу Роботов, там у половины в груди киннект прикручен.
                0
                Могу сказать только про кинект, то есть не совсем time of flight. Так вот кинект не работает на солнечном свету. Только для помещений. А все потому, что паттерн инфракрасный.
                  0
                  Второй кинект tof, он нестабилен на солнце, но вроде более-менее работает, как я слышал.
                    0
                    Чем дальше идти в инфракрасный диапазон, тем меньше влияние солнечной засветки. На 1.5 мкм уже раз в 5 меньше, чем на красных волнах. И фотоны там гораздо легче, чем видимые, что немаловажно.
                      0
                      И фотоны там гораздо легче, чем видимые, что немаловажно.

                      Это как?
                        0
                        Скорее всего Mrrl имел ввиду, что энергия одного фотона в инфракрасном диапазоне меньше, а значит при той же мощности количество фотонов больше, а значит дробовой шум меньше.
                    –1
                    Черт, сначала прочитал слово перед запятой… не совсем так.
                    0
                    Texas Instruments производит чипсет для таких камер — http://www.ti.com/ww/en/analog/3dtof/index.shtml. Там по ссылкам есть подробный документ где всё объясняется. Самих чипов на сайте нет (ну или я не нашёл, из того документа сенсор должен называться OPT81x0, а контоллер OPT91x0).
                    (в тексте уже есть ссылка на сайт TI, я сначала не заметил)
                      0
                      А камера на сайте Intel — это Creative Senz3D
                        0
                        И ещё: согласно сайту SoftKinetic, и Intel, и Texas Instruments, и Sony используют их технологию.

                        Ещё есть сенсор от Panasonic и компания pmd (сотрудничают с Infineon)
                          0
                          Сенсоров достаточно много, вопрос в цене. Я давал ссылку на самые дешевые, которые нашёл.
                            0
                            CamBoard nano стоит 690$ в отличии от камер MESA Imaging, которые стоят больше чем 4к$.
                        +1
                        Не совсем о том, но мне кажется всем будет интересно

                        www.ted.com/talks/ramesh_raskar_a_camera_that_takes_one_trillion_frames_per_second

                        Фемто фотография, триллион «кадров» в секунду. Русские субтитры присутствуют.
                          –1
                            +2
                            Мы работаем с такими камерами, и надо сказать что получение сырого депта еще ничего не значит. Из-за сильного шума ToF камеры, «ты не можешь просто так взять и отрендерить его» в интересующую тебя точку зрения (view point), ибо помехи вызовут при рендеринге такие артефакты, что мама не горюй. Применяется много разных фильтраций для депта, и только после этого его можно отрендерить в оптический центр цветной камеры (ибо нафига вам нужен депт, если нету цвета).
                            После этого его можно попробовать по-апскейлить, ведь резолюшен депта очень маленький для прямого применения. Благо депт очень спецефическая функция — в основном гладкая, но с четкими краями. Отсутствие текстур позволяет достаточно свободно апскейлить депт до 100 раз, хотя конечно совсем мелкие детали потеряются.
                            Надо сказать что часть ошибок в ToF — систематические, т.е. никакая фильтрация их особо хорошо не отфильтрует, это вообще отдельный топик, но люди как-то справляются.
                            После того как получен View+Depth (RGB+D), можно уже синтезировать новые катинки. Например самой частой проблемой стоит получение стереоскопического видео из View+Depth. Это достаточно легко, однако появляются новые проблемы — dis-occlusions (дырки в картинке). Заполнение таких дырок еще одна совершенно отдельная тема, в которой я надеюсь когда нибудь защищу свой диссер.
                              +1
                              Надо сказать что лично я предпочитаю обычную стерео камеру, ибо в отличие от всех этих активных камер эта штука не подведет тебя и на улице и при любой глубине картинки (тогда как а активных камерах, максимальная глубина ограничена). А при современных методах фильтрации, проблема с одноцветными поверхностями уже давно отошла на второй план. В конечном итоге получается что у стерео камеры свои ограничения, а у активных сенсоров свои — и что тебе лучше подходит, зависит исключительно от сценария использования.
                                0
                                А при современных методах фильтрации, проблема с одноцветными поверхностями уже давно отошла на второй план.

                                А можно про это поподробнее? Или хотя бы ключевые слова для поиска?
                                  +1
                                  Вот вам ссылочка на работы одного китайца
                                  www.cs.cityu.edu.hk/~qiyang/publications.html

                                  вот эти работы являются state-of-the-art для стерео:
                                  Hardware-Efficient Bilateral Filtering for Stereo Matching,
                                  Stereo Matching Using Epipolar Distance Transform,
                                  A Non-Local Cost Aggregation Method for Stereo Matching,
                                  Near Real-time Stereo for Weakly-Textured Scenes,
                                  Recursive Bilateral Filtering,

                                  Последнее — это вообще бомба… отлично работает на CPU в реалтайме. Кто-то еще говорит что стерео-матчинг слишком медленный?
                                    0
                                    Спасибо, поизучаю.
                                  0
                                  Ой, что-то странное про стереокамеры говорите. Работал с ними сам, правда немного, зато несколько команд знаю, которые решают задачи 3D восстановления изображения. И проблема с одноцветными поверхностями и скоростью до сих пор у них превальвирует. Вовсю пользуются графическими картами для ускорения, а точности на равномерной коже как не было, так и нет.
                                  Если хочеться быстро инфу из стереокамер вытянуть -все пользуются фичерс детекторами. Когда прошлым летом одну задачку с лицами делали — ни одной статьи где бы получалось нормальное 3D на монотонных поверхностях мы не нашли.
                                  За статьи спасибо, поизучаю. Но всё же сомнительно, что ни одна серьёзная команда ими бы не пользовалась, если бы они крутой эффект давали.
                                    0
                                    Мне тут мысль высказали, что может быть статьи рассматривают фотографии с высоким разрешением, а не видео? На фотографиях действительно можно качественно вытянуть точность. А на видео обычного разрешения уверяют что нельзя.
                                      0
                                      Насколько я понял, однородные области он выделяет прямо по цвету, а потом интерполирует плоскостями. Никакого выравнивания по локальным неоднородностям или чему-нибудь подобному не делается.
                                        0
                                        Неее, это вообще не годится для любой задачки где точность нужна. Это разве что для того, чтобы человеку приятно и ровно на изображение смотреть было. В биометрии по лицу не хватает точности зачастую даже если натягивать полученные изображения на маску лица. Не совсем понятен класс задач где интерполяция плоскостями может пригодится.
                                          0
                                          Что поделать, у каждого свои задачи, цели и требования. Что годится одному, то совершенно не подходит для другого. Так что будем делать больше велосипедов, хороших и разных! :)
                                          А один из подходящих им классов задач — грубая реконструкция рукотворных объектов, например, зданий и помещений. С текстурой, взятой из тех же фотографий.
                                          0
                                          Да есть разные подходы для таких зон.
                                          В «Near Real-time Stereo for Weakly-Textured Scenes», например предполагется что раз уж сегмент изображения монотонный, то скорей всего он представляет из себя плоскость. Что вполне правдоподобное упрощение, поскольку на границе двух монотонных плоскостей все-равно появится цветной discontinuity и следовательно color segmentation разделит их на разные сегменты.

                                          В «Stereo Matching Using Epipolar Distance Transform» вообще придумали хитрую трансформацию, после которой монотонная область становится вообще не монотонной и матчить 2 картинки становится проще паренной репы.

                                          В остальных статьях, товарищи просто напросто используют фильтрацию с таким большим кёрнелом, что любая монотонная область им перекрывается. Recursive Bilateral например использует IIR-filter (фильтр с бесконечным респонсом, извините за перевод, не знаю это оно по-русски), что означает что для каждого пиксела образуется суппорт из всей картинки.
                                            0
                                            То есть, во всех случаях для определения расстояния в однородной зоне берётся информация из её окрестности плюс некоторые допущения о гладкости/непрерывности поверхностей. Разумный подход, может пригодиться. Дальше надо изучать детали каждого метода.
                                              0
                                              Это практически очевидно, что для монотонного цвета, глубина тоже будет монотонной, что позволяет ее апроксимировать хоть плоскостью, хоть даже константой (что и делается когда мы фильтрируем cost volume чем то вроде bilateral filter). По крайней мере такое предположение будет работать в 99% случаев.
                                              Для остальных случаев, можно использовать комбинацию из активной и стерео-камеры. Это тоже одна из интересных областей ресерча.
                                                0
                                                По крайней мере такое предположение будет работать в 99% случаев.

                                                Ситуация, в которой такой подход не справится — однородный объект, со всех сторон окруженный более близкими объектами (например, одноцветная стена, видная в маленькое окошко). В сумме такие ситуации могут набрать побольше 1%.
                                                Даже если будет виден край стены, это даст нам только одну линию. Плоскость из неё не вытянуть. Так что достаточно рядом с домом посадить дерево и кусты — и его угол окажется без точек привязки.
                                                  0
                                                  Теперь давайте представим такую стену в реальной жизни.
                                                  Свеже-покрашенная стена, на которой нет ни разводов, ни трещин, ни царапин (специальная устойчивая матовая краска). Самое удивительное — на ней нет тени от деревьев и кустов (которые тут рядом и растут), вообще она равномерно освещается специальным осветительным оборудованием, чтоб был полностью константный цвет. Блики тоже куда то исчезли. Рядом, в невесомости, пролетает сферический конь…

                                                  И знаете что, для таких приложений как интерполяция изображений из стерео — эта сцена будет все еще вполне довольно неплохой. Т.е. если мы сделаем плавно перетекающее видео из одной камеры в другую — никто и не заметит проблем со стеной. Все будут любоваться кустами :))

                                                  Гораздо более важные проблемы для стерео, это: 1. правильная калибрация камер 2. правильная ректификация изображений, 3. временная синхронизация, 4. одинаковая цветочуствительность сенсоров (матриц) 5. одинаковая оптика на камерах и фокусное расстояние, и т.д.

                                                  Если поставить две несинхронизированных говно-камеры никакой стерео алгоритм не поможет. А если у каждой из них вдобавок свой собственный авто-баланс белого — то это вообще не стерео камера, а две разных…
                                        0
                                        Если вы не крутитесь в этой теме, то навряд ли знаете про все самые последние новинки. Если внимательно посмотрите на года публикаций — заметите что все они совсем недавно вышли.
                                          0
                                          Посоветуйте тематические ресурсы, цифровую переодику по этой теме.
                                      0
                                      (ибо нафига вам нужен депт, если нету цвета)


                                      Пользователи лидаров, например, говорят, что цвет нужен примерно в 1% проектов — в основном, для полицейских приложений и для презентаций. Конечно, народ предпочитает, чтобы цвет был, но чаще всего обходится без него.
                                      Хотя, конечно, всё зависит от того, зачем нужны отснятые данные.
                                        0
                                        Как на счет пользователей ToF камер? Не спрашивали?
                                          0
                                          Увы, нет. Пока таких знакомых мне не попадалось.
                                      0
                                      У второго кинекта еще одно большое (пре-большое) приеимущество, над конкурентами. Для обоих сенсоров — Depth и Color используется единственный оптический тракт. Получается что они оба (виртуально) взяты из одного оптического центра, и при не-сложном фильтеринге depth можно одновременно отресамплить и отфильтровать. Половина софтверных сложностей просто откинута небольшой модификацией hardware.
                                        0
                                        Попытка найти подробности дала такой результат:

                                        Thus the IR sensor and RGB camera are still separated (also confirmed by the different field of view when switching between the two streams in the WIRED video (see time mark 5:27). If the sensor can capture both RGB and IR simultaneously from the same sensor (or just switching quickly between the two at 60Hz/60Hz or 30Hz/30Hz), texture mapping alignment in KinectFusion type of application would get better.


                                        Они имеют в виду какой-то другой Kinect?
                                          0
                                          Честно говоря я сам подробностей не знаю, мы с ним еще не работали. Однако одна линза (видно на всех фотографиях) уже позволяет это утверждать. То что 2 разных сенсора — это тоже практически очевидно. (Хотя уже есть сенсоры которые детектируют RGB+IR одновременно, хотя там своих проблем должно быть выше крыши).
                                          Про field of view я и не утверждал что он одинаков, но если все-таки виртуальные оптические центры совпадают (ну или хотя бы даже на одной прямой друг за другом), то «texture mapping alignment» это простой ресамплинг. Когда как в случае 2-х совершенно отдельных сенсоров со своими линзами, пришлось бы сперва проецировать (плохой) депт в расположение цветной камеры.
                                            0
                                            Одна линза видна на фотографиях, сделанных в видимом свете. Не исключено, что передняя панель прозрачна для IR, и вторая линза, а также IR осветитель просто спрятаны за ней. Заодно, видимый свет отфильтровывается, что заметно повышает качество IR сигнала.
                                            Про одинаковый центр я ничего не смог придумать, кроме полупрозрачного зеркала (лучше бы, пропускающего видимый свет и отражающего IR — или наоборот) или гибридной RGBI матрицы (ещё и с модулируемой чувствительностью IR сенсоров) — должна быть безумно дорогая штука. Жаль, для лидара эти схемы работать не будут — либо RGB сенсору будет мешать лазерное зеркало, либо изображение в нём получится очень размытым.
                                              0
                                              Не понятно, почему RGBI нельзя сделать дешевой. Ведь единственное что для такой матрицы нужно создать — байеровский фильтр с скорректированным спектром пропускания, где вместо второго зелёного был бы IR слот. Сами по себе современные матрицы вполне к IR спектру, менять ничего не надо.
                                                0
                                                Для измерения глубина с помощью ToF нужна очень специальная структура пикселей. И возможно, что специальная полупроводниковая технология.
                                                  0
                                                  Я имел ввиду не про ToF, конечно, а просто про IR камеру. Такая в kinect судя по всему тоже есть (видел обзор, где они демонстрировали различные видеопотоки изнутри устройства).
                                                    0
                                                    Им нужны пиксели, которые работают половину времени. С частотой около 20 МГц. И осветитель, который мерцает с той же частотой. Тогда яркость сигнала с пикселя (точнее, её отношение к яркости эталонного, работающего всё время пикселя) будет линейно зависеть от расстояния до объекта.
                                                      0
                                                      Это если в пару к каждому пикселю иметь эталонный. На самом деле там всё чуть сложнее устроено — каждый пиксель половину времени заряжает один конденсатор, а половину — другой, а затем напряжения этих конденсаторов сравниваются (Introduction to the Time-of-Flight (ToF) System Design (Rev. D) страница 8).
                                                        0
                                                        Эталонный можно получить, отключая модуляцию для каждого второго кадра. Но если они сделали через конденсаторы — им виднее.
                                                          0
                                                          Потребуется ещё третье измерение, без подсветки, — для оценки внешнего освещения. А так кажется реальным.
                                                    0
                                                    Согласен. В «активном» режиме мы можем модулировать пиксели всей матрицы, это ничему не помешает. 20 МГц даст возможность измерить расстояние как раз до 3.5 метров (при правильно подобранной фазе).
                                                    0
                                                    Именно так, инфракрасная часть работает сквозь пластик. Разбор на iFixIt.
                                                    0
                                                    И в старом, и в новом кинекте по 2 камеры. В новом инфракрасная часть работает прямо сквозь «черный» пластик, поэтому объектива не видно.
                                                      0
                                                      ААА, вы порушили мои надежды :))
                                                0
                                                Удалено. В следующий раз буду дочитывать до конца статью, прежде, чем комментировать.
                                                  0
                                                  Видел я Mesa Imaging, держал в руках. Дальше трех метров уже не работает даже в помещении, на улице в светлое время суток не будет работать совсем из-за солнечного света.
                                                    0
                                                    А в Intel Creative Zen3D точно стоит ToF камера?
                                                    Мне просто казалось, что они сэкономили и поставили просто ИК камеру и ИК светодиод, а глубину считают по яркости.
                                                      0
                                                      В третьем методе, на базе которых строится ToF по сути тоже считывание яркости пикселей идёт, но чуть более хитрое, чем обычная «яркость».
                                                      Вообще везде где я встречал описание пишется что они именно ToF. Но может обманывают, конечно…
                                                        0
                                                        Тут пишут что сенсор от SoftKinetic. Ещё в нескольких местах то же самое пишут. А там точно ToF.
                                                        0
                                                        А можно ли сделать самому сенсор по этому принципу? Просто светодиод и WEB камера с ИК фильтром — зафиксировать жесты над клавиатурой разве не получится?
                                                        В Leap Motion стереокамера — они считают по параллаксу.

                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                      Самое читаемое