2014-06-11 40 views
1

初始化粒子時,我需要給它添加一些高斯噪聲。例如粒子濾波器中的多元高斯分佈

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)
  • 該函數從d維 高斯分佈產生N樣品

我的N和d值始終爲1,我怎樣才能實現的OpenCV c中的mgd功能++?

+1

也許看看'相關鏈接'http://stackoverflow.com/questions/6142576/sample-from-multivariate-normal-gaussian-distribution-in-c?rq=1關於你的問題:你是西格瑪在所有維度統一? – Micka

+0

@Micka是的,它的制服。是否有簡單的或內置的函數,因爲我無法理解該鏈接中的答案 – user2396315

+0

不幸的是,內置的openCV函數只能創建單變量值,據我所知,我不知道是否採用統一西格瑪的多元分佈採樣可以簡化爲多個單變量分佈...對不起 – Micka

回答

1

看看標準庫"random",它包括不同分佈的方法,包括normal distribution

在不相關變量的情況下,您可以爲每個維度使用獨立的一維隨機數(請參閱KeillRandor的答案),否則它是不正確的。爲了實現你可以看看MATLAB代碼,做到這一點,輸入腳本編輯器

mvnrnd

然後鼠標右鍵單擊剛剛輸入的命令,然後在上下文菜單中打開mvrnd。你會看到mvnrnd函數的MATLAB代碼。

+0

可以根據我的問題顯示一點功能的使用?謝謝' – user2396315

+0

如果你問mvrnd,這是你問的功能。看到這裏:http://www.mathworks.com/help/stats/mvnrnd.html –

+0

我要求的是「正常分發」,C++ one – user2396315

1

OpenCV帶有一個不錯的Random Number Generator類和許多有用的功能。要初始化具有隨機高斯噪聲的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); // <- 

乾杯!

+0

不應該有平均值有d維(可能由openCV自動創建)? – Micka