(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0031】
以下、本発明に係る実施形態を、図面を参照しながら説明する。
【0032】
[携帯端末のハードウェア構成]
図1は、本実施形態に係る携帯端末のハードウェア構成を示したブロック図である。
【0033】
この携帯端末は、建築物の建築後の景観を検討するためのリアルタイム写真合成処理に用いられる。
【0034】
ここで携帯端末とは、具体的には、例えばスマートフォン、携帯電話機、タブレットPC(Personal Computer)、デジタルスチルカメラ、PDA(Personal Digital Assistant)、携帯型AVプレイヤー、携帯型ゲーム機、電子ブック等の携帯型の情報処理装置である。
【0035】
同図に示すように、携帯端末100は、CPU(Central Processing Unit)11、RAM(Random Access Memory)12、不揮発メモリ13、表示部14、通信部15、カメラ16、GPSセンサ17、磁気センサ(電子コンパス)18、及び加速度センサ19を有する。
【0036】
CPU11は、必要に応じてRAM12等に適宜アクセスし、各種演算処理を行いながら携帯端末100の各ブロック全体を統括的に制御する。RAM12は、CPU11の作業用領域等として用いられ、OS、実行中の各種アプリケーション、処理中の各種データ(後述の三次元データ、撮像画像データ、座標データ、補正値等)を一時的に保持する。
【0037】
不揮発メモリ13は、例えばフラッシュメモリやROM(Read Only Memory)であり、CPU11に実行させるOS、後述するソフトウェアモジュール等のプログラムや各種パラメータなどのファームウェアを固定的に記憶する。
【0038】
特に本実施形態において、不揮発メモリ13は、上記リアルタイム写真合成処理アプリケーションを記憶する。また不揮発メモリ13は、上記アプリケーションの実行に用いられるデータとして、カメラ16により撮像された画像データ(写真データ)、建築予定の建造物の三次元データ(幾何学的形状データ、表面仕上データ等の属性データ)、建築予定現場の位置座標データ等を記憶する。
【0039】
表示部14は、例えばLCD(Liquid Crystal Display)やOELD(Organic ElectroLuminescence Display)であり、カメラ16による撮像画像や、当該撮像画像に建造物のパース画像を合成した合成画像、当該合成画像を補正するためのユーザインタフェース等を表示する。典型的には、表示部14は、タッチパネルと一体とされており、ユーザのタッチ操作を受け付け可能である。すなわち表示部14は、操作検出部としても機能する。
【0040】
図示しないが、携帯端末100は、上記操作検出部として、例えば電源ボタン等のハードウェアボタンも有する。
【0041】
通信部15は、WiFi(Wireless Fidelity)等の無線LAN(IEEE802.11等)や移動通信用の3Gや4Gのネットワークを用いて、他の装置と通信する。
【0042】
カメラ16は、例えばCMOS(Complementary Metal Oxide Semiconductor)やCCD(Charge Coupled Devices)センサ等の撮像素子により、静止画(写真)及び動画を撮像する。当該カメラ16は、例えば夜景モードや人物モード等の各種撮影モードの選択機能、パノラマ撮影機能、3D撮影機能、ホワイトバランス調整機能、絞り調整機能等の様々な機能を有し、ユーザは上記表示部14(タッチパネル)等を操作してそれらの機能の設定を行うことができる。
【0043】
GPSセンサ17は、3つ以上の衛星からの電波を捕捉し、それぞれの衛星までの距離に基づいて、携帯端末100が存在する位置を地球座標系で記述した座標を算出し、これを地球楕円体の上に当てはめて、携帯端末100の位置情報(緯度・経度・標高情報)を検出する。
【0044】
当該GPSセンサ17が用いられる代わりに、通信部15による無線通信により、基地局との間で三辺測量が行われることで、上記位置情報が検出されてもよい。
【0045】
磁気センサ(方位センサ)18は、携帯端末100から見た磁北の向きを検出可能である。加速度センサ19は、鉛直(重力)方向を検出可能である。これら検出された磁北の向き及び鉛直の向きから、携帯端末100の姿勢(カメラ16のアングル)が算出される。
【0046】
[携帯端末の動作]
次に、以上のように構成された携帯端末100の動作について説明する。当該動作は、携帯端末100のCPU11及び各種センサ等のハードウェアと、不揮発メモリ13に記憶されたソフトウェアとの協働により実行される。以下の説明では、便宜上、CPU11を動作主体とする。
【0047】
(アプリケーションの画面構成)
図2は、上記リアルタイム写真合成アプリケーションの実行中に表示される画面の構成を示した図である。
【0048】
同図に示すように、上記アプリケーションでは、起動画面、表示モデル選択画面、リアルタイム写真合成画面、再生選択画面及び再生画面の5つの画面が表示可能とされている。
【0049】
起動画面は、「表示モデル選択」「再生表示」「終了」の各画面の選択ボタンを有し、ユーザの選択に応じて各画面へ遷移する。
【0050】
表示モデル選択画面は、建築予定の住宅等の建造物の三次元モデルの一覧を表示し、ユーザの操作によって一の三次元モデルを選択する。
【0051】
リアルタイム写真合成画面は、上記選択された三次元モデルから描画された建造物のパース画像と、カメラ15によって撮像された建築予定現場の画像(以下、背景画像)との合成写真を表示する合成写真表示領域と、上記パース画像と背景画像との位置ずれを補正するための「キャリブレーション」ボタンと、背景画像を記録するための「シャッター」ボタンとを有する。
【0052】
詳細は後述するが、パース画像と背景画像とが表示された状態で「キャリブレーション」ボタンが押下されると、パース画像が押下時の状態で画面に固定され、背景画像のみが携帯端末100の移動に伴って更新されるようになる。
【0053】
「シャッター」ボタン操作時には、背景画像と共に、その時点におけるGPSセンサ17から取得された位置座標、カメラ16の姿勢(方位及び傾き)、時刻、その他天候等の環境条件、及び背景画像に合成表示されている建造物のパース画像(三次元モデル)の識別情報等も記録される。
【0054】
上記「キャリブレーション」ボタンは例えば表示部14の左下に、上記「シャッター」ボタンは例えば表示部14の右下に表示されるが、この位置に限られない。
【0055】
再生選択画面は、シャッターで記録した背景画像の縮小画像を例えばマトリクス表示し、ユーザの操作によって一の背景画像を選択する。
【0056】
再生画面は、上記再生選択画面によって選択された背景画像と、それに対応する上記パース画像及びキャリブレーション時に保存済みの補正値を用いて、現場におけるリアルタイム写真合成と同じ条件で写真合成を再現する。
【0057】
(アプリケーション起動時の画面遷移動作)
次に、上記アプリケーションの起動時の画面遷移動作について説明する。
図3は、当該画面遷移動作の流れを示したフローチャートである。
【0058】
同図に示すように、まず、CPU11は、上記モデル選択画面上で、ユーザによりモデル選択ボタンが押されたか否かを判断する(ステップ31)。
【0059】
モデル選択ボタンが押下されたと判断した場合(Yes)、CPU11は、リアルタイム写真合成処理へ遷移する(ステップ32)。
【0060】
一方、再生選択画面上で再生選択ボタンが押下されたと判断した場合(ステップ33のYes)、CPU11は、再生写真合成処理へ遷移する(ステップ34)。
【0061】
そして、終了ボタンが押されたと判断した場合(ステップ35のYes)、CPU11は、アプリケーションを終了する。
【0062】
(リアルタイム写真合成処理)
次に、上記リアルタイム写真合成処理について説明する。
図4は、当該リアルタイム写真合成処理の流れを示したフローチャートである。
【0063】
同図に示すように、CPU11は、モデル選択画面を表示すると(ステップ41)、ユーザにより一覧中から特定の建造物の三次元モデルが選択されたか否かを判断する(ステップ42)。
【0064】
三次元モデルが選択されたと判断した場合(Yes)、CPU11は、不揮発メモリ13から、選択された三次元モデルのファイルを読み込む(ステップ43)。
【0065】
続いてCPU11は、上記読み込んだファイルを用いて、リアルタイム写真合成表示処理を実行する(ステップ44)。
【0066】
ここで、当該リアルタイム写真合成表示処理の詳細を説明する。
図5は、当該リアルタイム写真合成表示処理の流れを示したフローチャートである。
【0067】
同図に示すように、CPU11は、カメラ16により、背景画像を取得し、表示部14に表示する(ステップ51)。
【0068】
続いてCPU11は、GPSセンサ17により携帯端末100の現在の位置座標を取得する(ステップ52)。
【0069】
続いてCPU11は、上記位置座標中の標高の位置ずれ補正処理に地形データを使用するか否かを判断する(ステップ53)。地形データを用いると判断した場合(Yes)には、当該地形データを用いたキャリブレーション処理を実行する(ステップ54)。この処理については後述する。地形データを用いるか否かは、例えばユーザが予めアプリケーションに設定してもよいし、地形の複雑さをアプリケーションが判断して、ある程度以上地形が複雑な場合に地形データを用いてもよい。
【0070】
地形データを用いないと判断した場合(No)、CPU11は、磁気センサ18及び加速度センサ19の各検出値から、携帯端末100の姿勢データ(カメラアングル)を取得する(ステップ55)。
【0071】
続いてCPU11は、上記取得した現在位置座標と姿勢データとから、現状の視点座標、注視ベクトル、上方ベクトル、焦点距離等からなるカメラパラメータcamを作成する(ステップ56)。
【0072】
そしてCPU11は、上記カメラパラメータcamを用いて、建造物の三次元モデルの描画処理を実行する(ステップ57)。
【0073】
ここで、上記三次元モデル描画処理の詳細について説明する。
【0074】
当該三次元モデル描画処理においては、上記現状のカメラパラメータcamを用いた建造物の三次元モデル(パース画像)の位置と、背景画像における建造物の建築予定位置とに誤差が生じる場合に、当該誤差を補正する処理(キャリブレーション処理)が実行される。
【0075】
本実施形態では、携帯端末100は、上記誤差補正処理の1つとして、携帯端末100を携帯したユーザの足による移動を用いることができる。以下、ユーザの移動による誤差補正処理について説明する。
【0076】
‐ユーザの移動による誤差補正処理‐
携帯端末100がGPS衛星から取得する位置情報は、AndroidやiOS等の携帯端末100上のオペレーティング・システムが提供する関数と共に、アプリケーション内で利用することができる。GPSシステムの座標系は、地球の中心を原点とする三次元直交座標系であるが、このような関数によって提供される位置情報は、利用の便のために、上述のように既に緯度、経度および標高の形に処理された計算結果である。
【0077】
水平位置の計測誤差を把握するためには、従来は、緯度経度が既知の地点に携帯端末をが置かれて、計測値の正値からのずれが計算される。以降、このずれの値を計測値に加算したものが必要な処理に用いられることにより、誤差が補正(キャリブレーション)される。
【0078】
しかしながら、上記の作業には、地図上から位置座標が特定できるポイントを探したり、その場所に行って差分を取得するための技能と手間とが要求される。本実施形態による方法によれば、非常に簡単な方法でこの補正を行うことができる。
【0079】
図6は、上記ユーザの移動による誤差補正処理を概念的に示した図である。また
図7は、当該誤差補正処理を実行中のリアルタイム写真合成画面の例を示した図である。
【0080】
ユーザはまず、
図6及び
図7Aに示すように、携帯端末100が表示した建造物のパース画像Pと背景画像Bとの写真合成画面70を参照しながら、パース画像Pと、それが配置されるべき建築予定の敷地C(空地など)の両方が画面に表示される場所に移動する。
【0081】
次に、ユーザは、画面70上のキャリブレーションボタン71を押す。そうすると、ボタン71が押される直前の位置座標を用いたパース画像Pの表示がその状態で固定され、背景画像Bだけが更新される状態となる。この際、ボタン押下時のGPSセンサ17等の各センサからの計測値が記憶される。
【0082】
次に、ユーザはこのキャリブレーションボタン71を押したまま移動し、パース画像Pが正しい位置と向きに合成表示される場所を歩き回って探す。そしてユーザは、十分に整合する合成表示が得られたら、その場所においてキャリブレーションボタン71を離す(
図7B参照)。
【0083】
そうすると、携帯端末100は、そのボタンを離した瞬間のGPSセンサ17等の各センサからの計測値と、それまで記憶していた、キャリブレーションボタン71が押された瞬間の計測値との差分を計算する。
【0084】
以後、携帯端末100は、この差分を補正値として、GPSセンサ17等の各センサからの計測値に当該補正値を加えたものを用いてパース画像Pの描画を行う。視点位置が変化すると、パース画像Pの表示は、恰もその敷地Cに固定されているように変化する。
【0085】
既に補正値が与えられている状態で、更にこの補正操作が行われた場合、携帯端末100は、新たな補正値を、それまでの補正値に追加的・累積的に加算してパース画像Pの描画に用いる。
【0086】
ここで、上記画面70において、パース画像Pが合成されるべき方位が背景画像Bの表示範囲から外れている場合には、携帯端末100は、背景画像B上に、パース画像Pが合成される(存在する)べき位置を示す情報(例えば右・左のテキストやそれらを示す矢印画像等)を表示可能である。
【0087】
携帯端末100は、回転(磁気センサ18の検出値)に関しても、上記移動による補正と同様の方法による補正を行う。すなわち、ユーザがキャリブレーションボタン71を押して、移動せずに水平方向の向きを変更し、パース画像Pが正しい位置に表示された状態でキャリブレーションボタン71を離すと、回転方向の補正値が算出される。
【0088】
垂直方向(標高)の補正に関しては、例えば建造物が本来建つべき位置よりも上方に表示されている場合(GPSセンサ17により、視点位置の標高が実際よりも低く計測された場合)には、携帯端末100の上下方向の(水平方向の軸に関する)回転が補正値の算出に用いられる。
【0089】
すなわち、ユーザは、パース画像Pがユーザから見上げたアングルで表示された状態でキャリブレーションボタン71を押し、水平のアングルに携帯端末100を上下回転させてキャリブレーションボタン71を離す。
【0090】
この瞬間には、建造物のパース画像Pは地上に傾いて着地した状態で表示されている。次に、上記キャリブレーションボタン71の押下時から離した時までの差分の中に上下角の変化が含まれる場合には、携帯端末100は、その角度を、携帯端末100の現在位置座標と、建造物の建築予定の位置座標との間の水平距離に基づき、携帯端末100の上下角誤差に相応する垂直の高さの誤差に換算し、その値を以て補正を行う。その結果、この換算が終了した後に、パース画像Pが鉛直な姿勢を回復する。
【0091】
以上のような機構を実現したことにより、ユーザは、補正に必要な数値を読み取ったり入力する必要がなく、迅速に補正データを取得して利用することができる。
【0092】
‐位置と地形データを用いた高さの補正処理‐
次に、上記
図5のステップ53及びステップ54で示した地形データを用いた高さの補正処理について説明する。
【0093】
GPSセンサ17から得られる緯度・経度のデータと比較して、標高のデータは誤差がより大きくなる傾向にある。そのことの要因として、GPSセンサ17の処理系内部で標高の算出に使用している国際的なジオイドデータが、日本国土地理院が日本付近に関して計測し公開しているジオイドと比較して精度が低いことが推測される。
【0094】
図8は、ジオイドとローカル座標系との関係を示した図である。また
図9は、日本付近のジオイド図を示した図である。
【0095】
ローカル座標系は、ジオイド面への接平面をXY平面としており、地球楕円体に対する等重力面の凹凸を補正したジオイド面からの標高(ジオイド高)が、GPS座標から求めた標高に対応する(
図8)。しかし、日本付近ではジオイド面の凹凸が複雑であり、とりわけ、東日本の太平洋側に関しては、阿武隈山地付近に国内の最高点が存在する一方、日本海溝付近に深い谷があり、その間がジオイドの急斜面となっているため、ジオイドの解像度や精度が、高さ誤差に大きく影響する(
図9)。
【0096】
上述したように、高さの誤差を補正するために、携帯端末100の上下方向の回転による補正を実行することが可能である。本実施形態においてはこれに加えて、視点移動の範囲となる領域の地盤高さ、または市街地であれば道路等の高さを携帯端末100の中にデータとして保有する。携帯端末100は、このデータを用いて、緯度・経度からその地点の地面の高さを求め、これに平均的な歩行者の視点の高さ(例えば1.5m)を加えることにより、視点位置を計算し、これをリアルタイム写真合成に、上述の携帯端末100の回転による高さの誤差補正の代わりに使用することができる。
【0097】
この地形データは、大都市圏や被災地においては、数値地図標高から作成することが可能である。
図10は、この地形データの例を示す。また、この地形データは、団地の造成データから作成することも可能である。
【0098】
視点高さを求めるための地盤高のメッシュ・データは、最高点と最低点の標高差が25.6m以内であれば、0.1mの精度の高さデータを256階調のモノクロ画像として表現し、例えばJPEG形式等の汎用性の高いフォーマットで、例えばクラウド上のサーバ等に比較的小容量で保存されうる。したがって、当該データは、短時間で携帯端末100に配信され、携帯端末100において復原し、位置座標計算に利用することが可能である。
【0099】
三次元データとして作成した過去の町並や将来の団地の地盤面が現状と異なる場合には、それぞれのデータに対応した地面のデータを用いることによって、現在のサイトを歩き回ることにより、恰も過去または計画案の地盤面を歩き回ることが可能となる。
【0100】
図11は、上記三次元モデル描画処理の流れを示したフローチャートであり、このうちステップ81〜ステップ88が、上記移動による誤差補正処理の流れを示す。
【0101】
同図に示すように、CPU11は、キャリブレーションボタン71が押されているか否かを判断する(ステップ111)。
【0102】
キャリブレーションボタン71が押されていると判断した場合(Yes)、CPU11は、当該ボタン71の押下が継続されているか否かを示すホールドフラグがその時点で真か否かを判断する(ステップ112)。
【0103】
ホールドフラグが偽であると判断した場合(No)、CPU11は、ホールドフラグを真に設定する(ステップ113)。
【0104】
続いてCPU11は、その時点における位置座標及び姿勢の状態mを、上記キャリブレーションボタン71の押下時の位置座標及び姿勢の状態hとして記憶する(ステップ114)。
【0105】
一方、上記ステップ111においてキャリブレーションボタン71が押されていないと判断した場合(No)、CPU11は、上記ホールドフラグがその時点で真か否かを判断する(ステップ115)。
【0106】
ホールドフラグが真であると判断した場合(Yes)、CPU11は、ホールドフラグを偽に設定する(ステップ116)。すなわち、CPU11は、この時点でキャリブレーションボタン71からユーザの指が離されたと判断する。
【0107】
続いてCPU11は、記憶されている上記状態hと、現状の状態mの差分を計算し、その値を補正項dに追加する(ステップ117)。
【0108】
そしてCPU11は、現状mの値に補正項dを追加し、建造物の三次元モデル(パース画像P)を描画する(ステップ118)。
【0109】
‐リアルタイム前景処理−
次に、上記パース画像Pの前景処理について説明する。
【0110】
写真合成においては、計画上の建造物を記述した三次元データから作成したパース画像Pと、現況の背景画像を合成するにあたり、建造物よりも手前にある被写体が建造物のパース画像Pにより隠されないように処理する必要がある。
図12Aは、前景の被写体Fがパース画像Pにより隠されてしまっている合成写真を示し、
図12Bは、前景の被写体Fがパース画像Pによって隠されずに正しく表示されている合成写真を示す。
【0111】
図13は、従来の写真合成手法における前景処理を示す。従来の写真合成処理においては、視点位置が固定されていることから、建造物の手前に存在する画像上の被写体を建造物の上に表示して、これを用いて建造物を隠すために、背景画像とは別に、前景画像を予め用意し、背景画像→建造物→前景画像の順に上描き表示する方法を用いていた。ここで使用する前景画像は、建造物よりも手前となる被写体以外の部分を画像処理により透明化することにより、裏側の建造物を隠さないようにするように、手間と時間をかけて準備作業の中で手作業により加工したものである。
【0112】
しかし、本実施形態におけるリアルタイム写真合成においては、絶えず変化する背景画像Bに対して、その都度このような前景画像Fを、視点移動の度に作成することは現実的ではない。
【0113】
そこで、本実施形態に係るリアルタイム前景処理においては、前景画像を使用せず、その代わりに建築予定の建造物の前景となる可能性が高い既存建物(あるいはその部分)を、予め前景モデルとするための三次元データとして作成しておき、これを建造物のパース画像の描画に先だって描画する。
【0114】
図14は、本実施形態におけるパース画像及びその前景の描画処理の流れを示した図である。また
図15は、上記パース画像及びその前景の描画処理を模式的に示した図である。
【0115】
図14Aは背景画像Bが撮像された状態を示し、同
図Bは前景モデルを描画した状態を示し、同
図Cは建造物のパース画像を描画した状態を示す。
【0116】
同
図Bに示すように、前景モデルの三次元データが有する全ての面のカラーを透明とした透明画像Wを描画しておくことにより、この段階では表示画面は何も変化せず、背景画像がまだそのまま表示されている。
【0117】
しかし、このことの効果として、その次に三次元描画される建造物のパース画像Pの内、視点位置から見て前景モデルFの背後となる部分に関しては、前景モデルFの透明の描画処理が優先される結果、描画されずに隠されることとなり、結果的にその部分の背景画像(この場合は手前建物の実写)が表示される(
図14C参照)。
【0118】
この前景モデルFとなる建物の三次元データは、建物全体について詳細に作成する必要はない。
図15に示すように、例えば町並を構成する連担する住宅群の中に1軒分の空地があり、そこに新たな建造物が計画されたとする。携帯端末100は、計画された建造物の三次元モデルを作成する際に、両隣の既存建物の壁面の内、計画された建造物に隣接する(対向する)面Wa及びWbだけのデータを作成する。そして携帯端末100は、これに透明の属性を付けておき、これを建造物のパース画像Pの描画に先だって描画することによって、所期の目的を果たすことができる。
【0119】
図11に戻り、上記リアルタイム前景処理の流れを説明する。
【0120】
CPU11はまず、デプスバッファをクリアし(ステップ119)、パース画像Pにより隠されたくない画面上の隣接建物の壁面の三次元モデルを、全て透明なオブジェクトとしてデプスバッファに描画する(ステップ120)。
【0121】
そしてCPU11は、パース画像Pのモデルを、デプスバッファに不透明なオブジェクトとして描画する(ステップ121)。
【0122】
以上によりリアルタイム写真合成処理が終了する(
図4のステップ44)。
【0123】
図4に戻り、その後、CPU11は、いずれかのセンサの計測値が変化したか否かを判断する(ステップ45のYes)。
【0124】
いずれかのセンサの値が変化したと判断した場合(Yes)、CPU11は、当該変化した値を用いて上記リアルタイム写真合成処理を実行する(ステップ44)。
【0125】
いずれかのセンサの値が変化していないと判断した場合(No)、CPU11は、シャッターボタン72が押下されたか否かを判断する(ステップ46)。
【0126】
シャッターボタン72が押下されたと判断した場合(Yes)、CPU11は、背景画像と共に、その時点におけるGPSセンサ17から取得された位置座標、カメラ16の姿勢(方位及び傾き)、補正値、写真合成に用いた補正後のカメラパラメータ、日時、その他天候等の環境条件、及び背景画像に合成表示されている建造物のパース画像(三次元モデル)の識別情報等を記録する(ステップ47)。
【0127】
シャッターボタン72も押下されていないと判断した場合(No)、CPU11は、ユーザからアプリケーションの終了要求が入力されたか否かを判断し(ステップ48)、終了要求が入力されたと判断した場合には(Yes)、アプリケーションを終了する。
【0128】
(誤差補正における演算手法)
ここで、上記誤差補正における演算手法の一例について、詳細について説明する。
【0129】
本実施形態においては、携帯端末100を、位置に関する3つと、姿勢に関する3つの合計6つの自由度を有する剛体として扱う。
【0130】
携帯端末100の位置と姿勢を表現するために、本処理系においては、
図16に示すように、敷地に固定した、東をX軸、北をY軸、上をZ軸とする三次元座標(x,y,z)を用いる。
【0131】
地面に固定した座標系で、東をx軸、北をy軸とするのは二次元図面から始まった建築CAD等の慣習である。測量では、北をx軸、西をy軸とする。また、写真から始まったCG分野では、東をx軸、上をy軸とする慣習が存在する。
【0132】
表示すべき建物等の位置、方位、形状は、敷地の座標系を用いて表現する。
【0133】
一方、
図17に示すように、携帯端末100に固定した座標軸として、ユーザが画面(表示部14)を手前に横長に水平に構えた姿勢において、右をW、上をU、正面をVとする座標軸を用いる。
【0134】
上記6つの自由度の内、3つは位置に関する座標値である。
【0135】
GPSセンサ17から得られる緯度経度標高を、敷地の座標系に変換した座標値を用いて、視点位置P(x,y,z)を表現する。
【0136】
敷地座標系の原点を、基本位置とする。
【0137】
敷地の原点位置の緯度経度標高は、建築設計に際して基準点測量などにより求められた数値を使用する。
【0138】
GPSセンサ17の計測値から計算される座標値Pmと、敷地原点から計測した座標値Ptの偏差Dを簡便に正しく補正することが、本実施形態の目的である。
【0139】
例えば、敷地原点の位置でGPS計測した計測座標値を補正値D1とすると、計測値からD1を引いた値が正しい敷地座標値である。
【0140】
また、例えばGPS計測値が原点を示す地点の敷地原点から計測した座標値を補正値D2とすると、 計測値にD2を加えた値が正しい敷地座標値である。
【0141】
原点付近に移動せずとも、写真合成画面上でのキャリブレーション操作により計測された偏差により補正することができ、さらに既に得られている補正値の精度を向上することができる。
【0142】
すなわち、キャリブレーションボタン71によるホールド中の移動をdとすると、dをD1から減ずるか、 またはD2に加えることにより補正値を取得し、改善することができる。
【0143】
上記6つの自由度の内、3つは姿勢に関する値である。
【0144】
携帯端末100(剛体)は、上述のとおり、加速度センサ19と、磁気センサ18を有している。
【0145】
加速度センサ19の計測値は、自由落下している時、無重力空間にある時には、端末10の座標系で(0,0,0)となる。机の上に静止して置かれているときには、上方に加速度を机から受けている。よって、水平に置かれているのか、縦に置かれているのかなどを自己認識できる。(携帯端末100に固定された座標系で、上がどちらにあるのかが分かる)。
【0146】
地球上の重力場は、一様ではなく、歪んでいる。例えば、東日本大震災の震源域(海溝、プレート境界)の付近では、地下に密度の高い物質があって、等重力面、即ち海面が地球楕円体に対して、数十mほど凹んでいる。また、阿武隈山中付近では、日本付近で最も等重力面が高くなっている。
【0147】
このため、この付近の山は標高よりも幾何学的形状において高く、東北日本の太平洋岸付近では、海面がかなり東下がりに傾いている。上述のとおり、この等重力面の凹凸の状態は、ジオイドとして計測され、公開されており、このデータを加味することにより、より正確な高さや上方ベクトルを得ることができる。
【0148】
GPSセンサ17により得られる位置座標から、その場所のジオイドを求めることにより、携帯端末100の正確な標高(=歪んだ等重力面からの高さ)や、地球中心の向きを得ることができる。西暦2000年以前の測量データは、明治期に東京付近から作業を始めたこともあり、地球楕円体に対してかなり東下がりに傾いた等重力面(水準器で認識される水平)を地球楕 円体に接する面と考えて作成されているため、複雑な変換を行わないと、GPSセンサ17で計測される世界の座標系とうまくつながらない。
【0149】
磁気センサ19は、上述の通り、磁北を検出する。磁北は地軸の北極(真北)とは一致せず、ずれている。しかも、地下にある鉄分等の分布により、場所場所で偏差が異なっている。この磁北と真北の偏差の地理的分布も国土地理院により計測され、データとして公開されている。GPSにより得られる位置座標と分布図から、その場所における磁北の真北からの偏差を知り、補正することができる。
【0150】
また、三次元的にみた地表の磁場は、水平ではない。しかし、上述のとおり、加速度センサ19により鉛直の向きが計測できるため、それと直交する向きに補正することにより水平な磁北を求める計算が可能である。
【0151】
携帯端末100に固定した座標系を、画面を横長に構えた時の右をW軸、正面をV軸、上をU軸とし、携帯端末100の姿勢は、この座標系で計測した真上(加速度≒敷地座標系のZ軸)と、真北(磁北≒敷地座標系のY軸)の向きから、外部から情報伝達を受けることなしに、自己認識することができる。
【0152】
よって、敷地座標系の各軸が、携帯端末100の座標系から見てどの向きであるかを知ることができる。逆に、敷地の座標系に即して、携帯端末100がどのような向きにあるのかを逆算することができる。
【0153】
一般に、携帯端末100のような剛体の姿勢は、機器に固定された座標軸であるW軸、V軸、U軸方向の 各単位ベクトルのそれぞれの、敷地座標系で計測したx,y,z成分を示す3×3の行列で表現されることが多い。計算処理は単純であるが計算回数が多く、回転の自由度は3しかないため、データの保存方法としては冗長である。
【0154】
一方複素数を4次元に拡張した四元数Q(スカラー成分が1、ベクトル成分が3)を用いても、回転を表現することができる。
【0155】
Qを構成する4成分を(t,x,y,z)と表した時、tをQのスカラー成分、(x,y,z)をベクトル成分と呼ぶ。
Qのベクトル成分の長さとは、√(x
2+y
2+z
2)である。
Qの長さとは、√(t
2+x
2+y
2+z
2)である。
二つの四元数(t
1, x
1, y
1, z
1)と(t
2, x
2, y
2, z
2)の和は、(t
1 + t
2, x
1 + x
2, y
1 + y
2, z
1 + z
2)である。
二つの四元数(t
1, x
1, y
1, z
1)と(t
2, x
2, y
2, z
2)の積は、(t
1*t
2-x
1*x
2 - y
1*y
2-z
1*z
2, t
1*x
2+x
1*t
2 + y
1*z
2-z
1*y
2, t
1*y
2-x
1*z
2 + y
1*t
2+z
1*x
2, t
1*z
2+x
1*y
2 - y
1*x
2+z
1*t
2)である。
【0156】
四元数Q=(t,x,y,z)の逆数(1/Q)は、Qの長さをrとしたとき、 (t/r
2, -x/r
2, -y/r
2, -z/r
2)である。
特に、Qの長さが1である場合、Qの逆数は、スカラー成分をそのままとし、ベクトル成分の符号を反転させるだけで得られる。Q*(Qの逆数)、つまりQ/Qは、(1,0,0,0)となる。
【0157】
四元数Qによるある四元数Vの回転は、Q*V*(Qの逆数)という計算(つまりQ*V/Q)で求められる。この時、Vのベクトル成分は、ある回転軸の回りに一定の角度分回転する。
【0158】
回転を表現するQのベクトル成分をベクトルとしてみた場合、このベクトルの向きは回転軸の向きに等しい。
【0159】
スカラー成分が1で、ベクトル成分がすべてゼロの四元数Q=(1,0,0,0)は、回転なしを意味する。
【0160】
また、スカラー成分がゼロでベクトル成分の長さが1の場合は、180度回転を表す。
Q=(0,x,y,z), x
2+y
2+z
2 = 1
【0161】
その場合も、ベクトル成分が回転軸を表し、ベクトル成分の符号を全て反転させた回転-Q=(0,-x,-y,-z)も同じ結果をもたらす。
【0162】
それ以外の場合には、ベクトル成分を軸とするある角度Ψ(0〜180°)の回転を表す。 この場合、Qのスカラー成分tはcos(Ψ/2)であり、ベクトル成分の長さはr=sin(Ψ/2)である。
Q= (cos(Ψ/2), Px sin(Ψ/2), Py sin(Ψ/2), Pz sin(Ψ/2))
ここでPは、長さ1の、回転軸を表すベクトルで、Ψは回転角である。
【0163】
例えば、携帯端末が水平に回転する場合(ビデオカメラで言うパン)、回転軸は鉛直線である。
P=(0,0,1)
回転角が60度なら、Q=(約0.866, 0, 0, 0.5)
(実成分の約0.866は、cos30°で、(√3)/2、z成分は1×sin30°で1/2)
Qの逆数は、(約0,866, 0, 0, -0.5)
である。
【0164】
スカラー成分tはベクトル成分から、
t = cos(Ψ/2) = √(1-x
2-y
2-z
2)
として計算することができるため、スカラー成分をデータとして保存する必要はない。
【0165】
携帯端末100の姿勢は、ある基本姿勢(例えば、真北に向かって水平に構えた姿勢)に対する回転として表現することができる。よって、この回転を表す一つの四元数Qによって表現することができる。さらに、Qの長さが1であると限定しても一般性は失われないことから、 データとしては、そのベクトル成分である3の数値を保存するだけで十分である。Qが決まれば、Q*(0,0,1,0)/Q:携帯端末100のY軸のベクトル(注視ベクトル)の、敷地座標系からみた各成分Q*(0,0,0,1)/Q:携帯端末100のZ軸のベクトル(上方ベクトル)の、敷地座標系からみた各成分により、携帯端末100の姿勢が決まる。
【0166】
Q1で表現される姿勢にある携帯端末100をさらに、Q2だけ回転させた後の姿勢がQ3であるとすると、
Q3=Q2*Q1であり、従って、例えば基本姿勢における注視ベクトルVは、
Q2*(Q1*V/Q1)/Q2 = Q3*V/Q3と変換される。
【0167】
このような回転を表す四元数のベクトル成分を構成する3値だけをデータとして保存する方法を用いることにより、回転を繰り返した場合に、回転に関する誤差以外の、物体が変形(拡大、縮小、アフィン変換)する誤差を防ぐことができる。またマトリクスを用いる場合よりも、計算回数を縮減することができる。
【0168】
計測された携帯端末100の姿勢は、本処理系においては、敷地座標系で表現した注視ベクトルと上方ベクトルの形で表示系に伝えられる。
【0169】
携帯端末100の姿勢はオイラー角を用いて、基本姿勢からヨー角(Y)水平回転し、ピッチ角(P)上下回転し、ロール角(R)横回転することでも表現できる。磁気センサ19と加速度センサ18から計算されたロールR、ピッチP、ヨーYを用いて、回転を表す四元数Qをさらに次のように計算することができる。
Q=(cos(R/2),0,sin(R/2),0)*(cos(P/2),sin(P/2),0,0)*(cos(Y/2),0,0,sin(Y/2))
この回転は、基本姿勢からまずヨー角だけU軸まわりに方位を回転させ、次にW軸まわりにピッチ角だけ回転させ、最後にV軸周りにロール角だけ回転させる手順に対応する。
【0170】
加速度センサ19及び磁気センサ18から計算される姿勢Qmと、敷地座標系による姿勢との偏差Qdを正しく補正することが、本実施形態の目的である。例えば、敷地座標系の基本姿勢に携帯端末を置いた時にセンサから計測値で計算した姿勢を、誤差Qd1とすると、任意の姿勢の計測値から求めた姿勢Qmを、Qm/Qd1に補正することにより正しい姿勢が得られる。
【0171】
また、センサ計測値が基本姿勢に対応する値を得る姿勢を敷地座標系で計測した姿勢をQd2とすると、任意の姿勢の計測値から求めたQを、Q*Qd2に補正することにより正しい姿勢、すなわちより正確な表示が得られる。
【0172】
Qd1は、正しい基本姿勢から計測値上の基本姿勢への回転を示す四元数である。またQd2は、計測値上の基本姿勢から、正しい基本姿勢への回転を示す四元数である。Qd1とQd2は、Qd1*Qd2=1、言い換えるとQd2=1/Qd1の関係にある。
【0173】
ユーザにより合成表示結果を見て補正を行うためのホールド操作が行われている間に、Qdの回転が行われた場合には、Qd1をQdで除するか、またはQd2にQdに乗ずることにより、補正値Qd1またはQd2の精度をより高めることができる。
【0174】
ホールド操作の前の上方ベクトルと注視ベクトルの計測値を四元数で表したものをU1,V1とし、 ホールドが解除された時点における上方ベクトルと注視ベクトルの計測値を四元数で表したものをU2,V2とすると、右方向ベクトルはそれぞれ、W1=V1*U1, W2=V2*U2として求められる。
【0175】
これらを用いて、ホールド期間中の回転Qdの自乗を、
Qd
2 = (W2*W1+V2*V1+U2*U1+(1,0,0,0))*(-0.5,0,0,0)
として求めることができる。
【0176】
但し、Qd
2のスカラー成分が-1となる場合、すなわち180°回転の場合には、Qd
2のベクトル成分が 全てゼロとなるために、Qdが求められない。そこで、このような場合には、Qdのベクトル成分を、(V2-V1)*(U2-U1)のベクトル成分または、(W2-W1)*(V2-V1)のベクトル成分の内、長さが大きい方を正規化する方法で直接求め、スカラー成分をゼロとする。
【0177】
Qdは、Qd
2からは、三角関数を使用せずに、以下の手順で計算することができる。
Qd
2の成分を、(T,X,Y,Z)、Qdの成分を(t,x,y,z)とすると、tは√((1+T)/2)である。
また、k = (√((1-T)/2))/(√(1-T
2))とすると、
x = kX, y = kY, z = kZとなる。
但し、Tが1の場合には、k = 0とする。また、Tが-1となる場合には、上記[0176]の処理で完結するため、この処理は必要ではない。
【0178】
[変形例]
本発明は上述の実施形態にのみ限定されるものではなく、本開示の要旨を逸脱しない範囲内において種々変更され得る。
【0179】
上述の実施形態においては、キャリブレーションボタン71が押下された時にパース画像が固定され、押下が維持された後(ロングタッチ)、指がリリースされた時に補正値が算出された。しかし、単にボタン71のタッチ操作によってパース画像が固定され、次のタッチ操作によって補正値が算出されてもよい。
【0180】
また、パース画像の固定のためのボタンと、補正値算出のためのボタンが別個に用意されてもよい。すなわち、パース画像の固定のための操作と、補正値算出のための操作とが連関していなくてもよい。
【0181】
上述の実施形態では、GPSセンサ、磁気センサ、加速度センサの各値が補正されたが、これらのうちいずれか1つまたは2つの値が補正されてもよい。
【0182】
上述の実施形態の各フローチャートで示した処理は一例であり、それ以外の処理によっても本発明の目的を達成することができる。