![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
乱数生成器。続き...
#include <opencv2/core.hpp>
公開型 | |
| enum | { 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 のコンストラクタである。第1の形式は状態を事前定義された値に設定し、現在の実装ではこれは 2**32-1 に等しい。第2の形式は状態を指定した値に設定する。state=0 を渡した場合、すべてが0からなる特異な乱数列を避けるため、コンストラクタは上記のデフォルト値を代わりに使用する。
| cv::RNG::RNG | ( | uint64 | state | ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| state | RNG を初期化するために使用される64ビット値。 |
| void cv::RNG::fill | ( | InputOutputArray | mat, |
| int | distType, | ||
| InputArray | a, | ||
| InputArray | b, | ||
| bool | saturateRange = false ) |
配列を乱数で埋める。
| mat | 2次元またはN次元の行列。現在、4チャンネルを超える行列はこれらのメソッドではサポートされていないため、回避策として Mat::reshape を使用するとよい。 |
| distType | 分布の種類、RNG::UNIFORM または RNG::NORMAL。 |
| a | 第1の分布パラメータ。一様分布の場合はこれを含む下限、正規分布の場合は平均値である。 |
| b | 第2の分布パラメータ。一様分布の場合はこれを含まない上限、正規分布の場合は標準偏差(標準偏差行列の対角成分、または完全な標準偏差行列)である。 |
| 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) の範囲が [-DBL_MAX, DBL_MAX) よりはるかに小さいため、ほとんど0と255で埋め尽くされた配列を生成する可能性が高いことを意味する。 |
各メソッドは、指定された分布から得たランダム値で行列を埋める。新しい数が生成されるにつれて、RNG の状態がそれに応じて更新される。マルチチャンネル画像の場合、各チャンネルは独立して埋められる。これは RNG が非対角の共分散行列をもつ多次元ガウス分布から直接サンプルを生成できないことを意味する。それを行うには、メソッドはまず平均0かつ単位共分散行列をもつ多次元標準ガウス分布からサンプルを生成し、その後 transform を使ってそれらを変換し、指定されたガウス分布からのサンプルを得る。
| double cv::RNG::gaussian | ( | double | sigma | ) |
ガウス分布からサンプリングした次の乱数を返す。
| sigma | 分布の標準偏差。 |
このメソッドはMWCアルゴリズムを使って状態を変換し、ガウス分布 N(0,sigma) からの次の乱数を返す。すなわち、返される乱数の平均値は0であり、標準偏差は指定された 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アルゴリズムを用いて状態を変換し、次の乱数を返す。第1の形式は RNG::next と等価である。第2の形式は乱数を 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 |