以下に、本開示の画像処理装置、画像処理方法及びプログラムについて、その実施形態を示す図面に基づいて具体的に説明する。
(実施形態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等を含み、これらの各部はバスを介して相互に接続されている。制御部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から受け付けた指示に基づいて撮像素子が取得したデータに対して、各種画像処理を行い、撮影画像を生成する。
図3はカメラ20の外観を示す模式図である。本実施形態のカメラ20は、略長方形板状の板状部28を有する。本実施形態のカメラ20は、図3に示すように板状部28の長辺方向を上下方向に向けた状態で撮影するので、以後の説明において、板状部28の長辺方向をカメラ20の上下方向と記載する。また、板状部28の長辺方向を上下方向に向けた状態のカメラ20において、板状部28の第1広面281側をカメラ20の前側(正面側)、第2広面282側をカメラ20の後側(背面側)、板状部28の短辺方向をカメラ20の左右方向とそれぞれ記載する。本実施形態では、カメラ20は板状部28の長辺方向を正確に鉛直方向(重力の方向)に向けた状態で用いる必要はない。よって、カメラ20の上下方向は鉛直方向である必要はなく、カメラ20の前後左右方向を含む平面は、鉛直方向に直交する水平面である必要はない。
カメラ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に示した右方向をX軸の正側、上方向をY軸の正側、後ろ方向をZ軸の正側とする右手系の直交座標系を用いる。極座標系は、方位角φ及び天頂角θ、並びに中心点Cからの距離rによって座標が示される座標系を用いる。極座標系の方位角は、第2光軸側(Z軸の正側)を基準として、XZ面(カメラ20の前後左右方向を含む平面)内の反時計回りの角度φを示す。第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に示すように横軸を方位角φとし縦軸を天頂角θとする平面に展開した長方形の撮影画像(以下では、パノラマ画像という)を生成する。このパノラマ画像を構成する各画素には、全天球画像における各画素の輝度が割り当てられる。なお、図4Bに示すように、長方形(平面)のパノラマ画像は、左下を原点(0,0)とし、原点(0,0)は、方位角φが2πラジアンで天頂角θがπラジアンの位置の画素を示す。また、パノラマ画像は、右方向に方位角φが小さくなり、パノラマ画像の右端は方位角φが0ラジアンの位置の画素であり、上方向に天頂角θが小さくなり、パノラマ画像の上端は天頂角θが0ラジアンの位置の画素である。このように、カメラ20は、カメラ20の正面方向(第1光軸の方向)を撮影中心とし、正面方向に存在する被写体が画像中央に写るように展開したパノラマ画像を生成する。
カメラ20の制御部21は、撮影処理を行った場合、中心点C(撮影位置)の位置情報と、図4Bに示すパノラマ画像とを通信部23から画像処理装置10へ送信する。画像処理装置10の制御部(画像取得部)11は、カメラ20から送信されたパノラマ画像及び位置情報を通信部13にて取得する。なお、カメラ20の制御部21は、図4Aに示す全天球画像の撮影画像を画像処理装置10へ送信し、画像処理装置10が、全天球画像から、図4Bに示すパノラマ画像を生成する処理を行ってもよい。画像処理装置10の制御部11は、カメラ20から取得した中心点Cの位置情報とパノラマ画像とを対応付けてパノラマ画像DB12aに記録する。カメラ20は、Exif(Exchangeable image file format)形式を使用することにより、中心点Cの位置情報と撮影画像とを一つのファイルで送信することが可能である。
カメラ20は撮影によって画像データ(撮影画像データ)を取得するが、以下では画像データを単に画像という場合がある。従って、撮影画像は撮影画像データを意味する場合があり、パノラマ画像はパノラマ画像データを意味する場合がある。撮影画像は、複数の画素を含み、撮影画像データは、各画素の撮影画像中の位置(座標)を示す位置情報(画素値)と各画素の輝度とを対応付けて有する。撮影位置の情報は、例えば矩形の部屋の任意の位置を基準とした位置の情報であり、カメラ20に内蔵されているセンサにより測定されてもよく、他のセンサ等により測定されてカメラ20又は画像処理装置10へ送信されてもよい。また、GPS(Global Positioning System)を用いて撮影位置の情報を取得してもよい。なお、撮影位置の位置情報は必ずしも必要ではなく、カメラ20は、取得したパノラマ画像のみを画像処理装置10へ送信する構成でもよい。
本実施形態では、カメラ20を用いて、賃貸住宅及び販売住宅等の不動産物件の部屋、ホテル及び民宿等の宿泊施設の部屋等を撮影する。カメラ20を用いて撮影する空間は、博物館、美術館、テーマパーク、アミューズメント施設、観光地、商業施設等であってもよい。
本実施形態のカメラ20は、カメラ20の前側(正面方向側)の景色が画像中の左右方向の中央部に写り、カメラ20の後側(背面方向側)の景色が画像中の左右端部に写るパノラマ画像を生成する。このようなパノラマ画像では、カメラ20の上下方向(板状部28の長辺方向)がパノラマ画像の上下方向となるので、カメラ20の正面方向(撮影方向)よりも上側の景色が画像中の上下方向の上側に写り、正面方向よりも下側の景色が画像中の上下方向の下側に写る。よって、カメラ20の上下方向(板状部28の長辺方向)を撮影空間上(実空間上)の鉛直方向に正確に一致させた状態で撮影を行った場合、撮影空間上の鉛直方向がパノラマ画像の上下方向に一致し、撮影位置と同じ高さにある被写体が画像の上下方向の中央部に写るパノラマ画像が得られる。即ち、図4Bに示すように、撮影位置を含む水平面(撮影高さでの水平面)上にある被写体が、パノラマ画像の上下方向の中央(方位角θ=π/2の各位置)に写る。
図5は、カメラ20の上下方向が撮影空間上の鉛直方向に対して傾いた状態での撮影を説明するための模式図である。図5Aは、カメラ20を右側から見た状態を示し、図5Bは、図5Aの状態で撮影した場合に得られる全天球画像を、図4Aに示す直交座標系のX軸正方向(カメラ20の右側)から見た状態を示し、図5Cは、図5Bに示す全天球画像を展開したパノラマ画像を示す。図5A中の破線Vは実空間上の鉛直方向(重力の方向)を示し、破線Hは実空間上の水平方向(鉛直方向に直交する方向)を示す。図5Aに示すカメラ20では、カメラ20の上下方向(板状部28の長辺方向)が鉛直方向Vに対して傾斜している。この場合、図5Aに示すように、カメラ20の第1光軸及び第2光軸が、水平方向Hに対して傾斜を有する。従って、図5Aの状態で撮影した場合、カメラ20の第1光軸及び第2光軸の方向(カメラ20の前後方向)と、カメラ20の左右方向とを含む平面上にある被写体が、図5Bに一点鎖線で示すように、天頂角θがπ/2の位置に写る全天球画像が得られる。なお、図5B中の破線は、図5A中の水平方向Hを含む水平面上にある被写体が写る位置を示している。図5Bに示すような全天球画像をパノラマ画像に展開した場合、撮影方向(カメラ20の正面方向)を撮影中心F0とし、撮影中心F0の被写体が画像の中央に写るパノラマ画像が得られる。即ち、カメラ20の前後左右方向を含む平面上にある被写体が、図5C中に一点鎖線で示すように画像中の上下方向の中央に写り、実空間上の水平方向Hを含む水平面上にある被写体が、図5C中に破線で示すような各位置に写るようなパノラマ画像が得られる。実空間上の水平方向Hを含む水平面上にある被写体は、本来画像中の上下方向の中央部に写るべきであるが、図5Cに示すパノラマ画像から分かるように、カメラ20の上下方向が鉛直方向Vに対して傾斜した状態で撮影した場合、水平方向Hを含む水平面上にある被写体が、画像中の上下方向の中央部に写らないパノラマ画像が得られる。このようなパノラマ画像は、見る人に違和感を与え、見た人は画像の歪みを感じる虞がある。
そこで、本実施形態の画像処理装置10は、図5Cに示すように実空間上の水平面上にある被写体が、画像中の上下方向の中央部に写っていないパノラマ画像に対して補正処理(天頂補正)を行い、画像中の上下方向の中央部に写るパノラマ画像に補正する。図6は天頂補正処理を説明するための模式図であり、図6Aは天頂補正前のパノラマ画像の例を示し、図6Bは天頂補正後のパノラマ画像の例を示す。図6A及び図6B中の実線Lは、実空間上の水平面上にある被写体の画像中の撮影位置を示す。よって、本実施形態の画像処理装置10は、図6Aに示すように実空間における水平面上にある被写体が画像中の上下方向の中央部に写っていないパノラマ画像を、図6Bに示すように画像中の上下方向の中央部に写っているパノラマ画像に補正する処理を行う。
次に、画像処理装置10において制御部11が天頂補正プログラムPを実行することによって実現される機能について説明する。図7は、画像処理装置10の制御部11によって実現される機能を示すブロック図である。画像処理装置10の制御部11は、記憶部12に記憶してある天頂補正プログラムPを実行した場合、特徴点取得部31、回転角変化特定部32、補正量特定部33、補正部34の各機能を実現する。なお、本実施形態では、これらの各機能を制御部11が天頂補正プログラムPを実行することにより実現するが、これらの一部を専用のハードウェア回路で実現してもよい。
以下、図6Aに示すようなパノラマ画像を、図6Bに示すようなパノラマ画像に補正する天頂補正処理について説明する。図8及び図9は天頂補正処理を説明するための模式図である。
特徴点取得部31は、パノラマ画像において、実空間上で鉛直方向に存在する2点がそれぞれ写っている位置を特徴点のペアとして取得する。具体的には、特徴点取得部31は、実空間内で鉛直方向に伸びる鉛直構造物において鉛直方向の境界線上の2点に対応するパノラマ画像中の画素をそれぞれ特徴点として取得する。特徴点取得部31は、このような特徴点のペアを2組取得する。例えば図8Aに示すパノラマ画像では、特徴点取得部31は、柱において鉛直方向に伸びる角を示す線上の天井側の端部及び床側の端部をそれぞれ特徴点A0,A1として取得し、ドアにおいて鉛直方向に伸びる右端を示す線上の天井側の端部及び床側の端部をそれぞれ特徴点B0,B1として取得する。特徴点取得部31は、4つの特徴点A0,A1,B0,B1を,例えばユーザ入力によって取得する。この場合、例えば特徴点取得部31は、画像処理装置10の表示部15にパノラマ画像を表示し、特徴点とすべき箇所(画素)を入力部14にて受け付ける。ユーザは、表示されたパノラマ画像において、鉛直構造物である被写体における鉛直方向に伸びる線を2つ特定し、それぞれの線上の2点をそれぞれ特徴点として入力部14を介して指定する。特徴点取得部31は、入力部14を介して受け付けた4つの特徴点についてパノラマ画像中の座標値を取得する。なお、特徴点取得部31は、特徴点A0,A1の座標値と、特徴点B0,B1の座標値とをそれぞれペアとして取得する。
また特徴点取得部31は、パノラマ画像中の特徴点の各ペアを画像認識によって自動的に抽出してもよい。実空間内で鉛直方向に伸びる線は、パノラマ画像においても概ね直線状の線である。よって、特徴点取得部31は、例えばハフ変換(Hough transform)と呼ばれる手法を用いてパノラマ画像中の直線を自動的に検出し、検出した直線上の両端部の画素の座標値をそれぞれ特徴点として取得してもよい。
回転角変化特定部32及び補正量特定部33は、特徴点取得部31が取得した特徴点の各ペアに基づいて、後段の補正部34によって図6Aに示すようなパノラマ画像を、図6Bに示すようなパノラマ画像に補正するための補正量を特定する。具体的には、図6Aに示すように実空間における水平面上にある被写体が画像中の上下方向の中央部に写っていないパノラマ画像を、図6Bに示すように画像中の上下方向の中央部に写っているパノラマ画像に補正するための補正量を特定する。即ち、補正量とは、撮影時におけるカメラ20の前後左右方向を含む平面が、実空間上の水平面に対して傾斜する中心軸(回転軸)及び回転角度を含む。なお、カメラ20の前後左右方向を含む平面は、この平面と実空間上の水平面との交線を回転軸として、実空間上の水平面を基準に回転している。撮影時におけるカメラ20の前後左右方向を含む平面は、図5Bに一点鎖線で示すように、パノラマ画像に係る全天球上の撮影中心F0を通る大円を含む平面である。以下では、撮影時におけるカメラ20の前後左右方向を含む平面を撮影時平面という。
図5Bから分かるように、撮影時平面は、実空間上の水平方向Hを含む水平面に対して、撮影位置(中心点C)を通る軸(回転軸)を中心として回転している。なお、図5Bに示す例では、撮影時平面は、X軸を回転軸として水平面に対して回転しているが、回転軸は任意の方向の軸である。よって、回転角変化特定部32及び補正量特定部33は、実空間上の水平面を基準として撮影時平面が回転する回転軸及び回転角度を補正量として特定する。ここで、図5Bから分かるように、回転軸は、撮影時平面上の線分であるだけでなく、実空間上の水平面上の線分でもあるので、回転軸の方向にある被写体は、天頂補正処理の前後のパノラマ画像において共に画像中の上下方向の中央部のいずれかの位置に写ることになる。即ち、図8Bに示すパノラマ画像において、画像の上下方向の中央を示す直線CL上のいずれかの位置に、回転軸の方向にある被写体が写っている。
図8Bに示すパノラマ画像において、仮に回転軸の方向にある被写体の位置(以下では回転軸位置という)が画像中の直線CL上の点xa の位置であり、実空間上の水平面を基準とした撮影時平面の回転角度がαxa であったとする。この場合、補正部34は、図8Bに示すパノラマ画像に対して、回転軸位置xa の方角を回転軸として3次元的に回転角度(-αxa )だけ回転させる天頂補正処理を行うことにより、図6Bに示すパノラマ画像に補正できる。即ち、図6Bに示すように、実空間上で鉛直方向に並ぶ2点に対応する2つの特徴点A0,A1及びB0,B1がそれぞれ画像中に上下方向に並ぶパノラマ画像に補正される。よって、回転角変化特定部32及び補正量特定部33は、補正部34による天頂補正処理のために、パノラマ画像中の回転軸位置と、実空間上の水平面を基準とした撮影時平面の回転角度とを特定すればよい。
ここで、図9に示すように、パノラマ画像中の各画素の位置を、画像の左上を原点(0,0)とし、原点から右方向をX軸とし下方向をY軸とした画像座標系の座標(xI ,yI )で表すとする。なお、パノラマ画像の高さ(上下方向の長さ)はHとし、幅(左右方向の長さ)はWとする。この場合、直線CL上の回転軸位置の候補は、画像座標系の座標(xI ,H/2)(0≦xI ≦W-1)で表される。
回転角変化特定部32はまず、図9に示すようなパノラマ画像において、回転軸位置の候補位置を、画像中の直線CL上で移動させる。具体的には、回転角変化特定部32は、回転軸位置の候補位置の座標値として、画像座標系の座標値(0,H/2)から座標値(W-1,H/2)までの直線CL上で、X座標値を所定値ずつ増加させた各座標値を取得する。なお、各候補位置の間隔(所定値)は十分微小であればどのような値でもよく、例えば1画素毎としてもよく、この場合、W個の候補位置の座標値が得られる。回転角変化特定部32は、上述したような各候補位置について、それぞれの候補位置が回転軸位置であった場合に、補正後のパノラマ画像において特徴点A0,A1及び特徴点B0,B1の各ペアが画像中の上下方向に存在するための補正量(回転角度)を特定する。ここで、撮影時においてカメラ20の上下方向は逆転していないと仮定し、回転角変化特定部32は、回転角度αxa の候補角度として、-π/2からπ/2までの範囲内で所定量ずつ増加させた角度を取得する。なお、回転角度αxa の候補角度の間隔(所定量)は十分微小であればよく、例えばπ/100ラジアンとしてもよく、この場合、0を含めて101個の候補角度が得られる。
回転角変化特定部32は、上述した回転軸位置の候補位置のそれぞれにおいて、上述した回転角度αxa の候補角度のそれぞれについて、それぞれの候補角度だけ回転させた場合に、回転後(補正後)のパノラマ画像において特徴点A0,A1が画像中の上下方向に並ぶか否かを判断し、特徴点A0,A1が画像中の上下方向に並ぶ回転角度(回転角度αxa の候補角度)を特定する。
ここで、回転軸位置の候補位置が図8Bに示すパノラマ画像中の点xa の位置であり、回転角度の候補角度がαxa である場合に、回転軸位置xa 及び回転角度αxa に基づく天頂補正(回転)によって、補正前のパノラマ画像中の各画素が移動する補正後のパノラマ画像中の位置の算出処理について説明する。なお、回転軸位置xa 及び回転角度αxa に基づく天頂補正(回転)をパノラマ画像に行う場合、パノラマ画像中の各画素の座標値を画像座標系から、撮影位置を原点としたワールド直交座標系に変換し、ワールド直交座標系において天頂補正(回転)を行う。なお、画像座標系からワールド直交座標系に変換する場合、一旦極座標系に変換した後にワールド直交座標系に変換する。よって、まず、正距円筒図法による矩形のパノラマ画像中の任意の画素の位置を画像座標系の座標(xI ,yI )で表した場合、画像座標系の座標(xI ,yI )を、以下の(3)式によって極座標系の座標(rL ,θL ,φL )に変換する。なお、極座標系における座標値は、画像座標系における座標値と1対1で対応しているので、以下の(3)式により変換可能であり、極座標系における半径rL は便宜上1とする。
ここで、パノラマ画像中の回転軸位置xa についても、画像座標系の座標値から極座標系の座標値に変換されるが、回転軸位置xa はパノラマ画像中の直線CL上に位置するため、回転軸位置xa の極座標系における天頂角θは必ずπ/2となる。回転軸位置xa の極座標系における方位角をφxa とすると、回転軸位置xa は極座標系の座標(rL ,π/2,φxa )で表される。次に、パノラマ画像中の画素の極座標系における座標(rL ,θL ,φL )を、以下の(4)式によってワールド直交座標系の座標(xW ,yW ,zW )に変換する。
図10は、極座標系及びワールド直交座標系の関係を示す模式図である。ワールド直交座標系には、実空間上の鉛直上方向をYW 軸の正側、実空間上の水平面をXW 軸及びZW 軸で表す3次元の右手系の直交座標系を用いる。図10に示すように極座標系は、実空間上の鉛直上方向(YW 軸の正側)を基準とした天頂角θL と、鉛直上方向から見てZW 軸の正側を基準として水平面であるXW ZW 平面内の反時計回りの方位角φL と、原点0からの距離rL とによって表される。よって、3次元空間中の任意の位置Pは、ワールド直交座標系の座標(xW ,yW ,zW )と極座標系の座標(rL ,θL ,φL )とで表すことができる。なお、ワールド直交座標系の座標(xW ,yW ,zW )は、以下の(5)式によって極座標系の座標(rL ,θL ,φL )に変換可能である。
このようにして求められたワールド直交座標系の座標(xW ,yW ,zW )に基づいて、パノラマ画像に天頂補正(回転)処理を行う。ここで、回転軸位置xa に基づく回転軸は、任意の方向の軸であるので、回転軸に基づく回転処理を行う前に、ワールド直交座標系のYW 軸を中心に時計回りにφxa 回転させて、回転軸位置xa に基づく回転軸を一旦ワールド直交座標系のZW 軸に一致させる。その後、ワールド直交座標系のZW 軸を中心に回転角度αxa 回転させ、回転角度αxa に基づく天頂補正(回転)を行う。更に、最初のYW 軸を中心とした回転を戻すために、ワールド直交座標系のYW 軸を中心に反時計回りにφxa 回転させる。なお、ワールド直交座標系のYW 軸を中心とした角度θの回転、及びZW 軸を中心とした角度θの回転は、3×3の行列を用いて、以下の(6)式のように表される。よって、回転前のワールド直交座標系の座標(xW ,yW ,zW )から、以下の(7)式により回転後の座標(xW ´,yW ´,zW ´)が得られる。
このようにして3次元的に回転されたパノラマ画像中の画素を再び、座標変換により極座標系を経由して画像座標系の座標値に戻す。なお、ワールド直交座標系の座標(xW ,yW ,zW )は、上記の(5)式によって極座標系の座標(rL ,θL ,φL )に変換され、極座標系の座標(rL ,θL ,φL )は、以下の(8)式により画像座標系の座標(xI ,yI )に変換される。これにより、回転軸位置xa 及び回転角度αxa に基づく天頂補正(回転)によって、補正前のパノラマ画像中の画素が移動する補正後のパノラマ画像中の位置が算出される。
上述した演算処理により、回転角変化特定部32は、特徴点取得部31が取得した特徴点A0,A1に対して、回転軸位置の候補位置のそれぞれと、回転角度の候補角度のそれぞれとの各組合せに基づく天頂補正(回転)処理を行い、補正後のパノラマ画像における特徴点A0,A1の位置(座標値)を算出する。そして回転角変化特定部32は、回転軸位置の各候補位置に対して、補正後のパノラマ画像において特徴点A0,A1のX座標値が略同じとなる回転角度を特定する。具体的には、回転角変化特定部32は、回転軸位置のある候補位置に対して、回転角度の候補角度を-π/2から所定量ずつ増加させ、各候補角度に基づく天頂補正後のパノラマ画像における特徴点A0,A1の座標値を算出する。
ここで、例えば図8Aに示すパノラマ画像では、天井側の特徴点A0は床側の特徴点A1よりも左側に位置している。仮に図8B中の点xa を回転軸位置とし、回転軸位置xa に係る回転軸を中心に、図8B中の矢符で示す方向に回転させる天頂補正を行った場合、回転角度αを徐々に増加させるにつれて、特徴点A0の左右方向の位置は徐々に右方向に移動し、特徴点A1の左右方向の位置は徐々に左方向に移動する。回転角度αがある値αxa となったとき、特徴点A0,A1の左右方向の位置(X座標値)は同じとなり、特徴点A0,A1は画像中の上下方向に並ぶ。この状態のパノラマ画像では、鉛直構造物が画像中で上下方向に配置された状態で写っている。引き続き回転角度αを増加させると、特徴点A0,A1の左右方向の位置が逆転し、この状態のパノラマ画像では、鉛直構造物・BR>ェ画像中の上下方向に対して再び傾いた状態となる。従って、画像中の直線CL上のある位置を回転軸位置とした場合、この回転軸位置に係る回転軸に基づいてパノラマ画像に対して天頂補正を適切に行える回転角度αxa の値は一意に定まる。
よって、回転角変化特定部32は、回転軸位置の各候補位置に対して、一意に決まる回転角度を特定する。なお、回転角度の候補角度は所定量ずつ異なる離散値を用いるので、補正後のパノラマ画像において特徴点A0,A1のX座標値が完全に一致するような回転角度を得ることは難しい。従って、回転角変化特定部32は、例えば、補正後のパノラマ画像における特徴点A0,A1の左右関係が逆転したときの回転角度を、このときの候補位置に対する回転角度に特定してもよい。回転角変化特定部32は、特定した回転軸位置の各候補位置に対する回転角度を、記憶部12に設けられた1次元配列に格納する。このように特定される回転角度αxa の値は、補正前のパノラマ画像中の直線CL上の各位置(回転軸位置)の画像座標系のX座標値を変数とした関数αxa (xI )で表現できる。
図11は関数αxa (xI )を示す図である。図11Aには、図8Bに示すパノラマ画像中の特徴点A0,A1に基づいて特定された、回転軸位置の画像座標系におけるX座標値xI と、回転角度αxa との関係を表す関数αxa (xI )を示す。図11Aに示す関数αxa (xI )は、横軸を回転軸位置の画像座標系におけるX座標値XI とし、縦軸を回転角度αxa として、回転軸位置のX座標値の変化に応じた回転角度αxa の変化を示す。図11Aは、0~WのX座標値と-π/2~π/2の回転角度とによる2次元空間に、回転角変化特定部32が特定した回転軸位置xI 及び回転角度αxa の組合せをプロットした図である。これは、特徴点取得部31が取得した1組の特徴点A0,A1のペアに基づいて、回転角変化特定部32が、回転軸位置xI 及び回転角度αxa の候補の組合せとして、回転軸位置及び回転角度による2次元の探索範囲内の各候補から、図11Aに実線で示す曲線上の各候補に絞り込んだことを示す。即ち、回転角変化特定部32は、特徴点のペアに基づいて、回転軸位置の各候補位置における回転角度の候補角度を特定する候補特定部として機能する。
回転角変化特定部32は、特徴点取得部31が取得した特徴点B0,B1のペアについても同様の処理を行い、回転軸位置の各候補位置に対して、一意に決まる回転角度を特定する。よって、回転角変化特定部32は、補正前のパノラマ画像における各回転軸位置の画像座標系のX座標値を変数とし、補正後のパノラマ画像において特徴点B0,B1のX座標値が略同じとなるための回転角度αxa の関数αxa (xI )を取得する。図11Bには、図11Aに示した特徴点A0,A1に基づいて特定された関数αxa (xI )に、特徴点B0,B1に基づいて特定された関数αxa (xI )を破線で追加して示す。図11Bから分かるように、補正後のパノラマ画像において、特徴点A0,A1及びB0,B1が共に画像中の上下方向に存在するための条件を満たすのは、実線で示した特徴点A0,A1に基づく関数αxa (xI )と、破線で示した特徴点B0,B1に基づく関数αxa (xI )との交点P1,P2での回転軸位置及び回転角度の組合せのみである。
よって、補正量特定部33は、回転角変化特定部32が特定した2つの関数αxa (xI )の交点P1又はP2を特定し、交点P1又はP2における回転軸位置及び回転角度の組合せを、補正部34による天頂補正に用いる補正量として特定する。以下では、特徴点A0,A1に基づく関数αxa (xI )を第1関数といい、特徴点B0,B1に基づく関数αxa (xI )を第2関数という。補正量特定部33は、回転軸位置のX座標値xI として、0からW-1までの範囲で所定値ずつ加算し、それぞれのX座標値xI に対して、第1関数での回転角度αxa と第2関数での回転角度αxa とを取得する。なお、回転角変化特定部32は、関数αxa (xI )に基づく回転軸位置の各候補位置に対する回転角度を、記憶部12に設けられた配列に格納しており、補正量特定部33は、X座標値xI に対する回転角度αxa を配列から順次読み出す。
そして補正量特定部33は、それぞれ読み出した回転角度αxa が略同じであるか否かを判定し、略同じとなる回転軸位置xa を特定する。なお、回転軸位置の候補位置(X座標値xI )は所定量ずつ異なる離散値を用いているので、X座標値xI に対する2つの回転角度αxa が完全に一致することは難しい。従って、補正量特定部33は、例えば、それぞれ読み出した回転角度αxaの大小関係を検知し、大小関係が逆転したときの回転軸位置xI を、2つの関数αxa (xI )の交点P1,P2のX座標値xa に特定してもよい。
ここで、図11に示すように、2つの関数αxa (xI )の交点P1,P2は2つ存在する。また2つの交点P1,P2は必ず、回転軸位置のX座標値xI はW/2だけ離れており、かつ、回転角度αxa は絶対値が同じで符号が逆の値となる。このような2つの交点P1,P2は、3次元空間において撮影位置(中心点C)を挟んで正対する方角に位置する。つまり、それぞれの交点P1,P2(回転軸位置)に基づく回転軸は同一直線を表している。正対した方角を回転軸として反対の方向(正/負の方向)に同じ角度だけ回転させる回転は、結果として同じ回転操作(天頂補正)を行うことになる。例えば、方位角が0ラジアンの方向を回転軸とした回転角度αの回転は、方位角がπラジアンの方向を回転軸とした回転角度-αの回転と等価である。このように2つの交点P1,P2は、同じ回転(天頂補正)を行うための補正量を示しているので、補正量特定部33は一方の交点P1又はP2のみを特定すればよい。
補正部34は、処理対象のパノラマ画像に対して、補正量特定部33が特定した補正量(回転軸位置のX座標値xa 及び回転角度αxa )に基づいて、画像の天頂角方向を補正する処理を行う。具体的には、補正部34は、補正量特定部33が特定した補正量に基づいて、パノラマ画像において、実空間上の水平面上の各位置が、撮影時平面上の各位置となるように補正する。なお、補正部34は、補正前のパノラマ画像中の各画素の位置(座標値)から、補正によって各画素が移動する補正後のパノラマ画像中の位置を算出する。そして、補正部34は、補正前のパノラマ画像中の各画素の輝度を、それぞれ算出した補正後のパノラマ画像における各位置にコピーすることにより、補正後のパノラマ画像を生成する。よって、補正部34はまず、補正前のパノラマ画像中の各画素が移動する補正後のパノラマ画像中の画素位置を算出する。
具体的には、補正部34は、パノラマ画像中の各画素の画像座標系における座標(xI ,yI )を、上記の(3)式によって極座標系の座標(rL ,θL ,φL )に変換し、更に上記の(4)式によってワールド直交座標系の座標(xW ,yW ,zW )に変換する。なお、パノラマ画像中の回転軸位置xa の極座標系における方位角はφxa とする。次に補正部34は、各画素のワールド直交座標系における座標(xW ,yW ,zW )を、ワールド直交座標系のYW 軸を中心に時計回りにφxa 回転させて、回転軸位置xa に基づく回転軸をZW 軸に一致させる。そして補正部34は、各画素を、ワールド直交座標系のZW 軸を中心に回転角度αxa 回転させ、回転角度αxa に基づく天頂補正(回転)を行う。その後、補正部34は、最初のYW 軸を中心とした回転を戻すために、補正後の各画素を、ワールド直交座標系のYW 軸を中心に反時計回りにφxa 回転させ、更に、回転後(補正後)の各画素の座標値を、座標変換により極座標系を経由して画像座標系の座標値に戻す。これにより、補正量特定部33が特定した補正量(回転軸位置xa 及び回転角度αxa )に基づく天頂補正(回転)によって補正前のパノラマ画像中の各画素が移動する補正後のパノラマ画像中の画素位置が算出される。
補正部34は、補正前のパノラマ画像中の各画素の輝度を、補正前の画素位置に対応する補正後の画素位置にコピーし、補正後のパノラマ画像を生成する。なお、パノラマ画像はデジタル画像であるため、上述のように算出した補正後の座標値によっては、補正後のパノラマ画像中の画素の位置を特定できない可能性がある。従って、例えばバイリニア法等の補間演算を行うことによって、補正後のパノラマ画像中の各画素の輝度を、演算によって算出された周囲の画素の輝度に基づいて算出してもよい。また、補正後のパノラマ画像中の各画素の位置から、対応する補正前のパノラマ画像中の各画素の位置を算出し、補正前後での各画素の位置(座標値)を対応付けてもよい。この場合、算出した補正前の画素位置の輝度を、補正後の画素位置にコピーすることにより、補正後のパノラマ画像が得られる。上述した補正処理により、図6Aに示すように歪んだパノラマ画像が、図6Bに示すようなパノラマ画像に補正される。図6Bに示すパノラマ画像では、図8A中の特徴点A0,A1及びB0,B1が共に上下方向に並んだ状態となる。
次に、画像処理装置10が行う補正処理をフローチャートに基づいて説明する。図12は、画像処理装置10による補正処理の手順を示すフローチャートであり、図13は、補正処理に含まれる関数の算出処理の手順を示すフローチャートであり、図14は、補正処理に含まれる補正量の特定処理の手順を示すフローチャートである。以下の処理は、画像処理装置10の記憶部12に記憶してある天頂補正プログラムPを含む制御プログラムに従って制御部11によって実行される。
画像処理装置10の制御部11は、補正処理を行うべきパノラマ画像をパノラマ画像DB12aから読み出す(S1)。補正処理を行うべきパノラマ画像は、入力部14又は外部装置を介して指定される。制御部11は、読み出したパノラマ画像において、実空間上で鉛直方向に存在する2点に対応する、画像中の2つの特徴点を1組の特徴点として取得する(S2)。なお、制御部11は、入力部14を介して特徴点の指定を受け付けてもよいし、予め指定されて記憶部12に記憶してある特徴点を記憶部12から読み出してもよい。ここでは、図8A中の特徴点A0,A1を取得したものとする。
制御部11は、取得した特徴点A0,A1の位置に基づいて、パノラマ画像中の回転軸位置の各候補位置における画像座標系のX座標値xI と、補正後のパノラマ画像において特徴点A0,A1が上下方向に並ぶための回転角度αxa との関係を表す関数αxa (xI )を算出する(S3)。図13に示す関数αxa (xI )の算出処理において、制御部11は、パノラマ画像中の回転軸位置の候補位置xI (画像座標系のX座標値xI )を0に設定し(S11)、回転角度の候補角度αxa を-π/2に設定する(S12)。制御部11は、ステップS2で取得した特徴点A0,A1に対して、設定した回転軸位置及び回転角度に基づく天頂補正(回転)を行い(S13)、補正後のパノラマ画像における特徴点A0,A1の座標値を算出する。
制御部11は、算出した補正後のパノラマ画像における特徴点A0,A1の座標値に基づいて、特徴点A0,A1の左右方向の位置関係を特定する(S14)。制御部11は、特徴点A0,A1の左右方向の位置(画像座標系におけるX座標値)が同じであるか、又は前回特定した位置関係から逆転したか否かを判断する(S15)。特徴点A0,A1の左右方向の位置が同じでなく、また、前回特定した位置関係から逆転していないと判断した場合(S15:NO)、制御部11は、回転角度の候補角度αxa に所定量を加算し(S16)、ステップS13の処理に戻る。よって、制御部11は、所定量が加算された回転角度に基づく天頂補正を行い(S13)、ステップS14,S15の処理を繰り返す。特徴点A0,A1の左右方向の位置が同じである、又は前回特定した位置関係から逆転したと判断した場合(S15:YES)、制御部11は、この時点の回転角度の候補角度αxa を、この時点の回転軸位置xIに対応する回転角度αxa として記憶する(S17)。なお、制御部11は、記憶部12に設けられた配列に順次記憶する。
制御部11は、この時点の回転軸位置xIがW-1以上であるか否かを判断し(S18)、W-1以上でないと判断した場合(S18:NO)、回転軸位置の候補位置xIに所定値を加算し(S19)、ステップS12の処理に戻る。そして制御部11は、回転角度の候補角度αxa を-π/2にリセットし(S12)、ステップS13~S18の処理を繰り返す。回転軸位置xIがW-1以上であると判断した場合(S18:YES)、制御部11は、関数αxa (xI )の算出処理を終了し、図12の処理に戻る。これにより、特徴点A0,A1の位置に基づいて、図11Aに示すような第1関数αxa (xI )が得られる。
制御部11は、ステップS1で読み出したパノラマ画像において、特徴点A0,A1とは異なるもう1組の特徴点を取得する(S4)。ここでも、制御部11は、入力部14を介して特徴点の指定を受け付けてもよいし、予め指定されて記憶部12に記憶してある特徴点を記憶部12から読み出してもよい。ここでは、図8A中の特徴点B0,B1を取得したものとする。制御部11は、取得した特徴点B0,B1の位置に基づいて、ステップS3と同様の処理を行い、特徴点B0,B1の位置に基づいて、図11B中の破線で示すような第2関数αxa (xI )を算出する(S5)。
次に制御部11は、ステップS3,S5で算出した2つの関数αxa (xI )に基づいて、補正部34による天頂補正に用いる補正量を特定する(S6)。図14に示す補正量の特定処理において、制御部11は、回転軸位置xIを0に設定し(S21)、回転軸位置xIが0の場合の第1関数による回転角度αxa を読み出す(S22)。なお、制御部11は、記憶部12に設けられた第1関数用の配列から回転角度αxa を読み出す。また制御部11は同様に、回転軸位置xIが0の場合の第2関数による回転角度αxa を読み出す(S23)。制御部11は、ステップS22,S23で読み出した2つの回転角度αxa の大小関係を特定する(S24)。
制御部11は、2つの回転角度αxa が同じであるか、又は前回特定した大小関係から逆転したか否かを判断する(S25)。2つの回転角度αxa が同じでなく、また、前回特定した大小関係から逆転していないと判断した場合(S25:NO)、制御部11は、回転軸位置xIに所定値を加算し(S26)、ステップS22の処理に戻る。よって、制御部11は、所定値が加算された回転軸位置xIについて、ステップS22~S25の処理を繰り返す。2つの回転角度αxa が同じである、又は前回特定した大小関係から逆転したと判断した場合(S25:YES)、制御部11は、この時点の回転軸位置xI及び回転角度αxa を補正量として特定する(S27)。そして、制御部11は、補正量の特定処理を終了し、図12の処理に戻る。
制御部11は、ステップS1で読み出したパノラマ画像に対して、ステップS6で特定した補正量に基づく天頂補正を行い(S7)、補正処理を終了する。これにより、図6Aに示すように歪んだパノラマ画像が、図6Bに示すように、図8A中の特徴点A0,A1及びB0,B1が共に上下方向に並んだ状態となるパノラマ画像に補正される。
本実施形態の画像処理装置10では、カメラ20の上下方向が実空間上の鉛直方向に対して傾斜した状態で撮影を行った場合であっても、撮影後のパノラマ画像に対して、実空間上の水平面上にある被写体が画像の上下方向の中央に写るパノラマ画像に補正できる。
本実施形態において、画像処理装置10が行う天頂補正処理の機能をカメラ20が有する構成としてもよい。また、本実施形態において、カメラ20は、全天球カメラに限定しない。たとえば、半球型の範囲を撮影可能なカメラであってもよい。通常の平面画像撮影用のカメラでもよい。
(実施形態2)
本実施形態は、パノラマ画像において実空間上で鉛直方向に存在する2点がそれぞれ写っている位置を特徴点として取得する代わりに、パノラマ画像に基づいて、実空間上で鉛直方向に存在する線分に対応するパノラマ画像中の線分を特徴線として抽出する画像処理装置に関する。実施形態1と共通する構成及び処理については説明を省略する。本実施形態のカメラ20は、実施形態1のカメラ20と同様の構成を有しており同様の処理を行う。よって、本実施形態のカメラ20によって撮影されるパノラマ画像は、実施形態1のカメラ20によって撮影されるパノラマ画像と同様の画像である。
本実施形態の画像処理装置10は、図1に示す実施形態1の画像処理装置10と同様の構成を有する。本実施形態の画像処理装置10も、図6Aに示すように実空間における水平面上にある被写体が画像中の上下方向の中央部に写っていないパノラマ画像を、図6Bに示すように画像中の上下方向の中央部に写っているパノラマ画像に補正する天頂補正処理を行う構成を有する。
図15は、実施形態2の画像処理装置10の制御部11によって実現される機能を示すブロック図である。本実施形態の画像処理装置10において、制御部11は、記憶部12に記憶してある天頂補正プログラムPを実行した場合、エッジ抽出部41、特徴線抽出部42、回転軸特定部45、回転量特定部46、補正部34の各機能を実現する。補正部34は、実施形態1の補正部34と同様の処理を行う。なお、これらの一部を専用のハードウェア回路で実現してもよい。
図16~図23は実施形態2の天頂補正処理を説明するための模式図であり、図16Aは天頂補正前のパノラマ画像の例を示し、図16Bは天頂補正後のパノラマ画像の例を示す。即ち、図16Aに示す画像は、実空間における水平面上にある被写体が画像の上下方向の中央部に写っていないパノラマ画像であり、図16Bに示す画像は、実空間における水平面上にある被写体が画像の上下方向の中央部に写っているパノラマ画像である。図16Aに示す補正前のパノラマ画像の解像度は例えば左右方向5376画素×上下方向2688画素である。以下では、図16Aに示すようなパノラマ画像を、図16Bに示すようなパノラマ画像に補正する天頂補正処理について説明する。
エッジ抽出部41は、補正前のパノラマ画像(撮影画像、以下では原画像ということもある)から、例えばケニーのエッジ抽出と呼ばれる方法(Canny Edge Detector )を用いてエッジを抽出する。パノラマ画像は例えばRGBのカラー画像であり、エッジ抽出部41はまず、パノラマ画像を単色のパノラマ画像にグレースケール化する。具体的には、エッジ抽出部41は、パノラマ画像中の各画素においてRGBそれぞれの画素値(輝度値)の平均値を算出し、その画素の画素値とすることによってカラーのパノラマ画像を単色のパノラマ画像に変換する。次にエッジ抽出部41は、単色のパノラマ画像に対して、2次元ガウス分布(正規分布)に従った2次元ガウシアンカーネルを用いて畳み込み積分することにより、勾配画像を作成する。図17Aは2次元ガウシアンカーネルの例を示し、本実施形態では19画素×19画素のサイズを有し、標準偏差σ=9画素であるカーネルを用いる。図17Bは、図17Aに示すガウシアンカーネルを横方向(左右方向)に微分(差分)したカーネルを示し、図17Cは、図17Aに示すガウシアンカーネルを縦方向(上下方向)に微分(差分)したカーネルを示す。本実施形態のエッジ抽出部41は、単色のパノラマ画像に対して、横方向に微分したガウシアンカーネルを用いて畳み込み積分することによって横方向の勾配画像fx (x,y)を作成し、縦方向に微分したガウシアンカーネルを用いて畳み込み積分することによって縦方向の勾配画像fy (x,y)を作成する。そしてエッジ抽出部41は、以下の(9)式により勾配の大きさg(x,y)を算出し、以下の(10)式により勾配方向D(x,y)を算出する。図18は勾配の大きさg(x,y)を示す画像であり、この画像の各画素の画素値は、単色のパノラマ画像において隣り合う画素の画素値の変化が大きい程、大きい値(図18では白に近い値)となる。
次にエッジ抽出部41は、勾配の大きさを示す画像から勾配の最大値を検出する。具体的には、エッジ抽出部41は、勾配の大きさを示す各画素の画素値について、勾配の大きさg(x,y)が勾配方向D(x,y)に隣接する画素よりも大きい値(極大値)であれば最大値として抽出する。なお、原画像において隣接する各画素はそれぞれ各画素の上下左右方向にしか隣接しないので、勾配方向D(x,y)に隣接する画素の画素値は、その周囲の画素の画素値から補間して求めて比較する。図19Aは勾配の最大値の検出結果を示す画像を示し、図19Bは図19Aに示す画像の一部(中央部)の拡大図である。
図19Aに示す画像の各画素の画素値は、勾配の局所的な最大値ではあるが、必ずしも大きな値であるとは限らず、勾配自体が大きな値である真のエッジが適切に抽出されたとは言えない。そこで、エッジ抽出部41は、図19Aに示す勾配の最大値の検出結果から、勾配の大きさに基づいて真のエッジを抽出する。具体的には、エッジ抽出部41は、2つの閾値TH ,TL (TH >TL)を用いて、最大値に該当する画素の勾配の大きさg(x,y)と閾値TH ,TL とを比較して各画素を以下の条件で真のエッジであるか否かに分類する。
g(x,y)>TH の場合、エッジに分類し、
g(x,y)<TL の場合、エッジに分類せず、
g(x,y)≧TL 且つg(x,y)≦TH の場合、最大値として検出された画素に隣接している場合にのみエッジに分類する。
エッジ抽出部41は、エッジに分類した画素値g(x,y)を抽出することによって、不適切なエッジを除去して真のエッジを抽出する。図20Aは真のエッジの検出結果を示す画像(エッジ画像)を示し、図20Bは図20Aに示す画像の一部(中央部)の拡大図である。閾値TH ,TL はそれぞれ例えば0.1,0.05とすることができるが、これらの値に限定されない。エッジ抽出部41は、上述した処理により、図16Aに示すパノラマ画像から、図20Aに示すエッジ画像を抽出する。
特徴線抽出部(特徴線取得部)42は、エッジ抽出部41が原画像から抽出したエッジ(エッジ画像)に基づいて、原画像に行うべき補正処理における補正量を特定する際に用いる特徴線を複数抽出(取得)する。なお、特徴線は、実空間内で鉛直方向に存在する線分が原画像中に写る線分である。特徴線抽出部42はセグメント抽出部43及びスクリーニング部44を含む。セグメント抽出部43は、エッジ抽出部41が抽出したエッジの中から、画像の上下方向の中央を通る中央ラインと交差するエッジを抽出する。なお、セグメント抽出部43が抽出する、画像の中央ラインと交差するエッジをセグメントという。図21Aはセグメントの抽出結果を示す画像(セグメント画像)を示し、図21Bは図21Aに示す画像の一部(中央部)の拡大図である。
セグメント抽出部43は、抽出した各セグメントについて、画像上での直線に当てはめて、例えばハフ変換と呼ばれる手法を用いて、セグメントが示す直線を表すパラメータを推定する。ハフ変換では、直線を画像の原点(例えば左下端)からの距離ρ及び傾きθのパラメータで表現する。セグメント抽出部43は、各セグメントについて、セグメントに含まれる各画素の位置に基づいて距離ρ及び傾きθの各組合せに対して投票処理を行い、投票結果が最大値となる距離ρ及び傾きθの組合せを、そのセグメントが示す直線のパラメータに推定する。具体的には、セグメント抽出部43はまず、投票空間の配列として2次元の配列を定義し、配列の各軸を傾きθ及び距離ρに割り当て、配列(θ,ρ)中の各値を全て0に初期化する。なお、例えば傾きθ及び距離ρの分割数Sをそれぞれ4096とし、傾きθは0~πの範囲を4096等分し、距離ρは0~L
の範囲を4096等分する。ただし、W及びHはそれぞれ原画像の左右方向の画素数(幅)及び上下方向の画素数(高さ)である。
セグメントを構成する各画素の座標をP=(pX ,pY )とすると、点Pを通る直線は様々な傾きθ及び距離ρの組合せで表される。セグメント抽出部43は、点Pに関して、傾きθを微小ずつ変化させながら(例えばπ/Sずつ増加させながら)、傾きθが示す角度で直線が点Pを通るときの原点からの距離ρを算出し、このときの傾きθ及び距離ρに対する投票空間の座標(θ,ρ)の値に1を加算することにより、このときの傾きθ及び距離ρに投票する。セグメント抽出部43は、1つのセグメントを構成する全画素について上述した投票処理を行い、全画素の投票が終了した後、投票空間の配列から、投票結果(投票値)が最大となった傾きθ及び距離ρの組合せを、そのセグメント(直線)を表すパラメータ(θ,ρ)に決定(推定)する。なお、傾きθとして、i番目の配列位置は、θ=(i/S)・πとなり、点Pを通る傾きθの直線の原点からの距離ρは、ρ=pX ・cosθ+pY・sinθとなり、算出した距離ρに対応する配列位置はS・(ρ+L)/2Lとなり、距離ρは原点からの象限によって±Lの範囲となる。
次にセグメント抽出部43は、各セグメントについて、推定(決定)したパラメータ(θ,ρ)により、セグメント内の各画素が有効であるか無効であるかを精査する。セグメント抽出部43は、セグメント内の各画素の座標に、推定した傾きθを与えて、対応する距離ρをρ=pX ・cosθ+pY・sinθにより算出し、算出した距離ρが、推定した距離ρ(ρ=S・(ρ+L)/2L)と一致するか否かを判断し、一致する場合、その画素は有効であると判断し、一致しない場合、その画素はセグメント内の異常値として無効であると判断する。セグメント抽出部43は、各セグメントについて無効であると判断した画素を削除し、有効であると判断した画素のみを各セグメントを構成する画素とする。
スクリーニング部44は、セグメント抽出部43が抽出したセグメントから、以降の処理に有効なセグメントをスクリーニング(抽出)する。具体的には、スクリーニング部44は、セグメントを対角線の1つとして画像の左右方向及び上下方向にそれぞれ平行な辺で構成される長方形の縦横比が所定範囲内の値でない場合、このセグメントは実空間上で鉛直方向に配置されていない可能性が高いので、このセグメントを除外する。例えば長方形の縦の長さが横の長さの2倍未満であるセグメントが除去される。またスクリーニング部44は、セグメントに含まれる画素数(有効と判断された画素数)が所定数未満である場合、このセグメントは実空間上で鉛直方向に配置されていない可能性が高いか、又は上述の処理によって推定した傾きに大きな誤差が生じている可能性が高いので、このセグメントを除外する。例えば長方形の縦の長さ(高さ)が画像の高さ(上下方向の長さ)の1/100未満であるセグメントが除外される。これにより、特徴線抽出部42は、エッジ画像から、パノラマ画像(原画像)中の略上下方向の線分(セグメント)を特徴線として抽出でき、抽出した線分は、実空間上で鉛直方向に配置されている可能性が高いセグメント(特徴線)と言える。図22は、図16Aに示すパノラマ画像(原画像)に、特徴線抽出部42が抽出したセグメント(特徴線)を重畳して表示した画像である。図22に示すように、実空間上で鉛直方向に配置される鉛直構造物において、パノラマ画像の上下方向の中央ラインに交差する特徴線(セグメント)が抽出されていることが分かる。
回転軸特定部45及び回転量特定部46(補正量特定部)は、特徴線抽出部42が抽出した複数の特徴線(以下ではセグメントということもある)に基づいて、後段の補正部34によって図16Aに示すようなパノラマ画像を、図16Bに示すようなパノラマ画像に補正するための補正量を特定する。具体的には、回転軸特定部45及び回転量特定部46は、撮影時におけるカメラ20の前後左右方向を含む平面(撮影時平面)が、実空間上の水平面に対して傾斜する中心軸(回転軸)及び回転角度(回転量)をそれぞれ特定する。即ち、回転軸特定部45及び回転量特定部46は、実空間上の水平面を基準として撮影時平面が回転する中心軸及び回転角度を補正量として特定する。
ここで、図22から分かるように、各セグメントの傾きは、画像(パノラマ画像)の左端から順に、概ね垂直な方向(上下方向に伸びる方向)から徐々に右側への傾きが大きくなり、その後傾きが緩やかになって再度垂直な方向となった後、徐々に左側への傾きが大きくなり、画像の右端近傍では改めて垂直な方向となるという傾向がある。この傾向は、カメラ20が傾いた状態で撮影が行われた結果得られるものである。これは大雑把にいうと、パノラマ画像の中央ライン上の各位置におけるセグメントの傾きは、パノラマ画像の左右方向の画像幅を1周期とする増減関数で表現でき、傾きが最大となる中央ライン上の位置が回転の中心(回転軸)であり、その傾きが回転量(回転角度)である。
このように各セグメントの傾きは、パノラマ画像の画像幅を周期とした増減関数で推移するので、各セグメントの傾きを正弦波で近似することを考える。ここでの正弦波の周期はパノラマ画像の画像幅に一致するため、正弦波は位相φ及び振幅Aの2つのパラメータで特定できる。また、各セグメントの傾きは、セグメント抽出部43によって各セグメントに係る直線を表すパラメータθ(0≦θ≦π)として決定されている。よって、推定する正弦波は、y=A・sin(x+φ)と表現でき、回転軸特定部45は、各セグメントに基づいて、位相φ及び振幅Aの各組合せに対して投票法を用いて最小二乗法で正弦波を推定する(1回目の推定処理)。なお、θ=0及びθ=πは共に鉛直方向を示すので、後の演算のためにθ>π/2の場合は、θ:=θ-πとし、-π/2≦θ≦π/2の範囲とする。
具体的には、回転軸特定部45はまず、投票空間である2次元配列を例えば記憶部12に定義し、配列の各軸に振幅A及び位相φを割り当て、振幅A及び位相φで表される配列(A,φ)中の各要素を全て0に初期化する。なお、配列の分割数Sは例えば、振幅Aについては0~π/2の範囲を1000等分し、位相φについてはパノラマ画像の画像幅0~Wの範囲をW等分(1画素単位)する。配列(A,φ)の各要素には、y=A・sin(x+φ)に対する、セグメント抽出部43が推定した各セグメントの傾きθの誤差(差異)の二乗が累積されて記憶される。回転軸特定部45は、配列(A,φ)の各要素に対するセグメントの誤差を算出する。ここで、セグメントの横位置xC は、セグメントがパノラマ画像の中央ラインと交差するX座標値であり、各セグメントの横位置xC は既知であるから、0~2πに正規化するために、x=2π×xC /Wとする。また投票空間においてφ方向(φ軸)のi番目の位相は2π×i/S(ただし、Sは分割数であり、ここではW)で表される。これらより、配列(A,φ)の要素に対応するセグメント位置における正弦波の値は、y=A・sin(2π×xC /W-2π×i/S)となる。ここで算出された正弦波の値yと、既にこのセグメントについて推定された傾きθとの差異(誤差)の二乗(y-θ)2 を配列(A,φ)の要素に加算する。
回転軸特定部45は、配列(A,φ)の全ての要素に対して、全てのセグメントにおける誤差の二乗の累積が完了した後、配列(A,φ)の要素の中から最小値を特定し、最小値の要素に対応する振幅A及び位相φを、各セグメントの傾きを近似した正弦波を表す仮パラメータ(At ,φt )と推定する。この仮パラメータ(At ,φt )が1回目の推定結果である。正弦波の仮パラメータの推定(1回目の推定処理)では、例えば道路に書かれた白線や電線等のように実空間上で鉛直方向に配置されていないセグメントの影響を受けている可能性があるため、このような適切でないセグメントの影響をできるだけ排除するために、ロバスト推定と呼ばれる手法を用いて正弦波を表すパラメータを精査する(2回目の推定処理)。ロバスト推定では、各セグメントが正弦波の推定に与える影響を、仮パラメータの推定結果(At ,φt )との差異に基づいた重みを用いて表現する。例えば、仮パラメータ(At ,φt )において各セグメントの横位置xC における正弦波の関数値y=At ・sin(2π×xC /W-φt )と、推定されたセグメントの傾きθとの差異d=y-θに対する重みωを、所定の許容値Ωを用いて以下の(11)式のように設定する。なお、許容値Ωは例えば、全セグメントにおける差異dの中央値の1.25倍とすることができる。
回転軸特定部45は、上記の(11)式を用いて特定された重みωを用いて、2回目の正弦波の推定処理を行う。1回目の推定処理と同様に、回転軸特定部45は、振幅A及び位相φで表される2次元配列を例えば記憶部12に定義し、投票空間である配列(A,φ)中の各要素を全て0に初期化する。次に回転軸特定部45は、配列(A,φ)の各要素に対して、全てのセグメントにおいて、正弦波の関数離y=A・sin(x+φ)と、各セグメントについて推定された傾きθとの誤差(差異)の二乗を累積(加算)するが、このとき、上記(11)式で表される重みωを掛けた後に加算する。これにより、1回目の推定結果である仮パラメータ(At ,φt )で表される正弦波から許容値Ωよりも大きく離れているセグメントが正弦波の推定に与える影響を除外することができ、より精度の高い正弦波の推定が可能となる。回転軸特定部45は、配列(A,φ)の全ての要素に対して、全てのセグメントにおける誤差の二乗に重みωを乗じた値の累積が完了した後、配列(A,φ)の要素の中から最小値を特定し、最小値の要素に対応する振幅A及び位相φを、各セグメントの傾きを近似した正弦波を表すパラメータ(A,φ)に特定する。
図23は、上述の処理によって推定された正弦波の例を示しており、破線は1回目の推定処理によって推定された正弦波を示し、実線は2回目の推定処理によって推定された正弦波を示す。なお、図23中の一点破線は画像の中央ラインを示し、各点(ドット)は、各セグメントに対して推定された傾きθを示している。図23に示すように、各ドットはある程度のばらつきを有するが、推定した2つの正弦波は、複数のドットを適切に近似したものであると分かる。道路上に書かれた白線や電線等に基づいて抽出された不適切なセグメント(特徴線)は、対応するドットが、近似した正弦波から大きく外れた値となっていることが分かる。このような不適切なセグメントは、2回目の推定処理(ロバスト推定)において、正弦波の推定に対する影響が除外されているので、2回目の推定結果である・BR>ウ弦波は、有効なセグメントのみを用いて推定されたものとなり、信頼性の高い推定結果が得られる。なお、理論的にはセグメントの傾きの変化は正弦波に従うものではないので、正弦波による近似は必ずしも正しくない。しかし、各セグメントの傾きが画像幅方向に1周期の増減を行うことは事実であり、正弦波によるシンプルな近似を用いて、近似された正弦波の位相から、補正処理に用いる回転軸の位置を特定した場合であっても、十分実用的な回転軸が得られる。
ここで、上述のように算出(推定)した正弦波の位相φは、画像の中央ラインにおいて、正弦波の関数値yが0となる位置(セグメントの傾きが0である位置)を示しているので、回転軸は、位相φの位置から中央ライン上でπ/2ずれた位置となる。これは、セグメントの傾きが最大となる中央ライン上の位置が回転軸となるためである。よって、回転軸特定部45は、上述のように算出(推定)した正弦波の位相φにπ/2を加算する(φ:=φ+π/2)ことにより、回転軸の位置(位相φ)を特定する。なお、回転軸特定部45は、ここまでパノラマ画像の左端をφ=0とし、右端をφ=2πとして扱ってきたが、後段の補正部34が扱う極座標系ではパノラマ画像の左端がφ=2πとなり、右端がφ=0となる。よって、回転軸特定部45は、位相(φ:=φ+π/2)を2πから減算し、位相φ(φ:=3π/2-φ)を算出する。このように算出された位相φが、後段の補正部34による補正処理に用いられる補正量となる。
回転量特定部46は、回転軸特定部45が特定した回転軸(位相φ)を用いて、補正部34による補正処理に用いる回転量(回転角度)αを特定(推定)する。回転量αの推定においても、投票法を用いて最小二乗法を利用する。回転量特定部46はまず、回転軸特定部45が2回目の推定処理で推定した正弦波を基準とした各セグメントの誤差を算出し、算出した誤差に応じて、上記(11)式に従って各セグメントに対する重みωを設定する。具体的には、2回目の推定処理で推定した正弦波のパラメータ(A,φ)において各セグメントの横位置xC における正弦波の関数値y=A・sin(2π×xC /W-φ)と、推定されたセグメントの傾きθとの差異d=y-θに応じて、各セグメントに対する重みωを設定する。
回転量特定部46による最小二乗法による投票処理は、1次元配列を用いること以外は、回転軸特定部45が正弦波を推定する際に用いた投票処理と同様である。具体的には、回転量特定部46は、投票空間として1次元配列を例えば記憶部12に定義し、配列α中の各要素を全て0に初期化する。なお、配列の要素数Sを例えば1000とし、±30°(±π/6ラジアン)の範囲の回転量を1000等分する。なお、配列に用いる±30°の範囲は、カメラ20を用いた撮影時に生じる傾きがせいぜい30°以内であるとの前提に基づいて設定しており、この範囲に限定されず、例えば±45°の範囲を用いてもよい。
投票空間における配列αにおいて、i番目の回転量αは、α=(i/1000)×(π/3)-(π/6)で表される。配列の各要素には、回転軸特定部45が特定した位相φを中心軸としてそれぞれの回転量αを回転させたときの各セグメントの回転後(補正処理後)のパノラマ画像における傾きの二乗に、先に設定しておいた各セグメントに対する重みωを乗じた値が累積されて記憶される。回転軸特定部45が特定した位相φを中心軸として適切な回転量だけ回転させた場合、各セグメントは補正処理後のパノラマ画像上で上下方向に配置されるはずであるから、配列の要素の中の最小値に対応する回転量αが、後段の補正部34による補正処理に用いる回転量に特定できる。
回転量特定部46は、位相φ及び回転量αに基づく回転後の各セグメントの傾きを、以下のようにして算出する。回転量特定部46はまず、処理対象のセグメント中の有効画素(セグメント抽出部43によって有効であると判断された画素)から2つの端点(画素)Ptop 及びPbot を特定する。次に回転量特定部46は、位相φを回転軸として回転量αだけ回転した回転後(天頂補正後)のパノラマ画像において、端点Ptop 及びPbot が移動した写像先の画素P´top 及びP´bot の位置を算出する。
ここで、位相φ及び回転量αに基づく天頂補正(回転)によって、補正前のパノラマ画像中の端点Ptop 及びPbot が移動する補正後のパノラマ画像中の画素P´top 及びP´bot の位置の算出処理について説明する。位相φ及び回転量αに基づく天頂補正(回転)をパノラマ画像に行う場合、パノラマ画像中の端点Ptop 及びPbot の座標値を画像座標系から、撮影位置を原点としたワールド直交座標系に変換し、ワールド直交座標系において天頂補正を行う。なお、画像座標系からワールド直交座標系に変換する場合、一旦極座標系に変換した後にワールド直交座標系に変換する。よって、回転量特定部46は、補正前のパノラマ画像中の端点Ptop 及びPbot のそれぞれの画像座標系の座標(xI ,yI )を上記の(3)式によって極座標系の座標(rL ,θL ,φL )に変換する。次に回転量特定部46は、端点Ptop 及びPbot のそれぞれの極座標系の座標(rL ,θL ,φL )を上記の(4)式によってワールド直交座標系の座標(xW ,yW ,zW )に変換する。そして、回転量特定部46は、変換されたワールド直交座標系の座標(xW ,yW ,zW )に基づいて、パノラマ画像に天頂補正(回転)処理を行う。
なお、回転量特定部46は、ワールド直交座標系のYW 軸を中心に時計回りにφだけ回転させて、位相φに基づく回転軸を一旦ワールド直交座標系のZW 軸に一致させた後、ワールド直交座標系のZW 軸を中心に回転角度αだけ回転させ、位相φ及び回転量αに基づく天頂補正(回転)を行う。そして、回転量特定部46は、最初のYW 軸を中心とした回転を戻すために、ワールド直交座標系のYW 軸を中心に反時計回りにφだけ回転させ、回転後のパノラマ画像中の画素P´top 及びP´bot の座標値を再び、座標変換により極座標系を経由して画像座標系の座標値に戻す。これにより、位相φ及び回転量αに基づく天頂補正(回転)によって、補正前のパノラマ画像中の端点Ptop 及びPbot が移動する補正後のパノラマ画像中の画素P´top 及びP´bot の位置が算出される。なお、上述した位相φ及び回転量αに基づく天頂補正(回転)処理は、実施形態1の回転角変化特定部32が回転軸位置xa 及び回転角度αxa に基づいて行う天頂補正(回転)と同様である。
回転量特定部46は、上述したように算出した補正後(回転後)のパノラマ画像中の画素P´top 及びP´bot の座標値に基づいて、線分P´top P´bot の傾きを算出する。回転量特定部46は、このようにして算出した線分P´top P´bot の傾きの二乗に、先に設定しておいた各セグメントに対する重みωを乗じた値を、配列αの対応する要素に加算する。回転量特定部46は、配列αの各要素に対して、全てのセグメントにおける補正後の傾きの二乗に重みωを乗じた値の累積を完了した後、配列の要素の中から最小値を特定し、最小値の要素に対応する回転量αを、後段の補正部34による補正処理に用いる補正量に特定する。
補正部34は、実施形態1の補正部34と同様の補正処理を行う。具体的には、補正部34は、処理対象のパノラマ画像に対して、回転軸特定部45が特定した位相φが示す回転軸と、回転量特定部46が特定した回転量αとに基づいて、画像の天頂方向を補正する処理を行う。具体的には、補正部34は、補正前のパノラマ画像中の各画素の位置(座標値)から、補正によって各画素が移動する補正後のパノラマ画像中の位置を算出する。そして、補正部34は、補正前のパノラマ画像中の各画素の輝度を、それぞれ算出した補正後のパノラマ画像における各位置にコピーし、補正後のパノラマ画像を生成する。
より具体的には、補正部34は、補正前のパノラマ画像中の各画素の画像座標系における座標(xI ,yI )を上記の(3)式によって極座標系の座標(rL ,θL ,φL )に変換し、更に上記の(4)式によってワールド直交座標系の座標(xW ,yW ,zW )に変換する。次に補正部34は、各画素のワールド直交座標系における座標(xW ,yW ,zW )を、ワールド直交座標系のYW 軸を中心に時計回りにφ回転させて、位相φに基づく回転軸をZW 軸に一致させる。そして補正部34は、各画素を、ワールド直交座標系のZW 軸を中心に回転角度α回転させ、回転角度αに基づく天頂補正(回転)を行う。その後、補正部34は、最初のYW 軸を中心とした回転を戻すために、補正後の各画素を、ワールド直交座標系のYW 軸を中心に反時計回りにφ回転させ、更に、回転後(補正後)の各画素の座標値を、座標変換により極座標系を経由して画像座標系の座標値に戻す。これにより、回転軸特定部45及び回転量特定部46がそれぞれ特定した位相φ及び回転量αに基づく天頂補正(回転)によって補正前のパノラマ画像中の各画素が移動する補正後のパノラマ画像中の画素位置が算出される。
補正部34は、補正前のパノラマ画像中の各画素の輝度を、補正前の画素位置に対応する補正後の画素位置にコピーし、補正後のパノラマ画像を生成する。なお、パノラマ画像はデジタル画像であるため、上述のように算出した補正後の座標値によっては、補正後のパノラマ画像中の画素の位置を特定できない可能性がある。従って、例えばバイリニア法等の補間演算を行うことによって、補正後のパノラマ画像中の各画素の輝度を、演算によって算出された周囲の画素の輝度に基づいて算出してもよい。また、補正後のパノラマ画像中の各画素の位置から、対応する補正前のパノラマ画像中の各画素の位置を算出し、補正前後での各画素の位置(座標値)を対応付けてもよい。この場合、算出した補正前の画素位置の輝度を、補正後の画素位置にコピーすることにより、補正後のパノラマ画像が得られる。上述した補正処理により、図16Aに示すように歪んだパノラマ画像が、図16Bに示すようなパノラマ画像に補正される。図16Bに示すパノラマ画像では、図22中の特徴線がそれぞれ上下方向に伸びる状態となる。
次に、本実施形態の画像処理装置10が行う補正処理をフローチャートに基づいて説明する。図24は、画像処理装置10による補正処理の手順を示すフローチャートであり、図25及び図26は、補正処理に含まれる回転軸の特定処理の手順を示すフローチャートであり、図27は、補正処理に含まれる回転量の特定処理の手順を示すフローチャートである。以下の処理は、画像処理装置10の記憶部12に記憶してある天頂補正プログラムPを含む制御プログラムに従って制御部11によって実行される。
画像処理装置10の制御部11は、補正処理を行うべきパノラマ画像をパノラマ画像DB12aから読み出す(S31)。制御部11は、読み出したパノラマ画像に基づいて、パノラマ画像中のエッジを抽出する(S32)。なお、制御部11は、各エッジの大きさ(勾配の大きさ)に基づいて、後段の処理に有効な真のエッジのみを抽出しておく。制御部11は、抽出したエッジの中から、画像の上下方向の中央を通る中央ラインと交差するエッジ(セグメント)を抽出する(S33)。なお制御部11は、各セグメントが示す直線を表すパラメータを、例えばハフ変換を用いて推定する。具体的には、制御部11は、各セグメントが示す直線の画像の原点からの距離ρ及び傾きθの各組合せに対して、各セグメントに含まれる画素の位置に基づく投票処理を行い、投票結果が最大値となる距離ρ及び傾きθの組合せを、そのセグメントが示す直線のパラメータに決定する。そして制御部11は、各セグメントに含まれる画素から、決定したパラメータによって表される直線上の画素のみを抽出し、このセグメントの有効画素とする。これにより、直線上に位置する画素のみで構成されるセグメントを抽出できる。
制御部11は、抽出したセグメントから、以降の処理に有効なセグメント(特徴線)を抽出する(S34)。ここでは、制御部11は、実空間上で鉛直方向に配置されていない可能性が高いセグメント又は直線のパラメータを推定する際に大きい誤差が生じている可能性があるセグメント等、以降の処理に有効でないセグメントを除外する。以上の処理により、制御部11は、読み出したパノラマ画像に基づいて、パノラマ画像中で略上下方向に伸びる特徴線(線分)、即ち、実空間上で鉛直方向に存在する可能性の高い特徴線を取得できる。なお、制御部11は、特徴線を数十本~百本程度抽出することが好ましい。
制御部11は、抽出した特徴線に基づいて、補正後のパノラマ画像において各特徴線が上下方向に並ぶために、実空間上の水平面に一致するように撮影時平面を回転すべき回転軸の位置を特定する(S35)。図25及び図26に示す回転軸の特定処理において、制御部11は、各特徴線(セグメント)の傾きを近似する正弦波を表す振幅A及び位相φの2つのパラメータを各軸とした2次元配列を設定し、配列中の各要素を全て0に初期化する(S41)。制御部11は、推定する正弦波における振幅Aの候補値を0に設定し(S42)、位相φの候補値を0に設定する(S43)。制御部11は、ステップS34で抽出した特徴線(セグメント)を1つ取得し(S44)、取得した特徴線について、設定した振幅A及び位相φによって表される正弦波に基づく値と、推定された傾きとの誤差を算出する(S45)。制御部11は、算出した誤差の二乗を、配列(A,φ)の要素に加算する(S46)。制御部11は、ステップS34で抽出した全ての特徴線に対してステップS45~S46の処理を終了したか否かを判断する(S47)。終了していないと判断した場合(S47:NO)、制御部11はステップS44の処理に戻り、未処理の特徴線を1つ取得し(S44)、取得した特徴線についてステップS45~S46の処理を繰り返す。これにより、配列(A,φ)の1つの要素に対して、位相φ及び振幅Aに基づく正弦波による各特徴線の関数値と、推定された各特徴線の傾きとの誤差の二乗が累積される。
制御部11は、ステップS34で抽出した全ての特徴線に対してステップS45~S46の処理を終了したと判断した場合(S47:YES)、この時点の位相φにW/S(Sは配列の分割数)を加算し(S48)、加算後の位相φがW(画像幅)以上であるか否かを判断する(S49)。加算後の位相φがW未満であると判断した場合(S49:NO)、制御部11はステップS44の処理に戻る。そして制御部11は、この時点の位相φ及び振幅Aに基づいて、ステップS34で抽出した全ての特徴線に対してステップS44~S47の処理を繰り返す。加算後の位相φがW以上であると判断した場合(S49:YES)、制御部11は、この時点の振幅Aにπ/2S(Sは配列の分割数)を加算し(S50)、加算後の振幅Aがπ/2以上であるか否かを判断し(S51)、加算後の振幅Aがπ/2未満であると判断した場合(S51:NO)、ステップS43の処理に戻る。そして制御部11は、この時点の振幅Aに基づいて、ステップS43~S49の処理を繰り返す。制御部11は、位相φの候補値をW/Sずつ増加させ、振幅Aの候補値をπ/2Sずつ増加させつつ、ステップS44~S47の処理を行うことにより、配列(A,φ)の各要素に対して、位相φの候補値及び振幅Aの候補値に基づく正弦波による各特徴線の関数値と、推定された各特徴線の傾きとの誤差の二乗を累積する。ステップS50で加算後の振幅Aがπ/2以上であると判断した場合(S51:YES)、制御部11は、配列(A,φ)の要素の中から最小値を特定し、最小値の要素に対応する振幅A及び位相φを、各特徴線の傾きを近似した正弦波を表す仮パラメータに特定する(S52)。
次に制御部11は、ステップS41~S44と同様の処理を行い(S53~S56)、取得した特徴線(セグメント)について、仮パラメータが示す正弦波に基づく関数値と、推定された傾きとの差異に応じた重みを特定する(S57)。制御部11は、ステップS45と同様の処理を行い(S58)、算出した誤差の二乗に、ステップS57で特定した重みを乗じた値を算出し、配列(A,φ)の対応する要素に加算する(S59)。制御部11は、ステップS34で抽出した全ての特徴線に対してステップS57~S59の処理を終了したか否かを判断する(S60)。終了していないと判断した場合(S60:NO)、制御部11はステップS56の処理に戻り、未処理の特徴線を1つ取得し(S56)、取得した特徴線についてステップS57~S59の処理を繰り返す。制御部11は、ステップS34で抽出した全ての特徴線に対してステップS57~S59の処理を終了したと判断した場合(S60:YES)、ステップS48~S51と同様の処理を行い(S61~S64)、位相φの候補値をW/Sずつ増加させ、振幅Aの候補値をπ/2Sずつ増加させつつ、ステップS56~S60の処理を行う。これにより、配列(A,φ)の各要素に対して、位相φの候補値及び振幅Aの候補値に基づく正弦波による各特徴線の関数値と、推定された各特徴線の傾きとの誤差の二乗に、この特徴線に設定された重みを乗じた値を累積する。ステップS63で加算後の振幅Aがπ/2以上であると判断した場合(S64:YES)、制御部11は、配列(A,φ)の要素の中から最小値を特定し、最小値の要素に対応する振幅A及び位相φを、各特徴線の傾きを近似した正弦波を表すパラメータに特定する。なお、制御部11は、特定した位相φを、後段の補正処理に用いる補正量に特定する(S65)。そして、制御部11は、回転軸の特定処理を終了し、図24の処理に戻る。
制御部11は、ステップS35で特定した回転軸の位置に基づいて、補正後のパノラマ画像において各特徴線が上下方向に並ぶために撮影時平面を回転すべき回転量を特定する(S36)。図27に示す回転量の特定処理において、制御部11は、回転量αをパラメータとした1次元配列を設定し、配列α中の各要素を全て0に初期化する(S71)。制御部11は、回転量αの候補値を-π/6に設定する(S72)。制御部11は、ステップS34で抽出した特徴線(セグメント)を1つ取得し(S73)、取得した特徴線について、回転軸の特定処理によって特定したパラメータ(振幅A及び位相φ)が示す正弦波に基づく関数値と、推定された傾きとの差異に応じた重みを特定する(S74)。
制御部11は、取得した特徴線に対して、ステップS35で特定した回転軸φ及び設定した回転量αに基づく天頂補正(回転)を行い(S75)、補正後の特徴線における傾きを算出する(S76)。制御部11は、算出した傾きの二乗に、ステップS74で特定した重みを乗じた値を、配列αの対応する要素に加算する(S77)。制御部11は、ステップS34で抽出した全ての特徴線に対してステップS74~S77の処理を終了したか否かを判断する(S78)。終了していないと判断した場合(S78:NO)、制御部11はステップS73の処理に戻り、未処理の特徴線を1つ取得し(S73)、取得した特徴線についてステップS74~S77の処理を繰り返す。これにより、配列αの1つの要素に対して、ステップS35で特定した回転軸φ及びここでの回転量αに基づく天頂補正を行った後の各特徴線の傾きの二乗に、各特徴線に設定された重みを乗じた値が累積される。ステップS34で抽出した全ての特徴線に対してステップS74~S77の処理を終了したと判断した場合(S78:YES)、制御部11は、この時点の回転量αにπ/3S(Sは配列の分割数)を加算し(S79)、加算後の回転量αがπ/6以上であるか否かを判断する(S80)。回転量αがπ/6未満であると判断した場合(S80:NO)、制御部11は、ステップS73の処理に戻る。そして制御部11は、この時点の回転量αに基づいて、ステップS34で抽出した全ての特徴線に対してステップS73~S78の処理を繰り返す。制御部11は、回転量αの候補値をπ/3Sずつ増加させつつ、ステップS73~S78の処理を行うことにより、配列αの各要素に対して、ステップS35で特定した回転軸φ及び回転量αの各候補値に基づく天頂補正を行った後のそれぞれの特徴線の傾きの二乗に、それぞれの特徴線に設定された重みを乗じた値を累積できる。ステップS79で加算後の回転量αがπ/6以上であると判断した場合(S80:YES)、制御部11は、配列αの要素の中から最小値を特定し、最小値の要素に対応する回転量αを後段の補正処理に用いる補正量に特定する(S81)。そして、制御部11は、回転量の特定処理を終了し、図24の処理に戻る。
制御部11は、ステップS31で読み出したパノラマ画像に対して、ステップS35で特定した回転軸の位置と、ステップS36で特定した回転量とに基づく天頂補正を行い(S37)、補正処理を終了する。これにより、図16Aに示すように歪んだパノラマ画像が、図16Bに示すように、図22中の特徴線がそれぞれ上下方向に並んだ状態となるパノラマ画像に補正される。
本実施形態においても、カメラ20の上下方向が実空間上の鉛直方向に対して傾斜した状態で撮影を行った場合であっても、撮影後のパノラマ画像に対して、実空間上の水平面上にある被写体が画像の上下方向の中央に写るパノラマ画像に補正できる。また、本実施形態では、実空間上で鉛直方向に存在する可能性の高い線分に対応するパノラマ画像中の特徴線(セグメント)を自動で抽出できる。そして、抽出された特徴線に基づいて、撮影したパノラマ画像を、実空間上の水平面上にある被写体が画像の上下方向の中央に写るパノラマ画像に補正できる。よって、撮影画像(パノラマ画像)に基づいて、撮影画像を天頂補正するための補正量を求めることができるので、撮影対象に対する天頂補正を自動的に行うことができる。よって、カメラ20のユーザが、天頂補正に関する知識や技術を有しない場合であっても、精度の高い天頂補正を行うことができる。また、天頂補正の処理対象のパノラマ画像が多数ある場合であっても、自動的に天頂補正が行えるので、撮影画像毎に適切な天頂補正を行うことができる。
各実施形態で記載されている技術的特徴(構成要件)はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。