2013-09-26 25 views
6

Matlab'da randn() işlevi gibi ortalama 0 ve varyans 1 ile bir rastgele sayı (2xN) matrisini oluşturmak için en iyi çözümü arıyorum .OpenCV: randn() jeneratörü matlab

Orada OpenCV kütüphanelerde bir randn() fonksiyonudur ama ortalama 0 ve varyans 1.

cevap

12

OpenCV ile sayılar oluşturmak için bu işleve argümanlar geçmek nasıl bilmiyorum ayrıca randn() fonksiyonu ve bir RNG sahiptir sınıf. Aşağıda değiştirmek istediğiniz Matlab kodu ve eşdeğer OpenCV kodu var.

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

veya Dahili

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 uygulayan randn()kullanılarak. randn() kullanılıyorsa dezavantaj, tohum üzerinde kontrolü kaybetmenizdir. Yukarıdaki matrix2xN numaralı telefonun birden fazla kanalı olması durumunda, her bir kanal için farklı bir ortalama/sigma kullanılmıştır. Bu durumda, matrix2xN'deki kanal sayısını eşleştirmek için ortalama ve sigma satır sayısını (veya cols) artırmanız gerekir.

+0

Bu cevap için teşekkürler. +1. Bir sidenote olarak, API tasarımında, ortalama veya standart sapmayı belirtmek için sadece bir elemanın bir cv :: Mat'ı belirtmek zorunda kalması savurgan görünmektedir ... skalar veya cv :: Skallar yerine daha uygun olabilir mi? Tuhaf. – rayryeng