int main() { RNG *foo; int i; foo = rng_create(); printf("Five uniform random numbers\n"); for (i=0; i < 5; i++) printf("%f ", rng_uniform01(foo)); printf("\n"); printf("Five Gaussian random numbers\n"); for (i=0; i < 5; i++) printf("%f ", rng_gaussian(foo, 0.0, 1.0)); printf("\n\n"); rng_destroy(foo); RAN1_SeedRandom((long)time(NULL)); printf("Five uniform random numbers (ran1 api)\n"); for (i=0; i < 5; i++) printf("%f ", RAN1_SimpleRandom()); printf("\n"); printf("Five Gaussian random numbers (ran1 api)\n"); for (i=0; i < 5; i++) printf("%f ", RAN1_GaussianRandom(0.0, 1.0)); printf("\n"); return(0); }
void Hedcut::sample_initial_points(cv::Mat & img, int n, std::vector<cv::Point2d> & pts) { //create n points that spread evenly that are in areas of black points... int count = 0; cv::RNG rng_uniform(time(NULL)); cv::RNG rng_gaussian(time(NULL)); cv::Mat visited(img.size(), CV_8U, cv::Scalar::all(0)); //all unvisited while (count < n) { //generate a random point int c = (int)floor(img.size().width*rng_uniform.uniform(0.f, 1.f)); int r = (int)floor(img.size().height*rng_uniform.uniform(0.f, 1.f)); //decide to keep basic on a probability (black has higher probability) float value = img.at<uchar>(r, c)*1.0/255; //black:0, white:1 float gr = fabs(rng_gaussian.gaussian(0.8)); if ( value < gr && visited.at<uchar>(r, c) ==0) //keep { count++; pts.push_back(cv::Point(r, c)); visited.at<uchar>(r,c)=1; } } if (debug) { cv::Mat tmp = img.clone(); for (auto& c : pts) { cv::circle(tmp, cv::Point(c.y, c.x), 2, CV_RGB(0, 0, 255), -1); } cv::imshow("samples", tmp); //cv::waitKey(); } }
double RAN1_GaussianRandom(double m, double v) { return rng_gaussian(&_ran1_rng, m, v); }