以下、図面を参照して本発明の実施の形態を詳細に説明する。
<本発明の実施の形態の概要>
プロジェクタ・カメラシステムの動作を活用したプロジェクション・マッピングにおいて、プロジェクタ画面の1画素がカメラ画面の1画素と対応付けるとは限らない一般的な状況において、できるだけ効率的にLTを計測するとともに、LT行列の逆行列計算に頼らず所定画像を幾何的かつ光学的に補正して、被写体上に正確に投影することが、本発明の実施の形態が解決しようとする課題である。
<本発明の第1の実施の形態に係る画像投影装置の構成>
まず、本発明の第1の実施の形態に係る画像投影装置の構成について説明する。図1に示すように、画像投影装置100は、カメラ10と、プロジェクタ12と、演算部20と、出力部90と、を含んで構成されている。なお、第1の実施の形態においては、1台のプロジェクタと1台のカメラのプロジェクタ・カメラシステムを用いる。
カメラ10は、プロジェクタ12により投影された照明画像を観測し、明るさを示す濃淡画像を取得し、カメラ応答観測部26に出力する。なお、第1の実施の形態においては、プロジェクタ12から出力する単色照明として、例えば、白色照明を用いる。
プロジェクタ12は、単色照明を用いて、照明画像生成部24による出力指示に従って被写体を投影する。
演算部20は、同期制御部22と、照明画像生成部24と、カメラ応答観測部26と、LT行列推定部28と、カラー混合行列生成部30と、輝度補償処理部32と、映像DB40とを含んで構成されている。
同期制御部22は、フレーム番号毎に、プロジェクタ12から照明画像を出力させ、出力された照明画像をカメラ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において投影する全ての照明画像の数の値2Lとなるフレーム番号fを照明画像生成部24とカメラ応答観測部26とに送出した時点で、同期制御部22は、上述の繰り返し処理を停止する。
照明画像生成部24は、以下に説明するように、プロジェクタ12から投影するプロジェクタ画面における照明画像を生成する。
まず、照明画像生成部24において生成する照明画像の概要を説明する。後述するLT行列推定部28では、圧縮センシング(compressive sensing)と呼ばれるスパース信号復元技術により、できるだけ少ないカメラ応答から全体のLTを推定するため、その入力データとしては、できるだけ直交するような照明画像が最適である。直交するとは、照明画像の画素をスキャンして列ベクトルデータに再配置したとき、あるベクトルともう一つベクトルの内積が0になることを指す。完全に直交するのが理想的であるが、ここでは直交に近いものであれば圧縮センシングのための照明画像に利用することできる。本実施の形態では、照明画像として縦ラインあるいは横ラインから構成される照明を照射するための照明画像を生成する。異なる縦ラインの照明画像をベクトル化したときの内積は0であり、異なる横ラインの照明画像をベクトル化したときの内積も0である。縦ラインの照明画像と横ラインの照明画像をベクトル化したときの内積の値は互いに交差した画素数に比例するが、扱うプロジェクタ画面(全体の画素)においてそのライン幅が十分に狭ければほぼ0と見なすことができる。
照明画像生成部24は、具体的には、まず、プロジェクタ12から、縦横ラインの照明画像を投影する範囲:N×N(=1,000×1,000)画素の範囲を設定する。次に、縦横ラインの照明の幅nを設定する。理想的には、n=1画素を設定してもよいが、照明が微弱なために十分なカメラ応答が得られない場合があることを考慮して、第1の実施の形態においては、縦横ラインの照明の幅nはn=4画素に設定する。ただし、nL=N(Lは整数)とし、対象画素領域の縦横サイズNがnの倍数とする。そして、同期制御部22からフレーム番号fを受信すると、当該フレーム番号fがf<=Lである場合、縦ラインの照明画像を設定し、当該フレーム番号fに対応する当該縦ラインの照明画像を映像DB40に記憶すると共に、当該縦ラインの照明画像をプロジェクタ12から投影させる。一方、当該フレーム番号fがf>Lの場合、横ラインの照明画像を設定し、当該フレーム番号fに対応する当該横ラインの照明画像を映像DB40に記憶すると共に、当該横ラインの照明画像をプロジェクタ12から投影させる。図2に照明画像の画素領域をN×N画素としたときの縦ラインの照明画像と横ラインの照明画像の例を示す。縦ラインはn×N画素の大きさをもち、フレーム番号fに従って、左端から右端へ幅nの等間隔で移動する。一方、横ラインの照明画像は、N×n画素の大きさをもち、フレーム番号fに従って、下端から上端へ幅nの等間隔で移動する。縦ライン照明は、f=1では照明画像の画素領域の左端に位置し、f=Lのとき照明画像の画素領域の右端に位置する。一方、横ラインの照明画像は、f=L+1のとき照明画像の画素領域の下端に位置し、f=2Lのとき照明画像の画素領域の上端に位置する。また、照明画像生成部24は、同期制御部22から、フレーム番号fを受信するたびに、上記の縦ラインの照明画像又は横ラインの照明画像を設定し、全ての照明画像(2L本の照明画像)を順番にプロジェクタ12から投影し終えるまで上記処理を繰り返す。
カメラ応答観測部26は、カメラ10において観測した、プロジェクタ12から投影された照明光に対する観測画像の各々について、赤色、青色、及び緑色(以下、rgbと称する)の色成分α毎に、予め定めた閾値よりも大きい輝度値を有する画素をカメラ応答の画素C’αiとして検出する。具体的には、まず、観測範囲を設定する。第1の実施の形態においては、カメラ10において観測された画像全体を処理対象とせず、当該設定により指定された範囲のカメラ応答を検出する。第1の実施の形態においては、例えば、画像内でのM×M(=1,000×1,000)画素の範囲を指定する。次に、カメラ応答を検出するための閾値を設定する。当該閾値は、カメラ応答を検出する範囲の画素の各々について、当該閾値以上の輝度値である画素をカメラ応答として検出する。次に、同期制御部22からフレーム番号fを受信すると、カメラ10が画像を取得することができる状態かのチェックを行い、撮影可能状態ならばカメラ10から観測画像を取得する。次に、映像DB40に記憶されているプロジェクタ12により照明画像を投影していない状態の観測画像である背景画像を取得し、観測画像と背景画像との背景差分を処理する。当該背景差分において、蛍光灯などの環境光の下では画像雑音が多く混入するため、設定した閾値として例えば10階調に設定しておき、当該値よりも大きい画素の各々をカメラ応答の画素C’αiとして検出する。次に、検出されたカメラ応答の画素の各々について、2次元座標と共に、カメラ応答の輝度値を所定のデータ形式で応答データとして映像DB40に記憶する。図3に、カメラ応答を濃淡値として応答データを保存する場合の例を示し、左端には、検出された画素の座標が書き込まれ、その右側にカメラ応答の輝度値が書き込まれる場合を例として示す。そして、カメラ10による次のカメラ観測に備えて、同期制御部22へ応答信号を送信し、フレーム番号を受信するまで待機する。なお、カメラ応答観測部26の処理は、プロジェクタ12から投影される縦ラインの照明画像又は横ラインの照明画像を観測したカメラ10における観測画像から取得した応答データを映像DB40に記憶し、全ての縦ラインの照明画像及び横ラインの照明画像の各々についての応答データを映像DB40に記憶した時点で終了する。なお、初回に、カメラ観測を行う場合には、カメラ応答観測部26から応答信号を同期制御部22へ送信する。なお、行列及びベクトルを表す場合には、記号の後ろに「’」を付して表現する。
LT行列推定部28は、照明画像生成部24により生成されたフレーム番号毎の照明画像と、カメラ応答観測部26によりrgbの色成分α毎に観測されたフレーム番号毎のカメラ応答の画素Cαiの各々とに基づいて、rgbの色成分α毎に、カメラ応答の画素Cαiの各々について、カメラ応答の画素Cαiに対する照明画像の画素Pjの対応関係を表すLTベクトルの各々を求めることにより、照明画像の画素Pj及びカメラ応答の画素Cαi間の対応関係を表すLT行列を推定する。
本実施の形態では、LT行列推定部28は、圧縮センシング(compressive sensing)を利用して、LT行列の全ての要素を推定する。
まず、LT行列推定部28における圧縮センシングの原理を説明する。未知な被写体への映像投影において、N2次元のプロジェクタ照明ベクトルP’(N×N画素のプロジェクタ12から投影する照明画像をベクトル化したデータ)が与えられるとプロジェクタ・カメラシステムはM2次元のカメラ観測ベクトルをC’とする(M×M画素のカメラ観測画像をベクトル化したデータ)と仮定する。一般的に、未校正なプロジェクタ・カメラシステムを使って任意の被写体(被写体は、その3次元形状と反射特性が不明であるとする)へ映像を投影するとき、照明画像とカメラ応答の入出力対応は、M2×N2のLT行列T’を用いると、以下(1)式で表される。
LT行列T’は、カメラ間の幾何的・光学的対応関係として、プロジェクタの画素から放射された光が被写体に反射したときの直接反射、間接反射を記述する。F’は環境照明に対応するカメラ応答であり、カメラ応答観測部26で用いた背景画像に相当する。なお、暗室環境でプロジェクタ・カメラシステムを用いる場合には、プロジェクタからのブラックオフセット光に反応したカメラ応答が主成分である。
上記(1)式は任意のプロジェクタ照明とカメラ観測のペアについて成り立ち、K種類のプロジェクタ照明{P’1,P’2,・・・,P’K}を用いて、そのカメラ応答{C’1,C’2,・・・,C’K}を観測するとき、以下(2)式を満たす。
プロジェクタ・カメラシステムを用いてLTを獲得することは、ユーザによって設計されたプロジェクタ照明を用いて、そのカメラ応答に基づいて行列T’を推定することを意味する。ここで、事前に黒画像を投影したカメラ応答画像から背景画像を得て、各カメラ応答はその背景差分によりベクトルF’が取り除かれているとする。
本実施の形態では、プロジェクタ照明に縦横ラインの照明を照射するための照明画像を用いるため、(2)式ではK=2Lであり、各プロジェクタ照明{P’1,P’2,・・・,P’K}は該当する縦横ラインの照明画像の2次元画素の並びを列に再配置したベクトルとする。一方のカメラ応答データは、カメラ応答観測部26において図3のデータ形式で保存されている。上記(2)式のカメラ応答{C’1,C’2,・・・,C’K}は、カメラ応答データの画素座標に基づいて2次元画素の並びを列に再配置したベクトルとする。
(2)式の転置をとると、以下(3)式を得る。
ただし、便宜上、
と置換した(以降では、行列Φ’をセンシング行列と呼ぶ)。上記(3)式の左辺のK×M2の行列の各列をK次元ベクトルの各々からなる
で表し、上記(3)式の右辺の行列T’Tの各列をN2次元ベクトルの各々からなる
で表すことにより、上記(3)式は、
と書き直すことができる。(5)式から、第i列のK次元ベクトルv’iは、
となる。LT行列推定部28では、v’iを応答ベクトル、u’iをLTベクトルと呼ぶことにする。上記(6)式は、N2次元のLTベクトルu’iを入力とし、K×N2の行列の線形変換によってK次元の応答ベクトルv’iを出力すると解釈することができる。
上記(6)式では、応答ベクトルv’iは、i番目のカメラ応答の画素におけるK種類の照明画像に対する時系列の応答を表し、未知のLTベクトルu’iをK種類の照明画像から構成される行列Φ’に変換することで得られる。一般的に、LT行列T’はスパースな性質をもつため、その行列を構成するLTベクトルu’iもスパースである。LT行列推定部28は、(6)式に基づいてLTベクトルu’iを求めるために圧縮センシングを利用する。
圧縮センシングとは、l1ノルム最小化の原理に基づいており、(6)式において、
を満たす解u’iを求める信号処理手法である。(7)式において、
はl1ノルムを表し、
はl2ノルムを表す。圧縮センシングには様々なアルゴリズムが公知であるが、ここでは、実装が容易であり、理論的に収束性の良い、ROMP(Regularized Orthogonal Matching Pursuit)アルゴリズムを利用して解u’iを求める。圧縮センシングにより、個々のu’i,i=1,2,・・・,M2を求めると、M2×N2のLT行列T’は、M2セットのLTベクトル
により、
と得られる。
以上の原理に基づいて、LT行列推定部28の処理内容を説明する。LT行列推定部28が処理を開始すると、まず、上記(4)式に従ってセンシング行列Φ’を算出する。圧縮センシングを作動させるため、上記(7)式におけるパラメータεを設定する。カメラ応答には雑音が付加されているため、例えば、ε=0.01と与える。次に、映像DB40に格納されたカメラ応答データを逐次読み出して、i番目の応答ベクトルv’iを生成する。なお、応答ベクトルv’iはi番目のカメラ応答C’iとは異なる。
(3)式、及び(5)式から明らかなように、応答ベクトルv’iは、K種類のカメラ応答{C’1,C’2,・・・,C’K}のi番目の要素を取り出してベクトル化したデータである。
映像DB40に格納されたカメラ応答データはrgbの輝度値をもつため、各色の応答データをαチャネルの応答データと呼ぶことにする(α∈{r,g,b})。応答ベクトルv’jの生成では、映像DB40からカメラ応答データを適宜読み出し、K種類のカメラ応答データのうちのαチャネルのカメラ応答{C’1,C’2,・・・,C’K}から、i番目の要素のみを取り出して、N2次元ベクトルv’iを生成する。
次に、LT行列推定部28は、ROMPアルゴリズムを利用して、上記(7)式を満たすLTベクトルu’iを復元する。LT行列の構築では、事前にM2×N2の行列バッファT’αβ,(α=β)を用意しておき、上記(8)式に従って、j番目の行にLTベクトルの転置、すなわち、u’T jを代入する。なお、通常のメモリサイズで用意するのではなく、スパース表現でメモリを確保し、LTベクトルの非零要素のみを代入する。
LT行列推定部28は、以上の処理を、rgbチャネルの応答データの全ての画素i=1,2,・・・,M2について処理すると、rチャネルの応答データから推定したLT行列T’rr、gチャネルの応答データから推定したLT行列T’gg、bチャネルの応答データから推定したLT行列T’bbが得られる。そして、LT行列推定部28は、これらのLT行列を映像DB40に格納する。
カラー混合行列生成部30は、LT行列推定部28により推定されたrgbの色成分α毎のLT行列に基づいて、カメラ応答のi番目の画素の各々に対し、カメラ応答のi番目の画素と対応関係を有する照明画像のj番目の画素の各々についての、rgbの色成分α毎のLT行列の要素を含む、rgbの色成分α及び照明画像のrgbの色成分βの組み合わせの各々に対する要素からなるカラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントする。
カラー混合行列生成部30の具体的な処理について以下に説明する。カラー混合行列生成部30が処理を開始すると、まずLT行列推定部28で指定したM×Mのカメラ応答の各画素に関する輝度分配テーブルを初期化する(全てのテーブル値を0にセットする)。次に、N×Nの照明画像の各画素に関する輝度調整テーブルも初期化する(全てのテーブル値を0にセットする)。輝度分配テーブルとは1つのカメラ応答の画素が1つ又は2つ以上の照明画像の画素とLTの関係で結びつく回数を表し、輝度調整テーブルとは、1つの照明画像の画素が1つ又は2つ以上のカメラ応答の画素とLTの関係で結びつく回数を表す。テーブルの例としては、特定の形式である必要はなく、輝度分配テーブルでは、カメラ応答の画素を指標にして、照明画像の画素と結びつく回数を記録するだけのデータ形式を用意すればよく、輝度調整テーブルでは、照明画像の画素を指標にして、カメラ応答の画素と結びつく回数を記録するだけのデータ形式を用意すればよい。なお、LT行列は、縦方向がカメラ応答の画素の配置を表し、横方向が照明画像の画素の配置を表す行列形式である。
次に、カラー混合行列生成部30は、カラー混合行列V’ijを生成する。ここで、カラー混合行列V’ijの生成の原理について説明する。一般的に、任意の照明画像P’を構成する照明画像の画素のrgbの輝度値Prj,Pgj,Pbjから、その観測画像C’を構成するカメラ応答の画素のrgb輝度値Cri,Cgi,Cbiは、行列T’を用いて図4の行列演算で表現することができる。図4の行列T’は、9つのLT行列、すなわち、T’αβ,α={r,g,b},β={r,g,b}から構成される。本実施の形態では、白色照明を使ってLT行列T’rr、T’gg、T’bbだけを求めるため、T’=0、α≠βを用意しておく。
例として、LT行列によりカメラ応答の画素C’i=(Cri,Cgi,Cbi)が複数の照明画像の画素P’j=(Prj,Pgj,Pbj),P’j∈Ωiとが結びつくとする。Ωiは、カメラ応答の画素C’i=(Cri,Cgi,Cbi)とLTの関係にある複数の照明画像の画素P’j=(Prj,Pgj,Pbj)の集合を意味する。図4では、縦の破線は照明画像の画素P’j=(Prj,Pgj,Pbj)と結びつくLT行列の要素を示しており、横の破線はカメラ応答の画素C’i=(Cri,Cgi,Cbi)と結びつくLT行列の要素を示している。縦の破線と横の破線が交差する網掛けのLT行列の要素が、照明画像の画素P’j=(Prj,Pgj,Pbj)とカメラ応答の画素C’i=(Cri,Cgi,Cbi)を直接に結びつける行列要素になる。そこで、LT行列T’αβ,α={r,g,b},β={r,g,b}において、色成分α及び色成分βの組み合わせの各々に対する、カメラ応答のi番目の画素と照明画像のj番目の画素とに関わる要素だけを取り出して、以下(9)式により3×3のカラー混合行列V’ijを再形成することができる。
そして、上記(9)式の行列V’ijを用いて、カメラ応答の画素C’iを以下(10)式によりの線形結合で表現することができる。
以上の原理に基づいて、カラー混合行列生成部30は、カラー混合行列V’ijを生成する。まず、カラー混合行列生成部30は、LT行列T’rr、T’gg、及びT’bbを映像DB40から読み出す。そして、それぞれのLT行列においてカメラ座標C’iを指定して、指定したカメラ応答の画素C’iについて、その横方向に記録された全てのプロジェクタ座標において非零の要素を検出する。図4のLTの関係であるとして、i番目のカメラ応答の画素C’i=(Cri,Cgi,Cbi)を指定したときに、j番目の画素P’j=(P’rj,P’gj,P’bj)に対応する要素から非零の要素が検出されると、LT行列T’αβ、α={r、g、b}、β={r、g、b}から、対応する9つの行列要素を抽出し、上記(9)式のカラー混合行列V’ijを生成する。次に、カラー混合行列V’ijの行列式det(V’ij)を計算し、det(V’ij)≠0であるときカラー混合行列V’ijの逆行列が存在するとして、以下(11)式のカラー混合行列の逆行列V’ij −1を求める。
このとき、輝度分配テーブルのi番目のカメラ応答の画素C’i=(Cri,Cgi,Cbi)を示す欄に1票を投じ、同時に、輝度調整テーブルの照明画像のj番目の画素P’j=(P’rj,P’gj,P’bj)を示す欄に1票を投じる。輝度分配テーブルの投票値は、(10)式の線形結合において、カメラ応答の画素C’i=(Cri,Cgi,Cbi)に対し、LTの関係にある複数の照明画像の画素P’j=(P’rj,P’gj,P’bj)の個数をカウントして得た値である。一方、輝度調整テーブルの投票値は、照明画像の画素P’j=(P’rj,P’gj,P’bj)がカメラ応答の画素C’i=(Cri,Cgi,Cbi)とLTの関係で結びつく個数をカウントして得た値である。また、行列V’ijの行列式det(V’ij) =0である場合は、その逆行列は計算できないとして、データを破棄して、i番目のカメラ応答の画素C’i=(Cri,Cgi,Cbi)を指定したときに非零の要素が検出される、次の照明画像の画素に対する処理へ移行する。以上述べたように、LT行列における全てのカメラ座標におけるカメラ応答の画素C’i=(Cri,Cgi,Cbi)について、カラー混合行列の関係で結び付く全てのプロジェクタ座標における照明画像の画素P’jに関して、カラー混合行列の逆行列V’ij −1、輝度分配テーブルの投票結果、並びに、輝度調整テーブルの投票結果を映像DB40に保存する。
輝度補償処理部32は、第1の処理として、入力された画像(以下、所定画像と称する)を得るためにプロジェクタ12から出力する照明画像である投影画像に対して、カメラ応答のi番目の画素の各々について、映像DB40の輝度分配テーブルに格納されているカメラ応答のi番目の画素と対応関係を有する照明画像のj番目の画素に対してカウントされた照明画像の画素の個数M’jと、所定画像のi番目の画素と、映像DB40の輝度調整テーブルに格納されているカメラ応答のi番目の画素に対してカウントされたカメラ応答の画素の個数Niと、カラー混合行列生成部30により求められた、カメラ応答のi番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を補償する。なお、所定画像は、予め被写体を撮影した未補償の画像であり、映像DB40に格納しておくものとする。また、以下の説明では1枚の所定画像に対して処理を行う場合を例に説明するが、複数の所定画像に対して処理を行ってもよい。
また、輝度補償処理部32は、第2の処理として、補償された投影画像、又は前回更新された投影画像をプロジェクタ12から出力させてカメラにより撮影することにより得られた観測画像のi番目の画素の各々についての、所定画像のi番目の画素との誤差が、予め定められた条件を満たすまで、観測画像のi番目の画素の各々について、輝度分配テーブルに格納されている、i番目の画素と対応関係を有する照明画像のj番目の画素に対する個数Mjと、所定画像のi番目の画素についての誤差と、輝度調整テーブルに格納されたカメラ応答のi番目の画素に対する個数Niと、カラー混合行列生成部30により求められた、i番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を繰り返し更新する。
輝度補償処理部32は、具体的には、以下に説明する第1の処理及び第2の処理を行う。
まず、輝度補償処理部32における第1の処理における輝度の補償の原理について説明する。ここでは、カラー混合行列生成部30で得たカラー混合行列の逆行列V’ij −1を用いて、映像DB40から取り出した所定画像の各画素の輝度を補償して被写体へ投影するのが、主な処理内容である。本処理では、説明の便宜上、カラー混合行列の逆行列V’ij −1、輝度分配テーブルの投票結果Ni、及び輝度調整テーブルの投票結果Mjを総称して補償パラメータとする。
本実施の形態では、カメラで観測したときの各画素の画素値を所定画像の画素値にするように補償する処理において、上記非特許文献3で公開されているカラー混合行列(color-mixing matrix)を使った輝度補償の方法を利用する。プロジェクタ12から出力される照明以外の照明が被写体に照射されている一般的な状況では、上記(10)式の関係は、カメラ応答の輝度C’iと投影画像の輝度P’jにおいて、以下(12)式のように表すことができる。
ここで、F’iはブラックオフセット光(黒の画像をプロジェクタから投影したときに放出される微弱な投影光)を含む環境光の成分を表す。各画素のF’iは、任意の環境照明の下で、黒の画像をプロジェクタから投影してカメラで観測すれば容易に得ることができる。
輝度補償の処理とは、上記(12)式に基づいて、カメラ応答のi番目の画素C’iの各々について、LTの関係で結びつく投影画像の画素の輝度P’jを等分配則により決定する。具体的には、所定画像の画素C’iが与えられると、その輝度から環境光の成分を差し引いた後、LTの関係で結びつく補償パラメータ、すなわち、カラー混合行列の逆行列V’ij −1を用いて、以下(13)により投影画像の画素の輝度P’j (i)を算出する。
上記(13)式において、Niは、映像DB40の輝度分配テーブルにおけるカメラ応答のi番目の画素を示す欄の投票結果である。ここで、投票数がNi=0のときは上記(13)式において、P’j (i)=0と設定する。一方、映像DB40の輝度調整テーブルにおいて照明画像のj番目の画素を示す欄の投票数がMj>1であるとき、当該照明画像の画素は複数のカメラ応答の画素とLTの関係にある。この場合、上記(13)式により、複数のカメラ応答の画素の輝度C’iからそれぞれの投影画像の画素の輝度補償値が算出されることになる。例えば、上記(13)式により、Mj個のカメラ応答の画素から照明画像の輝度
が算出されるとする。複数のプロジェクタ輝度の不整合を解消するため、以下(14)式に示す平均化により、照明画像の輝度を統一することにより補償する。
上記の輝度補償の原理に基づいて、輝度補償処理部32は第1の処理を行う。第1の処理において、まず、全ての補償パラメータを読み出す。次に、映像DB40から所定画像を読み出して、全ての投影画像の画素を初期化する(P’j=0)。
そして、カメラ応答の各画素を処理対象として、以下の処理を繰り返す。
処理対象のi番目の画素について、映像DB40の輝度分配テーブルを参照して投影画像の画素への分配数である個数Niを得る。次に、カメラ応答の画素に対してLTの関係で結びつく照明画像のj番目の画素の各々について、映像DB40の輝度調整テーブルを参照して、カメラ応答の画素との結合数である個数Mjを得る。次に以下(15)式の計算に従って、所定画像のi番目の画素C’iを用いて、投影画像の画素P’jの輝度を調整する。なお、環境光ベクトルF’iは、カメラ応答観測部26の処理において、背景差分に用いた背景画像を利用すればよい。
上記(15)式によれば、複数の照明画像の画素と複数のカメラ応答の画素がLTの関係で幾何的に対応付けられることを前提にして投影画像の各画素の輝度を補償することができる。このように、第1の処理により、全てのカメラ応答の画素に対して、照明画像の画素P’jの輝度を補償する処理を行う。
次に輝度補償処理部32の第2の処理について説明する。第2の処理では、まず、第1の処理で補償された照明画像の画素P’jから構成される補償画像をプロジェクタ12から被写体へ投影する。続いて、カメラ10によりその投影画像を観測して、所定画像のi番目の画素C’iとその観測画像のi番目の画素C’i(t)との間の輝度の誤差ΔC’i(t)を以下(16)式により検出する。
上記(16)式では回数tを状態の変化を表す指標として用いており、C’i(t)はプロジェクタ12から補償画像が投影された回数tに対するカメラ10による観測画像のi番目の画素である。この表記に伴い、上記(15)式により算出した投影画像の各画素P’jの輝度を時刻t=0の初期状態P’j (0)とする。このとき、観測画像の画素C’iの全ての輝度誤差が、以下(17)式を満たして所定の許容値δ以内である場合、本処理を停止する。
ここで、δはシステムの環境に応じてユーザの要望に応じて自由に設定してよいパラメータである。ここで、輝度誤差ΔC’i(t) が所定の許容値δ以上である場合は、フィードバックとなる投影画像の輝度ΔP’j(t) を初期化(ΔP’j(t) =0)しておき、上記(15)式と同様に、回数tにおける観測画像に関する投影画像の画素P’jに対してフィードバックする輝度を、以下(18)式により算出する。
続いて、現在の回数tにおいてプロジェクタ12から出力する投影画像の各画素値がP’j(t) のとき、次の回数t+1においてプロジェクタ12から出力する投影画像の各画素P’j(t + 1)の輝度を以下(19)式により更新する。
上記(19)式では、以下(20)式のゲイン行列G’を用いられる。
ここで、パラメータκは0<κ<1の任意の値であり、本実施の形態ではκ=0.2と設定する。
以上のように、輝度補償処理部32の第2の処理においては、反復的な輝度補償を、観測画像の画素C’iの全ての輝度誤差が(17)式を満たすまで繰り返す。
<本発明の第1の実施の形態に係る画像投影装置の作用>
次に、本発明の第1の実施の形態に係る画像投影装置100の作用について説明する。まず、同期制御処理ルーチンについて説明する。
図5に示す、ステップS100では、フレーム番号fの値を1に初期化する。
次に、ステップS102では、カメラ応答観測部26から応答信号を受信したか否かを判定する。応答信号を受信した場合には、ステップS104へ移行し、応答信号を受信しない場合には、ステップS102の処理を繰り返す。
次に、ステップS104では、ステップS100又はステップS108において取得したフレーム番号fを照明画像生成部24及びカメラ応答観測部26に送出する。
次に、ステップS106では、フレーム番号fの値が2Lの値か否かを判定する。フレーム番号fの値が2Lである場合には、同期制御処理ルーチンを終了し、フレーム番号fの値が2Lよりも小さい場合には、ステップS108へ移行する。
ステップS108では、フレーム番号fの値に1を加えた値をフレーム番号fの値として設定し、ステップS102へ移行して、ステップS102〜ステップS106の処理を繰り返す。
次に、図6に示す、照明画像生成処理ルーチンについて説明する。
まず、ステップS200では、縦横ラインの照明画像を投影する照明対象領域をN×N画素と設定する。
次に、ステップS202では、縦ライン及び横ラインの照明の幅nを設定する。
次に、ステップS204では、同期制御部22からフレーム番号fを受信したか否かを判定する。フレーム番号fを受信した場合には、ステップS206へ移行し、フレーム番号fを受信していない場合には、ステップS204の処理を繰り返す。
次に、ステップS206では、ステップS204において取得したフレーム番号fの値がLより大きいか否かを判定する。フレーム番号fがL以下である場合には、ステップS208へ移行し、フレーム番号fがLより大きい場合には、ステップS212へ移行する。
次に、ステップS208では、フレーム番号fに対応する縦ライン照明を照射するための照明画像を設定する。
次に、ステップS210では、ステップS208において設定した縦ライン照明画像を、ステップS204において取得したフレーム番号fと対応させて映像DB40に記憶する。
ステップS212では、フレーム番号fに対応する横ライン照明を照射するための照明画像を設定する。
次に、ステップS214では、ステップS212において設定した横ライン照明画像を、ステップS204において取得したフレーム番号fと対応させて映像DB40に記憶する。
ステップS216では、ステップS208又はステップS212において設定した縦ライン照明画像又は横ライン照明画像をプロジェクタ12から出力する。
次に、ステップS218では、ステップS204において取得したフレーム番号fの値が2Lであるか否かを判定する。フレーム番号fの値が2Lである場合には、照明画像生成処理ルーチンを終了し、フレーム番号fの値が2Lより小さい場合には、ステップS204へ移行し、ステップS204〜ステップS218の処理を繰り返す。
次に、図7に示す、カメラ応答観測処理ルーチンについて説明する。
まず、ステップS300では、カメラ10において観測する範囲をM×M画素の範囲に設定する。
次に、ステップS302では、カメラ応答に対する所定の閾値を設定する。
次に、ステップS304では、映像DB40に記憶されている背景画像を読み込む。
次に、ステップ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と対応づけて映像DB40に記憶する。
次に、ステップS322では、ステップS308において取得したフレーム番号fの値が2Lであるか否かを判定する。フレーム番号fの値が2Lである場合には、カメラ応答観測処理ルーチンを終了し、フレーム番号fの値が2Lよりも小さい場合には、ステップS306へ移行し、ステップS306〜ステップS322の処理を繰り返す。
次に、図8に示す、LT行列推定処理ルーチンについて説明する。
まず、ステップS400では、フレーム番号毎に生成された照明画像に基づいて、上記(4)式に従ってセンシング行列Φ’を算出する。
次に、ステップS402では、上記(7)式におけるパラメータεを、ε=0.01と設定する。
次に、ステップS404では、カウンタiをi=1に初期化する。
次に、ステップS406では、カウンタiの値に基づいて、カメラ応答のi番目の画素を指定する。
次に、ステップS408では、ステップS406で指定されたカメラ応答のi番目の画素について、映像DB40に格納されたカメラ応答データを読み出して、色成分αに対する応答ベクトルv’iを生成する。
次に、ステップS410では、カメラ応答のi番目の画素について、ステップS400で算出したセンシング行列Φ’と、ステップS408で生成した応答ベクトルv’iとに基づいて、上記(7)式を満たす、色成分αに対するLTベクトルu’iを復元する。
次に、ステップS412では、カメラ応答のi番目の画素について、予め用意されたM2×N2の行列バッファT’αβ,(α=β)に対し、上記(8)式に従って、j番目の行にLTベクトルの転置u’T jを代入し、LT行列を構築し、映像DB40に保存する。
次に、ステップS414では、iがM2であるかを判定し、M2であればステップS418へ移行し、M2でなければステップS416へ移行する。
次に、ステップS416では、カウンタiをi=i+1とカウントアップして、ステップS406へ移行する。
次に、ステップS418では、全ての色成分αについてステップS404〜ステップS414までの処理を終了したか否かを判定する。全ての色成分αについてステップS404〜ステップS414までの処理を終了している場合には、LT行列推定処理ルーチンを終了し、全ての色成分αについてステップS404〜ステップS414までの処理を終了していない場合には、対象となる色成分αを変更し、ステップS404へ移行する。なお、対象となる色成分αは、赤色、緑色、青色の順に変更される。
次に、図9に示す、カラー混合行列生成処理ルーチンについて説明する。
まず、ステップS500では、輝度分配テーブルの全てのテーブル値を0にセットし、初期化する。
次に、ステップS502では、輝度調整テーブルの全てのテーブル値を0にセットし、初期化する。
次に、ステップS504では、映像DB40からLT行列T’rr、T’gg、及びT’bbを読み込む。
次に、ステップS506では、カウンタiをi=1に初期化する。
次に、ステップS508では、カウンタiの値に基づいて、カメラ応答のi番目の画素を指定する。
次に、ステップS510では、ステップS406で指定されたカメラ応答のi番目の画素について、その横方向に記録された全ての照明画像の画素に対するプロジェクタ座標において非零の要素を検出する。
ステップS511では、ステップS510で非零の要素が検出された照明画像の画素から、カメラ応答のi番目の画素と結びつく照明画像のj番目の画素を1つ選択する。
次に、ステップS512では、カメラ応答のi番目の画素と、ステップS511で選択された照明画像のj番目の画素との組み合わせについて、LT行列T’αβ、α={r、g、b}、β={r、g、b}から、対応する9つの行列要素を抽出し、上記(9)式のカラー混合行列V’ijを生成する。
次に、ステップS514では、ステップS512で計算されたカラー混合行列V’ijの行列式det(V’ij)を計算し、det(V’ij)≠0であるかを判定する。det(V’ij)≠0であれば、ステップS518へ移行し、det(V’ij)≠0でなければステップS516へ移行する。
次に、ステップS516では、ステップS512で抽出された行列要素を破棄し、ステップS511へ移行して、次の非零の要素が検出された照明画像の画素を選択する。
次に、ステップS518では、輝度分配テーブルのi番目のカメラ応答の画素C’i=(Cri,Cgi,Cbi)を示す欄に投票する。
次に、ステップS520では、輝度調整テーブルの照明画像のj番目の画素P’j=(P’rj,P’gj,P’bj)を示す欄に投票する。
ステップS522では、ステップS512で計算されたステップS512で計算されたカラー混合行列V’ijの逆行列を計算し、補償パラメータとして映像DB40に保存する。
ステップS523では、ステップS510で非零の要素が検出された照明画像の全ての画素について、ステップS511〜ステップS522の処理を実行したか否かを判定する。ステップS511〜ステップS522の処理を実行していない、非零の要素が検出された照明画像の画素が存在する場合には、ステップS511へ戻る。一方、ステップS510で非零の要素が検出された照明画像の全ての画素について、ステップS511〜ステップS522の処理を実行した場合には、ステップS524へ進む。
次に、ステップS524では、iがM2であるかを判定し、M2であれば処理を終了し、M2でなければステップS526へ移行する。
次に、ステップS526では、カウンタiをi=i+1とカウントアップして、ステップS508へ移行する。
次に、図10及び図11に示す、輝度補償処理ルーチンについて説明する。
まず、ステップS600では、映像DB40から補償パラメータを読み込む。
次に、ステップS602では、映像DB40から所定画像を読み込む。
次に、ステップS604では、ステップS602で読み込んだ所定画像に対する、全ての投影画像の画素をP’j=0と初期化する。
次に、ステップS606では、カウンタiをi=1に初期化する。
次に、ステップS608では、カウンタiの値に基づいて、処理対象となるカメラ応答のi番目の画素を指定する。
次に、ステップS610では、カメラ応答の処理対象のi番目の画素について、ステップS600で読み込んだ補償パラメータのうちの輝度分配テーブルを参照して投影画像の画素への分配数である個数Niを取得する。
次に、ステップS612では、カメラ応答のi番目の画素に対してLTの関係で結びつく照明画像の各画素P’iについて、ステップS600で読み込んだ補償パラメータのうちの輝度調整テーブルを参照して、カメラ応答の画素との結合数である個数Mjを取得する。
次に、ステップS614では、カメラ応答のi番目の画素に対してLTの関係で結びつく照明画像の各画素P’iについて、ステップS610で取得した個数Ni及びステップS612で取得した個数Mjを用いて、上記(15)式に従って、投影画像の画素P’jの輝度を調整する。
次に、ステップS616では、iがM2であるかを判定し、M2であればステップS620へ移行し、M2でなければステップS618へ移行する。
次に、ステップS618では、カウンタiをi=i+1とカウントアップして、ステップS608へ移行する。
次に、ステップS620では、回数tをt=1に初期化する。
次に、ステップS624では、ステップS612で調整され、又はステップS634で更新された投影画像をプロジェクタ12から被写体へ投影する。
次に、ステップS626では、ステップS624で投影されたt回目の投影画像の観測画像を取得する。
次に、ステップS628では、i番目の画素の各々について、所定画像のi番目の画素C’iと、ステップS626で取得した観測画像のi番目の画素C’i(t)との間の輝度の誤差ΔC’i(t)を以下(16)式により検出する。
次に、ステップS630では、ステップS628で検出された全ての画素についての誤差ΔC’i(t)が、上記(17)式を満たして所定の許容値δ以内であるかを判定し、許容値δ以内であれば、輝度補償処理ルーチンを終了し、少なくとも1つの画素についての誤差ΔC’i(t)が許容値δ以内でなければステップS631へ移行する。
次に、ステップS631では、カウンタiをi=1に初期化する。
次に、ステップS632では、カウンタiの値に基づいて、カメラ応答のi番目の画素を指定する。
次に、ステップS633では、カメラ応答のi番目の画素に対してLTの関係で結びつく投影画像の各画素P’iに対してフィードバックする輝度を、上記(18)式により算出する。
次に、ステップS634では、ステップS633により算出した輝度を反映して、次の回数t+1においてプロジェクタ12から出力する投影画像の各画素P’j(t + 1)の輝度を上記(19)式により更新する。
次に、ステップS638では、iがM2であるかを判定し、M2であればステップS642へ移行し、M2でなければステップS640へ移行する。
次に、ステップS640では、カウンタiをi=i+1とカウントアップして、ステップS632へ移行する。
次に、ステップS642では、回数tをt=t+1とカウントアップして、ステップS624へ移行する。
以上説明したように、本発明の第1の実施の形態に係る画像投影装置によれば、フレーム番号毎に、プロジェクタから照明画像を出力させ、カメラにより撮影した観測画像の各々について、カメラ応答の色成分α毎に、カメラ応答の画素Cαiを検出し、フレーム番号毎の照明画像と、カメラ応答の画素Cαiの各々とに基づいて、LT行列を推定し、LT行列に基づいて、色成分α及び照明画像の色成分βの組み合わせの各々に対する要素からなるカラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントし、入力された画像を得るためにプロジェクタから出力する照明画像である投影画像に対して、カメラ応答のi番目の画素の各々について、カウントされた照明画像の画素の個数Mjと、入力された画像のi番目の画素と、カウントされたカメラ応答の画素の個数Niと、カメラ応答のi番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を補償することにより、効率よく、投影画像の輝度を補償できる。
また、本発明の第1の実施の形態に係る画像投影装置によれば、輝度補償により処理することにより、任意被写体表面に投影された各プロジェクタ画素に応じてその輝度を柔軟に調整することができる。
また、本発明の第1の実施の形態に係る画像投影装置によれば、プロジェクタ照明とそのカメラ応答から効率的にLTを計測し、スパースかつ巨大サイズのLT行列の逆行列を計算することを回避して、平面スクリーンへの画像投影と同様に、被写体投影の幾何歪みが無く、投影輝度が補償された高品質な画像を投影できる。
<第2の実施の形態に係る画像投影装置の概要>
次に、第2の実施の形態に係る画像投影装置200の概要について説明する。本来、赤、緑、及び青のスペクトルは、可視光の波長帯において分布しているため、プロジェクタ・カメラシステムでは、プロジェクタとカメラ間のカラー混合(color mixing あるいはcrosstalk)が発生する場合がある。この現象は、プロジェクタ装置とカメラ装置の組み合わせに依存する。第2の実施の形態では、カラー混合を無視できないプロジェクタ・カメラシステムを用いたとき、図12の処理構成においてrgb原色のカラー照明を用いて被写体を投影し、そのカメラ応答画像を観測してLT行列を推定する。第2の実施形態では、説明の便宜上、rgb原色のカラー照明のいずれかを色成分β,β∈{r,g,b}のプロジェクタ照明と呼び、観測したカメラ画像のrgbのカラー応答のいずれかを色成分α,α∈{r,g,b}のカメラ応答と呼ぶ。第2の実施の形態ではカラー照明を用いて、そのカメラ応答画像から圧縮センシング手法によりT’αβ,(α=β)を推定するだけではなく、カラー混合に相当するT’αβ,(α≠β)も推定する。
<本発明の第2の実施の形態に係る画像投影装置の構成>
次に、本発明の第2の実施の形態に係るリライティング画像生成装置の構成について説明する。図12に示すように、画像投影装置200は、カメラ210と、プロジェクタ212と、演算部220と、出力部90と、を含んで構成されている。
カメラ210は、プロジェクタ212により投影された、各色成分βの照明画像を観測し、色値を表すrgb値を取得し、カメラ応答観測部226に出力する。
プロジェクタ212は、各色成分βの照明画像の各々を用いて、照明画像生成部224による出力指示に従って被写体を投影する。
演算部220は、同期制御部222と、照明画像生成部224と、カメラ応答観測部226と、LT行列推定部228と、カラー混合行列生成部230と、輝度補償処理部32と、映像DB240とを含んで構成されている。
同期制御部222は、フレーム番号毎に、プロジェクタ212から照明を照射させ、照射された照明をカメラ210により撮影するように制御する。具体的には、まず、プロジェクタ212から投影される特定の照明画像を表すフレーム番号fをf=1に初期化する。次に、カメラ応答観測部226からの応答信号を待ち、当該応答信号を受信すると、照明画像生成部224と、カメラ応答観測部226とへフレーム番号fを送出する。フレーム番号fを送出することにより、同じフレーム番号においてプロジェクタ212からの照明と、カメラの観測との同期をとる。次に、フレーム番号fをf=f+1とカウントアップし、再び、カメラ応答観測部226からの応答信号を待つ。以降、プロジェクタ212からの照明とカメラ210における観測の同期をフレーム番号fで同期をとりながら、同様にフレーム番号fを照明画像生成部224と、カメラ応答観測部226とに送出を繰り返す。そして、フレーム番号fの値が、照明画像生成部224において投影する赤照明、緑照明、又は青照明の何れか1つの全ての照明画像の数の値2Lであるフレーム番号fを照明画像生成部224とカメラ応答観測部226とに送出した時点で、フレーム番号fをf=1に初期化し、以降同様に繰り返し処理を行い、さらに、フレーム番号fの値が照明画像生成部224において投影する赤照明、緑照明、又は青照明の何れか1つの全ての照明画像の数の値2Lであるフレーム番号fを照明画像生成部224とカメラ応答観測部226とに送出した時点で、フレーム番号fをf=1に初期化し、以降同様に繰り返し処理を行い、次の、フレーム番号fの値が2Lとなるフレーム番号fを送出した時点で、同期制御部222は、繰り返し処理を停止する。
照明画像生成部224は、プロジェクタ212から投影するrgbの色成分βの照明画像の照明画像を、赤照明画像、緑照明画像、及び青照明画像の順番で生成する。具体的には、同期制御部222からフレーム番号fを受信すると、当該フレーム番号fがf<=Lのとき、赤照明の縦ライン照明画像を設定し、当該フレーム番号fに対応する当該赤照明の縦ライン照明画像を映像DB240に記憶すると共に、当該赤照明の縦ライン照明画像をプロジェクタ212から投影させる。一方、当該フレーム番号fがf>Lのとき、赤照明の横ライン照明画像を設定し、当該フレーム番号fに対応する当該赤照明の横ライン照明画像を映像DB240に記憶すると共に、当該赤照明の横ライン照明画像をプロジェクタ212から投影させる。照明画像生成部224は、同期制御部222から、フレーム番号fを受信するたびに、上記の赤照明の縦ライン照明画像又は赤照明の横ライン照明画像を設定し、全ての赤照明のライン照明画像(2L本の縦横ライン照明画像)を順番にプロジェクタ212から投影し終えるまで上記処理を繰り返す。
また、照明画像生成部224は、2回目のフレーム番号fの値が1であるフレーム番号fを受信すると、緑照明の縦ライン照明画像を設定し、当該フレーム番号fに対応する当該緑照明の縦ライン照明画像を映像DB240に記憶すると共に、当該緑照明の縦ライン照明画像をプロジェクタ212から投影させる。以後、緑照明についても上記赤照明と同様に、全ての緑照明の縦横ライン照明画像を順番にプロジェクタ212から投影し終えるまで上記処理を繰り返す。また、照明画像生成部224は、3回目のフレーム番号fの値が1であるフレーム番号fを受信すると、青照明の縦ライン照明画像を設定し、当該フレーム番号fに対応する当該青照明の縦ライン照明画像を映像DB240に記憶すると共に、当該青照明の縦ライン照明画像をプロジェクタ212から投影させる。以後、青照明についても上記赤照明と同様に、全ての青照明の縦横ライン照明画像を順番にプロジェクタ212から投影し終えるまで上記処理を繰り返す。以上のように、照明画像生成部224は、赤照明、緑照明、及び青照明の各々について、2L本ずつ縦横ライン照明画像をプロジェクタ212から投影することにより、合計6L本のライン照明画像を生成する。
カメラ応答観測部226は、カメラ210において観測した、プロジェクタ212から投影された赤照明画像、緑照明画像、及び青照明画像の照明光に対するカメラ応答を検出する。具体的には、同期制御部222からフレーム番号fを受信すると、カメラ210から赤照明画像の照明光に対する観測画像を取得する。次に、映像DB240に記憶されているプロジェクタ212によるプロジェクタ照明を投影していない状態の観測画像である背景画像を取得し、赤照明画像に対する観測画像と背景画像との背景差分を処理し、観測画像の各画素のrgb値の各々に基づいて、R値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のR値を赤照明に対するカメラ応答の赤の画素のR値として検出し、G値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のG値を赤照明に対するカメラ応答の緑の画素のG値として検出し、B値の輝度値が予め定められた閾値よりも大きい場合に、当該画素のB値を赤照明画像に対するカメラ応答の青の画素のB値として検出する。次に、rgbの各色について、検出された赤照明画像に対するカメラ応答の当該色の画素の値の各々の輝度値を、赤照明画像に対する当該色の応答データとして映像DB240に記憶する。なお、カメラ応答観測部226の処理は、プロジェクタ212から投影される赤照明の縦ライン照明画像又は横ライン照明画像を観測したカメラ210における赤照明画像に対するカメラ画像から赤照明画像に対するrgbの各色の応答データを映像DB240に記憶し、全ての赤照明に対する縦ライン照明画像及び横ライン照明画像の各々についての赤照明画像に対するrgbの各色の応答データを映像DB240に記憶した時点で赤照明画像に対する処理は、終了する。
カメラ応答観測部226は、2回目のフレーム番号fの値が1であるフレーム番号fを受信すると、緑照明画像に対して、上記赤照明画像に対する処理と同様に、緑照明画像に対するrgbの各色の応答データを映像DB240に記憶し、全ての緑照明に対する縦ライン照明画像及び横ライン照明画像の各々についての緑照明画像に対するrgbの各色の応答データを映像DB240に記憶した時点で緑照明に対する処理は終了する。また、カメラ応答観測部226は、3回目のフレーム番号fの値が1であるフレーム番号fを受信すると、青照明画像に対して、上記赤照明画像に対する処理と同様に、青照明画像に対するrgbの各色の応答データを映像DB240に記憶し、全ての青照明に対する縦ライン照明画像及び横ライン照明画像の各々についての青照明画像に対するrgbの各色の応答データを映像DB240に記憶した時点で青照明画像に対する処理は終了する。
映像DB240には、フレーム番号fの各々に対応した赤照明、緑照明、及び青照明の各々に対応するrgbの各色の応答データの各々と、フレーム番号fの各々に対応した赤照明、緑照明、及び青照明の各々に対応する縦ライン照明画像の各々又は横ライン照明画像の各々とが記憶されている。
LT行列推定部228は、照明画像生成部に224より生成されたフレーム番号毎の照明画像と、カメラ応答観測部226により照明画像の色成分β及びカメラ応答の色成分α毎に観測されたフレーム番号毎のカメラ応答の画素Cαiの各々とに基づいて、カメラ画像の色成分α及び照明画像の色成分β毎に、LT行列を推定する。
LT行列推定部228は、具体的には、まず、上記(4)式に従ってセンシング行列Φ’を算出する。本実施形態では、赤照明画像、緑照明画像、青照明画像を用いるが、同じライン照明画像を用いるためセンシング行列Φ’は赤照明画像、緑照明画像、青照明画像で共通に使うことができる。圧縮センシングを作動させるため、上記(7)式におけるパラメータεを設定する。次に、映像DB240に格納された色成分βの照明に対するカメラ応答データを逐次読み出して、K(=2L)種類のカメラ応答f{C’1,C’2,・・・,C’K}からi 番目の色成分αの要素のみを取り出して、N2次元のカメラ応答ベクトルv’iを生成する。続いて、ROMPアルゴリズムを利用して、上記(7)式を満たすLTベクトルu’iを復元する。LT行列の構築では、事前にM2×N2の行列バッファT’αβを用意しておき、上記(8)式に従って、j番目の行にLTベクトルの転置、すなわち、u’T jを代入する。なお、通常のメモリサイズで用意するのではなく、スパース表現でメモリを確保し、LTベクトルの非零要素のみを代入する。以上の処理を、照明画像の色成分β毎に、色成分αの全てのカメラ応答の画素i=1,2,・・・,M2について処理する。そして、T’rr、T’rg、T’ rb、T’ gr、T’gg、T’ gb、T’br、T’bg、及びT’bbの9つ全てのLT行列T’αβ,α,β{r,g,b}を映像DB240に格納する。
カラー混合行列生成部230は、LT行列推定部228により推定されたカメラ応答の色成分α及び照明画像の色成分β毎のLT行列に基づいて、カメラ応答のi番目の画素の各々に対し、カメラ応答のi番目の画素と対応関係を有する照明画像のj番目の画素についてのカラー混合行列V’ijを生成する。具体的な処理は、上記第1の実施の形態の画像投影装置100のカラー混合行列生成部30と同様である。
なお、第2の実施の形態に係る画像投影装置の他の構成及び作用については、第1の実施の形態と同様であるため、説明を省略する。
以上説明したように、本発明の第2の実施の形態に係る画像投影装置によれば、フレーム番号毎に、プロジェクタから各色成分βの照明画像を出力させ、カメラにより撮影した観測画像の各々について、カメラ画像の色成分α及び照明画像の色成分β毎に、カメラ応答の画素Cαiを検出し、カメラ画像の色成分α及び照明画像の色成分β毎に、LT行列を推定し、LT行列に基づいて、カメラ応答のi番目の画素の各々に対し、カメラ応答のi番目の画素と対応関係を有する照明画像のj番目の画素についての、rgbの色成分α毎のLT行列の要素を含む、色成分α及び照明画像の色成分βの組み合わせの各々に対する要素からなるカラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントし、入力された画像を得るためにプロジェクタから出力する照明画像である投影画像に対して、カメラ応答のi番目の画素の各々について、カウントされた照明画像の画素の個数Mjと、入力された画像のi番目の画素と、カウントされたカメラ応答の画素の個数Niと、カメラ応答のi番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を補償することにより、効率よく、投影画像の輝度を補償できる。
<第3の実施の形態に係る画像投影装置の概要>
次に、第3の実施の形態に係る画像投影装置について説明する。
第3の実施の形態においては、N台のプロジェクタと1台のカメラのマルチプロジェクタ・システムを用いている点が第1の実施の形態と異なる。なお、第1の実施の形態に係る画像投影装置100と同様の構成及び作用については、同一の符号を付して説明を省略する。また、プロジェクタが切り替えられた場合、当該切り替え先のプロジェクタについて、第1の実施の形態と同様の処理を行う。
<本発明の第3の実施の形態に係る画像投影装置の構成>
次に、本発明の第3の実施の形態に係る画像投影装置の構成について説明する。図13に示すように、本発明の第3の実施の形態に係る画像投影装置300は、カメラ10と、N台のプロジェクタ12A〜プロジェクタ12Nと、演算部320と、出力部90と、を含んで構成されている。
カメラ10は、切替部342において切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの何れか1つのプロジェクタにより投影された照明画像を観測し、明るさを示す濃淡画像を取得し、カメラ応答観測部326に出力する。
演算部320は、切替部342と、同期制御部322と、照明画像生成部324と、カメラ応答観測部326と、LT行列推定部328と、カラー混合行列生成部330と、輝度補償処理部332と、映像DB340とを含んで構成されている。
切替部342は、同期制御部322の切り替え指示により、処理対象となるプロジェクタをプロジェクタ12A〜プロジェクタ12Nのうちの1つに切り替える。なお、第3の実施の形態においては、1番初めの処理対象のプロジェクタとしてプロジェクタ12Aが選択されているものとする。また、第3の実施の形態においては、切替部342は、スイッチや分岐装置などを利用する。また、第3の実施の形態においては、終了条件である全てのプロジェクタについて処理が終了するまで、同期制御部322の切り替え指示により処理対象となるプロジェクタを切り替える。
同期制御部322は、フレーム番号毎に、切替部342において切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから照明を照射させ、照射された照明をカメラ10により撮影するように制御する。また、同期制御部322は、フレーム番号fの値が、照明画像生成部324において投影する全ての照明画像の数の値2Lであるフレーム番号fを照明画像生成部324とカメラ応答観測部326とに送出した時点で繰り返し処理を停止し、切替部342に処理対象となるプロジェクタを切り替える切り替え指示を出力し、切替部342において処理対象となるプロジェクタが切り替えられた後に、フレーム番号fの値を1に初期化し、上記処理を繰り返す。
照明画像生成部324は、切替部342において切り替えられているプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから投影する照明画面を生成する。
カメラ応答観測部326は、カメラ10において観測した、切替部342において切り替えられているプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから投影された照明光に対するカメラ応答を検出し、フレーム番号fと対応づけて当該照明光についての応答データを作成し、映像DB340に記憶する。
映像DB340には、プロジェクタ毎の、フレーム番号fの各々に対応した応答データの各々と、フレーム番号fの各々に対応した縦ライン照明画像の各々又は横ライン照明画像の各々とが記憶されている。
LT行列推定部328は、プロジェクタ毎に、第1の実施の形態と同様の処理を行って、LTベクトルを推定することにより、LT行列を推定する。
カラー混合行列生成部330は、プロジェクタ毎に、第1の実施の形態と同様の処理を行って、カラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントする。
輝度補償処理部332は、プロジェクタ毎に、第1の実施の形態と同様の処理を行って、カメラ応答のi番目の画素の各々について、LTの関係で結びつく投影画像のj番目の画素の輝度値を補償する。また、当該プロジェクタにより投影画像を投影して、カメラ応答のi番目の画素の各々について、LTの関係で結びつく投影画像のj番目の画素の輝度値を繰り返し更新する。
なお、第3の実施の形態に係る画像投影装置の他の構成及び作用については、第1の実施の形態と同様であるため、説明を省略する。
以上説明したように、本発明の第3の実施の形態に係る画像投影装置によれば、複数のプロジェクタを用いる場合において、フレーム番号毎に、切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから照明画像を出力させ、カメラにより撮影した観測画像の各々について、カメラ応答の色成分α毎に、カメラ応答の画素Cαiを検出し、フレーム番号毎の照明画像と、カメラ応答の画素Cαiの各々とに基づいて、色成分α毎に、LT行列を推定し、LT行列に基づいて、カラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントし、入力された画像を得るためにプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから出力する照明画像である投影画像に対して、カメラ応答のi番目の画素の各々について、カウントされた照明画像の画素の個数Mjと、入力された画像のi番目の画素と、カウントされたカメラ応答の画素の個数Niと、カメラ応答のi番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を補償することにより、効率よく、投影画像の輝度を補償できる。
<本発明の第4の実施の形態に係る画像投影装置の構成>
次に、本発明の第4の実施の形態に係る画像投影装置の構成について説明する。図14に示すように、本発明の第4の実施の形態に係る画像投影装置400は、カメラ210と、N台のプロジェクタ212A〜プロジェクタ212Nと、演算部420と、出力部90と、を含んで構成されている。
カメラ210は、切替部442において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの何れか1つのプロジェクタにより投影された各色成分αの照明画像を観測し、色値を表すrgb値を取得し、カメラ応答観測部426に出力する。
演算部420は、切替部442と、同期制御部422と、照明画像生成部424と、カメラ応答観測部426と、LT行列推定部428と、カラー混合行列生成部430と、輝度補償処理部432と、を含んで構成されている。
切替部442は、同期制御部422の切り替え指示により、処理対象となるプロジェクタをプロジェクタ212A〜プロジェクタ212Nのうちの1つに切り替える。なお、第4の実施の形態においては、1番初めの処理対象のプロジェクタとしてプロジェクタ212Aが選択されているものとする。また、第4の実施の形態においては、切替部442は、スイッチや分岐装置などを利用する。また、第4の実施の形態においては、終了条件である全てのプロジェクタを選択するまで、同期制御部422の選択指示により処理対象となるプロジェクタを選択する。
同期制御部422は、フレーム番号毎に、切替部442において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから色成分βの照明画像を出力させ、出力された色成分βの照明画像をカメラ210により撮影するように制御する。
照明画像生成部424は、切替部442において切り替えられたプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから投影する照明画像を生成する。
カメラ応答観測部426は、カメラ210において観測した、切替部442において切り替えられているプロジェクタ212A〜プロジェクタ212Nのうちの1つのプロジェクタから投影された照明画像に対するカメラ応答を検出し、フレーム番号fの各々と対応づけて照明画像に対する応答データを生成し、映像DB440に記憶する。
映像DB440には、プロジェクタ毎の、フレーム番号fの各々に対応した色成分βの照明画像に対応する各色成分αの応答データの各々と、フレーム番号fの各々に対応した色成分βの縦ライン照明画像の各々又は横ライン照明画像の各々とが記憶されている。
LT行列推定部428は、プロジェクタ毎に、第2の実施の形態と同様の処理を行って、LTベクトルを推定することにより、LT行列を推定する。
カラー混合行列生成部430は、プロジェクタ毎に、第2の実施の形態と同様の処理を行って、カラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントする。
輝度補償処理部432は、プロジェクタ毎に、第1の実施の形態と同様の処理を行って、カメラ応答のi番目の画素の各々について、LTの関係で結びつく投影画像のj番目の画素の輝度値を補償する。また、当該プロジェクタにより投影画像を投影して、カメラ応答のi番目の画素の各々について、LTの関係で結びつく投影画像のj番目の画素の輝度値を繰り返し更新する。
なお、第4の実施の形態に係る画像投影生成装置の他の構成及び作用については、第2の実施の形態と同様であるため、説明を省略する。
以上説明したように、本発明の第4の実施の形態に係る画像投影装置によれば、複数のプロジェクタを用いる場合において、フレーム番号毎に、切り替えられたプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから各色成分βの照明画像を出力させ、カメラにより撮影した観測画像の各々について、カメラ画像の色成分α及び照明画像の色成分β毎に、カメラ応答の画素Cαiを検出し、カメラ画像の色成分α及び照明画像の色成分β毎に、LT行列を推定し、LT行列に基づいて、カラー混合行列V’ijを生成し、カラー混合行列V’ijの逆行列を求めると共に、カメラ応答のi番目の画素の各々に対し、対応関係を有する照明画像の画素の個数Niをカウントし、照明画像のj番目の画素の各々に対し、対応関係を有するカメラ応答の画素の個数Mjをカウントし、入力された画像を得るためにプロジェクタ12A〜プロジェクタ12Nのうちの1つのプロジェクタから出力する照明画像である投影画像に対して、カメラ応答のi番目の画素の各々について、カウントされた照明画像の画素の個数Mjと、入力された画像のi番目の画素と、カウントされたカメラ応答の画素の個数Niと、カメラ応答のi番目の画素に対する、照明画像のj番目の画素についてのカラー混合行列V’ijの逆行列と、に基づいて、投影画像のj番目の画素を補償することにより、効率よく、投影画像の輝度を補償できる。
なお、本発明は、上述した実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
また、本願明細書中において、プログラムが予めインストールされている実施形態として説明したが、当該プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供することも可能であるし、ネットワークを介して提供することも可能である。