開発方針としては、はじめに思いついたとおりに実装してみる。次に、抽象化したクラスに落とし込むようにする。
要パフォーマンスチェック。
OpenCVの画像演算系を使って実装した。パフォーマンスの計測は指定いないが、結構重そうな感じがする。 曲率画像は、大きいカーネルサイズで計算したほうが、トラッキングの成績が良かった。 現状はカーネルサイズ31を利用。カーネルサイズが7以上の場合、周りを0でPaddingされるので意味がないらしいが、出力された曲率画像は変わるので何か変わっているはず。
画素中心からの8近傍探索を繰り返すことでピークピックを行う。 端の処理でバグがあるぽい?たまにジャンプ?端ワープが見られる。 時間がかかるかを思っていたが、意外と処理できている。OpenMPかなにかで並列化できればより高速に処理できると思われる。
ここではopencv_contribに入っているFeature descripter(Belief, 32bit)を利用している。 たまに、Featureマッチングに失敗することもある。その場合は恒等変換の単位行列を返すようにしている。 なのでOpenCV contribも入れておく必要あり。以下メモ。
- ダウンロード:今はバージョン、3.4.9を利用するのでこのソースコードを落とす。
wget https://github.com/opencv/opencv/archive/3.4.9.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/3.4.9.tar.gz- もろもろ設定してコンパイル
tar zxvf opencv-3.4.9.tar.gz
tar zxvf opencv_contrib-3.4.9.tar.gz
cd opencv-3.4.9
mkdir build; cd build
cmake-gui .. # EXTRAで検索して/path/to/opencv_contrib/modulesを設定、もう一回configureする。
make -j12
sudo make install- 初期化:基礎行列の分解で行う。
- BA:部分空間ガウスニュートンを利用するが、その初期値の計算も必要になる。
- BA:初期値は、カメラ系:P3P、特徴点位置:三角測量=>このあとに最適化するBAを実行する
もろもろの要因で、そのまま画像を使うのは性能低下につながる?
- モーションブラー : 露光時間が長いと発生する。ノイズ量をトレードオフ。露光時間を短くすると解決するが、得られる生画像は暗くなり、明るさ補正するとノイズが目立つようになる。
- ローリングシャッター : 画像サイズを1280x720くらいにすると目で見えないくらいの影響になる。静止画でどうなるかは未検証。
- ノイズ : 露光時間を長くするとあまり気にならなくなる。だが、ブラーを抑えるために0露光時間は短くしたい。
- 露光時間短め
- 解像度低め
- カメラのゲインを高め:ノイズが目立つ原因