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

詳細説明

関数

void cv::accumulate (InputArray src, InputOutputArray dst, InputArray mask=noArray())
 アキュムレータ画像に画像を加算する。
 
void cv::accumulateProduct (InputArray src1, InputArray src2, InputOutputArray dst, InputArray mask=noArray())
 2つの入力画像の要素ごとの積をアキュムレータ画像に加算する。
 
void cv::accumulateSquare (InputArray src, InputOutputArray dst, InputArray mask=noArray())
 入力画像の2乗をアキュムレータ画像に加算する。
 
void cv::accumulateWeighted (InputArray src, InputOutputArray dst, double alpha, InputArray mask=noArray())
 移動平均を更新する。
 
void cv::createHanningWindow (OutputArray dst, Size winSize, int type)
 この関数は2次元のHanning窓係数を計算する。
 
void cv::divSpectrums (InputArray a, InputArray b, OutputArray c, int flags, bool conjB=false)
 第1のフーリエスペクトルを第2のフーリエスペクトルで要素ごとに除算する。
 
Point2d cv::phaseCorrelate (InputArray src1, InputArray src2, InputArray window=noArray(), double *response=0)
 この関数は2つの画像間に生じる平行移動量を検出するために用いられる。
 
Point2d cv::phaseCorrelateIterative (InputArray src1, InputArray src2, int L2size=7, int maxIters=10)
 2つの画像間の平行移動量を検出する。
 

関数詳解

◆ accumulate()

void cv::accumulate ( InputArray src,
InputOutputArray dst,
InputArray mask = noArray() )
Python:
cv.accumulate(src, dst[, mask]) -> dst

#include <opencv2/imgproc.hpp>

画像をアキュムレータ画像に加算する。

この関数は src またはその一部の要素を dst に加算する :

\[\texttt{dst} (x,y) \leftarrow \texttt{dst} (x,y) + \texttt{src} (x,y) \quad \text{if} \quad \texttt{mask} (x,y) \ne 0\]

この関数はマルチチャンネル画像をサポートする。各チャンネルは独立して処理される。

関数 cv::accumulate は、たとえば静止カメラで撮影したシーンの背景の統計情報を収集し、その後の前景・背景セグメンテーション(領域分割)に利用するために使用できる。

引数
src型が CV_8UC(n), CV_16UC(n), CV_32FC(n), または CV_64FC(n) の入力画像。ここで n は正の整数である。
dst入力画像と同じチャンネル数を持ち、ビット深度が CV_32F または CV_64F のアキュムレータ画像。
mask省略可能な演算マスク。
参照
accumulateSquare, accumulateProduct, accumulateWeighted

◆ accumulateProduct()

void cv::accumulateProduct ( InputArray src1,
InputArray src2,
InputOutputArray dst,
InputArray mask = noArray() )
Python:
cv.accumulateProduct(src1, src2, dst[, mask]) -> dst

#include <opencv2/imgproc.hpp>

2つの入力画像の要素ごとの積をアキュムレータ画像に加算する。

この関数は、2つの画像またはそれらの選択した領域の積をアキュムレータ dst に加算する :

\[\texttt{dst} (x,y) \leftarrow \texttt{dst} (x,y) + \texttt{src1} (x,y) \cdot \texttt{src2} (x,y) \quad \text{if} \quad \texttt{mask} (x,y) \ne 0\]

この関数はマルチチャンネル画像をサポートする。各チャンネルは独立して処理される。

引数
src11番目の入力画像。1または3チャンネル、8ビットまたは32ビット浮動小数点。
src2src1 と同じ型かつ同じサイズの2番目の入力画像。
dst入力画像と同じチャンネル数を持つアキュムレータ画像。32ビットまたは64ビット浮動小数点。
mask省略可能な演算マスク。
参照
accumulate, accumulateSquare, accumulateWeighted

◆ accumulateSquare()

void cv::accumulateSquare ( InputArray src,
InputOutputArray dst,
InputArray mask = noArray() )
Python:
cv.accumulateSquare(src, dst[, mask]) -> dst

#include <opencv2/imgproc.hpp>

入力画像の2乗をアキュムレータ画像に加算する。

この関数は、入力画像 src またはその選択した領域を2乗したものをアキュムレータ dst に加算する :

\[\texttt{dst} (x,y) \leftarrow \texttt{dst} (x,y) + \texttt{src} (x,y)^2 \quad \text{if} \quad \texttt{mask} (x,y) \ne 0\]

この関数はマルチチャンネル画像をサポートする。各チャンネルは独立して処理される。

引数
src入力画像。1または3チャンネル、8ビットまたは32ビット浮動小数点。
dst入力画像と同じチャンネル数を持つアキュムレータ画像。32ビットまたは64ビット浮動小数点。
mask省略可能な演算マスク。
参照
accumulateSquare, accumulateProduct, accumulateWeighted

◆ accumulateWeighted()

void cv::accumulateWeighted ( InputArray src,
InputOutputArray dst,
double alpha,
InputArray mask = noArray() )
Python:
cv.accumulateWeighted(src, dst, alpha[, mask]) -> dst

#include <opencv2/imgproc.hpp>

移動平均を更新する。

この関数は、入力画像 src とアキュムレータ dst の重み付き和を計算し、dst がフレームシーケンスの移動平均となるようにする:

\[\texttt{dst} (x,y) \leftarrow (1- \texttt{alpha} ) \cdot \texttt{dst} (x,y) + \texttt{alpha} \cdot \texttt{src} (x,y) \quad \text{if} \quad \texttt{mask} (x,y) \ne 0\]

つまり、alpha は更新速度(アキュムレータが過去の画像をどれだけ速く「忘れる」か)を調整する。この関数はマルチチャンネル画像をサポートする。各チャンネルは独立して処理される。

引数
src入力画像。1または3チャンネル、8ビットまたは32ビット浮動小数点。
dst入力画像と同じチャンネル数を持つアキュムレータ画像。32ビットまたは64ビット浮動小数点。
alpha入力画像の重み。
mask省略可能な演算マスク。
参照
accumulate, accumulateSquare, accumulateProduct

◆ createHanningWindow()

void cv::createHanningWindow ( OutputArray dst,
Size winSize,
int type )
Python:
cv.createHanningWindow(winSize, type[, dst]) -> dst

#include <opencv2/imgproc.hpp>

この関数は2次元のHanningウィンドウ係数を計算する。

詳細は (https://en.wikipedia.org/wiki/Hann_function) および (https://en.wikipedia.org/wiki/Window_function) を参照のこと。

以下に例を示す:

// create hanning window of size 100x100 and type CV_32F
Mat hann;
createHanningWindow(hann, Size(100, 100), CV_32F);
n-dimensional dense array class
Definition mat.hpp:840
Size2i Size
Definition types.hpp:370
#define CV_32F
Definition interface.h:78
void createHanningWindow(OutputArray dst, Size winSize, int type)
This function computes a Hanning window coefficients in two dimensions.
引数
dstHann係数を格納する出力配列
winSizeウィンドウサイズの指定(幅と高さの両方が 1 より大きくなければならない)
type生成する配列の型

◆ divSpectrums()

void cv::divSpectrums ( InputArray a,
InputArray b,
OutputArray c,
int flags,
bool conjB = false )
Python:
cv.divSpectrums(a, b, flags[, c[, conjB]]) -> c

#include <opencv2/imgproc.hpp>

1番目のフーリエスペクトルを2番目のフーリエスペクトルで要素ごとに除算する。

関数 cv::divSpectrums は、1番目の配列を2番目の配列で要素ごとに除算する。これらの配列は、実数または複素数のフーリエ変換の結果であるCCSパック形式または複素行列である。

引数
a1番目の入力配列。
bsrc1 と同じサイズおよび型の2番目の入力配列。
csrc1 と同じサイズおよび型の出力配列。
flags演算フラグ。現在サポートされている唯一のフラグは cv::DFT_ROWS であり、これは src1 と src2 の各行が独立した1次元フーリエスペクトルであることを示す。このフラグを使いたくない場合は、単に値として 0 を指定すればよい。
conjB乗算の前に2番目の入力配列を共役にするか(true)しないか(false)を指定する省略可能なフラグ。

◆ phaseCorrelate()

Point2d cv::phaseCorrelate ( InputArray src1,
InputArray src2,
InputArray window = noArray(),
double * response = 0 )
Python:
cv.phaseCorrelate(src1, src2[, window]) -> retval, response

#include <opencv2/imgproc.hpp>

この関数は、2つの画像間で発生する並進シフトを検出するために使用される。

この演算は、周波数領域における並進シフトを検出するためにフーリエシフト定理を利用する。高速な画像レジストレーションや動き推定に利用できる。詳細は https://en.wikipedia.org/wiki/Phase_correlation を参照のこと

与えられた2つの入力配列のクロスパワースペクトルを計算する。配列は必要に応じて getOptimalDFTSize でパディングされる。

この関数は以下の式を実行する:

  • まず、ユーザによって指定されている場合は、起こりうるエッジ効果を除去するために各画像にHanningウィンドウを適用する。createHanningWindow および https://en.wikipedia.org/wiki/Hann_function を参照のこと。このウィンドウは処理時間を高速化するため、配列サイズが変わるまでキャッシュされることがある。
  • Next it computes the forward DFTs of each source array:

    \[\mathbf{G}_a = \mathcal{F}\{src_1\}, \; \mathbf{G}_b = \mathcal{F}\{src_2\}\]

    where \(\mathcal{F}\) is the forward DFT.
  • It then computes the cross-power spectrum of each frequency domain array:

    \[R = \frac{ \mathbf{G}_a \mathbf{G}_b^*}{|\mathbf{G}_a \mathbf{G}_b^*|}\]

  • Next the cross-correlation is converted back into the time domain via the inverse DFT:

    \[r = \mathcal{F}^{-1}\{R\}\]

  • Finally, it computes the peak location and computes a 5x5 weighted centroid around the peak to achieve sub-pixel accuracy.

    \[(\Delta x, \Delta y) = \texttt{weightedCentroid} \{\arg \max_{(x, y)}\{r\}\}\]

  • 非ゼロの場合、response 引数はピーク位置周辺の5x5重心内における r の要素の総和として計算される。これは最大値1に正規化され(1は単一のピークが存在することを意味する)、複数のピークが存在する場合はより小さくなる。
引数
src1入力浮動小数点配列(CV_32FC1 または CV_64FC1)
src2入力浮動小数点配列(CV_32FC1 または CV_64FC1)
windowエッジ効果を低減するためのウィンドウ係数を持つ浮動小数点配列(省略可能)。
responseピーク周辺の5x5重心内における信号パワー。0から1の範囲(省略可能)。
戻り値
2つの配列間で検出された位相シフト(サブピクセル)。
参照
dft, getOptimalDFTSize, idft, mulSpectrums createHanningWindow

◆ phaseCorrelateIterative()

Point2d cv::phaseCorrelateIterative ( InputArray src1,
InputArray src2,
int L2size = 7,
int maxIters = 10 )
Python:
cv.phaseCorrelateIterative(src1, src2[, L2size[, maxIters]]) -> retval

#include <opencv2/imgproc.hpp>

2つの画像間の並進シフトを検出する。

この関数は、標準の phaseCorrelate メソッドを拡張し、[133] で説明されているように、位相相関空間における反復的なシフト精緻化によってサブピクセル精度を向上させる。

引数
src1入力浮動小数点配列(CV_32FC1 または CV_64FC1)
src2入力浮動小数点配列(CV_32FC1 または CV_64FC1)
L2size反復的なシフト精緻化アルゴリズムで使用される相関近傍のサイズ。
maxIters反復的精緻化アルゴリズムが実行する最大反復回数。
戻り値
2つの配列間で検出されたサブピクセルシフト。
参照
phaseCorrelate, dft, idft, createHanningWindow