При инициализации частиц мне нужно добавить немного гауссовского шума. Например
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 ++?
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); // <-
Ура!
Взгляните на стандартную библиотеку «Случайный», включает в себя методы для разных дистрибутивов, в том числе нормальное распределение.
В случае некоррелированных переменных вы можете использовать независимое 1D случайное число для каждого измерения (см. Ответ KeillRandor), в противном случае оно не является правильным. Для реализации вы можете посмотреть код MATLAB, для этого наберите в редакторе скриптов
mvnrnd
затем щелкните правой кнопкой мыши по только что набранной команде и выберите открыть mvrnd в контекстном меню. Вы увидите код MATLAB для функции mvnrnd.