Как я могу получить интенсивность глубины из изображения глубины kinect, поскольку оно представляет собой расстояние пикселя от датчика

Недавно я прочитал статью, они извлекают интенсивность глубины и расстояние пикселя от камеры, используя изображение глубины. Но, насколько я знаю, каждое значение пикселя в изображении глубины представляет собой расстояние в мм [диапазон: 0-65536], тогда как они могут извлечь интенсивность глубины в диапазоне от [0 до 255] из изображения глубины. Я этого не понимаю. Датчик kinect возвращает кадр глубины uint16, который включает расстояние каждого пикселя от датчика. Он не возвращает никакого значения интенсивности, тогда как бумага может продемонстрировать, что они извлекают интенсивность глубины. Я действительно смущен.

Вот ссылка на документ

Это график, который я хочу извлечь (собранный из бумаги:

img


person sufian ahmed    schedule 05.07.2017    source источник
comment
Я не вижу никакого определения термы интенсивности глубины ... она может иметь другое значение, чем предполагает название.   -  person Spektre    schedule 06.07.2017
comment
в чем смысл?   -  person sufian ahmed    schedule 07.07.2017
comment
ну вот в чем вопрос...скорее всего ответить могут только авторы статьи...   -  person Spektre    schedule 07.07.2017
comment
нет ответа от него.   -  person sufian ahmed    schedule 07.07.2017


Ответы (3)


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

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

    Pixel_value=Pixel_value/4500*65535

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

Вероятно, при преобразовании изображения в uint8 Matlab сначала обрезает значения выше некоторого порога, скажем, 4095=2**12-1 (я не уверен в значении), а затем делает сдвиг вправо (в нашем случае 4 сдвига), чтобы сделать его в диапазоне 0-255 .

Поэтому я думаю, что умножение значения uint8 на 256 и преобразование его в uint16 поможет вам получить то же изображение.

        Pixel_uint16_value= Pixel_uint8_value*256 //or Pixel_uint16_value= Pixel_uint8_value<<8 
        //dont forget to cast the result as uint16

Другой способ преобразования необработанных данных в изображение глубины в миллиметрах.

Изображение глубины должно храниться в миллиметрах и в виде 16-битных целых чисел без знака. Следующие две формулы можно использовать для преобразования необработанных данных в миллиметры.

distance = 1000/ (− 0.00307 ∗ rawDisparity + 3.33 )
distance = 123.6 ∗ tan ( rawDisparity/2842.5 + 1.1863 )

Сохраните каждое значение расстояния в соответствующий пиксель rawdisparty. Сохраните их как 16-битные беззнаковые изображения png в оттенках серого. Подробности см. по этой ссылке.

person MIRMIX    schedule 07.07.2017
comment
Спасибо за ваше сотрудничество. Но у меня есть необработанные данные изображения глубины, которые представляют собой расстояние пикселя от датчика. Проблема в том, что изображение глубины возвращает только расстояние, поэтому, если я преобразую его в uint8 или любой другой метод масштабирования, оно будет пропорционально расстоянию. но этот график показывает обратно пропорциональную зависимость, что означает, что они каким-то образом получили интенсивность глубины. Я могу извлечь расстояние, но не могу получить интенсивность глубины. Даже я ничего не понимаю о глубине глубины в Google. - person sufian ahmed; 07.07.2017
comment
@sufianahmed Извините за поздний ответ, я только что заметил этот комментарий. Я посмотрел на бумагу, изображения глубины выглядят как изображения несоответствия. Что пропорционально обратной глубине. Теоретически несоответствие равно d=b*f/z, где b обозначает базовую линию, f — фокусное расстояние, а z — глубину. - person MIRMIX; 08.02.2018

Быстрый ответ:

Вы можете получить интенсивность, получив интенсивность соответствующего ИК-пикселя. скажем, у вас есть массив ИК-пикселей irdata, тогда вы можете получить intensity i-го пикселя с помощью

byte intensity = (byte)(irdata[i] >> 8);

В Kinect v2 есть только две камеры, одна камера RGB, а другая камера ИК. Он использует ИК-камеру для расчета глубины изображения с использованием времени пролета (TOF). Если вам нужна дополнительная информация, прокомментируйте здесь или найдите мой проект Kinect в github https://github.com/shanilfernando/VRInteraction. Я более чем счастлив помочь вам.

Изменить

Как вы знаете, глубина — это расстояние между сенсором Kinect и объектом в заданном пространстве. ИК-излучатель Kinect испускает множество ИК-лучей и начинает отсчет времени. Как только ИК-лучи отражаются обратно на датчик глубины (ИК-датчик) kinect, он останавливает счетчик времени. Время (t) между испусканием и получением этого конкретного луча называется временем пролета этого луча. Затем расстояние (d) между kinect и объектом можно рассчитать по формуле

d = (t * speed-of-light)/2

Это делается для всех лучей, которые он испускает, и строит ИК-изображение и изображение глубины. Каждый луч представляет собой пиксель в ИК-изображениях и изображениях глубины.

Я прочитал ваш справочный документ. Во-первых, они НЕ используют изображение глубины, снятое с Kinect V2. На нем четко сказано, что его разрешение составляет 640 × 480, а эффективный диапазон расстояний — от 0,8 метра до 3,5 метра. Я хочу, чтобы вы ясно поняли, что кадр глубины и изображение глубины — это два разных элемента. Если вы проверите кадр глубины, каждый пиксель представляет собой расстояние, а в изображении глубины каждый пиксель представляет собой интенсивность (насколько ярко/ярко).

На этом графике они пытаются построить зависимость интенсивности точки звезды от фактического расстояния до точки звезды. Они начинают с изображения глубины (интенсивности), а НЕ кадра глубины. кадр глубины, который вы можете масштабировать до изображения глубины, где значения от 0 до 255, где ближние точки имеют более высокие значения, а более дальние точки имеют более низкие значения.

person Shanil Fernando    schedule 10.07.2017
comment
У kinect v2 есть одна камера RGB, другая - ИК-излучатель, а одна - датчик глубины, я думаю. кто-то подсказывает мне, что это просто масштабирование от 0 до 255 - person sufian ahmed; 10.07.2017
comment
Да вы правы. Но что делает датчик глубины? он вычисляет время полета ИК-лучей, которые излучает ИК-излучатель. Так что ИК-излучатель + датчик глубины называется ИК-камерой. - person Shanil Fernando; 10.07.2017
comment
и, конечно, интенсивность масштабируется от 0 до 255, а глубина масштабируется от 0 до 65536. Но практически kinect не может измерить 65536 так далеко. его диапазон глубины составляет от 0,5 м до 4 м, а поле зрения составляет 70,6 x 60 градусов. Если у вас есть доступ к статьям IEEE, ознакомьтесь с моей статьей http://ieeexplore.ieee.org/document/7726202/ - person Shanil Fernando; 10.07.2017
comment
рассчитайте время полета ИК-лучей.. что это значит, сэр?... интенсивность масштабируется от 0 до 255... нет, сэр, я не это имел в виду. на картинке выше вы видите, что интенсивность глубины... кто-то предложил мне, чтобы эта интенсивность глубины масштабировалась по глубине расстояния. это правильно ? - person sufian ahmed; 10.07.2017
comment
@sufianahmed Да, я отредактировал свой ответ, пожалуйста, проверьте его и дайте мне знать, ясно ли вы его понимаете или нет. Я могу объяснить вам подробнее, если у вас возникнет путаница. - person Shanil Fernando; 10.07.2017
comment
Поскольку мне трудно что-то нарисовать в SO, пожалуйста, поищите в Google по времени полета (ToF), вы найдете хорошее объяснение о ToF. - person Shanil Fernando; 10.07.2017
comment
сэр, я понимаю... но одна вещь заключается в том, что значение интенсивности глубины - это масштабированная форма значения расстояния... верно? то как они могут воспринимать это как особенность. например: они получили два участка наверху и внизу соответственно. они сказали, что один график предназначен для подъема, а другой - для спуска. но для других лестниц это будет работать или нет?... другое дело, почему они масштабируют расстояние по глубине и конвертируют в интенсивность по глубине... интенсивность по глубине полностью зависит от расстояния по глубине... какую пользу они получили? - person sufian ahmed; 12.07.2017

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

Я бы посоветовал вам сохранить изображение глубины в формате .tiff, а не в формате png.

person sai kiran    schedule 15.07.2019