![]() |
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 |