三角関数に苦戦した

簿記やってたので進捗少ないですが、緯度経度をベクトルに変換するのはできました。

const double lat = 0; //緯度 いど
const double lon = 0; //経度 けいど

で正面。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-24-11-58-14

const double lat = 45; //緯度 いど
const double lon = 15; //経度 けいど

で右斜めの少し上方。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-24-12-07-46

const double lat = -45; //緯度 いど
const double lon = -15; //経度 けいど

もちろん負の値にすると逆を向きます。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-24-12-08-05

あとは

  1. カメラの向きを変える
  2. 画像を切り出す

を繰り返せば分割はできそうな見込みです。
2.はアフィン変換使えばいいのだろうか…もっと良い手法がありそうな気も。

実装を進めながら

  • 何度毎に分割するのが良いか
  • 最終的な画像の復元手法

について検討します。

久しぶりにsin, cos, tanを考えました。
数学は大事だぞ、と思いました。

結局openFrameworksかよ

PythonのOpenCV(cv2)にはキャリブレーションが含まれていないとか。

OpenCV-Python Tutorialsの「カメラ校正」への補足 on @Qiita

あとOpenGLとか使いたかったので結局openFrameworksで実装することにしました。
今までPythonを貫いてきたのは何だったのか…。

昨年度はWindowsでopenFrameworks + oFxCVだったので若干使い勝手が違うところがあります。

とりあえず中間発表までに

  1. RICOH THETA Sで撮影した静止画を立体射影に変換
  2. 緯度経度毎に分割
  3. 同緯度の隣り合う画像を特徴点マッチング

までやれたらいいな…。

立体射影とは

メモ

既存研究紹介準備

引き続きpythonのコードを読み書きしています。
次週、僕が既存研究紹介をやるのでいろいろ論文を読み漁ってます。

多視点画像からの映像復元 or 対応点探索の関係で行うつもりです。
画像変形について調べていますが若干手詰まり感があるので、アルゴリズムとか諸々を今度先生に相談に行きます。

Pythonに慣れない

やったこと

  • GitHubに学割申請し研究用のPrivate Repositoryを作成
  • Pythonの勉強
  • マッチした特徴点の傾きを求める

傾きを求める

前回までのプログラムでは

bf = cv2.BFMatcher(cv2.NORM_HAMMING)

で比較器を作成し、

matches = bf.match(des1, des2)

で2枚の特徴点を比較、

matches = sorted(matches, key = lambda x:x.distance)

で一致度の高い順に並べ変えています。

DescriptorMatcherクラスとKeyPointクラスのメンバについて調べました。
スクリーンショット 2016-07-05 15.57.08
これらを用いて一致度の高い順に、特徴点の座標(x, y)を取得できました。
akaze

XとYが2点ずつわかったので傾きも出せた。(たぶん)
2点を1枚の画像に取った時の傾きかな。
スクリーンショット 2016-07-05 16.10.06

続・AKAZEで2枚を比較

どうでもいいけどHomebrewの読み方は「ホームブルー」らしい……。

HomebrewでOpenCVをインストールする際にオプションを付けることでcontribを含めてインストールできるようです。
ということで

$ brew uninstall opencv3

で一旦OpenCVをアンインストールし、

$ brew install opencv3 --with-python3 --with-contrib

でインストールし直しました。

Pythonの勉強

ドットインストールを流しながら先週までに書いたコードを読んでいたら、2枚を比較して一致度が高い50本のみ線を描画していることに気付きました。

cv2.drawMatches(img, kp1, img2, kp2, matches[:50], out, flags=0)

これを

cv2.drawMatches(img, kp1, img2, kp2, matches, out, flags=0)

に変更。
画像をJPEGで出力すると
s_akaze-min

2枚の特徴点は9956点が一致していました。
Contribはインストールしたはずですが、相変わらずSIFTやSURFを呼び出せていないのでこれに挑戦しつつ、9956点の特徴点をどれだけ使えそうか検証し中間地点の画像の復元を試みます。
スクリーンショット 2016-06-28 1.02.53