以下、図面を参照して、本技術を適用した実施の形態について説明する。
〈第1の実施の形態〉
[本技術の概要]
まず、本技術の概要について説明する。
例えば、カメラ等の撮像装置を回転移動させながら連続して撮影した撮影画像と、それらの撮影画像の位置関係を示す同次変換行列が得られているものとする。ここでは、10枚の撮影画像が得られているものとする。
このとき、1枚目の撮影画像を基準としたX1Y1Z1座標系に対して、上述したCxCy座標系を定義し、各撮影画像を式(3)により円筒面CL11上に射影すると、図7に示す投影画像が得られる。
なお、図7は、撮影画像が投影された円筒面CL11を展開した2次元平面を示しており、図中、横方向はCxCy座標系におけるCx軸方向を示している。また、図7では、円筒面CL11の1周分が36となるようにCxが定められているとともに、2次元平面(円筒面CL11)に投影された1枚目の撮影画像の図中、左端の位置がCx=0となるようにオフセットが加えられている。
図7では、投影画像PR1乃至投影画像PR10は、1枚目乃至10枚目の撮影画像を式(3)により円筒面CL11にマッピング(投影)して得られた画像を示している。また、投影画像PR11は、円筒面CL11上において投影画像PR1を周回分、すなわちCx=36だけ図中、右方向に移動させたものを示している。
このようにして得られた各投影画像の一部がつなぎ合わせられて360度のパノラマ画像が生成されるが、本技術では互いに隣接する投影画像のつなぎ目、すなわちパノラマ画像の生成に用いられる投影画像の領域の端部分の位置が、有向グラフが利用されて定められる。
例えば、円筒面CL11上にマッピングされた各投影画像PR1乃至投影画像PR11に基づいて、図8に示す有向グラフが生成される。
なお、図8において横方向はCxCy座標系におけるCx軸方向を示しており、縦方向は撮影画像(投影画像)の撮影された順番、すなわち変数sを示している。ここでは、上述したように1枚目の投影画像が11枚目(s=11)の投影画像としても用いられている。
有向グラフは向き(矢印)を有するグラフであるが、図8に示す有向グラフは、煩雑になるので矢印ではなく線分で描かれている。
したがって、例えばこの有向グラフのQ11乃至Q14の領域の部分は、より詳細には図9乃至図12に示すようになっている。なお、図9乃至図12において、横方向はCxCy座標系におけるCx軸方向を示しており、縦方向は撮影画像(投影画像)の撮影された順番を示している。
図9は、図8の有向グラフの領域Q11の部分を拡大表示した図である。図9では、投影画像PR1と投影画像PR2が存在する領域に図中、円で示されるノードが設けられ、各ノードが矢印により接続されている。
この例では、Cx軸方向に隣接する各ノードは矢印により接続されるとともに、投影画像PR1が存在する領域に設けられたノードのうち、一部のノードは、それらのノードの図中、右下にあるノードと矢印で接続されている。
なお、以下、s枚目(但し、1≦s≦11)の投影画像PRsに対応する領域におけるCx軸方向の位置(Cx座標)がCxであるノードを、位置(Cx,s)にあるノードとも称することとする。
また、図10は、図8の有向グラフの領域Q12の部分を拡大表示した図である。この例においてもCx軸方向に隣接する各ノードは矢印により接続されており、自分自身から見て図中、右下方向に他のノードがあるノードにつては、そのノードと右下にあるノードとが矢印で接続されている。
さらに、図11は図8の有向グラフの領域Q13の部分を拡大表示した図であり、この例においてもCx軸方向および図中、右下方向に隣接する各ノードは矢印により接続されている。
同様に、図12は図8の有向グラフの領域Q14の部分を拡大表示した図であり、この例においてもCx軸方向および図中、右下方向に隣接する各ノードは矢印により接続されている。
例えば図12において、位置(Cx,s)=(34,7)にあるノードと、位置(35,7)にあるノードとを結ぶ矢印W11は、位置(34,7)から位置(35,7)へのエッジを意味している。
また、例えば位置(Cx,s)=(34,6)にあるノードと、位置(35,7)にあるノードとを結ぶ矢印W12は、位置(34,6)から位置(35,7)へのエッジを意味している。すなわち、各ノードを接続する矢印はエッジを意味している。
このように、図8に示した有向グラフは、図中、左から右方向に、または図中、左上から右下方向に向かう有向なグラフである。
具体的には、図7に示した各投影画像PR1乃至投影画像PR11から、以下のようにして図8の有向グラフが生成される。
まず、図8のs=1の列のノード(矢印の始点あるいは終点)が、投影画像PR1の図7中、横方向の両端を1ずつ減らすことで定められる。すなわち、投影画像PR1は、Cx=0から22に存在しているので、それらのCx方向の両端が除かれたCx=1から21の各位置、つまり位置(1,1)から位置(21,1)の各位置にノードが設けられる。そして、これらのノードを始点および終点とする図8中、右方向(+Cx軸方向)の矢印が加えられる。
続いて、図8のs=2の列のノードが、投影画像PR2の図7中、横方向の両端を1ずつ減らすことで定められる。すなわち、投影画像PR2は、Cx=4から26に存在しているので、それらのCx方向の両端が除かれたCx=5から25の各位置、つまり位置(5,2)から位置(25,2)の各位置にノードが設けられる。そして、これらのノードを始点および終点とする図8中、右方向(+Cx軸方向)の矢印が加えられる。
以下、同様にして、図8のs=3乃至11の各列のノードが生成されていく。さらに、図8において、s=1乃至10である任意の位置(Cx,s)について、その位置(Cx,s)と、位置(Cx+1,s+1)の2つの位置にノードがある場合には、位置(Cx,s)を始点とし、位置(Cx+1,s+1)を終点とする右下方向の矢印(エッジ)が加えられる。
以上のようにして、各投影画像から1つの有向グラフが生成される。なお、より詳細には、この有向グラフの各ノード間を結ぶ矢印(エッジ)には、エネルギが与えられ、そのエネルギに基づいて各投影画像のつなぎ目、つまりパノラマ画像の生成に用いられる領域の端の位置(接続位置)が定められる。
有向グラフの各ノード間の矢印(エッジ)のエネルギは、それらの2つのノードに対応する投影画像の領域の差分等により求められる。以下、ノード間の矢印に与えられるエネルギの算出方法について説明する。
例えば、図13に示すように、3つの動被写体MB31乃至動被写体MB33を被写体として撮影画像を撮影したとする。なお、図13において、横方向および縦方向はCx軸方向およびCy軸方向を示している。また、図13において、図7における場合と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
例えば、動被写体MB31が図中、右方向、つまりCxCy座標系における+Cx軸方向に移動していたとする。また、動被写体MB32が図中、上方向、つまりCxCy座標系における−Cy軸方向に移動しており、動被写体MB33が図中、右斜め下方向に移動していたとする。
このとき、1枚目の撮影画像を撮影した後、2枚目の撮影画像を撮影するので、これらの2枚の撮影の間で動被写体MB31乃至動被写体MB33は移動している。
したがって、1枚目の撮影画像を円筒面CL11にマッピングして得られた投影画像PR1と、2枚目の投影画像PR2とでは、CxCy座標系における動被写体MB31乃至動被写体MB33の位置は異なっている。
ここで、投影画像PR1と投影画像PR2が互いに重なる部分について差分を求めると、差分画像DP11が得られる。例えば、この差分画像DP11の画素の画素値は、その画素と同じ位置にある投影画像PR1の画素の画素値と、投影画像PR2の画素の画素値の差分の絶対値とされる。
したがって、差分画像D11Pにおいて画素の画素値が所定の閾値以上となる画素、例えば画素値が0でない画素からなる領域は、動被写体が投影されていた領域である。図13では、差分画像DP11において斜線が施されていない領域が、動被写体の領域を示している。
さらに、差分画像DP11のCy軸方向に並ぶ画素、すなわちCx座標が同じである画素の画素値をCy軸方向に蓄積すると(Cx軸上に写像すると)、矢印DF11に示すように投影画像PR1と投影画像PR2の差分累積値Diff[1,2](Cx)が得られる。
ここで、例えば差分累積値Diff[1,2](5)の値は、差分画像DP11におけるCx=5である各画素の画素値の総和とされる。
このようにして得られた差分累積値Diff[1,2](Cx)の値が0でない位置Cxの部分では、1枚目と2枚目の撮影画像、すなわち投影画像PR1と投影画像PR2には、動被写体が存在していたことになる。逆に、差分累積値Diff[1,2](Cx)の値が0となる位置Cxの部分では、1枚目と2枚目の撮影画像(投影画像PR1と投影画像PR2)には、動被写体が存在していなかったことになる。
なお、以下ではs枚目の撮影画像に対応する投影画像PRsと、s+1枚目の撮影画像に対応する投影画像PRs+1とから得られた差分画像から求まる位置Cxの差分累積値をDiff[s,s+1](Cx)で表すこととする。
本技術では、以上のようにして得られた差分累積値Diff[s,s+1](Cx)が図8に示した有向グラフに反映される。すなわち、各差分累積値Diff[s,s+1](Cx)に基づいて、ノード間の矢印(エッジ)のエネルギが定められる。
具体的には、例えば図8の有向グラフの領域Q12の部分、つまり図10に拡大表示した部分の各ノードにエネルギが与えられると、図14に示すようになる。なお、図14において、横方向はCx軸方向を示しており、縦方向は撮影画像(投影画像)が撮影された順番を示している。
図14では、各ノード間の矢印(エッジ)の太さが、その矢印に与えられたエネルギの大きさを示しており、矢印が太いほどエネルギが大きいことを表している。
例えば、位置(Cx,1)にあるノードを始点とし、位置(Cx+1,2)にあるノードを終点とする図中、右下方向の矢印(エッジ)のエネルギは、差分累積値Diff[1,2](Cx)と差分累積値Diff[1,2](Cx+1)の平均値とされる。
したがって、それらのノードの位置に対応する投影画像の位置にある動被写体のCy方向の面積や、その動被写体の動きが大きいほど差分累積値は大きくなり、その結果、ノード間の矢印のエネルギも大きくなる。つまりノード間の矢印が太くなる。なお、図14中、右方向、つまりCx軸方向に並ぶノード間の矢印のエネルギは、基本的に0とされる。
さて、360度のパノラマ画像の生成に用いる投影画像の領域の境界位置を決定することを、有向グラフの位置(Cx,1)にあるノードから、いくつかのノードを経由して位置(Cx,11)にあるノードに到達する経路(パス)を定めることに対応させるとする。
具体的には、例えば図8の有向グラフのs=1から2の部分に着目して、図15に示すように位置(Cx,s)=(4,1)のノードから出発し、位置(14,1)および位置(15,2)を経由して位置(22,2)に到達する経路PT11を考えるとする。
この経路PT11は、投影画像PR1における位置Cx=4乃至14までの領域と、投影画像PR2における位置Cx=15乃至22までの領域とを、360度のパノラマ画像の生成に使用することに対応する。
図14に示した有効グラフのノード間の矢印のエネルギによれば、位置(14,1)にあるノードを始点とし、位置(15,2)にあるノードを終点とする右下方向の矢印には小さなエネルギが与えられている。そのため、経路PT11上にあるエッジ(ノード間の矢印)のエネルギの合計を、経路PT11のエネルギ合計値として求めると、そのエネルギ合計値は小さな値となる。
ここで、各ノード間の矢印のエネルギは、それらのノードの位置に対応する投影画像の位置にある動被写体のCy方向の面積や、その動被写体の動きが小さいほど、小さくなる。したがって、経路PT11のエネルギ合計値が小さいほど、投影画像PR1と投影画像PR2のつなぎ目において、動被写体の分断が少ないなど、画像の破綻が少なくなる。
一方、図16に示すように、位置(Cx,s)=(4,1)のノードから出発し、位置(19,1)および位置(20,2)を経由して位置(22,2)に到達する経路PT12を考えるとする。
この経路PT12は、投影画像PR1における位置Cx=4乃至19までの領域と、投影画像PR2における位置Cx=20乃至22までの領域とを、360度のパノラマ画像の生成に使用することに対応する。
図14に示した有効グラフのノード間の矢印のエネルギによれば、位置(19,1)にあるノードを始点とし、位置(20,2)にあるノードを終点とする右下方向の矢印には大きなエネルギが与えられている。
そのため、経路PT12のエネルギ合計値は大きな値となり、この経路PT12により定まる投影画像PR1と投影画像PR2の領域をつなぎ合わせてパノラマ画像を生成すると、画像の破綻が大きくなり、パノラマ画像の品質が劣化してしまうことが分かる。
このように、経路PT11により定まる投影画像の領域を用いてパノラマ画像を生成した場合と、経路PT12により定まる投影画像の領域を用いてパノラマ画像を生成した場合とでは、図17に示すようにパノラマ画像の品質は大きく異なる。
なお、図17において、横方向はCx軸方向を示しており、縦方向はCy軸方向を示している。また、図17において、図13における場合と対応する部分には、同一の符号を付してあり、その説明は適宜省略する。
図17では、点線BD11は、経路PT11により定まる投影画像の境界位置(接続位置)を示しており、点線BD12は、経路PT12により定まる投影画像の境界位置(接続位置)を示している。
例えば、経路PT11により定まる点線BD11が境界位置とされる場合、投影画像PR1における点線BD11よりも左側の領域と、投影画像PR2における点線BD11よりも右側の領域とがつなぎ合わされてパノラマ画像WP11が生成される。すなわち、投影画像PR1における位置Cx=0から14までの領域と、投影画像PR2における位置Cx=15から26までの領域とが接続されてパノラマ画像WP11とされる。
この場合、投影画像PR1と投影画像PR2における点線BD11近傍には、動被写体はないので、破綻のない高品質なパノラマ画像WP11が得られる。
これに対して、経路PT12により定まる点線BD12が境界位置とされる場合、投影画像PR1における点線BD12よりも左側の領域と、投影画像PR2における点線BD12よりも右側の領域とがつなぎ合わされてパノラマ画像WP12が生成される。すなわち、投影画像PR1における位置Cx=0から19までの領域と、投影画像PR2における位置Cx=20から26までの領域とが接続されてパノラマ画像WP12とされる。
この場合、投影画像PR1における点線BD12近傍には動被写体MB33があり、投影画像PR2における動被写体MB33は点線BD12とは離れた位置にあるので、点線BD12近傍において、画像の破綻が生じている。
すなわち、パノラマ画像WP12の点線BD12近傍では、動被写体MB33の一部だけが映っており、その動被写体MB33よりも右側には、さらに同じ動被写体MB33が映っている。
以上のことから、一般的に以下のことがいえる。すなわち、s枚目の投影画像と、s+1枚目の投影画像との重なる部分の差分から差分累積値Diff[s,s+1](Cx)を求め、この差分累積値Diff[s,s+1](Cx)を図8の有向グラフのエネルギに反映させるとする。
そして、図8の有向グラフ上にある経路(パス)を考え、この経路が位置(Cx’,s)にあるノードを始点とし、位置(Cx’+1,s+1)にあるノードを終点とする右下方向の矢印を通ったとする。
このとき、そのような経路を定めることを、s枚目の投影画像における位置CxがCx’以下である領域と、s+1枚目の投影画像における位置CxがCx’+1以上である領域とを用いてパノラマ画像を生成することに対応させるとする。
この場合、決定された経路のエネルギ合計値が大きければ、s枚目とs+1枚目の投影画像において、位置Cx=Cx’,Cx’+1の部分に動被写体が存在していることになる。そのため、生成されたパノラマ画像には、位置Cx=Cx’,Cx’+1の部分で動被写体の分断による破綻が生じる。逆に、決定された経路のエネルギ合計値が小さければ、投影画像のつなぎ目(接続位置)に動被写体は存在しないので、破綻のない高品質なパノラマ画像が得られることになる。
そこで、図8の有向グラフにおいて、エネルギ合計値が最小となる経路を検出すれば、その経路により定まる各投影画像の領域を用いて、動被写体による破綻の少ないパノラマ画像を得ることができる。
具体的には、まず、有向グラフにおける位置(Cx,s)=(1,1)にあるノードから出発して、位置(Cx,s)=(1,11)にあるノードに到着する経路(パス)を考え、この経路のなかでエネルギ合計値が最小となる経路が探索される。例えば、エネルギ合計値が最小となる経路の探索は、動的計画法(dynamic programming)などにより求めることができる。
これにより、例えば図18に示す経路PT31が、エネルギ合計値が最小となる経路として得られる。なお、図18において、横方向はCx軸方向を示しており、縦方向は撮影画像(投影画像)の撮影された順番を示している。
図18では、図8に示した有向グラフと同じ有向グラフ上に位置(1,1)のノードを出発点とし、位置(1,11)のノードを到着点とする経路PT31が示されている。
このように、位置(1,1)のノードを出発点とする、エネルギ合計値が最小となる経路PT31が得られると、次に有向グラフにおける位置(Cx,s)=(2,1)のノードから出発して、位置(2,11)のノードに到着する経路のうち、エネルギ合計値が最小となる経路が探索される。
同様にして、有向グラフ上の位置Cx=3から21について、位置(Cx,s)=(Cx,1)のノードから出発して、位置(Cx,11)のノードに到着する経路のうち、エネルギ合計値が最小となる経路が探索される。
例えば、有向グラフにおける位置(Cx,s)=(4,1)のノードから出発して、位置(4,11)のノードに到着する経路のうち、エネルギ合計値が最小となる経路が探索され、その結果、例えば図19に示す経路PT32が得られる。
また、例えば有向グラフにおける位置(Cx,s)=(11,1)のノードから出発して、位置(11,11)のノードに到着する経路のうち、エネルギ合計値が最小となる経路が探索され、その結果、例えば図20に示す経路PT33が得られる。
さらに、例えば有向グラフにおける位置(Cx,s)=(21,1)のノードから出発して、位置(21,11)のノードに到着する経路のうち、エネルギ合計値が最小となる経路が探索され、その結果、例えば図21に示す経路PT34が得られる。
なお、図19乃至図21において、横方向はCx軸方向を示しており、縦方向は撮影画像(投影画像)の撮影された順番を示している。
このようにして、有向グラフの位置Cx=1乃至21までの21個の各位置(Cx,1)について、それらの位置を出発点とする経路のなかのエネルギ合計値が最小となる経路が求められる。そして、それらの21個の経路のうち、エネルギ合計値が最小となる経路が、最終的に最も破綻の少ないパノラマ画像を生成するための経路となる。このような経路が特定されると、その経路に基づいて生成されたパノラマ画像が、最終的な360度のパノラマ画像として出力される。
以上のようにして、本技術では、投影画像から生成された有効グラフが利用されて、破綻のない高品質なパノラマ画像が生成される。
[画像処理装置の構成例]
次に、以上において説明した本技術を適用した画像処理装置の具体的な実施の形態について説明する。
図22は、本技術を適用した画像処理装置の構成例を示す図である。この画像処理装置11は、取得部21、投影画像生成部22、差分累積値算出部23、有向グラフ生成部24、経路探索部25、およびパノラマ画像生成部26から構成される。
取得部21は、撮像装置により連続して撮影されたN枚の撮影画像、および各撮影画像と1枚目の撮影画像との位置関係を示す同次変換行列等を取得して投影画像生成部22に供給する。投影画像生成部22は、取得部21から供給された撮影画像や同次変換行列に基づいて、撮影画像を円筒面上に射影(マッピング)し、投影画像を生成する。また、投影画像生成部22は、生成された投影画像を差分累積値算出部23、有向グラフ生成部24、およびパノラマ画像生成部26に供給する。
差分累積値算出部23は、投影画像生成部22から供給された投影画像に基づいて、隣接する投影画像間の差分累積値を算出し、有向グラフ生成部24に供給する。有向グラフ生成部24は、投影画像生成部22から供給された投影画像と、差分累積値算出部23から供給された差分累積値とに基づいて有向グラフを生成し、経路探索部25に供給する。
経路探索部25は、有向グラフ生成部24から供給された有向グラフに基づいて、エネルギ合計値が最小となる有向グラフ上の経路を探索し、得られた経路をパノラマ画像生成部26に供給する。経路探索部25は、エネルギ合計値算出部31を備えており、エネルギ合計値算出部31は、経路探索部25による経路探索時に各経路のエネルギ合計値を算出する。
パノラマ画像生成部26は、経路探索部25から供給された経路と、投影画像生成部22から供給された投影画像とに基づいて、360度のパノラマ画像を生成し、出力する。パノラマ画像生成部26は、使用領域決定部32を備えており、使用領域決定部32は、径路探索部25から供給された経路に基づいて、投影画像におけるパノラマ画像の生成に用いる領域を決定する。
[パノラマ画像生成処理の説明]
次に、図23のフローチャートを参照して、画像処理装置11により行なわれるパノラマ画像生成処理について説明する。
ステップS11において、取得部21は、N枚の撮影画像、各撮影画像と1枚目の撮影画像との位置関係を示す同次変換行列、および各撮影画像の焦点距離Fを示す情報を取得して、投影画像生成部22に供給する。
ここで、取得部21により取得される撮影画像は、例えばカメラ等の撮像装置を回転させながら連続して撮影された画像とされる。また、N枚の各撮影画像の焦点距離は同じであるものとする。
ステップS12において、投影画像生成部22はマッピング処理を行い、取得部21から供給された撮影画像や同次変換行列に基づいて投影画像を生成する。
ここで、図24のフローチャートを参照して、ステップS12の処理に対応するマッピング処理について説明する。なお、このマッピング処理は、図25および図26に示す擬似コードを実行することにより行なわれる処理と等価である。
ステップS41において、投影画像生成部22は、s枚目(但し、1≦s≦N)の撮影画像がマッピングされる第1キャンバス領域を確保する。
例えば、投影画像生成部22は上述したCxCy座標系に第1キャンバス領域を定める。このとき、第1キャンバス領域の−Cx軸方向側の端における、第1キャンバス領域のCy軸方向の中間の位置が、CxCy座標系の原点となるように第1キャンバス領域が配置される。
また、第1キャンバス領域のCx軸方向の幅width(以下、横幅とも称する)は2πFとされ、第1キャンバス領域のCy軸方向の幅height(以下、縦幅とも称する)は、撮影画像のCy軸方向の画素数に0.9を乗算した値とされる。ここで、横幅widthの算出に用いられるFは撮影画像の焦点距離である。
なお、第1キャンバス領域の縦幅heightを、撮影画像のCy軸方向の画素数の90%の長さとするのは、例えば図27に示すように、投影画像のCy軸方向側の端をCx軸方向と平行とするためである。なお、図27において、横方向および縦方向はそれぞれCx軸方向およびCy軸方向を示している。
例えば、縦幅heightが撮影画像のCy軸方向の画素数とほぼ同じである領域CA11を第1キャンバス領域として確保したとする。また、撮影画像をCxCy座標系の円筒面にマッピングして得られた画像が画像TR31であるとする。
この場合、画像TR31のうちの領域CA11内にある部分が投影画像とされるが、領域CA11を大きくとりすぎると、領域Q31や領域Q32の部分には、撮影画像の撮影範囲外の部分が対応することになってしまい、有効な画素値が存在しなくなる。そうすると、得られた投影画像のCy軸方向側の端は、Cx軸方向と平行ではなくなってしまう。
そこで、第1キャンバス領域の縦幅heightをある程度小さくし、例えば領域CA12を第1キャンバス領域とすれば、得られる投影画像のCy軸方向側の端はCx軸方向と平行となる。
ユーザが撮像装置を回転させながら連続して撮影画像を撮影する場合、Cy軸と平行な直線を軸としてCx軸方向に撮像装置が回転されるが、撮像装置がCy軸方向にぶれることもある。撮像装置のCy軸方向へのぶれが大きいなど、特にユーザが不安定な撮影をしている場合には、円筒面に投影される撮影画像の位置が大きく変化するので、縦幅heightをより小さく設定する必要がある。
ステップS42において、投影画像生成部22は、s枚目の撮影画像の第1キャンバス領域への書き込みを行い、s枚目の投影画像とする。
すなわち、投影画像生成部22は、第1キャンバス領域上の各位置(Cx,Cy)(但し、0≦Cx<width,-height/2≦Cy≦height/2)について、上述した式(3)を満たす位置(Xs,Ys)を求める。ここで、位置(Xs,Ys)はs枚目の撮影画像を基準とした座標系上の位置である。
そして、投影画像生成部22は、求めた位置(Xs,Ys)にs枚目の撮影画像の画素がある場合、その画素の画素値を第1キャンバス領域上の位置(Cx,Cy)にある画素の画素値とする。つまり、撮影画像上の位置(Xs,Ys)にある画素が有効な画素であれば、その画素の画素値が第1キャンバス領域上の位置(Cx,Cy)に書き込まれる(マッピングされる)。
このようにして、各位置(Cx,Cy)について、撮影画像の画素のマッピングを行なうと、第1キャンバス領域上に投影画像が生成される。なお、これらのステップS41およびステップS42の処理は、図25の擬似コードにおけるFC11の部分に相当する。
ステップS43において、投影画像生成部22は、生成したs枚目の投影画像のCx軸方向側の端がCy軸に平行となるように投影画像を加工する。
具体的には、投影画像生成部22は、第1キャンバス領域上のCy座標が同じである画素からなる画素列について、その画素列のなかにステップS42の処理により画素値が与えられていない画素がある場合には、その画素列の画素の画素値を無効とする。
例えば、図28の上側に示すように、第1キャンバス領域CA31が確保され、この第1キャンバス領域CA31へと撮影画像をマッピングすることで、画像TR41が得られたとする。なお、図28において、横方向および縦方向はそれぞれCx軸方向およびCy軸方向を示している。また、直線L11および直線L12は、Cy軸に平行な直線である。
このようにして得られる画像TR41の左右の端は、Cy軸方向と平行になるとは限らない。図28の例では、画像TR41の左右の端はCy軸方向と平行となっていない。
画像処理装置11では、差分累積値を用いてパノラマ画像を生成する等の理由から、各投影画像の左右の端はCy軸に平行であることが望ましい。そこで、投影画像生成部22は、画像TR41における直線L11よりも図中、左側の部分と、画像TR41における直線L12よりも図中、右側の部分とを除去する。すなわち、それらの部分の画素値が無効とされる。これにより、図中、下側に示すように第1キャンバス領域CA31上に矩形の投影画像TR42が得られる。
このようなステップS43の処理は、図25の擬似コードにおけるFC12の部分に相当する。
図24のフローチャートの説明に戻り、ステップS44において、投影画像生成部22は、全ての撮影画像を処理したか否かを判定する。例えば、N枚の撮影画像について、それらの撮影画像に対応する投影画像が生成された場合、全ての撮影画像が処理されたと判定される。
ステップS44において、まだ全ての撮影画像が処理されていないと判定された場合、処理はステップS41に戻り、上述した処理が繰り返される。すなわち、まだ処理されていない撮影画像が第1キャンバス領域に投影され、投影画像とされる。
これに対して、ステップS44において全ての撮影画像が処理されたと判定された場合、ステップS45において、投影画像生成部22は、投影画像に対するオフセット処理を行なう。
例えば、投影画像生成部22は、1枚目の投影画像の左端がCxCy座標系の原点の位置に移動されるように、オフセット値を求める。すなわち、CxCy座標系の原点から、1枚目の投影画像の左端までの距離が算出される。換言すれば、第1キャンバス領域の+Cx軸方向側の端から、その端からみて−Cx軸方向にある画素値が無効である最初の画素までの距離がオフセット値とされる。
オフセット値が求められると、投影画像生成部22は、s枚目(但し、1≦s≦N)の投影画像に対して、CxCy座標系に第2キャンバス領域を確保する。
ここで、第2キャンバス領域のCx軸方向の幅およびCy軸方向の幅は、それぞれwidthおよびheightとされる。つまり、第2キャンバス領域は、第1キャンバス領域と同じ大きさの領域とされる。また、第2キャンバス領域の−Cx軸方向側の端における、第2キャンバス領域のCy軸方向の中間の位置が、CxCy座標系の原点となるように第2キャンバス領域が配置される。
続いて投影画像生成部22は、s枚目の第1キャンバス領域における位置(tmpCx,Cy)にある画素の画素値を、s枚目の第2キャンバス領域における位置(Cx,Cy)に書き込む。すなわち、第1キャンバス領域の位置(tmpCx,Cy)にある画素の画素値が、第2キャンバス領域の位置(Cx,Cy)にある画素の画素値とされる。ここでtmpCxは、オフセット値をoffsetCxとすると、(Cx- offsetCx)で表される。
そして、1枚目乃至N枚目について第2キャンバス領域への書き込みが行なわれると、これらの第2キャンバス領域の画像データが投影画像とされる。より詳細には、第2キャンバス領域内の有効な画素からなる画像が投影画像である。
このようにして各投影画像をオフセット値分だけCx軸方向にシフトさせると、1枚目の投影画像の端がCxCy座標系の原点に位置するようになる。ステップS45で行なわれるオフセット処理は、図26の擬似コードに相当する。
投影画像生成部22は、生成した1枚目乃至N枚目の各投影画像を、差分累積値算出部23、有向グラフ生成部24、およびパノラマ画像生成部26に供給する。投影画像が生成されると、マッピング処理は終了し、その後、処理は図23のステップS13へと進む。
図23のフローチャートの説明に戻り、ステップS13において、差分累積値算出部23は、投影画像生成部22から供給された各投影画像に基づいて投影画像間の差分累積値を算出し、有向グラフ生成部24に供給する。
例えば、差分累積値算出部23は図29および図30に示す擬似コードを実行することで、差分累積値を算出する。
すなわち、差分累積値算出部23は幅width=2πFとし、幅heightを撮影画像のCy軸方向の画素数に0.9を乗算した値とする。
そして、差分累積値算出部23は1≦s≦N−1として、s枚目の投影画像とs+1枚目の投影画像との差分累積値Diff[s,s+1](Cx)を求める。
具体的には、差分累積値算出部23はs枚目の投影画像の位置Cx、つまりCx座標が所定のCxである位置に有効な画素があり、かつs+1枚目の投影画像の位置Cxに有効な画素があるという条件が満たされているか否かを判定する。
差分累積値算出部23は、そのような条件が満たされている場合、各Cy(但し、-height/2≦Cy≦height/2)について、s枚目の投影画像の位置(Cx,Cy)の画素の画素値と、s+1枚目の投影画像の位置(Cx,Cy)の画素の画素値との差分(差分絶対値)を求める。差分累積値算出部23は、このようにして各Cyについて求めた画素値の差分の総和を差分累積値Diff[s,s+1](Cx)とする。
また、所定の位置Cxについて上述の条件が満たされていない場合には、差分累積値算出部23は、その位置Cxについての差分累積値Diff[s,s+1](Cx)を無効とする。
このようにして差分累積値算出部23は、sの値(但し、1≦s≦N−1)ごとに0≦Cx<widthの範囲の各Cxについて連続する投影画像間の差分累積値Diff[s,s+1](Cx)を算出する。
また、差分累積値算出部23は、1枚目の投影画像をN+1枚目の投影画像として、N枚目の投影画像とN+1枚目の投影画像の間の差分累積値Diff[N,N+1](Cx)を求める。
すなわち、差分累積値算出部23は、N枚目の投影画像の位置Cxに有効な画素があり、かつ1枚目、つまりN+1枚目の投影画像の位置Cxに有効な画素があるという条件が満たされているか否かを判定する。そして、差分累積値算出部23は、条件が満たされている場合、各Cy(但し、-height/2≦Cy≦height/2)について、N枚目の投影画像の位置(Cx,Cy)の画素の画素値と、N+1枚目(1枚目)の投影画像の位置(Cx,Cy)の画素の画素値との差分(差分絶対値)を求める。差分累積値算出部23は、このようにして各Cyについて求めた画素値の差分の総和を差分累積値Diff[N,N+1](Cx)とする。
また、所定の位置Cxについて上述の条件が満たされていない場合には、差分累積値算出部23は、その位置Cxについての差分累積値Diff[N,N+1](Cx)を無効とする。
差分累積値算出部23は、以上のようにして求めた差分累積値Diff[s,s+1](Cx)を、有向グラフ生成部24に供給する。このように差分累積値を算出することは、投影画像間の差分情報を求めて投影画像から動被写体を検出することと等価である。
ステップS14において、有向グラフ生成部24は、投影画像生成部22から供給された投影画像と、差分累積値算出部23から供給された差分累積値Diff[s,s+1](Cx)とに基づいて有向グラフを生成し、経路探索部25に供給する。
例えば、有向グラフ生成部24は、図31乃至図33に示す擬似コードを実行することで、差分累積値に基づくエネルギが与えられた有効グラフを構築する。
具体的には、有向グラフ生成部24は、各s(但し、1≦s≦N)について、s枚目の投影画像の位置Cx、つまりCx座標が所定のCxである位置に有効な画素があり、かつs枚目の投影画像の位置Cx+1に有効な画素があるかを判定する。
そして、有向グラフ生成部24は、s枚目の投影画像の位置Cxと位置Cx+1に有効な画素がある場合、有効グラフにおける位置(Cx,s)のノードから、位置(Cx+1,s)のノードへの矢印(エッジ)に対するエネルギ値として0をセットする。有向グラフ生成部24は、この処理を0≦Cx<width-1を満たす全てのCxについて行なう。ここで、撮影画像の焦点距離をFとしてwidth=2πFである。
また、有向グラフ生成部24は、s枚目の投影画像の位置Cx=width-1に有効な画素があり、かつs枚目の投影画像の位置Cx=0に有向な画素がある場合、有効グラフの位置(width-1,s)のノードから、位置(0,s)のノードへのエッジに対するエネルギ値として0をセットする。
さらに、有向グラフ生成部24は、s=N+1について、1枚目(N+1枚目)の投影画像の位置Cxに有効な画素があり、かつ1枚目の投影画像の位置Cx+1に有効な画素があるか否かを判定する。そして、有向グラフ生成部24は、1枚目の投影画像の位置Cxと位置Cx+1に有効な画素がある場合、有効グラフにおける位置(Cx,N+1)のノードから、位置(Cx+1,N+1)のノードへのエッジに対するエネルギ値として0をセットする。
以上の処理により図8の有向グラフの右方向への矢印(エッジ)に対してエネルギが与えられる。この処理は図31および図32に示す擬似コードに相当する。
次に、有向グラフ生成部24は、各s(但し、1≦s≦N)について、差分累積値Diff[s,s+1](Cx)が有効であり、かつ差分累積値Diff[s,s+1](Cx+1)が有効であるかを判定する。そして有向グラフ生成部24は、それらの差分累積値が有効である場合、位置(Cx,s)のノードから、位置(Cx+1,s+1)のノードへのエッジに対するエネルギ値として、差分累積値Diff[s,s+1](Cx)と差分累積値Diff[s,s+1](Cx+1)の平均値をセットする。
有向グラフ生成部24は、この処理を0≦Cx<width-1を満たす全てのCxについて行なう。
また、有向グラフ生成部24は、各s(但し、1≦s≦N)について、差分累積値Diff[s,s+1](width-1)が有効であり、かつ差分累積値Diff[s,s+1](0)が有効であるかを判定する。そして有向グラフ生成部24は、それらの差分累積値が有効である場合、位置(width-1,s)のノードから、位置(0,s+1)のノードへのエッジに対するエネルギ値として、差分累積値Diff[s,s+1](width-1)と差分累積値Diff[s,s+1](0)の平均値をセットする。
これらの処理により、図8の有向グラフの図8中、右下方向への矢印(エッジ)に対してエネルギが与えられ、有向グラフが構築される。なお、これらの処理は図33に示す擬似コードに相当する。また、有向グラフ生成部24で生成される有向グラフでは、各ノード間のエッジにエネルギが与えられるが、このエネルギはそれらのノードの位置で投影画像を接続したときに生じる画像の破綻の度合いを示している。
このようにして各ノード間にエネルギが与えられて有向グラフが構築されると、得られた有向グラフは経路探索部25に供給され、処理はステップS15に進む。
ステップS15において、経路探索部25は、有向グラフ生成部24から供給された有向グラフに基づいて、エネルギ合計値が最小となる経路(以下、エネルギ最小経路とも称する)を探索する。
例えば、経路探索部25は図34に示す擬似コードを実行することで、エネルギ最小経路を探索する。
具体的には、経路探索部25は、各経路のエネルギ合計値の最小値minTotalの初期値として、画像処理装置11が取り扱える最大値をセットする。
次に、経路探索部25は、0≦Cx<width-1を満たすCxのなかから、まだ未処理のCxを選択する。ここで、width=2πFである。
そして、経路探索部25は選択したCxについて、位置(Cx,1)のノードから位置(Cx+1,1)のノードへのエッジにエネルギがセットされているか、または位置(Cx,1)のノードから位置(Cx+1,2)のノードへのエッジにエネルギがセットされている場合、次の処理を行なう。
すなわち、経路探索部25は、有向グラフにおいて位置(Cx,1)から出発して、位置(Cx,N+1)に至る経路のうち、エネルギ合計値が最小となる経路を動的計画法により算出する。このとき、エネルギ合計値算出部31は、各経路についてその経路上にあるノード間のエッジのエネルギの合計値をエネルギ合計値として算出する。
このようにして得られた位置(Cx,1)から位置(Cx,N+1)に至る、エネルギ合計値が最小となる経路が経路path(Cx)とされる。また、この経路path(Cx)のエネルギ合計値がtotal(Cx)とされる。
経路探索部25は、選択した位置Cxについて経路path(Cx)とエネルギ合計値total(Cx)を求めると、エネルギ最小経路minPathと、そのエネルギ最小経路minPathのエネルギ合計値、つまり各経路のエネルギ合計値の最小値minTotalとを更新する。
すなわち、今回求めた経路path(Cx)のエネルギ合計値total(Cx)が、最小値minTotal未満である場合、つまりtotal(Cx)<minTotalである場合、経路探索部25は、今回求めた経路path(Cx)をエネルギ最小経路minPathとする。また、経路探索部25は、その経路path(Cx)のエネルギ合計値total(Cx)を、新たな最小値minTotalとする。
なお、total(Cx)≧minTotalである場合には、エネルギ最小経路minPathと最小値minTotalの更新は行なわれない。
経路探索部25は、0≦Cx<width-1を満たす全てのCxを順番に選択しながら、各Cxについて経路path(Cx)とエネルギ合計値total(Cx)を求め、エネルギ最小経路minPathと最小値minTotalを更新することで、最終的なエネルギ最小経路minPathを求める。エネルギ最小経路minPathは、基準となる1枚目の投影画像の所定位置から、N+1枚目の投影画像の所定位置までを用いてパノラマ画像を生成する場合に、パノラマ画像において生じる画像の破綻が最も小さくなるような、各投影画像の接続位置を示している。
経路探索部25は、最終的に得られたエネルギ最小経路minPathをパノラマ画像生成部26に供給し、処理はステップS15からステップS16に進む。
ステップS16において、パノラマ画像生成部26は、経路探索部25から供給されたエネルギ最小経路minPathと、投影画像生成部22から供給された投影画像とに基づいて360度のパノラマ画像を生成し、出力する。
例えば、パノラマ画像生成部26は図35に示す擬似コードを実行することで、360度のパノラマ画像を生成する。
具体的には、パノラマ画像生成部26は、360度のパノラマ画像用としてパノラマ用キャンバス領域をCxCy座標系に確保する。
このとき、パノラマ用キャンバス領域の−Cx軸方向側の端における、パノラマ用キャンバス領域のCy軸方向の中間の位置が、CxCy座標系の原点となるようにパノラマ用キャンバス領域が配置される。また、パノラマ用キャンバス領域のCx軸方向の横幅widthは2πFとされ、パノラマ用キャンバス領域のCy軸方向の縦幅heightは、撮影画像のCy軸方向の画素数に0.9を乗算した値とされる。
次に、パノラマ画像生成部26の使用領域決定部32は、0≦Cx<widthを満たす所定のCxについて、有向グラフ上のエネルギ最小経路minPathが、位置(Cx,s)にあるノードを通るsを求め、求めたsをappropriateSとする。すなわち、エネルギ最小経路minPathにおいて、Cx座標が選択された所定のCxであるノードの位置(Cx,s)が求められ、その位置(Cx,s)のsがappropriateSとされる。
また、パノラマ画像生成部26は、このようにして得られたs=appropriateSについて、appropriateS枚目の投影画像の位置(Cx,Cy)(但し、-height/2≦Cy≦height/2)にある画素の画素値を、パノラマ用キャンバス領域の位置(Cx,Cy)に書き込む。すなわち、appropriateS枚目の投影画像におけるCx座標が所定のCxである各位置(Cx,Cy)の画素の画素値が、パノラマ用キャンバス領域の位置(Cx,Cy)にある画素の画素値とされる。
パノラマ画像生成部26は、以上の処理を0≦Cx<widthを満たす各Cxについて行なうことで、パノラマ用キャンバス領域の各画素に画素値を書き込み、最終的な360度のパノラマ画像とする。すなわち、パノラマ用キャンバス領域に書き込まれた各画素からなる画像が360度のパノラマ画像とされる。
ここで使用領域決定部32がエネルギ最小経路に基づいて、各Cx座標の値についてパノラマ画像の生成に用いる投影画像を求めることは、エネルギ最小経路に基づいて、パノラマ画像の生成に用いる投影画像の領域の境界位置(接続位置)を決定することと等しい。
パノラマ画像生成部26は、パノラマ画像を生成すると、生成したパノラマ画像を出力し、パノラマ画像生成処理は終了する。
以上のようにして、画像処理装置11は、投影画像から得られた差分累積値に基づいて有向グラフを生成し、得られた有向グラフ上のエネルギ合計値が最小となる経路に基づいて各投影画像をつなぎ合わせて360度のパノラマ画像を生成する。
このように、有向グラフを利用することで、画像の破綻が最小となるようにパノラマ画像の生成に用いる各投影画像間の接続位置を定めることができ、破綻の少ない高品質なパノラマ画像を得ることができる。
なお、ステップS14における有向グラフの生成時には位置(Cx,s)のノードを始点とし、位置(Cx+1,s)のノードを終点とするエッジのエネルギとして0をセットすると説明したが、有効な投影画像の端部分では所定の正の値をエネルギとしてセットするようにしてもよい。このようにすることで、エネルギ合計値が最小となる経路を探索すると、その経路は投影画像の中央部分を通りやすくなり、投影画像の端部分は通りにくくなる。
これにより、360度のパノラマ画像に用いられる各投影画像の領域として、投影画像の中央部分の領域がより使われやすくなり、端部分は使われにくくなる。一般的に、カメラ等の撮像装置では、画像の中央部分が鮮明に映るように設計されているので、このようなエネルギ設定を行なうことにより、パノラマ画像の生成に用いられる投影画像も鮮明な部分である中央部分が多く用いられることになる。その結果、より鮮明なパノラマ画像を得ることができるようになる。
また、以上においては1枚目の投影画像を基準として、1枚目の投影画像の各位置に対応する有向グラフのノードから、N+1枚目の投影画像の各位置に対応するノードまでのエネルギ最小経路を求めると説明したが、基準となる画像は1枚目の投影画像でなくてもよい。
例えば、2枚目の投影画像が基準とされる場合、すなわち2枚目の投影画像が1番目の投影画像とされる場合、1枚目の投影画像がN番目の投影画像とされ、2枚目の投影画像と同じ画像が1枚目の投影画像に続くN+1番目の投影画像とされる。そして、2枚目の投影画像の各位置に対応するノードから、N+1番目の投影画像の各位置に対応するノードまでのエネルギ最小経路が求められ、そのエネルギ最小経路に基づいて、パノラマ画像が生成される。
〈第2の実施の形態〉
[画像処理装置の構成例]
ところで、第1の実施の形態において説明した、有向グラフを利用してパノラマ画像を生成する方法(以下、有向グラフ手法とも称する)によれば、動被写体をなるべく分断することなく、パノラマ画像の生成に用いる投影画像のつなぎ目を決定することができる。しかしながら、有向グラフ手法では、場合によってはどのようなつなぎ目としても、動被写体の分断が生じてしまうこともあり得る。
そこで、さらに高品質なパノラマ画像が得られるように、360度以上の角度だけ回転させながら被写体の撮影を行なっていくつかのパノラマ画像を生成し、それらのパノラマ画像のうち、最も破綻の少ないものを最終的なパノラマ画像としてもよい。
具体的には、例えば有向グラフ手法では、36度ずつ撮像装置を回転させながら10枚の撮影画像を撮影していたところを、さらに余分な撮影を行なうようにする。すなわち、例えば36度ずつ撮像装置を回転させながら、12枚の撮影画像を撮影するようにする。
そして、1枚目から10枚目までの撮影画像が用いられて有向グラフ手法により360度のパノラマ画像が生成される。同様にして、2枚目から11枚目の撮影画像が用いられて、有向グラフ手法により360度のパノラマ画像が生成され、3枚目から12枚目の撮影画像が用いられて、有向グラフ手法により360度のパノラマ画像が生成される。
このようにして、3つのパノラマ画像が得られると、それらのなかから、最も高品質なパノラマ画像、つまり動被写体による破綻が少ないパノラマ画像が最終的なパノラマ画像として出力される。
例えば、パノラマ画像の動被写体による破綻を評価する指標としては、パノラマ画像生成時に求められるエネルギ最小経路minPathのエネルギ合計値である最小値minTotalを用いることができる。これは、最小値minTotalが、動被写体の破綻が最小となる経路を求めた際の動被写体の破綻の度合いを示しているからである。
以上のように、いくつかのパノラマ画像を生成し、それらのパノラマ画像のうちの最も破綻の少ないものを最終的なパノラマ画像として出力する場合、画像処理装置は、例えば図36に示すように構成される。
図36の画像処理装置81は、取得部91、画像セット生成部92、投影画像生成部22、差分累積値算出部23、有向グラフ生成部24、経路探索部25、パノラマ画像生成部26、および出力部93から構成される。なお、図36において、図22における場合と対応する部分には同一の符号を付してあり、その説明は適宜省略する。
取得部91は、撮像装置により連続して撮影されたMmax枚の撮影画像、各撮影画像と1枚目の撮影画像との位置関係を示す同次変換行列、および撮影画像の焦点距離Fを取得して画像セット生成部92に供給する。ここで、取得部91より取得されるMmax枚の撮影画像は、ユーザが撮像装置を360度以上回転移動させながら連続して撮影することで得られた画像である。
画像セット生成部92は、取得部91から供給された撮影画像、同次変換行列、および焦点距離Fに基づいて、1つのパノラマ画像を生成するのに必要な1周分(360度分)の撮影画像のセットを求める。
ここで、1周分の撮影画像のセット(以下、画像セットとも称する)は、ユーザが撮像装置を360度だけ回転移動させながら連続して撮影することで得られた撮影画像のセットである。また、より詳細には、画像セットには、撮影画像間の位置関係を示す同次変換行列と焦点距離Fも含まれている。
画像セット生成部92は、いくつかの画像セットを求め、得られたそれらの画像セットを投影画像生成部22に供給する。
投影画像生成部22は、画像セット生成部92から供給された画像セットごとに、画像セットに含まれる撮影画像の投影画像を生成し、差分累積値算出部23、有向グラフ生成部24、およびパノラマ画像生成部26に供給する。
差分累積値算出部23乃至パノラマ画像生成部26は、画像セットごとに差分累積値の算出、有向グラフの生成、エネルギ最小経路の探索、およびパノラマ画像の生成を行なう。このとき、経路探索部25は、画像セットごとに探索により得られたエネルギ最小経路と、最小値minTotal(すなわち、エネルギ最小経路のエネルギ合計値)をパノラマ画像生成部26に供給する。また、パノラマ画像生成部26は、画像セットごとにパノラマ画像と、そのパノラマ画像の最小値minTotalを出力部93に供給する。
出力部93は、パノラマ画像生成部26から供給された最小値minTotalに基づいて、パノラマ画像生成部26から供給されたパノラマ画像のなかから最終的なパノラマ画像を選択し、選択したパノラマ画像を出力する。
[画像セットについて]
ところで、1枚目の撮影画像を基準とした座標系におけるs枚目(但し、1<s≦Mmax)の撮影画像の位置関係を表す同次変換行列をH1,sとすると、次式(4)の関係が成立する。
なお、式(4)において、Fは撮影画像の焦点距離を示している。また、式(4)においてXt,Ytは、t枚目(但し、1≦t)の撮影画像を基準とする座標系におけるX座標およびY座標を示しており、s=1における同次変換行列H1,1は単位行列である。
式(4)の同次変換行列H1,sは、9個のスカラ量H1,s[a,b](但し、1≦a≦3,1≦b≦3)よりなる3×3行列である。
このような同次変換行列H1,sの意味を考えれば明らかなように、次式(5)で示される3次元ベクトルの方向が、1枚目の撮影画像を基準とした座標系におけるs枚目の撮影画像の撮影方向である。ここで、s枚目の撮影画像の撮影方向とは、1枚目の撮影画像を基準とした座標系の原点から、s枚目の撮影画像の中心に向かう方向である。
さらにいえば、スカラ量H1,s[1,3]の値が、1枚目の撮影画像を基準としたX1Y1Z1座標系におけるs枚目の撮影画像の撮影方向のX1座標である。
そこで、各sのスカラ量H1,s[1,3]の値を調べ、次式(6)を満たすsの値を求めることでM(1)=sとなる。
ここで、M(t)とは、Mmax枚の撮影画像群のなかのt枚目の撮影画像を撮影した方向を始点、つまり撮像装置の回転角度を0度としたときに、360度未満の回転のなかで撮影された最後の撮影画像が何番目(何枚目)の画像であるかを示している。
したがって式(6)の例では、1枚目の撮影画像の撮影方向を0度として、0度から360度(より詳細には360度を含まない)まで撮像装置を回転させながら撮影を行なったときに、1枚目からs枚目までの合計s枚の撮影画像が撮影されたことになる。
以上のことから、1枚目の撮影画像を基準とした360度のパノラマ画像を生成するには、1枚目乃至s枚目までのs枚の撮影画像を画像セットとして用いればよいことになる。
また、2枚目の撮影画像を基準としたX2Y2Z2座標系における、s枚目の撮影画像の位置関係を表す同次変換行列をH2,sとすると、この同次変換行列H2,sは、次式(7)の計算により求めることができる。すなわち、同次変換行列H1,2の逆行列と、同次変換行列H1,sとの積により同次変換行列H2,sが求まる。
ここで、同次変換行列H2,sの要素であるH2,s[1,3]の値が、2枚目の撮影画像を基準とした座標系におけるs枚目の撮影画像の撮影方向のX2座標である。そこで、各sのH2,s[1,3]の値を調べ、次式(8)を満たすsの値を求めることでM(2)=sが求まる。
さらに、3枚目の撮影画像を基準としたX3Y3Z3座標系における、s枚目の撮影画像の位置関係を表す同次変換行列をH3,sとすると、この同次変換行列H3,sは、次式(9)の計算により求めることができる。
ここで、同次変換行列H3,sの要素であるH3,s[1,3]の値が、3枚目の撮影画像を基準とした座標系におけるs枚目の撮影画像の撮影方向のX3座標である。そこで、各sのH3,s[1,3]の値を調べ、次式(10)を満たすsの値を求めることでM(3)=sが求まる。
同様にして、M(4),M(5),・・・と、各M(k)の値を決定していくことができる。例えば、t枚目の撮影画像を基準としたXtYtZt座標系における、s枚目の撮影画像の位置関係を表す同次変換行列をHt,sとすると、この同次変換行列Ht,sは、次式(11)の計算により求めることができる。すなわち、同次変換行列H1,tの逆行列と、同次変換行列H1,sとの積により同次変換行列Ht,sが求まる。
ここで、同次変換行列Ht,sの要素であるHt,s[1,3]の値が、t枚目の撮影画像を基準とした座標系におけるs枚目の撮影画像の撮影方向のXt座標である。そこで、各sのHt,s[1,3]の値を調べ、次式(12)を満たすsの値を求めることでM(t)=sが求まる。
もちろん、ここでは撮影画像の撮影枚数はMmaxであるので、あまりに大きいtについては、M(t)は存在しないことになる。そこで、M(t)枚目の撮影画像が存在(確定)しているtについてのみ、1周分の画像セットを生成すればよい。
[パノラマ画像生成処理の説明]
次に、図37のフローチャートを参照して、画像処理装置81により行なわれるパノラマ画像生成処理について説明する。
なお、以下においては、ユーザからみて右方向(時計回りの方向)にユーザが撮像装置を回転させながら撮影画像を撮影する場合について説明するが、左方向に回転させながら撮影を行なった場合でも同様の処理が行なわれる。
ステップS91において、取得部91は、Mmax枚の撮影画像、各撮影画像と1枚目の撮影画像との位置関係を示す同次変換行列、および各撮影画像の焦点距離Fを示す情報を取得して、画像セット生成部92に供給する。
ステップS92において、画像セット生成部92は、取得部91から供給された撮影画像、同次変換行列、および焦点距離Fに基づいて、いくつかの画像セットを生成し、投影画像生成部22に供給する。
具体的には、画像セット生成部92は図38に示す擬似コードを実行することで、いくつかの画像セットを生成する。
すなわち、画像セット生成部92は、基準となる撮影画像の撮影された順番、つまり何枚目に撮影された撮影画像であるかを示す値をt(但し、1≦t≦Mmax)として、tの値を選択する。例えば、tの値として1からMmaxまで順番に選択されていく。
続いて、画像セット生成部92は、上述した式(11)の計算を行なうことで、t枚目の撮影画像を基準とした座標系におけるs枚目の撮影画像の位置を示す同次変換行列Ht,sを算出する。
また、画像セット生成部92は、求めた同次変換行列Ht,sの要素であるHt,s[1,3]について、式(12)を満たすsの値を求めることで、t枚目の撮影画像を基準とした360度のパノラマ画像の生成に用いる最後のM(t)枚目の撮影画像を特定する。
このとき、式(12)を満たすsの値が存在する場合には、画像セット生成部92は、t枚目からs枚目(M(t)枚目)までの撮影画像、同次変換行列Ht,s、および焦点距離Fからなる画像セットを、t枚目の撮影画像を基準とした360度のパノラマ画像の画像セットとする。
そして、画像セット生成部92は、次のtの値を選択し、上述した処理を繰り返し行なう。また、式(12)を満たすsの値が存在しない場合、t枚目以上の撮影画像を基準とした360度のパノラマ画像の画像セットは得られないので、画像セット生成部92は、画像セットを生成する処理を終了する。
このようにして複数の画像セットが生成されると、画像セット生成部92は、生成した画像セットを投影画像生成部22に供給し、その後、処理はステップS93に進む。なお、以下においては、ステップS92の処理により、1枚目の撮影画像を基準とする画像セットから、T枚目の撮影画像を基準とする画像セットまでの合計T個の画像セットが得られたものとして説明を続ける。なお、ここでいうTとは、図38に示す擬似コードにおけるTmaxのことである。
ステップS92の処理が行なわれると、その後、ステップS93乃至ステップS97の処理が行なわれるが、これらの処理は図23のステップS12乃至ステップS16の処理と同様であるので、その説明は省略する。
但し、ステップS93乃至ステップS97では、T個の画像セットのそれぞれについて処理が行なわれ、T個の画像セットに対応するT個の360度のパノラマ画像が生成される。
例えば、t個目(1≦t≦T)の画像セットについての投影画像の生成時には、t枚目の撮影画像を基準とした座標系に対して円筒面上にCxCy座標系が定められる。すなわち、画像セットに含まれている同次変換行列Ht,sや焦点距離Fが用いられて、各撮影画像の円筒面へのマッピング処理が行なわれ、投影画像が生成される。
また、パノラマ画像生成部26は、T個のパノラマ画像を生成すると、それらのパノラマ画像生成時に求められた最小値minTotalと、パノラマ画像とを出力部93に供給する。
ステップS98において、出力部93は、パノラマ画像生成部26から供給された最小値minTotalに基づいて、パノラマ画像生成部26からのパノラマ画像から最終的なパノラマ画像を選択する。
各パノラマ画像について求められた最小値minTotalは、そのパノラマ画像の生成に用いられた投影画像から構築された有向グラフにおける、各経路のエネルギ合計値のうちの最小値である。つまり、最小値minTotalは、エネルギ最小経路のエネルギ合計値であり、パノラマ画像の動被写体等による破綻度合いを示している。したがって、最小値minTotalが最も小さいパノラマ画像が、破綻が少ない最も高品質なパノラマ画像ということになる。
そこで、出力部93は、T個のパノラマ画像のうち、最小値minTotalが最小となるパノラマ画像を、最終的な360度のパノラマ画像として選択し、出力する。パノラマ画像が出力されると、パノラマ画像生成処理は終了する。
以上のようにして、画像処理装置81は、撮像装置を360度以上回転移動させながら撮影された複数の撮影画像から、360度のパノラマ画像の生成に必要な画像セットを複数生成し、それらの画像セットごとにパノラマ画像を生成する。そして、画像処理装置81は、得られたパノラマ画像のうち、最も高品質なパノラマ画像を最終的なパノラマ画像として出力する。
このように、パノラマ画像の生成に用いる基準(開始点)となる撮影画像の位置を変えながら複数のパノラマ画像を生成することで、さらに高品質なパノラマ画像を得ることができる。
ところで、上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウェアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどが含まれる。
図39は、上述した一連の処理をプログラムにより実行するコンピュータのハードウェアの構成例を示すブロック図である。
コンピュータにおいて、CPU(Central Processing Unit)201,ROM(Read Only Memory)202,RAM(Random Access Memory)203は、バス204により相互に接続されている。
バス204には、さらに、入出力インターフェース205が接続されている。入出力インターフェース205には、入力部206、出力部207、記録部208、通信部209、及びドライブ210が接続されている。
入力部206は、キーボード、マウス、マイクロホンなどよりなる。出力部207は、ディスプレイ、スピーカなどよりなる。記録部208は、ハードディスクや不揮発性のメモリなどよりなる。通信部209は、ネットワークインターフェースなどよりなる。ドライブ210は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブルメディア211を駆動する。
以上のように構成されるコンピュータでは、CPU201が、例えば、記録部208に記録されているプログラムを、入出力インターフェース205及びバス204を介して、RAM203にロードして実行することにより、上述した一連の処理が行われる。
コンピュータ(CPU201)が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア211に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供することができる。
コンピュータでは、プログラムは、リムーバブルメディア211をドライブ210に装着することにより、入出力インターフェース205を介して、記録部208にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部209で受信し、記録部208にインストールすることができる。その他、プログラムは、ROM202や記録部208に、あらかじめインストールしておくことができる。
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
また、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
例えば、本技術は、1つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
また、上述のフローチャートで説明した各ステップは、1つの装置で実行する他、複数の装置で分担して実行することができる。
さらに、1つのステップに複数の処理が含まれる場合には、その1つのステップに含まれる複数の処理は、1つの装置で実行する他、複数の装置で分担して実行することができる。
さらに、本技術は、以下の構成とすることも可能である。
[1]
撮像装置を回転させながら連続して撮影された複数の撮影画像を接続して360度のパノラマ画像を生成する画像処理装置であって、
互いに隣接する前記撮影画像間の差分情報を算出する差分算出部と、
前記差分情報に基づいて、隣接する前記撮影画像を所定位置で接続した場合に生じる画像の破綻の度合いを示すデータを生成するデータ生成部と、
基準となる前記撮影画像と同じ画像を、前記基準となる前記撮影画像からN枚目の前記撮影画像に続くN+1枚目の前記撮影画像として、前記基準となる前記撮影画像の特定位置から、前記N+1枚目の前記撮影画像の前記特定位置までを用いて前記パノラマ画像を生成する場合に、画像の破綻度合いが最小となる前記撮影画像間の接続位置を前記データに基づいて決定する決定部と、
決定された前記接続位置に基づいて前記撮影画像を接続して、前記パノラマ画像を生成する画像生成部と
を備える画像処理装置。
[2]
前記決定部は、複数の異なる前記特定位置について求められた前記接続位置のうち、前記パノラマ画像の破綻度合いが最小となる前記接続位置を最終的な前記接続位置とする
[1]に記載の画像処理装置。
[3]
前記データは、隣接する前記撮影画像を前記所定位置で接続した場合に生じる画像の破綻の度合いを、前記撮影画像の前記所定位置に対応するノードのエッジのエネルギとして有する有向グラフである
[1]または[2]に記載の画像処理装置。
[4]
前記データ生成部は、隣接する第1の前記撮影画像と第2の前記撮影画像の前記所定位置における前記差分情報と、前記第1の前記撮影画像と前記第2の前記撮影画像の前記所定位置に隣接する他の位置における前記差分情報との平均値を画像の破綻度合いとして算出し、前記平均値を前記第1の前記撮影画像の前記所定位置に対応するノードと、前記第2の前記撮影画像の前記他の位置に対応するノードとの間のエッジのエネルギとする
[3]に記載の画像処理装置。
[5]
前記決定部は、前記有向グラフにおける前記基準となる前記撮影画像の前記特定位置に対応するノードから、前記N+1枚目の前記撮影画像の前記特定位置に対応するノードまでの経路のうち、前記経路上にあるノード間のエッジのエネルギの合計値が最小となる前記経路を特定することで、前記撮影画像間の前記接続位置を決定する
[4]に記載の画像処理装置。
[6]
前記画像生成部は、複数の異なる前記撮影画像のそれぞれを前記基準となる前記撮影画像として複数の前記パノラマ画像を生成し、
前記複数の前記パノラマ画像のうち、画像の破綻度合いが最小となる前記パノラマ画像を最終的な前記パノラマ画像として出力する出力部をさらに備える
[1]乃至[5]の何れかに記載の画像処理装置。