以下、本実施形態について説明するが、実施形態は、以下に説明する実施形態に限定されるものではない。なお、以下の実施形態では、画像処理装置、画像処理システムおよび撮像装置の一例として、2つの魚眼レンズ(広角レンズ)を備える全天球カメラ110を用いて説明する。なお、以下の実施形態では、2つの魚眼レンズとしているが、3つ以上の複数の魚眼レンズでもよい。
<全天球カメラの構成>
以下、図1および図2を参照しながら、本実施形態による全天球カメラ110の全体構成について説明する。図1は、本実施形態による全天球カメラ110の断面図である。図1に示す全天球カメラ110は、撮像体12と、上記撮像体12およびコントローラやバッテリなどの部品を保持する筐体14と、上記筐体14に設けられた操作ボタン18とを備える。
図1に示す撮像体12は、2つの結像光学系20A,20Bと、2つの撮像素子22A,22Bとを含み構成される。撮像素子22A,22Bは、CCD(Charge Coupled Device)センサやCMOS(Complementary Metal Oxide Semiconductor)センサなどである。結像光学系20は、例えば6群7枚の魚眼レンズとして構成される。上記魚眼レンズは、図1に示す実施形態では、180度(=360度/n;光学系数n=2)より大きい全画角を有し、好適には、190度以上の画角を有する。このような広角な結像光学系20と撮像素子22とを1個ずつ組み合わせたものを広角撮像光学系と参照する。
2つの結像光学系20A,20Bの光学素子(レンズ、プリズム、フィルタおよび開口絞り)は、撮像素子22A,22Bに対して位置関係が定められる。結像光学系20A,20Bの光学素子の光軸が、対応する撮像素子22の受光領域の中心部に直交して位置するように、かつ、受光領域が、対応する魚眼レンズの結像面となるように位置決めが行われる。
図1に示す実施形態では、結像光学系20A,20Bは、同一仕様のものであり、それぞれの光軸が合致するようにして、互いに逆向きに組み合わせられる。撮像素子22A,22Bは、受光した光分布を画像信号に変換し、コントローラ上の画像処理ブロックに順次、画像フレームを出力する。詳細は後述するが、撮像素子22A,22Bでそれぞれ撮像された画像は、合成処理されて、これにより、立体角4πステラジアンの画像(以下「全天球画像」と参照する。)が生成される。全天球画像は、撮影地点から見渡すことのできる全ての方向を撮影したものとなる。説明する実施形態では、全天球画像を生成するものとして説明するが、水平面のみ360度を撮影した、いわゆるパノラマ画像であってもよく、全天球または水平面360度の全景のうちの一部を撮影した画像であってもよい。また、全天球画像は、静止画として保存することもできるし、動画として保存することもできる。
図2(A)は、本実施形態による全天球カメラ110のハードウェア構成を示す。全天球カメラ110は、CPU(Central Processing Unit)112と、ROM(Read Only Memory)114と、画像処理ブロック116と、動画圧縮ブロック118と、DRAM(Dynamic Random Access Memory)インタフェース120を介して接続されるDRAM132と、外部センサインタフェース124を介して接続される加速度センサ136と、ジャイロセンサ137とを含み構成される。
CPU112は、全天球カメラ110の各部の動作および全体動作を制御する。ROM114は、CPU112が解読可能なコードで記述された制御プログラムや各種パラメータを格納する。画像処理ブロック116は、2つの撮像素子130A,130B(図1における撮像素子22A,22Bである。)と接続され、それぞれで撮像された画像の画像信号が入力される。画像処理ブロック116は、ISP(Image Signal Processor)などを含み構成され、撮像素子130から入力された画像信号に対し、シェーディング補正、ベイヤー補間、ホワイト・バランス補正、ガンマ補正などを行う。画像処理ブロック116は、さらに、撮像素子130から取得された複数の画像を合成処理し、これにより、上述した全天球画像を生成する。
動画圧縮ブロック118は、MPEG−4 AVC/H.264などの動画圧縮および伸張を行うコーデック・ブロックである。動画圧縮ブロック118は、生成された全天球画像の動画データを生成するために用いられる。静止画圧縮ブロック119は、JPEG(Joint Photographic Experts Group)、TIFF(Tagged Image File Format)などの静止画圧縮および伸張を行うコーデック・ブロックである。静止画圧縮ブロック119は、生成された全天球画像の静止画データを生成するために用いられる。DRAM132は、各種信号処理および画像処理を施す際にデータを一時的に保存する記憶領域を提供する。加速度センサ136は、3軸の加速度成分を検出し、検出された加速度成分は、鉛直方向を検出して全天球画像の天頂補正を施すために用いられる。ジャイロセンサ137は、3軸の角速度成分を検出し、検出された角速度成分は、全天球カメラ110の動きを検出してブレ補正を施すために用いられる。また、全天球カメラ110が加速度を伴って移動している場合は、加速度センサ136では鉛直方向を検出できないため、ジャイロセンサ137のデータも用いて鉛直方向を検出する。
全天球カメラ110は、さらに、外部ストレージインタフェース122と、USB(Universal Serial Bus)インタフェース126と、シリアルブロック128と、映像出力インタフェース129とを含み構成される。外部ストレージインタフェース122には、外部ストレージ134が接続される。外部ストレージインタフェース122は、メモリカードスロットに挿入されたメモリカードなどの外部ストレージ134に対する読み書きを制御する。
USBインタフェース126には、USBコネクタ138が接続される。USBインタフェース126は、USBコネクタ138を介して接続されるパーソナル・コンピュータなどの外部機器とのUSB通信を制御する。シリアルブロック128は、パーソナル・コンピュータなどの外部機器とのシリアル通信を制御し、無線モジュール140が接続される。映像出力インタフェース129は、HDMI(High-Definition Multimedia Interface,HDMIは登録商標である。)などの外部ディスプレイと接続するためのインタフェースであり、撮像した画像を外部ディスプレイなどに映像出力することができる。
電源スイッチの操作によって電源がオン状態になると、上記制御プログラムがメインメモリにロードされる。CPU112は、メインメモリに読み込まれたプログラムに従って、装置各部の動作を制御するとともに、制御に必要なデータをメモリ上に一時的に保存する。これにより、全天球カメラ110の後述する各機能部および処理が実現される。
<画像繋ぎ処理および後続の画像補正処理を含む全体的な処理の流れ>
以下、図3を参照しながら、全天球カメラ110における画像繋ぎ処理およびその後の画像補正処理について説明する。図3は、本実施形態による全天球カメラ110における画像処理フローを概略説明する図である。
部分画像取得処理210では、全天球カメラ110は、2つの撮像素子130A,130Bを制御し、連続したフレームを順次撮像する。撮像素子130各々で撮像される画像は、概ね全天球(全方位)のうちの半球を視野に収めた魚眼画像であり、全天球画像の部分的な画像を構成する。以下、撮像素子130それぞれで撮像される各フレームの画像を部分画像と参照する。
取得された2つの部分画像間の繋ぎ位置を検出する繋ぎ位置検出処理220を実行する。繋ぎ位置検出処理220では、フレーム毎に、複数の部分画像間に存在する重複領域において、複数の対応点各々の位置ずらし量を検出する処理が行われ、繋ぎ位置検出結果が生成される。
繋ぎ位置検出処理220に引き続き、傾き検出処理230が実行される。傾き検出処理230では、全天球カメラ110は、図2(A)に示した加速度センサ136およびジャイロセンサ137を制御し、所定の基準方向に対する全天球カメラ110の傾きを検出する。ここで、所定の基準方向とは、典型的には、鉛直方向であり、重力加速度が作用する方向である。傾き検出処理230により、フレーム毎に、3軸加速度センサ136の各加速度成分および3軸ジャイロセンサ137の各角速度成分が測定され、傾き検出結果が生成される。
上述した繋ぎ位置検出処理220による繋ぎ位置検出結果および傾き検出処理230による傾き検出結果により、各フレームの複数の部分画像を合成するための繋ぎパラメータ240が構成される。
全天球カメラ110は、引き続き、得られた繋ぎパラメータ240に基づいて、部分画像取得処理210で取得された2つの部分画像を繋ぎ合わせる繋ぎ処理250を実行する。繋ぎ処理250では、繋ぎ位置検出結果に基づく繋ぎ位置で複数の部分画像の位置合わせが行われ、傾き検出結果に基づいて天頂補正が行われる。これにより、部分画像取得処理210で取得された2つの部分画像が合成され、全天球画像が生成される。3つ以上の複数の魚眼レンズの場合は、3以上の複数の部分画像が合成され、全天球画像が生成される。
フレーム毎に繋ぎ位置検出および傾き検出が行われるので、繋ぎパラメータ240は、フレーム毎に動的に更新される。そして、繋ぎ処理は、これらの検出結果が反映された繋ぎパラメータ240を適用してフレーム毎に実行される。そのため、撮影中、全天球カメラ110の傾きや向きが変化したり、重複領域付近の被写体が移動したりした場合であっても、適切に天頂補正および繋ぎ補正が施された状態で出力画像を生成することができる。
繋ぎ処理250が完了した後、全天球カメラ110は、データ出力処理260を実行し、画像格納部270にフレームを順次保存したり、全天球カメラ110が備えるディスプレイでモニタ表示を行ったり、全天球カメラ110から外部のユーザ端末装置にデータ出力し、出力される画像に基づきモニタ表示を行ったりすることができる。
全天球カメラ110が備えるディスプレイまたは外部のユーザ端末装置が備えるディスプレイでのモニタ表示では、出力データをモニタに表示する。なお、モニタ表示では、全天球画像をそのまま表示してもよいし、全天球画像を所定の画角で射影表示して生成された画像(全天球画像から指定された画角で切り出された画像)を表示してもよい。
画像格納部270に格納された繋ぎ合わせた後の全天球画像に対して、さらに、事後的に画像補正処理280で画像補正を施すことができる。これについては、詳細を後述する。
<画像繋ぎ処理の詳細説明>
以下、図4〜図11を参照しながら、画像繋ぎ処理の詳細を説明する。図4は、本実施形態による全天球カメラ110上に実現される主要な機能ブロックを示す。本実施形態による画像処理ブロック300は、図4に示すように、位置検出用歪み補正部302と、繋ぎ位置検出部304と、テーブル修正部306と、テーブル生成部308と、傾き検出部310と、画像合成用歪み補正部312と、画像合成部314とを含み構成される。
<射影方式>
画像処理ブロック300には、2つの撮像素子130A,130Bから、各種画像信号処理を経て、フレーム毎に2の部分画像が入力される。ここで、撮像素子130Aをソースとするフレームの画像を「部分画像0」のように参照し、撮像素子130Bをソースとするフレームの画像を「部分画像1」のように参照する。画像処理ブロック300には、さらに、それぞれのレンズ光学系の設計データ等に基づいて、所定の投影モデルに従い製造元等で予め作成された、位置検出用変換テーブル330が提供される。
位置検出用歪み補正部302は、入力される部分画像0,1に対し、位置検出用変換テーブル330を用いて歪み補正を施し、位置検出用補正画像(以下、単に補正画像と参照する場合がある。)0および位置検出用補正画像1を生成する。入力される部分画像0,1は、平面座標系(x,y)で表現された画像データであり、これに対し、位置検出用変換テーブル330を用いて歪み補正がかけられた補正画像は、球面座標系(動径を1とし、2つの偏角θ,φを有する極座標系である。)で表現された正距円筒射影画像データとなる。
図5は、本実施形態による全天球カメラ110における射影関係を説明する図である。1つの魚眼レンズで撮影された画像は、撮影地点から概ね半球分の方位を撮影したものとなる。また、魚眼レンズでは、図5(A)に示すように、光軸に対する入射角度φに対応した像高hで画像生成される。像高hと、入射角度φとの関係は、所定の投影モデルに応じた射影関数で決定される。また、説明する実施形態では、画像対角線よりもイメージサークル径が小さな、いわゆる円周魚眼レンズの構成を採用するものとし、得られる部分画像は、図5(B)に示すように、撮影範囲の概ね半球分が投影されたイメージサークル全体を含む平面画像となる。
図6は、本実施形態で用いられる正距円筒射影画像データのデータ構造を説明する図である。図6に示すように、正距円筒射影画像データは、所定の軸に対するなす角度に対応する垂直角度φと、上記軸周りの回転角に対応する水平角度θとを座標とした画素値の配列として表現される。各座標値(θ,φ)は、撮影地点を中心とした全方位を表す球面上の各点と対応付けられており、全方位が正距円筒射影画像上にマッピングされる。
図7は、本実施形態による位置検出用歪み補正部302が参照する変換データを説明する図である。変換テーブル330は、平面座標系で表現される部分画像から、球面座標系で表現される画像への射影を規定する。変換テーブル330は、図7(A)および(B)に示すように、魚眼レンズ毎に、補正後画像の座標値(θ,φ)と、該座標値(θ,φ)にマッピングされる補正前の部分画像の座標値(x、y)とを対応付ける情報を、全座標値(θ,φ)に対して保持したものである。図7の例示では、1画素が担当する角度は、φ方向およびθ方向いずれも1/10度であり、変換テーブルは、各魚眼レンズについて、3600×1800の対応関係を示す情報を有している。繋ぎ位置検出の際に用いられる位置検出用変換テーブル330は、事前に製造元等で理想的なレンズモデルからの歪みを補正した上で計算され、テーブル化されたものである。
<繋ぎ位置検出>
図8は、本実施形態による位置検出処理の際における、魚眼レンズで撮像された部分画像の球面座標系へのマッピングを説明する図である。位置検出用歪み補正部302による処理の結果、魚眼レンズで撮像された2つの部分画像0,1は、図8に示すように、全天球画像フォーマット上に展開される。魚眼レンズ0により撮影された部分画像0は、典型的には、全天球のうちの概ね上半球にマッピングされ、魚眼レンズ1により撮影された部分画像1は、全天球のうちの概ね下半球にマッピングされる。全天球フォーマットで表現された補正画像0および補正画像1は、魚眼レンズの全画角が180度を超えるため、それぞれ半球からはみ出している。その結果、補正画像0および補正画像1を重ね合わせると、画像間で撮影範囲が重複する重複領域が発生する。
繋ぎ位置検出部304は、位置検出用歪み補正部302により変換された補正画像0,1の入力を受けて、パターンマッチング処理により、入力された補正画像0,1間の繋ぎ位置を検出し、繋ぎ位置検出結果332を生成する。本実施形態による位置検出用変換テーブル330では、図8に示すように、2つのレンズ光学系各々の光軸を球面の2つの極に射影するとともに、画像間の重複領域を球面の赤道近傍に射影するように作成される。球面座標系では、垂直角度φが0度または180度である極に近接するほど歪みが大きくなり、繋ぎ位置検出精度が劣化してしまう。これに対し、上述したような射影とすることによって、繋ぎ位置検出精度を向上させることができる。なお、図8は、2つの魚眼レンズで撮像された2つの部分画像の球面座標系へのマッピングを説明する図であるが、3つ以上の複数の魚眼レンズでもよい。
図9は、本実施形態による繋ぎ位置検出処理を説明する図である。説明する実施形態では、テンプレート用画像500は、位置検出用補正画像1の重複領域の部分の画像であり、探索用画像510は、位置検出用補正画像0の重複領域の部分の画像である。ここで、指定されたサイズW、指定された生成間隔Stepでテンプレート画像が生成されるものとすると、図9に示すような態様で複数のテンプレート画像502−1〜502−#が生成される。
生成された複数のテンプレート画像502−1〜502−#に対し、テンプレート・マッチングにより、探索用画像510上での対応部分514が所定の探索範囲512内で探索される。この各テンプレート画像502−1〜502−#に対して、それぞれ、マッチングスコアが最大となる位置の基準位置からのずらし量が検出される。
<繋ぎパラメータ>
図10は、本実施形態における繋ぎ位置検出結果のデータ構造を示す図である。繋ぎ位置検出処理に基づき、図10に示すような、変換後の各座標値(θ,φ)に対して、ずらし量(Δθ,Δφ)が対応付けられた情報を全座標値について保持するデータが生成される。このとき、上記繋ぎ位置検出により求められたテンプレート・ブロック毎のずらし量(Δθi,Δφi)を、テンプレート・ブロックの中心座標の値として設定し、各座標値(θ,φ)に対応するずらし量(Δθ,Δφ)を補間して、繋ぎ位置データが計算される。
テーブル修正部306は、繋ぎ位置検出結果332に基づいて、事前準備された位置検出用変換テーブル330に対し修正を施し、テーブル生成部308に渡す。上述した繋ぎ位置検出により、図10に示すように、全天球画像フォーマットの座標値毎にずらし量が求まっているので、テーブル修正部306は、部分画像0の歪み補正に用いた検出用歪み補正テーブル0において、入力座標値(θ,φ)に対し、修正前に(θ+Δθ,φ+Δφ)に対応付けられていた(x,y)を対応付けるように修正する。なお、部分画像1の歪み補正に用いた検出用歪み補正テーブル1については対応付けを変える必要がない。
テーブル生成部308は、上記テーブル修正部306により修正された変換データから、回転座標変換に基づき、画像合成用変換テーブル336を生成する。なお、この際に、傾き検出部310が生成した傾き検出結果334に基づいて、傾き補正を反映させて画像合成用変換テーブル336を生成することができる。
このように、フレーム毎に繋ぎ位置検出が行われ、画像合成用変換テーブル336が更新される。位置検出用歪み補正部302、繋ぎ位置検出部304、テーブル修正部306およびテーブル生成部308が実行する処理は、図3に示した繋ぎ位置検出処理220に対応しており、傾き検出部310が実行する処理は、傾き検出処理に対応している。生成される画像合成用変換テーブル336は、繋ぎパラメータ240に対応する。
画像合成用歪み補正部312は、画像合成処理の前段の処理として、部分画像0および部分画像1に対し、画像合成用変換テーブル336を用いて歪み補正をかけ、画像合成用補正画像0および画像合成用補正画像1を生成する。生成される画像合成用補正画像0,1は、位置検出用補正画像と同様に、球面座標系で表現されている一方で、上記回転座標変換により、位置検出用補正画像とは座標軸の定義が異なったものとなる。画像合成部314は、得られた画像合成用補正画像0および画像合成用補正画像1を合成し、全天球画像(正距円筒射影画像)フォーマットの合成画像のフレームを生成する。
図11は、本実施形態による画像合成処理の際における、魚眼レンズで撮像された部分画像の球面座標系へのマッピングを説明する図である。上記回転座標変換により、図8に示すような、一方のレンズ光学系の光軸を軸とした水平角度および垂直角度の座標軸の定義から、図11に示すような、光軸に垂直な軸を基準とした水平角度および垂直角度の定義に変換される。これにより、画像合成用歪み補正部312による処理の結果、魚眼レンズで撮像された2つの部分画像0,1は、図11に示すように全天球画像(正距円筒射影画像)フォーマット上に展開される。魚眼レンズ0により撮影された部分画像0は、典型的には、全天球のうちの概ね左半球にマッピングされ、魚眼レンズ1により撮影された部分画像1は、全天球のうちの概ね右半球にマッピングされる。なお、図11は、2つの魚眼レンズで撮像された2つの部分画像の球面座標系へのマッピングについて説明しているが、3つ以上の複数の魚眼レンズの場合は、3以上の複数の部分画像が合成され、全天球画像が生成される。
画像合成用変換テーブル336に基づき繋ぎ処理が行われる。画像合成用歪み補正部312および画像合成部314が実行する処理は、図3に示した繋ぎ処理250に対応する。
<表示、保存>
図4に示す画像処理ブロック300は、さらに、モニタ画像生成部322を含むことができる。上記生成された合成画像は、全天球画像フォーマットで表現されるため、そのまま、ディスプレイなどの平面表示デバイスに表示させると、垂直角度0度および180度に近づくほど画像が歪んで表示されることになる。好ましい実施形態では、全天球画像を平面表示デバイスに投影するための画像処理を実行することができる。
モニタ画像生成部322は、全天球画像フォーマットの合成画像から、球面座標系から特定方向および特定画角の平面座標系への順次変換し、ユーザが指定する特定の視野方向の一定画角の画像に投影する処理を行う。これにより、視聴者は、所定の視点および視野で観察した場合に相当する画像をモニタすることができるようになる。
また、上述した説明では、撮影前または撮影中のモニタ画像表示について説明した。しかしながら、上述した画像処理パスで生成される全天球画像の静止画を生成し、または、全天球画像の複数のフレームからなる画像列を動画圧縮して動画像を生成し、これらの静止画または動画の画像データを保存することもできる。
本実施形態による画像処理ブロック300は、図4に示すように、さらに、画像格納部270を含み構成される。画像格納部270は、全天球画像の静止画または動画を画像データとして保存する。静止画の場合には、静止画圧縮ブロック119でJPEG、TIFFなどの静止画フォーマットへ圧縮を行い、動画の場合は、動画圧縮ブロック118でMPEG−4 AVC/H.264などの動画フォーマットへ圧縮を行い、その後に画像格納部270に格納されてもよい。画像格納部270は、外部ストレージ134などの記憶領域によって提供される。
以上、全天球カメラ110上での複数の魚眼レンズおよび撮像素子の組み合わせを用いて撮像された部分画像を繋ぎ合わせて全天球画像を生成し、格納するまでの処理について説明した。
特に、上記説明においては、画像の繋ぎ処理を全天球カメラ110の内部リソースを用いて行う場合について説明した。しかしながら、全天球カメラ110とは別の外部リソース(例えばPCなどの外部のユーザ端末装置)を用いて画像の繋ぎ処理を行うこともできる。
全天球カメラ110の内部で繋ぎ処理を行う際は、全天球カメラ110のリソース(CPU112やGPUなど)を使って繋ぎ処理を行い、上述したように、繋ぎ処理された後の画像を保存する。一方、全天球カメラ110の外部で繋ぎ処理を行う場合、撮像素子130A,130Bにより撮影された繋ぎ前の画像(例えば部分画像)を各々または1つの画像として保存することができる。その際に、撮影時の光学情報を画像内にメタデータとして埋め込んだり、別のファイルとして保存したりする。そして、外部リソースで、繋ぎ前の画像(例えば部分画像)および撮影時の光学情報などに基づいて繋ぎ処理が行われ、繋ぎ後の画像が生成される。
ところで、新たな画像補正技術が開発された場合において、既に撮影済みの画像に対しても、新たに開発された画像補正技術を適用したい場合がある。このとき、全天球カメラ110の外部で繋ぎ処理を行っていた場合は、繋ぎ前の画像データおよび撮影時の光学情報などが保持されているので、従来からの外部のユーザ端末装置で行う繋ぎ処理フローの途中に、新たな画像補正技術を組み入れることが可能である。
しかしながら、全天球カメラ110の内部で繋ぎ処理を行った場合は、既に繋がれた後の画像が保存されており、通常、保存された繋ぎ後の画像だけでは、撮像素子や光学系などの撮像手段に依存する画像補正技術を行うことは困難である。外部のユーザ端末装置で繋ぎ処理をした場合であっても、一度繋ぎ処理した後に、繋ぎ前の画像やメタデータが削除される場合もある。また、撮影される画像に対して、新たな画像補正技術が全天球カメラ110の内部リソースでは実現できない場合や、実現できたとしても処理時間が間に合わない場合が考えられる。特に、動画撮影などでは所定時間内にフレーム毎の処理を完了させなければならない場合に実現が難しくなる。繋がれた画像と繋がれていない画像の両方を保存する方法も想定されるが、特に動画では記憶容量の圧迫を引き起こしかねない。
そのため、繋ぎ合わせ後の全天球画像に対し、撮像素子や光学系に依存する画像補正技術を事後的に適用可能な技術の提供が望まれる。
そこで、本実施形態による全天球カメラ110は、繋ぎ合わせ後の全天球画像の座標値から撮像に用いた撮像素子や光学系を判定し、その判定結果に基づいて、画像補正を行うよう構成されている。以下、図4および図12〜図31を参照しながら、本実施形態において画像繋ぎ処理後に行われる画像補正処理について、より詳細に説明する。
説明する実施形態では、繋ぎ合わせ後の全天球画像(静止画または動画)データを画像格納部270に格納する際に、事後的に画像補正を適用可能なように、画像データに対し、さらに、繋ぎ合わせ処理で用いた情報(繋ぎ情報)が関連付けられて格納される。
<繋ぎ情報>
ここで、本実施形態において、画像データと関連付けて画像格納部270に格納される繋ぎ情報について、図12を参照しながら説明する。図12(A)は、繋ぎ情報である繋ぎテーブルのデータ構造を示す。繋ぎテーブルは、繋ぎ後画像である全天球画像(正距円筒射影画像)を構成する画素各々の座標値に対し、繋ぎ前画像(上述した部分画像0,1)の座標値と、図9および図10を参照して説明した繋ぎ位置検出処理結果である繋ぎ位置と対応付けるように構成される。ここで、繋ぎ前画像は、複数の撮像手段(撮像素子130および光学系の組み合わせ)により撮像されるものである。このため、図12(A)に示す繋ぎテーブルのデータ構造では、繋ぎ前画像の情報として、いずれの撮像素子の画像であるか識別できる識別情報(同時に対応する光学系も識別される。)の項目が加えられている。繋ぎテーブルの内容は、図4に示した位置検出用変換テーブル330および繋ぎ位置検出結果332を併せたものに相当する。
なお、図12(A)に示すデータ構造は、一例であり、図12に示すように、両方の繋ぎ前画像に対応したテーブルのデータ構造に限定されるものではなく、繋ぎ前画像毎に繋ぎテーブルを準備するようにしてもよい。図12(B)のように、繋ぎテーブルは、繋ぎ後画像(図中、長方形で表している正距円筒射影画像)の座標値から繋ぎ前画像(図中、AおよびBの記号を付した円で像を表している魚眼画像)の座標値を参照できるようにするためのものである。繋ぎ前画像の座標値の参照方法については、図7で説明した通りであり、重ねての説明は、割愛する。
図12(A)に示すような繋ぎテーブルは、全天球カメラ110で撮影時に全天球画像(静止画または動画)に関連付けられるように保存される。例えば、静止画であれば、繋ぎテーブルは、EXIF(Exchangeable Image File Format)、TIFFなどの既存のメタデータフォーマットを使用して記録され得る。動画であれば、繋ぎテーブルは、MP4(MPEG(Moving Picture Experts Group)−4 Part 14)など既存のコンテナフォーマットを使用して記録されてもよいし、独自のメタデータフォーマットを作成して記録してもよい。また、繋ぎテーブルは、静止画または動画のファイルとは別ファイルとして記録されてもよい。
また、動画の場合は、フレーム毎に繋ぎテーブルを記録することが望ましい。しかしながら、フレームに依存して変動しない情報(例えば、繋ぎ前画像の情報)に関しては、1つの動画に対して1つのテーブル値が保持されてもよく、フレーム間で変動した部分(繋ぎ位置や差分)だけの情報が保持されてもよい。
また、上述した説明では、画像データと関連付けて繋ぎ情報のみが格納されるものとして説明した。しかしながら、天頂補正が施された全天球画像が格納される場合もあり、そのような場合には、画像データと関連付けて、複数の撮像手段の姿勢変動の情報として天頂補正データ(傾き検出結果334相当の内容)が画像格納部270に格納され得る。傾き検出結果334についても、繋ぎテーブルと同様の方法で、メタデータとして、画像データに関連付けて画像格納部270に格納され得る。
このように、全天球画像の画像データには、複数の撮像手段で撮像された複数の部分画像から全天球画像を生成するための変換テーブル、全天球画像に適用された座標変換(回転変換や繋ぎ位置検出結果に応じた変換(繋ぎ変換))の情報および複数の撮像手段の姿勢変動の情報からなる群から選択された少なくとも1つの情報を含む情報が関連付けて格納される。
本実施形態による画像処理ブロック300は、図4に示すように、さらに、繋ぎ処理後の画像に対し、画像補正処理を適用するための画像補正処理部350を含み構成される。複数の撮像手段においては、撮像素子や光学系の一方または両方に関連して特性に差異が存在し得るところ、画像補正処理部350は、上述した画像データに関連付けて格納された情報に基づいて、繋ぎ処理後の全天球画像に対し、対応する撮像素子や光学系に依存した画像補正を適用する。
図4に示す画像補正処理部350は、より詳細には、画像入力部352と、座標変換部354と、判定部356と、画像補正部358とを含み構成される。
画像補正処理部350は、画像格納部270から保存済みの全天球画像(静止画または動画の各フレーム)を読み出し、画像入力部352に全天球画像を入力する。画像入力部352に入力される画像は、上述したように、撮像素子130A,130B各々により撮像された部分画像0,1を歪み補正するとともに領域毎の繋ぎ位置で繋ぎ合わせた全天球画像(合成画像)であり得る。画像補正処理部350は、また、全天球画像の撮像に用いられた複数の撮像手段に関する情報である繋ぎテーブルや天頂補正データを読み出す。画像補正処理部350は、本実施形態による画像入力手段および情報読出部を構成する。
画像補正部358は、入力された全天球画像に対し、画像補正を適用する。画像補正としては、特に限定されるものではないが、全天球画像を構成する画素に対する座標補正および画素値補正の一方または両方を含み得る。画素値補正としては、全天球画像を構成する画素各々に対する独立した補正のほか、画素各々に対する周辺画素に依存した補正を含んでもよい。
座標変換部354は、上述した画像補正の1つとしての座標補正の実施を容易にするべく、座標変換を実行する。座標変換により、入力された全天球画像は、画像格納部270に格納された繋ぎテーブルの状態に適合した形に変換される。上述したように、説明する実施形態では、部分画像0が上半分、部分画像1が下半分となり、重複領域および繋ぎ位置を赤道上に変換する位置検出用変換テーブル330の内容が、繋ぎテーブルのテーブル値となる。このため、画像合成用変換テーブル336に基づいて生成された全天球画像を、位置検出用変換テーブル330の状態に適合するように座標変換が行われる。座標変換については、詳細を後述する。
判定部356は、全天球画像中の複数の部分各々について、これら複数の部分各々の撮像に用いられた撮像手段(以下、対応撮像手段と記載する。)を判定する。ここで、判定は、例えば、全天球画像を構成する各画素毎に行われ得る。また、上述した座標変換部354による座標変換は、ここでの判定が容易となるように行われる。
画像補正部358は、複数の部分(例えば画素)各々についての対応撮像手段の判定結果に基づいて、全天球画像に対し画像補正を適用する。画像補正部358は、好ましくは、判定された対応撮像手段に対して事前準備されたデータに基づいて、画像補正を行うことができる。また、画像補正は、上述した全天球画像における複数の部分(例えば画素)の座標、または、この複数の部分(例えば画素)各々に繋ぎテーブルで対応付けられた対応撮像手段での画素位置に基づき行われる。ここで、各部分の座標変換後の座標および各部分に対応付けられた画素位置は、対応撮像手段における光学位置を示すものである。上記判定結果には、対応撮像手段の識別の結果および対応撮像手段における光学位置の特定の結果が含まれる。画像補正部358は、本実施形態における補正手段を構成する。
特定の実施形態において、上述した画像補正の一種としての座標補正は、ブレ補正であってよい。その場合、判定された対応撮像手段および対応する繋ぎ前画像の画素位置(光学位置)に基づいて、フレーム内の露光時間の時間差に応じた補正量で行われる。
別の特定の実施形態において、上述した画像補正の一種としての画素値補正は、光量補正であり、判定された対応撮像手段および対応する全天球画像の座標または繋ぎ前画像の画素位置に基づいて、像高に応じた補正量で行われる。
好ましい実施形態において、画像補正部358は、画像補正処理中、所定の補正テーブルを生成し、生成した補正テーブルに基づいて、全天球画像に対して画像補正を適用する。画像補正部358は、この全天球画像に適用した際に生成した補正テーブルを、画像補正適用後の画像に対してさらに別の画像補正を事後的に適用できるように、補正後の画像データに関連付けて出力することができる。
補正テーブルは、補正後の画像(全天球画像)の各座標に対し、補正前の画像(全天球画像)の座標、補正の方式を指定する方式指定値、および、前記方式指定値で指定された方式での補正の補正量を保持するものである。
以下、本実施形態による補正テーブルを用いた画像補正方法について、図13を参照しながら説明する。図13(A)は、補正後画像を補正前画像から生成するための補正テーブルのデータ構造を示す。図13(B)は、補正テーブルを用いた画像補正方法を説明する図である。図13に示すように、補正後画像の各座標値については、補正テーブルを参照して、補正前画像から、対応する座標の画素値(v0)を取得し、それに対し補正処理を行った後の値を補正後画像の画素値(v1)とする。図13(A)に示す補正テーブルにおいては、補正後画像の座標値に対して、補正前画像の座標値と補正方法が設定されている。ここで、補正方法とは、補正前画像の画素値に対して補正計算を行うのに必要な情報である。
図13(C)は、補正モードとしての四則演算およびそれぞれを指定する指定値を対応付けるテーブルを示しており、「加算」、「減算」、「乗算」および「除算」の補正モードに対して、「1」、「2」、「3」および「4」の値が与えられている。
したがって、図13(C)のように、補正モードを四則演算と設定している場合、図13(A)の補正テーブルは、補正後画像の座標値(θa,φa)に対する補正として、補正前画像の座標値(θb,φb)の画素値(v0)を取得し、補正モード=1(加算)および補正量(n)で補正すること、つまり、v1=f1(v0,n)=v0+nが、補正後画像の座標値(θa,φa)の画素値となることを記述している。
以下、図13〜図22を参照しながら、本実施形態の事後的な画像補正処理の処理フローを説明する。なお、以下の説明では、全天球画像フォーマットとして正距円筒図法により表された画像(以下、正距円筒射影画像)を用いるものとする。また、全天球カメラ110で撮影され、外部ストレージ134に保存された、繋ぎ後の静止画または動画を対象とし、本実施形態の処理フローは全天球カメラ110内で行うものとして説明するが、後述するように、ユーザ端末装置等の全天球カメラ110の外部の装置上で行ってもよい。
図14は、本実施形態による全天球カメラ110が実行する、事後的な画像補正処理を示すフローチャートである。図14に示す処理は、操作者からの画像補正の適用の指示に応答して、ステップS100から開始される。なお、上記指示には、補正対象となる画像および画像補正の種類が指定されるものとする。
ステップS101では、全天球カメラ110は、画像入力部352により、画像格納部270から、補正対象の画像を読み出すとともに、補正対象の画像を撮像する際に用いられた複数の撮像手段に関する情報(繋ぎテーブルおよび天頂補正データ)を読み出す。
ステップS102〜ステップS111のループでは、補正後の画像を構成する各画素毎に、すべての画素に対する処理が完了するまで、ステップS103〜110の処理を実行する。以下、ステップS103〜110の処理の対象として注目している補正後画像の画素を処理対象画素と参照する。
ステップS103では、全天球カメラ110は、座標変換部354により、処理対象画素の座標値に対し、第1座標変換を適用する。第1座標変換は、回転変換および領域毎の繋ぎ位置に基づく繋ぎ変換を含み得る。
図15(A)および図16〜図18を参照して、第1座標変換についてより詳細に説明する。図15(A)は、第1座標変換処理を示すフローチャートである。図15(A)に示す第1座標変換は、図14に示すステップS103の呼び出しに応答して、ステップS200から開始される。
ステップS201では、全天球カメラ110は、第1回転変換の要否を判定する。ここで、第1回転変換とは、繋ぎ後の正距円筒射影画像の繋ぎ位置(重複領域)を球面座標系で赤道面上に移動させるための回転処理をいう。上述したように、保存された正距円筒射影画像は、図8に示した座標系ではなく、利用者が見やすいように、図11に示した座標系となるような回転変換や、同じく回転変換である天頂補正が施されており、繋ぎ位置(重複領域)が球面の赤道以外の位置となっている。したがって、入力された正距円筒射影画像の座標系に対して適用されていた回転変換を相殺するために第1回転変換の処理が必要となる。ステップS201で、第1回転変換が必要であると判定された場合(YES)は、ステップS202へ処理が分岐され、全天球カメラ110は、処理対象画素の座標値に対し、第1回転変換を適用する。
図16および図17を参照しながら、ステップS202で行われる第1回転変換の処理について説明する。
図16は、天頂補正されていない場合の回転変換について説明する。図16において、正距円筒射影画像上に表現された画像領域A(灰色)は、撮像素子130A(22A)に由来する領域を示しており、画像領域B(白色)は、撮像素子130B(22B)に由来する領域を示している。図16中の破線は、2つの撮像素子130A,130Bから得られた画像を繋いだ際の繋ぎ位置を示している。なお、ステップS103〜110の処理は、処理対象画素毎に行われ、全画素に対して回転変換を施した画像が生成されるわけではないが、図16では、全画素に対して、ステップS202の回転変換を適用した場合に得られであろう画像を模式的に表している。同様の表現のある他の図についても同じである。
図16において、球面座標系である正距円筒射影画像400の座標値からの3次元直交座標系の球面402上の座標値へ変換し、3次元直交座標上でZ軸周りに−90度回転すると、繋ぎ位置が球面404の赤道面上に移動する。そして、3次元直交座標系上で回転変換が施された球面404上の座標値を、球面座標系の座標値に変換すると、画像の上半分が画像領域A、下半分が画像領域Bとなり、画像の垂直方向の中央が繋ぎ位置(点線)となる正距円筒射影画像406が得られる。
図17は、天頂補正された場合の回転変換について説明する。図16との相違点は、図17において、正距円筒射影画像410が天頂補正されている点が異なっている。図17においても、まず、図16と同様に、球面座標系である正距円筒射影画像410の座標値から3次元直交座標系の球面412上の座標値へ変換する。ここで、正距円筒射影画像410が3次元直交座標の各軸に対して(X,Y,Z)=(x,y,z)の角度で天頂補正されていた場合、この天頂補正を打ち消すように(X,Y,Z)=(−x,−y,−z)の回転処理を行って、3次元直交座標系の球面414上の座標値へと変換する。その後は、図16で説明した処理と同様であり、3次元直交座標系の球面414上の座標値をZ軸周りに−90度回転すると、繋ぎ位置が球面416の赤道面上に移動する。回転変換を施した球面416上の座標値を、球面座標系である座標値に変換すると、画像の上半分が画像領域A、下半分が画像領域Bとなり、画像の垂直方向の中央が繋ぎ位置(点線)となる正距円筒射影画像418が得られる。
ここで、再び図15を参照する。ステップS203では、全天球カメラ110は、第1繋ぎ変換の要否を判定する。ここで、第1繋ぎ変換とは、繋ぎ後の正距円筒射影画像の繋ぎ位置が、図9で示したパターンマッチング処理などによる繋ぎ位置検出結果に基づいて繋がれた場合に、繋ぎ処理のために伸縮された座標値を修正するための変換をいう。
ステップS203で、第1繋ぎ変換が必要であると判定された場合(YES)は、ステップS204で、全天球カメラ110は、座標変換部354により、処理対象画素の座標値に対し、第1繋ぎ変換を適用する。一方、繋ぎ後の正距円筒射影画像が、繋ぎ検出が行われず一律の被写体距離で繋げられた場合は、ステップS204の第1繋ぎ変換は、必要ないと判定され、そのままステップS205へ分岐され、本処理は終了する。
図18を参照しながら、ステップS204で実行される第1繋ぎ変換について説明する。図18において、第1回転変換により繋ぎ位置が球面の赤道面上に移動した後の状態の正距円筒射影画像420が示されている。ただし、繋ぎ処理によって、繋ぎ位置検出結果に基づいて繋がれているため、領域毎に繋がれている被写体距離が異なっている。第1繋ぎ変換では、領域毎に異なる被写体距離で繋がれたことによって伸縮された座標値を、一律の被写体距離で繋がれた状態にするように座標変換する。
第1繋ぎ変換には、繋ぎ処理に使用された繋ぎ情報が必要であり、図12を参照して説明した繋ぎテーブルを使用して、画像繋ぎ処理の時とは逆の処理を行う。図12(A)に示す繋ぎテーブルにおいて、繋ぎ位置の値に対してマイナスをつけたものが、ステップS204の第1繋ぎ変換で用いる繋ぎ変換用テーブルとなる。図18には、第1繋ぎ変換の座標変換のイメージ422も示されており、変換後画像(424に相当)の座標値は、繋ぎ変換用テーブルから変換前画像(420に相当)の座標値を参照する。イメージ422における点線部分が繋ぎ位置を示しており、第1繋ぎ変換によって一律の被写体距離に繋いだ状態と同等の座標値変換を行うと、変換後画像(424に相当)において、繋ぎ位置は、赤道面上から外れた位置に移動する。
再び図14を参照する。ステップS104では、全天球カメラ110は、判定部356により、処理対象画素の座標値について、繋ぎ前画像の判定を行う。より具体的には、ステップS104では、正距円筒射影画像の垂直位置に基づいて、繋ぎ前画像の判定が行われ得る。第1繋ぎ変換(S204)を行っていない場合は、正距円筒射影画像の上半分は撮像素子130A(22A)で撮影された画像領域A、下半分は撮像素子130B(22B)で撮影された画像領域Bとなる。
つまり、正距円筒射影画像での垂直座標に対して、処理対象画素の座標(第1座標変換が適用された後の座標値)が上半分に位置する場合(90度未満)は、撮像素子130A(22A)で撮影された繋ぎ前画像であると判定される。一方、座標が下半分に位置する場合(90度以下)は、撮像素子130B(22B)で撮影された繋ぎ前画像であると判定される。ここで、繋ぎ前画像の判定は、処理対象画素の部分の撮像に用いられた対応撮像手段、つまり処理対象画素が由来する対応撮像手段を判定することと等価である。
一方、第1繋ぎ変換(S204)が行われた場合は、例えば、図19に示すように第1回転変換(S202)を行った後、かつ、第1繋ぎ変換(S204)を行う前の段階430の座標の垂直座標432で判定することができる。つまり、繋ぎ前画像(対応撮像手段)の判定は、第1座標変換における回転変換の適用によって得られた座標に基づいて行うことができる。
再び図14を参照する。ステップS105では、全天球カメラ110は、処理対象画素の座標値について、繋ぎ前画像における座標値を取得する。図20を参照しながら、ステップS105で行われる、繋ぎ前画像の座標値の取得の処理について説明する。
図20(A)は、繋ぎ前画像の座標値の取得の処理を示すフローチャートである。図20(A)に示す処理は、図14に示すステップS105の呼び出しに応答して、ステップS400から開始される。ステップS401では、全天球カメラ110は、繋ぎ前画像の座標値の取得が必要であるか否か判断する。補正処理の種類によっては、繋ぎ前画像の座標値が無くても補正処理が実行可能である場合もある。このため、要求された補正の種類が、繋ぎ前画像の座標値が必要な所定の種類の処理に該当する場合に必要であると判断される。繋ぎ前画像の座標値の要否は、補正処理の種類毎に保持しておき、実施される補正処理の種類によって切り替えられるようにしておくことが好ましい。
ステップS401で、繋ぎ前画像の座標値の取得が必要であると判定された場合(YES)は、ステップS402へ処理が分岐される。ステップS402では、全天球カメラ110は、繋ぎテーブルの選択を行い、より具体的には、繋ぎ前画像判定(S1004)で判定された繋ぎ前画像に対応する繋ぎテーブルを選択する。なお、図12(A)に示すように、繋ぎテーブルが正距円筒射影画像に対して1つだけしか用意されていない場合は、ステップS402の繋ぎテーブルの選択は省略されてよい。
ステップS403では、全天球カメラ110は、図20(B)に示すように、選択した繋ぎテーブルを参照して処理対象画素の座標(座標変換が適用された後の座標)に対応する繋ぎ前画像の座標値(x,y)を取得し、ステップS404で本処理を終了する。一方、ステップS401で、繋ぎ前画像の座標値の取得が不要であると判定された場合(NO)は、ステップS404へ処理が直接分岐される。
ここで、再び図14を参照する。ステップS106では、全天球カメラ110は、画像補正部358により、処理対象画素に対し、補正値を算出する。ステップS106では、図13(A)に示した補正テーブルの補正前画像の座標値および補正方法(補正モードおよび補正量)の一方または両方に設定するための値が算出される。補正前画像の座標値および補正方法は、処理対象画素について判定された対応撮像手段に応じて決定されることになる。なお、補正値算出については、具体例をもって詳細を後述するため、ここでは補正値が算出され、補正テーブルの補正前画像の座標値および補正方法の一方または両方に値が設定されたものとして説明を続ける。
ステップS107では、全天球カメラ110は、画像補正部358により、座標値補正の適用を行う。以下、図21を参照しながら、図14に示すステップS107で実行される座標値補正の処理について説明する。ステップS107で実行される座標値補正は、ステップS106の補正値算出で設定された補正テーブルにおける補正前画像の座標値を参照することによって行われる。座標値補正されない場合は、図21(A)のように補正後画像と補正前画像とは同じ座標値となる。一方、座標値補正される場合は、図21(B)のように補正後画像と補正前画像の座標値とが異なる値となる。補正テーブルの補正前画像における参照先の座標値で決まるため、座標補正される場合と、座標補正されない場合があることになる。
ステップS108では、全天球カメラ110は、座標変換部354により、処理対象画素の座標値(ステップS107の座標値補正の適用後の座標値)に対し、第2座標変換を適用する。第2座標変換は、回転変換および領域毎の繋ぎ位置に基づく繋ぎ変換を含み得るが、第2座標変換は、ステップS103で実行した第1座標変換とは逆の変換となる。
図15(B)、図16〜図18を参照して、第2座標変換についてより詳細に説明する。図15(B)は、第2座標変換処理を示すフローチャートである。図15(B)に示す第2座標変換は、図14に示すステップS108の呼び出しに応答して、ステップS300から開始される。
ステップS301では、全天球カメラ110は、第2繋ぎ変換の要否を判定する。図8で示したパターンマッチング処理などにより検出した結果を繋ぎ位置として使用する場合は、ステップS103の第1座標変換で第1繋ぎ変換が行われており、それを戻すために、第2繋ぎ変換が必要になる。これに対し、繋ぎ位置検出結果が使用されず一律の被写体距離で繋ぎ処理が行われた場合は、ステップS103の第1座標変換で第1繋ぎ変換が行われておらず、第2繋ぎ変換も必要ないということになる。
ステップS301で、第2繋ぎ変換が必要であると判定された場合(YES)は、ステップS302を処理が分岐され、全天球カメラ110は、処理対処画素の座標に対し、第2繋ぎ変換を適用する。一方、繋ぎ検出が行われず一律の被写体距離で繋げられていた場合は、ステップS302の第2繋ぎ変換は、必要ないと判定され、そのままステップS303へ分岐される。
図18を用いて第2繋ぎ変換の処理について説明する。図18において、正距円筒射影画像424は、第1繋ぎ変換により一律の被写体距離に繋いだ状態と同等の座標値変換を行った状態となっている。第2繋ぎ変換では、繋ぎ位置を繋ぎ位置検出結果に基づいた位置に変換するため、図12で説明した繋ぎテーブルを使用する。第2繋ぎ変換では、繋ぎテーブルの繋ぎ位置を使用して、繋ぎ処理の時と同等の処理を行う。図12の繋ぎテーブルにおいて、そのままの繋ぎ位置の値を有するものが、第2繋ぎ変換で用いる繋ぎ変換用テーブルとなる。
図18には、第2繋ぎ変換の座標値変換のイメージ426も示されており、変換後画像(420に相当)は、繋ぎ変換用テーブルを参照して、変換前画像(424に相当)の座標値を取得する。図18において、点線部分が繋ぎ位置を示しており、第2繋ぎ変換によって繋ぎ位置検出結果が反映された座標値変換を行うと、変換後画像(420に相当)の繋ぎ位置は、赤道面上に移動する。
再び図15(B)を参照すると、ステップS303では、全天球カメラ110は、第2回転変換の要否を判定する。繋ぎ後の正距円筒射影画像の繋ぎ位置が球面の赤道面上にある状態からの第2回転変換の要否が判定される。上述したように、正距円筒射影画像は、一般的には、利用者が見やすいように、図11に示した座標系となるような回転変換や、同じく回転変換である天頂補正が施されており、繋ぎ位置が球面座標の赤道面上となっていない。そして、その場合、ステップS103の第1座標変換で第1回転変換が行われており、ステップS303では、これを戻すために、第2回転変換が必要になる。ステップS303で、第2回転変換が必要であると判定された場合(YES)は、ステップS304へ処理が分岐され、全天球カメラ110は、処理対象画素の座標値に対し、第2回転変換を適用する。
図16および図17を再び参照して、ステップS304で行われる第2回転変換の処理について説明する。
図16は、天頂補正されていない場合の第2回転変換について説明する。球面座標である正距円筒射影画像406の座標値から、3次元直交座標系の球面404上の座標値へ変換し、3次元直交座標系において、球面404をZ軸周りに+90度回転すると、繋ぎ位置が球面402の経度方向へ移動する。そして、3次元直交座標系で回転変換を施した球面402上の座標値を、球面座標系の座標値に変換すると、天頂補正されていない状態の正距円筒射影画像400が得られる。
図17は、天頂補正されている場合の第2回転変換について説明する。図16との相違点は、図17において、天頂補正されている点が異なっている。図17においても、球面座標系である正距円筒射影画像418の座標値から、3次元座標系の球面414上の座標値までの変換は、図16で示した天頂補正されていない場合と同じである。続いて、3次元直交座標系で球面414上から各軸に(X,Y,Z)=(x,y,z)の角度で天頂補正の回転を行って3次元直交座標系上の球面412の座標値へ変換し、さらに、球面座標系の座標値に変換すると、天頂補正された状態の正距円筒射影画像410が得られる。
このように、ステップS304では、処理対象画素の座標値に対し、座標補正を施した後、再び、入力された全天球画像の状態に戻すための逆の第2回転変換を施すよう構成されている。
再び図14を参照する。ステップS109では、全天球カメラ110は、画像補正部358により、図13(A)で示した補正テーブルを参照し、処理対象画素の座標値について、補正前画像の画素値を取得する。ステップS110では、全天球カメラ110は、処理対象画素の座標値について、取得した画素値に対し、指定の補正モードで所定の補正量の補正を適用する。ステップS109およびステップS110の画素値取得および画素値補正の基本的な処理は、図13を参照しながら説明済みであるため、ここでは、説明を省略する。
ここで、図22を参照して、画素値取得および画素値補正の応用的な処理として2種類の画像補正を行う場合について説明する。
図22(A)は、2つの補正テーブルを用いる場合の補正前画像の画像値取得および画素値補正を説明する。それぞれの補正テーブルは、図13(A)に示したフォーマットと同様であり、第1の補正テーブルの補正後画像の座標値は、第2補正テーブルの補正前画像の座標値と対応する。
画素値補正を行わない場合は、補正後画像の処理対象画素の画素値(v1)は、補正後画像の処理対象画素の座標値(θa,φa)に対して、第2補正テーブルおよび第1補正テーブルの順番で補正テーブルを参照して、補正前画像の該当座標値(θb,φb)を求め、補正前画像の該当座標値から取得した画素値(v0)となる。
画素値補正を行う場合は、まず、補正前画像から取得した画素値(v0)に対して第1補正テーブルの補正方法による補正を行って画素値(v2=f1m(v0,n1)、f1m()は、第1補正テーブルでの補正モード(m)での補正関数を表す。n1は、第1補正テーブルで与えられた補正量を表す。)を得る。更に、得られた画素値(v2)に対して、第2補正テーブルの補正方法による補正を行って得られた画素値(v3=f2m(v2,n2)、f2m()は、第2補正テーブルでの補正モード(m)での補正関数を表す。n2は、第2補正テーブルで与えられた補正量を表す。)が補正後画像の処理対象画素の画素値(v1)となる。図22(A)は、画像補正が第1の画像補正および第2の画像補正を含む場合において、第1の画像補正および第2の画像補正を直接重ねて適用する場合に対応する。
これに対し、図22(B)は、同じく2つの補正テーブルを用いるが、途中で一旦中間画像を生成する場合の補正前画像の画像値取得および画素値補正を説明する。この場合、まず、中間画像を作成する処理が実行される。基本的には図13(B)を参照して説明した方法と同様であり、中間画像の処理対象画素の座標値(θc,φc)に対して、第1補正テーブルを参照して補正前画像の該当座標値(θb,φb)を取得し、補正前画像の該当座標値から画素値(v0)を取得する。そして、取得した画素値(v0)に対して第1補正テーブルの補正方法による補正を行って画素値(v2=f1m(v0,n1))を得て、これを中間画像の画素値(v4)とする。ここで、中間画像の全ての画素に対して上述した第1補正テーブルに基づく処理を行って、一旦、中間画像が作成される。
続いて、補正後画像の作成についても同様にして、補正後画像の処理対象画素に対して、補正後画像の処理対象画素の座標値(θa,φa)から第2補正テーブルを参照して中間画像の該当する座標値(θc,θc)を取得し、取得した座標値の画素値(v4)を中間画像から取得する。画素値(v4)に対して第2補正テーブルの補正方法による補正を行って画素値(v3=f2m(v4,n2))を得て、これを補正後画像の処理対象画素の画素値(v1)とする。図22(B)は、画像補正が第1の画像補正および第2の画像補正を含む場合において、第1の画像補正を適用して得られる中間画像に対して第2の画像補正を適用する場合に対応する。
上述した説明では、補正テーブルが、参照先の1つの画素値を参照するものとして説明したが、処理対象画素の近傍画素も利用して画像補正を行うこともできる。図22(B)に示す中間画像を作成する方法は、そのような、処理対象画素の近傍画素も利用して画像補正を行う場合に有効であり、複数の画像補正を適用する場合に処理対象画素の近傍画素で前の補正処理がされた結果が必要な場合に好適に利用することができる。これに対して、図22(A)の中間画像を作成しない方法は、処理対象画素だけの計算でよい場合に好適に利用することができる。
再び図14を参照すると、すべての処理対象画素についての処理が完了し、ステップS102〜ステップS111のループを抜けると、ステップS112で、全天球カメラ110は、画像格納部270などに補正後の画像および補正テーブルを書き出し、ステップS113で本処理を終了する。
以下、図23および図24並びに図25〜図27を参照して、図14に示したステップS106の補正値算出について、2つの具体例をもって、より詳細に説明する。
<周辺光量補正の場合>
第1の具体例は、画像補正が周辺光量補正である場合であり、図23および図24を参照しながら、事後的な周辺光量補正について説明する。図23は、事後的な周辺光量補正処理を示すフローチャートである。図24(A)は、補正前後の正距円筒射影画像を示しており、補正前は、天頂補正なしの画像とし、補正後は、周辺光量補正と天頂補正を行った画像とする。なお、図23は、基本的な部分は、図14に示したフローチャートと共通しており、新規のステップを中心に説明を行う。
図23に示すステップS500では、全天球カメラ110は、周辺光量補正テーブルを参照し、補正値を算出する。ステップS500は、図14に示したステップS106の補正値算出処理に対応する。
図24を参照しながら周辺光量補正テーブルについて説明する。図24(B)は、2つの魚眼レンズ(20A、20B)で得られる部分画像を示しており、各部分画像における点OAおよび点OBは、対応する魚眼レンズの光軸中心に相当する座標値を示す。
ここで、一方の魚眼画像上の点Pの位置における周辺光量補正について説明する。一般的に点Pでの周辺光量落ちは、レンズの光軸中心OAからの点Pまでの距離(以下、像高)lに依存して生じる。図24(C)は、補正前の正距円筒射影画像に対して第1座標変換を適用した後の画像を示している。図24(C)で示す正距円筒射影画像において、その上端は、魚眼レンズ(20A)の光軸中心OAに相当し、その下端は、魚眼レンズ(20B)の光軸中心OBに相当する位置となる。また、図24において、点Pは、画像領域Aに帰属し、その像高は、画像上端から点Pまでの距離(l)に相当する。ここで、仮に、点Pが画像領域Bに帰属する場合は、画像下端からの距離が像高に相当することになる。
図24(D)は、レンズの像高と周辺光量補正量との関係を示す。図24(E)は、図24(D)に示すレンズの像高と周辺光量補正量との関係をテーブル化したものである。像高が大きくなるにつれて、周辺光量落ちが大きくなるため、周辺光量補正量は大きくなる。ここで、周辺光量補正量とは、補正前画素値に乗算するゲイン値である。図24(E)に示す、各像高における周辺光量補正量を設定したものを周辺光量補正テーブルとする。ここで、光学系によって特性が異なるため、魚眼レンズ(撮像素子)毎に周辺光量補正量が設定される。
図23を参照しながら、周辺光量補正の処理についてより詳細に説明する。図23に示すように、処理対象画素毎に処理が行われる。ステップS103では、第1座標変換が行われ、補正前画像で繋ぎ前画像判定がしやすいように座標配置が変更される。ステップS104では、繋ぎ前画像判定が行われ、処理対象画素が帰属する繋ぎ前画像(対応撮像手段)を判定する。
なお、周辺光量補正では、ステップS105の繋ぎ前画像の座標値取得は、必要ない。このため、周辺光量補正の種類に対応して、繋ぎ前画像の座標値が不要である旨の要否情報を予め保持しておき、周辺光量補正が選択された場合にその情報を取得して、ステップS105の繋ぎ前画像の座標値取得処理において、座標値取得要否判定(S401)で、ステップS402およびステップS403の処理をバイパスする。なお、説明する実施形態では、正距円筒射影画像上で距離lとして像高が求められるため、繋ぎ前画像の座標値の取得は不要としたが、処理対象画素に対応する繋ぎ前画像の座標値を取得して、繋ぎ前画像の座標値から、繋ぎ前画像における光軸中心との距離を計算し、像高を求めてもよい。また、像高だけでなく、画素位置自体を用いる補正を行う場合は、繋ぎ前画像の座標値は取得される。
ステップS500での周辺光量補正テーブル参照では、ステップS103で繋ぎ前画像判定で判定した繋ぎ前画像用の周辺光量補正テーブルを参照し、上述した処理対象画素の座標に対応する像高に応じて周辺光量補正量(補正値)を取得し、図13(A)に示した補正テーブルの補正方法に補正モードと補正量を設定する。補正モードは、乗算を示す「3」が設定される。また、補正テーブルの補正前画像の座標値には、補正後画像の座標値と同じ値を設定する。このように、判定された対応撮像手段および正距円筒射影画像上の座標または繋ぎ前画像の画素位置に基づいて、像高に応じた補正量で行われる。
ステップS106の座標値補正では、補正テーブルを参照して、処理対象画素の座標値に対する補正前画像の座標値を取得する。周辺光量補正では、上述したように、補正テーブルの補正前画像の座標値と補正後画像の座標値とは同じ値を設定しているため、座標値補正は、されない。周辺光量補正の場合は、ステップS106を省略することができる。
ステップS108の第2座標変換では、ステップS103の第1座標変換で回転させた状態を戻すとともに、保存されている天頂補正データを使用して、天頂補正の回転処理を行う。上述したように、補正前は、天頂補正なしの画像とし、補正後は、周辺光量補正と天頂補正を行った画像としているところ、このような場合は、第1座標変換とと第2座標変換とが全くの逆の変換とはならない。
ステップS108では、補正前画像の座標から画素値を取得し、ステップS500で設定した補正テーブルの補正方法に従って画素値補正する。ここでは、周辺光量補正の場合、補正テーブルの法制方法には乗算を示す「3」が設定されているので、ステップS108で取得した画素値に対し、補正量を乗算することで周辺光量補正が適用される。
<ローリングシャッタを考慮したブレ補正の場合>
第2の具体例は、画像補正が、ローリングシャッタを考慮したブレ補正である場合であり、図25〜図27を参照しながら、事後的なローリングシャッタを考慮したブレ補正について説明する。図25は、事後的なローリングシャッタを考慮したブレ補正処理を示すフローチャートである。図26(A)は、補正前後の正距円筒射影画像を示しており、補正前は天頂補正なしの画像とし、補正後はブレ補正のみ行い、天頂補正は、そのまま行わないものとする。なお、図25は、基本的な部分は、図14に示したフローチャートと共通しており、新規のステップを中心に説明を行う。
図25に示す処理は、動画に対する処理であり、ステップS600〜ステップS604のループでは、最終フレームまで、フレーム毎にループ内側の処理が実行される。ステップS601では、全天球カメラ110は、現在の処理対象のフレームの画像を、補正対象の画像として取得するとともに、そのフレームの区間に対応するジャイロデータを取得する。画像データに付属して、ジャイロデータがメタデータなどとして与えられており、ここでは、処理対象のフレームに対応するデータが取得されるものとする。
ステップS602では、全天球カメラ110は、ローリングシャッター(以下、RSと省略する)補正テーブルを算出する。ステップS602のRS補正テーブル算出処理について、図26および図27を参照して説明する。まず、ローリングシャッタを考慮したブレ補正の概要について、図26を参照して説明する。図26(B)は、ローリングシャッタの動作状態を示している。一般的な撮像素子130は、画像上端から画像下端へライン毎に画素値をスキャンしながらデータを読み出す。撮像素子130の画像上端が読み出される時間をT1とし、画像中間が読み出される時間をT5とし、画像下端が読み出される時間をT9とすると、撮像素子130から1フレームの画像が読み出される場合に、フレーム内で露光時間の時間差が発生し、画像下端と画像上端の間では(T9−T1)の時間差が発生する。
このフレームに対し、画像補正(例えばブレ補正)を行なおうとする場合、フレーム内のある1点の時間(例えば、中間のT5)を基準として補正を適用することが考えられる。しかしながら、その場合、指定した時間に該当する領域では正しく補正されたとしても、それ以外の領域では、上述した時間差により、正しく補正されない可能性がある。
例えば、図26(C)のような魚眼画像で、図26(B)のローリングシャッタによるスキャン時間T1,T5,T9が魚眼画像の画像上端、画像中間、画像下端に該当するとする。その場合、画像中間の時間T5で補正処理を行うと、画像上端T1、画像下端T9には補正残存(補正が不充分または過剰である部分)が発生する。さらに、この魚眼画像を、図26(D)に示すように正距円筒射影画像へ変換すると、補正残存は、複雑な状態となる。
続いて、図27を参照してRS補正テーブル算出について説明する。図27(A)は、ローリングシャッタによるブレ補正への影響を抑えるためのRS補正テーブルを示している。横軸の時間T1〜T9は、図26を参照して説明したローリングシャッタによるスキャン時間と対応している。縦軸の角度変動は、1フレーム内の一定周期でサンプリングされたジャイロセンサデータから算出しており、X、YおよびZの3軸の値となり、複数の撮像手段の姿勢変動を表す。図27に示す角度変動は、時間T5を基準とした値となっている。つまり、時間Tで角度変動が0となっている。図27(B)は、図27(A)の関係をテーブル化したものであり、ステップS603で参照されるRS補正テーブルである。なお、撮像素子の組付けなどに起因して補正値に違いが出る場合があるため、撮像素子毎にテーブルを準備している。また、RS補正テーブルは、フレーム単位で算出される。
図25を参照しながら、ローリングシャッタを考慮したブレ補正処理についてより詳細に説明する。
図25に示すように、処理対象画素毎に処理が行われる。ステップS103では、第1座標変換が行われ座標配置が変更される。ステップS104では、繋ぎ前画像判定が行われ、処理対象画素が帰属する繋ぎ前画像(対応撮像手段)を判定する。
ローリングシャッタを考慮したブレ補正では、ステップS105の繋ぎ前画像の座標値の取得が行われる。そのため、ローリングシャッタを考慮したブレ補正の種類に対しては、繋ぎ前画像の座標値の要否情報を予め保持しておき、ローリングシャッタを考慮したブレ補正の実施が選択された場合にその情報を取得し、繋ぎ前画像の座標値取得の処理を行い、処理対象画素に対応する繋ぎ前画像の座標値を取得する。
ステップS603のRS補正テーブル参照では、ステップS103の繋ぎ前画像判定で判定した繋ぎ前画像(魚眼レンズ)のRS補正テーブルを参照し、RS補正量(補正値)が取得される。ステップS105で取得された繋ぎ前画像の座標値から、RS補正テーブルにおける時間(ライン)が特定され、それに対応付けられた、フレーム内の露光時間の時間差に応じた補正量が取得される。図13で説明した補正テーブルの補正前画像の座標値には、補正後画像の座標値を3次元直交座標系の球面上の座標値に変換し、RS補正量(x、y、z補正値)で3軸(X,Y,Z)方向に回転変換し、球面座標系である正距円筒射影画像の座標値に戻した値を設定する。ここで、ローリングシャッタを考慮したブレ補正では、画素値補正を行わないため、補正テーブルの補正方法には、画素値が補正されない設定(例えば、補正モードとして加算を示す「1」および補正量0)を設定する。ステップS603のRS補正テーブル参照のステップが、ステップS106の補正値算出ステップに該当する。
ステップ107の座標値補正では、補正テーブルを使用して処理対象画素の座標値に対する補正前画像の座標値を取得する。補正テーブルの補正前画像の座標値は、ブレ補正では、補正後画像の座標値と異なっているため、座標値補正が行われる。ステップS108の第2座標変換では、ステップS103の第1座標変換で回転させた状態を戻す処理を行う。ステップS109の画素値取得では、補正前画像の画素値を取得し、ステップS110では、画素値補正で取得した画素値を補正テーブルの補正方法に従って補正し、補正後の画素値とする。ただし、ローリングシャッタを考慮したブレ補正では、補正テーブルの補正方法に画素値が補正されない設定をしているため、ステップS109で取得された補正前画像の画素値が、そのまま補正後画像の画素値となる。ローリングシャッタを考慮したブレ補正において、ステップS109は、省略されてもよい。
上述したローリングシャッタを考慮したブレ補正を全天球画像の動画に適用することにより、フレーム全体のブレが抑えられた全天球画像の動画を得ることが可能となる。
<変換情報>
図14における第1座標変換(S103)および第2座標変換(S108)では、繋ぎ位置が球面の赤道面上となるように座標変換するために、回転軸、回転角度および天頂補正データなどの変換情報が必要となる。このような変換情報は、利用者が自ら算出するのは困難である。また、全天球カメラ110の型番や製造元によっても値が異なり得る。このため、全天球カメラ110で撮影時に予め変換情報を記録しておくことで、利用者に手間を掛けることなく、事後的な画像補正処理を行うことができる。
図28は、変換情報のフォーマットの一例を示す。変換情報は、図12で示した繋ぎテーブルと共に全天球カメラ110で撮影時に画像に関連付けて記録されることが望ましい。また、図12の繋ぎテーブルのテーブルで第1座標変換の処理を施した座標値を補正後画像の座標値に設定するようにすれば、変換情報がなくても座標変換することが可能である。
<補正後画像への補正テーブル添付>
図29は、本実施形態における画像補正処理に関連するテーブル依存関係を説明する図である。撮影時に繋ぎ後画像(補正前画像)500のメタデータなどとして繋ぎテーブル502が保存されている。魚眼画像504への対応関係を保持する繋ぎテーブル502は、補正値算出のために使用され、算出された補正値は、補正テーブル512に設定される。これにより、補正前画像510から、補正テーブル512に基づいて画像補正を適用し、補正後画像514を得ることができる。
補正後画像を再度画像補正したい場合には、前回の補正処理によって最初の座標値から変更されていて適切に補正できない場合も想定される。そのような不具合を防止するために、好ましい実施形態では、補正後画像514に関連付けて、補正で使用した補正テーブル512を繋ぎテーブル502と共に保存する。
図30は、再度画像補正する場合のテーブル依存関係を示す。図30に示すテーブル依存関係は、図29と異なっている。図30の場合は、繋ぎテーブル502を参照する前に前回の補正後画像(今回の画像補正対象画像(繋ぎ後画像))514と共に保存した補正テーブル512を参照するようにする。そして、補正テーブル512および繋ぎテーブル502を参照して算出した補正値を、今回の補正テーブル522に設定することで、補正前画像520から画像補正して補正後画像524が得られる。これにより、前回の補正処理(主に、座標値補正)による影響をなくして補正値を算出することができる。
図31は、本実施形態における事後的な画像補正処理の流れを総括して説明する。画像補正処においては、(1)参照座標算出および(2)画素値補正の順に処理が実行される。図31において、矢印は、参照先を表す。上記(2)の画素値補正は、上記(1)の参照座標算出によって得られた座標値の画素値を補正前画像から取得し、取得した画素値に対し適用する。座標値補正しない場合は、上記(1)の参照座標算出は、必ずしも要するものではなく、補正後画像の処理対象画素の座標値を使用してもよい。
第1座標変換および第2座標変換を適用し、画像領域Aが上半分、画像領域Bが下半分となった状態に一旦変換するのは、図12(A)に示す繋ぎテーブルが、該繋ぎテーブルでマッピングすると画像領域Aが上半分、画像領域Bが下半分となり、繋ぎ位置が赤道上となるように構成されているためである。繋ぎ前画像と、繋ぎ後画像との関係は、図12(A)で示す繋ぎテーブルで決定しているため、繋ぎ後画像の状態を揃えておく方が座標値補正の計算がしやすいためである。なお、繋ぎテーブルが、異なるマッピングとなるテーブルであってもよいが、複雑性を低減する観点からは、第1座標変換および第2座標変換を適用する前提で、上述したような繋ぎ位置が赤道上となるように構成された繋ぎテーブルを画像データに関連付けて記憶しておくことが好ましい。
以上説明したように、上述した実施形態によれば、複数の撮像手段を用いて撮像された画像に対して、複数の撮像手段に応じた画像補正技術を適用することが可能な画像処理装置、画像処理方法、撮像装置、画像処理システムおよびプログラムを提供することができる。
上述した実施形態では、繋ぎ合わされた画像(静止画または動画)の座標値から、撮影された撮像手段(撮像素子および光学系の組)を判定し、判定した撮像手段に応じて画像補正処理が行われる。これにより、複数の撮像手段で撮像され、繋ぎ合わされた状態の静止画または動画に対して、撮像手段に依存する画像補正技術を適用できることが可能となる。特に、過去に保存された静止画または動画に対して最新の画像補正技術を適用することが可能もなる。また、繋ぎ合わせ前の画像を別途保持する必要もなく、ストレージの容量の増大を防止することができ、コストを削減することができる。
以上、全天球カメラ110を画像処理装置および画像処理システムの一例として、全天球カメラ110上で事後的な画像補正処理を行う場合について説明した。しかしながら、事後的に画像補正処理を行う画像処理装置および画像処理システムの構成は、上述した構成に限定されるものではない。
図2(B)は、他の実施形態による画像処理装置および画像処理システムとしてのユーザ端末装置150のハードウェア構成を示す。図2(B)に示すユーザ端末装置150は、CPU152と、RAM154と、HDD(Hard Disk Drive)156と、入力装置158と、外部ストレージ160と、ディスプレイ162と、無線モジュール164と、USBコネクタ166とを含み構成される。
CPU152は、ユーザ端末装置150の各部の動作および全体動作を制御する。RAM154は、CPU152の作業領域を提供する。HDD156は、CPU152が解読可能なコードで記述された、オペレーティング・システム、本実施形態による上述した画像補正処理部350の処理を担うアプリケーションなどのプログラムを格納する。
入力装置158は、マウス、キーボード、タッチパッド、タッチスクリーンなどの入力装置であり、ユーザ・インタフェースを提供する。外部ストレージ160は、メモリカードスロットなどに装着された着脱可能な記録媒体であり、動画形式の画像データや静止画データなどの各種データを記録する。無線モジュール164は、全天球カメラ110などの外部機器との無線LAN通信の接続を確立する。USBコネクタ166は、全天球カメラ110などの外部機器とのUSB接続を確立する。なお、一例として、無線モジュール164およびUSBコネクタ166を示すが、特定の規格に限定されるものではなく、Bluetooth(登録商標)やワイヤレスUSBなどの他の無線通信、有線LAN(Local Area Network)などの有線通信で外部機器と接続されてもよい。
ディスプレイ162は、ユーザが操作するための操作画面の表示、撮影前または撮影中の全天球カメラ110による撮像画像のモニタ画像の表示、保存された動画や静止画の再生、閲覧のための表示を行う。ディスプレイ162および入力装置158により、ユーザは、操作画面を介して全天球カメラ110に対する撮影指示や各種設定変更を行うことが可能となる。
ユーザ端末装置150に電源が投入され電源がオン状態になると、ROMやHDD156からプログラムが読み出され、RAM154にロードされる。CPU152は、RAM154に読み込まれたプログラムに従って、装置各部の動作を制御するとともに、制御に必要なデータをメモリ上に一時的に保存する。これにより、上述した画像補正処理部350およびその処理が実現される。
また、他の実施形態では、上述した部分画像取得処理210を除く画像処理を、ユーザ端末装置150を含む1以上の外部のパーソナル・コンピュータやサーバなどの画像処理装置上で分散実装してもよい。例えば、特定の実施形態では、画像処理220〜280を、画像処理装置としてのユーザ端末装置150上で実行することができる。上述した画像処理280を、ユーザ端末装置150を含む1以上の外部のパーソナル・コンピュータやサーバなどの画像処理装置上で分散実装してもよい。
さらに、上記実施形態では、天頂補正としては、鉛直方向を基準として傾き角を求めるものするが、鉛直方向以外で、たとえば水平方向やその他所望の方向を基準方向として設定し、その基準方向に対する全天球カメラ110や撮像素子130A、130B等所定の物体との傾きに基づいて画像の傾きを修正するようにしてもよい。また、上記実施形態では、傾きの検出に加速度センサ及びジャイロセンサを用いたが、加速度センサと地磁気センサ、ジャイロセンサと地磁気センサ、加速度センサとジャイロセンサと地磁気センサの組合せなどのその他の傾きセンサにより、全天球カメラ110や全天球カメラ110に固定された撮像素子130A、130B、センサ自体等の傾きを検出するようにしてもよい。その場合に、天頂補正に加えて、鉛直方向周りの回転を補正する回転補正を適用することもできる。
なお、上記機能部は、アセンブラ、C、C++、C#、Java(登録商標)などのレガシープログラミング言語やオブジェクト指向プログラミング言語などで記述されたコンピュータ実行可能なプログラムにより実現でき、ROM、EEPROM、EPROM、フラッシュメモリ、フレキシブルディスク、CD−ROM、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、ブルーレイディスク、SDカード、MOなど装置可読な記録媒体に格納して、あるいは電気通信回線を通じて頒布することができる。また、上記機能部の一部または全部は、例えばフィールド・プログラマブル・ゲート・アレイ(FPGA)などのプログラマブル・デバイス(PD)上に実装することができ、あるいはASIC(特定用途向集積)として実装することができ、上記機能部をPD上に実現するためにPDにダウンロードする回路構成データ(ビットストリームデータ)、回路構成データを生成するためのHDL(Hardware Description Language)、VHDL(Very High Speed Integrated Circuits Hardware Description Language)、Verilog−HDLなどにより記述されたデータとして記録媒体により配布することができる。
これまで本発明の実施形態について説明してきたが、本発明の実施形態は上述した実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。