Skip to content

Latest commit

 

History

History
39 lines (22 loc) · 2.4 KB

algorithm.md

File metadata and controls

39 lines (22 loc) · 2.4 KB

検出アルゴリズム

フレーム間差分の計算

まず、フレーム間の差分を計算します。これは、現在のフレームと直前のフレームとの間の差を取ることで行われます。数式で表すと以下のようになります。 $$\Delta F(n) = F(n) - F(n-1)$$

ここで、$F(n)$はフレーム$n$のデータを示します。差分は、画素ごとに計算されます。

ウィンドウ内での差分の加算

次に、指定された時間ウィンドウ内でのフレーム間の絶対値差分を加算します。ウィンドウの大きさは0.2秒分のフレーム数です。例えば、フレームレートが25fpsの場合、0.2秒は5フレームに相当します。このウィンドウ内での差分の合計は以下のように表されます。 $$S(n) = \sum_{k=n-5}^{n} |\Delta F(k)|$$

ここでは、ウィンドウ内のフレーム差分を合計しています。

フレームの分割

得られたフレーム差分の合計を32x18のグリッドに分割します。この分割は、均等に32列と18行に分けることで行われます。各部分は、それぞれ$S(n, i, j)$として表されます。

閾値処理

グリッド内の各領域に対し、平均値$E(S(n, i, j))$と標準偏差$\sigma(S(n, i, j))$を計算します。その上で、閾値$T(n, i, j)$を以下の式で求めます。 $$T(n,i,j)=E(n,i,j) + a\sigma(S(n,i,j))$$

ここで、係数$a = 2$は経験的に設定されます。

この閾値を基に、各グリッド部分に対して二値化を行います。新たに作成される二値化されたグリッドは$R(n)$とし、次のように定義します。

$$R(n) = {T(n,i,j) > b∣1 \leq i \leq 32,1 \leq j \leq 18\ }$$

ここで、閾値$b = 30$は、経験的に設定された値です。

隣接する領域の統合

次に、二値化されたグリッド内で隣り合う領域を統合します。このプロセスでは、連結領域のアルゴリズムを用いて、隣接する部分を一つの領域として扱います。最終的に、連結部分を全て囲う領域を検出します。

流星検知

流星は直線形として映像に記録されるされます。検出された領域に対して直線検出を行います。OpenCVのFastLineDetector(FLD)を使用しています。