エピポーラ幾何をインタラクティブに体験するアプリ

1 min read読了の目安(約1400字

概要

エピポーラ幾何は通常局所特徴量からマッチング点を得て、RANSACなどのロバストな方法で求めることが多いです。しかし、「8点アルゴリズム」によれば8点の対応点があればエピポーラ線が線形解法で求まります。そこで、クリックにより対応点を入力し、8点法によるエピポーラ幾何の結果、そして限界をインタラクティブに体感できるアプリを作りました。

コードはこちら↓

https://github.com/maronuu/InteractiveEpipolar

説明

入力インタフェース、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個の対応点ペアを交互にクリック

two images of the same object from different views

すなわち、以下のようにします。

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
に保存されます。

result

感想

8点法だとなかなかうまく行かないことが実感できます。
色々な点の配置を試してみると結果が大きく変わることが体験できて面白いです。