exponenta event banner

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);

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

  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-й Декартовской системы координат. Этот режим применяется к направлениям X и Y.

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

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

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

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

(предполагаемые значения - фактические значения) 2 + отклонение значений

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

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

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 для отслеживания. Фильтр Калмана реализует дискретную временную линейную систему State-Space System. configureKalmanFilter функция устанавливает vision.KalmanFilter свойства объекта.

InitialLocation свойство соответствует вектору измерения, используемому в модели состояния-пространства фильтра Калмана. В этой таблице вектор М измерения связан с моделью состояния-пространства для фильтра Калмана.
Модель перехода состояния, A и модель измерения, H

Модель перехода состояния, А, и модель измерения, Н модели состояния-пространства, настроены на блок-диагональные матрицы, выполненные из М идентичных подматриц As и Hs соответственно:

A = blkdiag(Как _1, Как _2,..., Как _M)

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

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

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