При обнаружении устройств Kinect можно было увидеть, что два датчика на Kinect® для Windows® представлены двумя идентификаторами устройства, один для датчика цвета и один из датчика глубины. В этом примере Устройство 1 является датчиком цвета, а Устройство 2 является датчиком глубины. В этом примере показано, как создать videoinput
объект для датчика цвета, чтобы получить изображения RGB, а затем для датчика глубины, чтобы получить данные скелета.
Создайте videoinput
объект для датчика цвета. DeviceID
1 используется для датчика цвета.
vid = videoinput('kinect',1,'RGB_640x480');
Посмотрите на свойства конкретного устройства на исходном устройстве, которое является датчиком цвета на камере Kinect.
src = getselectedsource(vid); src Display Summary for Video Source Object: General Settings: Parent = [1x1 videoinput] Selected = on SourceName = ColorSource Tag = Type = videosource Device Specific Properties: Accelerometer = [0.0 -1.0 0.0] AutoExposure = on AutoWhiteBalance = on BacklightCompensation = AverageBrightness Brightness = 0.2156 CameraElevationAngle = 3 Contrast = 1 ExposureTime = 1.0 FrameInterval = 0 FrameRate = 30 Gain = 0 Gamma = 2.2 Hue = 0 PowerLineFrequency = Disabled Saturation = 1 Sharpness = 0.5 WhiteBalance = 2700
Как видно на выходе, датчик цвета имеет набор специфических для устройства свойств.
Свойство конкретного устройства - Датчик цвета | Описание |
---|---|
Accelerometer | Возвращает 3D вектор данных ускорения для датчиков цвета и глубины. Данные обновляются во время работы или предварительного просмотра устройства. Этот дабл 1 x 3 представляет
представляет значения |
AutoExposure | Используется для автоматической настройки воздействия. Это определяет, активированы ли другие связанные свойства. Значения on (по умолчанию) и off .
|
AutoWhiteBalance | Используйте, чтобы включить или отключить автоматическую настройку баланса белого.
|
BacklightCompensation | Настраивает режимы компенсации подсветки, чтобы настроить камеру для захвата изображений, зависящих от условий окружающей среды. Обратите внимание, что это свойство допустимо только в том случае, если Значения:
|
Brightness | Указывает на уровень яркости. Значение области значений 0.0 на 1.0 , и значение по умолчанию является 0.2156 . Обратите внимание, что это свойство допустимо только в том случае, если |
CameraElevationAngle | Управляет углом объектива датчика. Это угол камеры относительно земли. Значение должно быть целочисленным свойством с областью значений от -27 до 27 степеней. Значение по умолчанию является последним установленным значением, поскольку это липкая настройка. Установите его, только если хотите изменить угол наклона камеры. Это свойство разделяется с датчиком глубины также. |
Contrast | Указывает на уровень контрастности. Значения должны быть в области значений 0.5 на 2 , со значением по умолчанию 1 . |
ExposureTime | Указывает время экспозиции в шагах 1/10 000 секунды. Значение области значений 0 на 4000 , и по умолчанию это 0 . Обратите внимание, что это свойство допустимо только в том случае, если |
FrameInterval | Указывает интервал системы координат в модули 1/10 000 секунды. Значение области значений 0 на 4000 , и по умолчанию это 0 . Обратите внимание, что это свойство допустимо только в том случае, если |
FrameRate | Систем координат в секунду для сбора. Это свойство доступно только для чтения, и возможные значения для датчика цвета 12 , 15 , и 30 (по умолчанию). Он отражает фактическую частоту систем координат при запуске. |
Gain | Указывает множитель для значений цвета RGB. Значение области значений 1.0 на 16.0 , и по умолчанию это 1.0 . Обратите внимание, что это свойство допустимо только в том случае, если |
Gamma | Указывает на гамма- измерение. Значения должны быть в области значений 1 на 2.8 , со значением по умолчанию 2.2 . |
Hue | Указывает на настройку оттенка. Значения должны быть в области значений -22 на 22 , со значением по умолчанию 0 . |
PowerLineFrequency | Опция для уменьшения мерцания, вызванного частотой линии степени. Значения Disabled , FiftyHertz , и SixtyHertz . Значение по умолчанию является Disabled .Обратите внимание, что это свойство допустимо только в том случае, если |
Saturation | Указывает на уровень насыщения. Значения должны быть в области значений 0 на 2 , со значением по умолчанию 1 . |
Sharpness | Указывает на уровень резкости. Значения должны быть в области значений 0 на 1 , со значением по умолчанию 0.5 . |
WhiteBalance | Цветовая температура в степенях Кельвина. Значение области значений 2700 на 6500 и по умолчанию это 2700 .Обратите внимание, что это свойство допустимо только в том случае, если |
Можно опционально задать некоторые из этих свойств, показанных на предыдущем шаге. Для примера вы можете получать изображения в условиях низкой освещенности. Вы можете настроить приобретение для этого путем установки BacklightCompensation
свойство к LowLightsPriority
, что способствует низкому уровню света.
src.BacklightCompensation = 'LowLightsPriority';
Предварительный просмотр цветового потока по вызову preview
на объекте датчика цвета, созданном на шаге 1.
preview(vid);
После завершения предварительного просмотра закройте окно предварительного просмотра.
closepreview(vid);
Создайте videoinput
объект для датчика глубины. Обратите внимание, что создается второй объект (vid2
), и DeviceID
2 используется для датчика глубины.
vid2 = videoinput('kinect',2,'Depth_640x480');
Посмотрите на свойства конкретного устройства на исходном устройстве, которое является датчиком глубины на Kinect.
src = getselectedsource(vid2); src Display Summary for Video Source Object: General Settings: Parent = [1x1 videoinput] Selected = on SourceName = DepthSource Tag = Type = videosource Device Specific Properties: Accelerometer = [0.0 -1.0 0.0] BodyPosture = Standing CameraElevationAngle = 4 DepthMode = Default FrameRate = 30 IREmitter = on SkeletonsToTrack = [1x0 double] TrackingMode = off
Как видно на выходе, датчик глубины имеет набор специфических для устройства свойств, сопоставленных с отслеживанием скелета. Эти свойства характерны для датчика глубины.
Свойство конкретного устройства - Датчик глубины | Описание |
---|---|
Accelerometer | Возвращает 3D вектор данных ускорения для датчиков цвета и глубины. Данные обновляются во время работы или предварительного просмотра устройства. Этот дабл 1 x 3 представляет
представляет значения |
BodyPosture | Указывает, стоят ли отслеживаемые каркасы или сидят. Значения Standing (дает 20 данных скелета точек) и Seated (дает 10-балльные данные скелета, используя индексы соединений 2 - 11). Standing является значением по умолчанию.Обратите внимание, что если Список индексов 20 скелетных соединений см. в подразделе «BodyPosture Joint Indices» в конце этого примера. |
CameraElevationAngle | Управляет углом объектива датчика. Это угол камеры относительно земли. Значение должно быть целочисленным свойством с областью значений от -27 до 27 степеней. Значение по умолчанию является последним установленным значением, поскольку это липкая настройка. Установите его, только если хотите изменить угол наклона камеры. Это свойство совместно используется также с датчиком цвета. |
DepthMode | Указывает область значений глубины на карте глубины. Значения Default (область значений от 50 до 400 см) и Near (область значений от 40 до 300 см). |
FrameRate | Систем координат в секунду для сбора. Это свойство доступно только для чтения и фиксировано на 30 для датчика глубины для всех форматов. Он отражает фактическую частоту систем координат при запуске. |
IREmitter | Управляет тем, включен или выключен ИК-эмиттер. Значения on и off . Первоначально значение по умолчанию является on . Однако это свойство липкости, поэтому значение по умолчанию является последним заданным значением. Если установить значение off , он будет оставаться отключенным в будущем использовании, пока вы не измените настройку. Преимущество этого свойства в том, что оно полезно при использовании нескольких устройств Kinect, чтобы избежать помех. |
SkeletonsToTrack | Указывает идентификатор отслеживания скелета, возвращенный как часть метаданных. Значения:
|
TrackingMode | Указывает на состояние отслеживания. Значения:
Обратите внимание, что если |
Запуск второго videoinput
объект (поток глубины).
start(vid2);
Доступ к скелетным данным осуществляется в виде метаданных по потоку глубин. Можно использовать getdata
для доступа к нему.
% Get the data on the object. [frame, ts, metaData] = getdata(vid2); % Look at the metadata to see the parameters in the skeletal data. metaData metaData = 10x1 struct array with fields: AbsTime: [1x1 double] FrameNumber: [1x1 double] IsPositionTracked: [1x6 logical] IsSkeletonTracked: [1x6 logical] JointDepthIndices: [20x2x6 double] JointImageIndices: [20x2x6 double] JointTrackingState: [20x6 double] JointWorldCoordinates: [20x3x6 double] PositionDepthIndices: [2x6 double] PositionImageIndices: [2x6 double] PositionWorldCoordinates: [3x6 double] RelativeFrame: [1x1 double] SegmentationData: [640x480 double] SkeletonTrackingID: [1x6 double] TriggerIndex: [1x1 double]
Эти поля метаданных связаны с отслеживанием скелетов.
Метаданные | Описание |
---|---|
AbsTime | Это дабл 1 x 1 и представляет полную временную метку, включая дату и время, в формате часов MATLAB. |
FrameNumber | Это дабл 1 x 1 и представляет номер системы координат. |
IsPositionTracked | Это логическая матрица 1 x 6 с истинными/ложными значениями для отслеживания положения каждого из шести скелетов. A 1 указывает, что положение отслеживается и 0 указывает, что это не так. |
IsSkeletonTracked | Это логическая матрица 1 x 6 с значениями true/false для отслеженного состояния каждого из шести скелетов. A 1 указывает, что он отслеживается и 0 указывает, что это не так. |
JointDepthIndices | Если на BodyPosture для свойства задано значение Standing , это 20 x 2 x 6 двойная матрица координат X-и Y-для 20 соединений в пикселях относительно изображения глубины для шести возможных скелетов. Если BodyPosture установлено в Seated , это будет 10 x 2 x 6 двойной для 10 соединений. |
JointImageIndices | Если на BodyPosture для свойства задано значение Standing , это 20 x 2 x 6 двойная матрица координат X-и Y-для 20 соединений в пикселях относительно цветного изображения для шести возможных скелетов. Если BodyPosture установлено в Seated , это будет 10 x 2 x 6 двойной для 10 соединений. |
JointTrackingState | Эта 20 x 6 целочисленная матрица содержит перечисленные значения для точности отслеживания каждого соединения для всех шести скелетов. Значения включают:
|
JointWorldCoordinates | Это двойная матрица 20 x 3 x 6 с координатами x -, y - и z для 20 соединений в метрах от датчика для шести возможных скелетов, если BodyPosture установлено в Standing . Если установлено значение Seated , это будет 10 x 3 x 6 двойной для 10 соединений.Синтаксис этих данных см. в шаге 9. |
PositionDepthIndices | Двойная матрица 2 x 6 координат X и Y каждого скелета в пикселях относительно изображения глубины. |
PositionImageIndices | Двойная матрица 2 x 6 координат X и Y каждого скелета в пикселях относительно цветного изображения. |
PositionWorldCoordinates | Матрица с 3 x 6 двойными координатами X, Y и Z каждого скелета в метрах относительно датчика. |
RelativeFrame | Это число 1 x 1 double представляет номер системы координат относительно выполнения триггера, если используется триггер. |
SegmentationData | Размер изображения двойной массив с каждым пикселем, сопоставленным с отслеженным/обнаруженным скелетом, представленным числами, 1 к 6. Эта карта сегментации является растровым изображением с пиксельными значениями, соответствующими индексу человека в поле зрения, который находится ближе всего к камере в этом пиксельном положении. Значение 0 означает, что отслеживаемый каркас отсутствует. |
SkeletonTrackingID | Эта целочисленная матрица 1 x 6 содержит идентификаторы отслеживания всех шести скелетов. Эти идентификаторы отслеживают определенные скелеты, используя SkeletonsToTrack свойство на шаге 5.Идентификаторы отслеживания генерируются Kinect и изменяются с приобретения на приобретение. |
TriggerIndex | Это дабл 1 x 1, представляющий триггер, с которым связано событие, если используется триггер. |
Можно просмотреть любое отдельное свойство, просверлив метаданные. Для примера посмотрите на IsSkeletonTracked
свойство.
metaData.IsSkeletonTracked ans = 1 0 0 0 0 0
В этом случае это означает, что из шести возможных каркасов отслеживается один каркас, и он находится в первом положении. Если у вас есть несколько скелетов, это свойство полезно для подтверждения того, какие из них отслеживаются.
Получите местоположения соединений для первого лица в мировых координатах с помощью JointWorldCoordinates
свойство. Поскольку это лицо в позиции 1, индекс использует 1
.
metaData.JointWorldCoordinates(:,:,1) ans = -0.1408 -0.3257 2.1674 -0.1408 -0.2257 2.1674 -0.1368 -0.0098 2.2594 -0.1324 0.1963 2.3447 -0.3024 -0.0058 2.2574 -0.3622 -0.3361 2.1641 -0.3843 -0.6279 1.9877 -0.4043 -0.6779 1.9877 0.0301 -0.0125 2.2603 0.2364 0.2775 2.2117 0.3775 0.5872 2.2022 0.4075 0.6372 2.2022 -0.2532 -0.4392 2.0742 -0.1869 -0.8425 1.8432 -0.1869 -1.2941 1.8432 -0.1969 -1.3541 1.8432 -0.0360 -0.4436 2.0771 0.0382 -0.8350 1.8286 0.1096 -1.2114 1.5896 0.1196 -1.2514 1.5896
Столбцы представляют координаты X, Y и Z в метрах из 20 точек на каркасе 1.
Можно опционально просмотреть данные сегментации как изображение.
% View the segmentation data as an image. imagesc(metaDataDepth.SegmentationData); % Set the color map to jet to color code the people detected. colormap(jet);
Индексы соединений BodyPosture
The BodyPosture
свойство на шаге 5 указывает, стоят ли отслеживаемые скелеты или сидят. Значения Standing
(дает 20 данных скелета точек) и Seated
(дает 10-балльные данные скелета, используя индексы соединений 2 - 11).
Таков порядок соединений, возвращаемых адаптером Kinect:
Hip_Center = 1; Spine = 2; Shoulder_Center = 3; Head = 4; Shoulder_Left = 5; Elbow_Left = 6; Wrist_Left = 7; Hand_Left = 8; Shoulder_Right = 9; Elbow_Right = 10; Wrist_Right = 11; Hand_Right = 12; Hip_Left = 13; Knee_Left = 14; Ankle_Left = 15; Foot_Left = 16; Hip_Right = 17; Knee_Right = 18; Ankle_Right = 19; Foot_Right = 20;
Когда BodyPosture
установлено в Standing
все 20 индексов возвращаются, как показано выше. Когда BodyPosture
установлено в Seated
возвращаются числа от 2 до 11, поскольку это представляет верхнюю часть каркаса.
Примечание
Чтобы понять различия в использовании адаптера Kinect по сравнению с предыдущими адаптерами тулбокса, смотрите Важную информацию о адаптере Kinect. Дополнительные сведения об обнаружении устройств Kinect и использовании двух идентификаторов устройств см. в разделе Обнаружение устройств Kinect. Пример одновременного приобретения см. в разделе Приобретение из устройств цвета и глубины одновременно.