OpenCV 4.13.0
開源計算機視覺庫 (Open Source Computer Vision)
正在載入...
正在搜尋...
未找到匹配項
光流演算法

詳細說明

稠密光流演算法計算每個點的運動

運動模板是檢測運動並計算其方向的另一種技術。參見 samples/motempl.py。

讀取和寫入“Middlebury”格式 .flo 檔案的函式,參見:http://vision.middlebury.edu/flow/code/flow-code/README.txt

類  cv::optflow::DenseRLOFOpticalFlow
 基於魯棒區域性光流 (RLOF) 演算法和稀疏到稠密插值方案的快速稠密光流計算。更多...
 
類  cv::optflow::DualTVL1OpticalFlow
 “Dual TV L1”光流演算法更多...
 
類  cv::optflow::GPCDetails
 
類  cv::optflow::GPCForest< T >
 
結構體  cv::optflow::GPCMatchingParams
 封裝匹配引數的類。更多...
 
結構體  cv::optflow::GPCPatchDescriptor
 
結構體  cv::optflow::GPCPatchSample
 
結構體  cv::optflow::GPCTrainingParams
 封裝訓練引數的類。更多...
 
類  cv::optflow::GPCTrainingSamples
 封裝訓練樣本的類。更多...
 
類  cv::optflow::GPCTree
 單棵樹的類。更多...
 
類  cv::optflow::OpticalFlowPCAFlow
 PCAFlow 演算法。更多...
 
類  cv::optflow::PCAPrior
 此類可用於對生成的光流施加學習過的先驗。解將根據該先驗進行正則化。您需要事先使用“learn_prior.py”指令碼生成適當的先驗檔案。更多...
 
類  cv::optflow::RLOFOpticalFlowParameter
 用於儲存和設定魯棒區域性光流 (RLOF) 演算法的引數。更多...
 
類  cv::optflow::SparseRLOFOpticalFlow
 用於計算稀疏光流並使用魯棒區域性光流 (RLOF) 演算法進行特徵跟蹤的類。更多...
 

型別定義 (Typedefs)

typedef std::vector< GPCPatchSamplecv::optflow::GPCSamplesVector
 

列舉

enum  cv::optflow::GPCDescType {
  cv::optflow::GPC_DESCRIPTOR_DCT = 0 ,
  cv::optflow::GPC_DESCRIPTOR_WHT
}
 全域性塊碰撞器 (Global Patch Collider) 的描述符型別。更多...
 
enum  cv::optflow::InterpolationType {
  cv::optflow::INTERP_GEO = 0 ,
  cv::optflow::INTERP_EPIC = 1 ,
  cv::optflow::INTERP_RIC = 2
}
 
enum  cv::optflow::SolverType {
  cv::optflow::ST_STANDART = 0 ,
  cv::optflow::ST_BILINEAR = 1
}
 
enum  cv::optflow::SupportRegionType {
  cv::optflow::SR_FIXED = 0 ,
  cv::optflow::SR_CROSS = 1
}
 

函式

double cv::motempl::calcGlobalOrientation (InputArray orientation, InputArray mask, InputArray mhi, double timestamp, double duration)
 計算選定區域中的全域性運動方向。
 
void cv::motempl::calcMotionGradient (InputArray mhi, OutputArray mask, OutputArray orientation, double delta1, double delta2, int apertureSize=3)
 計算運動歷史影像的梯度方向。
 
void cv::optflow::calcOpticalFlowDenseRLOF (InputArray I0, InputArray I1, InputOutputArray flow, Ptr< RLOFOpticalFlowParameter > rlofParam=Ptr< RLOFOpticalFlowParameter >(), float forwardBackwardThreshold=0, Size gridStep=Size(6, 6), InterpolationType interp_type=InterpolationType::INTERP_EPIC, int epicK=128, float epicSigma=0.05f, float epicLambda=100.f, int ricSPSize=15, int ricSLICType=100, bool use_post_proc=true, float fgsLambda=500.0f, float fgsSigma=1.5f, bool use_variational_refinement=false)
 基於魯棒區域性光流 (RLOF) 演算法和稀疏到稠密插值方案的快速稠密光流計算。
 
void cv::optflow::calcOpticalFlowSF (InputArray from, InputArray to, OutputArray flow, int layers, int averaging_block_size, int max_flow)
 
void cv::optflow::calcOpticalFlowSF (InputArray from, InputArray to, OutputArray flow, int layers, int averaging_block_size, int max_flow, double sigma_dist, double sigma_color, int postprocess_window, double sigma_dist_fix, double sigma_color_fix, double occ_thr, int upscale_averaging_radius, double upscale_sigma_dist, double upscale_sigma_color, double speed_up_thr)
 使用“SimpleFlow”演算法計算光流。
 
void cv::optflow::calcOpticalFlowSparseRLOF (InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Ptr< RLOFOpticalFlowParameter > rlofParam=Ptr< RLOFOpticalFlowParameter >(), float forwardBackwardThreshold=0)
 使用類似於 optflow::calcOpticalFlowPyrLK() 的魯棒區域性光流 (RLOF) 為稀疏特徵集計算快速光流。
 
void cv::optflow::calcOpticalFlowSparseToDense (InputArray from, InputArray to, OutputArray flow, int grid_step=8, int k=128, float sigma=0.05f, bool use_post_proc=true, float fgs_lambda=500.0f, float fgs_sigma=1.5f)
 基於 PyrLK 稀疏匹配插值的快速稠密光流。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_DeepFlow ()
 DeepFlow 光流演算法實現。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_DenseRLOF ()
 Dense RLOF 演算法的附加介面 - optflow::calcOpticalFlowDenseRLOF()
 
Ptr< DualTVL1OpticalFlowcv::optflow::createOptFlow_DualTVL1 ()
 建立 cv::DenseOpticalFlow 的例項。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_Farneback ()
 Farneback 演算法的附加介面 - calcOpticalFlowFarneback()
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_PCAFlow ()
 建立 PCAFlow 的例項。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_SimpleFlow ()
 SimpleFlow 演算法的附加介面 - calcOpticalFlowSF()
 
Ptr< SparseOpticalFlowcv::optflow::createOptFlow_SparseRLOF ()
 Sparse RLOF 演算法的附加介面 - optflow::calcOpticalFlowSparseRLOF()
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_SparseToDense ()
 SparseToDenseFlow 演算法的附加介面 - calcOpticalFlowSparseToDense()
 
void cv::optflow::GPCForest< T >::findCorrespondences (InputArray imgFrom, InputArray imgTo, std::vector< std::pair< Point2i, Point2i > > &corr, const GPCMatchingParams params=GPCMatchingParams()) const
 查詢兩幅影像之間的對應關係。
 
void cv::motempl::segmentMotion (InputArray mhi, OutputArray segmask, std::vector< Rect > &boundingRects, double timestamp, double segThresh)
 將運動歷史影像分割成幾個對應於獨立運動的部分(例如,左手,右手)。
 
void cv::motempl::updateMotionHistory (InputArray silhouette, InputOutputArray mhi, double timestamp, double duration)
 透過移動輪廓更新運動歷史影像。
 

型別定義文件 (Typedef Documentation)

◆ GPCSamplesVector

列舉型別文件 (Enumeration Type Documentation)

◆ GPCDescType

#include <opencv2/optflow/sparse_matching_gpc.hpp>

全域性塊碰撞器 (Global Patch Collider) 的描述符型別。

列舉值 (Enumerator)
GPC_DESCRIPTOR_DCT 
Python: cv.optflow.GPC_DESCRIPTOR_DCT

質量較好但速度慢。

GPC_DESCRIPTOR_WHT 
Python: cv.optflow.GPC_DESCRIPTOR_WHT

質量較差但速度快得多。

◆ InterpolationType

#include <opencv2/optflow/rlofflow.hpp>

列舉值 (Enumerator)
INTERP_GEO 
Python: cv.optflow.INTERP_GEO

快速測地線插值,參見 [105]

INTERP_EPIC 
Python: cv.optflow.INTERP_EPIC

使用 ximgproc::EdgeAwareInterpolator 的邊緣保留插值,參見 [231], Geistert2016。

INTERP_RIC 
Python: cv.optflow.INTERP_RIC

基於 SLIC 的魯棒插值,使用 ximgproc::RICInterpolator,參見 [134]

◆ SolverType

#include <opencv2/optflow/rlofflow.hpp>

列舉值 (Enumerator)
ST_STANDART 
Python: cv.optflow.ST_STANDART

應用標準迭代細化

ST_BILINEAR 
Python: cv.optflow.ST_BILINEAR

應用基於雙線性方程解的最佳化迭代細化,如 [245] 中所述

◆ SupportRegionType

#include <opencv2/optflow/rlofflow.hpp>

列舉值 (Enumerator)
SR_FIXED 
Python: cv.optflow.SR_FIXED

應用恆定支援區域

SR_CROSS 
Python: cv.optflow.SR_CROSS

應用透過基於交叉的分割獲得的自適應支援區域,如 [246] 中所述

函式文件 (Function Documentation)

◆ calcGlobalOrientation()

double cv::motempl::calcGlobalOrientation ( InputArray orientation (方向影像),
InputArray mask,
InputArray mhi (運動歷史影像),
double timestamp (時間戳),
double duration (持續時間) )
Python
cv.motempl.calcGlobalOrientation(orientation, mask, mhi, timestamp, duration) -> retval

#include <opencv2/optflow/motempl.hpp>

計算選定區域中的全域性運動方向。

引數
orientation (方向影像)由函式 calcMotionGradient 計算的運動梯度方向影像
mask掩碼影像。它可以是有效梯度掩碼(同樣由 calcMotionGradient 計算)與需要計算方向的區域掩碼的並集。
mhi (運動歷史影像)由 updateMotionHistory 計算的運動歷史影像。
timestamp (時間戳)傳遞給 updateMotionHistory 的時間戳。
duration (持續時間)傳遞給 updateMotionHistory 的運動軌跡的最大持續時間(毫秒)。

該函式計算選定區域中的平均運動方向,並返回 0 度到 360 度之間的角度。平均方向是從加權方向直方圖中計算出來的,其中最近的運動權重較大,過去發生的運動權重較小,如 mhi 中記錄的那樣。

◆ calcMotionGradient()

void cv::motempl::calcMotionGradient ( InputArray mhi (運動歷史影像),
OutputArray mask,
OutputArray orientation (方向影像),
double delta1,
double delta2,
int apertureSize = 3 )
Python
cv.motempl.calcMotionGradient(mhi, delta1, delta2[, mask[, orientation[, apertureSize]]]) -> mask (掩碼), orientation (方向)

#include <opencv2/optflow/motempl.hpp>

計算運動歷史影像的梯度方向。

引數
mhi (運動歷史影像)運動歷史單通道浮點影像。
mask輸出掩碼影像,型別為 CV_8UC1,大小與 mhi 相同。其非零元素標記了運動梯度資料正確的畫素。
orientation (方向影像)輸出運動梯度方向影像,型別和大小與 mhi 相同。影像的每個畫素都是 0 到 360 度的運動方向。
delta1畫素鄰域內允許的最小(或最大)mhi 值差異。
delta2畫素鄰域內允許的最大(或最小)mhi 值差異。也就是說,該函式在每個畫素的 \(3 \times 3\) 鄰域內找到最小 ( \(m(x,y)\) ) 和最大 ( \(M(x,y)\) ) mhi 值,並僅在滿足以下條件時才將 \((x, y)\) 處的運動方向標記為有效:

\[\min ( \texttt{delta1} , \texttt{delta2} ) \le M(x,y)-m(x,y) \le \max ( \texttt{delta1} , \texttt{delta2} ).\]

apertureSizeSobel 運算元的孔徑大小。

該函式計算每個畫素 \((x, y)\) 處的梯度方向為:

\[\texttt{orientation} (x,y)= \arctan{\frac{d\texttt{mhi}/dy}{d\texttt{mhi}/dx}}\]

實際上使用的是 fastAtan2 和 phase,因此計算出的角度以度為單位,覆蓋 0..360 的全範圍。此外,還填充了掩碼以指示計算出的角度有效的畫素。

注意
  • (Python) 有關如何執行運動模板技術的示例,可以在 opencv_source_code/samples/python2/motempl.py 中找到

◆ calcOpticalFlowDenseRLOF()

void cv::optflow::calcOpticalFlowDenseRLOF ( InputArray I0,
InputArray I1,
InputOutputArray flow,
Ptr< RLOFOpticalFlowParameter > rlofParam = PtrRLOFOpticalFlowParameter >(),
float forwardBackwardThreshold = 0,
Size gridStep = Size(6, 6),
InterpolationType (插值型別) interp_type = InterpolationType::INTERP_EPIC,
int epicK = 128,
float epicSigma = 0.05f,
float epicLambda = 100.f,
int ricSPSize = 15,
int ricSLICType = 100,
bool use_post_proc = true,
float fgsLambda = 500.0f,
float fgsSigma = 1.5f,
bool use_variational_refinement = false )
Python
cv.optflow.calcOpticalFlowDenseRLOF(I0, I1, flow[, rlofParam[, forwardBackwardThreshold[, gridStep[, interp_type[, epicK[, epicSigma[, epicLambda[, ricSPSize[, ricSLICType[, use_post_proc[, fgsLambda[, fgsSigma[, use_variational_refinement]]]]]]]]]]]]]) -> flow

#include <opencv2/optflow/rlofflow.hpp>

基於魯棒區域性光流 (RLOF) 演算法和稀疏到稠密插值方案的快速稠密光流計算。

RLOF 是一種快速區域性光流方法,在 [244] [245] [246][247] 中有描述,類似於 [38] 提出的金字塔迭代 Lucas-Kanade 方法。更多詳情和實驗可以在以下論文 [248] 中找到。該實現源自 optflow::calcOpticalFlowPyrLK()。

稀疏到稠密插值方案允許使用 RLOF 快速計算稠密光流(參見 [105])。對於此方案,應用以下步驟:

  1. 計算以規則取樣網格為種子的運動向量。該網格的稀疏度可以使用 setGridStep 進行配置。
  2. (可選)基於前後向置信度過濾錯誤的運動向量。可以使用 setForwardBackward 配置閾值。僅當閾值 > 0 時才應用過濾器,但由於需要估計後向流,執行時間將加倍。
  3. 將向量場插值應用於運動向量集以獲得稠密向量場。
引數
I0第一個 8 位輸入影像。如果使用基於交叉的 RLOF(透過選擇 optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS),影像必須是 8 位 3 通道影像。
I1第二個 8 位輸入影像。如果使用基於交叉的 RLOF(透過選擇 optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS),影像必須是 8 位 3 通道影像。
flow計算出的流影像,大小與 I0 相同,型別為 CV_32FC2。
rlofParam (RLOF 引數)參見 optflow::RLOFOpticalFlowParameter
forwardBackwardThreshold (前後向一致性閾值)前後向置信度檢查的閾值。對於每個網格點 \( \mathbf{x} \),計算一個運動向量 \( d_{I0,I1}(\mathbf{x}) \)。如果前後向誤差

\[ EP_{FB} = || d_{I0,I1} + d_{I1,I0} || \]

大於該函式給出的閾值,則隨後的向量場插值將不使用該運動向量。\( d_{I1,I0} \) 表示後向流。注意,僅當閾值 > 0 時才應用前後向測試。這可能導致運動估計的執行時間翻倍。
gridStep (網格步長)用於生成運動向量的網格大小。對於每個網格點,計算一個運動向量。由於前後向閾值(如果設定 > 0),某些運動向量將被移除。其餘向量將作為向量場插值的基礎。
interp_type (插值型別)用於計算稠密光流的插值方法。支援兩種插值演算法:
  • INTERP_GEO 應用快速測地線插值,參見 [105]
  • INTERP_EPIC_RESIDUAL 應用邊緣保留插值,參見 [231], Geistert2016。
epicK參見 ximgproc::EdgeAwareInterpolator 設定相應的引數。
epicSigma參見 ximgproc::EdgeAwareInterpolator 設定相應的引數。
epicLambda參見 ximgproc::EdgeAwareInterpolator 設定相應的引數。
ricSPSize參見 ximgproc::RICInterpolator 設定相應的引數。
ricSLICType參見 ximgproc::RICInterpolator 設定相應的引數。
use_post_proc (是否使用後處理)啟用 ximgproc::fastGlobalSmootherFilter() 引數。
fgsLambda設定相應的 ximgproc::fastGlobalSmootherFilter() 引數。
fgsSigma設定相應的 ximgproc::fastGlobalSmootherFilter() 引數。
use_variational_refinement (是否使用變分精細化)啟用 VariationalRefinement

引數已在 [244], [245], [246], [247] 中描述。有關 RLOF 配置的更多詳細資訊,請參見 optflow::RLOFOpticalFlowParameter

注意
如果網格大小設定為 (1,1) 且前後向閾值 <= 0,則稠密光流場純粹使用 RLOF 計算。
SIMD 並行化僅在編譯時使用 SSE4.1 時可用。
注意,在輸出中,如果在 I0I1 之間沒有找到對應關係,則 flow 設定為 0。
另請參閱
optflow::DenseRLOFOpticalFlow, optflow::RLOFOpticalFlowParameter

◆ calcOpticalFlowSF() [1/2]

void cv::optflow::calcOpticalFlowSF ( InputArray from,
InputArray to,
OutputArray flow,
int layers (層數),
int averaging_block_size (平均塊大小),
int max_flow (最大流) )
Python
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow[, flow]) -> flow
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow, sigma_dist, sigma_color, postprocess_window, sigma_dist_fix, sigma_color_fix, occ_thr, upscale_averaging_radius, upscale_sigma_dist, upscale_sigma_color, speed_up_thr[, flow]) -> flow

#include <opencv2/optflow.hpp>

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。

◆ calcOpticalFlowSF() [2/2]

void cv::optflow::calcOpticalFlowSF ( InputArray from,
InputArray to,
OutputArray flow,
int layers (層數),
int averaging_block_size (平均塊大小),
int max_flow (最大流),
double sigma_dist,
double sigma_color,
int postprocess_window,
double sigma_dist_fix,
double sigma_color_fix,
double occ_thr (遮擋閾值),
int upscale_averaging_radius (上取樣平均半徑),
double upscale_sigma_dist,
double upscale_sigma_color,
double speed_up_thr )
Python
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow[, flow]) -> flow
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow, sigma_dist, sigma_color, postprocess_window, sigma_dist_fix, sigma_color_fix, occ_thr, upscale_averaging_radius, upscale_sigma_dist, upscale_sigma_color, speed_up_thr[, flow]) -> flow

#include <opencv2/optflow.hpp>

使用“SimpleFlow”演算法計算光流。

引數
from第一個 8 位 3 通道影像。
to第二個 8 位 3 通道影像,大小與 prev 相同
flow計算出的流影像,大小與 prev 相同,型別為 CV_32FC2
layers (層數)層數
averaging_block_size (平均塊大小)計算畫素代價函式時求和的塊大小
max_flow (最大流)在每一層搜尋的最大流
sigma_dist向量平滑空間 sigma 引數
sigma_color向量平滑顏色 sigma 引數
postprocess_window後處理交叉雙邊濾波器的視窗大小
sigma_dist_fix後處理交叉雙邊濾波器的空間 sigma
sigma_color_fix後處理交叉雙邊濾波器的顏色 sigma
occ_thr (遮擋閾值)遮擋檢測閾值
upscale_averaging_radius (上取樣平均半徑)雙邊上取樣操作的視窗大小
upscale_sigma_dist雙邊上取樣操作的空間 sigma
upscale_sigma_color雙邊上取樣操作的顏色 sigma
speed_up_thr檢測具有不規則流的點的閾值 - 在上取樣後應重新計算流的位置

參見 [270]。以及專案網站 - http://graphics.berkeley.edu/papers/Tao-SAN-2012-05/

注意
  • 使用 simpleFlow 演算法的示例可以在 samples/simpleflow_demo.cpp 中找到

◆ calcOpticalFlowSparseRLOF()

void cv::optflow::calcOpticalFlowSparseRLOF ( InputArray prevImg,
InputArray nextImg,
InputArray prevPts,
InputOutputArray nextPts,
OutputArray status,
OutputArray err,
Ptr< RLOFOpticalFlowParameter > rlofParam = PtrRLOFOpticalFlowParameter >(),
float forwardBackwardThreshold = 0 )
Python
cv.optflow.calcOpticalFlowSparseRLOF(prevImg, nextImg, prevPts, nextPts[, status[, err[, rlofParam[, forwardBackwardThreshold]]]]) -> nextPts, status, err

#include <opencv2/optflow/rlofflow.hpp>

使用類似於 optflow::calcOpticalFlowPyrLK() 的魯棒區域性光流 (RLOF) 為稀疏特徵集計算快速光流。

RLOF 是一種快速區域性光流方法,在 [244] [245] [246][247] 中有描述,類似於 [38] 提出的金字塔迭代 Lucas-Kanade 方法。更多詳情和實驗可以在以下論文 [248] 中找到。該實現源自 optflow::calcOpticalFlowPyrLK()。

引數
prevImg第一個 8 位輸入影像。如果使用基於交叉的 RLOF(透過選擇 optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS),影像必須是 8 位 3 通道影像。
nextImg第二個 8 位輸入影像。如果使用基於交叉的 RLOF(透過選擇 optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS),影像必須是 8 位 3 通道影像。
prevPts需要尋找光流的二維點向量;點座標必須是單精度浮點數。
nextPts2D 點的輸出向量(單精度浮點座標),包含在第二幅影像中計算出的輸入特徵的新位置;當 optflow::RLOFOpticalFlowParameter::useInitialFlow 變數為 true 時,該向量的大小必須與輸入相同,幷包含初始化的點對應關係。
status輸出狀態向量(無符號字元);如果相應特徵的流已透過前後向檢查,則向量的每個元素都設定為 1。
err輸出誤差向量;向量的每個元素都設定為相應特徵的前後向誤差。
rlofParam (RLOF 引數)參見 optflow::RLOFOpticalFlowParameter
forwardBackwardThreshold (前後向一致性閾值)前後向置信度檢查的閾值。如果 forewardBackwardThreshold <= 0,則不執行前向檢查。
注意
SIMD 並行化僅在編譯時使用 SSE4.1 時可用。

引數已在 [244], [245], [246][247] 中描述。有關 RLOF 配置的更多詳細資訊,請參見 optflow::RLOFOpticalFlowParameter

◆ calcOpticalFlowSparseToDense()

void cv::optflow::calcOpticalFlowSparseToDense ( InputArray from,
InputArray to,
OutputArray flow,
int grid_step = 8,
int k = 128,
float sigma = 0.05f,
bool use_post_proc = true,
float fgs_lambda = 500.0f,
float fgs_sigma = 1.5f )
Python
cv.optflow.calcOpticalFlowSparseToDense(from_, to[, flow[, grid_step[, k[, sigma[, use_post_proc[, fgs_lambda[, fgs_sigma]]]]]]]) -> flow

#include <opencv2/optflow.hpp>

基於 PyrLK 稀疏匹配插值的快速稠密光流。

引數
from第一個 8 位 3 通道或 1 通道影像。
to第二個 8 位 3 通道或 1 通道影像,大小與 from 相同
flow計算出的流影像,大小與 from 相同,型別為 CV_32FC2
grid_step (網格步長)稀疏匹配計算中使用的跨度。較低的值通常會提高質量,但會減慢演算法速度。
k擬合局部仿射模型時考慮的最近鄰匹配數。較低的值可以顯著加快演算法速度,但會犧牲一定的質量。
sigma定義區域性加權仿射擬閤中權重下降速度的引數。較高的值有助於保留精細細節,較低的值有助於消除輸出流中的噪聲。
use_post_proc (是否使用後處理)定義插值後是否使用 ximgproc::fastGlobalSmootherFilter() 進行後處理
fgs_lambda參見 ximgproc::fastGlobalSmootherFilter() 的相應引數
fgs_sigma參見 ximgproc::fastGlobalSmootherFilter() 的相應引數

◆ createOptFlow_DeepFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_DeepFlow ( )
Python
cv.optflow.createOptFlow_DeepFlow() -> retval

#include <opencv2/optflow.hpp>

DeepFlow 光流演算法實現。

該類實現了 [301] 中描述的 DeepFlow 光流演算法。另見 http://lear.inrialpes.fr/src/deepmatching/。在建立類例項後可以修改的引數(類欄位):

  • 成員 float alpha:平滑度假設權重
  • 成員 float delta:顏色恆定性假設權重
  • 成員 float gamma:梯度恆定性權重
  • 成員 float sigma:高斯平滑引數
  • 成員 int minSize:金字塔中影像的最小尺寸(金字塔中的下一個較小影像將持續生成,直到其中一個維度達到該尺寸)
  • 成員 float downscaleFactor:影像金字塔中的縮放因子(必須 < 1)
  • 成員 int fixedPointIterations:在金字塔每一層迭代多少次
  • 成員 int sorIterations:逐次超鬆弛迭代次數(求解器)
  • 成員 float omega:SOR 中的鬆弛因子

◆ createOptFlow_DenseRLOF()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_DenseRLOF ( )
Python
cv.optflow.createOptFlow_DenseRLOF() -> retval

#include <opencv2/optflow/rlofflow.hpp>

Dense RLOF 演算法的附加介面 - optflow::calcOpticalFlowDenseRLOF()

◆ createOptFlow_DualTVL1()

Ptr< DualTVL1OpticalFlow > cv::optflow::createOptFlow_DualTVL1 ( )
Python
cv.optflow.createOptFlow_DualTVL1() -> retval

#include <opencv2/optflow.hpp>

建立 cv::DenseOpticalFlow 的例項。

◆ createOptFlow_Farneback()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_Farneback ( )
Python
cv.optflow.createOptFlow_Farneback() -> retval

#include <opencv2/optflow.hpp>

Farneback 演算法的附加介面 - calcOpticalFlowFarneback()

◆ createOptFlow_PCAFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_PCAFlow ( )
Python
cv.optflow.createOptFlow_PCAFlow() -> retval

#include <opencv2/optflow/pcaflow.hpp>

建立 PCAFlow 的例項。

◆ createOptFlow_SimpleFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_SimpleFlow ( )
Python
cv.optflow.createOptFlow_SimpleFlow() -> retval

#include <opencv2/optflow.hpp>

SimpleFlow 演算法的附加介面 - calcOpticalFlowSF()

◆ createOptFlow_SparseRLOF()

Ptr< SparseOpticalFlow > cv::optflow::createOptFlow_SparseRLOF ( )
Python
cv.optflow.createOptFlow_SparseRLOF() -> retval

#include <opencv2/optflow/rlofflow.hpp>

Sparse RLOF 演算法的附加介面 - optflow::calcOpticalFlowSparseRLOF()

◆ createOptFlow_SparseToDense()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_SparseToDense ( )
Python
cv.optflow.createOptFlow_SparseToDense() -> retval

#include <opencv2/optflow.hpp>

SparseToDenseFlow 演算法的附加介面 - calcOpticalFlowSparseToDense()

◆ findCorrespondences()

template<int T>
void cv::optflow::GPCForest< T >::findCorrespondences ( InputArray imgFrom (來源影像),
InputArray imgTo (目標影像),
std::vector< std::pair< Point2i, Point2i > > & corr (對應點),
const GPCMatchingParams params = GPCMatchingParams() ) const

#include <opencv2/optflow/sparse_matching_gpc.hpp>

查詢兩幅影像之間的對應關係。

引數
[in]imgFrom (來源影像)序列中的第一幅影像。
[in]imgTo (目標影像)序列中的第二幅影像。
[out]corr (對應點)包含對應點對的輸出向量。
[in]params用於微調的附加匹配引數。
此函式的呼叫圖

◆ segmentMotion()

void cv::motempl::segmentMotion ( InputArray mhi (運動歷史影像),
OutputArray segmask (分割掩碼),
std::vector< Rect > & boundingRects (邊界矩形),
double timestamp (時間戳),
double segThresh (分割閾值) )
Python
cv.motempl.segmentMotion(mhi, timestamp, segThresh[, segmask]) -> segmask, boundingRects

#include <opencv2/optflow/motempl.hpp>

將運動歷史影像分割成幾個對應於獨立運動的部分(例如,左手,右手)。

引數
mhi (運動歷史影像)運動歷史影像。
segmask (分割掩碼)應儲存找到的掩碼的影像,單通道,32 位浮點型。
boundingRects (邊界矩形)包含運動連通元件 ROI 的向量。
timestamp (時間戳)當前時間(毫秒或其他單位)。
segThresh (分割閾值)建議等於運動歷史“步長”之間的間隔或更大的分割閾值。

該函式找到所有的運動段,並用個別值 (1,2,...) 在 segmask 中標記它們。它還計算包含運動連通元件 ROI 的向量。之後,可以使用 calcGlobalOrientation 並配合提取出的特定元件掩碼來計算每個元件的運動方向。

◆ updateMotionHistory()

void cv::motempl::updateMotionHistory ( InputArray silhouette (輪廓圖),
InputOutputArray mhi (運動歷史影像),
double timestamp (時間戳),
double duration (持續時間) )
Python
cv.motempl.updateMotionHistory(silhouette, mhi, timestamp, duration) -> mhi (運動歷史影像)

#include <opencv2/optflow/motempl.hpp>

透過移動輪廓更新運動歷史影像。

引數
silhouette (輪廓圖)輪廓掩碼,在發生運動的位置具有非零畫素。
mhi (運動歷史影像)由函式更新的運動歷史影像(單通道,32 位浮點型)。
timestamp (時間戳)當前時間(毫秒或其他單位)。
duration (持續時間)運動軌跡的最大持續時間,單位與 timestamp 相同。

該函式按如下方式更新運動歷史影像:

\[\texttt{mhi} (x,y)= \forkthree{\texttt{timestamp}}{如果 \(\texttt{silhouette}(x,y) \ne 0\)}{0}{如果 \(\texttt{silhouette}(x,y) = 0\) 且 \(\texttt{mhi} < (\texttt{timestamp} - \texttt{duration})\)}{\texttt{mhi}(x,y)}{否則}\]

也就是說,發生運動的 MHI 畫素被設定為當前時間戳 timestamp,而很久以前最後一次發生運動的畫素則被清除。

該函式與 calcMotionGradient 和 calcGlobalOrientation 一起,實現了 [69][40] 中描述的運動模板技術。