![]() |
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 引入的乘法進位演算法(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 |