видение. KalmanFilter

Исправление измерения, состояния и ошибочной ковариации оценки состояния

Описание

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

Создание

Алгоритм Фильтра Калмана включает два шага, прогноз и исправление (также известный как шаг обновления). Первый шаг использует предыдущие состояния, чтобы предсказать текущее состояние. Второй шаг использует текущее измерение, такое как объектное местоположение, чтобы исправить состояние. Фильтр Калмана реализует дискретное время, линейную Систему Пространства состояний.

Примечание

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

В системе пространства состояний модель изменения состояния, A, и модель измерения, H, установлена можно следующим образом:

ПеременнаяЗначение
A[1 1 0 0; 0 1 0 0; 0 0 1 1; 0 0 0 1]
H[1 0 0 0; 0 0 1 0]

Синтаксис

kalmanFilter = vision.KalmanFilter
kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel)
kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel,ControlModel,Name,Value)

Описание

пример

kalmanFilter = vision.KalmanFilter возвращает фильтр Калмана в течение дискретного времени, постоянной скоростной системы.

kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel) дополнительно конфигурирует модель управления, B.

kalmanFilter = vision.KalmanFilter(StateTransitionModel,MeasurementModel,ControlModel,Name,Value) конфигурирует свойства объектов Фильтра Калмана, заданные в качестве одного или нескольких аргументов пары Name,Value. Незаданные свойства имеют значения по умолчанию.

Свойства

развернуть все

Модель, описывающая изменение состояния между временными шагами (A), заданный как M-by-M матрица. После того, как объект создается, это свойство не может быть изменено. Это свойство относится к переменной A в модели в пространстве состояний.

Модель, описывающая состояние к преобразованию измерения (H), заданный как N-by-M матрица. После того, как объект создается, это свойство не может быть изменено. Это свойство относится к переменной H в модели в пространстве состояний.

Модель, описывающая вход управления, чтобы утвердить преобразование (B), заданный как M-by-L матрица. После того, как объект создается, это свойство не может быть изменено. Это свойство относится к переменной B в модели thestate-пробела.

Состояние (x), заданный как скаляр или M - вектор элемента. Если вы зададите State как скаляр, он будет расширен к M - вектор элемента. Это свойство относится к переменной x в модели в пространстве состояний.

Ошибочная ковариация оценки состояния (P), заданный как скаляр или M-by-M матрица. Если вы зададите StateCovariance как скаляр, то он будет расширен к M-by-M диагональная матрица. Это свойство относится к переменной P в системе пространства состояний.

Ковариация шума процесса (Q), заданный как скаляр или M-by-M матрица. Если вы зададите ProcessNoise как скаляр, то он будет расширен к M-by-M диагональная матрица. Это свойство относится к переменной Q в модели в пространстве состояний.

Ковариация шума измерения (R), заданный как скаляр или N-by-N матрица. Если вы зададите MeasurementNoise как скаляр, то он будет расширен к N-by-N диагональная матрица. Это свойство относится к переменной R в модели в пространстве состояний.

Функции объекта

Используйте predict и функции correct на основе результатов обнаружения. Используйте функцию distance, чтобы найти лучшие соответствия.

  • Когда отслеживаемый объект будет обнаружен, используйте predict и функции correct с объектом Фильтра Калмана и измерением обнаружения. Вызовите функции в следующем порядке:

    [...] = predict(kalmanFilter);
    [...] = correct(kalmanFilter,measurement);

  • Когда отслеживаемый объект не будет обнаружен, вызовите функцию predict, но не функцию correct. Когда отслеживаемый объект отсутствует или закрытый, никакое измерение не доступно. Настройте функции со следующей логикой:

    [...] = predict(kalmanFilter);
    If measurement exists
    	[...] = correct(kalmanFilter,measurement);
    end

  • Если отслеживаемый объект становится доступным после пропавших без вести для прошлого t-1 непрерывный временной шаг, можно вызвать функцию predict времена t. Этот синтаксис особенно полезен, чтобы обработать асинхронное видео.. Например,

    for i = 1:k
      [...] = predict(kalmanFilter);
    end
    [...] = correct(kalmanFilter,measurement) 

correctИсправление измерения, состояния и ошибочной ковариации оценки состояния
predictПрогноз измерения
distanceЗначение уверенности измерения

Примеры

свернуть все

Отследите местоположение физического объекта, перемещающегося в одно направление.

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

detectedLocations = num2cell(2*randn(1,40) + (1:40));

Моделируйте недостающие обнаружения, установив некоторые элементы опустеть.

detectedLocations{1} = [];
  for idx = 16: 25 
      detectedLocations{idx} = []; 
  end

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

figure;
hold on;
ylabel('Location');
ylim([0,50]); 
xlabel('Time');
xlim([0,length(detectedLocations)]);

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

kalman = []; 
for idx = 1: length(detectedLocations) 
   location = detectedLocations{idx}; 
   if isempty(kalman)
     if ~isempty(location) 
       
       stateModel = [1 1;0 1]; 
       measurementModel = [1 0]; 
       kalman = vision.KalmanFilter(stateModel,measurementModel,'ProcessNoise',1e-4,'MeasurementNoise',4);
      kalman.State = [location, 0]; 
     end 
   else
     trackedLocation = predict(kalman);
     if ~isempty(location) 
       plot(idx, location,'k+');
      d = distance(kalman,location); 
       title(sprintf('Distance:%f', d));
       trackedLocation = correct(kalman,location); 
     else 
       title('Missing detection'); 
     end 
     pause(0.2);
     plot(idx,trackedLocation,'ro'); 
   end 
 end 
legend('Detected locations','Predicted/corrected locations');

Используйте Фильтр Калмана, чтобы удалить шум из случайного сигнала, поврежденного нулевым средним Гауссовым шумом.

Синтезируйте случайный сигнал, который имеет значение 1 и повреждается нулевым средним Гауссовым шумом со стандартным отклонением 0,1.

x = 1;
len = 100;
z = x + 0.1 * randn(1,len);

Удалите шум из сигнала при помощи Фильтра Калмана. Состояние, как ожидают, будет постоянным, и измерение совпадает с состоянием.

stateTransitionModel = 1;
measurementModel = 1;
obj = vision.KalmanFilter(stateTransitionModel,measurementModel,'StateCovariance',1,'ProcessNoise',1e-5,'MeasurementNoise',1e-2);

z_corr = zeros(1,len);
for idx = 1: len
 predict(obj);
 z_corr(idx) = correct(obj,z(idx));
end

Постройте результаты.

figure, plot(x * ones(1,len),'g-'); 
hold on;
plot(1:len,z,'b+',1:len,z_corr,'r-');
legend('Original signal','Noisy signal','Filtered signal');

Алгоритмы

развернуть все

Ссылки

[1] Валлийцы, Грег, и епископ Гэри, введение в фильтр Калмана, TR 95–041. Университет Северной Каролины в Чапел-Хилле, факультет информатики.

[2] Блэкмен, S. Несколько - Целевое Отслеживание с Радарными Приложениями. Artech House, Inc., стр 93, 1986.

Расширенные возможности

Смотрите также

Функции

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