OpenCV 4.10.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 提出的 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 | 二维或 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 无法直接从具有非对角协方差矩阵的多维高斯分布中生成样本。为此,该方法从具有零均值和单位协方差矩阵的多维标准高斯分布中生成样本,然后使用 transform 对其进行变换,以从指定的高斯分布中获得样本。
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 |