以下、本発明の実施の形態について説明する。
<第1実施形態>
<全体構成>
図1は、本発明の一実施形態に係る撮影システムの全体構成の一例を説明する図である。
撮影システム10は、撮影装置1と、画像処理装置2と、を有する。
撮影装置1は、複数の光学系を有し、例えば撮影装置1の全方位など広い範囲を撮影した画像(以下、全天球画像という。)を生成し、画像処理装置2へ出力する。撮影装置1、および全天球画像の詳細は、後述する。パノラマ画像は、例えば全天球画像である。以下、パノラマ画像を全天球画像の例で説明する。
画像処理装置2は、撮影装置1から入力された全天球画像を画像処理、および出力する。画像処理装置2の詳細は、後述する。
撮影装置1と、画像処理装置2と、は有線、または無線のインタフェース(Interface)で接続されている。例えば、画像処理装置2は、撮影装置1が出力する全天球画像などのデータを撮影装置1からダウンロードし、画像処理装置2へ入力する。
なお、撮影装置1と、画像処理装置2と、の接続方法は、有線、または無線のインタフェースに限られない。例えば撮影装置1と、画像処理装置2と、は、フラッシュメモリ(登録商標)などの記憶媒体を接続するインタフェースを有し、記憶媒体を介してデータを入出力してもよい。また、撮影装置1と、画像処理装置2と、の接続方法は、LAN(Local Area Network)、またはインターネットなどのネットワーク(図示せず)を介する接続でもよい。
なお、全体構成は、図1に示した構成に限られない。例えば撮影装置1と、画像処理装置2と、は一体の装置となっていてもよい。また、撮影装置1、および画像処理装置2以外の別のコンピュータを接続し、3以上の装置で構成してもよい。
<撮影装置>
図2は、本発明の一実施形態に係る撮影装置の一例を説明する図である。
図2は、撮影装置1の外観の一例を説明する図である。図2(a)は、撮影装置1の正面図の一例である。図2(b)は、撮影装置1の左側面図の一例である。図2(c)は、撮影装置1の平面図の一例である。
撮影装置1は、前面撮影素子1H1と、後面撮影素子1H2と、スイッチ1H3と、を有する。撮影装置1が内部に有するハードウェアについては後述する。
前面撮影素子1H1と、後面撮影素子1H2と、によって撮影された画像を用いて、撮影装置1は、全天球画像を生成する。
スイッチ1H3は、いわゆるシャッタボタンであり、ユーザが撮影装置1に撮影の指示を行うための入力装置である。
撮影装置1は、例えば図2(a)で示すようにユーザが手で持ち、スイッチ1H3を押すことによって撮影を行う。
図3は、本発明の一実施形態に係る撮影装置による撮影の一例を説明する図である。
図3に示すように、ユーザは、撮影装置1を手で持ち、図2のスイッチ1H3を押すことによって撮影を行う。撮影装置1は、図3に示すように、図2の前面撮影素子1H1と、図2の後面撮影素子1H2と、によって、撮影装置1の全方位を撮影することができる。
図4は、本発明の一実施形態に係る撮影装置によって撮影された画像の一例を説明する図である。
図4(a)は、図2の前面撮影素子1H1によって撮影された画像の一例である。図4(b)は、図2の後面撮影素子1H2によって撮影された画像の一例である。図4(c)は、図2の前面撮影素子1H1によって撮影された画像と、図2の後面撮影素子1H2によって撮影された画像と、に基づいて生成される画像の一例である。
図2の前面撮影素子1H1によって撮影された画像は、図4(a)に示すように、撮影装置1の前方方向の広い範囲、例えば画角で180°の範囲を撮影範囲とした画像である。図2の前面撮影素子1H1によって撮影された画像は、図2の前面撮影素子1H1が広い範囲を撮影するための光学系、例えばいわゆる魚眼レンズを用いる場合、図4(a)に示すように、歪曲収差を有する。図4(a)の図2の前面撮影素子1H1によって撮影された画像は、撮影装置1の一方の広い範囲、かつ、歪曲収差を有するいわゆる半球画像(以下、半球画像という。)である。
図2の後面撮影素子1H2によって撮影された画像は、図4(b)に示すように、撮影装置1の後方方向の広い範囲、例えば画角で180°の範囲を撮影範囲とした画像である。
図4(b)の図2の後面撮影素子1H2によって撮影された画像は、図4(a)と同様の半球画像である。
撮影装置1は、後述する歪補正処理、および合成処理などの処理を行い、図4(a)の前方の半球画像と、図4(b)の後方の半球画像と、から図4(c)に示す画像を生成する。図4(c)は、例えばいわゆるメルカトル(Mercator)図法などで生成されるメルカトル画像、すなわち全天球画像である。
<撮影装置のハードウェア構成>
図5は、本発明の一実施形態に係る撮影装置のハードウェア構成の一例を説明するブロック図である。
撮影装置1は、撮影ユニット1H4と、画像処理ユニット1H7、撮影制御ユニット1H8と、CPU(Central Processing Unit)1H9と、ROM(Read−Only Memory)1H10と、を有する。また、撮影装置1は、SRAM(Static Random Access Memory)1H11と、DRAM(Dynamic Random Access Memory)1H12と、操作I/F(Interface)1H13と、を有する。さらに、撮影装置1は、ネットワークI/F1H14と、無線I/F1H15と、アンテナ1H16と、を有する。撮影装置1の各構成要素は、バス1H17で接続されて、データ、または信号の入出力を行う。
撮影ユニット1H4は、前面撮影素子1H1と、後面撮影素子1H2と、を有する。前面撮影素子1H1に対応してレンズ1H5、および後面撮影素子1H2に対応してレンズ1H6が設置されている。前面撮影素子1H1、および後面撮影素子1H2は、いわゆるカメラユニットである。前面撮影素子1H1、および後面撮影素子1H2は、CMOS(Complementary Metal Oxide Semiconductor)、またはCCD(Charge Coupled Device)などの光学センサ(図示せず)を有する。前面撮影素子1H1は、レンズ1H5を通して入射した光を変換し、画像データを生成するための処理を行う。後面撮影素子1H2は、レンズ1H6を通して入射した光を変換し、画像データを生成するための処理を行う。撮影ユニット1H4は、前面撮影素子1H1、および後面撮影素子1H2が生成した画像データを画像処理ユニット1H7へ出力する。画像データは、例えば図4(a)の前方の半球画像、および図4(b)の後方の半球画像などである。
なお、前面撮影素子1H1、および後面撮影素子1H2は、レンズ以外に高画質の撮影を行うために、絞り、またはローパスフィルタなど他の光学要素(図示せず)を有してもよい。また、前面撮影素子1H1、および後面撮影素子1H2は、高画質の撮影を行うために、いわゆる欠陥画素補正、またはいわゆる手振れ補正などの処理を行ってもよい。
画像処理ユニット1H7は、撮影ユニット1H4から入力される画像データから図4(c)の全天球画像を生成するための処理を行う。全天球画像を生成するための処理の詳細は後述する。なお、画像処理ユニット1H7が行う処理は、処理の一部または全部を他のコンピュータによって並列、または冗長して行ってもよい。
撮影制御ユニット1H8は、撮影装置1の各構成要素を制御する制御装置である。
CPU1H9は、撮影装置1が行う各処理のための演算、制御を行う。例えばCPU1H9は、各種のプログラムを実行する。なお、CPU1H9は、並列処理によって高速化を行うために、複数のCPU、デバイス、または複数のコア(core)から構成されていてもよい。また、CPU1H9による処理は、撮影装置1の内部、または外部に別のハードウェアリソース(図示せず)を有し、撮影装置1の処理の一部、または全部を行わせてもよい。
ROM1H10、SRAM1H11、およびDRAM1H12は、記憶装置の例である。ROM1H10は、例えばCPU1H9が実行するプログラム、データ、またはパラメータを記憶する。SRAM1H11、およびDRAM1H12は、例えばCPU1H9がプログラムを実行する際、プログラム、プログラムが使用するデータ、プログラムが生成するデータ、またはパラメータなどを記憶する。記憶装置は、いわゆるメモリ(Memory)であればよく、MRAM(Magnetic Random Access Memory)などでもよい。なお、撮影装置1は、ハードディスクなど補助記憶装置(図示せず)を有してもよい。
操作I/F1H13は、スイッチ1H3など撮影装置1に対するユーザの操作を入力するための処理を行うインタフェースである。操作I/F1H13は、スイッチなどの操作デバイス、操作デバイスを接続するためのコネクタ(図示せず)、ケーブル(図示せず)、操作デバイスから入力された信号を処理する回路(図示せず)、ドライバ(図示せず)、および制御装置(図示せず)などである。なお、操作I/F1H13は、ディスプレイなど出力装置(図示せず)を有してもよい。また、操作I/F1H13は、入力装置と、出力装置が一体となったいわゆるタッチパネルなどでもよい。さらに、操作I/F1H13は、USB(Universal Serial Bus)などのインタフェース(図示せず)を有し、フラッシュメモリ(登録商標)など記憶媒体を接続し、撮影装置1からデータを入出力してもよい。
なお、スイッチ1H3は、シャッターの操作以外の操作を行う電源スイッチ、パラメータ入力スイッチなどを有してもよい。
ネットワークI/F1H14、無線I/F1H15、およびアンテナ1H16は、無線、または有線で撮影装置1と、ネットワークを介して他のコンピュータと、を接続するためのデバイス、および周辺回路などである。例えば撮影装置1は、ネットワークI/F1H14を介してネットワークに接続し、画像処理装置2へデータを送信する。なお、ネットワークI/F1H14、無線I/F1H15、およびアンテナ1H16は、USBなどコネクタ(図示せず)、およびケーブル(図示せず)などを用いて接続する構成としてもよい。
バス1H17は撮影装置1の各構成要素間においてデータなどの入出力に用いられる。バス1H17は、いわゆる内部バスである。バス1H17は、例えばPCI Express(Peripheral Component Interconnect Bus Express)である。バス1H17は、PCI、またはISA(Industry Standard Architecture)などでもよい。
なお、撮影装置1は、撮影素子が2つの場合に限られない。例えば、3つ以上の撮影素子を有してもよい。さらに、撮影装置1は、1つの撮影素子の撮影角度を変えて、複数の部分画像を撮影するでもよい。また、撮影装置1は、魚眼レンズを用いる光学系に限られない。例えば、広角レンズを用いてもよい。
なお、撮影装置1の行う処理は、撮影装置1が行うに限られない。撮影装置1の行う処理の一部、または全部は、撮影装置1がデータ、およびパラメータを送信し、画像処理装置2、またはネットワークで接続された別のコンピュータ(図示せず)が行ってもよい。
<画像処理装置>
画像生成装置は、例えば画像処理装置2である。以下、画像生成装置の例を画像処理装置2で説明する。
画像処理装置2は、例えばスマートフォン(Smartphone)などである。画像処理装置2は、コンピュータであればよく、例えばPC(Personal Computer)、PDA(Personal Digital Assistance)、タブレット、携帯電話器などでもよい。
<画像処理装置のハードウェア構成>
図6は、本発明の一実施形態に係る画像処理装置のハードウェア構成の一例を説明するブロック図である。
画像処理装置2は、補助記憶装置2H1と、主記憶装置2H2と、出力装置2H3と、入力装置2H4と、CPU2H5と、ネットワークI/F2H6と、を有する。画像処理装置2の各構成要素は、バス2H7で接続されて、データ、または信号の入出力を行う。
補助記憶装置2H1は、CPU2H5、および制御装置(図示せず)などの制御によって、CPU2H5が行う処理の中間結果を含む各種データ、パラメータ、またはプログラムなどの情報を記憶する。補助記憶装置2H1は、例えば、ハードディスク、フラッシュSSD(Solid State Drive)などである。なお、補助記憶装置2H1が記憶する情報は、情報の一部または全部を補助記憶装置2H1に代えてネットワークI/F2H6で接続されたファイルサーバ(図示せず)などが記憶してもよい。
主記憶装置2H2は、CPU2H5が実行するプログラムが使用する記憶領域、いわゆるメモリ(Memory)などの主記憶装置である。主記憶装置2H2は、データ、プログラム、またはパラメータなどの情報を記憶する。主記憶装置2H2は、例えばSRAM(Static Random Access Memory)、DRAMなどである。主記憶装置2H2は、メモリに記憶、および取出を行う制御装置(図示せず)を有してもよい。
出力装置2H3は、表示を行うための装置、例えばディスプレイ、周辺回路、およびドライバなどである。出力装置2H3は、画像処理された画像を表示する。
入力装置2H4は、入力用GUI(Graphical User Interface)を操作するための装置、例えば出力装置2H3と一体となっているいわゆるタッチパネル、周辺回路、およびドライバなどである。出力装置2H3、および入力装置2H4は、例えば出力装置2H3がディスプレイ、入力装置2H4がキーボードである別々の装置となっている構成でもよい。なお、出力装置2H3、および入力装置2H4は、画像処理装置2がコネクタ(図示せず)を有し、ケーブル(図示せず)などで接続された外部装置であってもよい。
CPU2H5は、画像処理装置2が行う各処理のための演算、制御を行う。例えばCPU2H5は、各種のプログラムを実行する。なお、CPU2H5は、並列処理によって高速化を行うために、複数のCPU、デバイス、または複数のコア(core)から構成されていてもよい。また、CPU2H5による処理は、画像処理装置2の内部、または外部に別のハードウェアリソース(図示せず)を有し、画像処理装置2の処理の一部、または全部を行わせてもよい。
ネットワークI/F2H6は、無線、または有線でネットワークを介して他のコンピュータと接続し、データなどを入出力するためのアンテナなどの装置、周辺回路、ドライバなどである。例えば、画像処理装置2は、CPU2H5、およびネットワークI/F2H6によって撮影装置1から画像データを入力するための処理を行う。画像処理装置2は、CPU2H5、およびネットワークI/F2H6によって撮影装置1へ所定のパラメータなどを出力するための処理を行う。
<撮影システムの機能>
図7は、本発明の一実施形態に係る撮影システムの機能構成の一例を示す機能ブロック図である。
撮影システム10は、全天球画像生成部10F1と、画像処理部10F2と、を有する。
全天球画像生成部10F1は、例えば撮影装置1によって、画像を撮影し、撮影された画像から全天球画像を生成するための処理を行う。
画像処理部10F2は、例えば画像処理装置2によって、全天球画像に後述する処理を行い、処理された画像を表示するための処理を行う。
全天球画像生成部10F1は、撮影部10F11と、生成部10F12と、出力部10F13と、を有する。
撮影部10F11は、撮影装置1によって半球画像を生成するための処理を行う。撮影部10F11は、半球画像に後述する前処理を行ってもよい。
生成部10F12は、撮影装置1によって撮影部10F11が生成した半球画像から後述する全天球画像を生成するための処理を行う。
出力部10F13は、撮影装置1によって生成部10F12が生成した全天球画像などを画像処理装置2へ出力するための処理を行う。
なお、出力部10F13は、画像を出力する際、例えば出力する画像を後段の処理が処理可能なフォーマットなどに変換する処理を行ってもよい。
画像処理部10F2は、入力部10F21と、画像修正部10F22と、表示部10F23と、記憶部10F24と、を有する。
入力部10F21は、パラメータ入力部10F211と、画像入力部10F212と、を有する。
パラメータ入力部10F211は、画像処理装置2によって、ユーザから後述する画像修正処理に必要なパラメータの入力を行うための処理を行う。入力されるパラメータは、例えば出力範囲を指定する出力範囲パラメータ、出力画像で修正する修正箇所を指定する修正パラメータなどである。
画像入力部10F212は、画像処理装置2によって、撮影装置1から全天球画像などのデータの入力を行うための処理を行う。
なお、入力部10F21は、パラメータ、または画像を入力する際、例えば入力されるデータなどを後段の処理が処理可能なフォーマットなどに変換する処理を行ってもよい。
画像修正部10F22は、画像処理装置2によって、入力部10F21に入力されたデータ、およびパラメータなどを用いて、例えば後述する全天球画像を修正する処理を行う。
画像修正部10F22は、マスク部10F221と、類似度算出部10F222と、修正部10F223と、を有する。
マスク部10F221は、後述するマスクデータ生成処理など後述するマスクデータに係る処理を行う。
類似度算出部10F222は、後述する類似度の算出を行う処理など類似度に基づく処理を行う。
修正部10F223は、後述するマスクデータ、および後述する類似度によって出力画像の修正する処理を行う。
表示部10F23は、画像処理装置2によって、例えば画像修正部10F22が処理した画像をユーザに表示するための処理を行う。
記憶部10F24は、画像処理装置2によって、後述する処理で生成する画像のデータを記憶する。
なお、各機能は、図7に示した構成に限られない。例えば全天球画像生成部10F1の行う機能は、画像処理部10F2が有していてもよい。また、各機能で行われる処理は、上述したハードウェアによって処理される構成に限られない。例えば全天球画像生成部10F1の行う処理の全部または一部は、画像処理装置2、またはネットワークで接続されている別のコンピュータ(図示せず)が行う構成でもよい。
<撮影システムによる全体処理>
図8は、本発明の一実施形態に係る撮影システムによる全体処理の一例を説明するフローチャートである。
ステップS0801では、全天球画像生成部10F1は、後述する全天球画像を生成するための処理を行う。
ステップS0802では、全天球画像生成部10F1は、画像処理部10F2へステップS0801で生成した全天球画像を出力するための処理を行う。
ステップS0803では、画像処理部10F2は、ステップS0802で入力された全天球画像を後述する画像処理を行う。
ステップS0803では、画像処理部10F2は、ステップS0803で画像処理された画像をユーザへ表示する処理を行う。
<全天球画像を生成するための処理>
図9は、本発明の一実施形態に係る全天球画像を生成するための処理の一例を説明するフローチャートである。全天球画像は、例えば全天球画像生成部10F1によって生成される。図9の全天球画像を生成するための処理は、図8のステップS0801の処理に相当する。
ステップS0901では、全天球画像生成部10F1は、撮影によって図4(a)、および図4(b)を生成する。
ステップS0902では、全天球画像生成部10F1は、ステップS0901で生成された半球画像に対して後述する前処理を行う。
ステップS0903では、全天球画像生成部10F1は、ステップS0902で前処理された半球画像を合成する後述する合成処理を行う。合成処理によって、全天球画像生成部10F1は、全天球画像を生成する。
図10は、本発明の一実施形態に係る全天球画像を生成するための処理の一例を説明する図である。
図10(a)は、図4(a)の半球画像を光軸に対して水平方向、および垂直方向の入射角が等位となる箇所を線で結んで示した図である。以下、光軸に対して水平方向の入射角をθ、光軸に対して垂直方向の入射角をφと記載する。
図10(b)は、図10(a)と同様に、図4(b)の半球画像を光軸に対して水平方向、および垂直方向の入射角が等位となる箇所を線で結んで示した図である。図9のステップS0902では、前処理は、例えば図10(a)、および図10(b)の状態の画像をメルカトル図法によって後述する図10(c)の状態に変換する処理などである。
図10(c)は、メルカトル図法によって処理された画像の一例を説明する図である。図10(c)は、例えば図10(a)に示した状態の画像を、例えばあらかじめ作成してあるLUT(LookUpTable)などで対応させ、メルカトル図法によって処理した場合の例である。
図10(d)は、図9のステップS0903で行う合成処理の一例である。
図10(d)で示すように、合成処理は、例えば図10(c)で示した状態の画像を複数用いて画像を生成する。図10(d)は、例えば図10(a)、および図10(b)の状態の画像を9のステップS0902で前処理した画像を用いて合成処理を行う場合の例である。なお、合成処理は、前処理された画像を単に連続して配置する処理に限られない。例えば全天球画像の水平方向中心がθ=180°としない場合、合成処理は、図4(a)の前処理した画像を全天球画像の中心に配置し、左右に図4(b)の前処理した画像を分割して配置して合成処理を行い図4(c)に示す全天球画像を生成する処理でもよい。
なお、前処理は、メルカトル図法による処理に限られない。例えば図10(b)のようにφ方向の画素の並びが図10(a)の並びに対して上下が逆、およびθ方向の画素の並びが図10(a)の並びに対して左右が逆となっている、いわゆる天地逆転の場合である。天地逆転の場合、前処理は、図10(b)の状態の画像を図10(a)のφ方向、およびθ方向の画素の並びと揃えるために、180°Roll回転させる処理をおこなってもよい。
また、前処理は、図10(a)、および図10(b)の状態の画像が有する歪曲収差を補正するために補正処理を行ってもよい。さらに前処理は、画質を向上させるための処理、例えばシェーディング補正、ガンマ補正、ホワイトバランス、手振れ補正、オプティカル・ブラック補正処理、欠陥画素補正処理、エッジ強調処理、またはリニア補正処理などを行ってもよい。
なお、合成処理は、例えば半球画像の撮影範囲と、他方の半球画像の撮影範囲と、が重複する場合、高精度に合成処理をするために、重複する範囲を利用して補正を行ってもよい。
全天球画像を生成するための処理によって、半球画像から全天球画像を生成することができる。
<画像処理装置による処理>
図11は、本発明の一実施形態に係る画像処理装置による処理の一例を説明するフローチャートである。図11の画像処理装置による処理は、図8のステップS0803の処理に相当する。
ステップS1101では、画像処理部10F2は、全天球画像を入力するための処理を行う。入力される全天球画像は、図8のステップS0802で出力された全天球画像である。全天球画像は、図4(c)で示す画像である。以下、全天球画像が図4(c)で示す画像の場合を例に説明する。
ステップS1102では、画像処理部10F2は、後述する投影方位指定データを入力するための処理を行う。
図12は、本発明の一実施形態に係る全天球画像を3次元座標系で示した一例を説明する図である。
全天球画像は、図3で説明したように全方位を撮影した画像であるため、3次元空間において全天球画像の3次元表現の球として示せる。ここで、全天球画像の3次元表現の球が形成する径をrとし、r=1とする。全天球画像の3次元表現の球は、後述する投影面が内接する内接球(以下、内接球という。)である。全天球画像の3次元表現の座標系は、原点を撮影した場所、すなわちユーザの位置、および撮影装置1の位置とする。
投影方位指定データは、出力画像の中心となる画素の座標を示すデータである。
図13は、本発明の一実施形態に係る投影方位指定データの一例を説明する図である。
投影方位指定データは、中心座標4を示すためのデータである。投影方位指定データは、例えば全天球画像と同様の(θ、φ)座標系で示される。
出力範囲は、出力画像の範囲を示すデータである。出力範囲5は、中心座標4に基づいて決定する。例えば、出力範囲5のθ方向の長さ、およびφ方向の長さは、中心座標4を中心とし、予め設定される画素数で決定する。
投影方位指定データは、例えば全天球画像を画像処理装置2の出力装置2H3で表示し、画像処理装置2の入力装置2H4によって投影方位指定データの座標をユーザが入力することで生成される。
ステップS1103では、画像処理部10F2は、投影方位指定データに基づいて投影面を計算する処理を行う。
図14は、本発明の一実施形態に係る投影面を計算する処理の一例を説明する図である。
ここで、出力画像6は、1辺の画素数がLの場合を例にして説明する。
出力画像6は、図12で示した座標系において1辺の長さが2SRの投影面7と示せる。出力画像6の上の任意の画素Pの座標を(Xp、Yp)とした場合、投影面7の上のPに対応する座標P1(Xp1、Yp1)は下記の(式1)のように示せる。
投影面7が図14(a)で示すように半径r=1の球面に接する場合、P1の3次元座標系の座標は、(Xp1、Yp1、−1)となる。投影面7は、内接球3に内接する。
投影面7をX軸、およびZ軸まわりに回転させることで、半径r=1の球面に接した状態において投影面7は任意の位置に設定することができる。
投影面7を図14(b)で示すようにX軸まわりにφ、およびZ軸まわりにθ回転させる場合、X軸まわりの回転による座標の変換は、下記の(式2)、およびZ軸まわりの回転による座標の変換は、下記の(式3)で示す回転行列によって計算できる。ここで、(式2)、および(式3)において(x、y、z)は回転前の座標、(X、Y、Z)は回転後の座標とする。
(式2)、および(式3)からX軸まわりにφ、およびZ軸まわりにθ回転させる場合、回転させた投影面8の座標は、下記の(式4)のように回転行列Rによって計算することができる。ここで、(式4)において、回転させた投影面8の座標は、(Xd、Yd、Zd)、および回転前の座標を(xd、yd、zd)とする。回転させた投影面8は、内接球3に内接する。
画像処理部10F2は、投影面7を(式4)に基づいて回転させて、回転させた投影面8とし、投影方位指定データで示された位置になるように計算できる。
なお、回転の計算は、(式4)による計算に限られない。例えばロドリゲス(Rodrigue)の回転公式、またはオイラー(Euler)角を用いる計算方法でもよい。
ステップS1104では、画像処理部10F2は、投影面上の3次元座標を全天球画像上の極座標系へ変換する処理を行う。
図15は、本発明の一実施形態に係る投影面上の3次元座標を全天球画像上の極座標へ変換する処理の一例を説明する図である。
ステップS1103で計算した回転させた投影面8上の座標は、(式4)、および図14で示したように(Xd、Yd、Zd)の3次元座標系である。回転させた投影面8上の座標が3次元座標系であるのに対して、全天球画像上の座標は、図10で示した極座標系(θ、φ)である。図15で示すように、ステップS1104では、画像処理部10F2は、回転させた投影面8上の座標(Xd、Yd、Zd)の対応する全天球画像上の極座標(θ、φ)を下記(式5)によって計算する。
ステップS1105では、画像処理部10F2は、全天球画像上の極座標に対応する全天球画像上の座標値を計算する処理を行う。画像処理部10F2は、ステップS1104で計算した全天球画像上の極座標(θ、φ)に対応する全天球画像上の座標Q(Xq、Yq)を下記(式6)によって計算する。
ここで、(式6)において、QWは、全天球画像のθ方向の長さ、QHは、全天球画像のφ方向の長さ、πは円周率である。なお、角度の単位はラジアン(rad)である。
ステップS1106では、画像処理部10F2は、出力画像の画素を生成する処理を行う。
図16は、本発明の一実施形態に係る出力画像の画素を生成する処理の一例を説明する図である。
図16(a)は、ステップS1105で計算された座標Q(Xq、Yq)を全天球画像上で示した場合の例である。
図16(b)は、図16(a)の座標Q(Xq、Yq)周辺を拡大した図である。
出力画像の画素を生成する処理は、例えば座標Q(Xq、Yq)と、座標Q(Xq、Yq)の示す座標の周辺画素と、に基づいて座標Qに相当する画素の画素値を計算する処理である。出力画像の画素を生成する処理は、例えば座標Q(Xq、Yq)の示す座標の周辺4画素から補間する、いわゆるバイリニア法による補間(Bi−linear interpolation)などである。
バイリニア法による補間は、例えば座標Q(Xq、Yq)の小数点以下の数値と、座標Q(Xq、Yq)の示す座標の周辺4画素の輝度値と、に基づいて計算する。
計算は、座標Q(Xq、Yq)に対応する画素の画素値をDijとし、周辺4画素P00、P10、P01、およびP11として説明する。周辺4画素P00、P10、P01、およびP11の輝度値は、D00、D10、D01、およびD11として説明する。
図16(c)は、バイリニア法による補間の例を説明した図である。
Dijは、例えば下記(式7)によって計算する。
ここで、α、およびβは、座標Q(Xq、Yq)の小数点以下の数値である。
出力画像の画素を生成する処理は、周辺4画素の輝度値に基づいて計算することで、自然な復元を行い、高画質な画像を生成することができる。
なお、出力画像の画素を生成する処理は、(式7)のバイリニア法による補間に限られない。例えば、処理を簡易にするためにニアレストネイバー(Nearest neighbor)法による補間、または高画質にするためにバイキュービック法による補間(Bi−cubic convolution)の処理でもよい。
ステップS1104乃至ステップS1106の処理は、出力画像の全画素について繰り返して処理を行い、図16(d)のように出力画像の画素を生成する。
ステップS1107では、画像修正部10F22は、マスクデータ生成処理を行う。
マスクデータ生成処理は、出力画像において画像修正処理の対象とする修正箇所をユーザの指定により定め、修正箇所の画素を特定するためのデータを生成する。
図17は、本発明の一実施形態に係るマスクデータ生成処理の一例を説明する図である。
マスクデータ生成処理は、例えば、出力画像6を図7の表示部10F23によってユーザへ出力し、出力された出力画像6をユーザに見せ、ユーザに修正が必要と判断する箇所の指定をさせる。
以下、図17のように、出力画像6に第1の被写体61と、第2の被写体62が映っている場合で、ユーザは、第1の被写体61の箇所が修正の必要があると判断する場合を例に説明する。
図17(a)は、指定を行う前の出力画像の一例である。ユーザは、図17(a)の出力画像6を見て第1の被写体61が修正の必要があると判断できる。
指定は、例えばユーザが図7の入力部10F21によって行う。指定は、例えばユーザによって図17(b)に示すように第1の被写体61の箇所となる画素を入力する処理である。なお、指定は、例えばユーザによって図17(c)に示すように第1の被写体61の箇所となる画素を含む範囲を入力する処理である。また、指定は、例えばユーザによって図17(a)において第1の被写体61が有する画素いずれかを特定する入力を行わせる。ユーザの入力によって、入力された画素と同一または類似の輝度値など同じ特徴を持つと判定できる近接した画素を画像処理装置2は算出し、算出した複数の画素を指定する箇所としてもよい。
マスクデータは、指定された箇所の座標を示すデータである。
なお、画像処理装置2は、マスクデータで示された座標を所定の色で塗りつぶした出力画像を生成し、ユーザへ出力する処理を行ってもよい。
ステップS1108では、画像修正部10F22は、類似度に基づく処理を行う。
<類似度に基づく処理>
図18は、本発明の一実施形態に係る類似度に基づく処理の一例を説明するフローチャートである。
図19は、本発明の一実施形態に係る類似度に基づく処理の一例を説明する図である。
図18、および図19で説明する処理は、図11のステップS1108の処理に相当する。
図18は、例えば出力画像の画素数が横2048画素、および縦1024画素となる場合を例に画像のサイズを説明する。
1/1画像は、横2048画素、および縦1024画素の画像である。
1/2画像は、出力画像の横、および縦の画素数をそれぞれ1/2倍した横1024画素、および縦512画素の画像である。
1/4画像は、出力画像の横、および縦の画素数をそれぞれ1/4倍した横512画素、および縦256画素の画像である。
1/8画像は、出力画像の横、および縦の画素数をそれぞれ1/8倍した横256画素、および縦128画素の画像である。
なお、画像は、画素数が横2048画素、および縦1024画素である場合に限られない。例えば出力画像のサイズは、横1024画素、および縦512画素であってもよい。
また、サイズの倍率は、1/8画像、1/4画像、1/2画像、および1/1画像に限られない。例えば1/16画像などを用いてもよい。
さらに、画像サイズの種類は、4種類に限られない。サイズの倍率を追加、または削除してもよい。
ステップS1801では、画像修正部10F22は、図11のステップS1107で生成したマスクデータ、および図11のステップS1106で生成された出力画像を取得する。
ステップS1802では、画像修正部10F22は、画像のサイズを選択する処理を行う。画像のサイズを選択する処理は、例えばサイズカウンタに応じて行われる。具体的には、画像修正部10F22は、サイズカウンタ=0の場合、1/8画像を選択し、サイズカウンタ=1の場合、1/4画像を選択する。同様に、画像修正部10F22は、サイズカウンタ=2の場合、1/2画像を選択し、サイズカウンタ=3の場合、1/1画像を選択するなどである。なお、画像のサイズの選択順序は、上述の場合に限られない。例えば1/1画像から行ってもよい。
画像修正部10F22は、ステップS1802以降の処理を画像サイズの種類数繰り返す。図18では、画像サイズの種類数よる繰り返しの始端をLS1、終端をLE1で示す。例えば画像サイズの種類が1/8画像、1/4画像、1/2画像、および1/1画像の4種類の場合、画像サイズの種類数は、4となる。LS1乃至LE1で繰り返しされる処理は、サイズカウンタが例えば0乃至3の値の場合である。
ステップS1803では、画像修正部10F22は、初期化処理を行う。初期化処理は、例えばマスクデータに初期値データを生成する処理を行う。
以下、ユーザによって指定範囲91が図19(a)で示すのように入力された場合を例に説明する。
マスクデータ9は、指定範囲91によって出力画像6の修正する箇所を指定するためのデータである。マスクデータ9は、出力画像と同じ画素数のデータである。
初期値設定は、マスクデータ9に基づいて指定範囲91の対象でない画素(以下、非マスク画素という。)と、指定範囲91の対象となる画素(以下、マスク画素という。)と、で異なる値を設定したデータを生成する。図19では、非マスク画素を白マス、およびマスク画素を色付きのマスで示す。
図19(a)は、画像修正部10F22は、マスクデータ9の非マスク画素に例えば「+10000」(図示せず)、およびマスク画素に「−10000」(図示せず)の初期値データを生成した場合である。なお、初期値は、「+10000」、および「−10000」に限られない。初期値は、マスク画素と、非マスク画素と、が区別できる数値であればよい。
ステップS1804では、画像修正部10F22は、画像の回転処理を行う。画像の回転処理は、例えば画像の向きカウンタに応じて行われる。具体的には、画像の向きカウンタ=0の場合、画像修正部10F22は、画像を入力された向きと同一の向きとする。画像の向きカウンタ=1の場合、画像修正部10F22は、入力された向きの画像から画像の垂直軸を中心に回転させた左右反転の画像にする。画像の向きカウンタ=2の場合、画像修正部10F22は、入力された向きの画像から画像の水平軸を中心に回転させた上下反転の画像にする。画像の向きカウンタ=3の場合、画像修正部10F22は、入力された向きの画像から画像の対角線を中心に回転させた対角反転の画像にする。
回転処理によって画像の向きを変更することで、放射状に広がる画像など直線、または曲線によって構成された抽象的模様、いわゆる幾何学的模様が含まれた画像の場合でも適切な類似度の算出ができる。なお、向きの種類、種類数、および順序は、上述の場合に限られない。例えば順序は、左右反転の画像から行ってもよい。
ステップS1804以降の処理は、後述する類似度総和値が収束したか否かの判断(ステップS1810)によって繰り返し行われる。繰り返しの始端をLS2、終端をLE2で示す。
ステップS1805では、画像修正部10F22は、マスク画素の距離値を計算する処理を行う。
マスク画素の距離値を計算する処理は、各マスク画素が非マスク画素から何画素離れた画素であるかを計算する処理である。
マスク画素の距離値を計算する処理は、例えば画像の左上画素から開始し、右下画素まで行われるいわゆるラスタスキャン(Raster Scan)方式で行う。
ステップS1805では、画像修正部10F22は、ラスタスキャンによってマスク画素を見つける処理を行う。マスク画素には、初期値設定によって「−10000」が入力されているので、画像修正部10F22は、入力されている値でマスク画素か否かの判断を行う。
図19(b)、および図19(c)は、画像修正部10F22は、マスク画素の距離値を計算する処理の一例である。
ステップS1805では、画像修正部10F22は、マスクデータ9を左上から右下へラスタスキャンし、マスク画素の距離値を計算する処理によって第一のマスク画素計算データ92を生成する。第一のマスク画素計算データ92に入力される値の絶対値は、マスク画素の領域と、非マスク画素の領域と、の境界線からの距離を示す。
第一のマスク画素計算データ92を生成する処理は、例えば図19(b)のように示せる。第一のマスク画素計算データ92を生成する処理は、対象となるマスク画素の上、または左に隣接する画素が非マスク画素の場合、対象となるマスク画素の値を「−1」とする処理である。第一のマスク画素計算データ92を生成する処理は、対象となるマスク画素の上、または左に隣接する画素がいずれも非マスク画素でない場合、マスク画素の上に隣接する画素、または左に隣接する画素の大きい値をさらに−1した値とする処理である。第一のマスク画素計算データ92を生成する処理は、画像の外周にある画素については、値を初期値のままとする。
次に、画像修正部10F22は、第一のマスク画素計算データ92を右下から右上へラスタスキャンし、マスク画素の類似度を計算する処理によって第二のマスク画素計算データ93を生成する。
第二のマスク画素計算データ93を生成する処理は、例えば図19(c)のように示せる。第二のマスク画素計算データ93を生成する処理は、対象となるマスク画素の下、または右に隣接する画素が非マスク画素の場合、対象となるマスク画素の値を「−1」とする処理である。第二のマスク画素計算データ93を生成する処理は、対象となるマスク画素の下、または右に隣接する画素がいずれも非マスク画素でない場合、マスク画素の下に隣接する画素、または右に隣接する画素の大きい値をさらに−1した値とする処理である。第二のマスク画素計算データ93を生成する処理は、画像の外周にある画素については、値を初期値のままとする。
ステップS1806では、画像修正部10F22は、非マスク画素の距離値を計算する処理を行う。
ステップS1806では、画像修正部10F22は、マスクデータ9を右上から左下へラスタスキャンし、非マスク画素の距離値を計算する処理によって第三のマスク画素計算データ94を生成する。第三のマスク画素計算データ94を生成する処理は、変数ステップカウントを1乃至10までインクリメントしながら以下の操作をループする。非マスク画素には、初期値設定によって「+10000」が入力されているので、画像修正部10F22は、入力されている値で非マスク画素か否かの判断を行う。
第三のマスク画素計算データ94を生成する処理は、対象となる非マスク画素の周辺8画素に値が1乃至10である画素がある場合、対象となる非マスク画素の値を変数ステップカウントの値とする処理である。第三のマスク画素計算データ94を生成する処理は、対象となる非マスク画素の周辺8画素に値が1乃至10である画素がない場合、対象となる非マスク画素の値を「+1」とする処理である。
図19(d)は、変数ステップカウントが「1」であった場合の非マスク画素の距離値を計算する処理を行ったマスクデータである。
図19(e)は、変数ステップカウントが「2」であった場合の非マスク画素の距離値を計算する処理を行ったマスクデータである。
図19(f)は、変数ステップカウントが「3」であった場合の非マスク画素の距離値を計算する処理を行ったマスクデータである。
次に、画像修正部10F22は、変数ステップカウントが「10」となるまで処理した後、「+10000」の値となっているマスク画素の処理を行う。画像修正部10F22は、「+10000」の値となっているマスク画素の値を「+100」とする処理を行う。図19(g)は、「+10000」の値となっているマスク画素を処理した場合の一例である。
ステップS1807では、画像修正部10F22は、画像の外周にある画素の処理を行う。図19(h)は、画像の外周にある画素について処理を行った場合の一例である。画像修正部10F22は、画像の外周にある画素の値を「+10000」とする処理を行う。画像の外周にある画素について処理は、マスク画素、および非マスク画素であるか否かを関係なく行う。後述する距離値、および輝度値の計算処理では、画像の外周にある画素は、周辺に画素が存在しないため計算に用いることができないので無効フラグの値として入力する。
マスク画素を修正するために参考にする非マスク画素は、近くにある画素を用いることで画質の向上を図ることができる場合が多い。画像修正部10F22は、ステップS1807までの処理によって、マスク画素に対して各非マスク画素に対する距離に基づいた値を入力したマスクデータを生成する処理を行っている。
ステップS1808では、画像修正部10F22は、マスク画素、およびマスク画素の周辺に存在する非マスク画素について類似点を算出する処理を行う。
類似点は、例えば任意の画素(以下、第一の画素という。)に対して類似度の値が最小となる第1の画素以外の画素(以下、第二の画素という。)である。
類似度は、第一の画素と、第二の画素と、の輝度値、および距離値に基づいて計算される。類似度は、値が小さいほど第一の画素と、第二の画素と、判断する。第一の画素、および第二の画素の輝度値は、例えば周辺4画素以内の画素、すなわち計算対象となる画素を中心に9×9の画素の輝度値を平均した値などである。なお、輝度値の計算は、9×9の画素の輝度値を平均した値に限られない。9×9は、計算時間などを考慮して変更してもよい。
また、類似度は、SSD(Sum of Squared Difference)法、またはSAD(Sum of Absolute Difference)法などによって求めた値に距離による重み付けを行って求められてもよい。
ステップS1809では、画像修正部10F22は、ステップS1808で計算されている類似度を全画素分加算し、各画像の総和(以下、総和値という。)を算出する。総和値は、記憶部10F24に各画像について記憶される。以下、ステップS1809で算出された総和値を現在の総和値、記憶部10F24に記憶されている現在の総和値を算出した画像とは別の画像で算出された総和値を前回、または前回以前の総和値という。
ステップS1810では、画像修正部10F22は、ステップS1810で算出された総和値、および記憶部10F24に記憶されている前回以前の総和値に基づいて収束の判断を行う。
収束は、例えば下記(式8)と、下記(式9)と、両方の条件を満たした場合である。収束したと判断する場合(ステップS1810でYES)、各画像サイズでの処理(LS1乃至LE1での処理)を終了する。収束していない場合と判断する場合(ステップS1810でNO)、ループの始端LS2に戻り、ステップS1804乃至ステップS1819の処理を行う。ここで、閾値は予めユーザによって設定される任意の値である。直近5回の総和値は、現在の総和値、前回の総和値、前回の一回前の総和値、前回の二回前の総和値、および前回の三回前の総和値である。前回から前5回の総和値は、前回の総和値、前回の一回前の総和値、前回の二回前の総和値、前回の三回前の総和値、および前回の四回前の総和値である。
(式8)で示した通り、総和値を算出する処理は少なくとも5回以上、すなわちステップS1804乃至ステップS1810の処理は5種類以上の画像を選択して行われるが望ましい。少なくとも5回以上の処理を行うことで、総和値の変動が少なくできるためである。
ステップS1811では、画像修正部10F22は、類似点に基づいてマスク画素の輝度値を算出する処理を行う。画像修正部10F22は、ステップS1808で計算される類似点に対応する輝度値を計算する。例えば類似点に対応する輝度値の計算は、類似点の周辺画素の輝度値を平均化して計算した値、またはバイリニア法で計算した値などである。
<全天球画像へ反映する処理>
ステップS1109では、画像修正部10F22は、全天球画像へ反映する処理を行う。
図20は、本発明の一実施形態に係る全天球画像へ反映する処理の一例を説明するフローチャートである。
図21は、本発明の一実施形態に係る全天球画像へ反映する処理の一例を説明する図である。
全天球画像へ反映する処理は、図18で説明した類似度に基づく処理で修正されたマスク画素への処理を全天球画像においてマスク画素に対応する画素へ同様の修正を反映させるための処理である。
ステップS2001乃至ステップS2009の処理は、全天球画像の有する全画素について行う。ステップS2001乃至ステップS2009の処理は、例えば全天球画像の左上画素から開始し、右下画素まで行われるいわゆるラスタスキャン方式で行う。図20で示すように、ステップS2001乃至ステップS2009の処理は、反映処理カウンタでループする。
ステップS2001では、画像修正部10F22は、全天球画像上において任意の座標である座標Q(Xq、Yq)に対応する全天球画像上の極座標(θ1、φ1)へ変換する処理を行う。全天球画像上の極座標(θ1、φ1)は、例えば下記(式10)によって変換する処理を行う。
ここで、(式10)において、QWは、全天球画像のθ方向の長さ、QHは、全天球画像のφ方向の長さ、πは円周率である。なお、角度の単位はラジアン(rad)である。
ステップS2002では、画像修正部10F22は、全天球画像上の極座標(θ1、φ1)と、投影面と、の距離dを計算する処理を行う。具体的には、画像修正部10F22は、ステップS2001の処理によって算出された極座標(θ1、φ1)と、図11のステップS1102で入力された投影方位指定データによって示された投影面の中心座標4の座標値(θc、φc)と、の距離dを計算する。
図21(a)は、距離dの一例を説明する図である。
距離dは、図21(a)で示すように、全天球画像上の極座標(θ1、φ1)と、投影面の中心座標4の座標値(θc、φc)と、の半径r=1上の距離である。
ステップS2003では、画像修正部10F22は、ステップS2002で計算した距離dに基づいて、全天球画像上の極座標(θ1、φ1)が投影されている範囲か否か、すなわち投影面上の範囲か否かを判断する。具体的には、画像修正部10F22は、下記(式11)によって投影面上の範囲か否かを判断する。
ここで2SRは、投影面の一辺の長さである。後述するステップS2005では、画像修正部10F22は、3次元座標(Xd、Yd、Zd)に対応する初期位置の投影面上における座標(Xp1、Yp1、−1)を計算する処理を行う。計算の際、計算式は、三角関数を用いる。三角関数は、180°周期で取る値が繰り返される関数である。
三角関数の性質によって、後述するステップS2005において、図21(b)で示すように、投影面7の原点に対して対称の位置にある対称投影面71上の極座標(θ2、φ2)は、投影面7上の範囲である条件を満たす。すなわち、回転させた投影面8の原点に対して対称の位置にある回転させた投影面の対称投影面81は、図21(c)のように示せる。回転させた投影面の対称投影面81には、極座標(θ2、φ2)がある。
極座標(θ2、φ2)の座標が反映されると不要な画素が反映されるため、画質が低下する。したがって、距離dは、図21(a)で示したように半径r=1の球面に沿った距離で計算する。半径r=1の球面に沿った距離で計算することによって、距離dは、回転させた投影面の対称投影面81上の極座標(θ2、φ2)を除外するように計算される。
図21(d)は、図21(b)の正面図の一例である。距離dは、内角Angと、半径rと、の積で計算できる。半径r=1であるため、距離dは、内角Angと等しい値となる。投影面7上に極座標(θ1、φ1)がある場合では、図21(d)の場合が最大の値となる。したがって、距離dは、上記(式11)の式によって投影面上の範囲か否かを判断される。
(式11)を満たしている場合(ステップS2003でYES)、画像修正部10F22は、ステップS2004に進む。(式11)を満たしていない場合(ステップS2003でNO)、座標Q(Xq、Yq)は、投影面上の座標ではない、すなわち出力範囲に指定された範囲内の座標ではないため、修正は必要ないと判断できる。(式11)を満たしていない場合、画像修正部10F22は、次の座標Q(Xq、Yq)についての計算へ進む。
ステップS2004では、画像修正部10F22は、全天球画像上の極座標(θ1、φ1)に対応する投影面上の3次元座標(Xd、Yd、Zd)を計算する処理を行う。具体的には、ステップS2004では、画像修正部10F22は、下記(式12)によって極座標の座標値である(θ1、φ1)から直交座標系の3次元座標値(Xd、Yd、Zd)に変換する計算を行う。
ステップS2005では、画像修正部10F22は、3次元座標(Xd、Yd、Zd)に対応する初期位置の投影面上における座標(Xp1、Yp1、−1)を計算する処理を行う。初期位置の投影面は、図14(a)の投影面7である。3次元座標(Xd、Yd、Zd)から初期位置の投影面上における座標(Xp1、Yp1、−1)を計算する処理は、例えば上記(式4)の回転行列Rの逆行列R
-1を用いて計算できる。図11のステップS1103、および図14(b)では、画像修正部10F22は、初期位置の投影面上における座標(Xp1、Yp1、−1)から3次元座標(Xd、Yd、Zd)を上記(式4)の回転行列Rによって計算している。したがって、逆変換となる3次元座標(Xd、Yd、Zd)から初期位置の投影面上における座標(Xp1、Yp1、−1)を計算する処理は、逆行列R
-1を用いて計算する。
なお、3次元座標(Xd、Yd、Zd)から初期位置の投影面上における座標(Xp1、Yp1、−1)を計算する処理は、逆行列R-1を用いた計算に限られない。例えば、計算は、回転行列Rを用いて、入力する角度が符号プラスマイナス反転した角度を入力して実現してもよい。
ステップS2006では、画像修正部10F22は、ステップS2005で計算したXp1、およびYp1の値によって、座標(Xp1、Yp1、−1)が投影面7上に位置するか否かの判断を行う。具体的には、画像修正部10F22は、下記(式13−1)および下記(式13−2)の両式を満たしているか否かで判断する。
(式13−1)および(式13−2)の両式を満たしている場合(ステップS2006でYES)、画像修正部10F22は、ステップS2007に進む。(式13−1)および(式13−2)の両式においていずれか一方でも満たしていない場合(ステップS2006でNO)、座標(Xp1、Yp1、−1)は、投影面上の座標ではない。すなわち、座標(Xp1、Yp1、−1)は、出力範囲に指定された範囲内の座標ではないため、修正は必要ないと判断できる。(式13−1)および(式13−2)の両式においていずれか一方でも満たしていない場合、画像修正部10F22は、次の座標Q(Xq、Yq)についての計算へ進む。
ステップS2007では、画像修正部10F22は、座標(Xp1、Yp1、−1)に対応する一辺の長さがLの平面上の座標系(Xp、Yp)を計算する処理を行う。
画像修正部10F22は、1辺の長さが2SRの投影面7上の座標(Xp1、Yp1、−1)を1辺の長さがLの画像上の座標系に対応する座標(Xp、Yp)を計算する。具体的には、画像修正部10F22は、下記(式14)によって座標(Xp、Yp)を計算する。
ステップS2008では、画像修正部10F22は、ステップS2007で計算した座標(Xp、Yp)がマスクする領域か否かを判断する。
図19(e)は、マスクする領域か否かを判断する一例を示した図である。画像修正部10F22は、図19(e)に示すマスク領域を示す画像データ95を生成する。画像データ95は、図19(e)に示すように、出力画像6にマスクデータ9を反映させた画像データである。ステップS2008では、画像修正部10F22は、図19(e)に示すようにステップS2007で計算した座標(Xp、Yp)がマスク領域を示す画像データ95のマスク領域か否かで判断する。
座標(Xp、Yp)がマスク領域であると判断した場合(ステップS2008でYES)、画像修正部10F22は、ステップS2009に進む。座標(Xp、Yp)がマスク領域でないと判断した場合(ステップS2008でNO)、座標(Xp、Yp)は、ユーザに修正する箇所と指定された座標ではないため、修正は必要ないと判断できる。座標(Xp、Yp)がマスク領域でないと判断した場合、画像修正部10F22は、次の座標Q(Xq、Yq)についての計算へ進む。
ステップS2008では、画像修正部10F22は、全天球画像の画素を修正する処理を行う。画像修正部10F22は、全天球画像の画素を図18で説明した類似度に基づく処理で修正されたマスク画素の輝度値に基づいて修正する。修正は、例えば図11のステップS1106および図16で説明したバイリニア法を用いて画素の値を生成する。
なお、出力画像は、画像修正処理が行われた画像に限られない。例えば、出力画像は、画像の一部が画像修正処理された画像などを出力画像とし、各処理の過程となる画像をユーザへ表示させるための処理を行ってもよい。
ステップS1110では、画像修正部10F22は、出力画像を出力するための処理を行う。出力画像を出力するための処理は、例えばステップS1109で処理された全天球画像を出力画像として出力する処理、またはステップS1108で処理された出力画像を出力する処理である。
また、出力画像は、例えばマスク画素について非マスク画素と境界になる数画素を修正する処理でもよい。例えば、マスク画素のうち、非マスク画素と二画素のマスク画素を修正し、他のマスク画素は画像処理装置2に入力されたデータを用いるとしてもよい。各フレームで二画素ずつ処理を行うことで、ユーザは修正箇所に指定した箇所が徐々に修正されていく様子を画像で見ることができる。
図22は、本発明の一実施形態に係る全天球画像の一例を説明する図である。
図22で示す例えば画像の下側に撮影されている人の手をマスク対象の被写体63とする。
図22で示す画像を出力画像、マスク対象の被写体63をマスクする領域として指定した場合で、図11のステップS1109の処理が行われた全天球画像を出力する場合を例に説明する。
図23は、本発明の一実施形態に係る全天球画像へ反映する処理による効果の一例を説明する図である。
図23で示すように全天球画像へ反映する処理によって、出力画像は、マスク対象の被写体63が削除され、かつ、マスク対象の被写体63が撮影されていた範囲に自然な画像が出力されるように画像を修正することができる。
図24は、本発明の一実施形態に係る類似度に基づく処理を行う前の出力画像の一例を説明する図である。
図24は、図22の全天球画像を画像処理装置2に入力し、ユーザが図11のステップS1102で、マスク対象の被写体63が撮影された範囲、すなわち図22の全天球画像の画像下半分あたりを出力範囲と指定した場合で修正する前の出力画像の一例である。
図24で示すように、修正する前の出力画像は、マスク対象の被写体63が撮影されている。
図25は、本発明の一実施形態に係る類似度に基づく処理の効果の一例を説明する図である。
図25で示すように、出力画像は、マスク対象の被写体63が削除され、かつ、マスク対象の被写体63が撮影されていた範囲に自然な画像が出力されるように画像を修正することができる。
よって、撮影システム10は、撮影された画像において、一部の被写体を自然な画像が出力されるように画像の修正をすることができる。
<第2実施形態>
第2実施形態は、第1実施形態の撮影システム10、撮影装置1、および画像処理装置2を用いる。したがって、撮影システム10、撮影装置1、および画像処理装置2の説明は省略する。
第2実施形態は、第1実施形態の図8で説明した全体処理を行う。第2実施形態は、図11の画像処理装置による処理が第1実施形態と異なる。
図26は、本発明の一実施形態に係る第2実施形態の画像処理装置による処理の一例を説明するフローチャートである。図26は、第1実施形態の図11と同様の処理については同様の処理名、および符号を付しており、説明を省略する。図26は、ステップS2601の処理と、ステップS2602の処理と、が加わっている点が第1実施形態の図11の処理と異なる。
ステップS2601の処理では、画像修正部10F22は、マスク領域割合判定処理を行う。
図27は、本発明の一実施形態に係る第2実施形態のマスク領域割合判定処理の一例を説明する図である。
マスク領域割合判定処理は、出力範囲に指定された画素数に対してマスク画素94が占める割合を計算し、割合が所定の値以上である場合、マスクする領域が所定の割合以上と判断する処理である。
以下、出力範囲に指定された画素数が100pixel、および割合を50%と所定の値とした場合を例に説明する。
図27(a)は、マスクする領域が所定の割合以上と判断される設定の一例である。例えばマスクデータ9で指定された範囲が70pixelである場合、マスク画素94が占める割合は、70%と計算される。図27(a)の場合、画像修正部10F22は、マスク画素94が占める割合が所定の値50%以上であるため、マスクする領域が所定の割合以上と判断し(ステップS2601でYES)、ステップS2602に進む。
図27(b)は、マスクする領域が所定の割合未満と判断される設定の一例である。例えばマスクデータ9で指定された範囲が10pixelである場合、マスク画素94が占める割合は、10%と計算される。図27(b)の場合、画像修正部10F22は、マスク画素94が占める割合が所定の値50%未満であるため、マスクする領域が所定の割合以上ではないと判断し(ステップS2601でNO)、ステップS1108に進む。
なお、所定の値は、ユーザが任意に設定できる値である。
ステップS2602の処理では、画像修正部10F22は、出力範囲を拡大する処理を行う。
図28は、本発明の一実施形態に係る第2実施形態の出力範囲を拡大する処理の一例を説明する図である。
出力範囲を拡大する処理は、出力範囲を拡大し、マスク画素94が占める割合を低下させるための処理である。
出力範囲を拡大する処理は、図28で示すように図13の投影方位指定データで示される中心座標4に基づいて決定する出力範囲5に代えて拡大出力範囲51を設定する処理である。例えば、出力範囲を拡大する処理は、ステップS2601の所定の値未満にマスク画素94が占める割合となる画素数を計算し、中心座標4を中心に出力範囲5の縦、および横の範囲を変更して拡大出力範囲51を設定する。
なお、拡大出力範囲51は上記の設定に限られない。例えば拡大出力範囲51は、出力範囲5を左右上下の少なくともいずれか一方に広げた範囲とする設定でもよい。
また、実施形態は、拡大出力範囲51の拡大できる範囲を出力画像の歪みをおさえるために、上限を設定してもよい。
マスク画素94が占める割合を所定の割合未満にすることで、後段の類似度に基づく処理によって出力画像が高画質、かつ、類似度に基づく処理が高速に処理できる。
<第3実施形態>
第3実施形態は、第1実施形態の撮影システム10、撮影装置1、および画像処理装置2を用いる。したがって、撮影システム10、撮影装置1、および画像処理装置2の説明は省略する。
第3実施形態は、第1実施形態の図8で説明した全体処理を行う。第3実施形態は、図11の画像処理装置による処理が第1実施形態と異なる。
図29は、本発明の一実施形態に係る第3実施形態の画像処理装置による処理の一例を説明するフローチャートである。図29は、第1実施形態の図11と同様の処理については同様の処理名、および符号を付しており、説明を省略する。図29は、ステップS2901の処理と、ステップS2902の処理と、が加わっている点が第1実施形態の図11の処理と異なる。
ステップS2901の処理では、画像修正部10F22は、出力画像、および全天球画像の解像度を計算し、出力画像の解像度が全天球画像の解像度より高いか否かを判断する。
出力画像の解像度が全天球画像の解像度より高いと判断された場合(ステップS2901でYES)、画像修正部10F22は、ステップS2902に進む。出力画像の解像度が全天球画像の解像度より高くないと判断された場合(ステップS2901でNO)、画像修正部10F22は、ステップS1103に進む。
解像度は、画素の密度であり、例えば所定の画像を示すために用いる画素数である。
ステップS2902の処理では、画像修正部10F22は、出力範囲を縮小する処理を行う。出力範囲を縮小する処理は、出力画像となる出力範囲で指定される画素数を減らすための処理である。なお、ステップS2902の処理は、出力範囲を縮小する処理に限られない。例えば、出力画像の所定の画素ごとにそれぞれ画素の輝度値を平均し、平均値を輝度値とする一つの画素を生成し、画素数を減らすようにしてもよい。
出力画像の解像度を全天球画像の解像度以下の値にすることで、画質の低下を少なくし、処理時間を短くすることができる。
<第4実施形態>
第4実施形態は、第1実施形態の撮影システム10、撮影装置1、および画像処理装置2を用いる。したがって、撮影システム10、撮影装置1、および画像処理装置2の説明は省略する。
第4実施形態は、第1実施形態の図8で説明した全体処理を行う。第4実施形態は、図11の画像処理装置による処理が第1実施形態と異なる。
図30は、本発明の一実施形態に係る第4実施形態の画像処理装置による処理の一例を説明するフローチャートである。図30は、第1実施形態の図11と同様の処理については同様の処理名、および符号を付しており、説明を省略する。図30は、ステップS3001の処理と、ステップS3002の処理と、が加わっている点が第1実施形態の図11の処理と異なる。
ステップS3001の処理では、画像修正部10F22は、出力画像および全天球画像の解像度を計算し、出力画像の解像度と、全天球画像の解像度と、の差が所定の値以上か否か判断する。
出力画像の解像度と、全天球画像の解像度と、の差が所定の値以上か否かの判断は、出力画像の解像度と、全天球画像の解像度と、が同じ程度の画素数であるか否かの判断である。所定の値は、ユーザによって任意に設定できる値である。
出力画像の解像度と、全天球画像の解像度と、の差が所定の値以上と判断された場合(ステップS3001でYES)、画像修正部10F22は、ステップS3002に進む。出力画像の解像度と、全天球画像の解像度と、の差が所定の値以上ではないと判断された場合(ステップS3001でNO)、画像修正部10F22は、ステップS1103に進む。
解像度は、画素の密度であり、例えば所定の画像を示すために用いる画素数である。
ステップS3002の処理では、画像修正部10F22は、出力範囲を変更する処理を行う。出力範囲を変更する処理は、出力画像の解像度を全天球画像の解像度と同一または近似の値にするための処理である。例えば出力画像の解像度が全天球画像の解像度より高い場合、図29のステップS2902の処理を行う。例えば出力画像の解像度が全天球画像の解像度より低い場合、図26のステップS2602の処理を行う。なお、ステップS3002の処理は、図26のステップS2602の処理、または図26のステップS2602に限られない。例えば、出力画像の解像度が全天球画像の解像度と同一または近似の値になる出力範囲の一辺の長さを計算し、計算された一辺の長さで出力範囲を設定する処理でもよい。
出力画像の解像度を全天球画像の解像度と同一または近似の値にすることで、解像度の落ちた出力を減らすため画像内のエッジ部分の再現が向上する画質の向上、および処理時間を短くすることができる。
<第5実施形態>
第5実施形態は、第1実施形態の撮影システム10、撮影装置1、および画像処理装置2を用いる。したがって、撮影システム10、撮影装置1、および画像処理装置2の説明は省略する。
第5実施形態は、第1実施形態の図8で説明した全体処理を行う。第5実施形態は、図18の類似度に基づく処理のステップS1811の処理が第1実施形態と異なる。
第5実施形態のステップS1811の処理は、出力画像の画素数によってステップS1811の判断条件を変更する。
出力画像の画素数によって判断条件を変更することは、例えば出力画像の画素数が増えるのに伴ってステップS1811で収束したと判断する場合(ステップS1811でYES)となりやすくするように判断条件を変更することである。具体的には、所定の画素数以上の場合、例えば判断条件は、上記(式8)と、上記(式9)と、少なくともどちらかの一方の条件を満たした場合に変更する処理である。なお、判断条件を変更は、適用する式の数を変更するに限られない。例えば、判断条件を変更は、上記(式8)と、上記(式9)と、の閾値を変更するでもよい。
なお、画像処理装置2は、アセンブラ、C、C++、C#、およびJava(登録商標)などのレガシープログラミング言語、またはオブジェクト指向プログラミング言語などで記述されたコンピュータ実行可能なプログラムによって実現されてもよい。プログラムは、ROM、またはEEPROM(Electrically Erasable Programmable ROM)などの記録媒体に格納して頒布することができる。プログラムは、EPROM(Erasable Programmable ROM)などの記録媒体に格納して頒布することができる。プログラムは、フラッシュメモリ、フレキシブルディスク、CD−ROM、CD−RW、DVD−ROM、DVD−RAM、またはDVD−RWなどの記録媒体に格納して頒布することができる。プログラムは、ブルーレイディスク、SD(登録商標)カード、またはMOなど装置可読な記録媒体に格納して、あるいは電気通信回線を通じて頒布することができる。
また、機能の一部または全部は、例えばフィールド・プログラマブル・ゲート・アレイ(FPGA)などのプログラマブル・デバイス(PD)上に実装することができる。または機能の一部または全部は、ASIC(特定用途向集積)として実装することができる。
機能の一部または全部は、PDにダウンロードする回路構成データ(ビットストリームデータ)、回路構成データを生成するためのHDL(Hardware Description Language)などで記述され、PDにダウンロードして実現されてもよい。さらに、機能の一部または全部は、VHDL(VHSIC(Very High Speed Integrated Circuits)HDL)、またはVerilog−HDLなどで記述され、PDにダウンロードして実現されてもよい。
以上、本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。