Я не знаю, что именно делает код Matlab с глубиной, но он, вероятно, выполняет некоторую обработку на нем, потому что глубина, отправляемая Kinect, составляет 11 бит, поэтому она не должна быть выше, чем 2048. Попробуйтеузнайте, что он делает, или чтобы получить доступ к необработанным данным, отправляемым Kinect.
Данные, отправляемые Kinect, не являются подходящим расстоянием (это «несоответствие»), поэтому вам нужно сделать некоторыематематические, чтобы преобразовать его в полезные единицыаппроксимация первого порядка для преобразования необработанного 11-битного значения диспаратности в значение глубины в сантиметрах составляет: 100 / (- 0,00307 * rawDisparity + 3,33).Это приближение составляет приблизительно 10 см на расстоянии 4 м и менее 2 см на расстоянии 2,5 м.
Лучшее приближение дано Стефаном Магненатом в на этом посту : расстояние = 0,1236 *загар (rawDisparity / 2842,5 + 1,1863) в метрах.Добавление окончательного смещения -0,037 центрирует исходные данные ROS.Приближение загара имеет разницу в квадрате 0,33 см, в то время как приближение 1 / x составляет около 1,7 см.
Как только вы определите расстояние, используя приведенное выше измерение, хорошая аппроксимация для преобразования) to (x, y, z):
x = (i - w / 2) * (z + minDistance) * scaleFactor * (w/h)
y = (j - h / 2) * (z + minDistance) * scaleFactor
z = z
Where
minDistance = -10
scaleFactor = .0021.
These values were found by hand.
Более подробную информацию о глубине камеры Kinect и ее калибровке можно найти на веб-сайте ROS (и многих других.!).