🍣
エピポーラ幾何をインタラクティブに体験するアプリ
概要
エピポーラ幾何は通常局所特徴量からマッチング点を得て、RANSACなどのロバストな方法で求めることが多いです。しかし、「8点アルゴリズム」によれば、理論上8点の対応点があればエピポーラ線が線形解法で求まります。いきなりRANSACに投げてしまうのではなく、8点の対応点とその結果を見てみる機会は意外と無いのではないでしょうか。
クリックにより対応点を入力し、8点法によるエピポーラ幾何の結果、そして限界をインタラクティブに体感できるアプリを作りました。
コードはこちら↓
説明
入力インタフェース、Fundamental行列の計算などにOpenCVを、プロットにMatplotlibを用いました。
必要要件
筆者の環境では
- Ubuntu 20.04
- Python 3.8.5
- matplotlib 3.4.2
- numpy 1.20.3
- opencv-python 4.5.2.52
で実行しました。
実行
1. インストール
cd ~/
git clone https://github.com/maronuu/InteractiveEpipolar.git
cd ~/InteractiveEpipolar
pipenv install -r requirements.txt
pipenv以外の方法でももちろん可。
2. main.pyを走らせる
python3 main.py --img1 data/left.jpg --img2 data/right.jpg --output output/result.png [--detail]
2つのWindowが表示されます。それぞれ、視点1からの画像、視点2からの画像を表示しています。
3. 8個の対応点ペアを交互にクリック
すなわち、以下のようにします。
Input 1st point on view_1 -> Input 1st point on view_2 ->
Input 2nd point on view_1 -> Input 2nd point on view_2 ->
...
Input 8th point on view_1 -> Input 8th point on view_2
入力が終わると結果が表示され、画像が
InteractiveEpipolar/output/{picture_name}.png
に保存されます。
まとめ
8点法だとなかなかうまく行かないことが実感できます。
色々な点の配置を試してみると結果が大きく変わることが体験できて面白いです。
Discussion