HITech 1 Жалоба Опубликовано September 30, 2012 Ну у Вас опечатка наверное, в wiki http://en.wikipedia.org/wiki/Kalman_filter Это немного по-другому: Опечатки нет, это действительно немного по-другому. Я вывел матрицы в более строгом виде в соответствии с теорией. Но и то, что представили Вы тоже работает. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HITech 1 Жалоба Опубликовано October 5, 2012 Выкладываю примерный перевод главы про пример фильтра из книги Learning OpenCV, о котором шла речь в начале темы. Может кому поможет. А может кто и ошибки найдет Что же касается параметров ковариации шума, то числа эти либо подбираются, либо расчитываются на основе статистических наблюдений оцениваемого процесса и датчиков измерения. Существуют также варианты фильтра, в которых эти параметры пересчитываются в процессе работы, то бишь постоянно настраиваются. Если вспомню выложу ссылку на статью, где это объяснено на русском языке.primer.pdf 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hersir 0 Жалоба Опубликовано May 2, 2015 Здравствуйте. Я впервые в жизни сталкиваюсь с фильтром Калмана и не понимаю многих строчек в коде. Если вам не сложно, помогите, пожалуйста, разобраться как решить задачу на фильтр Калмана: есть двумерная функция X(t)известно, что движение равноускоренное даны измерения координаты с интервалом в 1 сек Нужно сформировать файл out.txt с сглаженной траекторией формата x1 x2 x1_optimal x2_optimalпервые две колонки - те же что и на входе, x1_optimal и x2_optimal - сглаженные значения Во вложенном файле x1 и x2 abr-kalman.txt Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 3, 2015 Ммм, а в чём проблема? Была попытка подогнать стандартный пример из OpenCV под свои данные? Получилось? Нет? Что конкретно не получилось? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hersir 0 Жалоба Опубликовано May 4, 2015 Проблема в том, что я даже не знаю, как подогнать обычный пример. Может я неправильно подхожу к решению задачи или у меня опыта мало в программировании в целом? Моет не надо копаться в каждой строчке? Вот, например, при установке OpenCV у меня появился пример (вложенный файл) Единственное, что я понял, это что KF.transitionMatrix = *(Mat_<float>(2, 2) << 1, 1, 0, 1); - это матрица перехода и setIdentity(KF.measurementMatrix); setIdentity(KF.processNoiseCov, Scalar::all(1e-5)); setIdentity(KF.measurementNoiseCov, Scalar::all(1e-1)); - другие матрицы, ошибки и т.д. setIdentity(KF.errorCovPost, Scalar::all(1)); Что означают остальные строчки - вообще не понятно. Что такое KalmanFilter (4, 2, 0), что за числа вообще, откуда? Что за класс Mat, что он делает? Зачем нужен генератор случайных чисел в таких задачах? И, самое главное, понятия не имею что писать в main(), какие функции запускать и т.д. (Я понимаю, что там полно строчек по изображениям, но не важно, мне интересны остальные, по фильтру)kalman.cpp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 4, 2015 По-русски почитать можно на Хабре например: http://habrahabr.ru/post/140274/ http://habrahabr.ru/post/166693/ http://habrahabr.ru/post/120133/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hersir 0 Жалоба Опубликовано May 4, 2015 Спасибо за информацию. Последний вопрос, если не затруднит: Во всех примерах я видел только как вектору Xk подают рандомные значения, а программа потом каким-то образом задаёт ему следующие и так далее. У меня есть файл с координатами и их нужно отфильтровать. Как подавать вектору Xk эти значения из файла, а не рандом? как строчку прописать? while (getline(fin, s)) { ????куда???? } или я опять что-то не так делаю Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 5, 2015 Всё в соответствии с теорией: KalmanFilter KF; KF.init(); ... while() { Mat prediction = KF.predict(); Mat estimated = KF.correct(measurement); } Можешь ещё посмотреть намного более сложный случай применения фильтра Кальмана для 3D объектов, лежит в OpenCV 3.0, называется real_time_pose_estimation. Вот там динамическая модель выглядит интересней: // [1 0 0 dt 0 0 dt2 0 0 0 0 0 0 0 0 0 0 0] // [0 1 0 0 dt 0 0 dt2 0 0 0 0 0 0 0 0 0 0] // [0 0 1 0 0 dt 0 0 dt2 0 0 0 0 0 0 0 0 0] // [0 0 0 1 0 0 dt 0 0 0 0 0 0 0 0 0 0 0] // [0 0 0 0 1 0 0 dt 0 0 0 0 0 0 0 0 0 0] // [0 0 0 0 0 1 0 0 dt 0 0 0 0 0 0 0 0 0] // [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0] // [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0] // [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0] // [0 0 0 0 0 0 0 0 0 1 0 0 dt 0 0 dt2 0 0] // [0 0 0 0 0 0 0 0 0 0 1 0 0 dt 0 0 dt2 0] // [0 0 0 0 0 0 0 0 0 0 0 1 0 0 dt 0 0 dt2] // [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 dt 0 0] // [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 dt 0] // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 dt] // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0] // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0] // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hersir 0 Жалоба Опубликовано May 5, 2015 Большущее спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах