При обнаружении устройств 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. Пример одновременного приобретения см. в разделе Приобретение из устройств цвета и глубины одновременно.