セカイカメラの方向推定方法を考えてみた

セカイカメラ(http://www.tonchidot.com/Sekai_Camera.html)」は

ライブビュー(目の前の空間)をダイレクトにiPhoneのスクリーンに表示し、ロ
ケーションのディレクション情報をもとにサーバサイドから必要な情報を集めて
きて表示する

ものらしいです。問題は、Google携帯 G-1のようにコンパスを搭載しないで向いている方向をどうやって知るかです。精度が高いディレクション情報がないと、なにを画面のどこに表示すればいいか分からないですからね。


で、2008-09-11 - 社怪人の日記 で述べられているように、画像認識までは行わずに、特徴量だけを送ってサーバサイドで方向を認識しているのではないかと思います。

そこで、グーグル、「Street View」の撮影とあわせて3Dデータを収集 - CNET Japan を見てください。GoogleはStreet Viewを撮るときに合わせて3Dデータも収集しているそうです。

3Dデータがあるならば、これを利用して以下の方法でそれなりに精度良く方向を求められそうです。ほんとかな。

  • 1. カメラに写っている画像の特徴量を抽出
    • 街中を想定すれば、直線だけでもかなりいけそう
  • 2. 抽出した特徴量と、GPSによる位置情報をサーバに送信
  • 3. サーバでは、受け取ったGPSを元にその周辺の3Dデータから、見えるであろう風景の特徴量を360度ぶん作成
    • ただし、上下方向を考えるともうちょっと広い範囲で作る必要があるかも
  • 4. サーバで、特徴量同士を比較し適合する方角を検索
    • このとき、ずれがあれば差分を元により正確な位置が分かるかも
  • 5. 方向と位置が分かればサーバ側で表示すべき情報を探してiphoneに送信
  • 6. iphoneでは、送信されてきた情報をカメラ画像に加えて表示

衛星写真から作成しているらしいけど、Google Earthでは3Dモデルがあるのでそれを利用すればできそうです(法律的に使っていいかはともかく)。


でも、向いている方向を取りたいだけであれば、G-1のようにコンパスを搭載するのが早いような気がしますけどねぇ。