OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

乱数生成器。続き...

#include <opencv2/core.hpp>

Collaboration diagram for cv::RNG:

公開型

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 )。

samples/cpp/convexhull.cpp, samples/cpp/falsecolor.cpp, samples/cpp/image_alignment.cpp, samples/cpp/kmeans.cpp, samples/cpp/minarea.cpp, samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp, および samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp

列挙型メンバ詳解

◆ anonymous enum

anonymous enum
列挙値
UNIFORM 
NORMAL 

構築子と解体子の詳解

◆ RNG() [1/2]

cv::RNG::RNG ( )

コンストラクタ

これらは RNG のコンストラクタである。第1の形式は状態を事前定義された値に設定し、現在の実装ではこれは 2**32-1 に等しい。第2の形式は状態を指定した値に設定する。state=0 を渡した場合、すべてが0からなる特異な乱数列を避けるため、コンストラクタは上記のデフォルト値を代わりに使用する。

◆ RNG() [2/2]

cv::RNG::RNG ( uint64 state)

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
stateRNG を初期化するために使用される64ビット値。

メンバ関数詳解

◆ fill()

void cv::RNG::fill ( InputOutputArray mat,
int distType,
InputArray a,
InputArray b,
bool saturateRange = false )

配列を乱数で埋める。

引数
mat2次元または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 を使ってそれらを変換し、指定されたガウス分布からのサンプルを得る。

samples/cpp/kmeans.cpp.

◆ gaussian()

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

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

引数
sigma分布の標準偏差。

このメソッドはMWCアルゴリズムを使って状態を変換し、ガウス分布 N(0,sigma) からの次の乱数を返す。すなわち、返される乱数の平均値は0であり、標準偏差は指定された sigma である。

◆ next()

unsigned cv::RNG::next ( )

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

◆ operator double()

cv::RNG::operator double ( )

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ operator float()

cv::RNG::operator float ( )

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ 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アルゴリズムを用いて状態を変換し、次の乱数を返す。第1の形式は RNG::next と等価である。第2の形式は乱数を N で割った余りを返すため、結果は [0, N) の範囲に収まる。

◆ operator()() [2/2]

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

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
N返される乱数の上限(これを含まない)。

◆ operator==()

bool cv::RNG::operator== ( const RNG & other) const

◆ 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);
Random Number Generator.
Definition core.hpp:2882
int uniform(int a, int b)
returns uniformly distributed integer random number from [a,b) range

コンパイラは RNG::uniform の結果を代入する変数の型を考慮しない。コンパイラにとって重要なのは a と b の引数の型だけである。したがって、浮動小数点の乱数が欲しいのに範囲の境界値が整数である場合は、それらが定数であれば末尾にドットを付けるか、上記の a1 の初期化のように明示的な型キャスト演算子を使用すること。

引数
a返される乱数の下限(これを含む)。
b返される乱数の上限(これを含まない)。
samples/cpp/convexhull.cpp, samples/cpp/falsecolor.cpp, samples/cpp/kmeans.cpp, samples/cpp/minarea.cpp, samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp, および samples/cpp/watershed.cpp

メンバ変数詳解

◆ state

uint64 cv::RNG::state

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