まず、フレーム間の差分を計算します。これは、現在のフレームと直前のフレームとの間の差を取ることで行われます。数式で表すと以下のようになります。
ここで、$F(n)$はフレーム$n$のデータを示します。差分は、画素ごとに計算されます。
次に、指定された時間ウィンドウ内でのフレーム間の絶対値差分を加算します。ウィンドウの大きさは0.2秒分のフレーム数です。例えば、フレームレートが25fpsの場合、0.2秒は5フレームに相当します。このウィンドウ内での差分の合計は以下のように表されます。
ここでは、ウィンドウ内のフレーム差分を合計しています。
得られたフレーム差分の合計を32x18のグリッドに分割します。この分割は、均等に32列と18行に分けることで行われます。各部分は、それぞれ$S(n, i, j)$として表されます。
グリッド内の各領域に対し、平均値$E(S(n, i, j))$と標準偏差$\sigma(S(n, i, j))$を計算します。その上で、閾値$T(n, i, j)$を以下の式で求めます。
ここで、係数$a = 2$は経験的に設定されます。
この閾値を基に、各グリッド部分に対して二値化を行います。新たに作成される二値化されたグリッドは$R(n)$とし、次のように定義します。
ここで、閾値$b = 30$は、経験的に設定された値です。
次に、二値化されたグリッド内で隣り合う領域を統合します。このプロセスでは、連結領域のアルゴリズムを用いて、隣接する部分を一つの領域として扱います。最終的に、連結部分を全て囲う領域を検出します。
流星は直線形として映像に記録されるされます。検出された領域に対して直線検出を行います。OpenCVのFastLineDetector(FLD)を使用しています。