В разделе Обнаружение устройств 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/10000 секунды. Диапазон значений: 0 кому 4000, и по умолчанию 0. Обратите внимание, что это свойство допустимо только в том случае, если |
FrameInterval | Указывает интервал кадра в единицах 1/10000 секунды. Диапазон значений: 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» в конце этого примера. |
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 значений true/false для отслеживания положения каждого из шести скелетов. 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 двойной представляет номер кадра относительно выполнения триггера, если используется триггер. |
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
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. Пример одновременного получения см. в разделе Одновременное получение из устройств цвета и глубины.