configureKalmanFilter

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

Описание

пример

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

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

Примеры

свернуть все

Обнаружение и отслеживание мяча с помощью фильтрации Калмана, обнаружения переднего плана и анализа больших двоичных объектов.

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

videoReader = VideoReader('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 hasFrame(videoReader)
     colorImage  = readFrame(videoReader);

     foregroundMask = step(foregroundDetector,im2gray(im2single(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);
     pause(0.1);
   end

Отпустите ресурсы.

release(videoPlayer);

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Алгоритмы

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

The InitialLocation свойство соответствует вектору измерения, используемому в модели пространства состояний фильтра Калмана. Эта таблица M связывает вектор измерения с моделью пространства состояний для фильтра Калмана.
Модель перехода состояния, A и модель Измерения, H

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

A = blkdiag(A s _1, A s _2,..., A s _<reservedrangesplaceholder0>)

H = blkdiag(H s _1, H s _2,..., H s _<reservedrangesplaceholder0>)

Подматрицы 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(<reservedrangesplaceholder0>) , 0]
'ConstantAcceleration'[InitialLocation(1), 0, 0..., InitialLocation(<reservedrangesplaceholder0>) , 0, 0]
 
Начальное состояние ошибки расчета ковариации матрицу, P:
P = diag(repmat(InitialError, [1, M]))
 
Ковариация шума процесса, Q:
Q = diag(repmat(MotionNoise, [1, M]))
 
Измерение измерительного шума, R:
R = diag(repmat(MeasurementNoise, [1, M])).

Введенный в R2012b