2013-09-26 10 views
6

ich für die beste Lösung suchen (in OpenCV) eine Matrix (2 × N) von Zufallszahlen zu erzeugen, mit dem Mittelwert 0 und Varianz 1, wie die Funktion randn() in Matlab .OpenCV: randn (Generator) wie in Matlab

Es gibt eine randn() Funktion in den OpenCV-Bibliotheken, aber ich weiß nicht, wie Argumente für diese Funktion zu übergeben Zahlen mit Mittelwert 0 und Varianz 1.

Antwort

12

OpenCV hat eine randn() Funktion und auch ein RNG zu erzeugen Klasse. Unten finden Sie den Matlab-Code, den Sie möglicherweise ersetzen möchten, und den entsprechenden OpenCV-Code.

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); 

oder

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); 

Intern OpenCV implementiert randn() Verwendung RNG. Der Nachteil bei der Verwendung von randn() ist, dass Sie die Kontrolle über das Saatgut verlieren.

Wenn matrix2xN oben mehr als einen Kanal hatte, wird für jeden Kanal ein anderer Mittelwert/Sigma verwendet. In diesem Fall müssten Sie die Anzahl der Zeilen (oder Spalten) in Mittelwert und Sigma erhöhen, um sie an die Anzahl der Kanäle in Matrix2xN anzupassen.

+0

Danke für diese Antwort. +1. Als Nebenbemerkung scheint es im API-Design verschwenderisch zu sein, eine 'cv :: Mat' von nur einem Element anzugeben, um die mittlere oder Standardabweichung zu spezifizieren .... wäre kein Skalar oder 'cv :: Scalar' ist stattdessen besser geeignet? Seltsam. – rayryeng