Точность камеры глубины Kinect - PullRequest
38 голосов
/ 08 октября 2011

Насколько точна камера глубины в кинекте?

  • диапазон?
  • разрешение?
  • шум?

Особенно хотелось бы знать:

  • Есть ли какие-либо официальные спецификации от Microsoft?
  • Существуют ли научные статьи по этому вопросу?
  • Расследования из TechBlogs?
  • Личные эксперименты, которые легко воспроизвести?

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

Ответы [ 7 ]

25 голосов
/ 08 октября 2011
  • Диапазон: ~ 50 см до 5 м.Может приближаться (~ 40 см) по частям, но не может иметь полный обзор <50 см. </li>
  • Горизонтальное разрешение: 640 x 480 и 45 градусов по вертикали и 58 градусов по горизонтали.Простые геометрические представления составляют примерно ~ 0,75 мм на пиксель x на y при 50 см и ~ 3 мм на пиксель x на y на 2 м.
  • Разрешение по глубине: ~ 1,5 мм при 50 см.Приблизительно 5 см на 5 м.
  • Шум: около + -1 DN на всех глубинах, но DN на глубину нелинейный.Это означает + -1 мм близко и + - 5 см далеко.

Есть официальные спецификации от разработчика сенсора, а не от Microsoft.Нет научных работ, о которых я знаю пока.Много исследований и экспериментов (см. Google). OpenKinect имеет гораздо больше дискуссий по этим вопросам, чем этот сайт в настоящее время.

12 голосов
/ 24 августа 2012

Kinect для Windows SDK предоставляет некоторые константы, которые я использовал, и они выглядят согласованными. Для диапазона и разрешения эти значения:

В режиме по умолчанию:

  • Минимальный диапазон: 80 см
  • Максимальная дальность: 400 см

В ближнем режиме:

  • Минимальная дальность: 40 см
  • Максимальная дальность: 300 см

Для цветной камеры у вас может быть одно из следующих разрешений:

  • 80x60
  • 320x240
  • 640x480
  • 1280x960

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

  • 80x60
  • 320x240
  • 640x480

При сопоставлении информации от Avada Kedavra (и, кстати, из большинства источников), значения для поля зрения , заданные API, следующие:

Для цветной камеры:

  • Горизонтальное поле зрения: 62,0 °
  • Вертикальное поле зрения: 48,6 °

Для камеры глубины:

  • Горизонтальное поле зрения: 58,5 °
  • Вертикальное поле зрения: 45,6 °

Источник: http://msdn.microsoft.com/en-us/library/hh855368

7 голосов
/ 16 февраля 2014

Реальный вопрос здесь был о разрешении и точности.Я забочусь об этом, поскольку считаю, что разрешение и точность не так хороши, как указано.Максимальное выходное разрешение по глубине действительно составляет 640x480, однако это не эффективное разрешение, и это не совсем то, насколько оно точно.

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

Дело в том, что этот рисунок состоитиз 34.749 светлых пятен, которые можно триангулировать (http://azttm.wordpress.com/2011/04/03/kinect-pattern-uncovered/).). Если мы свяжем это с разрешением 640x480 = 307.200 точек данных, мы заметим большую разницу. Спросите себя, будет ли объем данных в 10 раз большеколичество точек-источников-данных можно рассматривать как достоверное и эффективно отобранное. Я сомневаюсь в этом. Если бы вы спросили меня, каково эффективное разрешение кинекта, я бы предположил, что оно составляет около 240x180 честные и довольно хорошие данные.

5 голосов
/ 10 октября 2011

В соответствии с техническая спецификация Kinect, наконец, раскрыта спецификации для поля глубины (эти совпадения также подтверждаются в официальном руководстве по программированию, опубликованном Mannimarco):

* Horizontal field of view: 57 degrees
* Vertical field of view: 43 degrees
* Physical tilt range: ± 27 degrees
* Depth sensor range: 1.2m - 3.5m
* Resolution depth stream: 320x240 pixels
* Resolution color stream: 640x480 pixels

НоИсходя из собственного опыта, диапазон датчика глубины больше похож на 0.8m-4.0m, по крайней мере, я получаю хорошие показания в этом диапазоне.Этот диапазон соответствует листу данных Primesense, опубликованному mankoff в комментариях ниже.

Также важно помнить, что разрешение по глубине намного ближе к датчику, чем дальше. В 3-4 метра разрешение не так хорошо, как на 1,5 м.Это становится важным, если вы, например, хотите рассчитать нормали поверхности.Результат будет лучше ближе к датчику, чем дальше.

Нетрудно самостоятельно проверить диапазон.Официальный SDK (в настоящее время бета-версия) даст вам нулевую (0) глубину, когда вы находитесь вне диапазона.Таким образом, вы можете проверить это с помощью простой линейки и проверить, на каком расстоянии вы получаете / не получаете никакого чтения больше нуля.Я не знаю, как OpenKinect SDK обрабатывает показания за пределами диапазона.

Комментарий о шуме: я бы сказал, что в потоке глубины присутствует довольно много шума, что затрудняет работу с ним.Например, если вы вычисляете нормали поверхности, вы можете ожидать, что они будут немного "нервными", что, конечно, будет иметь негативное влияние на фальшивое освещение и т. Д. Кроме того, у вас есть проблема параллакса в потоке глубины из-за расстояния между ИК-передатчикоми получатель.С этим также может быть сложно работать, так как он оставляет большую «тень» в данных глубины. Это видео на YouTube демонстрирует проблему и обсуждает способ ее решения с помощью шейдеров.Это видео стоит посмотреть.

2 голосов
/ 12 декабря 2016

Я думаю, что, возможно, стоит упомянуть статью Хошелхэма и Элберника, которая предложила теоретическую модель случайной ошибки датчика глубины кинектов в феврале 12 года.Он называется «Точность и разрешение данных глубины Kinect для картографических приложений в помещениях».Бумагу можно найти здесь .

1 голос
/ 19 ноября 2015

Мой опыт показывает, что это не так точно. Это довольно хорошо, но если сравнить его с рулеткой Тогда это не совсем совпадает. Я сделал Excel с измерениями на каждые 10 мм, он просто не задерживается, особенно на расстоянии более 2500 мм, но также и ближе. Имейте также в виду, что фактическая глубина пикселей намного ниже, чем рекламируется. Электроника внутри заполняет дыхание, поэтому вы видите артефакты небольшой площади, а не что-то вроде данных пикселей. По сути, это означает, что 320x240 имеет 1/8 пикселей, покрытых «реальным» измерением, остальные пиксели вычисляются. Таким образом, вы можете использовать 640x480; но это будет только ресурс CPU / UBS и не заставит ваше приложение лучше видеть.

ну, это всего лишь 2 цента опыта, я программирую робототехнику.

1 голос
/ 12 октября 2011

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

  • Диапазон: от 1,2 до 3,5 метров
  • Угол обзора: 43 ° по вертикали и 57 ° по горизонтали
  • Механизированный диапазон наклона: ± 28 °
  • Частота кадров: 30 кадров в секунду
  • Разрешение, глубина потока: 320 x 240 (на самом деле может превышать это значение)
  • Разрешение, цветной поток: 640 x 480 (опять же, он может пойти выше)

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

...