В Обнаружении Устройств 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 двойных представляет [0.06 -1.00 -0.09] представляет значения |
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 двойных представляет [0.06 -1.00 -0.09] представляет значения |
BodyPosture | Указывает, стоят ли отслеженные skeletons или находятся. Значениями является Standing (дает 20 скелетных данных о точке), и Seated (дает 10 скелетных данных о точке, с помощью объединенных индексов 2 - 11). Standing является значением по умолчанию.Обратите внимание на то, что, если Смотрите подраздел “Индексы Соединения BodyPosture” в конце этого примера для списка индексов 20 скелетных соединений. |
CameraElevationAngle | Управляет углом линзы датчика. Это - угол камеры относительно земли. Значение должно быть целочисленным свойством с областью значений-27 до 27 градусов. Значение по умолчанию является последним установленным значением, поскольку это - липкая установка. Только установите его, если вы хотите изменить угол камеры. Это свойство совместно используется с цветным датчиком также. |
DepthMode | Указывает на область значений глубины в карте глубины. Значениями является Default (область значений 50 - 400 см) и Near (область значений 40 - 300 см). |
FrameRate | Кадры в секунду для приобретения. Это свойство только для чтения и фиксируется в 30 для датчика глубины для всех форматов. Это отражает фактическую частоту кадров при выполнении. |
IREmitter | Средства управления, ли включен эмиттер IR или прочь. Значениями является on и off. Первоначально, значением по умолчанию является on. Однако это - липкое свойство, таким образом, значение по умолчанию является последним установленным значением. Если вы установите его на off, это будет оставаться выключенным в будущем использовании, пока вы не измените настройки. Преимущество этого свойства состоит в том, что полезно при использовании нескольких устройств Kinect избежать интерференции. |
SkeletonsToTrack | Указывает на Скелетный ID Отслеживания, возвращенный как часть метаданных. Значения: Отслеживание Значения по умолчанию Дорожка Дорожка |
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]Эти поля метаданных связаны с отслеживанием skeletons.
| MetaData | Описание |
|---|---|
AbsTime | Это - 1 x 1 двойное и представляет полную метку времени, включая дату и время, в формате часов MATLAB. |
FrameNumber | Это - 1 x 1 двойное и представляет номер кадра. |
IsPositionTracked | Это - 1 x 6 Булевых матриц истинных/ложных значений для отслеживания положения каждого из шести skeletons. 1 указывает, что положение прослежено, и 0 указывает, что это не. |
IsSkeletonTracked | Это - 1 x 6 Булевых матриц истинных/ложных значений для отслеженного состояния каждого из шести skeletons. 1 указывает, что прослежен, и 0 указывает, что это не. |
JointDepthIndices | Если свойство BodyPosture установлено в Standing, это - 20 x 2 x 6 двойных матриц x-and y-координат для 20 соединений в пикселях относительно изображения глубины для шести возможных skeletons. Если бы BodyPosture установлен в Seated, это было бы 10 x 2 x 6 дважды для 10 соединений. |
JointImageIndices | Если свойство BodyPosture установлено в Standing, это - 20 x 2 x 6 двойных матриц x-and y-координат для 20 соединений в пикселях относительно цветного изображения для шести возможных skeletons. Если бы BodyPosture установлен в Seated, это было бы 10 x 2 x 6 дважды для 10 соединений. |
JointTrackingState | Эти 20 x 6 целочисленных матриц содержат перечисляемые значения для точности отслеживания каждого соединения для всех шести skeletons. Значения включают:
Положение Положение |
JointWorldCoordinates | Это - 20 x 3 x 6 двойных матриц x-, y-и z-координат для 20 соединений, в метрах от датчика, для шести возможных skeletons, если 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 двойное представляет номер кадра относительно выполнения триггера, если инициирование используется. |
SegmentationData | Двойной массив размера изображения с каждым пикселем, сопоставленным с, отследил/обнаружил скелет, представленный числами 1 - 6. Эта карта сегментации является битовым массивом с пиксельными значениями, соответствующими индексу человека в области того, кто является самым близким к камере в том положении пикселя. Значение 0 средних значений там не является никаким отслеженным скелетом. |
SkeletonTrackingID | Этот 1 x 6 целочисленных матриц содержит идентификаторы отслеживания всех шести skeletons. Эти идентификаторы отслеживают определенный skeletons использование свойства SkeletonsToTrack на шаге 5.Отслеживание идентификаторов сгенерировано Kinect и изменением от приобретения до приобретения. |
TriggerIndex | Это - 1 x 1 двойное и представляет триггер, событие сопоставлено с тем, если инициирование используется. |
Можно посмотреть на любое отдельное свойство путем развертки в метаданные. Например, посмотрите на свойство IsSkeletonTracked.
metaData.IsSkeletonTracked
ans =
1 0 0 0 0 0В этом случае это означает что шести возможных skeletons, существует один прослеживаемый скелет, и это находится в первом положении. Если у вас есть несколько skeletons, это свойство полезно, чтобы подтвердить, которые прослеживаются.
Получите объединенные местоположения для первого человека в мировых координатах с помощью свойства 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
Свойство BodyPosture, на шаге 5, указывает, стоят ли отслеженные skeletons или находятся. Значениями является 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. Для примера одновременного приобретения смотрите Получение от Устройств Цвета и Глубины Одновременно.