以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施形態は本発明を限定するものではなく、また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
[実施例1]
本実施例では、文化財のアーカイブを目的とし、被写体である文化財を分割撮影する場合を例に挙げて説明する。分割撮影とは、被写体全体を1枚の撮影画像として撮影するのではなく、被写体を複数の領域に分割し、この分割した領域をそれぞれ撮影することを意味する。また、分割撮影された個々の画像のことを分割画像と呼び、この分割画像を示すそれぞれの画像データのことを分割画像データと呼ぶ。本実施例は、分割撮影して得られた分割画像データを合成して合成画像データを得る例を説明する。
<<装置構成>>
図1は、本実施例における撮影システムの構成を示す図である。図1の撮影システムは、カメラ101、電動雲台102、画像処理装置103を有する。撮像装置本体であるカメラ101が電動雲台102に載置されることによって、電動雲台102の回転によりカメラ101本体をパン(PAN)、チルト(TILT)させて撮影対象物である被写体104を撮影する。画像処理装置103は、カメラ101で撮影して得られた撮影画像データ群を合成処理し、超高解像度画像データを生成する画像処理装置である。また、本実施例では、画像処理装置103は、カメラ101の動作、および電動雲台102の回転動作を制御する制御装置としても機能する。もちろん、画像処理装置と制御装置とが別装置で構成されていてもよい。被写体104は、幅W、高さHの大きさからなり、カメラ101から距離Lの位置に設置されている。
<<明度補正処理の概要>>
図2(a)に、本実施例における撮影システムによって撮影された分割画像の一例を示す。図2(a)は、被写体をx方向に5分割、y方向に3分割撮影した計15枚の分割画像を示す。分割画像間において斜線で示す重複領域が生じる。尚、カメラ101は電動雲台102により、パンおよびチルトをさせながら分割画像データを取得しているので、得られる分割画像データにあおりがかかっている。分割画像データにかかっているあおりは、後述するあおり補正部304によって補正される。あおり補正処理の詳細については、後述する「あおり補正処理の詳細」の章で述べる。尚、電動雲台102が、被写体に対して平行移動する機能を有し、カメラ101は電動雲台102により、平行移動させながら分割画像データを取得してもよい。その場合、あおり補正部304によるあおり補正処理は不要とすることができる。
特許文献1では、図2(b)で示される照明ムラ及び図2(c)で示される周辺減光ムラを補正することで、合成画像データ全体で照明ムラを含まず、かつ、画像データの間のつなぎ目が良好な合成結果を得ている。
図2(b)は、被写体の反射特性が全体に亘り均一(例えば被写体が均一な白色面)であり、かつ、撮影画像データに周辺減光むらがない場合に、撮影時の照明むらによって撮影画像データに発生する輝度むら例を示す。照明むらがある場合、画像データの並びに応じて画像データの輝度が低下するため、合成後の画像データも照明むらを有する画像データになる。
図2(c)は、被写体が均一な白色面であり、かつ、撮影画像データに照明むらが発生しない場合に、レンズ特性に応じて撮影画像データに発生する周辺減光むら例を示す。つまり、撮影画像データのそれぞれの中央部に比べて周辺部の輝度が低下する輝度むらが発生し、重複領域において輝度の不連続が発生する。
図2(d)は、被写体の反射特性が全体に亘り均一(例えば被写体が均一な白色面)であり、かつ特許文献1で開示されている技術により撮影画像データに周辺減光ムラ及び撮影時の照明ムラを低減させた場合を示している。この場合において、ストロボ撮影におけるストロボの発光精度によって撮影画像データに発生するショットムラの例を示す。本実施例における明度補正処理では、このようなショットムラを補正して、補正後の画像データを合成する。これにより、画像データ全体でショットムラを含まず、かつ、画像データの間の繋ぎ目が良好な合成結果を得ることができる。
<<画像処理装置の構成>>
図3は、本実施例における、画像処理装置103の構成を示すブロック図である。本実施例における画像処理装置103は、入力部301、面内ムラ補正部302、明度補正部303、あおり補正部304、合成部305、出力部306、メモリ307を有する。
入力部301は、例えば不図示のUSBやIEEE1394などのシリアルバスを介してカメラ101で撮像された画像データを入力する。面内ムラ補正部302は、入力部301から入力した画像データの面内ムラを補正して面内ムラ補正画像データを生成する。明度補正部303は、面内ムラ補正部302で面内ムラを補正した面内ムラ補正画像データに対して、明度補正処理を行ない、明度補正処理済みの分割画像データである明度補正画像データを生成する。
あおり補正部304は、明度補正部303で生成された明度補正画像データに対して、あおりを補正して平面に射影したあおり補正画像データを生成する。合成部305は、あおり補正部304で補正されたあおり補正画像データを合成して合成画像データを生成する。
出力部306は、合成部305で合成された合成画像データを記録メディアやネットワークに接続されたサーバ装置などに出力する。RAMなどのメモリ307は、画像データなど各種データ、演算処理の途中経過、上記制御情報などを格納するためのメモリである。バス308は、上述の各処理部をつなぐバスである。
尚、画像処理装置の構成については、上記以外にも、様々な構成要素が存在するが、本実施例の主眼ではないので、その説明は省略する。
<<画像合成処理のフローチャート>>
図4は本実施例における画像合成処理を示すフローチャート図である。図4に示すフローチャートは、画像処理装置の不図示のROMやHDDなどに格納されたプログラムをCPUがRAMに一時的に読み出し、実行することでCPUが図3に示す各部として機能することにより実現される。
ステップS401で入力部301は、カメラ101で撮影された分割画像データを入力する。ステップS401では被写体を分割撮影して得られた複数枚の分割画像データを入力する。
ステップS402で面内ムラ補正部302は、ステップS401で入力された分割画像データに対して面内ムラ補正処理を適用して面内ムラ補正画像データを生成する。ステップS402を実施するにあたり、具体的には、特許文献1で開示されている方法を適用することができる。ステップS402の処理を実施することで、図2(d)に示されるように、面内の輝度ムラが解消され、分割画像間のショットムラが存在し得る面内ムラ補正画像データを生成することができる。
ステップS403で明度補正部303は、ステップS402で生成された面内ムラ補正画像データに対して明度補正処理を適用して明度補正画像データを生成する。明度補正処理の詳細については「明度補正処理の詳細」の章で述べる。
ステップS404であおり補正部304は、ステップS403で生成された明度補正画像データに対してあおり補正処理を適用してあおり補正画像データを生成する。あおり補正処理の詳細については、「あおり補正処理の詳細」の章で述べる。
ステップS405で合成部305は、ステップS404で生成された複数のあおり補正画像データを合成して合成画像データを生成する。本ステップを実施するにあたり、具体的には特許文献1で開示されている方法を適用することができる。
ステップS406で出力部306は、合成画像データを画像処理装置103より外部に出力する。なお、ステップS406では、合成画像データを画像処理装置103の内部、すなわち、メモリ307に出力する処理でもよい。
<<明度補正処理の詳細>>
図5は本ステップS403に示した明度補正処理の詳細を示すフローチャート図である。
ステップS501で明度補正部303は、メモリ307に予め記憶されている設定情報と、複数の面内ムラ補正画像データを入力する。そして、設定情報に基づいて基準画像データと基準画像データに隣接する隣接画像データとの2つの画像データを明度補正処理に用いる画像データとして設定する。本実施例において「基準画像データ」とは、明度補正を行なう際の基準となる画像データのことである。本実施例においては、明度補正は隣接する2つの画像データを用いて補正を行なう。このとき、基準画像データの明度に隣接画像データの明度を合わせる補正を行なう。本実施例では、この「基準画像データ」が面内ムラ補正画像データの中で順次伝播していくような処理を行なう。その際に、設定情報に基づいて、「基準画像データ」として、明度補正済みの明度補正画像データを用いるのか、それとも明度補正がされていない面内ムラ補正画像データを用いるのかが決定される。
図6を用いて、設定情報について説明する。図6は被写体をx方向に5分割、y方向に3分割撮影した計15枚の面内ムラ補正画像データを示す。各面内ムラ補正画像データには識別番号が設定されている。設定情報は、基準画像データと隣接画像データとこれらの画像データを用いた明度補正の結果出力される出力画像データ(明度補正画像データ)との対応を識別情報を用いて表したものである。
基準画像データに、明度補正画像データではなく、面内ムラ補正画像データを設定するときの設定情報の記述方法を示す。図6において、識別番号P8が設定されている面内ムラ補正画像データを基準画像データに設定する場合、黒の矢印で示されている識別番号P5が設定されている面内ムラ補正画像データが隣接画像データに設定される。同様に識別番号P7、P9、P11の面内ムラ補正画像データがそれぞれ隣接画像データに設定されることになる。ここでは、識別番号P5の面内ムラ補正画像データが隣接画像データに設定されている例を用いて説明する。設定情報においては、隣接画像データP5に対して明度補正処理が行われて生成された明度補正画像データには、隣接画像データと同じ識別番号P5が設定される。以上のことが設定情報において以下のように表される。
<設定1>
基準画像データ:面内ムラ補正画像データP8
隣接画像データ:面内ムラ補正画像データP5
出力画像データ:明度補正画像データP5
上記の意味は、基準画像データとして面内ムラ補正画像データP8を用いて隣接画像データである面内ムラ補正画像データP5に明度補正処理を行ない、生成された明度補正画像データ(出力画像データ)を明度補正画像データP5と呼ぶということである。
一方、基準画像データに、面内ムラ補正画像データではなく、明度補正画像データを設定するときの設定情報の記述方法を示す。識別番号P5が設定されている明度補正画像データを基準画像データに設定する場合、図6においてP5から矢印が出力されている識別番号P6が設定されている面内ムラ補正画像データが隣接画像データに設定される。同様に、識別番号P2、P4の面内ムラ補正画像データがそれぞれ隣接画像データに設定されることになる。ここでは、識別番号P6の面内ムラ補正画像データが隣接画像データに設定されている例を用いて説明する。隣接画像データP6に対して明度補正処理が行われて生成された明度補正画像データには、隣接画像データと同じ識別番号P6が設定される。以上のことが設定情報において以下のように表される。
<設定2>
基準画像データ:明度補正画像データP5
隣接画像データ:面内ムラ補正画像データP6
出力画像データ:明度補正画像データP6
この例は、基準画像データが、面内ムラ補正画像データではなく明度補正画像データとなっている例である。
以上のように、設定情報には面内ムラ補正画像データを基準画像データとして用いて隣接画像データの明度を補正する設定と、明度補正画像データを基準画像データとして用いて隣接画像データの明度を補正する設定とが含まれるのが特徴である。
図5のステップS501では、明度補正部303はこのような設定情報に基づいて基準画像データと隣接画像データとを選択する。なお、設定情報には、分割画像群の中の基点(出発点)となる画像を基準画像データとする設定が最初にそれぞれ含まれており、その後は図6に示すような矢印の濃い順にそれぞれの設定がなされているものとする。例えば、上記の<設定1>の設定を含む、識別番号P8を基準画像データとする4つの設定が最初に含まれており、その後に<設定2>の設定を含む識別番号P5を基準画像データとする3つの設定が含まれるものとする。ステップS501では、このように複数の設定が含まれる設定情報の中から1つの設定を用いて、基準画像データと隣接画像データとを選択するものとする。
次に、ステップS502で明度補正部303は、ステップS501で選択した、設定情報に設定されている基準画像データと隣接画像データとの2つの画像データの重複領域における画像データの対応点の検出ができたかを判定する。対応点が検出された場合はステップS503へ処理を進め、対応点が検出されなかった場合はステップS504へ処理を進める。
対応点は、基準画像データから検出される複数の特徴点と、隣接画像データから検出される複数の特徴点のうち、2つの画像データの対応する領域から検出された特殊な特徴点である。特徴点を検出する方法および画像データ間の特徴点から対応点を検出する方法としては、非特許文献1(SIFT:Scale Invariant Feature Tracking)を用いることができる。尚、対応点の検出方法は上記に限らず、2つの画像データから対応点を検出できるものならば所望の方法をとることができる。そのような方法として、非特許文献2(SURF:Speeded Up Robust Features)があげられる。
ステップS503で明度補正部303は、ステップS502において検出された対応点に基づいて、基準画像データの明るさに隣接画像データの明るさを合わせる明度補正処理を行ない、明度補正画像データを生成する。複数の対応点Mn(0<nの整数)があるとき、以下の式1に示すように、明度補正推定値Correct1を算出する。
式1において、Sは基準画像データ、Aは隣接画像データ、x、yは画像データ上の座標値、d1・d2・d3・d4は対応点の座標値、m、nはブロック画像データの範囲、bk1は第一のブロック画像データ、bk2は第二のブロック画像データを示す。Cは明度補正係数、Correct3はブロック画像データの差分絶対値和、Correct2はCorrect3が最小になるときの明度補正係数C、Correct1は明度補正推定値であり、Correct2の平均値である。ブロック画像データは対応点の近傍の領域のデータである。
算出された明度補正推定値Correct1を隣接画像データAに適用して以下の式2に示すように明度補正画像データCAを算出する。
このように、明度補正画像データは、基準画像データと隣接画像データとの対応点に基づいて得られた明度補正推定値を隣接画像データに適用することで得られた画像データであり、隣接画像データの明度補正が行なわれた画像データとなる。
一方、ステップS504で明度補正部303は、ステップS501で設定された隣接画像データに隣接する明度補正画像データが存在するか判定する。判定の結果、存在する(明度補正画像データが検出される)場合はS505へ処理を進め、存在しない(明度補正画像データが検出されない)場合はS506へ処理を進める。この処理の詳細については後述する。
ステップS505で明度補正部303は、ステップS504で検出された明度補正画像データを新たに基準画像データとして設定する。そして、ステップS502に戻り、この新たに設定した基準画像データ(明度補正画像データ)を用いて再度ステップS502で対応点の検出ができるか否かの判定を行なう。すなわち、基準画像データとして検出された明度補正画像データを再選択して再度の対応点検出の判定を行なう。
ステップS506で明度補正部303は、基準画像データと隣接画像データとの重複領域に基づいて、明度補正処理を行ない、明度補正画像データを生成する。すなわち、ステップS501で設定された隣接画像データに隣接する明度補正画像データが存在しない場合には、対応点が検出できていないものの、重複領域に基づく明度補正処理を行なうものとする。尚、ステップS506に処理が進んだときには対応点がある明度補正画像データがないということなので、異常終了として処理を終了させてもよいものとする。
ステップS507で明度補正部303は、設定情報に含まれている設定の処理手順が全て行なわれたを判定する。処理手順が全て行なわれていたら処理を終了して、行なわれていなければステップS501へ処理を進める。
以上が図5で示される処理フローチャート図の処理の説明である。ここで、図7を用いてステップS502、S504およびS505の処理の説明を補足する。図7は図6の一部の面内ムラ補正画像データ(識別番号P5、P6、P8、P9が設定される画像データ)を示している。
ステップS502において、識別番号P6が設定されている面内ムラ補正画像データについては下記の設定がなされているものとする。従って、明度補正部303は基準画像データである明度補正画像データP5と隣接画像データである面内ムラ補正画像データP6との間の重複領域における対応点を検出することを試みる。
<設定3>
基準画像データ:明度補正画像データP5
隣接画像データ:面内ムラ補正画像データP6
出力画像データ:明度補正画像データP6
しかし、ここではステップS502において明度補正画像データP5と面内ムラ補正画像データP6との間には対応点が検出されないとする。そこで、ステップS504において明度補正部303は、隣接画像データである面内ムラ補正画像データP6と対応点を取りうる画像データを再検索する。例えば、設定情報には図6に示すような各面内ムラ補正画像データの隣接関係を示す情報が含まれており、明度補正部303は、隣接関係を示す情報から面内ムラ補正画像データP6に隣接する面内ムラ補正画像データを特定する。そして、明度補正部303は、これまで処理した設定情報の設定を参照して、その特定した面内ムラ補正画像データを示す識別番号が出力画像データに含まれているものがあるかを判定することで再検索を行なう。ステップS505においては、明度補正画像データP9が再検索により検出されているものとする。そこで、明度補正部303は、設定情報に含まれる上記の<設定3>を以下の<設定4>のように書き換える。
<設定4>
基準画像データ:明度補正画像データP9
隣接画像データ:面内ムラ補正画像データP6
出力画像データ:明度補正画像データP6
以上のように設定情報を書き換えたので、その後のステップS502において、改めて新たな基準画像データである明度補正画像データP9と隣接画像データである面内ムラ補正画像データP6との間の重複領域における対応点を検出することを試みる。
このように、本実施例では、予め設定情報に記述されている2つの画像データで対応点が検出されない場合に、対応点を検出し得る画像データを用いて対応点の検出を試みる。
<<あおり補正処理の詳細>>
次に、ステップS404のあおり補正の詳細について説明する。あおり補正は、補正対象の被写体104のサイズ、カメラ101と被写体104との距離、カメラ101のセンササイズ、焦点距離を用いる。まず、分割画像データImage()の生成過程は以下の式3で近似できる。
ここで、 Pos(x,y,z)は被写体104の3次元的な位置を示しており、被写体のサイズやカメラとの距離から決定する。Viewは、視点変換行列であり、カメラ101の位置、回転角度情報を示す。Projは、3次元から2次元への射影行列であり、カメラのセンササイズと焦点距離から決定する。Screen()は、座標系を変換するのに用いられる。Xo、Yoは二次元的な画素配置である。一方、被写体を正面から撮影した画像データImageV()の生成過程も以下の式4で近似できる。
ViewVは、視点変換行列であり、被写体を正面から撮影した際のカメラ位置、撮影方向を示す。後のパラメータは、式3と同じである。ここで、式3と式4とをマージすることにより、変換式ConvView()を算出できる。
これによって被写体を正面から撮影した画像データ、すなわち、あおり補正後の画像データを得ることができる。あおり補正処理の結果を図8に示す。図8(a)は分割画像データで、両端の画像データはあおりがついた状態で撮影され、台形に歪んでいるが、中央の画像データは正面から撮影されており、歪みがない。図8(b)があおり補正後の画像データであり、両端の画像データの台形歪みが解消されている。
<<実施例1の効果>>
以上説明したように、本実施例では分割画像データにショットムラが存在する場合において、撮影画像データのショットムラを補正したのちに、補正後の画像データを合成する。これにより、画像データ全体でショットムラを含まず、かつ、画像データの間の繋ぎ目が良好な合成結果を得ることができる。このように、隣接する分割画像データ間の不自然な境界線模様を抑圧することができるので、より好適に合成した画像データの視聴が可能となる。
尚、本実施例では、撮影画像データの画素値から明度補正推定値を算出する例を説明した。しかし、sRGBやAdobeRGBなど標準的なRGB空間の画像データであれば、画像データをCIELab値やCIEXYZ値などに変換して、CIELab値やCIEXYZ値などから明度補正推定値を算出してもよい。なお、CIEXYZ値から得た明度補正推定値を被写体の画像データに適用する場合、CIEXYZ値に変換した被写体の画像データに明度補正処理を施し、明度補正処理後のCIEXYZ値をRGB値に変換する。
尚、本実施例では、カメラ101は電動雲台102に載置されて、カメラ101をパン・チルトさせながら分割画像データを取得した。しかし、本実施例の画像処理装置は上記のシステムの構成に限定されることなく、分割画像データ間で重複領域が生じる他の撮影方法により取得された分割画像データに対して適応することができる。そのような撮影方法にパノラマ画像データを生成するためのパノラマ撮影方法があげられる。
[実施例2]
本実施例では、分割画像データに基準となる画像データと他の画像データとの距離情報を用いて明度補正を行なう。これにより実施例1よりも高精度な明度補正が可能となる。
本実施例においても図1で示される撮影システムを用いて分割画像データを取得する。取得された分割画像データは、図2(a)に示されるような構成を持つ。ただし、本実施例では、説明の便宜上、図2(a)に示すような、被写体をx方向に5分割、y方向に3分割撮影した計15枚の分割画像ではなく、被写体をx方向に5分割、y方向に6分割撮影した計30枚の分割画像を用いるものとする。また、画像処理装置103によって行われる画像処理は、図4に示される処理フローチャートに沿って行われる。本実施例では、図4に示される明度補正処理(S403)において行われる処理を中心に説明する。以下では、実施例1と重複する内容は説明を省略して、実施例2における特有の構成・処理についてのみ説明を行なう。
<<分割画像データ間の補正処理における距離情報を用いる効果>>
図9は本実施例により得られる効果を示す模式図である。図9(a)は、本実施例において入力される5×6の画像データ配列において、図中のP15で示される画像データの位置(r3行c4列目の位置)を基点(出発点)として、距離情報を用いずに経路設定した場合の処理経路を示している。実施例1で説明したように、基準画像データが基点の分割画像データから、順次変更されながら明度補正処理が行なわれる。この基準画像データが順次変更される様子を本実施例では経路として説明する。尚、距離情報の詳細については「距離情報算出部の詳細」で後述する。図9(b)は、図9(a)と同じ条件で距離情報を用いて経路設定した場合の処理経路を示している。
図9(a)では、距離情報を用いないため処理経路が長く最長で9回の処理になっている(P15⇒P9、P9⇒P3、P3⇒P2、P2⇒P1、P1⇒P0、P0⇒P6、P6⇒P12、P12⇒P18、P18⇒P24の9回)。これに対して、図9(b)では、距離情報を用いるため処理経路を短く最長で5回の処理になっている(P15⇒P14、P14⇒P13、P13⇒P12、P12⇒P18、P18⇒P24の5回)。
処理経路が長いと、補正処理において発生した補正の累積誤差が大きくなる。例として画像データのビット深度が8であり、中間調(127/255)の輝度値を補正する場合をあげる。一回の補正処理において補正誤差CE=0.1%が発生すると、図9(a)で行われる9回目の補正処理において伝播された累積誤差AEは約0.9%となる。また、補正量CAが5%であるとすると、出力される画素値OIは1階調以上ずれる。
AE=(1+CE)9≒1.009=0.9% (式6)
OI=127×(1+CA±CE)9≒133.35±1.14(階調) (式7)
処理経路が短いと、補正処理において発生した補正の累積誤差が小さくなる。上と同じ例をあげると、図9(b)で行われる5回目の補正処理において伝播された累積誤差AEは約0.5%となる。また、出力される画素値OIのずれは1階調未満となる。
AE=(1+CE)5≒1.005=0.5% (式8)
OI=127×(1+CA±CE)5≒133.35±0.63(階調) (式9)
このように分割画像データ間の補正処理において、距離情報を用いて経路設定することで処理精度を向上させることが可能である。
<<明度補正処理(S403)の詳細>>
図10は本実施例における画像処理装置103の構成を示す図である。図2で説明した実施例1と同様の構成については同じ符号を付し、説明を省略することとする。本実施例における画像処理装置103は、実施例1の構成に加えて、基点画像位置設定部1001、距離情報算出部1002、処理コマンド生成部1003を有する。また、本実施例の明度補正部1004は、距離情報に基づいて生成された処理コマンドに基づいて明度補正を実行する。
基点画像位置設定部1001は、複数の分割画像データのうち、処理経路を設定する際の基点(出発点)となる基点画像位置を設定する。なお、この分割画像データは、実施例1と同様に面内ムラ補正が行なわれた画像データのことであるが、ここでは簡略化のため、単に分割画像データとして説明を行なうものとする。基点画像位置設定部1001は、分割画像データの配列数から、中心に位置する画像データの位置を基点画像位置に設定する。具体的には、5×6の画像データ配列が入力される場合、r3行c3列目のP14の位置(あるいはr3行c4列目のP15の位置)の画像データの位置を基点画像位置に設定する。尚、上記の方法以外にも、メモリ307に予め記憶されている基点画像位置を設定してもよいものとする。また、図3において不図示のユーザー入力部から、ユーザーによって入力される基点画像位置を設定してもよいものとする。
距離情報算出部1002は、入力される基点画像位置、分割画像データの行列のサイズ、及び分割画像データの重複領域における対応点の数とに基づいて距離情報を算出する。本処理部が算出する距離情報により、後段の処理コマンド生成部1003において、処理経路が構築される。この構築される処理経路は、基本的には基点画像位置からの距離に基づくが、対応点がなく補正処理ができない経路は回避される。そのように構築された処理経路によって、明度補正部1004は、明度補正処理を確実に実行することができる。
処理コマンド生成部1003は、入力される基点画像位置と距離情報とに基いて処理経路を算出して、処理経路に基づいて明度補正処理を行なうための処理コマンドを生成する。尚、処理コマンドの詳細については「処理コマンド生成部の詳細」にて後述する。
明度補正部1004は、入力される処理コマンドに基づいて、明るさの基準となる基準画像データと基準画像データに隣接する隣接画像データとを入力して、明度補正処理を行ない、基準画像データの明るさに基づいて、隣接画像データの明るさを補正する。尚、明度補正処理の詳細については「明度補正部の詳細」にて後述する。
以下では、距離情報算出部1002、処理コマンド生成部1003、明度補正部1004の各処理部の詳細を説明する。
<<距離情報算出部の詳細>>
図11は本実施例における距離情報算出部1002における処理の例を示すフローチャート図である。なお、本実施例におけるフローチャートの処理についても、実施例1と同様にRAMに読み出されたプログラムをCPUが実行することで実現されるものとする。
ステップS1101において距離情報算出部1002は、距離情報の生成処理を行なう。すなわち、入力される基点画像位置と、分割画像データの行列のサイズとに基づいて距離情報を生成する。
ステップS1102において距離情報算出部1002は、ステップS1101で生成された距離情報の補正処理を行なう。すなわち、入力される分割画像データの重複領域における対応点の数に基づいて、生成された距離情報を補正する。
以下では、距離情報の生成処理S1101、距離情報の補正処理S1102の各処理の詳細を説明する。
<<距離情報の生成処理(S1101)の詳細>>
図12は本実施例における距離情報の生成処理を示すフローチャート図である。図13は図12で示される処理フローの各処理の処理内容を示す模式図である。図12と図13を用いて距離情報の生成処理を説明する。
ステップS1201で距離情報算出部1002は、入力される分割画像データの行列のサイズに基づいて隣接情報を算出する。分割画像データの行例のサイズとは、本実施例では、前述のように5×6の画像データ配列のことである。隣接情報は、分割画像データ同士の隣接状態を示すものである。図13(a)のように、ある画像データの上下左右に位置する画像データ同士は隣接して、それ以外は隣接しない状態を表す。例として、図中のP15で示される画像データの位置(r3行c4列目の位置)は、次のそれぞれの画像データの位置に隣接している。すなわち、P9(r2行c4列目の位置)、P14(r3行c3列目の位置)、P16(r3行c5列目の位置)、P21(r4行c4列目の位置)で示されるそれぞれの画像データの位置に隣接している。これを図中では、P15←→P9、P15←→P14、P15←→P16、P15←→P21、のように両矢印で隣接している状態を表す。
なお、図13(a)で表される隣接情報を表1で示される隣接行列でも表すことができる。表1の縦方向が行を、横方向が列を表している。隣接行列のサイズは、5×6の画像データ配列の場合(5×6)×(5×6)=30×30になる。表1において、行列の要素が1で表される、行で特定される画像データと列で特定される画像データとが隣接している状態であり、∞で表されるものが隣接されていない状態を表してる。例として、r3−c4行目の各要素のうち、r2−c4列目の要素、r3−c3列目の要素、r3−c5列目の要素、r4−c4列目の要素は、1でありそれ以外∞である。これは図13(a)におけるP15で示される画像データの位置(r3行c4列目の位置)は、P9、P14、P16、P21で示されるそれぞれの画像データの位置に隣接していることに対応している。尚、P9はr2行c4列目の位置であり、P14はr3行c3列目の位置であり、P16はr3行c5列目の位置であり、P21はr4行c4列目の位置である。つまり、r3行c4列に位置するP15の画像データに注目すると、表1のr3−c4行目の各要素のうち、1の値が入っている列の列名で特定される画像データが、このP15の画像データと隣接していることを示している。つまり、表1は、行で特定される画像データと、列で特定される画像データとが隣接しているかを示している表である。
表1に示すような隣接行列は以下の式10で求めることができる。式10において、隣接行列adj_mat(m,n)はm行n列目の隣接行列の要素値、i1、i2は分割画像データの行列のサイズの行数、j1、j2は分割画像データの行列のサイズの列数、&&は論理積、||は論理和をそれぞれ表す。本実施例では、隣接行列のサイズは30×30であり、m、nは0≦(m、n)<30での範囲で値を取り得る整数である。また、i1、i2は式10で求められるものであるが、0から始まる隣接行列の要素に対応して0≦(i1、i2)<4での範囲で値を取り得る整数である。同様に、j1、j2も0≦(j1、j2)<5での範囲で値を取り得る整数となる。
i1=n/分割画像データの行列の列のサイズ(余りは切り捨て)、
i2=m/分割画像データの行列の列のサイズ(余りは切り捨て)、
j1=mod(n、分割画像データの行列の列のサイズ)、
j2=mod(m、分割画像データの行列の列のサイズ) (式10)
例えば、式10に基づいて表1のr3−c4行(m=15)のうちの、r2−c4列(n=9)の要素を例に挙げる。このとき、i1は1、i2は2、j1は3、j2は3が得られる。このことは、j1とj2が同じである、つまり、列が同じであるものの、i1とi2とが1つずれている、すなわち、行が1つ異なっていることを意味している。従って、このadj_mat(15、9)の場合には、同列でかつ行が1つ異なっているので隣接していることを示す「1」の値が要素に格納されることになる。
次に、ステップS1202で距離情報算出部1002は、基点画像位置設定部1001で設定された基点画像位置を入力し、入力された基点画像位置と分割画像データの行列サイズとに基づいて各画像データの重み係数WCを算出する。重み係数は、分割画像データと同じサイズを有する行列である。図13(b)は、図中のP15で示される画像データの位置(r3行c4列目の位置)に、基点画像位置を設定した際に算出される重み係数を表している。各画像データの重み係数は、基点画像位置からのL1距離に基づいて設定される。ここで本実施例におけるL1距離は、ある分割画像データの位置とその分割画像データに上下左右のいずれかに隣接する分割画像データの位置との距離を1と定義する。重み係数WCを算出方法の例をあげる。図中のP15(r3行c4列目の位置)の重み係数WCは、基点画像位置からのL1距離が0なのでWC(r3、c4)=0に設定される。図中のP8(r2行c3列目の位置)の重み係数は、P15(r3行c4列目の位置)とP8(r2行c3列目の位置)とのL1距離が2なのでWC(r2、c3)=2に設定される。図13(b)に示される他の重み係数についても上と同様の方法で算出される。
ステップS1203で距離情報算出部1002は、ステップS1201で求めた隣接情報とステップS1202で求めた重み係数とに基づいて距離情報を算出する。図13(c)を用いて本処理ステップの処理内容を説明する。図中のP15で示される画像データの位置(r3行c4列目の位置)と、P9で示される画像データの位置(r2行c4列目の位置)の場合を例に挙げる。この二つの画像データは隣接しており、またP15の重み係数は0、P9の重み係数は1である。このため、当該部分(この二つの画像データ間)の距離情報値は2つ画像データの位置のそれぞれの重み係数の和の1と設定する。他の部分の距離情報値についても上と同様の方法で設定される。図13(c)と同じ状態を以下の表2で示される距離行列で表すことができる。距離行列のサイズは、隣接行列のサイズと同じで5×6の画像データ配列の場合(5×6)×(5×6)=30×30になる。表2において、行列の要素が1以上で表されるものが重み係数によって距離情報値が算出されている状態であり、∞で表されるものが距離情報値が算出されていない状態を表してる。
表2に示すような距離行列は以下の式11で求めることができる。式11において、dst_mat(m,n)はm行n列目の距離行列の要素値、WCは重み係数をそれぞれ表す。それ以外の記号は式10と同じである。
例えば、前述のように表2のr3−c4行(m=15)のうちの、r2−c4列(n=9)の要素を例に挙げる。このとき、前述のように、i1は1、i2は2、j1は3、j2は3となる。なお、i1、i2、j1、j2は、前述のように0から始まるので重み係数に合わせるようにそれぞれ1を加えると、WC(2、4)+WC(3、4)となるので、r2行目c4列目の重み係数の1とr3行目c4行目の重み係数の0とを加えた値の1が、r3−c4行(m=15)のうちの、r2−c4列(n=9)の要素に設定されている。
<<距離情報の補正処理(S1102)の詳細>>
次に、このようにして算出された距離情報を補正するステップS1102の処理の詳細を説明する。図14は本実施例における距離情報の補正処理を示すフローチャート図である。図15は図14で示される処理フローの処理内容を補足説明するための模式図である。図14と図15を用いて距離情報の補正処理を説明する。
図14の処理においては、距離情報算出部1002は、ステップS1101で算出された距離情報のうちの各要素を1つずつ抽出して順次処理を行なう。
ステップS1401で距離情報算出部1002は、隣接情報のうちの、処理対象の要素に対応する2つの画像データを取得する。隣接行列adj_mat(m,n)=1のとき、式10に従い、i1、i2、j1、j2を算出して、分割画像データの行列から、I1(i1、j1)、I2(i2、j2)の2つの画像データを取得する。例えば、前述のようにm=15、n=9の場合には、i1は1、i2は2、j1は3、j2は3となる。i1、i2、j1、j2は、前述のように0から始まるので、分割画像データの行列に合わせるようにそれぞれ1を加えると、r3行目c4列目の画像データと、r2行目c4列目の画像データとの2つの画像データを取得することになる。尚、画像データを取得するために、隣接行列の代わりに距離行列を用いてもよい。その場合、距離行列dst_mat(m,n)≠∞のとき、式10に従い、i1、i2、j1、j2を算出して、分割画像データの行列から、I1(i1、j1)、I2(i2、j2)の2つの画像データを取得する。尚、m、nの組み合わせは本処理ステップを行なう度に更新して、1つの組み合わせに対して本処理ステップを適用するのは1回になるように制御されるものとする。
ステップS1402で距離情報算出部1002は、取得した2つの画像データI1(i1、j1)、I2(i2、j2)の重複領域における画像データの対応点を検出する。対応点を検出する方法としては、実施例1で説明したものと同様であるので、ここでの説明は省略する。
ステップS1403で距離情報算出部1002は、ステップS1402で検出した対応点の数に基づき、評価値を算出する。図15(a)は、入力される分割画像データの行列のうち、P13(r3行c2列目の位置)、P19(r4行c2列目の位置)、P20(r4行c3列目の位置)に対応する画像データを表している。このとき、P13とP19に対応する画像データの重複領域では、対応点が検出されていないものとする。このため、評価値EV(r3−c2、r4−c2)=0と算出する。また、P19とP20に対応する画像データの重複領域では対応点(黒丸で図示)が9つ検出されているものとする。このため、評価値EV(r4−c2、r4−c3)=9と算出する。図15(b)は、算出される全ての評価値EVを示している。このように評価値EVは、ステップS1403の処理を繰り返し行なうことで距離情報に対応する数だけ算出される。
ステップS1404で距離情報算出部1002は、ステップS1403で算出した評価値に基づき、距離情報を補正する。以下の式12のように、距離行列dst_matは、評価値EVに基づき補正される。
つまり、式12によれば、距離情報の要素である2つの画像データ間で対応する対応点が検出されない場合、その距離情報を無効とする処理を行なう。なお、式12では対応点が全く検出されない場合にその距離情報を無効とする処理を行う例を示したが、所定の閾値を設け、検出された対応点の数が所定の閾値以下の場合にその距離情報を無効とする処理を行ってもよい。
ステップS1405で距離情報算出部1002は、距離情報の全要素について、上のステップS1401からS1404までの処理を行なったか判定する。全要素について処理を行なっていれば終了して、行なっていなければステップS1401へ処理を進める。
図15(c)は、距離情報の補正処理によって補正された距離情報を表している。EV(r3−c2、r4−c2)=0と算出されているので、r3行c2列目とr4行c2列目に対応する距離情報は∞に補正され、図中では距離情報値が算出されていない状態になっている。また、表3は距離情報の補正処理によって補正された距離行列である。図15(c)に対応して、r3−c2行のr4−c2列の要素と、r4−c2行のr3−c2列の要素とが∞に補正される。
以上のように、距離情報の補正処理では、画像データの対応点の数に基づいて、予め算出されている距離情報を補正を行なう。これにより後述する処理コマンド生成部にて処理経路を生成する際に、対応点が検出できない処理経路を回避することが可能になる。
<<処理コマンド生成部の詳細>>
次に、処理コマンド生成部1003の処理について説明する。図16は本実施例における処理コマンド生成処理を示すフローチャート図である。ステップS1601で処理コマンド生成部1003は、入力される基点画像位置と距離情報とに基づいて処理経路を生成する。ステップS1602で処理コマンド生成部1003は、ステップS1601で生成した処理経路に基づいて、明度補正処理を実行するための処理コマンドを生成する。以下では、各処理の詳細を説明する。
<<処理経路の生成処理(S1601)の詳細>>
図17は本実施例における処理経路の生成処理を示すフローチャート図である。図18は図17で示される処理フローの処理内容を補足説明するための模式図である。図17と図18を用いて処理コマンドの生成処理を説明する。
ステップS1701で処理コマンド生成部1003は、基点画像位置をm1とするとき、m1のアクセス状態をアクセス済みに設定して、他の画像位置は全て未アクセスに設定する。具体的には、used(m=m1)=trueかつused(m≠m1)=falseと設定する。例えば、図18に示す基点画像位置がr3行目c4行目のP15である場合を考える。このとき、表3のr3−c4行に対応する、used(15)=trueが設定されることになる。尚、アクセス状態はアクセス済み(used(m)=true)、未アクセス(used(m)=false)の2つの状態があるものとする。
ステップS1702で処理コマンド生成部1003は、距離情報のうち、処理対象の要素に対応する2つの分割画像データにおいて、一方がアクセス済みに設定されていて、他方が未アクセスに設定されている距離情報を探索する。そして、そのうちの最小の距離情報を取得する。本ステップの最初の処理では、基点画像位置の画像データと、基点画像位置に隣接する画像データとが探索され、そのうちの最小の距離情報が取得される。なお、最小の距離情報が複数ある場合には、本ステップではそのうちの1つが取得され、その後のS1705を経て再度の本ステップの処理で他の最小の距離情報が取得されるものとする。本ステップにおいては、具体的には、used(m)=trueかつused(n)=falseとなる距離情報dst_mat(m、n)を検出する。検出したもののうち、min_cost=argmin(dst_mat(m、n))が算出されるときのdst_mat(m=m2、n=n2)を算出する。
ステップS1703で処理コマンド生成部1003は、ステップS1702で算出された距離情報dst_mat(m=m2、n=n2)、アクセス済み番号m2、未アクセス番号n2に基づいてグラフを作成する。
graph(i).src=m2
graph(i).dst=n2
graph(i).cost=dst_mat(m=m2、n=n2)(式13)
上記は、m2で特定される画像データからn2で特定される画像データへのグラフが作成されるとともに、距離情報も併せて配列に格納することを表している。式13において、iは配列番号であり、初期値は0で、本処理ステップに入る度に1ずつ増加するものとする。
ステップS1704で処理コマンド生成部1003は、未アクセス番号n2をアクセス済みに設定する。具体的には、used(n=n2)=trueと設定する。
ステップS1705で処理コマンド生成部1003は、全ての未アクセスの分割画像データがアクセス済みに設定されたかを判定して、全てアクセス済みに設定されれば終了して、未アクセスが残っていればステップS1702に処理を進める。
以上の処理により生成されたグラフは、基点画像位置から距離情報値が小さい順に結ばれた処理経路となる。図18(a)は、距離情報を補正しない(距離情報の補正処理を行なわない)場合に生成される処理経路の模式図を示している。一方、図18(b)は、距離情報を補正した場合に生成される処理経路の模式図を示している。二つの図を見比べると、どちらも基点画像位置から距離情報が近い順に処理経路が生成されることがわかる。従って、処理経路を短くすることができるので、累積誤差を削減することができる。また、図18(b)では、対応点が検出されないr3−c2、r4−c2の経路を避けて処理経路が生成されていることがわかる。この処理経路を用いることにより、対応点を用いた明度補正処理が確実に行なえるようになる。
<<処理コマンドの生成処理の詳細>>
次に、ステップS1602の処理コマンドの生成処理の詳細な処理を説明する。図19は本実施例における処理コマンドの生成処理を示すフローチャート図である。なお、本実施例では、処理コマンドとして説明を行なうが、この処理コマンドの集まったものが実施例1で説明した設定情報に対応するものである。
ステップS1901で処理コマンド生成部1003は、ステップS1601で生成されたグラフから配列番号iの小さい順にグラフの要素graph(i)を取得する。配列番号iの初期値は0とする。すなわち、基点画像位置から近い順にグラフの要素を取得する。
ステップS1902で処理コマンド生成部1003は、ステップS1901で取得したグラフから基準画像データの番号m3と隣接画像データの番号n3を取得する。具体的には、取得したグラフgraph(i)において、m3=graph(i).src、n3=graph(i).dstのように、m3とn3とを取得する。
ステップS1903で処理コマンド生成部1003は、ステップS1902で取得した基準画像データの番号m3と、基点画像位置m1とが一致するかどうか判定する。一致するならS1904へ処理を進めて、一致しないならS1905へ処理を進める。この判定処理は、実施例1で説明したような基準画像データを順次伝播させる際に、明度補正画像データを基準画像データとして用いるために行なうものである。すなわち、基準画像データが基点画像位置に位置する画像データでなければ、明度補正画像データを基準画像データとして用いるためである。
ステップS1904で処理コマンド生成部1003は、基準画像データの番号m3に基づき、基準画像データへのパスを取得する。取得したパスは第1のパスとして一時的に記憶するものとする。
ステップS1905で処理コマンド生成部1003は、基準画像データの番号m3に基づき、明度補正画像データへのパスを取得する。取得したパスは第1のパスとして一時的に記憶する。これらの第1のパスは、実施例1の設定情報で説明した「基準画像データ」を表す画像データへのアクセスパスを示すものである。すなわち、明度補正の際に「基準画像データ」として用いる画像データのパスのことである。このように、第1のパスは基点となる分割画像データ、または、基点となる分割画像データ以外の分割画像データの明度補正画像データが含まれる。
ステップS1906で処理コマンド生成部1003は、隣接画像データの番号n3に基づき、隣接画像データへのパスを取得する。取得したパスは第2のパスとして一時的に記憶する。また、隣接画像データの番号n3に基づき、明度補正画像データへのパスを取得する。取得したパスは第3のパスとして一時的に記憶する。第2のパスは、実施例1の設定情報で説明した「隣接画像データ」を表す画像データへのアクセスパスを示すものである。第3のパスは、実施例1の設定情報で説明した「出力画像データ」を表す画像データへのアクセスパスを示すものである。なお、ステップS1905に処理が進んだ場合には、基準画像データを表す第1のパスとして明度補正画像データが用いられることになる。第3のパスは、このステップS1905での処理において用いられることになる。すなわち、ステップS1905では、今回のステップS1905以前にステップS1906の処理で取得され、後述するステップS1907で生成された処理コマンドの第3のパスを参照して第1のパスを取得することになる。
ステップS1907で処理コマンド生成部1003は、第1のパス、第2のパス、第3のパスに基づいて処理コマンドを生成する。具体的には処理コマンドcommand(i)=” [コマンド名] [第1のパス] [第2のパス] [第3のパス] ”という文字列を生成する。生成した文字列は一時的に記憶する。配列番号i=0の場合の具体例を挙げる。コマンド名は”明度補正”である。第1のパスは”C:¥data015.bmp”である。 第2のパスは”C:¥data009.bmp”である。第3のパスは”C:¥data_correct_009.bmp”である。この場合、command(0)=”明度補正 C:¥data015.bmp C:¥data009.bmp C:¥data_correct_009.bmp”となる。なお、data015は、図18のP15の画像データ(面内補正画像データ)を表しており、data_correct_009は、図18のP9の明度補正画像データを表している。
ステップS1908で処理コマンド生成部1003は、入力されるグラフの要素を全て参照したかを判定する。判定の結果、全て参照したなら終了して、全て参照していないならステップS1901へ処理を進める。
以上の処理ステップを行なうことで、図18(b)に示されるような処理経路となるように、処理コマンドが生成される。
<<明度補正部の詳細>>
次に、本実施例における明度補正部1004の詳細を説明する。本実施例における明度補正部1004は、実施例1で説明した明度補正部303と同様の処理を行なうことが可能であるが、ここでは本実施例で説明した処理コマンドに応じた処理を説明する。図20は本実施例における明度補正部1004の生成処理を示すフローチャート図である。
ステップS2001で明度補正部1004は、処理コマンド生成部1003で生成された処理コマンドから配列番号iの小さい順に取得される、処理コマンドの要素command(i)から基準画像データと隣接画像データを入力する。配列番号iの初期値は0である。具体的には、配列番号i=0のとき、ステップS1907で生成したcommand(0)=”明度補正 C:¥data015.bmp C:¥data009.bmp C:¥data_correct_009.bmp”を取得する。取得したものから第1のパス”C:¥data015.bmp”、および 第2のパス”C:¥data009.bmp”を取得する。第1のパスに基づいて基準画像データを入力して、第2のパスに基づいて隣接画像データを入力する。
ステップS2002で処理コマンド生成部1003は、基準画像データと隣接画像データの2つの画像データの重複領域における画像データの対応点を検出する。対応点の検出については実施例1で説明した通りである。尚、本処理ステップで対応点を検出せずに、S1402で検出した対応点のうち、本処理ステップで用いる基準画像データと隣接画像データに対応する対応点を入力するようにしてもよいものとする。
ステップS2003で明度補正部1004は、ステップS2002において検出された対応点に基づいて、基準画像データの明るさに隣接画像データの明るさを合わせる明度補正処理を行ない、明度補正画像データを生成する。実施例1と同様に、複数の対応点Mn(0<nの整数)があるとき、式1に示すように、明度補正値を算出する。また、算出された明度補正推定値Correct1を用いて式2に示すように明度補正画像データCAを算出する。
ステップS2004で処理コマンド生成部1003は、入力される処理コマンドを全て実行したかを判定する。判定の結果、全て実行したなら終了して、全て実行していないならステップS2001へ処理を進める。
以上のように、本実施例においては、明度補正処理において、距離情報に基づいて設定した処理経路により分割画像データ間の明度補正処理を行なう。これにより、補正処理の処理精度を向上させることが可能である。
<<実施例2の効果>>
以上説明したように、本実施例では実施例1の効果に加えて、距離情報に基づき構築した処理経路に基づいて分割画像データ間の補正処理を行なうので、基準画像データからの処理経路を短くすることできる。これにより、補正処理において累積される誤差を少なくすることができるので、補正処理の処理精度を向上させることができる。また、補正された距離情報を用いることで対応点が検出できない画像データ間を避けるように処理経路を設定することが可能となる。
[実施例3]
本実施例では、分割画像データ間の明度補正を並列処理にて行なう。これにより実施例1及び実施例2よりも高速な明度補正が可能となる。
本実施例においても図1で示される撮影システムを用いて分割画像データを取得する。取得された分割画像データは、図2(a)に示されるような重複領域を持つ構成であり、図9(a)に示すようなデータであるものとする。また、取得された分割画像データは図10に示される画像処理装置103によって画像処理が行われる。また、画像処理装置103によって行われる画像処理は、図4に示される処理フローチャートに沿って行われる。図4のステップS403に示される明度補正処理において行われる処理が、本実施例における特徴を示す。以下では、実施例1及び実施例2と重複する内容は説明を省略して、実施例3における特有の構成・処理についてのみ説明を行なう。
<<分割画像データ間の補正処理における距離情報を用いる効果>>
図9は本実施例により得られる効果を示す模式図である。図9(a)、図9(b)に示されている内容は実施例2と同じである。
距離情報を用いない図9(a)では、基点位置のP15で示される画像データの位置(r3行c4列目の位置)からの処理経路が2つである(P15⇒P9、P15⇒P21の2つ)。またそれに続く処理経路が1つになっている(P9⇒P3、P21⇒P27それぞれ1つ)。またP3からの処理経路は2つ(P3⇒P2、P3⇒P4の2つ)になっている。このように、処理経路の数が少ないので、並列処理を行なう際に並列数を大きくすることができない。このため、分割画像データ全てに対して補正処理を行なう際に処理速度が遅くなる場合がある。
これに対して、距離情報を用いる図9(b)では、基準位置のP15からの処理経路が4つである(P15⇒P9、P15⇒P14、P15⇒P16、P15⇒P21の4つ)。またそれに続く処理経路は放射状に広がっており、処理経路は多い。このように、処理経路の数が多いので、並列処理を行なう際に並列数を大きくすることができる。このため、分割画像データ全てに対して補正処理を行なう際に処理速度を速くすることができる。
このように分割画像データ間の補正処理において並列処理を行なう場合、距離情報を用いて経路設定することで処理速度を向上させることが可能である。
<<処理コマンド生成部の詳細>>
図21は本実施例における処理コマンド生成部1003を示すフローチャート図である。図18は図21で示される処理コマンドのグループの生成処理を補足説明するための模式図である。図21と図18を用いて処理コマンドのグループの生成処理を説明する。
ステップS1601及びS1602は、実施例2と同じ処理であるので説明を省略する。
ステップS2101に置いて処理コマンド生成部1003は、処理コマンドグループの生成処理を行なう。すなわち、ステップS1602で生成された処理コマンドを、距離情報に基づいてグループに分類することで処理コマンドグループを生成する。本ステップの処理の効果を図18(b)を用いて説明する。図18(b)に示されるように、基点画像位置からの距離に応じて処理コマンドはグループ分けされる。図中で例えばP15で示される画像データの位置(r3行c4列目の位置)を基点画像位置とするとき、基点画像位置からのL1距離が1の処理経路は黒色の矢印で示され、1つの処理コマンドグループを示している。生成された処理コマンドグループを用いて並列処理を制御する。つまり、基点画像位置に距離が近い処理コマンドグループに含まれる処理コマンドを、基点画像位置に距離が遠い処理コマンドグループに含まれる処理コマンドよりも優先して実行する。これにより並列処理を行なう場合に基準画像データが確実に存在するようになる。このため、高速に明度補正処理が行える。
以下では、ステップS2101の処理コマンドグループの生成処理の詳細を説明する。
<<処理コマンドのグループの生成処理の詳細>>
図22は本実施例におけるステップS2101の処理コマンドのグループの生成処理を示すフローチャート図である。
ステップS2201で処理コマンド生成部1003は、一次記憶距離情報値tmp_costに初期値を設定する。初期値にはL1距離の最小値の1を設定する。つまり、tmp_cost=1と設定する。
ステップS2202で処理コマンド生成部1003は、入力されるグラフから配列番号iの小さい順にグラフの要素graph(i)を取得する。配列番号iの初期値は0である。
ステップS2203で処理コマンド生成部1003は、グラフの要素graph(i)から、距離情報値graph(i).costを取得する。
ステップS2204で処理コマンド生成部1003は、距離情報値graph(i).costと一次記憶距離情報値tmp_costとの大小を比較する。比較の結果、距離情報値graph(i).costの方が大きければステップS2206へ処理を進めて、そうでなければステップS2205へ処理を進める。
ステップS2205で処理コマンド生成部1003は、処理コマンドグループgroup(j)に処理コマンドの要素command(i)を追加する。配列番号jの初期値は0である。
ステップS2206で処理コマンド生成部1003は、距離情報値graph(i).costで一次記憶距離情報値tmp_costを更新する。つまり、tmp_cost=graph(i).costである。
ステップS2207で処理コマンド生成部1003は、処理コマンドグループgroup(j)を更新する。具体的には配列番号jを1増加させる。
S2208は、入力されるグラフの要素を全て参照したかを判定する。判定方法としては、配列番号iは本処理ステップに到達する度に1ずつ増加するものとして、配列番号iがグラフの要素数に達したかどうかで判定する方法があげられる。判定の結果、全て参照したなら終了して、全て参照していないならステップS2202へ処理を進める。
<<明度補正部の詳細>>
図23は本実施例における明度補正部1004の処理を示すフローチャート図である。
ステップS2301で明度補正部1004は、処理コマンドグループgroup(j)を更新する。配列番号jの初期値は0である。本処理ステップを経過する度に配列番号jを1ずつ増加させる。
以下のS2302、S2002、S2003、及びS2303は、並列処理される。つまり、処理コマンドグループgroup(j=0)に4つの処理コマンドcommand(i=0)、command(i=1)、command(i=2)、command(i=3)、が追加されている場合、各コマンドを並列処理により同時に実行する。尚、最大の並列数は画像処理装置のCPUのコア数に依存する。コア数=4ならグループ内の最大の並列数=4であり、S2302、S2002、S2003、及びS2303は、並列数4で並列処理を行なうことができる。また、最大の並列数以下でも並列処理を行なえるものとする。
ステップS2302で明度補正部1004は、入力される処理コマンドから配列番号iの小さい順に取得される、処理コマンドの要素command(i)から基準画像データと隣接画像データを入力する。具体例は、実施例2の「明度補正部の詳細」におけるステップS2001と同じである。
ステップS2002及びS2003では実施例2と同じ処理を行なう。
ステップS2303で明度補正部1004は、処理コマンドグループに含まれる処理コマンドを全て実行したかを判定する。判定の結果、全て実行したなら終了して、全て実行していないならS2302へ処理を進める。
ステップS2304で明度補正部は、入力される処理コマンドグループの要素を全て参照したかを判定する。判定方法としては、配列番号jは本処理ステップに到達する度に1ずつ増加するものとして、配列番号jが処理コマンドグループの要素数に達したかどうかで判定する方法があげられる。判定の結果、全て参照したなら終了して、全て参照していないならS2301へ処理を進める。
<<実施例3の効果>>
以上説明したように、本実施例では、実施例1及び実施例2で得られる効果に加えて、距離情報に基づいて設定した処理経路により、並列処理で分割画像データ間の明度補正処理を行なう。これにより、並列数を増やすことができるため、補正処理の処理速度を向上させることが可能である。
[実施例4]
実施例1では、分割画像データを合成して合成画像データを生成した。本実施例では、1つのプロジェクタが1つの明度補正画像データを投影して、複数台のプロジェクタで複数の異なる明度補正画像データを投影する。
これにより、本実施例では、複数台のプロジェクタによる分割画像データの投影において、分割画像データにショットムラが存在する場合に、撮影画像データのショットムラを補正する。補正した後に、複数台のプロジェクタによる分割画像データの投影することで、画像データの間の繋ぎ目が良好な合成結果を得ることができる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。