Многомерное распределение Гаусса в фильтре частиц

При инициализации частиц мне нужно добавить немного гауссовского шума. Например

particle.x(i) = rect(1)+mgd(1,1,0,10);

Вот rect(1) дает положение, а функция MGD обеспечивает шум

Подробности о функции mgd:

  • функция x=mgd(N,d,rmean,covariance)
  • Создает многомерное распределение Гаусса
  • использование x=mgd(N,d,mu,sigmax)
  • Эта функция генерирует N образцы из d-измерения
    Гауссово распределение

Моя ценность N и d всегда 1, как я могу реализовать mgd функция в opencv c ++?

1

Решение

OpenCV поставляется с хорошим Генератор случайных чисел класс, а также много полезных функций. Чтобы инициализировать d-мерный вектор со случайным гауссовским шумом, просто выполните:

int d = 10; // dimension
float m = 0, cov = 0.1; // mean and covariance
vector<float> X(d,.0f); // your d-dimensional vector
cv::randn(X,m,cov); // <-

Ура!

1

Другие решения

Взгляните на стандартную библиотеку «Случайный», включает в себя методы для разных дистрибутивов, в том числе нормальное распределение.

В случае некоррелированных переменных вы можете использовать независимое 1D случайное число для каждого измерения (см. Ответ KeillRandor), в противном случае оно не является правильным. Для реализации вы можете посмотреть код MATLAB, для этого наберите в редакторе скриптов

mvnrnd

затем щелкните правой кнопкой мыши по только что набранной команде и выберите открыть mvrnd в контекстном меню. Вы увидите код MATLAB для функции mvnrnd.

1

По вопросам рекламы [email protected]