2013-09-26 82 views
6

我尋找以產生(在OpenCV中)隨機數的矩陣(2×N個)均值爲0,方差爲1的最佳解決方案,如函數randn()的OpenCV:randn()在Matlab發電機等在MATLAB

有一個在OpenCV的庫中一個randn()功能,但我不知道如何參數傳遞給這個函數產生均值爲0,方差爲1

回答

12

OpenCV的數字有randn()功能,也是一個RNG類。以下是您可能要替換的Matlab代碼以及等效的OpenCV代碼。

Matlab的:

matrix2xN = randn(2,N) 

的OpenCV:

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1); 
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1); 
cv::RNG rng(optional_seed); 
cv::Mat matrix2xN(2,N,CV_64FC1); 
rng.fill(matrix2xN, cv::RNG::NORMAL, mean, sigma); 

cv::Mat mean = cv::Mat::zeros(1,1,CV_64FC1); 
cv::Mat sigma= cv::Mat::ones(1,1,CV_64FC1); 
cv::randn(matrix2xN, mean, sigma); 

在內部,OpenCV的實現randn()使用RNG。如果使用randn()的缺點是你失去了對種子的控制。

如果上面的matrix2xN有多個通道,則每個通道使用不同的平均值/ sigma。在這種情況下,您需要增加平均值和西格瑪中的行數(或列數)以匹配matrix2xN中的通道數量。

+0

感謝您的回答。 +1。作爲一個旁註,在API設計中,爲了指定平均值或標準偏差,必須指定一個「cv :: Mat」,這似乎很浪費......不是標量或cv :: Scalar'會更合適嗎?奇怪的。 – rayryeng