![]() |
OpenCV 4.12.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 | 状态 |
随机数生成器。
随机数生成器。它封装了状态(目前是一个 64 位整数),并具有返回标量随机值和用随机值填充数组的方法。目前它支持均匀分布和高斯(正态)分布。该生成器使用 G. Marsaglia 提出的 Multiply-With-Carry 算法 (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 | 2D 或 N 维矩阵;目前方法不支持具有超过 4 个通道的矩阵,请使用 Mat::reshape 作为可能的解决方法。 |
| distType | 分布类型,RNG::UNIFORM 或 RNG::NORMAL。 |
| a | 第一个分布参数;在均匀分布的情况下,这是一个包含的下边界,在正态分布的情况下,这是一个平均值。 |
| b | 第二个分布参数;在均匀分布的情况下,这是一个非包含的上边界,在正态分布的情况下,这是一个标准差(标准差矩阵的对角线或完整的标准差矩阵)。 |
| saturateRange | 预饱和标志;仅适用于均匀分布;如果为 true,则该方法将首先将 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 |