OpenCV 4.5.3(日本語機械翻訳)
公開型 | 公開メンバ関数 | 公開変数類 | 全メンバ一覧

Random Number Generator [詳解]

#include <core.hpp>

公開型

enum { UNIFORM = 0 , NORMAL = 1 }

公開メンバ関数

RNG ()
コンストラクタ[【詳解】(英語]
RNG (uint64 state)
unsigned next ()
operator uchar ()
operator schar ()
operator ushort ()
operator short ()
operator unsigned ()
operator int ()
operator float ()
operator double ()
unsigned operator() ()
は,[0, N)から一様にサンプリングされたランダムな整数を返します。[【詳解】(英語]
unsigned operator() (unsigned N)
int uniform (int a, int b)
は,[a,b] の範囲から一様に分布する整数の乱数を返します.[【詳解】(英語]
float uniform (float a, float b)
double uniform (double a, double b)
void fill (InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false)
配列を乱数で埋めます。[【詳解】(英語]
double gaussian (double sigma)
ガウス分布からサンプリングされた次の乱数を返します。[【詳解】(英語]
bool operator== (const RNG &other) const

公開変数類

uint64 state

詳解

乱数ジェネレータ

乱数発生器です。これは,状態(現在は 64 ビットの整数)をカプセル化し,スカラーの乱数値を返したり,乱数値で配列を埋めたりするメソッドを備えています.現在は,一様分布とガウス分布(正規分布)をサポートしています.このジェネレータは,G. Marsaglia (http://en.wikipedia.org/wiki/Multiply-with-carry). ガウス分布の乱数は,Ziggurat アルゴリズムを用いて生成されます (http://en.wikipedia.org/wiki/Ziggurat_algorithm)を使用しています。

構築子と解体子

RNG() [1/2]

cv::RNG::RNG ( )

コンストラクタ

これらはRNGコンストラクタです。最初の形式では,あらかじめ定義された値(現在の実装では2**32-1に等しい値)を状態に設定します。2番目の形式では,状態を指定された値に設定します。state=0 を指定した場合は,すべてがゼロで構成される特異な乱数列を避けるために,コンストラクタは上記のデフォルト値を使用します。

RNG() [2/2]

cv::RNG::RNG ( uint64 state )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

引数
state の初期化に使われる 64 ビットの値です。RNG.

関数詳解

fill()

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 SaturateRange=false の場合,このメソッドは元の範囲 [a, b] に一様に分布する乱数を生成した後,それらを飽和させます. theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX)というのも,範囲 (0, 255) は [-DBL_MAX, DBL_MAX] よりもかなり小さいからです.

それぞれのメソッドは,指定された分布からのランダムな値で行列を埋めます.新しい数値が生成されると,それに応じてRNG状態が適宜更新されます.マルチチャンネル画像の場合,各チャンネルは独立して埋められますが,これはRNGは,非対角共分散行列を持つ多次元ガウス分布から直接サンプルを生成することはできません.そのため,このメソッドでは,平均が0で共分散行列が1である多次元標準ガウス分布からサンプルを生成し,それを transform で変換することで,指定したガウス分布からサンプルを得ます.

gaussian()

double cv::RNG::gaussian ( double sigma )

ガウス分布からサンプリングされた次の乱数を返します。

引数
sigma 分布の標準偏差です。

このメソッドは,MWCアルゴリズムを使って状態を変換し,ガウス分布N(0,sigma)から次の乱数を返します.つまり,返された乱数の平均値はゼロ,標準偏差は指定されたシグマとなります.

next()

unsigned cv::RNG::next ( )

このメソッドは,MWC アルゴリズムを使用して状態を更新し,次の 32 ビット乱数を返します.

operator double()

cv::RNG::operator double ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator float()

cv::RNG::operator float ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator int()

cv::RNG::operator int ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator schar()

cv::RNG::operator schar ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator short()

cv::RNG::operator short ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator uchar()

cv::RNG::operator uchar ( )

各メソッドは,MWC アルゴリズムを使用して状態を更新し,指定された型の次の乱数を返します。整数型の場合は,指定された型で利用可能な値の範囲内の数値が返されます。浮動小数点型の場合,返される値は [0,1] の範囲です。

operator unsigned()

cv::RNG::operator unsigned ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator ushort()

cv::RNG::operator ushort ( )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

operator()() [1/2]

unsigned cv::RNG::operator() ( )

は,[0, N)から一様にサンプリングされたランダムな整数を返します。

これらのメソッドは,MWCアルゴリズムを用いて状態を変換し,次の乱数を返します。最初の形式は以下と同等ですRNG::next. 第2の形式は,乱数をモジュロNで返すので,結果が[0, N)の範囲にあることを意味します.

operator()() [2/2]

unsigned cv::RNG::operator() ( unsigned N )

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

引数
N 返される乱数の上側の非包含境界。

uniform() [1/3]

double cv::RNG::uniform ( double a,
double b
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

uniform() [2/3]

float cv::RNG::uniform ( float a,
float b
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

uniform() [3/3]

int cv::RNG::uniform ( int a,
int b
)

は,[a,b] の範囲から一様に分布する整数の乱数を返します.

これらのメソッドは,MWC アルゴリズムを用いて状態を変換し,入力パラメータの型から推測される,指定された型の次の一様分布乱数を [a, b) の範囲から返します.次のサンプルで示されるニュアンスがあります.

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)
float 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()
constructor

の結果を代入する変数の型は,コンパイラでは考慮されません.RNG::uniform. コンパイラにとって重要なのは,a と b のパラメータの型だけです.したがって,浮動小数点数の乱数が欲しいが,範囲の境界が整数である場合は,定数であれば最後にドットを付けるか,上の a1 の初期化のように明示的な型キャスト演算子を使用します.

引数
a 返される乱数の下限値を指定します。
b 返される乱数の上側の非包含境界。

このクラス詳解は次のファイルから抽出されました: