opencv randn is like in matlab.
The randn function make values of normal distribution random
in matlab
randn is usage like this..
randn()
>> 0.4663
randn(10,1)'
>> -0.1465 1.0143 0.4669 1.5750 -1.1900 0.2689 -0.2967 -0.4877 0.5671 0.5632
to use mean 5, variance 3
5+3*rand(10,1)
>> 6.2932 12.5907 6.6214 1.6941 4.8522 3.1484 6.1745 4.5230 5.2183 5.6888
OK, now consider case of OpenCV
We will make mean 10 and variance 2 normal distribution random values and fill in 2x10 matrix.
example 1)
randn
..
cv::Mat matrix2xN(2, 10, CV_32FC1);
randn(matrix2xN, 10, 2);
for (int i = 0; i < 10; ++i)
{
cout << matrix2xN.at<float>(0, i) << " ";
cout << matrix2xN.at<float>(1, i) << endl;
}
..
example 2)
randn and randu
..
cv::Mat matrix2xN(2, 10, CV_32FC1);
randn(matrix2xN, 10, 2);
for (int i = 0; i < 10; ++i)
{
cout << matrix2xN.at< float>(0, i) << " ";
cout << matrix2xN.at< float>(1, i) << endl;
}
//gaussian generation example
Mat Gnoise = Mat(5, 5, CV_8SC1);
randn(Gnoise, 5, 10); //mean, variance
cout << Gnoise << endl;
//
Mat Unoise = Mat(5, 5, CV_8SC1);
randu(Unoise, 5, 10); //low, high
cout << Unoise << endl;
//noise adapt
Mat Gaussian_noise = Mat(img.size(), img.type());
double mean = 0;
double std = 10;
randn(Gaussian_noise, mean, std); //mean, std
Mat colorNoise = img + Gaussian_noise;
..