configureKalmanFilter

Создайте Фильтр Калмана для объектного отслеживания

Синтаксис

kalmanFilter = configureKalmanFilter(MotionModel,InitialLocation,InitialEstimateError,MotionNoise,MeasurementNoise)

Описание

пример

kalmanFilter = configureKalmanFilter(MotionModel,InitialLocation,InitialEstimateError,MotionNoise,MeasurementNoise) возвращает объект vision.KalmanFilter, сконфигурированный, чтобы отследить физический объект. Этот объект перемещается с постоянной скоростью или постоянным ускорением в M - размерный Декартов пробел. Функция определяет количество размерностей, M, от длины вектора InitialLocation.

Эта функция обеспечивает простой подход для конфигурирования объекта vision.KalmanFilter для отслеживания физического объекта в Декартовой системе координат. Отслеживаемый объект может переместиться или с постоянной скоростью или с постоянным ускорением. Статистические данные являются тем же самым по всем измерениям. Если необходимо сконфигурировать Фильтр Калмана с различными предположениями, используйте объект vision.KalmanFilter непосредственно.

Примеры

свернуть все

Обнаружьте и отследите шар с помощью Кальмана, фильтрующего, приоритетного обнаружения и анализа блоба.

Создайте Системные объекты, чтобы считать кадры видео, обнаружить приоритетные физические объекты и результаты отображения.

videoReader = vision.VideoFileReader('singleball.mp4');
videoPlayer = vision.VideoPlayer('Position',[100,100,500,400]);
foregroundDetector = vision.ForegroundDetector('NumTrainingFrames',10,...
                'InitialVariance',0.05);
blobAnalyzer = vision.BlobAnalysis('AreaOutputPort',false,...
                'MinimumBlobArea',70);

Обработайте каждый кадр видео, чтобы обнаружить и отследить шар. После чтения текущего кадра видео пример ищет шар при помощи фонового вычитания и анализа блоба. Когда шар сначала обнаруживается, пример создает Фильтр Калмана. Фильтр Калмана определяет шар? s местоположение, обнаруживается ли это или нет. Если шар обнаруживается, Фильтр Калмана сначала предсказывает свое состояние в текущем кадре видео. Фильтр затем использует недавно обнаруженное местоположение, чтобы исправить состояние, производя отфильтрованное местоположение. Если шар отсутствует, Фильтр Калмана только полагается на свое предыдущее состояние, чтобы предсказать текущее местоположение шара.

  kalmanFilter = []; isTrackInitialized = false;
   while ~isDone(videoReader)
     colorImage  = step(videoReader);

     foregroundMask = step(foregroundDetector, rgb2gray(colorImage));
     detectedLocation = step(blobAnalyzer,foregroundMask);
     isObjectDetected = size(detectedLocation, 1) > 0;

     if ~isTrackInitialized
       if isObjectDetected
         kalmanFilter = configureKalmanFilter('ConstantAcceleration',...
                  detectedLocation(1,:), [1 1 1]*1e5, [25, 10, 10], 25);
         isTrackInitialized = true;
       end
       label = ''; circle = zeros(0,3);
     else
       if isObjectDetected
         predict(kalmanFilter);
         trackedLocation = correct(kalmanFilter, detectedLocation(1,:));
         label = 'Corrected';
       else
         trackedLocation = predict(kalmanFilter);
         label = 'Predicted';
       end
       circle = [trackedLocation, 5];
     end

     colorImage = insertObjectAnnotation(colorImage,'circle',...
                circle,label,'Color','red');
     step(videoPlayer,colorImage);
   end

Высвободите средства.

release(videoPlayer);
release(videoReader);

Входные параметры

свернуть все

Модель Motion, заданная как вектор символов 'ConstantVelocity' или 'ConstantAcceleration'. Модель движения, которую вы выбираете, применяется ко всем размерностям. Например, для 2D Декартовой системы координат. Этот режим применяется и к X и к направлениям Y.

Типы данных: char

Начальное местоположение объекта, заданного как числовой вектор. Этот аргумент также определяет количество размерностей для системы координат. Например, если вы задаете начальное местоположение как двухэлементный вектор, [x 0, y 0], затем 2D система координат принята.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отклонение неуверенности первоначальной оценки, заданное как 2D или трехэлементный вектор. Ошибка первоначальной оценки задает отклонение первоначальных оценок местоположения, скорости и ускорения отслеживаемого объекта. Функция принимает нулевую начальную скорость и ускорение для объекта в местоположении, которое вы устанавливаете со свойством InitialLocation. Можно установить InitialEstimateError на аппроксимированное значение:

(assumed valuesactual values) 2 + the variance of the values

Значение этого свойства влияет на Фильтр Калмана для первых нескольких обнаружений. Позже, оценочная ошибка определяется шумом и входными данными. Большее значение для ошибки первоначальной оценки помогает Фильтру Калмана адаптироваться к результатам обнаружения быстрее. Однако большее значение также препятствует тому, чтобы Фильтр Калмана удалил шум из первых нескольких обнаружений.

Задайте ошибку первоначальной оценки как двухэлементный вектор для постоянной скорости или трехэлементный вектор для постоянного ускорения:

MotionModelInitialEstimateError
ConstantVelocity[LocationVariance, VelocityVariance]
ConstantAcceleration[LocationVariance, VelocityVariance, AccelerationVariance]

Типы данных: double | single

Отклонение выбранной и фактической модели, заданной как 2D или трехэлементный вектор. Шум движения задает допуск Фильтра Калмана для отклонения от выбранной модели. Этот допуск компенсирует различие между фактическим движением объекта и той из модели, которую вы выбираете. Увеличение этого значения может заставить Фильтр Калмана изменять свое состояние, чтобы соответствовать обнаружениям. Такое увеличение может препятствовать тому, чтобы Фильтр Калмана удалил достаточно шума из обнаружений. Значения этого свойства остаются постоянными и поэтому могут влиять на долгосрочную производительность Фильтра Калмана.

MotionModelInitialEstimateError
ConstantVelocity[LocationVariance, VelocityVariance]
ConstantAcceleration[LocationVariance, VelocityVariance, AccelerationVariance]

Типы данных: double | single

Погрешность отклонения обнаруженного местоположения, заданного как скаляр. Это непосредственно связано с методом, используемым, чтобы обнаружить физические объекты. Увеличение значения MeasurementNoise позволяет Фильтру Калмана удалить больше шума из обнаружений. Однако это может также заставить Фильтр Калмана придерживаться слишком тесно модели движения, которую вы выбрали, ставя меньше акцента на обнаружениях. Значения этого свойства остаются постоянными, и поэтому могут влиять на долгосрочную производительность Фильтра Калмана.

Типы данных: double | single

Выходные аргументы

свернуть все

Сконфигурированный Фильтр Калмана, возвращенный как объект vision.KalmanFilter для отслеживания.

Алгоритмы

Эта функция обеспечивает простой подход для конфигурирования видения. Объект KalmanFilter для отслеживания. Фильтр Калмана реализует дискретное время, линейную Систему Пространства состояний. Функция configureKalmanFilter устанавливает свойства объектов vision.KalmanFilter.

Свойство InitialLocation соответствует вектору измерения, используемому в модели в пространстве состояний Фильтра Калмана. Эта таблица связывает вектор измерения, M, к модели в пространстве состояний для Фильтра Калмана.
Модель изменения состояния, A, и модель Measurement, H

Модель изменения состояния, A, и модель измерения, H модели в пространстве состояний, собирается блокировать диагональные матрицы, сделанные из M идентичные подматрицы A s и H s, соответственно:

A = blkdiag (A s _1, A s _2..., A s _M)

H = blkdiag (H s _1, H s _2..., H s _M)

Подматрицы A s и H s описаны ниже:
MotionModelA sH s
'ConstantVelocity'[1 1; 0 1][1 0]
'ConstantAcceleration'[1 1 0.5; 0 1 1; 0 0 1] [1 0 0]
 
Начальное состояние, x:
MotionModelНачальное состояние, x
'ConstantVelocity'[InitialLocation (1), 0..., InitialLocation (M), 0]
'ConstantAcceleration'[InitialLocation (1), 0, 0..., InitialLocation (M), 0, 0]
 
Ошибочная ковариационная матрица оценки начального состояния, P:
P = diag (repmat (InitialError, [1, M]))
 
Ковариация шума процесса, Q:
Q = diag (repmat (MotionNoise, [1, M]))
 
Ковариация шума измерения, R:
R = diag (repmat (MeasurementNoise, [1, M])).

Представленный в R2012b