Matlab の関数randn()のように、(OpenCV で) 平均 0 と分散 1 の乱数の行列 (2xN) を生成するための最良のソリューションを探しています。
OpenCV ライブラリに関数がありますが、randn()
この関数に引数を渡して平均 0、分散 1 の数値を生成する方法がわかりません。
OpenCV にはrandn()関数とRNGクラスがあります。以下は、置き換えが必要な Matlab コードと、同等の OpenCV コードです。
マトラブ:
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()
using を実装してRNG
います。使用する場合の欠点randn()
は、シードを制御できなくなることです。
matrix2xN
上記のチャネルが複数ある場合は、チャネルごとに異なる平均/シグマが使用されます。その場合、matrix2xN のチャネル数と一致するように、平均とシグマの行 (または列) の数を増やす必要があります。