はじめに
part 1で無料のOpenPIVを試してみたが方向の反転に気をつければ使えそうに感じた.ソースコードを変更するには時間を要する.更なる理解のために自分でPIVのプログラムを作成することを検討した.今回はPIVの原理に近く精度が高いと言われている直接相互相関法を試す.
直接相互相関法
計測時間が前の画像を第1画像,後の画像を第2画像とする.画像を一定のサイズに区切って第1画像の探査領域を設定して,この輝度分布のパターンが第2画像のどこに一致するか調べる方法である.画像全体で相互相関を調べると計算に時間がかかるため,探査領域の近傍だけ相互相関を調べる.相互相関係数の分布からピークを移動量として,これを各探査領域で計算して速度分布を求める.
プログラムの作成,結果
OpenPIVと比較するために前回と同様に画像はPIVChallengeのから1st PIV Challenge (Sept.14-15, 2001, Göttingen, Germany) のCase 3: medium particle density and small particle を使用した.相関係数はOpenCVの関数(cv2.matchTemplate)を利用して,第1画像と第2画像を適宜トリミングして利用した.類似度は正規化相互相関 (normalized cross-correlation) で計算した.img_b_trimはimg_a_trimよりも大きく設定して,大きすぎると計算量が多くなり遅いので,粒子の移動量を考えて設定する.
results = cv2.matchTemplate(img_b_trim, img_a_trim, cv2.TM_CCORR_NORMED)
自作のプログラムでは渦が計測できており,うまくいっている気がする.ただ一対の画像の計算に6秒程度かかるため,高速度カメラ等で画像を撮影すると1万枚以上のデータになるため,解析に半日以上かかってしまう.実際には出力した結果を見ながらパラメーター調整が必要で実用には耐えない.そのため,今後は並列化するなどして高速化をするかもう一つのFFT相互相関法を試してみる.
終わりに
OpenPIVが上手くいかなかったため自分で直接相互相関法のプログラムを作成した.OpenCVを用いて相互相関係数を求めてPIVをしたが,渦を計測できていて上手くいったが速度は遅かった.次回はFFT相互相関法を試したい.
参考
PIVハンドブック,可視化情報学会
OpenCV-Python Tutorials 1 documentation » OpenCV-Pythonチュートリアル » OpenCVを使った画像処理 »
OpenCV – cv2.matchTemplate でテンプレートマッチングを行う方法