【文献】
Wolfgang Waizenegger, et al.,"Parallel high resolution real-time Visual Hull on GPU",2009 16th IEEE International Conference on Image Processing (ICIP),IEEE,2009年11月07日,https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5413661
(58)【調査した分野】(Int.Cl.,DB名)
前記情報処理装置は、前記キャッシュを含み、前記処理グループ・プリフェッチエリア決定部、前記プリフェッチ部、及び前記線分探索部として動作するプロセッサと、前記第1メモリとがバスにより接続されている
ことを特徴とする請求項2に記載の情報処理装置。
前記プリフェッチ部は、前記画像内の矩形領域をキャッシュ領域に決定し、該キャッシュ領域における幅が所定の幅よりも狭くなった場合には、前記キャッシュ領域を複数のキャッシュ領域に分割する
ことを特徴とする請求項1に記載の情報処理装置。
【発明を実施するための形態】
【0014】
図1は、エピポーラ幾何を説明するための概略斜視図である。エピポーラ幾何とは、2つの異なる視点の画像から該画像内の物体についての3次元の奥行情報を復元するための幾何である。
【0015】
図1の点OL及び点ORは、それぞれ、Lカメラ(基準カメラ)の投影中心、及びRカメラ(参照カメラ)の投影中心である。また、
図1の点XL及び点XRは、それぞれ、3次元空間(実空間)内の点Xを、Lカメラの投影面60及びRカメラの投影面61に投影した点(シルエット)である。
【0016】
2つのカメラは異なる3次元位置にあるので、一方のカメラから他方のカメラをみることができる。
図1の点52(点eL及び点eR)は、それぞれ、エピポール(epipole)又はエピポーラ点(epipolar point)と呼ばれる点であり、互いのカメラ(投影中心)を自カメラの投影面に投影した点である。すなわち、Lカメラの投影面60における点eLはRカメラの投影中心ORを投影面60に投影した点であり、Rカメラの投影面61における点eRはLカメラの投影中心OLを投影面61に投影した点である。ここで、投影中心(点OL及び点OR)とエピポール(点eL及び点eR)とは、3次元空間内の同一直線上に存在する。
【0017】
また、
図1においてRカメラの投影面61を通る直線50は、エピポーラ線と呼ばれる直線であり、点OLと点Xとを通る直線をRカメラの投影面61に投影した直線である。エピポーラ線50は、点X、投影中心OL、及び投影中心ORの3点を含む平面(エピポーラ面62)と、Rカメラの投影面61を含む平面との交線と一致する。
【0018】
Lカメラを基準カメラとし、Rカメラを参照カメラとした場合、Lカメラの投影面60における点XLと対応する3次元空間内の点は、Lカメラの投影中心OLと点Xとを通る直線上に存在する。また、Lカメラの投影面60における点XLと対応する3次元空間内の点は、Rカメラの投影面61では、エピポーラ線50上に存在する。例えば、Lカメラの投影面60における点XLと対応する3次元空間内の点が点Xである場合、該点Xは、Rカメラの投影面61のうちの、投影中心ORと点Xとを結ぶ線分と、エピポーラ線50との交点(点XR)に投影される。
【0019】
2つのカメラの位置関係が既知であれば、エピポーラ制約として以下が成り立つ。すなわち、点XのLカメラの投影面60における点XLが与えられると、Rカメラの投影面61における線分eR-XRが定義される。点XのRカメラの投影面61における点XRはエピポーラ線50上に存在する。また、例えば、Lカメラの投影面60における点XLと対応する3次元位置が点X1である場合、Rカメラの投影面61上で点X1と対応する点は、投影中心OLと点X1とを結ぶ線分と、エピポーラ線50との交点となる。同様に、Lカメラの投影面60における点XLと対応する3次元位置が点X2又はX3である場合、Rカメラの投影面61上で点X2又は点X3と対応する点は、それぞれ、投影中心OLと点X2又はX3とを結ぶ線分と、エピポーラ線50との交点となる。
【0020】
逆に、点XのRカメラの投影面61における点XRが与えられると、Lカメラの投影面における線分eL-XL(図示せず)が定義される。このため、Rカメラの投影面61の投影中心ORと点Xとを通る直線上の点は、Lカメラの投影面60における点eL及び点XLを通るエピポーラ線(図示せず)上に存在する。
【0021】
このように、2つのカメラで同じ点を捕捉している場合、その点は必ず互いのエピポーラ線上に存在する。すなわち、一方の投影面における点が他方の投影面を通るエピポーラ線上に存在しない場合には、同じ点を捕捉していない(対応づけが正しくない)といえる。よって、一方のカメラで見ている点が他方のカメラのどこに映っているかは、エピポーラ線上を調べれば十分である。対応づけが正しく、点XL及び点XRの位置が分かっていれば、点Xの3次元空間での位置を三角法により決定することができる。本実施形態の情報処理装置(3次元形状復元装置)は、上記のエピポーラ制約に基づいた線分探索を行って、多視点映像から物体の3次元形状を復元する。
【0022】
図2は、線分探索を説明するための概略斜視図である。
図2の(A)には、Rカメラの投影面61を通るエピポーラ線50のうちの、視体積(シルエットコーン)の存在有無を確認するための線分探索(交点探索)を行う範囲の一例を示している。線分探索は、Max(zNear,画面端Near63)からMin(zFar,画面端Far64)までの範囲で行う。Max(zNear,画面端Near63)は点zNearと画面端Near63のうち値が大きいほうを示し、Min(zFar,画面端Far64)は点zFarと画面端Far64のうち値が小さいほうを示す。ここで視野範囲について、点zNearはエピポーラ点eR(52)に最も近い点であり、点zFarはエピポーラ点eR(52)から最も遠い点を示す。また、画面端Near63及び画面端Far64はそれぞれ、エピポーラ線50上の、投影面61のzNear側の一端部、及び投影面61のzFar側の他端部を示す。
【0023】
図2の(B)には、線分探索の結果に基づいて導出されるシルエットコーン65の一例を示している。シルエットコーンは、任意の視点から撮影して得られる物体の2次元シルエットを実空間に投影して得られる錐体(視体積)のことである。上記の線分検索によりエピポーラ線50上のシルエット存在範囲を探索し、投影中心ORを視点としてシルエット存在範囲を実空間に投影することにより、視体積(シルエットコーン65)が導出される。
図2の(B)では、右上がりの実線の直線がエピポーラ線50を実空間に投影した直線であり、シルエットコーン65内を通る破線で示した区間がLカメラから見た3次元物体の表面とその背景に相当する。
【0024】
多視点映像の物体シルエット画像から物体3次元形状を復元する際には、上記の視体積を利用した視体積交差法により復元する。視体積交差法では、複数の視点のそれぞれから導出されるシルエットコーンの交差積(VisualHull)に基づいて、物体の3次元形状を求める。この場合、エピポーラ線50に対する線分探索により検出した、シルエットの存在範囲を示す線分の線分端が、3次元物体の表面(depth)の候補となり得る。3次元物体の表面(depth)は、基準カメラの視点(投影中心)から見た物体の表面を示す点である。Lカメラを基準カメラとした場合の3次元物体の表面は、シルエットコーンの境界(線分端)を投影中心OL及び点XLを通る直線上に投影したときに投影中心OLに最も近い点となる。
【0025】
多視点映像の物体シルエット画像から物体の3次元形状を復元する際には、複数の投影中心のそれぞれを基準カメラの視点として複数の視点からの3次元物体の表面(depth)を確定し、3次元物体の切り出しを行う。
【0026】
図3は、3次元物体の切り出しを説明するための概略イメージ図である。
図3には、8個の視点O1〜O8のそれぞれから撮影した映像における同一物体66についてのシルエットコーンの交差積を示している。視体積交差法により物体66の3次元形状を復元する際には、視点O1〜O8のそれぞれを基準カメラの視点としたときの3次元物体の表面(depth)を確定する。例えば、視点O1を基準カメラの視点とした場合、
図3における長円形の物体66の表面全体のうち、視点O1から見える部分領域内の各点についてのdepthが確定する。また、例えば、視点O5を基準カメラの視点とした場合、
図3における物体66の表面全体のうち、視点O5から見える部分領域内の各点についてのdepthが確定する。このように、複数の視点O1〜O8のそれぞれを基準カメラの視点としたときの物体66の表面を確定してそれらを重ねることで、物体66の表面全体の3次元位置が確定するため、3次元物体66の3次元での形状位置を確定する(切り出す)ことが可能となる。
【0027】
多視点映像から復元した物体の3次元形状は、例えば、該物体を任意の視点から見たときの画像(自由視点画像)の生成に利用可能である。
【0028】
図4は、自由視点による物体の画像の生成方法を説明する図である。
図4の(A)には、3次元空間における、多視点映像から復元した2個の物体67A,67Bと、生成する画像の視点(ヒト視点)H1,H2との位置関係の例を示している。多視点映像から2個の物体67A,67Bの3次元形状を復元した場合、各物体における表面内の各点の3次元位置が確定しているため、2個の物体67A,67Bの位置関係も確定している。このため、復元した物体の3次元形状を利用して、任意の視点から物体を見た場合の画像を生成することが可能となる。例えば、
図4の(A)におけるヒト視点H1から物体67A,67Bを見た場合、物体67Aの奥方に物体67Bが重なって見える。このため、ヒト視点H1から見た物体67A,67Bの画像を生成する場合、ヒト視点H1から見える物体67A,67Bのシルエットのそれぞれに対して物体表面に対応する色彩(テクスチャ)をレンダリングし、(B)のような画像71を生成する。
【0029】
また、例えば、
図4の(A)におけるヒト視点H2から物体67A,67Bを見た場合、物体67Aと物体67Bとが左右に並んで見える。このため、ヒト視点H2から見た物体67A,67Bの画像を生成する場合、ヒト視点H2から見える物体67A,67Bのシルエットのそれぞれに対して物体表面に対応する色彩(テクスチャ)をレンダリングし、(C)のような画像72を生成する。
【0030】
以下、図面を参照しながら、実施形態を詳細に説明する。
図5は、一実施形態に係る情報処理装置の構成図である。
【0031】
図5の情報処理装置10は、視体積交差法により多視点映像から物体の3次元形状を復元する機能を持つ装置である。情報処理装置10は、パラメタ(パラメータ)生成部11、視点画像生成部12、シルエット画像分離部13、VisualHull部14、及びレンダリング部15を含む。
【0032】
視点画像生成部12は、異なる複数の視点から撮影された画像(視点画像)を生成する。例えば、視点画像生成部12は、N個の視点のそれぞれから撮像した映像に含まれる複数の映像のそれぞれから同一時刻のフレームを抽出してN個の視点画像を生成する。
【0033】
シルエット画像分離部13は、視点画像生成部12で生成された視点画像から物体(被写体)のシルエット画像を抽出して分離する。
【0034】
パラメタ生成部11は、カメラパラメタ9から光学パラメタ[0..N-1]、及び位置パラメタ[0..N-1]を取得して、各種パラメタ(変換情報)を生成する。
【0035】
VisualHull部14は、対象カメラで撮影された視点画像についてのシルエット画像、及び参照カメラで撮影された視点画像についてのシルエット画像を、シルエット画像分離部13から取得する。また、VisualHull部14は、対象カメラを特定するID(対象カメラID(TID))と、参照カメラを特定するID(参照カメラID(RID))を取得する。また、VisualHull部14は、パラメタ生成部11で生成された変換情報を取得する。VisualHull部14は、取得したTID、RID、変換情報、及びシルエット画像[TID,RID]からdepth情報(3次元物体の表面についての情報)を算出する。
【0036】
レンダリング部15は、カメラパラメタ9から光学パラメタ[0..N-1]、位置パラメタ[0..N-1])を取得するとともに、VisualHull部14からdepth情報を取得する。また、レンダリング部15は、シルエット画像分離部13から非シルエット画像情報を取得するとともに、視点画像生成部12から視点画像[0..N-1]を取得する。また、レンダリング部15は、指定視点位置を取得する。レンダリング部15は、取得した光学パラメタ、位置パラメタ、depth情報、非シルエット画像情報、及び視点画像に基づいて、指定視点位置から物体を見たときの画像を生成する。
【0037】
情報処理装置10における上記の機能構成は、例えば、
図6又は
図7のようなハードウェア構成要素によって実現される。
【0038】
図6は、情報処理装置のハードウェア構成要素を示す図である。
図7は、情報処理装置のハードウェア構成要素の別の例を示す図である。
【0039】
図6のように、情報処理装置22は、プロセッサ16と、Dynamic Random Access Memory(DRAM)等のグローバルメモリ(第1メモリ)21とを含む。プロセッサ16とグローバルメモリ21とは、チップ間接続バス7によって相互に接続されている。
【0040】
プロセッサ16は、演算ユニット17、レジスタ18、シェアードメモリ(第2メモリ)19、及びキャッシュ20を含む。演算ユニット17(レジスタ18)と、シェアードメモリ19と、キャッシュ20とは、チップ内バス6によって相互に接続されている。
【0041】
なお、プロセッサ16がGPUを含むものである場合、
図7の情報処理装置23のように、プロセッサ16を含むアクセラレータ処理部22’から見たホスト側のグローバルメモリ21’は、チップ間接続バス7よりも更に伝送帯域が小さい拡張バス8(例えばPCI-Express)によって接続される。
【0042】
更にオプションとして、情報処理装置22,23(情報処理装置10)は、図示しない入力装置、及び出力装置を含んでもよい。情報処理装置22,23は、例えば、コンピュータで実現される。
【0043】
プロセッサ16は、Central Processing Unit(CPU)及びGPUのいずれかを含む任意の処理回路とすることができる。プロセッサ16は、例えば、外部記憶装置に記憶されたプログラムを実行することができる。
【0044】
シェアードメモリ19、キャッシュ20、及びグローバルメモリ21,21’は、それぞれ、プロセッサ16の動作により得られたデータや、プロセッサ16の処理に用いられるデータを、適宜記憶する。なお、各種データは、媒体駆動装置によりデータの読み出し及び書き込みが可能な可搬型記録媒体に記憶させてもよい。
【0045】
入力装置は、例えば、キーボード、マウスとして実現され、出力装置は、ディスプレイなどとして実現される。
【0046】
また、情報処理装置22,23は、図示しないネットワーク接続装置を含んでもよい。ネットワーク接続装置は、他の装置との通信に利用可能であり、収集部又は指示部として動作する。
【0047】
更に、情報処理装置22,23は、図示しない媒体駆動装置を含んでもよい。媒体駆動装置は、シェアードメモリ19、キャッシュ20、グローバルメモリ21,21’、及び外部記憶装置のデータを可搬記録媒体に出力すること、及び可搬記録媒体からプログラムやデータ等を読み出すことができる。可搬記録媒体は、フロッピイディスク、Magnet-Optical(MO)ディスク、Compact Disc Recordable(CD-R)、及びDigital Versatile Disc Recordable(DVD-R)を含む、持ち運びが可能な任意の記憶媒体とすることができる。
【0048】
プロセッサ16、グローバルメモリ21,21’、入力装置、出力装置、外部記憶装置、媒体駆動装置、及びネットワーク接続装置は、例えば、図示しないバスにより相互にデータの受け渡しが行えるように接続される。外部記憶装置は、プログラムやデータなどを格納し、格納している情報を、適宜、プロセッサ16などに提供する。
【0049】
プロセッサ16の演算ユニット17は、シェアードメモリ19、キャッシュ20、及びグローバルメモリ21,21’に記憶させた情報を読み出して所定の演算処理を行う。情報を記憶する記憶部として機能するシェアードメモリ19、キャッシュ20、及びグローバルメモリ21,21’には、それぞれ、下記表1のような特徴がある。
【0051】
シェアードメモリ19及びキャッシュ20はチップ内バス6により演算ユニット17と接続されており、グローバルメモリ21,21’はチップ間接続バス7,8により演算ユニット17と接続されている。このため、演算ユニット17は、グローバルメモリ21,21’から情報を読み出すよりも、シェアードメモリ19及びキャッシュ20から情報を読み出すほうが、情報を読み出す際の遅延(レイテンシ)が小さくなる。
【0052】
しかしながら、シェアードメモリ19及びキャッシュ20は、グローバルメモリ21と比べて容量が小さい。また、シェアードメモリ19及びグローバルメモリ21はユーザによる配置制御が可能であるのに対し、キャッシュ20はキャッシュ管理機構により配置制御される。キャッシュ20は、一般的にグローバルメモリのある連続メモリ単位(キャッシュライン)ごとにデータ操作されるため、近い時間に操作されるグローバルメモリのアドレス位置が近傍であるほどキャッシュされたデータの入れ替えが生じにくい。一方、キャッシュ20におけるデータ操作では、近い時間に操作されるグローバルメモリのアドレス位置が広いほどキャッシュされたデータの入れ替えが生じる可能性が大きくなるため、グローバルメモリアクセスが生じる可能性が高くなる。
【0053】
VisualHull部14(
図1参照)が行う線分探索において、参照画像におけるシルエット画像の画素の情報は、シルエット画像データ(以下、単に「シルエット画像」ともいう)を保持しているグローバルメモリ21からデータが読み出される。シルエット画像は画像サイズにより使用データ量が決まるが、近年は必要とされる画像サイズが大きくなる(例えば4K, 8K)傾向にあり、シルエット画像のデータサイズも大きくなる。データサイズの大きいシルエット画像は、シェアードメモリ19やキャッシュ20には収まらず、グローバルメモリ21上に保持される。
【0054】
VisualHull部14が行うVisualHull処理では、対象画像の視点と各前景画素とを結ぶ各エピポーラ線を各参照画像に射影して、各射影したエピポーラ線が各参照画像上の前景画素と交わる線分を探索する(線分端探索)。この際、視体積交差法の重複数分、同じ対象画像のエピポーラ線を共通座標系に写像して、線分の重複度を検査(線分重複検査)し、必要な重複数を満たした線分の範囲に3次元物体が存在すると認識し、視点に一番近い3次元物体が存在すると認識した線分端の位置を視点からの距離とする。つまり、各エピポーラ線の線分端探索処理は、他のエピポーラ線の線分端探索処理とデータとの依存関係がなく並列処理が可能である。
【0055】
特に並列処理の場合、各並列単位(例えばスレッド)が利用できるシェアードメモリ19のサイズがより小さくなるため、並列処理で高効率なシルエット画像データのキャッシュ方式が有用である。
【0056】
従来例としては、演算ユニット17が、グローバルメモリ21から演算に必要なマスク画素を直接読み込む方法が考えられる。この場合、演算ユニット17が最初にアクセスしたときに、シルエット画素がキャッシュ20に格納されていないため読み込みのレイテンシが大きい。また、エピポーラ線は参照画像上に非水平状態であることがほとんどで、線分探索処理においては連続したアドレスのメモリアクセスとはならない。一般的に、演算装置は連続したアドレスへのメモリアクセスやある決まったパターンのメモリアクセスに対しては、メモリアクセス機構が最適にデータアクセスできるような仕組みを有している。これらの仕組みが線分端探索では働かない。
【0057】
そこで本実施形態に係る情報処理装置10では、以下のように解決する。
斜めメモリアクセス(非連続アドレスアクセス)を、メモリアクセス機構が最適にデータアクセスできるような連続アクセスとする。その際にシェアードメモリ19上に読み込んだシルエット画素データの一部を一時整形して保持し、低レイテンシで演算ユニット17が線分端探索時にアクセスできるようにする。
【0058】
斜めメモリアクセスを連続アクセスとするためには、ある程度のアドレス方向への幅を持ったデータを読み込む必要がある。画像データの2次元配置において矩形となるようなメモリアクセスをグローバルメモリ21に対して行い、キャッシュ20に格納する。この場合、キャッシュ20に格納したデータを単一のエピポーラ線が用いる、あるいは、エピポーラ線を基準なく処理するのみで (他のエピポーラ線の線分端探索をする際に必要なキャッシュ20の領域を確保するために) 破棄してしまうと、シルエット画素データにおける同じ部分のデータを多数回グローバルメモリ21から読み出す可能性が生じ、効率が悪い。あるシルエット画素へのアクセスが最初のアクセスでない場合にはキャッシュ20にデータが存在する可能性がある。すなわち、アクセスするキャッシュライン(シルエット画像における水平方向で連続した複数の画素の情報)が、キャッシュ20に格納されたシルエット画素のキャッシュラインに含まれる可能性がある。しかしながら、シルエット画像にアクセスする際にキャッシュ20に存在するデータはキャッシュから削除されてしまうため、有効には動作しない。これは、画像の解像度が大きなほど顕著である。
【0059】
つまり、斜めアクセスの非効率アクセスを排除するために矩形領域でメモリをシェアードメモリ19に配置し、その矩形領域のマスク画素を利用するエピポーラ線線分端探索をシェアードメモリ19にデータが存在するうちに済ませてしまう必要がある。
【0060】
本実施形態の情報処理装置10では、上記のようなシェアードメモリ19に格納したデータを有効に利用するために並列処理でどのエピポーラ線を同一のグループで扱うかを決定し、また、そのグループが必要とするデータの範囲を決定する。
【0061】
図8は、一実施形態に係る自由視点映像作成装置を示すブロック図である。ここで例示する自由視点映像作成装置30は、3次元空間の任意の視点から見た映像(自由映像)を生成する装置であり、情報処理装置10に含まれる。
【0062】
図8のように、自由視点映像作成装置30は、前景分離処理部33、33’...と、VisualHull処理部35、35’...と、レンダリング処理部36とを含む。
【0063】
自由視点映像作成装置30は、撮影する領域を囲むように配置された複数のカメラ31、31’...のそれぞれにより撮影された、複数のカメラ画像32、32’...を取得する。
【0064】
自由視点映像作成装置30の前景分離処理部33、33’...は、カメラ画像32、32’...のそれぞれから、VisualHull処理部35、35’...による処理において前景となる画素で構成されるマスク画像34を生成する。前景分離処理部33、33’...は、それぞれ、複数のカメラ画像32、32’...のうちの所定のカメラ画像からシルエット画像(マスク画像)34を生成する。また、前景分離処理33、33’...は、それぞれ、レンダリング処理36における合成に必要な背景情報(非シルエット画像情報)37を生成する。なお、
図8の前景分離処理部33、33’...は、自由始点映像装置30における前景分離処理部の一例に過ぎない。前景分離処理部は、カメラ画像毎に別個に設ける代わりに、複数のカメラ画像32、32’...のそれぞれからシルエット画像34及び背景情報37を順次生成する1個の処理部であってもよい。
【0065】
VisualHull処理部35、35’...は、それぞれ、複数のカメラ31、31’...のいずれかであり、かつ他のVisualHull処理部と重複しない1台のカメラを対象カメラとして、シルエット画像34に基づいたVisualHull処理を行う。例えば、
図8のVisualHull処理部35は、複数のカメラ31、31’...のうちのカメラ31を対象カメラとし、他のカメラ31’...を参照カメラとしてVisualHull処理を行う。この場合、例えば、VisualHull処理部35’は、カメラ31を除く他のカメラ(例えばカメラ31’)を対象カメラとし、他のカメラを参照カメラとしてVisualHull処理を行う。なお、
図8のVisualHull処理部35、35’...は、自由視点映像作成装置30におけるVisualHull処理部の一例に過ぎない。VisualHull処理部は、カメラ毎に別個に設ける代わりに、複数のカメラのうちの1台のカメラを対象カメラとしたVisualHull処理を、対象カメラを変更しながら繰り返す1個の処理部であってもよい。
【0066】
レンダリング処理部36は、VisualHull処理部35、35’...の処理結果(depthデータ38)と、カメラ画像32、32’...と、背景画像37、37’...とに基づいて、任意の視点から見た物体の画像を生成する。レンダリング処理部36では、例えば、複数の対象視点からいくつかの対象視点を選択し、選択した視点のカメラ画像、背景情報37及びdepthデータ38から、任意視点からの各物体の位置関係を決定する。また、レンダリング処理部36では、決定した位置関係に合わせて前景や背景を合成し、カメラ画像から前景の画素値を決定して画素の色を確定する。これらの処理によりユーザが指定した任意の視点からの3次元画像が生成される。
【0067】
なお、
図8の自由視点映像作成装置30は、カメラ画像毎(対象視点毎)に並列処理を行う構成になっているが、各々の処理部の個数等はこの構成には限らない。また、VisualHull処理部35、35’...による処理は、3次元形状が視体積交差法で切り出せる精度を維持できる範囲内で行えばよく、すべての対象視点のデータを必ずしも用いなくてもよい。すなわち、自由視点映像作成装置30において物体の3次元形状を復元する際には、全て(N台)のカメラ31、31’・・・の中からN−1台以下のカメラを選択し、選択したカメラで撮像したカメラ画像から物体の3次元形状を復元してもよい。
【0068】
VisualHull処理部35、35’...は、それぞれ、参照カメラF(F=0...参照カメラ数-1)についてMax(zNear,画面端Near)〜Min(zFar, 画面端Far)の範囲で線分探索を行い、検出されたシルエットの存在範囲を示す線分同士の論理積が1となる線分範囲を検出する。
【0069】
図9は、VisualHull処理部の構成ブロック図である。
図9には、VisualHull処理部35、35’...と対応するVisualHull部14(
図1参照)の機能的構成を示している。VisualHull部14は、ワールド座標→参照ローカル座標登録部40、エピポーラ線傾き導出部41、画像範囲導出部42、探索範囲決定部43、及び線分探索部105を含む。VisualHull部14は、更に、参照ローカル座標→z座標変換部44、線分バッファ[n]46、及び線分重複検査部45を含む。
【0070】
ワールド座標→参照ローカル座標変換部40は、基準となる撮像装置により撮影されるシルエットの存在位置を示す存在情報を、ワールド座標系から第1の座標系(参照Viewの座標系)に変換する。
【0071】
エピポーラ線傾き導出部41は、複数の参照撮像装置(参照カメラ)のうち第i(=1〜n(n:整数))の参照撮像装置に基づくシルエットの存在位置を示す第iの存在位置情報を取得する。エピポーラ線傾き導出部41は、取得した第iの存在情報と第1の座標系に変換する情報とに基づいて、エピポーラ線を算出する。
【0072】
線分重複検査部45は、エピポーラ線とシルエットが交わる線分に関する(例えば線分バッファ46内の)線分情報に基づいて、線分の重複する重複区間を検出する。
【0073】
探索範囲決定部43は、重複区間に基づいて、線分情報を探索する探索範囲を決定する。
【0074】
線分探索部105は、決定した探索範囲に基づいて、線分の探索を行う。
なお、本発明を実施するための前提知識として、カメラの座標変換に関しては、非特許文献1を参照されたい。また、参照Viewの2D座標におけるエピポーラ線の導出方法に関しては、非特許文献2〜4を参照されたい。
【0075】
本実施形態の情報処理装置10では、エピポーラ幾何におけるエピポーラ制約を考慮したエピポーラ線のグループ分けを行い(つまり、最適なプリフェッチ領域を決定して)、グループ毎に、レイテンシの小さいメモリ領域(例えばシェアードメモリ19)に記憶させたデータによる線分探索を行う。ここでいうプリフェッチとは、事前読込のことで、CPU等のプロセッサが欲しいデータをあらかじめキャッシュメモリに読み出しておく機能のことである。
【0076】
図10は、対象Viewの近傍シルエット画素に対応する参照Viewの複数のエピポーラ線を示した例示的なイメージ図である。
図11は、対象Viewの近傍シルエット画素に対応する参照Viewの複数の近傍エピポーラ線の広がり具合を示した例示的なイメージ図である。
【0077】
情報処理装置10では、
図10に示すように、対象View47の処理近傍シルエット画素48を、参照View49における傾きが近いエピポーラ線50に射影する。これにより、情報処理装置10は、対象View47の近傍シルエット画素48に対して、参照View49における傾きが近い複数のエピポーラ線50をマッピングし、プリフェッチ領域51(幅と高さライン数)を定める。
【0078】
また、
図11に示すように、参照View47のエピポール52やシルエット画素の位置によって、近傍エピポーラ線50の広がり具合(すなわちエピポーラ線の傾き範囲)が変わり、また、エピポール52からの距離によってプリフェッチ領域51が変化する。
【0079】
図12は、プリフェッチ領域のプリフェッチ幅及びライン数の変化とプリフェッチ領域のグループ分けとを説明するイメージ図である。
【0080】
図12の(A)に示すように、エピポーラ線50の広がりに合わせてプリフェッチ幅53及びライン数54を変更する。プリフェッチ幅53又はライン数54の一方が決定されると、シェアードメモリ19及びキャッシュ20(
図6,7参照)の容量に基づいて、他方がおのずと定まる。また、
図12の(B)に示すように、メモリのレイテンシ、線分探索の処理時間などを考慮して定めた最小プリフェッチ幅より、決定されたプリフェッチ幅53が小さい場合は、プリフェッチ領域51のグループ分けを行う。
【0081】
次に、
図13を参照しながら、シルエット画像における傾きが近いエピポーラ線50の具体的な求め方を説明する。
図13は、例示的なシルエット画像を示した図である。
【0082】
エピポーラ線は必ずエピポールを通過するというエピポーラ線の拘束条件から、傾きが近いエピポーラ線は隣接画素を通るエピポーラ線といえる。傾きが近いエピポーラ線の求め方は、例えば、
図13のようにシルエット画像34’を任意の矩形領域に分割して、その矩形領域毎のラスタ(1ピクセル)順にいくつかのシルエット画素39をスレッドのグループとする方法が考えられる。ここで、シルエット画素39は、物体(シルエット)が存在することを示す画素である。また、
図13のシルエット画像34’におけるマスク画素39’は、物体(シルエット)が存在しないことを示す画素である。
【0083】
更に、このグループ化を行う際に多数のシルエット画素が対象となりいくつかのグループが構成できる場合には、同じグループとするシルエット画素39を(物体が存在している画素を所定の範囲として)グルーピングするために実際にエピポーラ線の傾きにより隣接度合いを判断し、より隣接しているものをグループとしてもよい。あるいは、矩形領域とせずにシルエット画像34’全体のシルエット画素のエピポーラ線の傾きからグルーピングしてもよい。
【0084】
次に、
図14を参照しながら、キャッシュ領域55を決定する方法を説明する。
図14は、キャッシュ領域を決定するための参照Viewのイメージ図である。
【0085】
エピポーラ幾何の拘束条件として、エピポーラ線(y=a/b*x+c/b)は必ずエピポールを通過する。したがって、キャッシュ領域55を決定する際には、まず、
図14のように、並列処理されるマッピングされた傾きの近いエピポーラ線のグループの中で、探索対象エリアにおける最大傾き(IMax)と最小傾き(IMin)の2本のエピポーラ線50’,50’’をピックアップする。ピックアップしたIMaxとIMinにおけるx値の差を上記で決定したプリフェッチ幅53とし、また、y値の差を上記で決定したプリフェッチライン数54とする。
【0086】
そして、
図14に示されているように、(x1−x0)×(y(IMax)−y(IMin))の領域サイズ以上となるように、x0を探索対象エリア57の開始位置とし、x1の移動によってキャッシュ領域55の幅を決定する。
【0087】
決定されたキャッシュ領域55において、これら最大傾き(IMax)と最小傾き(IMin)の2本のエピポーラ線50’、50 ’ ’と、それらの間にあるすべてのエピポーラ線とに対する線分探索を、並列処理として行う。
【0088】
ここで、シェアードメモリ19のレイテンシ及び/又は処理時間に基づいて、キャッシュ領域55のグループ分けを行ってもよい。
【0089】
図15は、キャッシュ領域のデータを段階的に読み込む場合のイメージ図である。
例えば、メモリ内の
図2の投影面61と対応する画像データを読み出す際のメモリアクセスは、ライン毎に、画面端Nearから画面端Farへ一方向に進む。このため、プリフェッチを行う際には、例えば、
図15のように、キャッシュ領域55のデータを何段階か(複数のグループ)に分けて左から右のグループへ(連続的に)読み込むことができる。あるデータの線分探索と並行して、次に使用するデータをプリフェッチできるので、線分探索時の読み込み待ち時間が不要となる。
【0090】
図16は、一実施形態に係る情報処理装置を含む情報処理システムを示す構成ブロック図である。
【0091】
図16のように、情報処理システム100は、プリフェッチパラメタ決定部101、処理グループ・プリフェッチエリア決定部102、プリフェッチ部103、メモリアクセス部104、及び線分探索部105を備える。
【0092】
プリフェッチパラメタ決定部101は、レイテンシ及びキャッシュ領域サイズ[g]に基づいて、最小プリフェッチ幅を含むプリフェッチパラメタを決定する。
【0093】
処理グループ・プリフェッチエリア決定部102は、対象Viewに指定した画像における近傍シルエット画素の位置に基づいて、参照Viewに指定した画像において傾きが所定の範囲内となる複数のエピポーラ線のグループを決定する。処理グループ・プリフェッチエリア決定部102は、参照Viewにおけるすべてのエピポーラ線についての情報ax+by+c[P]と、プリフェッチパラメタ決定部101で決定した最小プリフェッチ幅とに基づいて、エピポーラ線のグループを決定する。
【0094】
プリフェッチ部103は、決定したグループ及びキャッシュの容量に基づいて、グループに含まれる複数のエピポーラ線のそれぞれに対する線分探索に用いるキャッシュ領域を決定し、シルエット画像におけるキャッシュ領域と対応する部分データを読み出してキャッシュに格納する。
【0095】
線分探索部105は、キャッシュに格納したシルエット画像データに基づいて、グループに含まれる複数のエピポーラ線のそれぞれに対する線分探索を行う。
【0096】
図16の情報処理システム100では、プリフェッチパラメタ決定部101、処理グループ・プリフェッチエリア決定部102、及びプリフェッチ部103によるプリフェッチ処理と、線分探索部105による線分探索処理とが行われる。プリフェッチ処理では、シルエット画像のうちの線分探索に利用する部分領域(キャッシュ領域)を決定し、グローバルメモリ21からキャッシュ領域を読み出してキャッシュ20に格納する処理を行う。線分探索処理では、キャッシュ20に格納したシルエット画像の一部を読み出して線分探索処理を行う。
【0097】
次に
図17を参照しながら、本実施形態に係る情報処理システム100が行う情報処理(3次元形状を構築する処理)におけるプリフェッチの処理フローS100を説明する。
【0098】
図17は、一実施形態に係る情報処理システムにおけるプリフェッチの処理フローを示す図である。
【0099】
情報処理システム100では、まず、プリフェッチパラメタ決定部101において、レイテンシ及びキャッシュ領域サイズ[g]から、最小プリフェッチ幅及びプリフェッチ要求タイミング残データ量を導出する(ステップS101)。
【0100】
次に、情報処理システム100は、該当エピポーラ線の線分探索が初回であるか、又はプリフェッチ要求[g]があったか否かを判定する(ステップS102)。該当エピポーラ線の線分探索が初回であるか、又はプリフェッチ要求[g]があった場合(ステップS102;Yes)、次に、処理グループ・プリフェッチエリア決定部102において、エピポーラ線ax+by+c[P]及び最小プリフェッチ幅から、プリフェッチ幅[g]、プリフェッチライン数[g]、プリフェッチベースアドレス[g]を導出する(ステップS103)。ここでいうベースアドレスは、プリフェッチ領域の開始アドレスのことである。
【0101】
なお、該当エピポーラ線の線分探索が初回でないか、又はプリフェッチ要求[g]がない場合(ステップS102;No)、情報処理システム100は、待機状態となる。この場合、情報処理システム100は、所定のタイミングでステップS102の判定を再度行う。
【0102】
ステップS103の処理の後、情報処理システム100は、該当エピポーラ線の線分探索が初回であるか、又はキャッシュ領域[g]106のグループ分け変更があったか否かを判定する(ステップS104)。該当エピポーラ線の線分探索が初回であるか、又はキャッシュ領域[g]106のグループ分け変更があった場合(ステップS104;Yes)、次に、処理グループ・プリフェッチエリア決定部102において、グループ内のエピポーラ線[g]をメモリアクセス部104に設定する(ステップS105)。
【0103】
ステップS105の処理の後、情報処理システム100は、ステップS106の処理を行う。また、該当エピポーラ線の線分探索が初回でないか、又はグループ分け変更がない場合(ステップS104;No)、情報処理システム100は、ステップS105をスキップして、ステップS106の処理を行う。
【0104】
ステップS106では、シルエット画像領域ベースアドレス、シルエット画像領域ストライド、プリフェッチ幅[g]、プリフェッチライン数[g]、及びプリフェッチベースアドレス[g]により、プリフェッチ部103において、シルエット画像領域107のベースアドレスとストライドを使って、シルエット画像データ[g]が読み込まれ、そのシルエット画像データ[g]がキャッシュ領域[g]106に書き込まれる。ここで、シルエット画像領域ストライドは、シルエット画像の配列の何番目から何番目までのデータが、画像の横一列分に相当するのかを表す値である。
【0105】
その後、情報処理システム100は、該当エピポーラ線のグループに対する線分探索が完了したか否かを判定する(ステップS107)。線分探索を行っていないエピポーラ線がある場合(ステップS107;No)、情報処理システム100は、ステップS102以降の処理を繰り返す。そして、該当エピポーラ線のグループに対する線分探索が完了した場合(ステップS107;Yes)、情報処理システム100は、次に、すべての線分探索が完了したか否かを判定する(ステップS108)。線分探索が完了していない場合(ステップS108;No)、情報処理システム100は、エピポーラ線を新たに設定し(ステップS109)、ステップS102以降の処理を繰り返す。そして、すべての線分探索が完了した場合(ステップS108;Yes)、情報処理システム100は、プリフェッチの処理フローを終了する。
【0106】
次に、
図18を参照して、本実施形態の情報処理システム100が行う線分探索の処理フローS200を説明する。
【0107】
図18は、一実施形態に係る情報処理システムにおける線分探索の処理フローを示す図である。
【0108】
情報処理システム100では、まず、キャッシュ領域[g]106に未使用データが存在するかどうか判定する(ステップS201)。未使用データが存在する場合(ステップS201;Yes)、メモリアクセス部104が、キャッシュ領域[g]106から、エピポーラ線グループ(ax+by+c[g][p])の線分探索を行うためのシルエットデータ[g][p]を読み出す(ステップS202)。一方、未使用データが存在しない場合(ステップS201;No)、情報処理システム100は、待機状態になる。この場合、情報処理システム100は、所定のタイミングでステップS201の判定を再度行う。
【0109】
ステップS202の処理を終えると、情報処理システム100は、次に、キャッシュ領域[g]106の未使用データ量が、プリフェッチ要求タイミング残データ量より少ないか否かを判定する(ステップS203)。未使用データ量が、プリフェッチ要求タイミング残データ量より少ない場合(ステップS203;Yes)、情報処理システム100は、メモリアクセス部104において、プリフェッチ要求[g]を処理グループ・プリフェッチエリア決定部102に送信する(ステップS204)。その後、メモリアクセス部104において、シルエットデータ[g][p]が線分探索部105に送信されると、情報処理システム100は、線分探索部105において線分探索を行う(ステップS205)。なお、キャッシュ領域[g]106の未使用データ量が、プリフェッチ要求タイミング残データ量以上である場合(ステップS203;No)、情報処理システム100は、ステップS204をスキップして、ステップS205の処理を行う。
【0110】
ステップS205の処理を終えると、情報処理システム100は、次に、該当エピポーラ線グループの線分探索が完了したか否かを判定する(ステップS206)。該当エピポーラ線グループの線分探索が完了していない場合(ステップS206;No)、情報処理システム100は、ステップS201以降の処理を繰り返す。そして、該当エピポーラ線グループの線分探索が完了した場合(ステップS206;Yes)、情報処理システム100は、次に、すべての線分探索が完了しているか否かを判定する(ステップS207)。線分探索が完了していない場合(ステップS207;No)、情報処理システム100は、エピポーラ線を新たに設定し(ステップS208)、ステップS201以降の処理を繰り返す。そして、すべての線分探索が完了した場合(ステップS207;Yes)、情報処理システム100は、線分探索の処理フローを終了する。
【0111】
本実施形態の情報処理システム100(情報処理装置10)では、上記のプリフェッチの処理フローと線分探索の処理フローとを連携して行うことで、対象Viewの近傍シルエット画素が、参照Viewの傾きが近い複数のエピポーラ線に射影されるようにプリフェッチ領域を定める。これにより、情報処理システム100(情報処理装置10)では、グローバルメモリ21,21’に対する斜めアクセスによりレイテンシの小さいメモリ(例えばシェアードメモリ19)に記憶させたデータを用いて、複数のエピポーラ線に対する線分探索をまとめて行うことが可能となる。
【0112】
上述したように本実施形態によれば、処理近傍シルエット画素に対応するエピポーラ線の拘束条件を考慮した、複数のエピポーラ線の線分探索における最適な並列処理の割り当てと、最適なプリフェッチ領域とを決定することができる。
【0113】
したがって、本実施形態によれば、連続データアクセス時は、グローバルメモリ21,21’などのレイテンシの大きいメモリで行い、非連続データアクセス時は、シェアードメモリ19などのレイテンシの小さいメモリで行うことができる。これにより、メモリレイテンシによる性能劣化を最小にすることができる。また、本発明は、並列処理される線分探索において特に効果が発揮される。
【0114】
なお、線分探索処理における上記のメモリアクセス及びデータキャッシュの方法は、一例に過ぎない。本実施形態に係る線分探索処理は、エピポーラ線の傾き、エピポーラ線グループの構成の仕方、及びシェアードメモリ容量の制約等に応じて、シェアードメモリ19へのデータキャッシュによる線分探索処理と、シェアードメモリへのデータキャッシュを行わない線分探索処理とを混在させてもよい。また、本実施形態に係る線分探索処理では、上記の制約等に応じて、エピポーラ線を複数のグループに分けてグループ毎にシェアードメモリ19へのデータキャッシュによる線分探索処理と、シェアードメモリへのデータキャッシュを行わない線分探索処理とを切り替えてもよい。
【0115】
以上記載した各実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
異なる視点から撮影した複数の画像から、視体積交差法によって物体の3次元形状を復元する情報処理装置であって、
前記画像から抽出された前記物体についてのシルエット画像データの一部を格納可能なキャッシュと、
前記複数の画像のうちの対象Viewに指定した画像における近傍シルエット画素の位置に基づいて、前記複数の画像のうちの参照Viewに指定した画像において傾きが所定の範囲内となる複数のエピポーラ線のグループを決定する、処理グループ・プリフェッチエリア決定部と、
決定した前記グループ及び前記キャッシュの容量に基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す線分の探索に用いるキャッシュ領域を決定するプリフェッチ部と
を備えることを特徴とする情報処理装置。
(付記2)
前記複数の画像のそれぞれについての前記シルエット画像データを格納可能な第1メモリを更に備え、
前記プリフェッチ部は、前記シルエット画像データにおける前記キャッシュ領域と対応した部分を前記第1メモリから読み出して前記キャッシュに格納する
ことを特徴とする付記1に記載の情報処理装置。
(付記3)
前記情報処理装置は、前記キャッシュを含み、前記処理グループ・プリフェッチエリア決定部、前記プリフェッチ部、及び前記線分探索部として動作するプロセッサと、前記第1メモリとがバスにより接続されている
ことを特徴とする付記2に記載の情報処理装置。
(付記4)
前記プロセッサは、前記シルエット画像データの一部を格納可能な第2メモリを更に含み、
前記プリフェッチ部としての動作において前記第2メモリのレイテンシ及び/又は処理時間に基づいて、前記キャッシュ領域のグループ分けを行う
ことを特徴とする付記3に記載の情報処理装置。
(付記5)
前記プリフェッチ部は、前記グループに含まれる前記複数のエピポーラ線が交差するエピポールの位置と、線分探索の対象となる領域における前記複数のエピポーラ線の広がりと、前記キャッシュの容量とに基づいて、前記キャッシュ領域を決定する
ことを特徴とする付記1に記載の情報処理装置。
(付記6)
前記プリフェッチ部は、前記画像内の矩形領域をキャッシュ領域に決定し、該キャッシュ領域における幅が所定の幅よりも狭くなった場合には、前記キャッシュ領域を複数のキャッシュ領域に分割する
ことを特徴とする付記1に記載の情報処理装置。
(付記7)
前記プリフェッチ部は、前記画像内の矩形領域をキャッシュ領域に決定し、該キャッシュ領域における幅が所定の幅よりも広い場合には、前記キャッシュ領域を幅方向で複数の部分領域に分割して部分領域のデータ毎に段階的に前記キャッシュに格納する
ことを特徴とする付記1に記載の情報処理装置。
(付記8)
前記キャッシュに格納した前記シルエット画像データに基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す前記線分を探索する線分探索部を更に備える
ことを特徴とする付記1に記載の情報処理装置。
(付記9)
異なる視点から撮影した複数の画像から、視体積交差法によって物体の3次元形状を復元する情報処理装置が、
前記複数の画像のそれぞれから抽出した前記物体についてのシルエット画像データを第1メモリに記憶させ、
前記複数の画像のうちの対象Viewに指定した画像における近傍シルエット画素の位置に基づいて、前記複数の画像のうちの参照Viewに指定した画像において傾きが所定の範囲内となる複数のエピポーラ線のグループを決定し、
決定した前記グループ及び前記情報処理装置が備えるキャッシュの容量に基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す線分の探索に用いるキャッシュ領域を決定する
処理を実行することを特徴とする情報処理方法。
(付記10)
前記情報処理装置が、更に、
前記シルエット画像データのうちの前記キャッシュ領域と対応する部分データを前記第1メモリから読み出して前記キャッシュに格納し、
前記キャッシュに格納された前記シルエット画像データに基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す前記線分を探索する
処理を実行することを特徴とする付記9に記載の情報処理方法。
(付記11)
異なる視点から撮影した複数の画像から、視体積交差法によって物体の3次元形状を復元する処理をコンピュータに実行させる情報処理プログラムであって、
前記複数の画像のそれぞれから抽出した前記物体についてのシルエット画像データを第1メモリに記憶させ、
前記複数の画像のうちの対象Viewに指定した画像における近傍シルエット画素の位置に基づいて、前記複数の画像のうちの参照Viewに指定した画像において傾きが所定の範囲内となる複数のエピポーラ線のグループを決定し、
決定した前記グループ及び前記情報処理装置が備えるキャッシュの容量に基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す線分の探索に用いるキャッシュ領域を決定する
処理を含むことを特徴とする情報処理プログラム。
(付記12)
前記コンピュータに、更に、
前記シルエット画像データのうちの前記キャッシュ領域と対応する部分データを前記第1メモリから読み出して前記キャッシュに格納し、
前記キャッシュに格納された前記シルエット画像データに基づいて、前記グループに含まれる前記複数のエピポーラ線のそれぞれにおける前記物体の存在する範囲を示す前記線分を探索する
処理を実行させることを特徴とする付記11に記載の情報処理プログラム。