Обработка необработанных данных из Kinect в Matlab - PullRequest
0 голосов
/ 29 мая 2019

Я использую Microsoft kinect v1 в MATLAB и хочу получить данные о глубине для каждого пикселя в метрах.

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

Я много об этом искал, но не смог прийти к какому-либо заключению.


    Kinectinfo = imaqhwinfo('kinect');
    colorinfo = Kinectinfo.DeviceInfo(1);
    depthinfo = Kinectinfo.DeviceInfo(2);
    colorvid = videoinput('kinect',1);
    depthvid = videoinput('kinect',2);
    srcDepth = getselectedsource(depthvid);

    % Set the frames per trigger for both devices to 1.

    colorvid.FramesPerTrigger = 1;
    depthvid.FramesPerTrigger = 1;

    % Set the trigger repeat for both devices to 200, in order to acquire 201 frames from both the color sensor and the depth sensor.

    colorvid.TriggerRepeat = 200;
    depthvid.TriggerRepeat = 200;
    %Configure the camera for manual triggering for both sensors.

    triggerconfig([colorvid depthvid],'manual');
    % Start both video objects.

    start([colorvid depthvid]);

    %Trigger the devices, then get the acquired data.

    % Trigger 200 times to get the frames.

    for i = 1:200
        % Trigger both objects.
        trigger([colorvid depthvid])
        % Get the acquired frames and metadata.
        [imgColor, ts_color, metaData_Color] = getdata(colorvid);
        [imgDepth, ts_depth, metaData_Depth] = getdata(depthvid);
    end

[NYU Depth and RGB image][1]
[Histogram of swaped Raw Depth image][2]
[Histogram of Raw Depth Image][3]

Я хотел бы иметь какой-нибудь код для конвертации или любой SDK, который предоставляет мне счетчики в matlab.

Большое спасибо.

1 Ответ

0 голосов
/ 30 мая 2019
  1. По нескольким статьям, например.например, здесь и здесь , первые три бита представляют собой код для плеера, идентифицированного устройством, но он активируется только в том случае, если включено отслеживание скелета. Если вы не включаете отслеживание скелета, три бита устанавливаются в ноль .

Kinect v1 16 bit depth data

Если вы используете matlab, изображения глубины представляют собой 16-битные двойные изображения и содержат данные, которые уже извлечены из 13 битов (скорее всего, потому что отслеживание скелета уже отключено, следовательно, 3 MSB равны нулю.) Поэтому вы не делаетенеобходимо преобразовать / извлечь 13-битные данные в matlab или libfreenect и т. д., поскольку биты уже равны нулю.

Согласно странице справки Matlab , для набора инструментов matlab ImAq требуется набор инструментовустановка Kinect для Windows Runtime;потому что он использует драйверы Kinect SDK Kinect для сбора данных.И согласно этому SO ответу , " с использованием Microsoft SDK, поэтому значения, возвращаемые датчиком kinect, уже являются реальными расстояниями в мм ."

Следовательно, вам не нужно сдвигать данные в Matlab.Единственная причина, по которой вам нужно это сделать, - это если вы получаете необработанный поток глубины от драйверов kinect (?) В C ++ / C #, а 16-битные данные будут включать 3 бита LSB.

...