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

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

свернуть все

Модель 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 объект для отслеживания.

Алгоритмы

Эта функция обеспечивает простой подход для конфигурирования vision.KalmanFilter object для отслеживания. Фильтр Калмана реализует дискретное время, линейную Систему в пространстве состояний. 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