以下、図面を参照して本発明の実施の形態を詳細に説明する。
<本発明の第1の実施の形態に係るリライティング画像生成装置の構成>
まず、本発明の第1の実施の形態に係るリライティング画像生成装置の構成について説明する。図1に示すように、リライティング画像生成装置100は、カメラ10と、プロジェクタ12と、演算部20と、出力部90と、を含んで構成されている。なお、第1の実施の形態においては、1台のプロジェクタと1台のカメラのプロジェクタ・カメラシステムを用いる。
カメラ10は、プロジェクタ12により投影された正照明画像及び負照明画像を観測し、明るさを示す濃淡画像を取得し、カメラ応答観測部26に出力する。なお、第1の実施の形態においては、プロジェクタ12から出力する単色照明として、例えば、白色照明を用いる。
プロジェクタ12は、単色照明を用いて、直交照明生成部24による出力指示に従って被写体を投影する。
演算部20は、同期制御部22と、直交照明生成部24と、カメラ応答観測部26と、照明成分解析部28と、リライティング画像生成部30と、画像データベース40とを含んで構成されている。
同期制御部22は、フレーム番号毎に、プロジェクタ12から、後述する直交照明生成部24により直交行列P^k毎に生成された正照明画像又は負照明画像を出力させ、出力された正照明画像又は負照明画像をカメラ10により撮影するように制御する。具体的には、まず、プロジェクタ12から投影される特定の照明パターンを表すフレーム番号fをf=1に初期化する。次に、カメラ応答観測部26からの応答信号を待ち、当該応答信号を受信すると、直交照明生成部24と、カメラ応答観測部26とへフレーム番号fを送出する。フレーム番号fを送出することにより、同じフレーム番号においてプロジェクタ12からの照明と、カメラ10の観測との同期をとる。次に、フレーム番号fをf=f+1とカウントアップし、再び、カメラ応答観測部26からの応答信号を待つ。以降、プロジェクタ12からの照明とカメラ10における観測とをフレーム番号fで同期をとりながら、上述の処理と同様にフレーム番号fを直交照明生成部24と、カメラ応答観測部26とへの送出を繰り返す。そして、フレーム番号fの値が、直交照明生成部24において投影する全ての照明パターンの数の値2L2となるフレーム番号fを直交照明生成部24とカメラ応答観測部26とに送出した時点で、同期制御部22は、上述の繰り返し処理を停止する。
直交照明生成部24は、各々が異なる複数の直交行列P^kを生成し、生成した複数の直交行列P^kに基づいて、直交行列P^k毎に、直交行列P^kを用いて、プロジェクタ12から出力するための正照明画像及び負照明画像を生成する。
直交照明生成部24は、具体的には、以下に説明するように、直交行列P^kを生成する第1の処理、及び正照明画像及び負照明画像を生成する第2の処理を行う。
まず、プロジェクタ照明で投影する範囲を、N×N画素と設定する。説明の便宜上、プロジェクタ画素領域をN×N画素とするが、縦横の画素数は任意に設定できる。次に、パラメータnが設定される。パラメータnはプロジェクタサイズのNに応じて設定すればよいが、任意の数を設定すればよい。そして、パラメータnが設定された後、直交照明生成部24は、第1の処理において、アダマール行列H^nを、
の計算により求める。行列H^n,(n≧1)は縦横2nサイズの対称行列である。続いて、行列H^nの各列ベクトルについて、1から−1、あるいは−1から1へ符号が反転したときの回数をカウントする。符号反転の回数に応じて、左から右へ列ベクトルを並べなおし、以下(2)式の行列W^nを得る。
(2)式では、左から右へ符号反転の回数が1ずつ増加するように列ベクトルが並べられる。列ベクトルh^1の符号反転数は0回(全ての要素が1であるため)、列ベクトルh^Lの符号反転数がL−1回(最も反転回数が多い)となる。続いて、カウンタiをi=1に初期化して、行列W^nの第i番目の列ベクトルh^iを取り出す。次に、もう一つのカウンタjを用意して、j=1に初期化する。カウンタjが設定されると、行列W^nの第j番目の列ベクトルh^jを取り出す。次に、列ベクトルh^iと列ベクトルh^jから、以下(3)式の行列積によってL×Lサイズの行列P^k
を得る。ただし、列ベクトルの肩の添え字Tは転置を表す。図2にn=2の場合の行列P^kの例を示す。白は行列要素1に、黒は行列要素−1に対応する。行列P^kの任意の列ベクトルは直交系を構成し、本実施の形態では直交行列と呼ぶ。行列P^kはプロジェクタ12から実際に投影するときの照明画像とリライティング画像生成部30の処理に利用されるため、行列P^kを算出するたびに画像データベース40に保存する。なお、直交照明生成部24において算出せずに、予め算出しておいた行列P^kを画像データベース40に格納しておいてもよい。
さらに、カウンタjをj=j+1とカウントアップする。次に、行列W^nの第j番目の列ベクトルh^jを取り出し、上記(3)式の行列積によって直交行列P^kを算出する。この処理をj>Lになるまで続ける。そして、カウンタjがj=Lとなったとき直交行列P^kを保存した後、カウンタiをi=i+1とカウントアップし、かつ、カウンタjをj=1に初期化して、同様の処理を繰り返す。最終的に、i>Lになるまで直交行列P^kを生成し、そのデータを画像データベース40に保存する。以上の第1の処理によって、直交行列はP^1から
までのL2種類の行列が生成される。ここで、直交行列P^k,k=1,2,・・・,L2は1または−1の要素から成り立っている。
次に、直交照明生成部24の第2の処理について説明する。第2の処理では、直交行列P^kに基づいて、直交行列P^kの正の値をもつ要素から正照明画像を、直交行列P^kの負の値をもつ要素から負照明画像を生成する。上記L2種類の直交行列P^kが得られているため、合計2L2種類の照明画像(正照明画像又は負照明画像)を生成する。また、第2の処理が、同期制御部22からのフレーム番号で制御される。具体的には、同期制御部22からフレーム番号fを受信すると、その値が偶数または奇数を判定する。フレーム番号fが奇数のとき直交行列P^kの正の要素から正照明画像を生成し、フレーム番号fが偶数のとき直交行列P^kの負の要素から負照明画像を生成する。
以下、フレーム番号fが奇数の場合とフレーム番号fが偶数の場合について説明する。
直交照明生成部24の第2の処理において、判定されたフレーム番号fが奇数の場合は、k=(f+1)/2によりカウンタkを設定し、フレーム番号fが偶数の場合はk=f/2によりカウンタkを設定する。カウンタkが設定されると、直交行列P^kを取り出す。フレーム番号fが奇数と判定されているならば、直交行列P^kから、以下(4)式に従って、要素−1を0に置き換えて、要素が1又は0からなる行列P^k+を算出する。
ここで、|P^k|はP^kの各要素の絶対値をとることを表す。(4)式で得た行列P^k+から正照明画像を生成する。説明の都合上、照明画像に使う画素数をN×N=2m×2m(mは正の整数)とする。直交行列P^k+の1要素を照明画像の画素に割り当てる。図3に、直交行列P^k+の1要素から照明画像の画素への割り当ての例を示す。直交行列P^k+の要素を左から右へ下から上へ走査して、各要素の値を2p×2p(pは正の整数であり、m=n+pとする)画素へコピーする。要素1の場合は照明画像の画素値にはR=G=B=255を代入し、要素0の場合は照明画像の画素値にはR=G=B=0を代入する。理想的には、p=0と設定してもよいが、照明が微弱なために十分なカメラ応答が得られない場合がある。そのような状況を考慮して、例えば、p=2に設定する。一般的には、pは使用するプロジェクタ、カメラ、あるいは環境に依存するため、システムパラメータとして事前テストにより十分なカメラ応答が得られる範囲で設定値pを決定してもよい。正照明画像を生成するとプロジェクタ12から出力し、カメラ10で画像を取得する。
一方、直交照明生成部24の第2の処理において、判定されたフレーム番号fが偶数の場合は、負照明画像を生成する。負照明画像は、直交行列P^kから、以下(5)式に従って、要素1を0に置き換えて、要素−1を要素1に反転した行列P^k−を算出する。
以降、正照明画像を生成したときと同様に、直交行列P^kの1要素の値を2p×2p画素へコピーする。要素1に対応する画素値にはR=G=B=255を代入し、要素0に対応する画素値にはR=G=B=0を代入する。あるいは、正照明行列P^k+の0と1の要素を1と0に反転すると負照明行列P^k−になるため、正照明画像を反転して負照明画像を生成してもよい。負照明画像を生成するとプロジェクタ12から出力する。このように、同期制御部22からのフレーム番号を受信するたびに、直交行列をから正照明画像又は負照明画像を生成する。全ての直交行列から生成した照明画像をプロジェクタ12から投影し終わるまで繰り返す。このように、以上の第2の処理によって生成された、正照明画像及び負照明画像のペアが順番にプロジェクタ12から投影される。
カメラ応答観測部26は、プロジェクタ12から投影された複数の直交行列P^kに対する正照明画像及び負照明画像の各々に対して、カメラ10により撮影した観測画像から、予め定められた閾値よりも大きい輝度値を有する画素をカメラ応答の画素として検出して応答画像を生成する。
具体的には、まず、観測範囲が設定される。第1の実施の形態においては、カメラ10において観測された画像全体を処理対象とせず、当該設定により指定された範囲のカメラ応答を検出するように設定される。例えば、画像内でのM×M(本実施の形態では、1,000×1,000とするが、縦横サイズは任意に設定しても構わない)画素の範囲が設定される。また、カメラ応答を検出するための閾値が設定される。当該閾値は、カメラ応答を検出する範囲の画素の各々について用いられ、当該閾値以上の輝度値である画素がカメラ応答として検出される。
そして、カメラ応答観測部26は、同期制御部22からフレーム番号fを受信すると、カメラ10が正照明画像又は負照明画像の照明に対する画像を取得することができる状態かのチェックを行い、撮影可能状態ならばカメラ10から観測画像を取得する。次に、画像データベース40に記憶されているプロジェクタ12によるプロジェクタ照明を投影していない状態の観測画像である背景画像を取得し、観測画像と背景画像との背景差分を処理する。当該背景差分において、蛍光灯などの環境光の下では画像雑音が多く混入するため、設定した閾値として例えば10階調に設定しておき、当該値よりも大きい画素の各々をカメラ応答の画素として検出する。続いて、検出されたカメラ応答を含むM×M画素を応答画像として画像データベース40に保存する。そして、カメラ10による次のカメラ観測に備えて、同期制御部22へ応答信号を送信し、フレーム番号を受信するまで待機する。以上の処理を繰り返し、全ての正照明画像及び負照明画像の各々についての応答画像を画像データベース40に記憶した時点で終了する。なお、初回に、カメラ観測を行う場合には、カメラ応答観測部26から応答信号を同期制御部22へ送信する。また、観測画像と同じサイズの応答画像を、画像データベース40に保存するようにしてもよい。
照明成分解析部28は、与えられた照明画像を、複数の色成分に分離し、複数の色成分毎に、複数の直交行列P^kの各々について、直交行列と、色成分の照明画像を表す列ベクトルとの内積を計算する。
照明成分解析部28は、具体的には、以下に説明する第1の処理によって、直交行列P^kを表す列ベクトルの各々からなる行列P^を用意し、第2の処理によって、行列P^の列ベクトルと、与えられた任意の照明画像の色成分毎の列ベクトルの内積とを計算することにより、照明成分の解析を行う。以下、第1の処理について説明する。第1の処理では、まず、カウンタkを初期化してk=1と与える。カウンタkに従って、画像データベース40に記憶されている直交行列P^k,k=1,2,・・・,L2を取り出す。この直交行列P^kについて、図4に示すように、左から右へ下から上へ走査し、右端まで走査した後は1つ行を上げてまた左端に戻り、同様に左から右へ走査する。この走査により行列要素を縦方向に並べ替えた列ベクトルを得る。その列ベクトルを正規化(ベクトルの大きさを1とする)し、行列P^の第k番目の列に格納する。図4では、x=L2と置換している。以上の処理をk=L2になるまで続け、正規直交ベクトルP^1,P^2,・・・,P^xを列ベクトルにもつ行列P^を用意する。
また、リライティングに使う照明画像が設定される。照明成分解析部28は、次に、第2の処理を行う。第2の処理では、まず、設定された照明画像を成分分離して、赤色成分の画像、緑色成分の画像、及び青色成分の画像に分ける。各色の画像を列ベクトル化し、赤照明ベクトルをP^r、緑照明ベクトルをP^g、青照明ベクトルをP^bとする。それぞれのベクトルを正規化して単位ベクトルにする。次に、行列P^の列と行を入れ替えた転置行列P^Tを使って、以下(6)〜(8)式の計算により、
赤照明ベクトルP^rとの内積[r1,r2,・・・,rx]T、緑照明ベクトルP^gとの内積[g1,g2,・・・,gx]T、及び青照明ベクトルP^bとの内積[b1,b2,・・・,bx]Tを得る。得られた色成分毎の内積の値(rk,gk,bk),k=1,2,・・・,L2は、リライティング画像生成部30で使うため一時的に画像データベース40に保存される。以上の第2の処理により、行列P^の各列ベクトルと各照明ベクトルとの内積を計算することで、リライティング画像の生成に必要な成分を得る。
画像データベース40は、直交照明生成部24で生成されたフレーム番号fの各々に対応した直交行列P^kと、カメラ応答観測部26で生成されたフレーム番号fの各々に対応した応答画像と、照明成分解析部28で計算された色成分毎の内積の値とが記憶されている。
リライティング画像生成部30は、照明成分解析部28で分けられた複数の色成分毎に、複数の直交行列P^kの各々についての、カメラ応答観測部26によって生成された、直交行列P^kに対応する正照明画像及び負照明画像の各々に対する当該色成分の応答画像の差分と、照明成分解析部28によって直交行列P^kについて計算された当該色成分の内積とに基づいて、当該色成分のリライティング画像を生成する。
ここで、リライティング画像生成部30におけるリライティング画像の生成の原理について説明する。白色照明の直交照明を使ってカメラ10により撮影された応答画像が保存されている場合、照明画像をプロジェクタから出力したときに得られるシミュレーション結果を表す各色成分のリライティング画像C^r、C^g、C^bは以下(9)〜(11)式に従って計算される。
ここで、k番目の正照明画像に対する応答画像C^k+の赤、緑、及び青成分の画像をそれぞれr^k+、g^k+、及びb^k+とし、負照明画像に対する応答画像C^k−の赤、緑、及び青成分の画像をそれぞれr^k−、g^k−、b^k−とする。すると、(9)〜(11)式におけるC^rk、C^gk、C^bkは、それぞれ以下(12)〜(14)式により得られる。
なお、プロジェクタ12から出力した正照明画像及び負照明画像以外の環境光の成分画像をそれぞれF^r、F^g、F^bとして、カメラ応答観測部26で得られた背景画像が環境光成分に該当する。例えば、上記(9)〜(11)式において、内積値qk(qはr、g、又はbのいずれかを表す)がほぼ0の場合、式(9)から式(11)の計算には全く寄与しないことになるので、内積値qkと応答画像C^qkをこのリライティング計算から除外してもよい。
以上の原理に従って、本実施の形態では、リライティング画像生成部30は、以下の処理を行う。
まず、閾値が設定される(赤、緑、及び青成分ごとに閾値を変更することもできる)。閾値は照明成分解析部28で算出した各内積値において有効な成分のみを抽出するために設定するパラメータであり、通常はγ=0.001以下に設定される。次に、リライティング画像生成部30は、色成分β毎に、kの順番に色成分βの内積値qk(画像データベース40に記憶されている色成分βの内積値(β=rであればrk,β=gであればgk,β=bであればbk))を読み込む。qk<γの場合はその係数を0と判断して、応答画像C^におけるq^k+及びq^k−を読み込まずに、内積値qkを破棄する。qk≧γの場合は応答画像C^におけるqk+及びqk−を画像データベース40から読み込み、上記(12)〜(14)式に従って、応答差分C^qkを計算する。以上の処理を全てのkについて行い、上記(9)〜(11)式に従ってリライティング画像を計算する。そして、計算されたリライティング画像の各成分である赤画像C^r、緑画像C^g、及び青画像C^bを、それぞれの画像フォーマットで出力部90により出力あるいは表示をする。以上の処理によって、図18に示した状況において、未校正なプロジェクタ・カメラシステムを使って未知の被写体にプロジェクタからの直交照明を投影したとき、それぞれのカメラ応答画像を使って、任意の照明に対するリライティング画像を効率的に生成することができる。
<本発明の実施の第1の形態に係るリライティング画像生成装置の作用>
次に、本発明の第1の実施の形態に係るリライティング画像生成装置100の作用について説明する。まず、同期制御処理ルーチンについて説明する。
図5に示す、ステップS100では、フレーム番号fの値を1に初期化する。
次に、ステップS102では、カメラ応答観測部26から応答信号を受信したか否かを判定する。応答信号を受信した場合には、ステップS104へ移行し、応答信号を受信しない場合には、ステップS102の処理を繰り返す。
ステップS104では、ステップS100又はステップS108において取得したフレーム番号fを直交照明生成部24及びカメラ応答観測部26に送出する。
ステップS106では、フレーム番号fの値が2L2の値か否かを判定する。フレーム番号fの値が2L2である場合には、同期制御処理ルーチンを終了し、フレーム番号fの値が2L2よりも小さい場合には、ステップS108へ移行する。
ステップS108では、フレーム番号fの値に1を加えた値をフレーム番号fの値として設定し、ステップS102へ移行して、ステップS102〜ステップS106の処理を繰り返す。
次に、図6に示す、直交照明生成処理ルーチンについて説明する。
まず、ステップS200では、プロジェクタ照明で投影する照明対象領域をN×N画素と設定する。
次に、ステップS202では、上記(3)式の行列積によって直交行列H^nを算出する。
次に、ステップS204では、同期制御部22からフレーム番号fを受信したか否かを判定する。フレーム番号fを受信した場合には、フレーム番号fを取得してステップS206へ移行し、フレーム番号fを受信していない場合には、ステップS204の処理を繰り返す。
次に、ステップS206では、ステップS204において取得したフレーム番号fの値が偶数であるか奇数であるかを判定する。フレーム番号fが奇数である場合には、ステップS208へ移行し、フレーム番号fが偶数である場合には、ステップS214へ移行する。
次に、ステップS208では、ステップS204において取得したフレーム番号fに対応するk=(f+1)/2を算出して、カウンタkを設定する。
ステップS210では、ステップS208において設定したカウンタkの値に基づいて、直交行列P^kを取り出し、取り出した直交行列P^kから、上記(4)式に従って、行列P^k+を算出する。
ステップS212では、ステップS210で算出された行列P^k+に基づいて、正照明画像を生成し、生成した正照明画像をプロジェクタ12から出力して、カメラ10で画像を取得する。
次に、ステップS214では、ステップS204において取得したフレーム番号fに対応するk=f/2を算出して、カウンタkを設定する。
ステップS216では、ステップS214において設定したカウンタkの値に基づいて、直交行列P^kを取り出し、取り出した直交行列P^kから、上記(5)式に従って、行列P^k−を算出する。
ステップS218では、ステップS210で算出された行列P^k−に基づいて、負照明画像を生成し、生成した負照明画像をプロジェクタ12から出力して、カメラ10で画像を取得する。
次に、ステップS220では、ステップS204において取得したフレーム番号fの値が2L2であるか否かを判定する。フレーム番号fの値が2L2である場合には、直交照明生成処理ルーチンを終了し、フレーム番号fの値が2L2より小さい場合には、ステップS204へ移行し、ステップS204〜ステップS220の処理を繰り返す。
上記ステップS202の直交行列の算出処理ルーチンについて、図7において詳細に説明する。
図7のステップS2200では、プロジェクタサイズのNに応じてパラメータnが設定される。
次に、ステップS2202では、アダマール行列H^nを上記(1)式の計算により求める。
ステップS2204では、ステップS2202で求めた行列H^nの符号反転の回数に応じて、左から右へ符号反転の回数が1ずつ増加するように左から右へ列ベクトルを並び替える。
ステップS2206では、ステップS2206で並び替えられた列ベクトルに基づいて、上記(2)式の行列W^nを算出する。
次に、ステップS2208では、カウンタiをi=1に初期化する。
ステップS2210では、カウンタiの値に基づいて、行列W^nの第i番目の列ベクトルh^iを取り出す。
次に、ステップS2212では、カウンタjをj=1に初期化する。
ステップS2214では、カウンタjの値に基づいて、行列W^nの第j番目の列ベクトルh^jを取り出す。
ステップS2216では、ステップS2210で取り出した列ベクトルh^iと、ステップS2214で取り出した列ベクトルh^jに基づいて、上記(3)式の行列積によってL×Lサイズの直交行列P^kを算出する。
ステップS2220では、カウンタjをj=j+1とカウントアップする。
ステップS2222では、jがLより大きいか否かを判定する。jがLより大きければ、ステップS2224へ移行し、jがL以下であればステップS2214へ移行し、ステップS2214〜ステップS2222の処理を繰り返す。
ステップS2224では、カウンタiをi=i+1とカウントアップする。
ステップS2226では、iがLより大きいか否かを判定する。iがLより大きければ、直交行列算出処理ルーチンを終了し、iがL以下であればステップS2214へ移行し、ステップS2214〜ステップS2226の処理を繰り返す。
次に、図8に示す、カメラ応答観測処理ルーチンについて説明する。
まず、ステップS300では、カメラ10において観測する範囲をM×M画素の範囲に設定する。
次に、ステップS302では、カメラ応答に対する所定の閾値を設定する。
次に、ステップS304では、画像データベース40に記憶されている背景画像を読み込む。
次に、ステップS306では、同期制御部22へ応答信号を送信する。
次に、ステップS308では、同期制御部22からフレーム番号fを受信したか否かを判定する。フレーム番号fを受信した場合には、ステップS310へ移行し、フレーム番号fを受信していない場合には、ステップS308の処理を繰り返す。
次に、ステップS310では、カメラ10の状態をチェックする。
次に、ステップS312では、ステップS310において取得したカメラ10の状態が、撮影可能状態であるか否かを判定する。カメラ10が撮影可能状態である場合には、ステップS314へ移行し、カメラ10が撮影可能状態でない場合には、ステップS310へ移行する。
次に、ステップS314では、カメラ10から観測画像を取得する。
次に、ステップS316では、ステップS304において取得した背景画像と、ステップS314において取得した観測画像との背景差分を取得する。
次に、ステップS318では、ステップS302において取得した閾値と、ステップS316において取得した背景差分とから、カメラ応答の画素の各々を検出する。
次に、ステップS320では、ステップS318において取得したカメラ応答の画素の各々の輝度値を応答画像として、ステップS308において取得したフレーム番号fと対応づけて画像データベース40に記憶する。
次に、ステップS322では、ステップS308において取得したフレーム番号fの値が2L2であるか否かを判定する。フレーム番号fの値が2L2である場合には、カメラ応答観測処理ルーチンを終了し、フレーム番号fの値が2L2よりも小さい場合には、ステップS306へ移行し、ステップS306〜ステップS322の処理を繰り返す。
次に、図9に示す、照明成分解析処理ルーチンについて説明する。
まず、ステップS400では、カウンタkをk=1と初期化する。
次に、ステップS402では、カウンタkの値に基づいて、画像データベース40に記憶されている直交行列P^kを取り出す。
ステップS404では、ステップS402で取り出した直交行列P^kから、走査により行列要素を縦方向に並べ替えた列ベクトルを得る。
ステップS406では、ステップS404で得た列ベクトルを正規化する。
ステップS408では、ステップS406で正規化した列ベクトルを行列P^の第k番目の列に格納する。
ステップS410では、カウンタkをk=k+1とカウントアップする。
ステップS412では、kがL2かを判定する。kがL2であればステップS402へ移行してステップS402〜ステップS412の処理を繰り返し、kがL2でなければステップS414へ移行する。
次に、ステップS414では、リライティングに使う照明画像が設定される。
ステップS416では、ステップS414で設定された照明画像を成分分離して、赤色成分の画像、緑色成分の画像、及び青色成分の画像に分ける。
ステップS418では、ステップS416で成分分離された各色の画像を列ベクトル化し、赤照明ベクトルをP^r、緑照明ベクトルをP^g、青照明ベクトルをP^bとする。
ステップS420では、ステップS418で列ベクトル化したそれぞれのベクトルを正規化して単位ベクトルにする。
ステップS422では、ステップS402〜ステップS412の処理で得られた行列P^の転置行列P^Tを使って、上記(6)〜(8)式の計算により、ステップS420で単位ベクトルとした、赤照明ベクトルP^rと正規化した列ベクトルとの内積、緑照明ベクトルP^gと正規化した列ベクトルとの内積、及び青照明ベクトルP^bと正規化した列ベクトルとの内積を得る。
ステップS424では、ステップS422で得られた色成分毎の内積の値を画像データベース40に保存し、処理を終了する。
次に、図10に示す、リライティング画像生成処理ルーチンについて説明する。リライティング画像処理ルーチンは、色成分β毎に実行される。
まず、ステップS500では、閾値γ及びカウンタkの初期値(k=1)が設定される。
次に、ステップS502では、kに基づいて、色成分βの内積値qkを読み込む。
ステップS504では、qkがγより大きいかを判定する。qkがγより大きければ、ステップS506へ移行し、qkがγ以下であれば、ステップS508へ移行する。
ステップS506では、ステップS502で読み込んだ内積値qkを破棄してステップS514へ移行する。
ステップS508では、応答画像C^におけるqk+及びqk−を画像データベース40から読み込む。
ステップS510では、ステップS508で読み込んだ応答画像C^におけるqk+及びqk−を用いて、上記(12)〜(14)式に従って、応答差分C^qkを計算する。
ステップS512では、ステップS510で計算された応答差分C^qkを用いて、上記(9)〜(11)式の何れかに従って、色成分βのリライティング画像を計算する。
ステップS514では、kがL2であるか否かを判定する。kがL2であればステップS518へ移行し、kがL2でなければステップS516へ移行する。
ステップS516では、カウンタkをk=k+1とカウントアップして、ステップS502へ移行し、ステップS502〜ステップS514の処理を繰り返す。
ステップS518では、ステップS512で計算された色成分βのリライティング画像(赤画像C^r、緑画像C^g、又は青画像C^b)を、画像フォーマットで出力部90により出力あるいは表示をして処理を終了する。
以上説明したように、第1の実施の形態に係るリライティング画像生成装置によれば、各々が異なる複数の直交行列P^kに基づいて、直交行列P^k毎に、正照明画像及び負照明画像を生成し、プロジェクタから、正照明画像及び負照明画像の各々を出力させ、出力された正照明画像又は負照明画像をカメラにより撮影するように制御し、直交行列P^kに対する正照明画像及び負照明画像の各々に対して、カメラにより撮影した観測画像から、予め定められた閾値よりも大きい輝度値を有する画素をカメラ応答の画素として検出して応答画像を生成し、直交行列P^kの各々について、上記(6)〜(8)式により、直交行列P^kを表す列ベクトルと、与えられた照明画像を表す列ベクトルとの内積を計算し、直交行列P^kの各々についての、正照明画像及び負照明画像の各々に対する応答画像の差分と、計算された内積とに基づいて、上記(9)〜(11)式に従って各色成分のリライティング画像C^r、C^g、C^bを計算して、リライティング画像を生成することにより、照明画像をプロジェクタから出力したときに得られるシミュレーション結果を表すリライティング画像を精度よく生成することができる。
<第2の実施の形態に係るリライティング画像生成装置の概要>
まず、第2の実施の形態に係るリライティング画像生成装置200の概要について説明する。第2の実施の形態では、図20に示すように、色成分αの照明をプロジェクタから投影し、色成分βのカメラ応答を観測して、LT行列T^を獲得する。ただし、αはプロジェクタのRGBのいずれかの色を指し、βはカメラのRGBのいずれかの色を指し、その組み合わせによりLT行列T^αβは9種類ある。本来、赤、緑、及び青のスペクトルは、可視光の波長帯において分布しているため、プロジェクタ・カメラシステムでは、プロジェクタとカメラ間のカラー混合(color mixing あるいはcrosstalk)が発生する。そのため、第2の実施形態は、カラー照明を使って被写体を投影し、カラー混合を考慮したリライティング画像を生成する。
<本発明の第2の実施の形態に係るリライティング画像生成装置の構成>
次に、本発明の第2の実施の形態に係るリライティング画像生成装置の構成について説明する。図11に示すように、リライティング画像生成装置200は、カメラ210と、プロジェクタ212と、演算部220と、出力部90と、を含んで構成されている。
カメラ210は、プロジェクタ212により投影された、正照明画像及び負照明画像に対する赤照明画像、緑照明画像、及び青照明画像の各々を観測し、色値を表すRGB値を取得し、カメラ応答観測部226に出力する。
プロジェクタ212は、正照明画像及び負照明画像に対する赤照明画像、緑照明画像、及び青照明画像の各々を用いて、直交照明生成部224による出力指示に従って被写体を投影する。
演算部220は、同期制御部222と、直交照明生成部224と、カメラ応答観測部226と、画像データベース240と、リライティング画像生成部230とを含んで構成されている。
同期制御部222は、フレーム番号毎に、プロジェクタ12から、後述する直交照明生成部24により複数の色成分αの各々に対し、直交行列P^k毎に生成された色成分αの正照明画像及び負照明画像を出力させ、出力された正照明画像又は負照明画像をカメラ10により撮影するように制御する。具体的には、まず、プロジェクタ212から投影される特定の照明パターンを表すフレーム番号fをf=1に初期化する。次に、カメラ応答観測部226からの応答信号を待ち、当該応答信号を受信すると、直交照明生成部224と、カメラ応答観測部226とへフレーム番号fを送出する。フレーム番号fを送出することにより、同じフレーム番号においてプロジェクタ212からの照明と、カメラの観測との同期をとる。次に、フレーム番号fをf=f+1とカウントアップし、再び、カメラ応答観測部226からの応答信号を待つ。以降、プロジェクタ212からの照明とカメラ210における観測の同期をフレーム番号fで同期をとりながら、同様にフレーム番号fを直交照明生成部224と、カメラ応答観測部226とに送出することを繰り返す。そして、直交照明生成部224において投影する正照明画像及び負照明画像の全ての照明パターンの数の値2L2であるフレーム番号fを、直交照明生成部224とカメラ応答観測部226とに送出した時点で、フレーム番号fをf=1に初期化する。以降同様に繰り返し処理を行い、さらに、正照明画像及び負照明画像の全ての照明パターンの数の値2L2であるフレーム番号fを直交照明生成部224とカメラ応答観測部226とに送出した時点で、フレーム番号fをf=1に初期化する。また、以降同様に繰り返し処理を行い、次の、フレーム番号fの値が2L2となるフレーム番号fを送出した時点で、同期制御部222は、繰り返し処理を停止する。
直交照明生成部224は、複数の色成分αの各々に対し、複数の直交行列P^kに基づいて、直交行列P^k毎に、当該色成分αの正照明画像及び負照明画像を生成する。ここで、α=rのとき赤照明、α=gのとき緑照明、α=bのとき青照明を意味する。
直交照明生成部224は、具体的には、同期制御部から受け取ったフレーム番号がf=kのとき、上記第1の実施の形態の直交照明生成部24と同様の処理をして算出した直交行列P^k+及びP^k−を用いて、直交行列の要素1に対応する画素値をR=255,G=B=0に、要素0に対応する画素値をR=G=B=0に設定した赤照明の正照明画像及び負照明画像を生成する。同期制御部22からのフレーム番号を受信するたびに、赤色の照明を設定し、全ての照明を投影し終わるまで繰り返す。以上の処理によって。2L2種類の赤色の正照明画像及び負照明画像をフレーム番号に従って順番にプロジェクタ212から投影する。直交照明生成部224は、続いて、同期信号のフレーム番号を1にリセットし、緑照明及び青照明について同様の処理を繰り返す。以上のように、直交照明生成部224は、赤照明、緑照明、及び青照明の正照明画像及び負照明画像の各々をプロジェクタ212から投影する。
カメラ応答観測部226は、複数の色成分α及び複数の直交行列P^kの組み合わせに対する正照明画像及び負照明画像の各々に対して、カメラ210により撮影した観測画像から、複数の色成分β毎に、カメラ応答の画素を検出して色成分βの応答画像を生成する。ここで、β=rのとき赤成分、β=gのとき緑成分、β=bのとき青成分を意味する。
具体的には、同期制御部222からフレーム番号fを受信すると、カメラ210から赤成分の正照明画像及び負照明画像に対する観測画像を取得する。次に、画像データベース240に記憶されているプロジェクタ212によるプロジェクタ照明を投影していない状態の観測画像である背景画像を取得し、赤成分に対する観測画像と背景画像との背景差分を処理し、観測画像の各画素のRGB値の各々に基づいて、R値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のR値を赤成分に対するカメラ応答の赤の画素のR値として検出し、G値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のG値を赤成分に対するカメラ応答の緑の画素のG値として検出し、B値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のB値を赤成分に対するカメラ応答の青の画素のB値として検出する。次に、各色成分βについて、検出された赤成分に対するカメラ応答の当該色成分βの画素の値の各々の輝度値を、赤成分に対する当該色成分βの応答画像として画像データベース240に記憶する。なお、カメラ応答観測部226の処理は、プロジェクタ212から投影される赤成分の正照明画像及び負照明画像を観測したカメラ210における赤成分に対するカメラ画像から赤照明に対する各色成分βの応答画像を画像データベース240に記憶し、全ての赤成分に対する正照明画像及び負照明画像の各々についての赤成分に対する各色成分βの応答画像を画像データベース240に記憶した時点で赤成分に対する処理は、終了する。
カメラ応答観測部226は、2回目のフレーム番号fの値が1であるフレーム番号fを受信すると、緑成分に対して、上記赤成分に対する処理と同様に、緑成分に対する各色成分βの応答データを画像データベース240に記憶し、全ての緑成分に対する正照明画像及び負照明画像の各々についての緑成分に対する各色成分βの応答画像を画像データベース240に記憶した時点で緑成分に対する処理は終了する。また、カメラ応答観測部226は、3回目のフレーム番号fの値が1であるフレーム番号fを受信すると、青成分に対して、上記赤成分に対する処理と同様に、青成分に対する各色成分βの応答画像を画像データベース240に記憶し、全ての青成分に対する正照明画像及び負照明画像の各々についての青成分に対する各色成分βの応答画像を画像データベース240に記憶した時点で青成分に対する処理は終了する。
照明成分解析部228は、与えられた照明画像を、複数の色成分βに分離し、複数の色成分β毎に、複数の直交行列P^kの各々について、直交行列P^kを表す列ベクトルと、色成分βの照明画像を表す列ベクトルとの内積を計算する。具体的な処理は、第1の実施の形態の照明成分解析部28と同様である。
画像データベース240には、直交照明生成部224で生成された直交行列P^kと、カメラ応答観測部26で生成された赤成分、緑成分、及び青成分の各々に対応する各色成分βの応答画像の各々と、照明成分解析部28で計算された色成分β毎の内積の値とが記憶されている。
リライティング画像生成部230は、複数の色成分β毎に、複数の直交行列P^kの各々に対して、カメラ応答観測部226によって生成された、色成分α及び直交行列P^kの組み合わせに対応する正照明画像及び負照明画像の各々に対する色成分βの各々の応答画像の差分と、照明成分解析部28によって直交行列P^kについて計算された色成分βの各々の内積とに基づいて、当該色成分βのリライティング画像を生成する。
ここで、リライティング画像生成部230におけるリライティング画像の生成の原理について説明する。カラー照明の直交照明を使ってカメラ応答データを保存する場合、
を使って、リライティング画像(C^r,C^g,C^b)を算出する。リライティングは暗室で観測したLT行列を使うため、通常は(F^r,F^g,F^b)=(0,0,0)としても画像生成に支障はない。さらに、任意の照明画像が与えられたとき、上記(6)〜(8)式で得られる赤照明ベクトルP^rとの内積[r1,r2,・・・,rx]T、緑照明ベクトルP^gとの内積[g1,g2,・・・,gx]T、及び青照明ベクトルP^bとの内積[b1,b2,・・・,bx]Tを、それぞれ
と置換した。
また、(15)式において、k番目の直交行列P^kに基づく色成分αの正照明画像及び負照明画像の各々に対応するカメラ応答画像の色成分βの成分画像をそれぞれC^αβ+ (k)とC^αβ− (k)とするとき、差分画像C^αβ (k)は、
で与えられる。これをベクトル化するため、M×M画素領域について、図12に示すように、左から右に走査し、右端まで走査した後は1画素上に上がり、また左端に戻り、同様に左から右へ走査する。この走査により画素の並びを縦方向に並べ替える。上記(15)式のC^αβ(αとβはr,g,bのいずれかを指す)は、列ベクトルC^αβ (k)が第k番目の列に代入され、
に従って、全てのkについて列ベクトルを並べることにより得られる行列である。以上は、カメラ応答観測部26で生成された、各成分αの照明画像に対応する各色成分βの応答画像の各々に基づいて算出する。なお、上記(15)式に従ってリライティング画像を生成してもよいが、本処理ではリライティング計算に寄与しない成分を事前に削除することにより、計算用のメモリの使用コストを低減させることができる。例えば、照明成分qk(q=r,g,b)がほぼ0の場合は、(15)式のリライティング計算には全く寄与しないことになる。よって、第1の実施の形態と同様に、照明成分がほぼ0に該当するカメラ応答画像をリライティング計算から除外する。
以上の原理に従って、本実施の形態では、リライティング画像生成部230は、以下の処理を行う。
まず、閾値が設定される。閾値は照明成分解析部28で算出した各内積値において有効な成分のみを抽出するために設定するパラメータであり、通常はγ=0.001以下に設定される。次に、リライティング画像生成部230は、色成分βについて、kの順番に、色成分βの内積値qkを読み込む。qk<γの場合はその係数を0と判断して、応答画像C^αβ+ (k)及びC^αβ− (k)を読み込まずに、内積値qkを破棄する。qk≧γの場合は応答画像C^αβ+ (k)及びC^αβ− (k)を画像データベース240から読み込み、上記(19)式に従って、差分を計算して得た応答画像C^αβ (k)を左詰めにして行列C^αβに代入する。これを全てのkについて処理を行い、リライティング計算に寄与しない成分を除去したカメラ応答行列C^を得る。これをβ=r,g,bの色成分の順番に処理をして、(15)式に従って、リライティング画像を計算する。そして、計算されたリライティング画像の各色成分である赤画像C^r、緑画像C^g、及び青画像C^bを、それぞれの画像フォーマットで出力部90により出力あるいは表示をする。以上の処理によって、図20に示した状況において、未校正なプロジェクタ・カメラシステムを使って未知の被写体にプロジェクタからの直交照明を投影したとき、それぞれのカメラ応答画像を使って、任意の照明に対するリライティング画像を効率的に生成することができる。
<本発明の実施の第2の形態に係るリライティング画像生成装置の作用>
次に、本発明の第2の実施の形態に係るリライティング画像生成装置200の作用について説明する。なお、第1の実施の形態のリライティング画像生成装置100と同一の作用となる箇所については同一符号を付して説明を省略する。
まず、同期制御処理ルーチンについて説明する。
図13に示す、ステップS700では、ステップS100〜ステップS106までの処理を3回行ったか否かを判定する。ステップS100〜ステップS106までの処理回数が3回よりも少ない場合、ステップS100へ移行し、ステップS100〜ステップS700までの処理を繰り返す。ステップS100〜ステップS106までの処理回数が3回である場合には、同期制御処理ルーチンを終了する。
次に、図14に示す、直交照明生成処理ルーチンについて説明する。第2の実施の形態においては、赤色成分についての処理から開始されるものとする。
ステップS804では、ステップS210で算出された行列P^k+に基づいて、対象となる色成分αの正照明画像を生成し、生成した正照明画像をプロジェクタ212から出力して、カメラ210で画像を取得する。
ステップS810では、ステップS216で算出された行列P^k−に基づいて、対象となる色成分αの負照明画像を生成し、生成した負照明画像をプロジェクタ212から出力して、カメラ210で画像を取得する。
ステップS812では、全ての色成分αについてステップS204〜ステップS220までの処理を終了したか否かを判定する。全ての色成分αについてステップS204〜ステップS220までの処理を終了している場合には、直交照明生成処理ルーチンを終了し、全ての色成分αについてステップS204〜ステップS220までの処理を終了していない場合には、対象となる色成分αを変更し、ステップS204へ移行する。なお、対象となる色成分αは、赤色、緑色、青色の順に変更される。
次に、図15に示す、カメラ応答観測処理ルーチンについて説明する。第2の実施の形態においては、赤色成分についての処理から開始されるものとする。
図15に示す、ステップS900では、カメラ応答に対するRGB値の各々の所定の閾値を設定する。
次に、ステップS902では、ステップS304において取得した画像と、ステップS314において取得した観測画像との背景差分を取得する。
次に、ステップS904では、ステップS304において取得した背景画像と、ステップS314において取得した観測画像との背景差分から、ステップS900において取得した閾値を用いて、RGBの各色成分βについて、カメラ応答の画素の各々を検出し、当該色成分βの輝度値の各々を取得する。
次に、ステップS906では、RGBの各色成分βについて、ステップS902において取得したカメラ応答の画素の各々の当該色成分βの輝度値の各々を、当該色成分βの応答データとして、ステップS308において取得したフレーム番号fと対応づけて画像データベース240に記憶する。
ステップS904では、全ての色成分αについてステップS306〜ステップS322までの処理を終了したか否かを判定する。全ての色成分αについてステップS306〜ステップS322までの処理を終了している場合には、カメラ応答観測処理ルーチンを終了し、全ての色成分αについてステップS306〜ステップS322までの処理を終了していない場合には、対象となる色成分αを変更し、ステップS306へ移行する。なお、対象となる色成分αは、赤色、緑色、青色の順に変更される。
第2の実施の形態に係る照明成分解析処理ルーチンについては、第1の実施の形態の照明成分解析処理ルーチンと同様の流れとなるため詳細な説明を省略する。
次に、上記図10に示す、第2の実施の形態に係るリライティング画像生成処理ルーチンについて説明する。リライティング画像処理ルーチンは、色成分β毎に実行される。
第2の実施の形態に係るステップS508では、各色成分αに対する応答画像C^αβ+ (k)及びC^αβ− (k)を画像データベース240から読み込む。
ステップS510では、ステップS508で読み込んだ各色成分αに対する応答画像C^αβ+ (k)及びC^αβ− (k)を用いて、各色成分αに対して、上記(19)式に従って、応答差分C^αβ (k)を計算する。
ステップS512では、ステップS510で計算された各色成分αに対する応答差分C^αβ (k)を用いて、上記(15)式に従って色成分βのリライティング画像を計算する。
以上説明したように、第2の実施の形態に係るリライティング画像生成装置によれば、プロジェクタから各色成分の正照明画像及び負照明画像を被写体に投影する場合において、各々が異なる複数の直交行列P^kに基づいて、直交行列P^k毎に、正照明画像及び負照明画像を生成し、プロジェクタから、正照明画像及び負照明画像の各々を出力させ、出力された正照明画像又は負照明画像をカメラにより撮影するように制御し、直交行列P^kに対する正照明画像及び負照明画像の各々に対して、カメラにより撮影した観測画像から、予め定められた閾値よりも大きい輝度値を有する画素をカメラ応答の画素として検出して応答画像を生成し、直交行列P^kの各々について、上記(6)〜(8)式により、直交行列P^kを表す列ベクトルと、与えられた照明画像を表す列ベクトルとの内積を計算し、直交行列P^kの各々についての、正照明画像及び負照明画像の各々に対する応答画像の差分と、計算された内積とに基づいて、上記(19)式に従って各色成分のリライティング画像C^r、C^g、C^bを計算して、リライティング画像を生成することにより、各色成分の照明画像をプロジェクタから出力したときに得られるシミュレーション結果を表すリライティング画像を精度よく生成することができる。
<第3の実施の形態に係るリライティング画像生成装置の概要>
まず、第3の実施の形態に係るリライティング画像生成装置の概要について説明する。
第3の実施の形態においては、N台のプロジェクタと1台のカメラのマルチプロジェクタ・システムを用いている点が第1の実施の形態と異なる。なお、第1の実施の形態に係るリライティング画像生成装置100と同様の構成及び作用については、同一の符号を付して説明を省略する。また、プロジェクタが切り替えられた場合、当該切り替え先のプロジェクタについて、第1の実施の形態と同様の処理を行う。
<本発明の第3の実施の形態に係るリライティング画像生成装置の構成>
次に、本発明の第3の実施の形態に係るリライティング画像生成装置の構成について説明する。図16に示すように、本発明の第3の実施の形態に係るリライティング画像生成装置300は、カメラ10と、N台のプロジェクタ12A〜プロジェクタ12Nと、演算部320と、出力部90と、を含んで構成されている。
カメラ10は、切替部332において切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの何れか1つのプロジェクタにより投影された正照明画像及び負照明画像を観測し、明るさを示す濃淡画像を取得し、カメラ応答観測部326に出力する。
演算部320は、切替部332と、同期制御部322と、直交照明生成部324と、カメラ応答観測部326と、照明成分解析部28と、画像データベース340と、リライティング画像生成部330とを含んで構成されている。
切替部332は、同期制御部322の切り替え指示により、処理対象となるプロジェクタをプロジェクタ12A〜プロジェクタ12Nのうちの1つに切り替える。なお、第3の実施の形態においては、1番初めの処理対象のプロジェクタとしてプロジェクタ12Aが選択されているものとする。また、第3の実施の形態においては、切替部332は、スイッチや分岐装置などを利用する。また、第3の実施の形態においては、終了条件である全てのプロジェクタについて処理が終了するまで、同期制御部322の切り替え指示により処理対象となるプロジェクタを切り替える。
同期制御部322は、フレーム番号毎に、切替部332において切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから正照明画像又は負照明画像を出力させ、出力された正照明画像又は負照明画像をカメラ10により撮影するように制御する。また、同期制御部322は、フレーム番号fの値が、直交照明生成部324において投影する全ての照明パターンの数の値2L2であるフレーム番号fを直交照明生成部324とカメラ応答観測部326とに送出した時点で繰り返し処理を停止し、切替部332に処理対象となるプロジェクタを切り替える切り替え指示を出力し、切替部332において処理対象となるプロジェクタが切り替えられた後に、フレーム番号fの値を1に初期化し、上記処理を繰り返す。
直交照明生成部324は、切替部332において切り替えられているプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから投影する正照明画像及び負照明画像を生成する。
カメラ応答観測部326は、カメラ10において観測した、切替部332において切り替えられているプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから投影された正照明画像及び負照明画像に対するカメラ応答を検出し、フレーム番号fと対応づけて正照明画像及び負照明画像に対する応答画像を作成し、画像データベース340に記憶する。
画像データベース340には、直交照明生成部24で生成されたフレーム番号fの各々に対応した直交行列P^kと、照明成分解析部28で計算された色成分β毎の内積の値と、プロジェクタ毎の、カメラ応答観測部26で生成されたフレーム番号fの各々に対応した応答画像と、が記憶されている。
リライティング画像生成部330は、プロジェクタ毎に、第1の実施の形態と同様の処理を行って、リライティング画像を生成する。
なお、第3の実施の形態に係るリライティング画像生成装置の他の構成及び作用については、第1の実施の形態と同様であるため、説明を省略する。
以上説明したように、第3の実施の形態に係るリライティング画像生成装置によれば、複数のプロジェクタを用いる場合において、各々が異なる複数の直交行列P^kに基づいて、直交行列P^k毎に、正照明画像及び負照明画像を生成し、何れかのプロジェクタから、正照明画像及び負照明画像の各々を出力させ、出力された正照明画像又は負照明画像をカメラにより撮影するように制御し、直交行列P^kに対する正照明画像及び負照明画像の各々に対して、カメラにより撮影した観測画像から、予め定められた閾値よりも大きい輝度値を有する画素をカメラ応答の画素として検出して応答画像を生成し、直交行列P^kの各々について、上記(6)〜(8)式により、直交行列P^kを表す列ベクトルと、与えられた照明画像を表す列ベクトルとの内積を計算し、直交行列P^kの各々についての、正照明画像及び負照明画像の各々に対する応答画像の差分と、計算された内積とに基づいて、上記(9)〜(11)式に従って照明画像を何れかのプロジェクタから出力したときに得られる各色成分のリライティング画像C^r、C^g、C^bを計算して、リライティング画像を生成することにより、照明画像をプロジェクタから出力したときに得られるリライティング画像を精度よく生成することができる。
<第4の実施の形態に係るリライティング画像生成装置の概要>
まず、第4の実施の形態に係るリライティング画像生成装置について説明する。
第4の実施の形態においては、N台のプロジェクタと1台のカメラのマルチプロジェクタ・システムを用いている点が第2の実施の形態と異なる。なお、第1及び第2の実施の形態に係るリライティング画像生成装置100及びリライティング画像生成装置200と同様の構成及び作用については、同一の符号を付して説明を省略する。また、プロジェクタが選択された場合、当該プロジェクタについて、第2の実施の形態と同様の処理を行って、リライティング画像を生成する。
<本発明の第4の実施の形態に係るリライティング画像生成装置の構成>
次に、本発明の第4の実施の形態に係るリライティング画像生成装置の構成について説明する。図17に示すように、本発明の第4の実施の形態に係るリライティング画像生成装置400は、カメラ210と、N台のプロジェクタ212A〜プロジェクタ212Nと、演算部420と、出力部90と、を含んで構成されている。
カメラ210は、切替部432において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの何れか1つのプロジェクタにより投影された各色成分αの正照明画像及び負照明画像を観測し、色値を表すRGB値を取得し、カメラ応答観測部426に出力する。
演算部420は、切替部432と、同期制御部422と、直交照明生成部424と、カメラ応答観測部426と、照明成分解析部228と、画像データベース440と、リライティング画像生成部430とを含んで構成されている。
切替部432は、同期制御部422の切り替え指示により、処理対象となるプロジェクタをプロジェクタ212A〜プロジェクタ212Nのうちの1つに切り替える。なお、第4の実施の形態においては、1番初めの処理対象のプロジェクタとしてプロジェクタ212Aが選択されているものとする。また、第4の実施の形態においては、切替部432は、スイッチや分岐装置などを利用する。また、第4の実施の形態においては、終了条件である全てのプロジェクタを選択するまで、同期制御部422の選択指示により処理対象となるプロジェクタを選択する。
同期制御部422は、フレーム番号毎に、切替部432において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから色成分βの正照明画像又は負照明画像を出力させ、出力された色成分βの正照明画像又は負照明画像をカメラ210により撮影するように制御する。
直交照明生成部424は、切替部432において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから投影する正照明画像及び負照明画像を生成する。
カメラ応答観測部426は、カメラ210において観測した、切替部432において切り替えられているプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから投影された正照明画像及び負照明画像に対するカメラ応答を検出し、フレーム番号fの各々と対応づけて正照明画像及び負照明画像に対する応答画像を生成し、画像データベース440に記憶する。
画像データベース440には、直交照明生成部424で生成された直交行列P^kと、照明成分解析部228で計算された色成分β毎の内積の値と、プロジェクタ毎の、カメラ応答観測部426で生成された、赤成分、緑成分、及び青成分の各々に対応する各色成分βの応答画像の各々と、が記憶されている。
リライティング画像生成部430は、プロジェクタ毎に、第2の実施の形態と同様の処理を行って、リライティング画像を生成する。
なお、第4の実施の形態に係るリライティング画像生成装置の他の構成及び作用については、第2の実施の形態と同様であるため、説明を省略する。
以上説明したように、第4の実施の形態に係るリライティング画像生成装置によれば、複数のプロジェクタを用いて、各色成分の正照明画像及び負照明画像を被写体に投影する場合において、各々が異なる複数の直交行列P^kに基づいて、直交行列P^k毎に、正照明画像及び負照明画像を生成し、何れかのプロジェクタから、正照明画像及び負照明画像の各々を出力させ、出力された正照明画像又は負照明画像をカメラにより撮影するように制御し、直交行列P^kに対する正照明画像及び負照明画像の各々に対して、カメラにより撮影した観測画像から、予め定められた閾値よりも大きい輝度値を有する画素をカメラ応答の画素として検出して応答画像を生成し、直交行列P^kの各々について、上記(6)〜(8)式により、直交行列P^kを表す列ベクトルと、与えられた照明画像を表す列ベクトルとの内積を計算し、直交行列P^kの各々についての、正照明画像及び負照明画像の各々に対する応答画像の差分と、計算された内積とに基づいて、上記(19)式に従って各色成分のリライティング画像C^r、C^g、C^bを計算して、リライティング画像を生成することにより、照明画像をプロジェクタから出力したときに得られるリライティング画像を精度よく生成することができる。
なお、本発明は、上述した実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
また、本願明細書中において、プログラムが予めインストールされている実施形態として説明したが、当該プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供することも可能であるし、ネットワークを介して提供することも可能である。