В Обнаружении Устройств 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. Значения включают: 0 1 2 |
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. Для примера одновременного захвата смотрите Получение от Устройств Цвета и Глубины Одновременно.