OpenCV 4.13.0
開源電腦視覺 (Open Source Computer Vision)
載入中...
搜尋中...
無符合項
光流演算法

詳細描述

稠密光流 (Dense optical flow) 演算法會計算每個點的運動

運動模板 (Motion templates) 是檢測運動並計算其方向的替代技術。請參閱 samples/motempl.py。

讀取和寫入 "Middlebury" 格式 .flo 文件的函數,請參閱:http://vision.middlebury.edu/flow/code/flow-code/README.txt

類別

class  cv::optflow::DenseRLOFOpticalFlow
 基於穩健局部光流 (RLOF) 演算法和稀疏到稠密插值方案的快速稠密光流計算。更多...
 
class  cv::optflow::DualTVL1OpticalFlow
 "Dual TV L1" 光流演算法更多...
 
class  cv::optflow::GPCDetails
 
class  cv::optflow::GPCForest< T >
 
struct  cv::optflow::GPCMatchingParams
 封裝匹配參數的類別。更多...
 
struct  cv::optflow::GPCPatchDescriptor
 
struct  cv::optflow::GPCPatchSample
 
struct  cv::optflow::GPCTrainingParams
 封裝訓練參數的類別。更多...
 
class  cv::optflow::GPCTrainingSamples
 封裝訓練樣本的類別。更多...
 
class  cv::optflow::GPCTree
 單棵樹的類別。更多...
 
class  cv::optflow::OpticalFlowPCAFlow
 PCAFlow 演算法。更多...
 
class  cv::optflow::PCAPrior
 此類別可用於對產生的光流施加學習過的先驗。解將根據此先驗進行正則化。您需要事先使用 "learn_prior.py" 腳本生成適當的先驗文件。更多...
 
class  cv::optflow::RLOFOpticalFlowParameter
 用於儲存和設置穩健局部光流 (RLOF) 演算法參數。更多...
 
class  cv::optflow::SparseRLOFOpticalFlow
 用於透過穩健局部光流 (RLOF) 演算法計算稀疏光流和特徵跟蹤的類別。更多...
 

型別定義

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

列舉

列舉  cv::optflow::GPCDescType {
  cv::optflow::GPC_DESCRIPTOR_DCT = 0 ,
  cv::optflow::GPC_DESCRIPTOR_WHT
}
 Global Patch Collider 的描述符類型。更多...
 
列舉  cv::optflow::InterpolationType {
  cv::optflow::INTERP_GEO = 0 ,
  cv::optflow::INTERP_EPIC = 1 ,
  cv::optflow::INTERP_RIC = 2
}
 
列舉  cv::optflow::SolverType {
  cv::optflow::ST_STANDART = 0 ,
  cv::optflow::ST_BILINEAR = 1
}
 
列舉  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)
 使用穩健局部光流 (RLOF) 為稀疏特徵集計算快速光流,類似於 optflow::calcOpticalFlowPyrLK()。
 
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)
 透過移動輪廓更新運動歷史圖像。
 

類型定義說明文件

◆ GPCSamplesVector

列舉類型文件

◆ GPCDescType

#include <opencv2/optflow/sparse_matching_gpc.hpp>

Global Patch Collider 的描述符類型。

列舉值
GPC_DESCRIPTOR_DCT 
Python: cv.optflow.GPC_DESCRIPTOR_DCT

品質較好但速度較慢。

GPC_DESCRIPTOR_WHT 
Python: cv.optflow.GPC_DESCRIPTOR_WHT

品質較差但速度快得多。

◆ InterpolationType

#include <opencv2/optflow/rlofflow.hpp>

列舉值
INTERP_GEO 
Python: cv.optflow.INTERP_GEO

快速測地插值 (Fast geodesic interpolation),見 [105]

INTERP_EPIC 
Python: cv.optflow.INTERP_EPIC

使用 ximgproc::EdgeAwareInterpolator 的邊緣保持插值 (Edge-preserving interpolation),見 [231], Geistert2016。

INTERP_RIC 
Python: cv.optflow.INTERP_RIC

使用 ximgproc::RICInterpolator 的基於 SLIC 的穩健插值,見 [134]

◆ SolverType

#include <opencv2/optflow/rlofflow.hpp>

列舉值
ST_STANDART 
Python: cv.optflow.ST_STANDART

應用標準迭代精煉 (iterative refinement)

ST_BILINEAR 
Python: cv.optflow.ST_BILINEAR

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

◆ SupportRegionType

#include <opencv2/optflow/rlofflow.hpp>

列舉值
SR_FIXED 
Python: cv.optflow.SR_FIXED

應用固定支持區域

SR_CROSS 
Python: cv.optflow.SR_CROSS

應用透過基於交叉分割 (cross-based segmentation) 獲得的適應性支持區域,如 [246] 中所述

函式文件

◆ 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 算子的孔徑大小 (aperture size)。

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

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

事實上,使用了 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參見 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第二張與 prev 大小相同的 8 位元 3 通道圖像。
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>

使用穩健局部光流 (RLOF) 為稀疏特徵集計算快速光流,類似於 optflow::calcOpticalFlowPyrLK()。

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 (前一幀點集)需要尋找光流的 2D 點向量;點座標必須是單精度浮點數。
nextPts (後一幀點集)輸出 2D 點向量(具有單精度浮點座標),包含第二張圖像中輸入特徵計算出的新位置;當 optflow::RLOFOpticalFlowParameter::useInitialFlow 變數為 true 時,向量必須具有與輸入相同的大小,並包含初始化點對應關係。
status (狀態)輸出狀態向量(無符號字元);如果相應特徵的光流已通過前後向檢查,則將向量的每個元素設置為 1。
err誤差輸出向量;向量的每個元素都設置為相應特徵的前後向誤差。
rlofParam參見 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 通道或單通道圖像。
to第二張與 from 大小相同的 8 位元 3 通道或單通道圖像。
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:逐次超鬆弛 (SOR) 的迭代次數 (solver)
  • 成員 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 (分割閾值)建議等於或大於運動歷史 "步驟" 之間間隔的分割閾值。

該函數尋找所有運動分段,並在 segmask 中以各別值 (1,2,...) 標記它們。它還計算一個包含運動連通元件 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] 中描述的運動模板技術。