以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。
<実施例1>
図1は、本実施形態におけるネットワークカメラシステムのブロック図である。
本実施形態にかかるネットワークカメラシステムでは、カメラ1、ビューワクライアント2(以下クライアント2)、パノラマ生成クライアント3(以下クライアント3)がネットワーク4を介して接続されている。カメラ1、クライアント2、クライアント3は、それぞれ、ネットワーク4に複数接続するができる。
ネットワーク4は、カメラ制御信号や、カメラ1による撮像画像を通信可能なインターネットやイントラネット等のネットワークである。本実施形態ではネットワークプロトコルとしてTCP/IP(またはUDP/IP)プロトコルを仮定するがこれに限られない。また、本実施形態では、カメラ1、クライアント2、クライアント3には、それぞれ異なるIPアドレスが割り当てられるものとする。
カメラ1は、後述のクライアント2、3から画像要求コマンドを受信すると、コマンドを送信したクライアントに対して撮像画像をネットワーク4を介して配信する撮像装置である。また、カメラ1は、クライアント2、3からカメラ制御コマンドを受信すると、当該カメラ制御コマンドに応じた各種カメラ制御(例えばパン・チルト・ズーム制御)を実行する。
クライアント2は、カメラ1に割り当てられているIPアドレスを指定して、カメラ1と接続を行う。クライアント2は、カメラ1に対して画像要求コマンドを送信する。そしてクライアント2は、画像要求コマンドの応答として、カメラ1から撮像画像を受信し、受信した撮像画像を表示部26に表示させる。
またクライアント2は、カメラ1の撮像方向を変更させるためのカメラ制御コマンドをカメラ1に送信する。このようにして、クライアント2は変更後の撮像方向においてカメラ1が撮像した撮像画像を受信して表示部26に表示させることができる。
クライアント3は、クライアント2と同様に、カメラ1に割り当てられているIPアドレスを指定して、カメラ1と接続を行う。またクライアント3は、クライアント2と同様に、カメラ1に対して画像要求コマンドを送信する。そしてクライアント3は、画像要求コマンドの応答として、カメラ1から撮像画像を受信する。
またクライアント3は、カメラ1から受信した撮像画像を用いて、パノラマ画像を生成する画像処理装置である。本実施例では、クライアント3がパノラマ画像を生成する場合について説明するが、カメラ1が後述のパノラマ生成処理を行うこととしてもよい。
またクライアント3は、受信した撮像画像を表示部36に表示させる。なお、本形態におけるパノラマ画像とは、1回の撮像で得られる撮像画像よりも、大きさ(例えば、垂直画角又は水平画角の少なくとも一方)が大きい画像である。
本実施形態のクライアント3は、カメラ1に対してパン、チルト角度を指定して所望の位置へカメラ1を移動させ、撮像指示を出す。カメラ1で撮像した映像は通信制御部11によりクライアント3へ送信される。クライアント3は受信した撮像画像を基にパノラマ画像を作成し、作成したパノラマ画像をカメラ1へ送信する。カメラ1では受信したパノラマ画像を記憶部18に記憶する。カメラ1はクライアント2からの要求に応じて、記憶部18に記憶されたパノラマ画像をクライアント2へ送信する。
次に、カメラ1の構成について図1を用いて説明する。レンズ14は撮像部15に被写体の像を結像する。撮像部15は、撮像画像を生成する。撮像部15は、生成した撮像画像を圧縮部16に入力する。本実施形態では、撮像部15は、レンズ14から入力された映像を撮像部15において撮像した撮像画像の読み出し方を切り替えて、異なる画角の撮像画像を生成することができる。本実施形態では、撮像部15が、アスペクト比の異なる撮像画像を生成できる場合について説明する。例えば、本実施形態の撮像部15は、アスペクト比が4:3の撮像画像と、アスペクト比が16:9の撮像画像を撮像することができる。
このようにして、撮像部15は、第1の画角と、水平画角と垂直画角のうち少なくとも一方の方向の画角が第1の画角よりも狭い第2の画角とで撮像画像を撮像可能である。
撮像部15が生成する、アスペクト比が異なる画像について図3を用いて説明する。図3Aは水平画角80度、垂直画角45度(アスペクト比16:9)で撮像した画像である。図3Bは水平画角60度、垂直画角45度(アスペクト比4:3)撮像した画像である。図3Aに示した撮像画像から、垂直画角を保って図3Bに示した撮像画像を生成する場合、図3Aに示した撮像画像の左右を切り落とすことで図3Bの画像が生成される。このようにして、第1の画角と、少なくとも一方の方向の画角が第1の画角よりも狭い第2の画角とで撮像画像を撮像可能である。
圧縮部16は前記入力された撮像画像を、クライアント配信に適した画像に符号化圧縮し通信制御部11へ入力する。本実施形態の圧縮部16は、撮像部15からの画像信号をA/D変換した後、JPEGで圧縮する。ただし、他の圧縮形式を用いてもよい。
通信制御部11は、圧縮部16が圧縮した撮像画像をネットワーク4を介して画像要求コマンドの送信元クライアントに送信する。
記憶部18は、後述のクライアント3によって生成されたパノラマ画像やカメラの撮像方向、撮像パラメータ等の各種設定値およびデータを保持する。本実施形態における撮像パラメータには、例えば、撮像画像を撮像するためのカメラ1のフォーカス、ホワイトバランス、露出等のパラメータが含まれる。
解釈部17は、クライアント2、3からのコマンドを解釈して、カメラ1の各部の制御を行う。例えば、解釈部17は、通信制御部11によるカメラ制御コマンドの受信を駆動制御部12に通知する。通知を受けた駆動制御部12は、駆動部13の向きやレンズ14のズーム倍率などを制御する。
駆動部13は、カメラ1を駆動してカメラ1の撮像方向を変更させる。本実施形態において、駆動部13は、基準の撮像方向からパン、チルト方向にカメラ1の撮像方向を変更することができる。駆動部13は、上述の第2の画角で撮像方向を一方の画角の方向において変更して撮像可能な範囲の一方の端部から他方の端部までの角度が360度以上になるように、カメラ1の撮像方向を変更することができる。
次に、クライアント2の構成について図1を用いて説明する。
通信制御部21は、画像要求コマンド、カメラ制御コマンドをカメラ1へ送信する。また通信制御部21は、カメラ1が撮像した撮像画像、パノラマ画像、各種カメラ制御の結果を取得する。
また、表示制御部24は、画像伸長部25で展開された撮像画像およびパノラマ画像を表示部26に表示させる。また表示制御部24はグラフィカルユーザインタフェース(GUI)を表示部26に表示させる。操作入力部23は、ユーザのマウスやキーボードによるGUI操作を受け付ける。あるいはタッチパネル操作により、GUI操作を受け付けることとしてもよい。
ユーザのGUI操作とは、例えば、カメラ1に対して撮像方向をパン方向、又は、チルト方向に変更させる制御や、ズーム制御を指示するための操作である。例えばユーザは、表示部26に表示されたパノラマ画像上の領域をマウスクリックやタッチ操作によって指定して、指定した領域に対応する撮像領域が撮像されるようにカメラ1の撮像方向を指定することができる。
例えば、カメラ1のパン・チルト位置、及び、画角を表す枠をパノラマ画像上で移動させたり、枠の大きさを変更したりすることにより、パノラマ画像上の領域を指定することができる。
コマンド生成部22は、操作入力部23が受け付けたGUI操作に応じて各種カメラ制御コマンドを生成する。生成されたカメラ制御コマンドは通信制御部21からカメラ1に送信される。
次に、画像処理装置であるクライアント3の構成について図1を用いて説明する。通信制御部31、表示制御部34、画像伸長部35、表示部36は、それぞれクライアント2の通信制御部21、表示制御部24、画像伸長部25、表示部26と同様の機能を有する。
操作部33は、クライアント2の操作入力部23に入力される操作に加えて、カメラ1にパノラマ画像の生成要求(以下、「パノラマ生成要求」)を受け付ける。パノラマ生成要求には、例えば、パノラマ画像を生成する撮像領域の範囲の指定が含まれる。
算出部37は、パノラマ生成要求に応じて、指定された範囲のパノラマ画像を生成するために用いる撮像画像を撮像するための撮像方向を算出し、算出結果をコマンド生成部32に入力する。
コマンド生成部32は、算出部37から入力されたパン・チルト角度に応じたカメラ制御コマンドを生成し、通信制御部31を介してカメラ1へ送信する。このカメラ制御コマンドを受信したカメラ1の駆動制御部12は、カメラ1の撮像方向をカメラ制御コマンドに応じたパン・チルト角度へ変更する。変更後の撮像方向において撮像され、圧縮部16によって符号化圧縮された撮像画像は、画像要求コマンドに応じてクライアント3へ送信される。
パノラマ画像生成部38は、カメラ1から受信した複数の撮像画像からパノラマ画像を生成する。すなわち、パノラマ画像生成部38は、画像伸長部35で伸長された複数の撮像画像の座標値を後述する変換処理(射影変換)で変換してつなぎ合わせることでパノラマ画像を生成する。パノラマ画像生成部38におけるパノラマ画像の生成方法については、詳細を後述する。
通信制御部31は、パノラマ生成部38が生成したパノラマ画像をカメラ1に送信する。カメラ1へ送信されたパノラマ画像はカメラ1の記憶部18に記憶される。カメラ1は、クライアント(例えば、クライアント2)からのパノラマ画像の送信要求に応じて、記憶部18に記憶したパノラマ画像を当該送信要求を行ったクライアントに送信する。
次に本実施形態のクライアント3におけるパノラマ画像の生成処理について図8を用いて説明する。
図8には2枚のパノラマ画像が示されている。図8上段のパノラマ画像800は、第1の画角でカメラ1の撮像方向を変更して撮像可能な範囲に対応する第1のパノラマ画像である。図8下段のパノラマ画像801は、カメラ1の撮像部15が、垂直画角と水平画角のうち少なくとも一方の方向の画角が第1の画角よりも狭い第2の画角でカメラ1の撮像方向を変更して撮像可能な範囲に対応する第2のパノラマ画像である。
本実施形態では、例として、図5に示すように、カメラ1の撮像方向を一方の端部から他方の端部までカメラ1を中心としてパン方向(水平方向)に340度回転させることができる場合について説明する。本実施形態に係るカメラ1は、図5に示すように、基準となる撮像方向(以下、「基準位置」)を0度として、±170度の範囲で撮像方向を変更することができる。
また、第1の画角は図3Aに示した例と同様に水平画角が80度であり、垂直画角が45度であるものとする。また、第2の画角は、図3Bに示した例と同様に、水平画角が60度であり、垂直画角が45度であるものとする。
カメラ1が第1の画角で撮像を行う場合であって、基準位置からパン方向に+170度撮像方向を変更した位置で撮像を行う場合、基準位置からパン方向に+210度の範囲まで撮像することができる。第1の画角の水平画角は80度であり、撮像中心から左右に40度ずつ撮影することができるため、パン角+170度に、水平画角の半分の角度を加えた+210度の撮像範囲まで撮像することができる。
同様にして、カメラ1が第1の画角で撮像を行う場合であって、基準位置からパン方向に−170度撮像方向を変更した位置で撮像を行う場合、基準位置からパン方向に−210度の範囲まで撮像することができる。パン角−170度から更に、水平画角の半分の角度を引いた−210度の撮像範囲まで撮像することができる。
このように、第1の画角でカメラ1の撮像方向を変更して撮像可能な範囲の一方の端から他方の端までの水平画角は420度となる。これは、基準位置からプラス方向に撮像可能な範囲(+210度)の絶対値と基準位置からマイナス方向に撮像可能な範囲(−210度)の絶対値の和である。
カメラ1が第1の画角で撮像を行う場合と同様にして、カメラ1は第2の画角で撮像を行う場合、撮像範囲の一方の端から他方の端までの水平画角は400度となる。
図8に示す通り、第1のパノラマ画像800と第2のパノラマ画像801を比較すると、第2のパノラマ画像801は、第1のパノラマ画像800に対して左右の端が水平画角10度分ずつ短い。図8では、第1のパノラマ画像と第2のパノラマ画像の差分の領域であって右端の領域を(1)´、左端の領域を(2)´として示す。
領域(1)´及び領域(2)´は、撮像手段の撮像方向を水平画角方向において変更可能な一方の端部において第1の画角で撮像される撮像領域であって、第2の画角で撮像されない撮像領域である。
ここで、(1)´の撮像領域は図8中の(1)の撮像領域と対応する。ここで撮像領域が対応するとは、カメラ1から同じ方向に向かって撮影された領域であることを示す。
例えば、(1)´の領域が基準位置からパン方向に+200度〜+210度の範囲の領域であるとすると、(1)´の領域は、基準位置からパン方向に−150度〜−160度の範囲の領域である(1)の領域と対応する。同様に、(2)´の領域が基準位置からパン方向に−200度〜−210度の範囲の領域であるとすると、(2)´の領域は、基準位置からパン方向に+150度〜+160度の範囲の領域である(2)の領域と対応する。
(1)の領域は、第2のパノラマ画像のうち(1)´側の端部から水平画角方向に変更可能な他方の端部((2)´側の端部)に向かって撮像方向を変更して、第2の画角で撮像される領域である。(2)の領域は、第2のパノラマ画像のうち(2)´側の端部から水平画角方向に変更可能な他方の端部((1)´側の端部)に向かって撮像方向を変更して、第2の画角で撮像される領域である。
本実施形態では、第2のパノラマ画像に対して、(1)´の領域を(1)の領域の画像で補い、(2)´の領域を(2)の領域の画像で補って、第1のパノラマ画像に対応する大きさの第3のパノラマ画像を生成する。
このようにして第1の画角でカメラ1の撮像方向を変更して撮像可能な範囲に対応する第1のパノラマ画像に水平画角方向の長さが対応する第3のパノラマ画像を生成することができる。
第2のパノラマ画像の生成処理について図2のフローチャートを用いて説明する。図2の処理は、画像処理装置であるクライアント3の操作部33で、パノラマ画像の生成を指示する操作が入力されたことに応じて開始される。
ステップS101において、コマンド生成部32は、パノラマ画像を生成する際に使用する撮像パラメータをカメラ1に対して設定するためのコマンドを生成する。本実施形態における撮像パラメータには、例えば、パノラマ画像を生成するために用いられる撮像画像を撮像するための、カメラ1のフォーカス、ホワイトバランス、露出のパラメータが含まれる。
また本実施形態における撮像パラメータには、パノラマ画像を生成するために用いられる撮像画像を撮像するために、カメラ1の撮像方向をパン方向に動かす範囲が含まれる。さらに本実施形態における撮像パラメータには、パノラマ画像を生成するために用いられる撮像画像を撮像するために、カメラ1の撮像方向をチルト方向に動かす範囲が含まれる。
パノラマ画像を生成するために用いられる撮像画像を撮像するためにカメラ1の撮像方向をパン方向、あるいは、チルト方向に動かす範囲は、ユーザのGUI操作によって操作部33から入力される、パノラマ画像を生成する範囲の指定に基づいて特定される。
なお、撮像パラメータはこれらに限らず、パノラマ画像を生成するために用いられる撮像画像の画質設定を行うための他のパラメータを含めることができる。本実施形態において、パノラマ生成に用いられる撮像画像のアスペクト比は、生成処理開始時に、カメラ1に設定されているアスペクト比が用いられるものとする。以下では、カメラ1が第1のアスペクト比である第1の画角と、水平画角と垂直画角の少なくとも一方の方向の画角が第1の画角よりも狭い第2のアスペクト比の第2の画角をカメラ1が撮像可能な場合について説明する。また、以下のパノラマ生成処理の開始時に、第2のアスペクト比の第2の画角がカメラ1に設定されている場合について説明する。
ステップS102において、算出部37は操作部33において入力されたパノラマ画像を生成する範囲の指定に応じて、パノラマ画像を生成するために用いる複数の撮像画像をそれぞれ撮像するための撮像方向(パン・チルト角度)を算出する。このようにして、パノラマ画像を生成するために用いる撮像画像の撮像方向についての位置情報を取得する。
ステップS103において、コマンド生成部32は、ステップS102で取得した撮像方向にカメラ1の撮像方向を制御するためのカメラ制御コマンドを生成して、カメラ1に送信する。このようにして、カメラ1の撮像方向を指定する。カメラ1の駆動制御部12は受信したコマンドに応じて、駆動部13を駆動させカメラ1の撮像方向を変更する。
ステップS103において送信したカメラ制御コマンドに応じた撮像方向にカメラ1の撮像方向が制御されたことを示す通知を通信制御部31がカメラ1から受信すると、ステップS104において、コマンド生成部32は画像要求コマンドを送信する。クライアント3は、カメラ1に画像要求コマンドを送信することにより、撮像を実行させる。
カメラ1は、画像要求コマンドの受信に応じて、現在のパン・チルト角度で撮像を行う。これによりパノラマ画像を生成するために用いられる複数の撮像画像のうちの1枚が得られる。このようにして撮像された撮像画像は、撮像部15に入力されたのち、圧縮部16で圧縮され、通信制御部11を介してクライアント3へ送信される。
ステップS105において、基準位置からパン方向又はチルト方向に±180度を超える範囲の画像が、現在撮像している撮像画像の画角内に含まれているか判定する。本実施形態では、基準位置からパン方向に±180度を超える範囲の画像が、現在撮像している撮像画像の画角内に含まれているか判定する場合について説明する。
ステップS105の判定は、例えば、基準位置を0度とした場合の現在の撮像方向のパン角度と、カメラ1の撮像する画像の水平画角とを用いて行うことができる。すなわち、現在のパン角度Θpの絶対値と、水平画角Θhの1/2の絶対値とを加算した値が、180を超えている場合、基準位置からパン方向に±180度を超える範囲の画像が、現在撮像している撮像画像の画角内に含まれていると判定することができる。
基準位置からパン方向に±180度を超える範囲の画像が、現在撮像している撮像画像の画角内に含まれる場合(ステップS105においてYesの場合)、ステップS106に進む。
ステップS106において、パノラマ画像生成部38は、±180度を超えた部分の画像を一時保存する。
一方、基準位置からパン方向に±180度を超える範囲の画像が、現在撮像している撮像画像の画角内に含まれない場合(ステップS105においてNoの場合)、ステップS107に進む。
ステップS107において、コマンド生成部32は、パノラマ画像の生成に用いる撮像画像を全て取得したか否かを判定する。
パノラマ画像の生成に用いる撮像画像を全て取得したと判定した場合(S107においてYesの場合)はステップS108へ進む。
パノラマ画像の生成に用いる撮像画像が全て取得されていない判定した場合(S107においてNoの場合)はステップS102に戻る。
S102に戻った場合、コマンド生成部32は、まだ撮像していない位置へのパン・チルト角度を算出してカメラ制御コマンドをカメラ1に送信する。そして、上述のステップS103からステップS107の処理を行う。ステップS102からステップS107の処理を繰り返すことにより、クライアント3はパノラマ画像の生成に用いる全ての撮像画像を取得することができる。
なおステップS107において、ユーザからパノラマ画像の生成を中断する指示がなされた場合には、パノラマ画像の生成に用いる撮像画像が全て取得されていない判定した場合であっても、ステップS108へ進むこととしてもよい。
ステップS108において、コマンド生成部32は、パノラマ画像の生成を中断する指示が入力されたか否かを判定する。S108において、撮像中断による指示が操作部33から入力されて中断された場合、ステップS113に進み、撮像中の画像を全て破棄して終了する。全ての画像が撮像終了したと判断された場合にはステップS109へ進む。
ステップS109において、パノラマ画像生成部38はステップS106で一時的に保存されていたパン角度±180度を超えた部分を含む画像を、パノラマ画像に追加する。パノラマ画像に画像を追加する方法については後述する。画像が追加されたパノラマ画像は表示制御部34を介して表示部36に表示される。
ステップS110において、表示部36に表示されたパノラマ画像の一部だけを再撮像することを指示することができる。例えば、ユーザがクライアント3のGUIを操作して、パノラマ画像の一部の画像を再度撮像する指示を入力することができる。ユーザは、再撮像を行う範囲と、再撮像実行命令をクライアント3に入力する。クライアント3は入力された範囲の情報と再撮像実行命令を、操作部33を介してコマンド生成部32に入力する。このようにして、パノラマ画像生成部38が生成したパノラマ画像における第1の領域を指定する。そして第1の領域に対応する撮像領域を撮像する指示をカメラ1に対して行う。
あるいは、クライアント3がパノラマ画像中に人体の画像が存在することを示す情報、或いは、パノラマ画像中に動体が存在することを示す情報をクライアント3が取得して、当該取得した情報に応じてカメラ1に対して再撮像を指示することとしてもよい。クライアント3はこれらの情報をカメラ1から取得することができる。カメラ1は、撮像画像中に人体や動体を検出した場合、人体や動体を検出した撮像画像を撮像した撮像方向や画角等をクライアント3に通知する。クライアント3は、通知された情報が示す撮像方向や画角に対応するパノラマ画像上の領域の画像をカメラ1に再撮像させる再撮像指示をコマンド生成部32に入力することができる。
再撮像指示がコマンド生成部32に入力されると、ステップS103へ戻る。そして、コマンド生成部32は指示された位置のパン・チルト角度へのカメラの撮像方向を変更させるためのカメラ制御コマンドを送信する。送信されたカメラ制御コマンドに応じた撮像方向にカメラ1の撮像方向が制御されたことを示す通知を通信制御部31が受信すると、コマンド生成部32は撮像コマンドを送信し、カメラ1に再撮像を実行させる。再撮像前に生成したパノラマ画像のうち、再撮像された部分(再撮像領域)を更新した新たなパノラマ画像を生成する。
ステップS109において追加した映像に対応する領域が再撮像された場合、映像を追加する前のパノラマ画像上の再撮像領域と、追加した映像上の再撮像領域の2か所が更新される。図8に示した例では、(1)の領域が再撮像された場合、(1)の領域と(1)´の領域の画像が更新される。
このようにして、パノラマ画像生成部38は、カメラ1が再撮像指示に応じて撮像した撮像画像を用いて、パノラマ画像における第1の領域の画像を更新した新たなパノラマ画像を生成する。
ステップS110で操作部33から撮像指示ではない入力が行われた場合はステップS111へ進み、画像保存して終了するか否かを確認する。操作部33から画像保存を指示された場合は、S112に進み、パノラマ画像を通信制御部31より完成したパノラマ画像をカメラ1へ送信する。カメラ1は通信制御部11で受けたパノラマ画像を記憶部18に保存する。
ステップS111で画像保存しないで終了する指示が操作部33から行われた場合、ステップS113に進み、パノラマ画像生成部で作成したパノラマ画像を破棄し終了する。パノラマ画像を破棄した場合、カメラ1の記憶部18に既にパノラマ画像が保存されていれば更新されない。
次に、図2のステップ109において基準位置から±180度を超えた撮像範囲の情報を記憶する処理について図4を用いて説明する。
クライアント3の通信制御部31は、ステップS201でカメラ1に対して撮像画角及びアスペクト比の情報を取得するための制御コマンドを送信する。
カメラ1は通信制御部11で受信した制御コマンドを解釈部17で解釈すると、圧縮部16で圧縮している画像のサイズ及びアスペクト比と画角情報を取得する。さらに、カメラ1の駆動制御部12は現在の撮像方向を取得する。そして、取得した画像サイズ、アスペクト比、及び、撮像方向を通信制御部11からクライアント3に送信する。
クライアント3は通信制御部31で受信した情報を、コマンド生成部32を介して算出部37に渡す。
ステップS202において、受信した返答情報を基に、算出部37で、パン角度とチルト角度、画角情報、アスペクト比情報から現在の画像の撮像範囲を算出する。撮像範囲がパン角度の±180度を超えているか否かを判断する。ステップS105で説明したように水平画角の計算には、撮像画像の画角とパン角度を用い計算することができる。撮像範囲がパン角度を超えていれば、ステップS203に進む。
ステップS203においてパノラマ画像の端位置に補う画像の大きさを計算する。図5にアスペクト比4:3で水平画角が60度である場合の撮像画像の一例を示す。本実施の形態では、パンの可動限界位置は±170度とする。
パン角度+170度の場合は51の細点線枠内に示される画像が撮像範囲となる。撮像範囲の中心が+170度であり撮像画像左端は+180度を超えている。よって中心より+10度左から画像左端までの水平画角20度分の領域52が補う対象となる。
パン角度−170度の場合は53の太点線枠内に示される画像が撮像範囲となる。撮像範囲の中心が−170度であるため、撮像画像右端は−180度を超えている。従って、中心より−10度右から画像右端までの水平画角20度分の領域54が補う対象となる。
画角サイズは、アスペクト比による水平画角の差を計算することで得ることができる。図3で示したように16:9と4:3では水平画角で20度の差があり、パンの可動限界位置である端部分では、画像の半分が対象となるため10度の差が出てくる。つまり4:3と16:9の画角差は、端部分において±10度であり、補間すべき映像データは±180度から超えた部分に更に10度超えた部分の画像となる。+180度の場合は補う画像領域としては55の部分であり、−180度の場合は補う領域は56の部分となる。
ステップS202の計算で、パン角度が±180度を超えていなければステップS204に進む。画像を補うことは不要となるため補う画像のサイズは0に設定される。
ステップS205において補うサイズをパノラマ画像生成部38に一時的に保存しておき、ステップS109においてコピーする際に、パノラマ画像の両端に付与することになる。両端への付与の際には、アスペクト比の水平画角による画角の差を埋めるために、保存された領域情報から算出された画像領域を、一時保存されている画像の中から抽出する。パノラマ画像生成部38で生成されたパノラマ画像は圧縮部39で圧縮し、表示制御部34を介して表示部36に表示される。
次に、複数の撮像画像からパノラマ画像を生成するために用いる射影変換について、図6を用いて説明する。
図6は、撮像画像平面とパノラマ画像平面の概念図である。
パノラマ画像を生成するための射影変換は、地図の投影法における心射図法を用いて説明することができる。すなわち、心射図法における視点(Qとする)を、パン・チルト中心Q(0,0,0)に置く。そして、あるパンチルト角度(ρ,τ)で得られた画像平面上の座標をP1(x,y)、視点Qを中心とする半径R上の球面上に接するようにこの画像を置いたときに、P1(x,y)と視点Qを結ぶ直線が球面と交わる点の座標を極座標表示する。
この極座標表示の結果を(Rsinθcosφ,Rcosθcosφ,Rsinφ)とすると、心射図法においては、mを定数として一般に次の式が成り立つ。
x=m・Rcosφsin(θ−ρ)/{sinφsinτ+cosφcosτcos(θ−ρ)} (式1.1)
y=m・R(sinφcosτ−cosφsinτcos(θ−ρ))/{sinφsinτ+cosφcosτcos(θ−ρ)} (式1.2)
なお、パン・チルト角度(ρ,τ)のときにこの画像平面と球の交わる画像平面上の座標を原点(0,0)とする。
ここで、パン・チルトして得られる全撮像範囲を角度で表したものを、パン方向θmin〜θmax、チルト方向φmin〜φmaxとする。なお、この角度は、駆動部12のパン・チルト可動範囲にレンズ14の画角を加えたものである。すなわち、パン・チルト限界をそれぞれ、Pmin,Pmax,Tmin,Tmaxとして、レンズ14の画角を水平、垂直それぞれAh,Avとすると、
θmin=Pmin−Ah/2
θmax=Pmax+Ah/2
φmin=Pmin−Av/2
φmax=Pmax+Av/2
となる。生成するパノラマ画像の画素数を横H画素、縦V画素とすると、1画素に相当する画角は、パン方向、チルト方向それぞれ
Δθ=(θmax−θmin)/H (式2.1)
Δφ=(φmax−φmin)/V (式2.2)
となる。すなわちパノラマ画像上の画素(i,j)は、パン・チルト角度(θ,φ)で表すと
(θ,φ)=(θmin+Δθ×i,φmin+Δφ×j)
但し、
i=0,1,2,・・・,H−1
j=0,1,2,・・・,V−1
で表すことができる。
したがって、この(θ,φ)と、ある画像img(Pa,Tb)を得る際のパン、チルト角度、(ρ,τ)=(Pa,Tb)から、画像img(Pa,Tb)上の座標(x,y)が、パノラマ画像上のどの座標に対応するかが決定される。この際、式(1.1),(1.2),(2.1),(2.2)が用いられる。ただし、a=1,2,・・・,n,b=1,2,・・・,mである。すなわちパノラマ画像上の座標をXp,Ypとすると、この変換式をFとすれば、元の撮像画像の座標は、パノラマ画像上の座標
(Xp、Yp)=F(X、y、Pa、Tb) 式(3)
にマッピングされることになる。
したがって、パノラマ画像上の座標(Xp,Yp)の画素値は元の撮像画像img(Pa,Tb)の画素値で置き換えることができる。これを全パノラマ画像上の画素(i,j)について求めれば、パン、チルト角度にリニアな座標系を持つパノラマ画像が得られる。この変換式Fがパノラマ画像生成部38によって実行される射影変換の計算式である。
次に、クライアント2において、アスペクト比4:3と16:9の場合における、撮像可能範囲を考慮したパノラマ画像の表示方法について、図7を用いて説明する。
図7はクライアント2の表示部26及びクライアント3の表示部26に表示されるビューワのGUIの例である。図7に示したビューワは、図7Aはアスペクト比16:9の表示、図7Bはアスペクト比4:3の表示を示している。
クライアント2の表示画面には、カメラ1で撮像されたライブ画像を表示するライブ画像表示部70、76があり、それぞれカメラ1の記憶部18から取得されたパノラマ画像を表示するパノラマ画像表示部71、77を有する。
ライブ画像表示部70、76は、カメラ1が撮像した画像を表示させる第1の領域である。パノラマ画像表示部71、77は、パノラマ画像生成部38が生成したパノラマ画像を表示させるための第2の領域である。
また、クライアント2の表示画面には、つまみのドラッグによりパンとチルト方向にカメラ1を制御するコマンドを指示するパンスクロールバー73とチルトスクロールバー74があり、ズーム制御を指示するズームスライダー75が表示される。
パンスクロールバー73とチルトスクロールバー74とズームスライダーバー75は、アスペクト比の異なる場合でも共通に使用される。さらに、パノラマ画像表示部71、77にはパン、チルト、ズーム制御を指示するためのパノラマプレビュー枠72、78が表示される。
パノラマプレビュー枠72、78を例えばマウスドラッグにより移動させることにより、カメラ1の撮像方向を制御することが可能である。また、パノラマプレビュー枠72、78の大きさを例えばマウスドラッグにより変更することで、カメラ1のズーム倍率を制御することが可能である。ライブ画像表示部70、76には、パノラマプレビュー枠72、78に対する操作による制御後のライブ画像が表示される。
カメラ1が図3Aに示した第1の画角(アスペクト比16:9)で映像配信を行っている場合には、ビューワは図7Aのようにライブ画像表示部70とパノラマプレビュー枠72は、第1の画角に合わせた表示枠となる。
カメラ1が図3Bに示した第2の画角(アスペクト比4:3)で映像配信を行っている場合には、図7Bのようにライブ画像表示部76とパノラマプレビュー枠78は、第2の画角に合わせた表示枠となる。
パノラマ画像表示部71は、カメラ1が第1の画角の水平画角で撮像可能な範囲のパノラマ画像を、カメラ1の記憶部18に保存されているパノラマ画像を用いて表示する。一方、第2の画角の撮像画像を表示するビューワでは、パノラマ画像表示部77は、第2の画角の水平画角に合わせた撮像可能範囲になるようにパノラマ画像の左右の端を非表示領域として表示しないように制御する。例えば、非表示領域に黒枠画像を重畳することにより、パノラマ画像の左右の端を非表示とすることができる。
すなわち、第2の画角の撮像画像を第1の領域に表示させる場合、パノラマ画像生成部38が生成した第3のパノラマ画像の一部の表示を制限する。そして、第3のパノラマ画像のうち、第2の画角でカメラ1の撮像方向を変更して撮像可能な範囲(図8の801)に対応する領域の画像を表示画面の第2の領域に表示させる。
なお、ビューワの図7AとBでは、ライブ画像表示部70、76をアスペクト比に合わせて表示すると説明したが、表示領域はアスペクト比に合わせて変化するが、表示サイズはアスペクト比を拡大、縮小することも可能である。またアスペクト比16:9の領域内に4:3の画像を表すことも可能であり、その場合は非表示領域を設けることで対応する。もちろん4:3の領域内に16:9の画像を表示することも可能であり、本実施の形態において表示領域の表現を変更しても目的を達成できる。
本実施形態では第1の画角でカメラ1の撮像方向を変更して撮像可能な範囲に対応する第1のパノラマ画像に対応する大きさのパノラマ画像を、水平画角又は垂直画角の少なくとも一方が第1の画角よりも狭い第2の画角で撮像した撮像画像を用いて生成できる。
また、このようにして生成したパノラマ画像の一部の表示を制限することにより、第2の画角でカメラ1の撮像方向を変更して撮像可能な範囲に対応するパノラマ画像を表示させることができる。
このようにして、撮像装置が第1の画角と第2の画角で撮像可能である場合、第1の画角よりも狭い第2の画角で撮像する場合にも、大きさが異なる複数のパノラマ画像を生成することができる。
したがって、撮像装置が撮像する撮像画像の画角を変更可能である場合に、大きさが異なる複数のパノラマ画像を生成するために必要とする処理時間低減することができる。
更に、表示においてパノラマ画像をアスペクト比に応じて表示することで、適切な撮像可能範囲を示すパノラマ表示領域を表示することができる。なお、本実施の形態において、パノラマ画像は水平画角が広い画角に合わせて作成する説明を行ったが、水平画角に応じて複数のパノラマ画像を生成及び保存することも可能である。
<その他の実施例>
上述の実施形態では、クライアント3がパノラマ画像を生成する場合について説明したが、カメラ1がパノラマ生成処理を行うこととしてもよい。
また、上述の実施形態では、図1に示すカメラ1、クライアント2、クライアント3の各部の処理が、それぞれ専用のハードウェアにより実行される例について説明したが、これに限られない。図1に示すカメラ1、クライアント2、クライアント3の各部の処理の少なくとも一部の処理を、CPU(Central Processing Unit)等のプロセッサで実行するようにしても良い。
例えば、図1に示すカメラ1の各部のうち少なくとも一部を、カメラ1のCPUと、当該CPUで実行されるプログラムを格納するメモリに置き換えて、処理を実行するようにしても良い。また、同様に、クライアント2、3の各部のうち少なくとも一部を、クライアント2、3のCPUと、当該CPUで実行されるプログラムを格納するメモリに置き換えて、処理を実行するようにしても良い。
図2又は図4で示すフローチャートの処理のうちの少なくとも一部が、CPUで実行することも可能である。クライアント3がプロセッサを内蔵する形態では、図2又は図4の処理フローは、図2又は図4に示す手順をプロセッサに実行させるためのプログラムを示す。クライアント3が内蔵するプロセッサはコンピュータであり、クライアント3が内蔵する記憶部から読み出したプログラムを実行する。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
以上、本発明の好ましい実施形態について説明したが、本発明はこれらの実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。