RNG—随机数产生器

RNG 随机数产生器

RNG g_rng(12345);

/******************************************************************************************************/

用OpenCV做算法的朋友们肯定为随机数烦恼过,新版本一直支持随机数产生器啦,而且还继续支持之前版本的c格式的函数,不过与时俱进,我这里介绍C++的RNG类。它可以压缩一个64位的i整数并可以得到scalar和array的随机数。目前的版本支持均匀分布随机数和Gaussian分布随机数。随机数的产生采用的是Multiply-With-Carry算法和Ziggurat算法。

其构造函数的初始化可以传入一个64位的整型参数作为随机数产生器的初值。next可以取出下一个随机数,uniform函数可以返回指定范围的随机数,gaussian函数返回一个高斯随机数,fill则用随机数填充矩阵。

这里介绍一个uniform的使用事项,就是比如利用它产生0~1的随机数的问题,具体代码如下:

RNG rng;
// always produces 0
double a = rng.uniform(0, 1);
// produces double from [0, 1)
double a1 = rng.uniform((double)0, (double)1);
// produces float from [0, 1)
double b = rng.uniform(0.f, 1.f);
// produces double from [0, 1)
double c = rng.uniform(0., 1.);
// may cause compiler error because of ambiguity:
// RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0,0.99999)?
double d = rng.uniform(0, 0.999999);

就是不能写成rng.uniform( 0 ,1),因为输入为int型参数,会调用uniform(int,int),只能产生0。请大家注意使用^_^

还有一些随机数相关的函数,比如randu可以产生一个均匀分布的随机数或者矩阵,randn可以产生一个正态分布的随机数,randShuffle可以随机打乱矩阵元素

再简单介绍一下c版本的随机数产生器的相关函数,有cvRNG、cvRandArr、cvRandInt、cvRandReal

【转】http://blog.csdn.net/yang_xian521/article/details/6931385

时间: 2024-08-12 21:44:12

RNG—随机数产生器的相关文章

OpenCV笔记(六)——随机数产生器、绘制文字

一.随机数产生器 在OpenCV中,我们主要使用RNG类(即Random Number Generator)来产生随机数. RNG rng(); // 默认以0xffffffff作为随机数产生器的种子 我们也可以以系统的当前时间作为随机数产生器的种子.这也是常用的手段. #include <time.h> RNG rng( (unsigned int)time(NULL) ); 另外,我们可以产生一定范围内的均匀分布或者高斯分布(均值为零)的随机数 rng.uniform(0, 10); //

通过均匀分布随机数产生器获得一个高斯分布随机数产生器

一.Box-Muller Transfrom 对于给定一个能产生(0,1)之间的均匀分布的随机数产生器,可以利用Box-Muller transform来获得一个产生标准高斯分布随机数的随机数产生器. Box-Muller transform可以描述如下: 假设U1和U2是两个独立的随机变量,并且其分布为(0,1)之间的均匀分布,可以得到 Z1和Z2是两个互相独立的随机变量,并且这两个随机变量的分布为标准高斯分布. 二.Matlab实验 代码 %% clear clc; clear; %% un

nump中的为随机数产生器的seed

在python的程序中,发现了如下的伪随机数产生的代码 rng = numpy.random.RandomState(23355) arrayA = rng.uniform(0,1,(2,3)) 该段代码的目的是产生一个2行3列的assarray,其中的每个元素都是[0,1]区间的均匀分布的随机数 这里看以看到,有一个23355这个数字,其实,它是伪随机数产生器的种子,也就是“the starting point for a sequence of pseudorandom number” 对于

关于随机数分布器的问题

今天看C++Primer介绍的随机数,准备使用一下,结果出现点小问题,就是每次运行程序获得的首个随机数都是一样的. (已使用time作为随机数种子,按理说应该至少每秒产生的随机数都是不一样的) int main() { default_random_engine e(time(0)); uniform_int_distribution<unsigned> u(0,99); cout<<u(e)<<endl; } 如果直接输出e()那么会产生0-2147483646之间的

OpenCV基础篇之画图及RNG随机数对象

程序及分析 /* * FileName : random_gen.c * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 Jul 2014 08:31:41 PM CST * Brief : * * Copyright (C) MICL,USTB */ #include <cv.h> #include <highgui.h> #include <iostream> using namespa

使用均匀分布随机数产生器构造任意分布的随机数产生器

一.算法原理 在概率论中,有下面重要的结论:设随机变量Y的概率分布函数F(y)为连续函数,而X是在(0,1)上均匀分布的随机变量,设,则Z与Y有相同的分布. 因此,理论上,我们可以用(0,1)上的均匀分布来得到任意分布的随机数 设随机变量Y的概率密度函数为f(y),则,我们可以按照下面的步骤来获得满足其分布的随机数: 1.根据给定的概率密度函数(PDF)f(y),通过积分算出概率分布函数F(y): 2.计算概率分布函数F(y)的反函数, 3.生成一个(0,1)上均匀分布的随机数变量X, 4.那么

目标跟踪学习笔记2

上次已经初步体验了下particle filter,直接用别人的代码,见我前面的博文http://www.cnblogs.com/tornadomeet/archive/2012/03/18/2404817.html 一开始是内存出错,后面干脆自己学了下particle filter滤波的原理,把代码认真看了一遍,然后自己从头敲了遍代码,虽然运行时不再出现内存溢出等bug,但是没有跟踪效果. 这次的代码和上次一样,有跟踪效果,不过不理想.依旧是参照博主:http://blog.csdn.net/

目标跟踪学习笔记1

首先提供几篇关于粒子滤波算法的博客:http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html 这篇博客比较通俗易懂,简单的介绍了粒子滤波的基本工作思想和步骤.http://www.cnblogs.com/lwbaptx/archive/2011/10/20/2218419.html这篇博客用的是opencv1.0,实现的功能是用粒子滤波跟踪鼠标轨迹,有视频演示,效果还不错.http://blog.csdn.net/yang

运动目标前景检测之ViBe源代码分析

一方面为了学习,一方面按照老师和项目的要求接触到了前景提取的相关知识,具体的方法有很多,帧差.背景减除(GMM.CodeBook. SOBS. SACON. VIBE. W4.多帧平均……).光流(稀疏光流.稠密光流).运动竞争(Motion Competition).运动模版(运动历史图像).时间熵……等等.更为具体的资料可以参考一下链接,作者做了很好的总结.点击打开链接http://blog.csdn.net/zouxy09/article/details/9622285 我只要针对作者提供