LoginSignup

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

複数画像間における特徴点の対応付け

解決したいこと

画像処理や画像の幾何の初心者です。コンピュータビジョンにおいて、複数の画像における共通の特徴点の対応付けを行いたいのですが、効果的なやり方が分かりません。具体的には、バンドル調整のような問題に使いたいと思っています。

自分で試したこと

  • 2枚の画像間における特徴点の対応付けはできる
  • 2枚の画像間の対応付けの方法を、複数画像に総当りで適用する実例を調査した[LINK]

上記以外にも自分の考えとしては、以下のようなことを考えています(下図を参照)。

連続したフレーム間で同一の特徴点を対応付ける場合

t=2, t=3, t=4の連続したフレームにおいて、画像上のID3のランドマークが共通の特徴点だとする。そして、t=2, t=3とt=3, t=4のように、隣り合うフレーム間でのみ対応点の探索は行う。よって、隣り合うフレーム間において、特徴点(画像上のID 3)の対応付けを行い、それらの結果を数珠繋ぎにすることでt=2, t=3, t=4の連続したフレーム間の対応点を得る。

不連続したフレーム間で同一の特徴点を対応付ける場合

ある自然数Nを事前に決定し、現在のフレームの画像からN個前のフレームの画像において総当りで特徴点の対応付けを行う。(例えば、t=5&t=4, t=5&t=4, t=5&t=3, t=5&t=2, t=5&t=1, t=4&t=3....)

Screenshot from 2022-09-20 05-12-11.png

質問

バンドル調整で使えるような、複数の画像における共通の特徴点の対応付けを行う方法を教えてもらえないでしょうか。もしくは、opencvやgithubで目的を達成できるようなライブラリや、参考になりそうなオープンソースのコード、質問内容に触れている論文や資料がありましたら教えてもらえないでしょうか。

0

2Answer

モチベーションについて

複数の画像における共通の特徴点の対応付けを行いたい

のは何故でしょうか?

バンドル調整に利用したいとのことでしたが、例えば3枚の入力画像に対し、

a. 画像1-画像2, 画像2-画像3, 画像3-画像1の、それぞれの画像間で共通する特徴点

ではなく、

b. 画像1-画像2-画像3で共通する特徴点

を見つけたい理由は何でしょうか?

a. でもバンドル調整は可能です。
例えばb. でしかできない処理としては3視点からの三角測量が考えられますが、これがバンドル調整の出来栄えを向上する上で重要ということでしょうか?

問題について

複数の画像における共通の特徴点の対応付け

が必要だとして、「自分で試したこと」に記載された手法で困っていること(問題点)は何でしょうか?いずれの方法でも実現可能なように見えますが、どう困っているのかが具体化されると、回答もしやすいと思います。

1

Comments

  1. @mamo3gr さん

    回答ありがとうございます。

    (1)モチベーションについて
     リアルタイムでバンドル調整を実行するような機能を実装したいと考えています。一から自分で実装するわけではなく、画像処理や最適化はopencvやceres-solverなどの主機能はオープンソースで代用する予定です。
     以下の質問箱の画像で示したような絵でバンドル調整を学んでいます。バンドル調整の評価関数である再投影誤差を正しく計算するためには、ある3次元点と、その点に対応する画像上の特徴点が必要になると理解しています。2枚の画像のみであれば、三角測量によって求められた3次元点と画像上の特徴点は適切に対応付けられると想像できます。
     しかしながら、以下の画像のように、ある三次元点aをカメラ1、カメラ2、カメラ3の画像上に投影し、その点と対応する特徴点から再投影誤差するという解説を読んだ時、「カメラ1、カメラ2、カメラ3において、ある3次元点aと対応する画像上の特徴点はどのように求めるのだろう」と疑問に思ったことがきっかけでした。

     つまり、再投影誤差を適切に実装する方法を知りたいと思ったのがモチベーションとなります。そして、「複数の画像における共通の特徴点の対応付け」ができれば適切に再投影誤差を実装できるのではと思い、色々調べたのですが、2枚の画像間の特徴マッチングしか見つからず、質問するに至った次第です。

    申し訳ありませんが、@mamo3grさんが提示してくださっているa.とb.でどちらの方が出来栄えが優れているかは把握できておりません。


    (2)問題について
     困っていることとしては、バンドル調整の再投影誤差を実装するにあたり、どのように特徴点の対応付けが成されるかが分からないという点です。
     単なる2枚の画像における特徴マッチングのみの解説にのみヒットするかつ、@mamo3grさんも指摘してくださっていますが、「自身の考えとは違った方法で再投影誤差は実装されるものなのでは?だから上手く検索がヒットしないのでは?」と思い、質問に至りました。



    回答において、言葉足らずの点がまだございましたら、指摘をいただけたら幸いです。
  2. まず「複数の画像における共通の特徴点の対応付け」は、バンドル調整のために必ずしも必要ではありません。記載した例でいうと、三次元点aについて、カメラ1, 2における再投影誤差と、カメラ2, 3に投影した再投影誤差を最小化すれば、カメラ1,2,3のモーション(相対的な位置関係)は求まります。すなわち、カメラ1-2間、2-3間でそれぞれ特徴点が対応付けられればよく、1-2-3間で共通しているかどうかは必須ではありません。(もちろん、共通であることが分かれば、より高い精度でモーションを推定できる可能性はあります。)

    2枚の画像間(画像ペア)の特徴マッチング→全画像ペアでバンドル調整という実装のほうが比較的簡単なので、まずはこちらから試してみてはどうでしょうか。
  3. なお、3視点以上で共通の特徴点を見つけたい場合は、質問元の「連続したフレーム間で同一の特徴点を対応付ける場合」あるいは「不連続したフレーム間で同一の特徴点を対応付ける場合」が順当なやり方であるように見えます。それぞれ試してみて、実用上の問題点が無いか確認してみるのはどうでしょうか。

    参考として、やや問題設定がずれますが、Visual SLAM(移動ロボットの自己位置推定など、順次画像が増えていくケースでのSfM)では、ある時点までのフレームでSfMし3次元復元に成功した点の特徴ベクトルを記録しておき、新しいフレーム内で特徴ベクトルが似た点がないか探す、という処理をする場合があるようです。

    * 論文:https://arxiv.org/abs/1910.01122
    * 実装:https://github.com/stella-cv/stella_vslam
  4. 詳しい回答ありがとうございます。質問して良かったと改めて思いました。

    非常に勉強になりました。提示してくださっているように、2枚の画像間(画像ペア)の特徴マッチング→全画像ペアでバンドル調整という実装を行ってみます。
    また、そのときの複数枚の画像ペアでのバンドル調整の際には、自分で考えてみたアイデアが順当と言ってもらえましたので、試して妥当性を実際に検証したいと思います(学生で時間だけはありますので、手を動かしてみます)。それで上手くいかなければ、visual slamの論文に特徴点や3次元点の対応や保持に関する記述があることを教えてもらいましたので、visual slamを中心に調査を再開したいと思います。

Your answer might help someone💌