Фильтр Калмана: некоторые сомнения - PullRequest
4 голосов
/ 06 мая 2011

У меня есть несколько вопросов:

  1. В примере , приведенном в документе openCV:

    / * генерация измерения * / cvMatMulAdd (kalman-> measure_matrix, состояние, измерение, измерение);

Это правильно? В уроке: Введение в фильтр Калмана Уэлча и Бишопа в уравнении 1.2 говорится, что измерение = H * состояние + измерительный шум

Не похоже, что оба одинаковы.

  1. Я пытался реализовать отслеживание прыгающего мяча для одного мяча. Я попробовал следующее: (Пожалуйста, укажите, если я делаю это неправильно.)

Для измерения я измеряю две вещи: а) х б) у центроида шара.

Я просто упоминаю строки, которые отличаются от примера, приведенного в документации opencv.

CvKalman* kalman = cvCreateKalman( 5, 2, 0 );
const float A[] = { 1, 0, 1, 0, 0,
        0, 1, 0, 1, 0,
        0, 0, 1, 0, 0,
        0, 0, 0, 1, 1,
        0, 0, 0, 0, 1};

CvMat* state = cvCreateMat( 5, 1, CV_32FC1 );
CvMat* measurement = cvCreateMat( 2, 1, CV_32FC1 );

//initialize the state of kalman filter
            state->data.fl[0] = mean_c;
            state->data.fl[1] = mean_r;
            state->data.fl[2] = mean_c - prev_mean_c;
            state->data.fl[3] = mean_r - prev_mean_r;
            state->data.fl[4] = 9.81;

после инициализации, это то, что дает сбой

cvMatMulAdd (kalman-> transition_matrix, состояние, kalman-> process_noise_cov, state);

1 Ответ

4 голосов
/ 07 мая 2011
  1. В этой строке они просто используют переменные измерения для хранения шума. Смотрите предыдущую строку:

    cvRandArr (& rng, измерение, CV_RAND_NORMAL, cvRealScalar (0), cvRealScalar (sqrt (kalman-> measure_noise_cov-> data.fl [0])));

  2. Вы должны изменить размер матрицы H. Должно быть 5 на 2, чтобы можно было рассчитать H*state + measurement noise. Вы получаете ошибку, вероятно, в строке

    memcpy (cvkalman-> Measure_matrix-> data.fl, H, sizeof (H));

потому что в исходном примере cvkalman->measurement_matrix и H выделяются как 4 на 4 матрицы, и вы уменьшили размерность cvkalman->measurement_matrix только до 5 на 2 (4 * 4 больше, чем 5 * 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...