OpenCV 4.11.0
开源计算机视觉
|
随机数生成器。 更多…
#include <opencv2/core.hpp>
公共类型 | |
枚举 | { UNIFORM = 0 , NORMAL = 1 } |
公共成员函数 | |
RNG () | |
构造函数 | |
RNG (uint64 state) | |
void | fill (InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false) |
用随机数填充数组。 | |
double | gaussian (double sigma) |
返回从高斯分布采样的下一个随机数。 | |
unsigned | next () |
operator double () | |
operator float () | |
operator schar () | |
operator short () | |
operator uchar () | |
operator unsigned () | |
operator ushort () | |
unsigned | operator() () |
返回从[0, N)均匀采样的随机整数。 | |
unsigned | operator() (unsigned N) |
bool | operator== (const RNG &other) const |
double | uniform (double a, double b) |
float | uniform (float a, float b) |
int | uniform (int a, int b) |
返回[a,b)范围内均匀分布的随机整数 | |
公共属性 | |
uint64 | state |
随机数生成器。
随机数生成器。它封装了状态(当前是一个 64 位整数),并具有返回标量随机值和用随机值填充数组的方法。目前它支持均匀分布和高斯(正态)分布。该生成器使用 G. Marsaglia 引入的乘法递增算法(http://en.wikipedia.org/wiki/Multiply-with-carry)。高斯分布随机数使用 G. Marsaglia 和 W. W. Tsang 引入的 Ziggurat 算法生成(http://en.wikipedia.org/wiki/Ziggurat_algorithm)。
cv::RNG::RNG | ( | ) |
构造函数
这些是RNG构造函数。第一种形式将状态设置为某个预定义值,在当前实现中等于 2**32-1。第二种形式将状态设置为指定值。如果您传入 state=0,构造函数将改为使用上述默认值,以避免由全零组成的奇异随机数序列。
void cv::RNG::fill | ( | InputOutputArray | mat, |
int | distType, | ||
InputArray | a, | ||
InputArray | b, | ||
bool | saturateRange = false ) |
用随机数填充数组。
mat | 二维或 N 维矩阵;目前该方法不支持超过 4 个通道的矩阵,可以使用Mat::reshape作为可能的解决方法。 |
distType | 分布类型,RNG::UNIFORM 或 RNG::NORMAL。 |
a | 第一个分布参数;对于均匀分布,这是一个包含的下界,对于正态分布,这是一个均值。 |
b | 第二个分布参数;对于均匀分布,这是一个不包含的上界,对于正态分布,这是一个标准差(标准差矩阵的对角线或完整的标准差矩阵)。 |
saturateRange | 预饱和标志;仅用于均匀分布;如果为真,则该方法将首先将 a 和 b 转换为可接受的值范围(根据 mat 数据类型),然后将在范围 [saturate(a), saturate(b)) 内生成均匀分布的随机数,如果 saturateRange=false,则该方法将在原始范围 [a, b) 内生成均匀分布的随机数,然后对其进行饱和,这意味着,例如,theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX) 可能会产生大部分填充了 0 和 255 的数组,因为范围 (0, 255) 明显小于 [-DBL_MAX, DBL_MAX)。 |
每种方法都用指定分布的随机值填充矩阵。随着新数字的生成,RNG状态也会相应更新。对于多通道图像,每个通道都是独立填充的,这意味着RNG无法直接从具有非对角协方差矩阵的多维高斯分布生成样本。为此,该方法从均值为零且协方差矩阵为单位矩阵的多维标准高斯分布生成样本,然后使用变换将它们转换为指定高斯分布的样本。
double cv::RNG::gaussian | ( | double | sigma | ) |
返回从高斯分布采样的下一个随机数。
sigma | 分布的标准差。 |
该方法使用MWC算法变换状态,并返回来自高斯分布N(0,sigma) 的下一个随机数。也就是说,返回的随机数的均值为零,标准差为指定的sigma。
unsigned cv::RNG::next | ( | ) |
该方法使用MWC算法更新状态,并返回下一个32位随机数。
cv::RNG::operator double | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
cv::RNG::operator float | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
cv::RNG::operator schar | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
cv::RNG::operator short | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
cv::RNG::operator uchar | ( | ) |
每种方法都使用MWC算法更新状态,并返回指定类型的下一个随机数。对于整数类型,返回的数字来自指定类型的可用值范围。对于浮点类型,返回值来自[0,1)范围。
cv::RNG::operator unsigned | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
cv::RNG::operator ushort | ( | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
unsigned cv::RNG::operator() | ( | ) |
返回从[0, N)均匀采样的随机整数。
这些方法使用MWC算法转换状态并返回下一个随机数。第一种形式等效于RNG::next。第二种形式返回随机数模N,这意味着结果在[0, N)范围内。
unsigned cv::RNG::operator() | ( | unsigned | N | ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
N | 返回随机数的非包含上限。 |
bool cv::RNG::operator== | ( | const RNG & | other | ) | const |
double cv::RNG::uniform | ( | double | a, |
double | b ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
float cv::RNG::uniform | ( | float | a, |
float | b ) |
这是一个重载的成员函数,为了方便提供。它与上面的函数的不同之处仅在于它接受的参数。
int cv::RNG::uniform | ( | int | a, |
int | b ) |
返回[a,b)范围内均匀分布的随机整数
这些方法使用MWC算法转换状态,并返回从输入参数类型推断出的指定类型的下一个均匀分布的随机数,范围为[a, b)。以下示例说明了一个细微之处
编译器不会考虑您将RNG::uniform结果赋值到的变量的类型。对编译器来说唯一重要的是a和b参数的类型。因此,如果您想要一个浮点随机数,但范围边界是整数,则在它们是常量的情况下在末尾加上点,或者使用显式类型转换运算符,如上面的a1初始化所示。
a | 返回随机数的包含下限。 |
b | 返回随机数的非包含上限。 |
uint64 cv::RNG::state |