以下に、本開示の情報処理装置、情報処理方法及びプログラムについて、その実施形態を示す図面に基づいて具体的に説明する。
(実施形態1)
図1は情報処理装置の構成例を示すブロック図である。情報処理装置10は、パーソナルコンピュータ、サーバコンピュータ、大型計算機上で動作する仮想マシン等である。情報処理装置10は、制御部11、記憶部12、通信部13、入力部14、表示部15等を含み、これらの各部はバスを介して相互に接続されている。制御部11は、CPU(Central Processing Unit )、MPU(Micro-Processing Unit )又はGPU(Graphics Processing Unit)等の1又は複数のプロセッサを含み、本実施形態にかかるプログラムを実行する演算制御装置である。制御部11は、記憶部12に記憶してある制御プログラムを実行すると共に、バスを介して情報処理装置10を構成するハードウェア各部の動作を制御する。これにより、制御部11は、情報処理装置10が行うべき種々の制御処理及び情報処理を行う。
記憶部12は、RAM(Random Access Memory)、フラッシュメモリ、ハードディスク、SSD(Solid State Drive )等を含む。記憶部12は、制御部11が実行する制御プログラム及び制御プログラムの実行に必要な各種のデータ等を予め記憶している。また記憶部12は、制御部11が制御プログラムを実行する際に発生するデータ等を一時的に記憶する。記憶部12に記憶される制御プログラムには、本開示のプログラムである方位補正プログラムPが含まれ、記憶部12に記憶されるデータには、後述するカメラ20によって撮影されたパノラマ画像を蓄積するパノラマ画像DB12aが含まれる。
記憶部12に記憶される方位補正プログラムP及びパノラマ画像DB12aは、例えば通信部13を介して外部装置から取得されて記憶部12に記憶される。情報処理装置10が可搬型記憶媒体に記憶された情報を読み取る読取部等を備える場合、記憶部12に記憶される方位補正プログラムP及びパノラマ画像DB12aは、可搬型記憶媒体から読み出されて記憶部12に記憶されてもよい。なお、パノラマ画像DB12aは、情報処理装置10に接続された外部の記憶装置に記憶されてもよく、ネットワークNを介して情報処理装置10と通信可能な記憶装置に記憶されてもよい。
通信部13は、有線通信又は無線通信によって、インターネット、公衆通信回線又はLAN(Local Area Network)等のネットワークNに接続するためのインターフェイスであり、ネットワークNを介して外部装置との間で情報の送受信を行う。入力部14は、キーボード及びマウス等を含み、ユーザによる操作入力を受け付け、操作内容に対応した制御信号を制御部11へ送出する。表示部15は、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイ等であり、制御部11からの指示に従って各種の情報を表示する。入力部14及び表示部15は一体として構成されたタッチパネルとすることもできる。
以下に、本実施形態の情報処理装置10によって処理されるパノラマ画像及びパノラマ画像を撮影するカメラ20について説明する。カメラ20は、撮影装置の一例である。カメラ20は、1回のシャッターで前後左右上下の撮影を行う全天球カメラを使用する。図2はカメラ20の構成例を示すブロック図である。カメラ20は、制御部21、記憶部22、通信部23、シャッターボタン24、撮影部25、センサ26等を含み、これらの各部はバスを介して相互に接続されている。制御部21は、CPU、MPU又はGPU等の1又は複数のプロセッサを含み、本実施形態にかかるプログラムを実行する演算制御装置である。制御部21は、記憶部22に記憶してある制御プログラムを実行すると共に、バスを介してカメラ20を構成するハードウェア各部の動作を制御する。これにより、制御部21は、カメラ20が行うべき種々の制御処理及び情報処理を行う。
記憶部22は、RAM、フラッシュメモリ、ハードディスク、磁気テープ等を含む。記憶部22は、制御部21が実行する制御プログラム及び制御プログラムの実行に必要な各種のデータ等を予め記憶している。また記憶部22は、制御部21が制御プログラムを実行する際に発生するデータ等を一時的に記憶する。
通信部23は、有線通信又は無線通信によってネットワークNに接続するためのインターフェイスであり、ネットワークNを介して外部装置との間で情報の送受信を行う。シャッターボタン24は、静止画を撮影する指示を受け付けるボタンである。なお、制御部21は、ネットワークNを通じてシャッターボタン24の操作を受け付けてもよい。撮影部25は、撮影を行う光学系と撮像素子とを含む。制御部21は、シャッターボタン24から受け付けた指示に基づいて撮像素子が取得したデータに対して、各種画像処理を行い、撮影画像を生成する。センサ26は、例えば加速度センサ、地磁気センサ、GPS(Global Positioning System)等を含み、カメラ20の位置(撮影位置)、カメラ20の正面方向(撮影方向)の方角(方位)、及び重力方向(即ち、鉛直方向の下向き)を基準としたカメラ20の傾き等を検出する。
図3はカメラ20の外観を示す模式図である。本実施形態のカメラ20は、略長方形板状の板状部28を有する。以後の説明において、板状部28の長辺方向を上下方向に向けた状態で説明する。なお、板状部28の長辺方向を上下方向に向けた状態のカメラ20において、板状部28の第1広面281側をカメラ20の前側、第2広面282側をカメラ20の後側、板状部28の短辺方向をカメラ20の左右方向とそれぞれ記載する。第1広面281の上寄りに、ドーム状の第1レンズ271が設けられている。第2広面282の上寄りに、ドーム状の第2レンズ272が設けられている。第1レンズ271及び第2レンズ272の内側には、図示しない複数のレンズ及びプリズム等の光学部品が配置されており、180度以上の視野角を有する光学系を形成している。以後の説明では、第1レンズ271側の光学系の光軸を第1光軸、第2レンズ272側の光学系の光軸を第2光軸とそれぞれ記載する。第1光軸と第2光軸とは、同一の直線上に配置されている。また、第1広面281にシャッターボタン24が配置されている。
図4は撮影画像の構成を説明するための模式図である。図4Aは、全天球画像を示す模式図である。図4Bは、図4Aの全天球画像を正距円筒図法により展開した画像を示す模式図である。カメラ20の制御部21は、シャッターボタン24から受け付けた指示に基づいて撮影部25による撮影を行った場合、第1光軸側で撮影した画像と第2光軸側で撮影した画像とを合成することにより、図4Aに示すように撮影位置を撮影中心C点とする全天球画像を生成する。
全天球画像上の各画素の位置を定める座標系について説明する。図3を用いて説明したように、カメラ20は板状部28の長辺方向を上下方向に向けた状態で撮影する。以後の説明では、カメラ20の前後左右方向を含む面を水平面と記載する。全天球画像上の画素の位置は、直交座標系及びローカル極座標系により表現することができる。直交座標系は、図3に示した右方向をX軸の正側、上方向をY軸の正側、後ろ方向をZ軸の正側とする右手系の直交座標系を用いる。ローカル極座標系は、方位角φ及び天頂角θ、並びに撮影中心C点からの距離rによって座標が示される座標系を用いる。ローカル極座標系の方位角は、第2光軸側(Z軸の正側)を基準として、水平面内の反時計回りの角度φを示す。第1光軸(Z軸の負側)は、方位角φがπラジアンの位置に存在する。ここでπは円周率を意味する。第2光軸は、方位角φが0ラジアンかつ2πラジアンの位置に存在する。ローカル極座標系の天頂角は、撮影中心C点から天頂への上方向(Y軸の正側)を基準として、撮影中心C点を中心として下に向かう角度θを示す。上方向は、天頂角θが0ラジアンの位置に存在する。下方向(Y軸の負側)は、天頂角θがπラジアンの位置に存在する。全天球画像上の任意の画素aの位置は、直交座標系で表した座標(xa ,ya ,za )と、ローカル極座標系で表した座標(rLa,θLa,φLa)とによって表現することができる。なお、座標(x,y,z)及び座標(rL ,θL ,φL )は以下の(1)式及び(2)式によって相互に変換可能である。
カメラ20の制御部21は、全天球画像を方位角φ=0の線に沿って切断して、正距円筒図法により図4Bに示すように横軸を方位角φとし縦軸を天頂角θとする平面に展開した長方形の撮影画像(以下では、パノラマ画像という)を生成する。即ち、全天球画像は、実空間における撮影方向と水平ないずれかの方向(ここでは、カメラ20の正面方向)を中心として展開されてパノラマ画像が生成される。このパノラマ画像を構成する各画素には、全天球画像における各画素の輝度(画素値)が割り当てられる。なお、図4Bに示すように、長方形(平面)のパノラマ画像は、左下を原点(0,0)とし、原点(0,0)は、方位角φが2πラジアンで天頂角θがπラジアンの位置の画素を示す。また、パノラマ画像は、右方向に方位角φが小さくなり、パノラマ画像の右端は方位角φが0ラジアンの位置の画素であり、上方向に天頂角θが小さくなり、パノラマ画像の上端は天頂角θが0ラジアンの位置の画素である。
カメラ20の制御部21は、撮影処理を行った場合、センサ26によって撮影中心C点(撮影位置)の位置情報、撮影時のカメラ20の撮影方向の方角及びカメラ20の傾きを検出する。そして制御部21は、図4Bに示すパノラマ画像に、検出した位置情報、撮影方向の方角及び傾きを含む付加データを付加して通信部23から情報処理装置10へ送信する。情報処理装置10の制御部11(画像取得部)は、カメラ20から送信されたパノラマ画像及び付加データを通信部13にて取得する。なお、カメラ20の制御部21は、図4Aに示す全天球画像の撮影画像を情報処理装置10へ送信し、情報処理装置10が、全天球画像から、図4Bに示すパノラマ画像を生成する処理を行ってもよい。情報処理装置10の制御部11は、カメラ20から取得した付加データとパノラマ画像とを対応付けてパノラマ画像DB12aに記録する。カメラ20は、Exif(Exchangeable image file format)形式を使用することにより、付加データと撮影画像とを一つのファイルで送信することが可能である。
カメラ20は撮影によって画像データ(撮影画像データ)を取得するが、以下では画像データを単に画像という場合がある。従って、撮影画像は撮影画像データを意味する場合があり、パノラマ画像はパノラマ画像データを意味する場合がある。撮影画像は、複数の画素を含み、撮影画像データは、各画素の撮影画像中の位置(座標)を示す位置情報と各画素の輝度(画素値)とを対応付けて有する。撮影位置の位置情報は、例えばGPSによって検出される位置の情報であってもよく、撮影空間内の任意の位置を基準とした位置の情報であってもよい。撮影位置、撮影方向の方角及び傾きはそれぞれ、カメラ20に内蔵されているセンサ26により測定されてもよく、また、外部の他のセンサ等により測定されてカメラ20又は情報処理装置10へ送信されてもよい。
本実施形態では、カメラ20を用いて、賃貸住宅及び販売住宅等の不動産物件の部屋、ホテル及び民宿等の宿泊施設の部屋等を撮影する。カメラ20を用いて撮影する空間(実空間)は、博物館、美術館、テーマパーク、アミューズメント施設、観光地、商業施設等であってもよい。以下では、略矩形の部屋を撮影対象の空間として説明する。
図5はカメラ20の撮影位置の例を示す模式図であり、撮影対象の部屋を天井側から見た状態を示している。図5に示す撮影対象の部屋にはドア、カウンター、植物、ソファー、階段等が設置されている。本実施形態では、例えば図5中の黒丸で示す2箇所で撮影を行い、一方の撮影位置(図5における左側の撮影位置)を第1撮影位置とし、他方の撮影位置(図5における右側の撮影位置)を第2撮影位置とする。撮影位置は図5に示す例に限らず任意の2箇所とすればよく、また3箇所以上としてもよい。また本実施形態では、複数の撮影位置において、床面からの撮影高さは同じとし、例えば1m程度とするが、これに限定しない。立った状態の大人の目線の高さ、又は椅子に座った状態の大人の目線の高さ等の任意の高さから撮影を行ってもよい。カメラ20が撮影を行う位置及び高さは、カメラ20に内蔵されたセンサ26又はカメラ20を外部から監視するセンサにより測定される。またカメラ20を特定の位置及び高さに固定する治具等を利用して撮影を行ってもよい。また本実施形態では、複数の撮影位置において、カメラ20の上下方向を撮影空間における鉛直方向に一致させた状態で撮影を行う。
なお、それぞれの撮影位置において床面からの高さが異なる状態で撮影し、撮影後のパノラマ画像における天頂角方向(上下方向)を補正して、同じ高さから撮影した状態のパノラマ画像を生成してもよい。例えば、撮影後のパノラマ画像において、同一の被写体が、それぞれの画像中の上下方向における同じ位置となるように、パノラマ画像の各画素を上下方向に移動させる補正を行ってもよい。また、カメラ20のセンサ26にて撮影時のカメラ20の傾きを検出し、検出した傾きを用いて撮影後のパノラマ画像における鉛直方向の傾きを補正(天頂補正)することにより、それぞれの撮影位置で撮影したパノラマ画像を、画像の上下方向が撮影空間の鉛直方向に一致する画像に補正してもよい。
図6及び図7は、パノラマ画像の例を示す模式図である。図6Aに示すパノラマ画像は、図5に示す第1撮影位置において所定の高さにおける水平面上で矢符D1で示す方向にカメラ20の前側を向けて(第1光軸を一致させて)撮影された画像の例であり、図6Bに示すパノラマ画像は、第2撮影位置において所定の高さにおける水平面上で矢符D2で示す方向にカメラ20の前側を向けて撮影された画像の例である。また図7Aに示すパノラマ画像は、第1撮影位置において所定の高さにおける水平面上で矢符tで示す方向(第2撮影位置から第1撮影位置への方向)にカメラ20の前側を向けて撮影された画像の例であり、図7Bに示すパノラマ画像は、第2撮影位置において所定の高さにおける水平面上で矢符tにて示す方向にカメラ20の前側を向けて撮影された画像の例である。以下では、カメラ20の前側(正面方向)をカメラ20の撮影方向という。
カメラ20は、カメラ20の正面方向の景色が画像中の左右方向の中央部に写り、カメラ20の後側(背面方向)の景色が画像中の左右端部に写るパノラマ画像を生成する。またカメラ20は、撮影空間の鉛直方向が画像の上下方向に一致し、撮影位置(撮影高さ)が画像の上下方向の中央に一致するパノラマ画像を生成する。よって、それぞれの撮影位置において同じ撮影方向(図5中の矢符tで示す方向)で撮影を行った場合、図7A,Bに示すように、撮影位置と同じ高さの被写体は、それぞれのパノラマ画像の上下方向の中央部に写る。また、矢符tで示す方向(撮影方向)に存在する被写体FPは、それぞれのパノラマ画像の中央部に写り、矢符tで示す方向の反対方向(カメラ20の背面方向)に存在する被写体は、それぞれのパノラマ画像の左右端部に写る。一方、それぞれの撮影位置において異なる方角を撮影方向(図5中の矢符D1,D2で示す方向)として撮影を行った場合、図6A,Bに示すように、同じ被写体が画像中の方位角方向(左右方向)の異なる位置に写る。図6A,Bに示すように、それぞれの画像中心に写る被写体が、撮影位置を結ぶ方角の被写体でないパノラマ画像を切り替えて表示する場合、画像の遷移を滑らかに行うことができない。また、このようなパノラマ画像を合成して表示する場合、合成後のパノラマ画像に方位角方向のブレが生じ、鮮明なパノラマ画像を提供できない。
そこで、本実施形態の情報処理装置10は、図6A,Bに示す画像のように画像中心に写る被写体のそれぞれの撮影位置からの方角が、撮影位置を結ぶ方角に一致しない被写体であるパノラマ画像に対して補正処理を行い、図7A,Bに示す画像のように画像中心に写る被写体が、それぞれの撮影位置からの方角が、撮影位置を結ぶ方角に一致する被写体であるパノラマ画像を生成する。従って、本実施形態の情報処理装置10によって処理されるパノラマ画像は、それぞれの撮影位置において、撮影位置(カメラ20)の床面からの高さを一致させ、カメラ20の上下方向を撮影空間の鉛直方向に一致させた状態で撮影された画像であるが、それぞれの撮影位置でカメラ20の撮影方向の方角は一致していなくてもよい。即ち、それぞれの撮影位置において、カメラ20の前後方向及び左右方向は一致していなくてもよい。また、本実施形態の情報処理装置10は、図6A,Bに示すようなパノラマ画像を、図7A,Bに示すようなパノラマ画像にそれぞれ補正する際に、図6A,Bのパノラマ画像において、第2撮影位置から第1撮影位置への方向(図5中の矢符tの方向)に存在する被写体FPが写っている位置を特定する必要がある。この被写体FPの画像中の位置を、以下では極点という。
次に、情報処理装置10が行う補正処理についてフローチャートに基づいて説明する。図8は、情報処理装置10による補正処理の手順の一例を示すフローチャート、図9は、補正処理に含まれる極点特定処理の手順の一例を示すフローチャート、図10~図18は、情報処理装置10による補正処理を説明するための模式図である。以下の処理は、情報処理装置10の記憶部12に記憶してある方位補正プログラムPを含む制御プログラムに従って制御部11によって実行される。なお、本実施形態では、以下の処理を制御部11が制御プログラムを実行することにより実現するが、これらの一部を専用のハードウェア回路で実現してもよい。
以下では、図5に示す撮影空間における第1撮影位置で撮影した図6Aに示すパノラマ画像を第1パノラマ画像といい、第2撮影位置で撮影した図6Bに示すパノラマ画像を第2パノラマ画像という。そして、図6A,Bに示すように第1撮影位置及び第2撮影位置においてそれぞれ異なる方角を撮影方向として撮影した第1パノラマ画像及び第2パノラマ画像を、第2撮影位置から第1撮影位置に向かう方向に存在する被写体FPが画像の中央に位置するパノラマ画像に補正する処理について説明する。
情報処理装置10の制御部11は、補正処理を行うべきパノラマ画像をパノラマ画像DB12aから読み出す(S1)。補正処理を行うべきパノラマ画像は、入力部14又は外部装置を介して指定される。処理対象のパノラマ画像は、例えば同じ撮影空間内の異なる撮影位置で撮影されたパノラマ画像であり、図5に示す撮影空間における2箇所の撮影位置で撮影されたパノラマ画像とする。第1パノラマ画像及び第2パノラマ画像は、それぞれの撮影位置において、床面からの高さが同一であり、カメラ20の上下方向を撮影空間の鉛直方向に一致させた状態で撮影された画像である。即ち、画像の上下方向が撮影空間の鉛直方向に一致し、撮影高さが画像の上下方向の中央に一致する画像である。なお、撮影後のパノラマ画像に対して、例えばパノラマ画像に付加された付加データ(撮影方向の傾き)に基づく天頂補正を行うことにより、同じ高さの撮影位置で、カメラ20の上下方向を撮影空間の鉛直方向に一致させた状態で撮影した画像を生成してもよい。また、第1パノラマ画像及び第2パノラマ画像は、それぞれの撮影位置でカメラ20の撮影方向の方角は一致していなくてよい。
制御部11は、パノラマ画像と共に、それぞれのパノラマ画像に付加された付加データをパノラマ画像DB12aから読み出す。そして、制御部11(向き補正部)は、読み出した付加データに基づいて、読み出した2つのパノラマ画像に対して、それぞれの撮影位置からの撮影方向が同一の方角(方位)となるように画像の向きを補正する補正処理を行う(S2)。例えば図10Aに矢符D3で示すように、それぞれの撮影位置からの撮影方向が同一の方角となるように、第1パノラマ画像及び第2パノラマ画像の向きを補正する。例えば付加データに含まれる撮影方向の方角(向首方向)は、北向きを0度、東向きを90度、南向きを180度、西向きを270度とそれぞれし、0度以上360度未満の値で示されている。よって、制御部11は、撮影方向の方角を示す値に基づいて、それぞれのパノラマ画像を水平方向(方位角方向)にスクロール(移動)することにより、例えば撮影位置から北方向にある被写体が画像の中央に写るパノラマ画像を生成する。これにより、撮影方向を北向きとして撮影した状態に補正された第1パノラマ画像及び第2パノラマ画像が得られる。なお、第1パノラマ画像及び第2パノラマ画像における撮影方向の方角は、北向きに補正する構成に限らず、同一の方角であればよい。
例えば向首方向がφC 度(ただし0≦φC <360)であった場合、パノラマ画像の幅(左右方向の長さ)をW画素とすると、以下の(3)式によってスクロール量S(移動させる画素数)が算出される。制御部11は、図10Bに示すように、読み出した2つのパノラマ画像のそれぞれに対して、各画素をそれぞれ、算出したスクロール量Sだけ右方向にスクロールする処理を行う。なお、図10Bの下側に示す画素x0 のように、スクロール量Sだけ移動させた場合に画像の右端からはみ出る画素については、はみ出した量だけ画像の左端から移動させた位置x1 に移動させる。パノラマ画像において右方向をx軸とした場合、スクロール前のパノラマ画像の各画素のx座標値をx0 とすると、スクロール後のパノラマ画像の各画素のx座標値x1 は、以下の(4)によって算出できる。なお、modは剰余演算子を表し、AmodBは、AをBで割った余りを示す。よって、制御部11は、(4)式を用いて、パノラマ画像の各画素x0 の位置(x座標値)から、スクロール後のパノラマ画像の各画素x1 の位置を算出する。制御部11は、パノラマ画像の各画素x0 の画素値を、算出したスクロール後のパノラマ画像の各画素x1 の位置に移動させることにより、図11A,Bに示すようにそれぞれの撮影位置からの撮影方向が同一の方角となるパノラマ画像を生成する。なお、図11Aは、図10Aに示すように第1撮影位置から矢符D3で示す撮影方向に撮影した状態のパノラマ画像であり、図11Bは、第2撮影位置から矢符D3で示す撮影方向に撮影した状態のパノラマ画像である。
S=φC /360×W …(3)
x1 =(x0 +S)modW …(4)
次に制御部11は、図11A,Bに示すように撮影位置からの撮影方向が同一の方角となるように補正された第1パノラマ画像及び第2パノラマ画像に基づいて、第1パノラマ画像及び第2パノラマ画像のそれぞれにおける極点の位置を特定する(S3)。極点は、第1パノラマ画像及び第2パノラマ画像のそれぞれにおいて、第2撮影位置から第1撮影位置への方向(図5中の矢符tの方向)に存在する被写体(図5では被写体FP)が写っている位置である。なお、ここでの第1パノラマ画像及び第2パノラマ画像は、それぞれの撮影位置において床面から同じ高さで撮影したものであるので、極点は、画像の上下方向の中央のいずれかに存在する。即ち、図11A,Bに示す第1パノラマ画像及び第2パノラマ画像において、それぞれの極点は、直線CL上の異なる位置に存在する。
図9に示す極点特定処理において、制御部11(抽出部)はまず、ステップS2で画像の向きを補正した第1パノラマ画像及び第2パノラマ画像から、画像の上下方向の中央の直線CL上に並ぶ画素を抽出して画素列を生成する(S11)。なお、制御部11は、直線CL上に並ぶ画素による画素列を生成してもよく、直線CLの延伸方向に並ぶ画素から所定数の画素毎に画素を間引いた画素列を生成してもよく、また、直線CLの延伸方向に並ぶ複数の画素毎の平均画素値による画素列を生成してもよい。なお、生成する画素列の要素数を減らした場合、以降の処理における演算量を減らすことができる。ここでは、制御部11は、図12A,B中の矩形で示すように、直線CLを中心として画像の上下方向に所定画素数の高さの領域に含まれる画素を抽出し、直線CLの延伸方向に所定数の画素毎の平均画素値を算出し、算出した平均画素値による画素列を生成する。例えばパノラマ画像の高さ(上下方向の長さ)が2688画素であり、幅(左右方向の長さ)が5376画素である場合、制御部11は、直線CLを中心として画像の上下方向に100画素の高さの領域に含まれる画素を抽出し、直線CLの延伸方向に32画素毎(即ち、100画素×32画素毎)の平均画素値を算出し、要素数168の画素列を生成する。なお、制御部11は、パノラマ画像から画素を抽出する領域に対して、ローパスフィルタ処理を行い、パノラマ画像からノイズ及び高周波成分を除去してもよい。この場合、パノラマ画像におけるノイズ及び高周波成分による影響を低減できる。
第1パノラマ画像及び第2パノラマ画像は、撮影高さが同じ撮影位置から撮影した状態の画像であるので、画像の上下方向の中央にはそれぞれ、撮影位置での水平面上に存在する被写体が写っている。従って、第1パノラマ画像から抽出した画素列と、第2パノラマ画像から抽出した画素列とは、同じ被写体(撮影位置での水平面上に存在する被写体)が異なる位置に写っている。よって、情報処理装置10は、第1パノラマ画像から抽出した画素列と、第2パノラマ画像から抽出した画素列とにおいて、同じ被写体が写っている画素の対応付けを行う。本実施形態の情報処理装置10は、例えばDynamic Time Warping(DTW)の手法を用いて、2つの画素列における同じ被写体の画素の対応付けを行う。具体的には、情報処理装置10は、2つの画素列において、画素列の各画素を所定画素数ずつシフトさせながら、2つの画素列の類似度を示す適合率を算出し、シフト量s(方位角の位相φと等価)に応じた適合率の変化ρ(s)を算出する。なお、本実施形態では、DTWにおける処理中に得られるディスタンスマトリクスの最小パスを利用して、2つの画素列の適合率を算出する。これにより、情報処理装置10は、2つのパノラマ画像における撮影方角と水平に並ぶ画素において、各画素位置における類似度を算出できる。
まず制御部11は、画素列の各画素をシフトさせるシフト量sを0に設定する(S12)。そして制御部11は、第1パノラマ画像から抽出した画素列(以下では第1画素列という)と、第2パノラマ画像から抽出した画素列(以下では第2画素列という)との間のコストマトリクスを作成する(S13)。図13はコストマトリクスの例を示しており、制御部11は、画素列の要素数N(例えばN=168)に対応して、N×Nの配列を用意する。配列の各要素には、第1画素列の各画素(各要素)の画素値(ここでは、所定数の画素の平均画素値)と、第2画素列の各画素の画素値との差異が格納されることにより、コストマトリクスが作成される。第1画素列の画素f(i)と第2画素列の画素r(j)とはそれぞれRGBの各値を有しており、画素f(i)のRGB値を(Rfi,Gfi,Bfi)とし、画素r(j)のRGB値を(Rrj,Grj,Brj)とした場合、制御部11は、2つの画素f(i),r(j)間のコストCとして、例えば以下の(5)式によってRGB値のユークリッド距離を算出する。なお、制御部11は、2つの画素間のコストCとして、RGB値のユークリッド距離の二乗等を算出してもよい。
ここで、第1パノラマ画像及び第2パノラマ画像は、それぞれの撮影位置からの撮影方向が同じ方角であるので、第1画素列における極点と第2画素列における極点とは、画素列の左側又は右側の同じ側に存在する。よって、制御部11は、図13のコストマトリクスにおいてハッチングで示す領域、具体的には左下領域及び右上領域における要素に対応するコストCのみを算出すればよい。なお、制御部11は、コストマトリクスの全領域における要素に対応するコストCを算出してもよい。
次に制御部11は、図13においてハッチングで示す左下領域及び右上領域における各要素に対応するコストCが算出されて格納されたコストマトリクスC(i,j)に基づいて、第1画素列と第2画素列との間のディスタンスマトリクスD(i,j)を作成する(S14)。ディスタンスマトリクスの各要素は、コストマトリクスの左下領域及び右上領域のそれぞれにおいて、各領域の左下の要素を基点D(0,0)とし、各要素D(i,j)に到達するまでのコストを累積した値を格納する。なお、基点D(0,0)から各要素D(i,j)に到達するパス(経路)は多数存在するが、ディスタンスマトリクスの各要素には、各要素D(i,j)に到達するための最小コストが格納される。
図14はディスタンスマトリクスの例を示しており、制御部11は、コストマトリクスと同様に、画素列の要素数Nに対応してN×Nの配列を用意する。そして制御部11は、ディスタンスマトリクスの左下領域において左下の要素D(0,0)に、コストマトリクスの要素C(0,0)のコストを格納する。次に制御部11は、図14A中の上向きの矢符で示すように、左下領域における左端の1列の要素D(0,1)~要素D(0,N/2-1)のそれぞれに、直下の要素D(0,j-1)に、自身の要素に対応するコストC(0,j)を加算した値を格納する。同様に、制御部11は、図14A中の右向きの矢符で示すように、左下領域における下端の1列の要素D(1,0)~要素D(N/2-1,0)のそれぞれに、左隣の要素D(i-1,0)に、自身の要素に対応するコストC(i,0)を加算した値を格納する。
次に制御部11は、左下領域における左端及び下端以外の各要素D(i,j)のそれぞれについて、図14B中の上向きの矢符で示すように左側から順に、対応するディスタンスを算出する。ここでは、制御部11は、各要素D(i,j)について、この要素の左下の要素のディスタンスD(i-1,j-1)、左隣の要素のディスタンスD(i-1,j)、直下の要素のディスタンスD(i,j-1)のそれぞれに、自身の要素に対応するコストC(i,j)を加算し、最小値となる値を各要素のディスタンスD(i,j)とする。なお、このとき、制御部11は、左下の要素のディスタンスD(i-1,j-1)に対しては、自身の要素のコストC(i,j)に適宜の係数を乗算した上で加算してもよい。具体的には、制御部11は、以下の(6)式に示す3つの値の内の最小値を、ディスタンスマトリクスの各要素D(i,j)に格納する。
D(i-1,j-1)+k×C(i,j) ただし、kは適宜の係数
D(i-1,j)+C(i,j)
D(i,j-1)+C(i,j) …(6)
上述した処理により、ディスタンスマトリクスの左下領域における右上の要素D(N/2-1,N/2-1)には、左下の要素D(0,0)から要素D(N/2-1,N/2-1)まで移動するための最小のコスト(ディスタンス)が格納される。制御部11は、ディスタンスマトリクスの右上領域における各要素についても上述した処理と同様の処理を行う。これにより、制御部11は、図14においてハッチングで示すディスタンスマトリクスの左下領域及び右上領域における各要素に対応するディスタンスDを算出する。なお、制御部11は、コストマトリクスの全領域における要素に対応するコストCを算出する場合、ディスタンスマトリクスの全領域における要素に対応するディスタンスDを算出してもよい。
次に制御部11は、図14においてハッチングで示す左下領域及び右上領域における各要素に対応するディスタンスDが算出されたディスタンスマトリクスD(i,j)に基づいて、左下領域及び右上領域のそれぞれにおいて、領域内の左下の要素から右上の要素までの経路で、最も低コストとなる経路(最小パス)を特定する(S15)。具体的には、制御部11は、左下領域における左下の要素D(0,0)から右上の要素D(N/2-1,N/2-1)までの最小パスと、右上領域における左下の要素D(N/2,N/2)から右上の要素D(N-1,N-1)までの最小パスとを特定する。
図15は最小パスの特定処理を説明するための図であり、ディスタンスマトリクスを示す。制御部11は、ディスタンスマトリクスの左下領域及び右上領域のそれぞれにおいて、最も右上の要素を最小パス上の要素としてマークを付ける。具体的には、制御部11は、左下領域においては右上の要素D(N/2-1,N/2-1)にマークを付け、右上領域においては右上の要素D(N-1,N-1)にマークを付ける。次に制御部11は、マークを付けた要素に対して、左下の要素のディスタンスと、左隣の要素のディスタンスと、直下の要素のディスタンスとのうちの最小値を特定し、最小値の要素を最小パス上の次の要素としてマークを付ける。制御部11は、このような処理を繰り返すことにより、図15に示すように、ディスタンスマトリクスの左下領域において要素D(N/2-1,N/2-1)から要素D(0,0)に至る最小パスを特定できる。なお、制御部11は、ディスタンスマトリクスの右上領域においても同様の処理を行い、右上領域における最小パスを特定する。最小パスを構成する要素の数は、ディスタンスマトリクスの構成内容に応じて異なるが、最少でN/2個、最多でN-1個となる。
上述した処理によって特定された最小パスは、結果として、第1画素列の各画素と第2画素列の各画素との対応関係を示す。例えば要素D(i,j)が最小パス上の要素である場合、ここでの第1画素列及び第2画素列において、第1画素列のx座標値iの画素と第2画素列のx座標値jの画素とに、同一の被写体が写っていると推定できることを意味する。
次に制御部11(算出部)は、特定した最小パスに基づいて、ここでの第1画素列及び第2画素列における適合率を算出する(S16)。図16は、ディスタンスマトリクスの左下領域及び右上領域のそれぞれにおいて特定された最小パスの例を示し、最小パスは、図16に示すように左下領域及び右上領域内で曲線をなす点列として求められる。ここで、もし、第1画素列及び第2画素列のそれぞれの中央が極点に一致する場合、最小パスを示す点列は必ず、ディスタンスマトリクスの左下及び右上の要素を結ぶ直線(図16では一点鎖線で示す直線)に対して決まった側に現れる。具体的には、図16にハッチングで示すように、左下領域においては直線の上側に、右上領域においては直線の下側に点列(最小パス)は現れる。
図17は、画像の中央が極点である第1パノラマ画像及び第2パノラマ画像と、このようなパノラマ画像に基づいて特定された最小パスとの例を示す。図17Aは第1パノラマ画像を示し、図17Bは第2パノラマ画像を示し、図17A,Bにおける破線は、第1画素列における各画素と、第2画素列における各画素との対応をそれぞれ示す。図17A,Bに示すように、画像の中央が極点である第1パノラマ画像及び第2パノラマ画像では、同一の被写体は異なる位置に写っているが、極点よりも左側の被写体は画像の左側に写り、極点よりも右側の被写体は画像の右側に写る。また図17A,Bから分かるように、極点よりも左側の各画素の対応を示す破線の傾きは同じ傾き(右下がり)であり、極点よりも右側の各画素の対応を示す破線の傾きは同じ傾き(右上がり)である。即ち、図17Cに示すように、画像の中央が極点であるパノラマ画像に基づいて特定された最小パスは、左下領域においては一点鎖線で示す直線の上側に、右上領域においては直線の下側にそれぞれ現れる。
そこで、本実施形態では、最小パスに特定された各要素において、正しい領域に存在する要素の割合を適合率として定義する。なお、正しい領域とは、ディスタンスマトリクスの左下領域では直線の上側の領域であり、右上領域では直線の下側の領域である。図16に示す最小パスでは、ディスタンスマトリクスの左下領域において一点鎖線で示す直線よりも上側の各要素は正しい領域に存在し(図16ではOKで示す)、直線よりも下側の各要素は正しい領域に存在しない(図16ではNGで示す)と判断される。また、図16に示す最小パスでは、ディスタンスマトリクスの右上領域において一点鎖線で示す直線よりも上側の各要素は正しい領域に存在せず(図16ではNGで示す)、直線よりも下側の各要素は正しい領域に存在する(図16ではOKで示す)と判断される。よって、制御部11は、最小パスに特定された各要素について、それぞれ正しい領域に存在するか否かを判断し、最小パスに特定された要素数に対して、正しい領域に存在すると判断した要素数の割合を適合率として算出する。具体的には、最小パスに特定された要素数をMとし、正しい領域に存在すると判断した要素数をMokとした場合、制御部11は、以下の(7)式によって適合率ρを算出する。上述した処理により、制御部11は、シフト量sが0の場合の適合率ρ(0)を算出し、算出したρ(0)を記憶部12に記憶する。なお、制御部11は、例えば第1画素列及び第2画素列の要素数Nの要素を有する一次元配列ρ[n](0≦n≦N-1)を記憶部12に定義し、算出した適合率ρを、シフト量sに対応する要素に順次記憶する。
ρ=MOK/M …(7)
制御部11は、シフト量sに所定画素数を加算し(S17)、第1画素列及び第2画素列をそれぞれ、所定画素数だけ右方向又は左方向にシフト(移動)させ(S18)、シフト後の第1画素列及び第2画素列(シフト画像)を生成する。本実施形態では、第1画素列及び第2画素列を1画素ずつシフトさせるので、制御部11は、シフト量sに1を加算し、それぞれの画素列を1画素だけシフトさせるが、シフトさせる画素数は1画素に限定されない。なお、右方向又は左方向にシフトさせた場合、各画素列からはみ出る画素については、はみ出した量だけ画素列の左端又は右端から移動させた位置にシフトさせる。そして制御部11は、この時点でのシフト量sが画素列の要素数Nに一致するか否かを判断し(S19)、一致しないと判断した場合(S19:NO)、ステップS13の処理に戻り、ステップS18でシフトさせた第1画素列及び第2画素列に基づいて、ステップS13~S16の処理を行う。これにより、制御部11は、ステップS17で所定画素数を加算したシフト量sに対する適合率ρを算出し、算出した適合率ρ(s)を、配列ρ[n]の対応する要素(s番目の要素)に記憶する。
制御部11は、シフト量sが画素列の要素数Nに一致するまでステップS13~S18の処理を繰り返すことにより、シフト量sに関する関数として適合率ρ(s)が算出される。なお、シフト量sはパノラマ画像における方位角φと対応(比例)しているので、適合率ρ(s)と適合率ρ(φ)とは同義として扱える。なお、シフト量s及び方位角φは、φ=2π×s/N(Nは画素列の要素数)によって相互に変換可能である。
図18は適合率ρ(φ)の例を示しており、適合率ρ(φ)は0~1の範囲内の値をとり、図18では適合率ρ(φ)=0を黒、適合率ρ(φ)=1を白として表現している。適合率ρ(φ)は、第1画素列及び第2画素列において方位角φの位置がそれぞれ極点である可能性を示す。図18では、第1パノラマ画像及び第2パノラマ画像における極点の大凡の位置を実線で示し、極点の反対側に存在する被写体の大凡の位置を破線で示している。図18から分かるように、適合率ρ(φ)が最大値となる位置は、極点の位置に略一致し、適合率ρ(φ)が最小値となる位置は極点の反対側の位置に略一致している。また図18では、算出された適合率ρ(φ)は、概ね最大値と最小値との間で単純増加及び単純減少していることが分かる。よって、適合率ρ(φ)が最大値となる方位角φの位置を極点に特定することができる。
制御部11は、ステップS19でシフト量sが画素列の要素数Nに一致すると判断した場合(S19:YES)、ステップS16でそれぞれのシフト量sに対して算出した適合率ρ(s)から最大の適合率を特定する(S20)。そして制御部11(極点特定部)は、最大の適合率ρ(s)が算出されたシフト量sに基づいて、シフト量sに対応する方位角φを算出し、算出した方位角φの位置を極点に特定する(S21)。制御部11(補正部)は、図8に示す補正処理に戻り、特定した極点の位置を示す方位角φに基づいて、ステップS2で画像の向き(撮影方角)を補正した第1パノラマ画像及び第2パノラマ画像の方位角方向をそれぞれ補正する(S4)。具体的には、制御部11は、第1パノラマ画像及び第2パノラマ画像のそれぞれにおいて、特定した極点の位置(算出した方位角φの位置)が画像の中央に移動するように、パノラマ画像中の各画素を左右方向に平行移動(スクロール)させる。画像の左端を方位角φ=0とした場合、画像の中央は方位角φ=πの位置であるので、特定した極点を画像の中央に移動させるためにパノラマ画像中の各画素を右方向へ移動させるスクロール角度△φは、以下の(8)式によって算出できる。また、パノラマ画像の幅(左右方向の長さ)はW画素であるので、画素単位のスクロール量Sは、以下の(9)式によって算出できる。
△φ=π-φ …(8)
S=△φ/2π×W …(9)
よって、制御部11は、ステップS2で撮影方向の方角を補正した第1パノラマ画像及び第2パノラマ画像のそれぞれに対して、各画素をそれぞれ、算出したスクロール量Sだけ右方向にスクロールすることにより、第1パノラマ画像及び第2パノラマ画像の方位角方向を補正する。パノラマ画像の各画素を右方向にスクロール量Sだけスクロールする処理は、図10Bで説明した処理と同様である。これにより、図11Aに示す第1パノラマ画像が、図7Aに示す第1パノラマ画像に補正され、図11Bに示す第2パノラマ画像が、図7Bに示す第2パノラマ画像に補正され、同じ被写体が画像中の同じ方位角方向に写っている第1パノラマ画像及び第2パノラマ画像が得られる。
制御部11は、補正処理後の第1パノラマ画像及び第2パノラマ画像を出力し(S5)、処理を終了する。なお、制御部11は、補正処理後の第1パノラマ画像及び第2パノラマ画像を記憶部12へ出力して記憶部12に記憶させてもよく、通信部13を介して所定の外部装置へ送信してもよい。
上述した処理により、本実施形態の情報処理装置10は、図6A,Bに示すようにそれぞれの撮影位置において異なる方角を撮影方向として撮影された状態の第1パノラマ画像及び第2パノラマ画像を、図11A,Bに示すようにそれぞれの撮影位置において同じ方角を撮影方向として撮影された状態の第1パノラマ画像及び第2パノラマ画像に変換した後、図7A,Bに示すようにそれぞれの撮影方向において、撮影位置を結ぶ方向を撮影方向として撮影された状態の第1パノラマ画像及び第2パノラマ画像に補正する。これにより、同じ被写体が画像中の同じ方位角方向に写っている第1パノラマ画像及び第2パノラマ画像を生成できる。
本実施形態の情報処理装置10では、それぞれの撮影位置において異なる方角を撮影方向として撮影を行った場合であっても、撮影後のパノラマ画像を、同じ被写体が画像中の方位角方向(左右方向)の同じ位置に写るパノラマ画像に補正できる。よって、複数のパノラマ画像において、同じ被写体の画像中の方位角方向を一致させることができる。このようなパノラマ画像を用いることにより、複数のパノラマ画像を切り替えて表示する場合に画像の遷移を滑らかに行うことができる。また、このようなパノラマ画像を合成して表示する場合、合成後のパノラマ画像に方位角方向(横方向)のブレが生じず、鮮明なパノラマ画像を提供できる。
(実施形態2)
本実施形態では、極点特定処理において、第1画素列及び第2画素列に基づいて算出した第1画素列及び第2画素列の間の適合率ρ(φ)を三角波で近似し、近似した三角波に基づいて、より適切な極点を特定する情報処理装置10について説明する。本実施形態の情報処理装置10は、実施形態1の情報処理装置10と同様の構成を有するので、構成については説明を省略する。また、本実施形態の情報処理装置10は、図8に示す補正処理と同様の補正処理を行う。なお、補正処理に含まれる極点特定処理は、図9に示す処理とは一部異なるので、異なる処理についてのみ説明する。
図19は、実施形態2の極点特定処理の手順の一例を示すフローチャート、図20は、実施形態2の極点特定処理を説明するための模式図である。なお、図19は、図9に示す極点特定処理において、ステップS20の代わりにステップS31~S46を追加したものである。図19では、図9中のステップS11~S18の図示を省略している。
ここで、図18から分かるように、適合率ρ(φ)は、概ね最大値と最小値との間で単純増加及び単純減少している。なお、理論的には、方位角φの位置が真の極点位置から離れるにつれ、極点位置からの距離(真の極点位置とのずれ量)と適合率の減少とは比例関係にあると仮定できるため、適合率ρ(φ)は三角波になると仮定できる。よって、本実施形態では、適合率ρ(φ)を最小二乗法によって三角波にフィッティングすることにより、より適切な適合率ρ(φ)の最大値を特定し、特定した適合率ρ(φ)によって、より適切な極点の位置を特定する。図20の上側にはフィッティングする三角波の例を示しており、図20に示す三角波は、0~1の範囲の値を有する振幅が0.5の三角波であり、方位角φ=0で1.0となり、方位角φ=πで0になるまで減少し、方位角φ=2πで再度1.0となるまで増加する三角波である。この三角波を位相φ0=0の三角波とする。本実施形態の情報処理装置10は、図20に示す三角波の位相φ0を0~2πの範囲で変化させながら、それぞれの位相φ0の三角波と適合率ρ(φ)との差異を算出し、差異が最小となる三角波の位相φ0を特定することにより、適合率ρ(φ)を近似した三角波を特定する。
よって、本実施形態の情報処理装置10において制御部11は、ステップS19でシフト量sが画素列の要素数Nに一致すると判断した場合(S19:YES)、即ち、シフト量sに関する関数である適合率ρ(s)を算出した後、適合率ρ(φ)をフィッティングする三角波を配列T(φ)として作成する(S31)。具体的には、制御部11は、画素列の要素数Nの要素を有する一次元配列T[n](0≦n≦N-1)を例えば記憶部12に定義し、図20に示す三角波の各方位角φにおける値を、配列T[n]の各要素に格納する。なお、制御部11は、配列T[n]の各要素に格納する値を、以下の(10)式によって算出し、それぞれ算出した値を配列T[n]の各要素に格納する。なお、配列T[n]のn番目(0≦n<N-1)の要素に対応する方位角φはφ=2π×n/Nによって算出される。よって、制御部11は、配列T[n]の各要素に、図20に示す三角波の各方位角φ(φ=2π×n/N)における値を格納する。
次に制御部11は、それぞれの位相φ0の三角波T(φ0)と適合率ρ(φ)との差異を格納するための配列E[n]を作成する(S32)。なお、三角波の各値及び適合率ρ(φ)の各値はそれぞれ、要素数Nの配列に格納されているので、制御部11は、画素列の要素数Nの要素を有する一次元配列E[n]を作成する。次に制御部11は、配列E[n]の各要素の位置(n番目)を示すnを0に設定する(S33)。制御部11は、配列E[n]の各要素に格納する値として、それぞれの位相φ0の三角波T(φ0)の各値と適合率ρ(φ)の各値との差異(誤差)の二乗を累積し、算出した累積誤差ε2 (φ0)を配列E[n]の各要素に格納する(S34)。ここでは、制御部11は、配列E[n]の要素E[0]に格納する値として、位相φ0=0の三角波T(0)の各値と適合率ρ(φ)の各値との累積誤差ε2 (0)を算出し、配列E[n]の要素E[0]に格納する。なお、制御部11は、配列E[n]のn番目の要素に格納する値として、位相φ0=2π×n/Nの三角波T(φ0)の各値と適合率ρ(φ)の各値との累積誤差ε2 (φ0)を、以下の(11)式によって算出し、配列E[n]の各要素に格納する。
制御部11は、配列E[n]の各要素の位置(n番目)を示すnに1を加算し(S35)、ステップS31で作成した三角波の配列T(φ)の各要素を1つずつシフトさせる(S36)。なお、配列T(φ)の各要素をシフトさせた場合に、配列T(φ)の一端からはみ出した要素は、配列T(φ)の他端に移動させる。そして、制御部11は、ここでのnの値が配列T[n]及び配列E[n]の要素数Nに一致するか否かを判断し(S37)、一致しないと判断した場合(S37:NO)、ステップS34の処理に戻り、位相φ0(φ0=2π×n/N)の三角波T(φ0)の各値と適合率ρ(φ)の各値との累積誤差ε2 (φ0)を算出し、配列E[n]のn番目の要素に格納する。ここでは、n=1であるので、制御部11は、配列E[n]の要素E[1]に格納する値として、位相φ0=2π/Nの三角波T(2π/N)の各値と適合率ρ(φ)の各値との累積誤差ε2 (2π/N)を算出し、配列E[n]の要素E[1]に格納する。
制御部11は、nの値が要素数Nに一致するまでステップS34~S37の処理を繰り返し、その結果、それぞれの位相φ0の三角波T(φ0)の各値と適合率ρ(φ)の各値との累積誤差ε2 (φ0)が、N個の各要素にそれぞれ格納された配列E[n]が得られる。nの値が要素数Nに一致すると判断した場合(S37:YES)、制御部11は、それぞれの累積誤差ε2 (φ0)が格納された配列E[n]から、最小の累積誤差を特定し(S38)、特定した累積誤差に対応するnをn0とする。そして、制御部11は、特定した累積誤差が算出された三角波T(φ)の位相φを、φ=2π×n0/Nによって特定し、特定した位相φの位置(方位角方向の位置)を仮の極点(仮極点)に特定する(S39)。
上述した処理によって特定された仮極点(位相φ)は、1回目のフィッティング処理の結果であり、この仮極点に基づいて、図8中のステップS4で、ステップS2で撮影方角を補正した第1パノラマ画像及び第2パノラマ画像の方位角方向を補正する処理を行ってもよい。なお、上述した処理によって三角波の位相φ(極点の位置を示す方位角φ)を推定する場合、異常値による影響が含まれる可能性がある。例えば第1画素列及び第2画素列に基づいて算出した適合率にノイズが含まれる場合がある。そのため、本実施形態では、異常値による影響をできるだけ排除するために、ロバスト推定と呼ばれる手法を用いて三角波の位相φを精査する(2回目のフィッティング処理)。ロバスト推定では、仮極点に特定した位相φの三角波T(φ)の各値と、適合率ρ(φ)の各値との差異(誤差d)に応じた重みωを、各値毎(三角波の配列T[n]及び適合率ρ(φ)の配列ρ[n]の要素毎)に算出し、要素毎の重みωを用いて2回目のフィッティング処理を行う。
よって、制御部11は、特定した仮極点に基づいて、配列の要素毎の重みωを算出する(S40)。重みωを算出する場合、制御部11は、ステップS38で特定した最小の累積誤差が格納された配列E[n]の要素の位置n0に基づいて、ステップS31で作成した配列T[n]の各要素をシフトさせて配列T´[n]を作成する。配列T´[n]が示す三角波は、1回目のフィッティング処理によって適合率ρ(φ)をフィッティングした三角波を示す。なお、制御部11は、以下の(12)式によって、配列T´[n]を作成する。
T´[n]=T[(n+n0)modN] …(12)
そして制御部11は、配列T´[n]の各要素の値と適合率ρ(φ)(配列ρ[n])の各値との誤差dを、d=ρ[n]-T´[n]によって算出する。そして制御部11は、配列の要素毎に(要素の位置毎に)、算出した誤差dに応じた重みωを、所定の誤差許容値Ωを用いて以下の(13)式のように設定する。なお、誤差許容値Ωは例えば、全要素における誤差dの中央値の1.25倍とすることができる。制御部11は、配列の要素毎に算出した重みωを、例えば記憶部12に定義した一元配列W[N]の各要素に格納する。なお、配列W[N]の要素数も、各配列と同様にN個である。
要素毎に算出した重みωを格納した配列W[N]を生成した後、制御部11は、ステップS33~S38と同様の処理を行い(S41~S46)、2回目のフィッティング処理を行う。具体的には、制御部11は、配列E[n]の各要素の位置(n番目)を示すnを0に設定する(S41)。そして制御部11は、それぞれの位相φ0の三角波T(φ0)の各値と適合率ρ(φ)の各値との累積誤差ε2 (φ0)を算出し、配列E[n]の各要素に格納する(S42)。ここでは、制御部11は、配列E[n]の各要素に格納する値として、それぞれの位相φ0の三角波T(φ0)の各値と適合率ρ(φ)の各値との差異(誤差)の二乗に、ステップS40で要素毎に特定した重みωを乗じた値の累積を算出する。なお、制御部11は、配列E[n]のn番目の要素に格納する値として、位相φ0=2π×n/Nの三角波T(φ0)の各値と適合率ρ(φ)の各値とにおける重みωを加味した累積誤差ε2 (φ0)を、以下の(14)式によって算出する。
そして制御部11は、nに1を加算し(S43)、三角波の配列T(φ)の各要素を1つずつシフトさせる(S44)。制御部11は、ここでのnの値が配列T[n]及び配列E[n]の要素数Nに一致するか否かを判断し(S45)、一致しないと判断した場合(S45:NO)、ステップS42の処理に戻り、位相φ0(φ0=2π×n/N)の三角波T(φ0)の各値と適合率ρ(φ)の各値とにおける重みωを加味した累積誤差ε2 (φ0)を算出し、配列E[n]のn番目の要素に格納する。
制御部11は、nの値が要素数Nに一致するまでステップS42~S45の処理を繰り返し、それぞれの位相φ0の三角波T(φ0)の各値と適合率ρ(φ)の各値とにおける重みωを加味した累積誤差ε2 (φ0)が、N個の各要素にそれぞれ格納された配列E[n]を得る。nの値が要素数Nに一致すると判断した場合(S45:YES)、制御部11は、要素毎の重みωを加味した累積誤差ε2 (φ0)が格納された配列E[n]から、最小の累積誤差を特定し(S46)、特定した累積誤差に対応するnをn0とする。そして、制御部11は、特定した累積誤差が算出された三角波T(φ)の位相φを、φ=2π×n0/Nによって特定し、特定した位相φの位置(方位角方向の位置)を真の極点に特定する(S21)。その後、制御部11は、図8に示す補正処理に戻り、特定した極点の位置を示す方位角φに基づいて、第1パノラマ画像及び第2パノラマ画像の方位角方向を補正する(S4)。
本実施形態においても、実施形態1と同様に、それぞれの撮影位置において異なる方角を撮影方向として撮影を行った場合であっても、同じ被写体が画像中の方位角方向(左右方向)の同じ位置に写っているパノラマ画像が得られる。また本実施形態では、第1画素列及び第2画素列に基づいて算出した第1画素列及び第2画素列の間の適合率ρ(φ)にノイズが含まれ、適合率ρ(φ)の各値の信頼性が高くない場合であっても、より適切な極点を特定することができる。よって、より適切な極点に基づいて第1パノラマ画像及び第2パノラマ画像の方位角方向を補正することにより、同じ被写体が画像中の方位角方向(左右方向)の同じ位置に写るパノラマ画像をより精度よく生成することができる。
本実施形態において、撮影対象の部屋における撮影位置は3箇所以上としてもよい。この場合、それぞれ2箇所の撮影位置間で、撮影したパノラマ画像における方位角方向の補正処理を行えばよい。これにより、撮影対象の部屋の任意の位置で撮影されたパノラマ画像間において、同じ被写体の画像中の方位角方向を一致させることができる。本実施形態において、カメラ20は、全天球カメラに限定しない。たとえば、半球型の範囲を撮影可能なカメラであってもよい。通常の平面画像撮影用のカメラでもよい。
各実施形態で記載されている技術的特徴(構成要件)はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。