画像処理装置、画像処理方法
【課題】 現実空間画像において、仮想空間画像を重畳させない領域を適切に設定するための技術を提供すること。
【解決手段】 キー領域抽出部303は、現実空間画像において予め定められた画素値を有する画素で構成される第1の領域を抽出する。動きベクトル検出部304は、現実空間画像上の複数箇所における動きベクトルを求める。被写体領域抽出部305は、動きベクトルを用いて、第1の領域にマージする第2の領域を特定する。画像合成部308は、仮想空間画像を現実空間画像上に重畳させる際に、第1の領域と第2の領域とをマージした合成領域は、仮想空間画像の重畳対象外とすることを特徴とする。
【解決手段】 キー領域抽出部303は、現実空間画像において予め定められた画素値を有する画素で構成される第1の領域を抽出する。動きベクトル検出部304は、現実空間画像上の複数箇所における動きベクトルを求める。被写体領域抽出部305は、動きベクトルを用いて、第1の領域にマージする第2の領域を特定する。画像合成部308は、仮想空間画像を現実空間画像上に重畳させる際に、第1の領域と第2の領域とをマージした合成領域は、仮想空間画像の重畳対象外とすることを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、現実空間画像と仮想空間画像との合成技術に関するものである。
【背景技術】
【0002】
実写風景の上に、コンピュータグラフィックス(CG)を重畳して体験者に提示することで、この体験者にあたかもその場に仮想の物体が存在するかのような体験を行わせる複合現実感(Mixed Reality:MR)技術が従来から提案されている。
【0003】
MR技術を用いて体験者に臨場感豊かな体験をさせる為には、実写風景の上に単純にCGを重畳して表示するだけでなく、体験者が実際にCGで描画される仮想物体に触ったり操作する(しているように体感させる)といったインタラクションが重要になる。そして、このようなインタラクションを実現するめには、仮想物体よりも手前(前景)に仮想物体を操作する体験者の手など(被写体)を表示することが必要である。なぜなら、仮想物体よりも手前にあるべき被写体が仮想物体によって隠されてしまうと、仮想物体との距離感や現実感が破綻し、臨場感を損ねてしまうからである。
【0004】
このような課題を解決するために、本願出願人は特許文献1において、最前景とすべき被写体の画像を仮想物体によって隠さないようにする技術を提案した。係る技術では、背景と被写体とを実写画像として取得し、この実写画像から、予め手作業でシステムに登録した「仮想物体より手前に表示すべき被写体(被写体検出情報としての色情報を有する領域)」を被写体領域として抽出する。そして、被写体領域には仮想物体の描画を禁止する。係る技術により、最前景となるべき被写体が仮想物体で隠されることなく、仮想物体よりも手前にあるように表示され、臨場感の高い複合現実感体験を行うことが可能となる。
【0005】
図1は、現実空間画像、仮想空間画像、現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【0006】
図1において101は現実空間画像で、係る現実空間画像101内には、被写体としての手の領域150が含まれている。102は、現実空間画像101上に重畳させる仮想空間画像である。103は、現実空間画像101上に仮想空間画像102を重畳させた合成画像である。合成画像103を生成する際には、現実空間画像101上において手の領域150に対しては仮想空間画像102は重畳させていないので、結果として合成画像103上には、手の領域150がそのまま描画されている。
【特許文献1】特開2003−296759号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1に開示されている複合現実感体験システムは、体験者の見ている被写体が単色である場合には良好に動作する。しかしながら、被写体が異なる複数の色を有する場合、ある色を有する領域のみしかCGの描画を禁止できないため、被写体の一部分だけがCG内に浮いているように表示されてしまい、体験者の現実感を損なうことがあった。
【0008】
図2は、複数の色を有する被写体を含む現実空間画像、仮想空間画像、そして係る現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【0009】
図2において201は現実空間画像で、係る現実空間画像201内には、被写体としての手の領域150a、腕の領域150bが含まれている。それぞれの領域150a、150bは異なる色を有する領域である。202は、現実空間画像201上に重畳させる仮想空間画像である。203は、現実空間画像201上に仮想空間画像202を重畳させた合成画像である。ここでは、手の領域150aの色を有する領域のみを、仮想空間画像202の重畳対象外としているので、図2に示す如く、本来は仮想空間画像202を重畳させない腕の領域150bには仮想空間画像202が描画されてしまっている。
【0010】
このような技術的背景から、次のようなことな望まれている。即ち、体験者の手や指定した領域を実写画像より抽出した後、抽出した領域に付属する領域(体験者の腕等)を更に抽出する。そして、抽出したそれぞれの領域をマージした被写体領域(手と腕)については仮想空間画像を重畳させないように、現実空間画像上に仮想空間画像を重畳させる。
【0011】
本発明は以上の問題に鑑みてなされたものであり、現実空間画像において、仮想空間画像を重畳させない領域を適切に設定するための技術を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。
【0013】
即ち、複数のフレームからなる現実空間画像を取得する手段と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出手段と、
前記注目フレーム内において、物体の動きベクトルを求める計算手段と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定手段と、
仮想空間画像を生成する生成手段と、
前記仮想空間画像を前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳手段とを備え、
前記特定手段は、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする。
【発明の効果】
【0014】
本発明の構成によれば、現実空間画像において、仮想空間画像を重畳させない領域を適切に設定することができる。
【図面の簡単な説明】
【0015】
【図1】現実空間画像、仮想空間画像、現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【図2】複数の色を有する被写体を含む現実空間画像、仮想空間画像、そして係る現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【図3】本発明の第1の実施形態に係るシステムの機能構成例を示すブロック図である。
【図4】現実空間の画像上に仮想空間の画像が重畳された合成画像を、ユーザがHMDを介して観察している様子を示す図である。
【図5】画像処理装置300が複合現実空間の画像を生成し、生成した複合現実空間の画像をHMD390が有する表示部309に送出する為の一連の処理のフローチャートである。
【図6】ステップS502における処理の詳細を示すフローチャートである。
【図7】ステップS601における処理の詳細を示すフローチャートである。
【図8】ステップS604における処理の詳細を示すフローチャートである。
【図9】キー領域の特徴のみを特徴空間上でクラスタリングした結果の例を示す図である。
【図10】キー領域のクラスとその他のクラスに属する特徴とを示す図である。
【図11】ステップS605における処理の詳細を示すフローチャートである。
【図12】ステップS505における、複合現実空間の画像の生成処理の詳細を示すフローチャートである。
【図13】本発明の第1の実施形態によって生成される複合現実空間の画像の一例を示す図である。
【図14】本発明の第3の実施形態で行う、ステップS502における処理のフローチャートである。
【図15】画像処理装置300に適用可能なコンピュータのハードウェア構成例を示す図である。
【図16】ステップS602において本発明の第4の実施形態で行う処理のフローチャートである。
【図17】画像平面上に射影された位置変化分動きベクトルTvを算出する原理を示す図である。
【発明を実施するための形態】
【0016】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の1つである。
【0017】
[第1の実施形態]
本実施形態では、現実空間画像上に仮想空間画像を重畳させる場合に、現実空間画像内に「手」の領域と「腕」の領域とが含まれている場合には、それぞれの領域をマージして1つの被写体の領域(合成領域)を生成する。そして、係る被写体の領域を常に仮想空間の画像よりも手前に表示するよう、係る重畳の処理を制御する。詳しくは後述するが、被写体の領域は、「手」の領域と「腕」の領域とをマージしたものに限定するものではなく、どのような領域をマージして被写体の領域を形成しても良い。即ち、以下の説明は、被写体の領域が異なる複数の画素値で表示されるようなものであれば、どのような被写体の領域でも良い。
【0018】
図4は、現実空間の画像上に仮想空間の画像が重畳された合成画像を、ユーザがHMDを介して観察している様子を示す図である。
【0019】
図4に示すように、ユーザ401はHMD390を介して、撮像部301が撮像した現実空間の画像上に、センサ404による計測結果に基づいて生成した仮想空間の画像、を重畳させた合成画像(複合現実空間の画像)を観察している。係る観察中に自身の手405や自身の腕406が撮像部301の視野範囲409に入った場合、HMD390に表示される複合現実空間の画像中には手405、腕406が表示される。即ち、前景となる現実空間の画像上の手405、腕406の領域には仮想空間の画像(仮想物体408の一部)は重畳させないようにする。これを実現するために、前景とすべき現実の被写体は「ユーザ401の手405の領域、腕406の領域」、背景とすべき現実の対象物は「壁や鉢植え等の背景現実物体407」、等の領域の区別を行う。
【0020】
図3は、本実施形態に係るシステムの機能構成例を示すブロック図である。
【0021】
図3に示す如く、本実施形態に係るシステムは、HMD390、位置姿勢計測部306、画像処理装置300により構成されている。そして、HMD390、位置姿勢計測部306はそれぞれ、画像処理装置300に接続されている。
【0022】
先ず、HMD390について説明する。
【0023】
HMD390は、頭部装着型表示装置の一例としてのものであり、撮像部301と表示部309とで構成されている。
【0024】
撮像部301は、現実空間の動画像を撮像するビデオカメラであり、撮像した各フレームの画像(現実空間画像)は、画像信号として後段の画像処理装置300に入力される。撮像部301は、ユーザがHMD390を自身の頭部に装着した場合に、このユーザの目の近くに位置するように、HMD390に取り付けられる。更に、取り付ける(撮像部301の)姿勢は、HMD390を頭部に装着したユーザの正面方向(視線方向)に略一致するような姿勢である。これにより、撮像部301は、ユーザの頭部の位置姿勢に応じて見える現実空間の動画像を撮像することができる。従って、以下の説明では、撮像部301を「ユーザの視点」と呼称する場合もある。
【0025】
表示部309は、例えば、液晶画面であり、HMD390を頭部に装着したユーザの眼前に位置するようにHMD390に取り付けられたものである。画像処理装置300からHMD390に対して送出される映像信号に基づいた画像は、係る表示部309に表示される。これにより、HMD390を頭部に装着したユーザの眼前には、画像処理装置300から送信された映像信号に基づいた画像が提示されることになる。
【0026】
本実施形態では、撮像部301と表示部309とはHMD390に内蔵されており、且つ撮像部301と表示部309とは、表示部309の光学系と撮像部301の撮像系とが一致するようにHMD390に内蔵されている。
【0027】
次に、位置姿勢計測部306について説明する。
【0028】
位置姿勢計測部306は、撮像部301の位置姿勢を計測するためのものであり、例えば、位置姿勢計測部306には、磁気センサや光学式センサ等のセンサシステムを適用することができる。例えば、位置姿勢計測部306に磁気センサを適用する場合、位置姿勢計測部306は次のような動作を行うことになる。
【0029】
先ず、位置姿勢計測部306に磁気センサを適用する場合、位置姿勢計測部306は、次のような各部によって構成されることになる。
【0030】
・ 周囲に磁界を発生させるトランスミッタ
・ トランスミッタが発生する磁界中で、自身の位置姿勢に応じた磁界の変化を検知するレシーバ
・ トランスミッタの動作制御を行うと共に、レシーバによる計測結果に基づいて、レシーバのセンサ座標系における位置姿勢情報を生成するセンサコントローラ
トランスミッタは現実空間中の所定の位置に配置する。そしてレシーバは、撮像部301に取り付ける。トランスミッタが磁界を発生させると、レシーバは、自身の位置姿勢(撮像部301の位置姿勢)に応じた磁界の変化を検知し、検知した結果を示す信号をセンサコントローラに送出する。センサコントローラは、係る信号に基づいて、レシーバのセンサ座標系における位置姿勢を示す位置姿勢情報を生成する。ここで、センサ座標系とは、トランスミッタの位置を原点とし、係る原点で互いに直交する3軸をそれぞれx軸、y軸、z軸とする座標系のことである。そして、センサコントローラは、求めた位置姿勢情報を、後段の画像処理装置300に対して送出する。
【0031】
しかし、位置姿勢計測部306にはどのようなセンサシステムを適用しても良く、位置姿勢計測部306に何れのセンサシステムを適用しても、その動作については周知であるので、これについての説明は省略する。また、センサシステムの代わりに、撮像部301が撮像した画像を用いて撮像部301の位置姿勢を求める方法を用いても良く、その場合には、位置姿勢計測部306は省略し、係る方法を実行する演算部を後段の画像処理装置300内に設ければよい。
【0032】
次に、画像処理装置300について説明する。図3に示す如く、画像処理装置300は、撮影画像取込部302、キー領域抽出部303、動きベクトル検出部304、被写体領域抽出部305、画像合成部308、画像生成部307、記憶装置310、により構成されている。以下、画像処理装置300を構成する各部について説明する。
【0033】
撮影画像取込部302は、撮像部301から送出された各フレームの画像の画像信号を受けると、これを順次ディジタルデータに変換し、動きベクトル検出部304、キー領域抽出部303、画像合成部308に送出する。
【0034】
キー領域抽出部303は、撮影画像取込部302から受けたディジタルデータが示す現実空間画像から、キー領域(第1の領域)を抽出する。ここで、キー領域とは、予め定められた画素値を有する画素で構成される領域である。本実施形態では、ユーザの手の色を示す画素値を有する画素で構成される領域をキー領域とする。そして、キー領域抽出部303は、現実空間画像においてキー領域を特定する為のデータであるキー領域データを生成し、生成したキー領域データを、被写体領域抽出部305に送出する。
【0035】
動きベクトル検出部304は、撮影画像取込部302から受けた現実空間画像(現フレーム)と、この現実空間画像よりも1つ前のフレームの現実空間画像とを用いて、現フレームにおける現実空間画像を構成する画素毎に、フレーム間の動きベクトルを求める。そして画素毎に求めた動きベクトルのデータを、被写体領域抽出部305に送出する。
【0036】
動きベクトル検出部304が行う動きベクトルの検出は、既存のブロックマッチング法によるオプティカルフローを算出することで実行することができる。本実施形態では、動きベクトルの検出(計算)をブロックマッチング法で行うものとするが、以下の説明は係る方法を用いることに限定するものではなく、フレーム間の動きベクトルを検出することができる方法であれば如何なる方法を用いても良い。例えば、動きベクトルの検出を勾配法によるオプティカルフローを用いることで行っても良い。
【0037】
被写体領域抽出部305は、キー領域抽出部303から入力されたキー領域データと、動きベクトル検出部304から入力された動きベクトルのデータと、を用いて、現実空間画像中における被写体の領域(被写体領域)を抽出する。係る被写体領域とは上述の通り、ユーザの手の領域と腕の領域とをマージした領域である。そして、抽出した被写体領域を特定するためのデータである被写体領域データを画像合成部308に送出する。
【0038】
画像生成部307は先ず、記憶装置310が保持している仮想空間のデータを用いて、仮想空間を構築する。仮想空間のデータには、仮想空間中に配置する仮想物体についてのデータ、仮想空間中に配置する光源のデータなどが含まれている。仮想物体のデータには、例えば、仮想物体がポリゴンで構成されている場合には、ポリゴンの法線ベクトルデータ、ポリゴンの色データ、ポリゴンを構成する各頂点の座標位置データ等が含まれている。また、仮想物体に対してテクスチャマッピングを施す場合には、テクスチャマップデータも、仮想物体のデータに含まれる。また、光源のデータには、例えば、光源の種類を示すデータ、光源の配置位置姿勢を示すデータ、等が含まれていることになる。
【0039】
そして画像生成部307は、仮想空間の構築後、係る仮想空間中に、位置姿勢計測部306から受けた位置姿勢情報が示す位置姿勢で視点を設定する。そして画像生成部307は、係る視点から見える仮想空間の画像(仮想空間画像)を生成する。なお、所定の位置姿勢を有する視点から見える仮想空間の画像を生成する為の技術については周知であるので、これについての説明は省略する。そして、生成した仮想空間画像のデータを、画像合成部308に送出する。
【0040】
画像合成部308は、撮影画像取込部302から受けたディジタルデータが示す現実空間画像上に、画像生成部307から受けたデータが示す仮想空間画像を重畳させる処理を行う。係る重畳処理では、被写体領域抽出部305から受けた被写体領域データが示す被写体領域には仮想空間画像が重畳されないようにする。そして画像合成部308はこのような重畳処理によって生成された複合現実空間の画像を映像信号に変換してからHMD390が有する表示部309に送出する。これにより、HMD390を頭部に装着したユーザの眼前には、自身の視点の位置姿勢に応じた複合現実空間の画像が提示されることになる。更に係る複合現実空間の画像において被写体領域(自身の手と腕の領域)には仮想空間画像は重畳されていない。
【0041】
なお、本実施形態では、複合現実空間の画像は、HMD390が有する表示部309に送出するものとしているが、複合現実空間の画像の送出先は特に限定するものではない。例えば、画像処理装置300にCRTや液晶画面等により構成されている表示装置を接続し、この表示装置に複合現実空間の画像を出力するようにしても良い。
【0042】
記憶装置310は、上述のように、仮想空間のデータを保持しており、画像生成部307は係るデータを適宜読み出して用いる。更に記憶装置310には、ユーザの手の色を示す画素値のデータ(キーカラーデータ)も記憶保持されている。
【0043】
ここで、キーカラーデータについて説明する。キーカラーデータは、多次元色空間における座標値として記述することができる。一般によく知られている表色系の種類には、RGB、YIQ、YCbCr、YUV、HSV、Lu*v*、La*b*など様々なものがある(日本規格協会 JIS色彩ハンドブック)。
【0044】
キーカラーデータには、被写体の色彩特性に合わせて適当なものを任意に用いてよいが、照明条件の相違による被写体の色彩特性の変化を相殺するために、輝度情報と色相情報とに分離する形式の表色系を用い、色相情報だけを用いることが望ましい。このような表色系の代表的なものとしてはYIQやYCbCrが一般的である。本実施形態では、YCbCr表色系を用いる。従って、記憶装置310に記憶保持されているキーカラーデータとは、ユーザの手の色を予め取得しておき、取得した色をYcbCr表色系のデータとして変換したものである。
【0045】
次に、画像処理装置300が複合現実空間の画像を生成し、生成した複合現実空間の画像をHMD390が有する表示部309に送出する為の一連の処理について、同処理のフローチャートを示す図5を用いて、以下説明する。
【0046】
先ずステップS501では、撮影画像取込部302は、撮像部301から送出された現実空間画像をディジタルデータとして取得する。
【0047】
次に、ステップS502では、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像から、キー領域(第1の領域)を抽出する。そして、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像においてキー領域を特定する為のデータであるキー領域データを生成し、生成したキー領域データを、被写体領域抽出部305に送出する。
【0048】
また動きベクトル検出部304は、ステップS501で撮影画像取込部302が取得した現フレームの現実空間画像と、現フレームより1フレーム前の現実空間画像とを用いて、現フレームの現実空間画像を構成する画素毎にフレーム間の動きベクトルを求める。そして動きベクトル検出部304は、画素毎に求めた動きベクトルのデータを、被写体領域抽出部305に送出する。
【0049】
そして被写体領域抽出部305は、キー領域抽出部303が生成したキー領域データと、動きベクトル検出部304が生成した動きベクトルのデータと、を用いて、ステップS501で撮影画像取込部302が取得した現実空間画像中の被写体領域を抽出する。そして、被写体領域抽出部305は、ステップS501で撮影画像取込部302が取得した現実空間画像中の被写体領域をマスクしたマスク画像のデータを、上記被写体領域データとして生成する。本実施形態では上述の通り、被写体とはユーザの手と腕であるので、現実空間画像から手と腕が存在する領域を抽出し、その領域からマスク画像を生成する。ステップS502における処理の詳細については後述する。
【0050】
次にステップS503では、画像生成部307は、位置姿勢計測部306から位置姿勢情報を取得する。係る位置姿勢情報は上述の通り、HMD390を頭部に装着するユーザの視点の位置姿勢であり、撮像部301の位置姿勢である。
【0051】
次にステップS504では、画像生成部307は、記憶装置310から仮想空間のデータを読み出し、読み出したデータに基づいて仮想空間を構築する。そして画像生成部307は、仮想空間の構築後、係る仮想空間中に、ステップS503において位置姿勢計測部306から取得した位置姿勢情報が示す位置姿勢で視点を設定する。そして画像生成部307は、係る視点から見える仮想空間の画像(仮想空間画像)を生成する。
【0052】
次にステップS505では、画像合成部308は、ステップS501で撮影画像取込部302が取得したディジタルデータが示す現実空間画像上に、ステップS504で画像生成部307が生成した仮想空間画像を重畳させる処理を行う。係る重畳処理では、ステップS502で被写体領域抽出部305が生成した被写体領域データが示す被写体領域には仮想空間画像が重畳されないようにする。ステップS505における処理の詳細については後述する。
【0053】
次にステップS506では、画像合成部308は、ステップS505における重畳処理によって生成した複合現実空間の画像を映像信号に変換してからHMD390が有する表示部309に送出する。
【0054】
次に、画像処理装置300が有する不図示の操作部を介して本処理の終了指示がユーザから入力された、若しくは本処理の終了条件が満たされた場合にはステップS507を介して本処理が終了する。一方、画像処理装置300が有する不図示の操作部を介して本処理の終了指示がユーザから入力されていないし、本処理の終了条件も満たされていない場合には、処理はステップS507を介してステップS501に戻す。そして、次のフレームの複合現実空間の画像を表示部309に送出すべく、ステップS501以降の処理を行う。
【0055】
次に、上記ステップS502における処理の詳細について説明する。図6は、上記ステップS502における処理の詳細を示すフローチャートである。
【0056】
先ずステップS601では、キー領域抽出部303は、記憶装置310からキーカラーデータを読み出す。そして、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有する画素の集合をキー領域として抽出する。
【0057】
具体的には、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有する画素については「1」を割り当てる。一方、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有していない画素については「0」を割り当てる。即ち、現実空間画像において、手の領域を構成する各画素については「1」を割り当て、それ以外の領域を構成する各画素については「0」を割り当てる。
【0058】
ここで、ステップS601における処理をより詳細に説明する。図7は、上記ステップS601における処理の詳細を示すフローチャートである。なお、図7のフローチャートは、現実空間画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS601では、図7のフローチャートに従った処理を、現実空間画像を構成する各画素について行うことになる。
【0059】
先ずステップS701では、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像において画像座標(i、j)における画素の画素値(本実施形態ではRGB値で表されているものとする)をYCrCb値に変換する。画像座標(i、j)における画素のR値をR(i、j)、G値をG(i、j)、B値をB(i、j)とする。この場合、ステップS701では、RGB値をYCrCb値に変換する為の関数color_conversion()を用いて、R(i、j)、G(i、j)、B(i、j)を変換し、Y値、Cr値、Cb値を得る。
【0060】
次にステップS702では、ステップS701で求めたY、Cr、Cbのそれぞれの値が表現する色が、記憶装置310から読み出したキーカラーデータが示す色に略同じであるのか否かを判断する。例えば、ステップS701で求めたY、Cr、Cbのそれぞれの値が表現する色が、記憶装置310から読み出したキーカラーデータが示す色に略同じであるのか否かを、関数Key_area_func()を用いて判断する。係る関数Key_area_func()は、略同じであれば1を返し、略同じでなければ0を返す関数である。
【0061】
ここで、関数Key_area_func()による判断方法としては、例えば、Cb、Crで規定されるCbCr平面上における座標値(Cr、Cb)が、キーカラーデータの色分布の領域に属するか否かを判定する。判定結果は、例えば、キーカラーデータの色分布に属するのであれば1、属さないのであれば0と二値で表してもよいが、属する度合いを0から1までの連続値でもって表現するようにしても良い。
【0062】
そして係る関数Key_area_func()が返す値は、配列Key_area(i、j)に代入される。この配列key_area(i、j)は、画像座標(i、j)における画素がキー領域を構成する画素であるか否かを示す値を格納する為のものである。
【0063】
そして、全てのi、jについて図7のフローチャートに従った処理を行うことで、配列Key_areaには、現実空間画像を構成する各画素について「1」若しくは「0」が保持されることになる。係る配列Key_areaが、上記キー領域データとなる。
【0064】
なお、本実施形態では、撮影画像取込部302が取得した現実空間画像を構成する各画素の画素値はRGBで表されているものとしているが、YIQやYUVで表されていても良い。その場合には、ステップS701における処理を省略し、ステップS702において(Cb、Cr)の代わりにそれぞれIQ空間やUV空間における座標値を用いればよい。
【0065】
以上説明したように、キー領域抽出部303は、撮影画像取込部302が取得した現実空間画像を構成する各画素が、キー領域(手)を構成するものであるのか否かを示すキー領域データを生成する。
【0066】
図6に戻って、次にステップS602では、動きベクトル検出部304は、ステップS501で撮影画像取込部302が取得した現フレームの現実空間画像を構成する画素毎にフレーム間の動きベクトルを求める。なお、本実施形態では、動きベクトルは現実空間画像を構成する各画素について求めるものとしたが、これに限定するものではなく、現実空間画像上の複数箇所における動きベクトルを求めれば良い。例えば、キー領域の近辺のみの画素について動きベクトルを求めるようにしても良い。これにより動きベクトルを求める為に要する時間コストを削減することができる。
【0067】
次にステップS603では、被写体領域抽出部305は、ステップS602で求めた各画素についての動きベクトルのうち、キー領域以外(第1の領域以外)の領域(非キー領域、他領域)を構成する各画素について求めた動きベクトルの大きさの平均を求める。そして求めた平均(代表動きベクトルの大きさ)が、予め定めた閾値以上であるか否かを判断する。係る判断の結果、求めた平均が閾値以上であれば処理をステップS604に進め、閾値未満である場合には処理をステップS606に進める。
【0068】
なお、ここで述べている「動きベクトルの大きさ」とは、動きベクトル距離成分を示している。もちろん、動きベクトルの角度成分から「大きさ」を求めても良い。このように、動きベクトルの大きさを求めるための方法については特に限定するものではない。ここで、ステップS603で行う判断処理の意義について説明する。
【0069】
手の領域の動きベクトルと類似度の高い領域は、腕の領域として抽出する。これは手と腕はほとんどの場合において一緒に動作しているので、それぞれの動きベクトルには類似性があるということから実現している。ただし手だけが動いて腕はほとんど動かないという場合も考えられる。例えば、手首のみを回した場合がこれに相当する。この場合、そのまま被写体領域を抽出しようとしても腕は抽出されない。また、手も腕も全く動かずさらには撮像部301も動かない場合は、動きベクトルは算出されないので正常に被写体領域を抽出することができない。
【0070】
そこで本実施形態では、ステップS603において、手が動いていない場合と、手と腕と撮像部301の全部が動いていない場合とを判断する処理を行う。つまり、非キー領域の動きベクトルの大きさがほとんど0の場合は、腕の領域が動いていないか、手と腕と撮像部301の全部が動いていないと判断し、その場合はステップS606の処理を行うことで問題を回避する。ステップS606における処理については後述する。
【0071】
次にステップS604では、被写体領域抽出部305は、ステップS601で抽出したキー領域と、ステップS602で求めた動きベクトルと、に基づいて、キー領域にマージすべき第2の領域を特定する。そして特定した第2の領域とキー領域とをマージした領域を被写体領域として得る。本実施形態では、腕の領域を第2の領域として特定する。そして、特定した腕の領域を、キー領域としての手の領域にマージすることで被写体領域を得る。
【0072】
ここで、ステップS604における処理の詳細について説明する。図8は、上記ステップS604における処理の詳細を示すフローチャートである。
【0073】
先ず、ステップS801では、被写体領域抽出部305は、各動きベクトルを、距離成分と角度成分を特徴としてそれぞれの特徴軸で正規化する。これにより各特徴の単位の違いにより値の重み付けがなされてしまうことを回避する(一般的な正規化)。例えば、特徴のパターン相互の距離を最小にすることで正規化を行う。
【0074】
次に、ステップS802では、被写体領域抽出部305は、ステップS801で正規化された動きベクトルのうち、キー領域の特徴のみを特徴空間上でクラスタリングする。つまり、図9に示すようにベクトル距離成分軸(縦軸)と角度成分軸(横軸)とで規定される特徴空間上で、キー領域の特徴をクラスタリングする(特徴パターンの学習)。図9は、キー領域の特徴のみを特徴空間上でクラスタリングした結果の例を示す図である。
【0075】
ここで必要に応じてクラスタリングされたキー領域の特徴のうちノイズ成分を除外してもよい。具体的には、特徴の数の少ないクラスや距離成分の小さいクラスなどはノイズとして除外する。
【0076】
また、キー領域の特徴をクラスタリングするとしたが、クラスリングする特徴をキー領域のエッジ領域のみの特徴とすることでノイズを除外していもよい。エッジ領域の抽出は既存のラベリングアルゴリズムで実現できる。
【0077】
次に、ステップS803では、被写体領域抽出部305は、正規化した全ての動きベクトルの特徴のうち、ステップS802でクラスタリングされたキー領域のクラスに含まれるものとして判断された特徴を、このクラスに含める処理を行う。即ち、図10に示すように、動きベクトルの特徴空間においてキー領域のクラスに属する特徴は被写体領域クラスであるとみなすことで、被写体領域クラスとそれ以外を識別する。これから、被写体領域は、キーカラーデータを有する領域に加え、キー領域と類似した動きベクトル成分を有する領域も含むこととなる。図10は、キー領域のクラスとその他のクラスに属する特徴とを示す図である。
【0078】
係る処理は、例えば以下の式に基づいて行われる。
【0079】
target_area( i, j ) = discriminant_func( whole_vec( i, j ) )
ここで(i,j)は現実空間画像における画素座標、target_areaは被写体領域である。また、discriminant_func()はキー領域のクラスの動きベクトルの特徴によって学習されている被写体領域識別関数、whole_vecは現実空間画像の全体の動きベクトルである。なお、上述したように、動きベクトルは現実空間画像を構成する全ての画素について求めることに限定するものではないので、ステップS803では、全ての画素について行うのではなく、動きベクトルを求めた全ての画素について行うものである。
【0080】
次に、ステップS804では、被写体領域抽出部305は、キー領域と類似した動きベクトル成分を有する画素としてステップS803で特定されたそれぞれの画素についてラベリング処理を行う。以下ではラベリングされた画素で構成される領域を追加領域と呼称する。例えば、腕の領域を構成する画素のみをラベリングする。またここでラベリングされる画素にはユーザの手、腕以外の領域を構成する画素が含まれている可能性がある。本来それらの画素は、背景となる領域を構成する画素である。例えばそれはユーザ以外の人間の手や腕かもしれない。
【0081】
次に、ステップS805では、被写体領域抽出部305は、ステップS804でラベリングされた追加領域が被写体領域として適切か否かを判定する。ステップS805における判定で用いる判定基準は2つある。
【0082】
1つ目の基準は、追加領域がキー領域と連結しているかどうか(連結関係)である。つまり、被写体となるべき腕はもちろん手とつながっているので、追加領域がキー領域と連結しているかを判定し、連結していればこの追加領域は被写体領域であるとする。そしてそうでないものは被写体領域から除外する。
【0083】
2つ目の基準は、追加領域が現実空間画像の端の領域に属しているかどうかである。つまり、被写体領域となるべきである腕はもちろんユーザとつながっているので、ユーザは自身の手を見ている際は必ず手につながった腕がユーザの視界の端までつながっているはずである。従って、ユーザが見る画像の端の領域に腕の領域が存在するはずである。これらの理由から、追加領域が現実空間画像の端の領域に属しているか否かを判定し、属していればこの追加領域は被写体領域であるとする。そしてそうでないものは被写体領域から除外する。
【0084】
これらの処理によって、背景領域を被写体領域と誤認識することが軽減される。
【0085】
ここで2つ目の基準をより厳しくするために、追加領域が現実空間画像の左右か下の端の領域に属しているかを判断するようにしても良い。
【0086】
ステップS806では、ステップS805で被写体領域として認識された追加領域を、キー領域にマージすることで、被写体領域を形成する。
【0087】
被写体領域はつまり下記のようになる。
【0088】
被写体領域 = キー領域 + 追加領域
ただし、追加領域は、ステップS805で被写体領域として適切であると判定された領域である。
【0089】
そして、図6のステップS605にリターンする。
【0090】
ここで、以上の説明では、動きベクトルの距離成分と角度成分とを特徴として用いたが、距離成分のみを特徴として用いても良い。即ち、動きベクトルの特徴として用いるものは特に限定するものではなく、動きベクトル間の類似性を求めることができるのであれば、何れの特徴を用いても良い。
【0091】
図6に戻ってステップS605では、被写体領域抽出部305は、ステップS501で撮影画像取込部302が取得した現実空間画像からステップS604で抽出した被写体領域の領域をマスクしたマスク画像のデータを、上記被写体領域データとして生成する。
【0092】
ここで、ステップS605における処理の詳細について説明する。図11は、上記ステップS605における処理の詳細を示すフローチャートである。なお、図11のフローチャートは、現実空間画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS605では、図11のフローチャートに従った処理を、現実空間画像を構成する各画素について行うことになる。
【0093】
ステップS1101では、被写体領域抽出部305は、画像座標(i、j)における画素が被写体領域として上記ステップS805で認識されたのであれば、配列Key_area(i、j)に「1」を書き込む。係る動作は、関数mask_func()を実行することでなされる。これにより、配列Key_area(i、j)は、画像座標(i、j)における画素が被写体領域を構成する画素であるか否かを示す値を格納する為の2次元配列となる。
【0094】
そして、全てのi、jについて図11のフローチャートに従った処理を行うことで、配列Key_areaには、現実空間画像を構成する各画素について「1」若しくは「0」が保持されることになる。係る配列Key_areaが、上記被写体領域データとなる。
【0095】
なお、本実施形態では生成された被写体領域データが示すマスク画像はマスク領域内にノイズを含む場合がある。この場合は既存の凸閉方処理を行う。
【0096】
一方、図6に戻って、ステップS606では、被写体領域抽出部305は、1フレーム前に生成した被写体領域データを、現フレームでも使用するものとして設定する。これは前述したように、動きベクトルから被写体領域を正常に抽出できない場合は前回生成したマスク画像で代用する処理である。しかし、ステップS606では、キー領域部分は常に更新し、追加領域のみ更新されていないマスク画像を示す被写体領域データを出力してもよい。キー領域部分を常に更新するということはキーカラーデータに基づいて領域を抽出するということである。従って係る処理を行えば、キー領域の形状(手の形状)は必ずキーカラーデータによって正確に抽出されることが保障される。
【0097】
そして、ステップS605,S606の何れの処理の後も、図5のステップS503にリターンする。
【0098】
次に、図5のステップS505における、複合現実空間の画像の生成処理の詳細について説明する。図12は、上記ステップS505における、複合現実空間の画像の生成処理の詳細を示すフローチャートである。なお、図12のフローチャートは、複合現実空間の画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS505では、図12のフローチャートに従った処理を、複合現実空間の画像を構成する各画素について行うことになる。
【0099】
先ずステップS1201では、画像合成部308は、次のような処理を行う。即ち、ステップS501で撮影画像取込部302が取得したディジタルデータが示す現実空間画像において画像座標(i,j)の画素real(i,j)を、画像処理装置300内のフレームメモリbuffer(i,j)に転送する。
【0100】
次にステップS1202では、上記ステップS502で生成した被写体領域データが示すマスク画像のうち画像座標(i、j)に対応するデータKey_area(i,j)を画像処理装置300内のステンシルバッファstencil(i,j)に転送する。
【0101】
次にステップS1203では、画像合成部308は、stencil(i,j)=0である場合には、上記ステップS504で生成した仮想空間画像において画像座標(i,j)の画素CGI(i,j)を、フレームメモリbuffer(i,j)に上書きする。一方、画像合成部308は、stencil(i,j)=1である場合には、フレームメモリbuffer(i,j)に対しては何も処理しない。即ち、被写体領域については、仮想空間画像の重畳対象外とする。
【0102】
そして、全てのi、jについて図12のフローチャートに従った処理を行うことで、フレームメモリbufferには、複合現実空間の画像が生成されることになる。そして、ステップS506では、この複合現実空間の画像を映像信号としてHMD390が有する表示部309に送出する。
【0103】
以上の説明により本実施形態によれば、現実空間画像上に仮想空間画像を重畳させる際、現実空間画像中に「手」と「腕」とが被写体として含まれている場合は、この被写体は常に仮想空間画像よりも手前に表示されるように、重畳処理を制御することができる。
【0104】
図13は、本実施形態によって生成される複合現実空間の画像の一例を示す図である。図13に示した複合現実空間の画像1301は、現実空間画像、仮想空間画像がそれぞれ図2に示した現実空間画像201、仮想空間画像202である場合に生成されるものである。図13に示す如く、手の領域150aはもちろんのこと、手の領域150aとは異なる画素値を有する腕の領域150bさえも、仮想空間画像202の手前に表示することができる。
【0105】
[第2の実施形態]
第1の実施形態の冒頭でも述べたように、被写体の領域は、「手」の領域と「腕」の領域とをマージしたものに限定するものではなく、どのような領域をマージして被写体の領域を形成しても良い。即ち、以下の説明は、被写体の領域が異なる複数の画素値で表示されるようなものであれば、どのような被写体の領域でも良い。
【0106】
例えば、ユーザが手で把持している現実物体を追加領域として判断して被写体領域を決定しても良い。これにより、ユーザの手、腕に加えて、手で把持している現実物体をも、仮想空間画像の手前に表示することができる。
【0107】
この場合、第1の実施形態において、ステップS805における処理を以下のように変更すれば良い。
【0108】
第1の実施形態では、ステップS805において2つの判断基準を設けていた。本実施形態ではそのうちの1つの判断基準を次のような判断基準に変更する。
【0109】
具体的には、追加領域が現実空間画像の端の領域に属しているかどうかの判定をなくす。これは、手で把持される現実物体が必ずしも現実空間画像の端にかかっているわけではないためである。
【0110】
本実施形態ではその代わりの判定処理として、キー領域と追加領域(ステップS805の判定済みの領域)とをマージすることで得られる被写体領域が現実空間画像の端にかかっているかどうかを基準として判定を行う。
【0111】
これより手に把持されていない領域の誤認識を回避する。
【0112】
[第3の実施形態]
第1,2の実施形態では、キー領域と追加領域とを毎フレーム毎に算出し、それらに基づいて被写体領域を決定した。即ち、キー領域と追加領域とに基づいて被写体領域を求める処理をフレーム毎に行っていた。本実施形態では、初期領域を指定するためのみキー領域と追加領域とを算出し、その後の被写体領域の更新は自動輪郭抽出処理によって行う。
【0113】
本実施形態では、初期登録された被写体領域を安定して毎回更新することが可能となる。ここでいう安定とは、例えば新しくキー領域に含まれる現実物体が現れても変わらない領域を抽出可能ということである。ここで、本実施形態では、第1、2の実施形態とステップS502における処理のみが異なる。
【0114】
図14は、本実施形態で行う、ステップS502における処理のフローチャートである。図14に示すフローチャートは、図6に示したフローチャートからステップS603における処理と、ステップS606における処理とが削除されている。そして代わりに、ステップS604とステップS605との間に、ステップS1401の動的輪郭対象登録の処理と、ステップS1402の動的輪郭抽出の処理が追加されている。
【0115】
ステップS1401では、被写体領域抽出部305は、ステップS604で抽出された被写体領域を動的輪郭抽出の対象として登録する。
【0116】
次にステップS1402では、被写体領域抽出部305は、ステップS1401で登録された被写体領域の動的輪郭抽出を行う。動的輪郭抽出はスネークなどの既存のアルゴリズムを用いればよい。動的輪郭抽出は既存の技術であるので説明は省略する。
【0117】
ステップS605では、被写体領域抽出部305は、ステップS1401で抽出された被写体領域に基づきマスク画像(被写体領域データ)を生成して出力する。
【0118】
[第4の実施形態]
上記実施形態では、撮像部301が撮像した現実空間画像から算出される動きベクトルのみから被写体領域を特定した。しかし、被写体領域の特定は係る方法に限定するものではない。例えば、現実空間画像から算出される動きベクトルを、撮像部301の位置および姿勢の変化から生じる動きベクトルを用いて補正することで得られる動きベクトルから被写体領域を特定してもよい。
【0119】
撮像部301が移動または回転する場合、現実空間画像のみから算出される動きベクトルでは、被写体領域を抽出する際に誤差が生じやすい。なぜならば、現実空間画像のみから算出される動きベクトルは、被写体の動きベクトルだけではなく撮像部301の動きベクトルをも含んでいるからである。例えば、被写体の動きとは逆の方向に撮像部301が動いた場合、被写体の動きベクトルのいくつかを打ち消してしまう可能性がある。
【0120】
そこで本実施形態では、現実空間画像から算出される動きベクトルから、撮像部301の位置および姿勢変化から生じる動きベクトルの影響を差し引くことで、被写体の動きベクトルを算出する。そして、その算出結果としての動きベクトルから被写体領域を特定する。この場合、第1の実施形態においてステップS502における処理を以下のように変更すればよい。
【0121】
第1の実施形態では、ステップS502内の、更にステップS602では、現実空間画像からのみ動きベクトルを算出するとした。本実施形態では、動きベクトルの算出方法を下記のように変更する。
【0122】
図16は、ステップS602において本実施形態で行う処理のフローチャートである。本実施形態ではステップS602では、撮像部301(撮像装置)の位置および姿勢の変化に基づいて、現実空間画像からのみ動きベクトルを補正する。
【0123】
ステップS1501では、動きベクトル検出部304は、現実空間画像から動きベクトルを算出する。ステップS1501における処理は、第1の実施形態で説明したステップS602における処理と同じである。
【0124】
次に、ステップS1502では、動きベクトル検出部304は、撮像部301の姿勢変化による動きベクトル(姿勢変化分動きベクトル)の情報を用いて、ステップS1501で算出された動きベクトルを補正する。
【0125】
より詳しくは、先ず、動きベクトル検出部304は、位置姿勢計測部306から撮像部301の姿勢情報を得る。ここで、動きベクトル検出部304は、予め前フレームにおける撮像部301の位置および姿勢情報を保持しているとする。動きベクトル検出部304は、前フレームにおける撮像部301の姿勢情報と現フレームにおける撮像部301に姿勢情報とから、姿勢の変化量を算出する。この姿勢変化量から、姿勢変化によって生じる動きベクトル(姿勢変化分動きベクトル)を求める。なお、動きベクトルの算出技術は周知の技術であるので、これについての詳細な説明は省略する。なお、ここで姿勢変化とは、撮像部301のレンズ中心を軸として光軸が回転することをいう。
【0126】
次に、算出された姿勢変化分動きベクトルを、撮像部301の画像平面に射影することで、画像上での動きベクトルとして変換する。
【0127】
そして動きベクトル検出部304は、画像平面に射影された姿勢変化分動きベクトルを用いて、ステップS1501で算出された動きベクトルを補正する。係る補正は以下の式に基づいて行う。
【0128】
M’=M−Rv・I (式1)
ここで、M’は姿勢変化分動きベクトルを現実空間画像内の動きベクトルから差し引いた動きベクトルを表す行列、Mは現実空間画像から算出された動きベクトルを表す行列である。また、Rvは画像平面上に射影された姿勢変化ベクトル、Iは単位行列(行列Mと大きさが同じ行列)である。
【0129】
このように、現実空間画像から算出された動きベクトルから姿勢変化による動きベクトルを減じる。
【0130】
図16に戻って、次に、ステップS1503では、動きベクトル検出部304は、撮像部301の位置変化による動きベクトル(位置変化分動きベクトル)の情報を用いて、ステップS1501で算出された動きベクトルを補正する。
【0131】
より詳しくは、先ず、動きベクトル検出部304は、位置姿勢計測部306から撮像部301の位置情報を得る。動きベクトル検出部304は、前フレームにおける撮像部301の位置情報と現フレームにおける撮像部301の位置情報とから、位置の変化量を算出する。この位置変化量から、位置変化によって生じる動きベクトルを求める。なお位置変化とは、撮像部301のレンズ中心を軸として並進移動した場合の位置変化のことをいう。
【0132】
次に、位置変化分動きベクトルを、撮像部301の画像平面に射影することで、画像上での動きベクトルとして変換する。ここで、位置変化分動きベクトルを画像平面に射影する際は、位置変化分動きベクトルの画像平面射影とは異なり、被写体までの奥行き情報を考慮する必要がある。なぜならば、画像平面上に射影される位置変化分動きベクトルは、被写体までの奥行き距離に応じて異なるからである。具体的には、被写体までの距離が大きくなるにつれて、位置変化分動きベクトルの大きさは大きくなる。
【0133】
従って、動きベクトル検出部304は、画像平面上に射影される位置変化分動きベクトルを算出するために被写体までの奥行き距離を測定する。
【0134】
本実施形態では、被写体はステレオビデオカメラから成るHMD390によって撮像されているので、ステレオマッチング法により奥行き距離を測定する。ステレオマッチング法は周知の技術であるので、これについての説明は省略する。
【0135】
本実施形態では、奥行き距離の測定をステレオマッチング法によって行うとしているが、係る方法に限定するものではない。例えば、奥行き距離の測定を赤外式距離測定カメラを用いて行っても良い。即ち、距離を測定できる方法であればどのような方法を用いても良い。また、位置変化分動きベクトルを算出するために、ユーザが奥行き距離を設定するようにしても良い。
【0136】
奥行き距離が測定されると、動きベクトル検出部304は、画像平面上に射影される位置変化分動きベクトルの算出を以下の式に基づいて行う。
【0137】
Tv=f・t/z (式2)
ここで、Tvは画像平面上に射影された位置変化分動きベクトル、fは撮像部301のレンズから結像面までの距離である。また、tは撮像部301の位置変化によって生じた動きベクトル、zは被写体までの奥行き距離である。
【0138】
図17は、画像平面上に射影された位置変化分動きベクトルTvを算出する原理を示す図である。図17では、現在よりも一つ前のフレームから現在のフレームに変わった際に撮像部301が並進移動した(tだけ並進移動した)例を示している(被写体は固定とする)。また、図17では、画像面を規定するXY座標軸のうち、X軸方向に撮像部301が並進した場合を示している。ここでは説明を簡単にするため、X軸方向のみの移動を想定しているが、ここで説明する方法の原理は、移動方向がY軸成分を有する場合にも適用可能であることは言うまでもない。
【0139】
図17において、O1は現在よりも一つ前のフレーム(前フレーム)おける撮像部301のレンズ中心を示す。O2は現在のフレーム(現フレーム)における撮像部301のレンズ中心を示す。P(x、z)は、撮像部301で撮像された被写体の一点(計測点)を示す。xはx座標の値、zはz座標の値を示す。ここで表現されている座標系は、前フレームにおける撮像部301のレンズ中心を原点とした現実空間の座標系である。つまり、zは撮像部301からの奥行き値である。
【0140】
X1は、前フレームにおいて計測点を画像平面上に投影したときのx座標である。X2は現フレームおいて計測点を画像平面上に投影したときのx座標である。つまり、X2-X1が、画像平面上での撮像部301の動きベクトルといえる。その他は(式2)と同じである。
【0141】
図17から分かるように、位置変化分動きベクトルtが与えられると、撮像部301のレンズから結像面までの距離fと被写体までの距離zとの相似関係から、画像平面上の位置変化分動きベクトルTvを算出することが可能である。
【0142】
そして動きベクトル検出部304は、画像平面に射影された位置変化分動きベクトルを用いて、ステップS1501で算出された動きベクトルを補正する。係る補正は下記の式に基づいて行う。
【0143】
M”=M’−Tv・I
M”は、位置変化分動きベクトルを動きベクトルM’から差し引いた動きベクトルを表す行列、M’はステップS1502の処理において補正された動きベクトルを表す行列である。また、Tvは、画像平面上に射影された位置変化ベクトル、Iは単位行列(行列Mと大きさが同じ行列)である。このように、現実空間画像から算出された動きベクトルから、撮像部301の位置変化による動きベクトルを減じる。
【0144】
最終的に、撮像部301が撮像した現実空間画像から算出された動きベクトルから、撮像部301の位置及び姿勢によって生じた動きベクトルを減ずることとなる。従って、結果的に撮像部301による動きベクトルを排除した被写体の動きベクトルを算出することとなる。
【0145】
本実施形態では、このようにして撮像部301の動きの影響を補正した動きベクトルに基づいて、被写体領域の特定を行う。ここで、本実施形態では、位置及び姿勢の両方の変化によって生じる動きベクトル分を補正するとした。しかし、動きベクトルの補正を、撮像部301の姿勢変化のみを考慮して行ってもよいし、移動変化のみを考慮して行っても良い。
【0146】
また、本実施形態では、撮像部301の動きによって生じる動きベクトルを、位置姿勢計測部306から得られる位置及び姿勢情報を用いて求めた。しかし、係る動きベクトルは他の方法でもって求めても良い。即ち、必ずしも、磁気センサや光学式センサなどのセンサシステムから得られる位置及び姿勢情報に基づいて動きベクトルを求める必要はない。例えば、撮像部301が撮像した画像を用いて、撮像部301の動きによって生じる動きベクトルを求めるようにしても良い。
【0147】
例えば、撮像部301が撮像した画面全体の動きベクトルの平均を、撮像部301の動きにより生じた動きベクトルと仮定するようにしても良い。また、撮像した画像を領域分割することで背景領域が分かっている場合には、背景領域に生じている動きベクトルを、撮像部301の動きにより生じた動きベクトルと仮定するようにしても良い。
【0148】
[第5の実施形態]
上記各実施形態では、図3に示した画像処理装置300を構成する各部はハードウェアで構成されているものとして説明したが、記憶装置310、撮影画像取込部302を除く他の各部はソフトウェアプログラムの形態で実現させても良い。その場合、記憶装置310、撮影画像取込部302を有するコンピュータに、係るソフトウェアプログラムをインストールし、係るソフトウェアプログラムを、このコンピュータが有するCPUが実行することで、各部の動作を実現させることになる。即ち、画像処理装置300には、一般のPC(パーソナルコンピュータ)などのコンピュータを適用させることができる。
【0149】
図15は、画像処理装置300に適用可能なコンピュータのハードウェア構成例を示す図である。
【0150】
CPU1501は、RAM1502やROM1503に格納されているプログラムやデータを用いて本コンピュータ全体の制御を行うと共に、画像処理装置300が行うものとして上述した各処理を実行する。
【0151】
RAM1502は、外部記憶装置1506からロードされたプログラムやデータ、I/F(インターフェース)1507を介して外部から受信した各種のデータ等を一時的に記憶するためのエリアを有する。更にRAM1502は、CPU1501が各種の処理を実行する際に用いるワークエリアも有する。更に、RAM1502は、上記フレームメモリ、ステンシルバッファとしても機能する。即ち、RAM1502は、各種のエリアを適宜提供することができる。
【0152】
ROM1503は、本コンピュータの設定データや、ブートプログラムなどを格納する。
【0153】
操作部1504は、キーボードやマウスなどにより構成されており、本コンピュータの操作者が操作することで、各種の指示をCPU1501に対して入力することができる。例えば、処理の終了指示等はこの操作部1504を用いて入力することができる。
【0154】
表示部1505は、CRTや液晶画面などにより構成されており、CPU1501による処理結果を画像や文字で表示することができる。例えば、画像処理装置300が行うものとして上述した各処理を本コンピュータ(CPU1501)が実行することで生成された複合現実空間の画像を表示することができる。
【0155】
外部記憶装置1506は、ハードディスクドライブ装置に代表される大容量情報記憶装置である。外部記憶装置1506には、OS(オペレーティングシステム)や、画像処理装置300が行うものとして上述した各処理をCPU1501に実行させるためのプログラムやデータなどが保存されている。係るプログラムには、動きベクトル検出部304、キー領域抽出部303、被写体領域抽出部305、画像合成部308、画像生成部307のそれぞれの機能をCPU1501に実行させるためのプログラムが含まれている。また、外部記憶装置1506は記憶装置310も兼ねている。外部記憶装置1506に保存されているプログラムやデータは、CPU1501による制御に従って適宜RAM1502にロードされる。そしてCPU1501はこのロードされたプログラムやデータを用いて処理を実行するので、本コンピュータは、画像処理装置300が行うものとして上述した各処理(上述の各フローチャートに従った処理)を実行することになる。
【0156】
I/F1507は、上述のHMD390や位置姿勢計測部306を本コンピュータに接続する為のもので、HMD390、位置姿勢計測部306とはこのI/F1507を介して信号の送受信を行う。I/F1507は、撮影画像取込部302も兼ねている。
【0157】
1508は上述の各部を繋ぐバスである。
【0158】
なお、画像処理装置300に適用可能なコンピュータのハードウェア構成については図15に示した構成に限定しない。例えば、本コンピュータにグラフィックスカード(ボード)を取り付け、係るグラフィックスカードが仮想空間画像の生成や、複合現実空間の画像の生成を行うようにしても良い。
【0159】
[その他の実施形態]
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体(または記憶媒体)を、システムあるいは装置に供給する。係る記憶媒体は言うまでもなく、コンピュータ読み取り可能な記憶媒体である。そして、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【0160】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0161】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0162】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【技術分野】
【0001】
本発明は、現実空間画像と仮想空間画像との合成技術に関するものである。
【背景技術】
【0002】
実写風景の上に、コンピュータグラフィックス(CG)を重畳して体験者に提示することで、この体験者にあたかもその場に仮想の物体が存在するかのような体験を行わせる複合現実感(Mixed Reality:MR)技術が従来から提案されている。
【0003】
MR技術を用いて体験者に臨場感豊かな体験をさせる為には、実写風景の上に単純にCGを重畳して表示するだけでなく、体験者が実際にCGで描画される仮想物体に触ったり操作する(しているように体感させる)といったインタラクションが重要になる。そして、このようなインタラクションを実現するめには、仮想物体よりも手前(前景)に仮想物体を操作する体験者の手など(被写体)を表示することが必要である。なぜなら、仮想物体よりも手前にあるべき被写体が仮想物体によって隠されてしまうと、仮想物体との距離感や現実感が破綻し、臨場感を損ねてしまうからである。
【0004】
このような課題を解決するために、本願出願人は特許文献1において、最前景とすべき被写体の画像を仮想物体によって隠さないようにする技術を提案した。係る技術では、背景と被写体とを実写画像として取得し、この実写画像から、予め手作業でシステムに登録した「仮想物体より手前に表示すべき被写体(被写体検出情報としての色情報を有する領域)」を被写体領域として抽出する。そして、被写体領域には仮想物体の描画を禁止する。係る技術により、最前景となるべき被写体が仮想物体で隠されることなく、仮想物体よりも手前にあるように表示され、臨場感の高い複合現実感体験を行うことが可能となる。
【0005】
図1は、現実空間画像、仮想空間画像、現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【0006】
図1において101は現実空間画像で、係る現実空間画像101内には、被写体としての手の領域150が含まれている。102は、現実空間画像101上に重畳させる仮想空間画像である。103は、現実空間画像101上に仮想空間画像102を重畳させた合成画像である。合成画像103を生成する際には、現実空間画像101上において手の領域150に対しては仮想空間画像102は重畳させていないので、結果として合成画像103上には、手の領域150がそのまま描画されている。
【特許文献1】特開2003−296759号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1に開示されている複合現実感体験システムは、体験者の見ている被写体が単色である場合には良好に動作する。しかしながら、被写体が異なる複数の色を有する場合、ある色を有する領域のみしかCGの描画を禁止できないため、被写体の一部分だけがCG内に浮いているように表示されてしまい、体験者の現実感を損なうことがあった。
【0008】
図2は、複数の色を有する被写体を含む現実空間画像、仮想空間画像、そして係る現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【0009】
図2において201は現実空間画像で、係る現実空間画像201内には、被写体としての手の領域150a、腕の領域150bが含まれている。それぞれの領域150a、150bは異なる色を有する領域である。202は、現実空間画像201上に重畳させる仮想空間画像である。203は、現実空間画像201上に仮想空間画像202を重畳させた合成画像である。ここでは、手の領域150aの色を有する領域のみを、仮想空間画像202の重畳対象外としているので、図2に示す如く、本来は仮想空間画像202を重畳させない腕の領域150bには仮想空間画像202が描画されてしまっている。
【0010】
このような技術的背景から、次のようなことな望まれている。即ち、体験者の手や指定した領域を実写画像より抽出した後、抽出した領域に付属する領域(体験者の腕等)を更に抽出する。そして、抽出したそれぞれの領域をマージした被写体領域(手と腕)については仮想空間画像を重畳させないように、現実空間画像上に仮想空間画像を重畳させる。
【0011】
本発明は以上の問題に鑑みてなされたものであり、現実空間画像において、仮想空間画像を重畳させない領域を適切に設定するための技術を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。
【0013】
即ち、複数のフレームからなる現実空間画像を取得する手段と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出手段と、
前記注目フレーム内において、物体の動きベクトルを求める計算手段と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定手段と、
仮想空間画像を生成する生成手段と、
前記仮想空間画像を前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳手段とを備え、
前記特定手段は、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする。
【発明の効果】
【0014】
本発明の構成によれば、現実空間画像において、仮想空間画像を重畳させない領域を適切に設定することができる。
【図面の簡単な説明】
【0015】
【図1】現実空間画像、仮想空間画像、現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【図2】複数の色を有する被写体を含む現実空間画像、仮想空間画像、そして係る現実空間画像上に仮想空間画像を重畳させた合成画像の一例を示す図である。
【図3】本発明の第1の実施形態に係るシステムの機能構成例を示すブロック図である。
【図4】現実空間の画像上に仮想空間の画像が重畳された合成画像を、ユーザがHMDを介して観察している様子を示す図である。
【図5】画像処理装置300が複合現実空間の画像を生成し、生成した複合現実空間の画像をHMD390が有する表示部309に送出する為の一連の処理のフローチャートである。
【図6】ステップS502における処理の詳細を示すフローチャートである。
【図7】ステップS601における処理の詳細を示すフローチャートである。
【図8】ステップS604における処理の詳細を示すフローチャートである。
【図9】キー領域の特徴のみを特徴空間上でクラスタリングした結果の例を示す図である。
【図10】キー領域のクラスとその他のクラスに属する特徴とを示す図である。
【図11】ステップS605における処理の詳細を示すフローチャートである。
【図12】ステップS505における、複合現実空間の画像の生成処理の詳細を示すフローチャートである。
【図13】本発明の第1の実施形態によって生成される複合現実空間の画像の一例を示す図である。
【図14】本発明の第3の実施形態で行う、ステップS502における処理のフローチャートである。
【図15】画像処理装置300に適用可能なコンピュータのハードウェア構成例を示す図である。
【図16】ステップS602において本発明の第4の実施形態で行う処理のフローチャートである。
【図17】画像平面上に射影された位置変化分動きベクトルTvを算出する原理を示す図である。
【発明を実施するための形態】
【0016】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の1つである。
【0017】
[第1の実施形態]
本実施形態では、現実空間画像上に仮想空間画像を重畳させる場合に、現実空間画像内に「手」の領域と「腕」の領域とが含まれている場合には、それぞれの領域をマージして1つの被写体の領域(合成領域)を生成する。そして、係る被写体の領域を常に仮想空間の画像よりも手前に表示するよう、係る重畳の処理を制御する。詳しくは後述するが、被写体の領域は、「手」の領域と「腕」の領域とをマージしたものに限定するものではなく、どのような領域をマージして被写体の領域を形成しても良い。即ち、以下の説明は、被写体の領域が異なる複数の画素値で表示されるようなものであれば、どのような被写体の領域でも良い。
【0018】
図4は、現実空間の画像上に仮想空間の画像が重畳された合成画像を、ユーザがHMDを介して観察している様子を示す図である。
【0019】
図4に示すように、ユーザ401はHMD390を介して、撮像部301が撮像した現実空間の画像上に、センサ404による計測結果に基づいて生成した仮想空間の画像、を重畳させた合成画像(複合現実空間の画像)を観察している。係る観察中に自身の手405や自身の腕406が撮像部301の視野範囲409に入った場合、HMD390に表示される複合現実空間の画像中には手405、腕406が表示される。即ち、前景となる現実空間の画像上の手405、腕406の領域には仮想空間の画像(仮想物体408の一部)は重畳させないようにする。これを実現するために、前景とすべき現実の被写体は「ユーザ401の手405の領域、腕406の領域」、背景とすべき現実の対象物は「壁や鉢植え等の背景現実物体407」、等の領域の区別を行う。
【0020】
図3は、本実施形態に係るシステムの機能構成例を示すブロック図である。
【0021】
図3に示す如く、本実施形態に係るシステムは、HMD390、位置姿勢計測部306、画像処理装置300により構成されている。そして、HMD390、位置姿勢計測部306はそれぞれ、画像処理装置300に接続されている。
【0022】
先ず、HMD390について説明する。
【0023】
HMD390は、頭部装着型表示装置の一例としてのものであり、撮像部301と表示部309とで構成されている。
【0024】
撮像部301は、現実空間の動画像を撮像するビデオカメラであり、撮像した各フレームの画像(現実空間画像)は、画像信号として後段の画像処理装置300に入力される。撮像部301は、ユーザがHMD390を自身の頭部に装着した場合に、このユーザの目の近くに位置するように、HMD390に取り付けられる。更に、取り付ける(撮像部301の)姿勢は、HMD390を頭部に装着したユーザの正面方向(視線方向)に略一致するような姿勢である。これにより、撮像部301は、ユーザの頭部の位置姿勢に応じて見える現実空間の動画像を撮像することができる。従って、以下の説明では、撮像部301を「ユーザの視点」と呼称する場合もある。
【0025】
表示部309は、例えば、液晶画面であり、HMD390を頭部に装着したユーザの眼前に位置するようにHMD390に取り付けられたものである。画像処理装置300からHMD390に対して送出される映像信号に基づいた画像は、係る表示部309に表示される。これにより、HMD390を頭部に装着したユーザの眼前には、画像処理装置300から送信された映像信号に基づいた画像が提示されることになる。
【0026】
本実施形態では、撮像部301と表示部309とはHMD390に内蔵されており、且つ撮像部301と表示部309とは、表示部309の光学系と撮像部301の撮像系とが一致するようにHMD390に内蔵されている。
【0027】
次に、位置姿勢計測部306について説明する。
【0028】
位置姿勢計測部306は、撮像部301の位置姿勢を計測するためのものであり、例えば、位置姿勢計測部306には、磁気センサや光学式センサ等のセンサシステムを適用することができる。例えば、位置姿勢計測部306に磁気センサを適用する場合、位置姿勢計測部306は次のような動作を行うことになる。
【0029】
先ず、位置姿勢計測部306に磁気センサを適用する場合、位置姿勢計測部306は、次のような各部によって構成されることになる。
【0030】
・ 周囲に磁界を発生させるトランスミッタ
・ トランスミッタが発生する磁界中で、自身の位置姿勢に応じた磁界の変化を検知するレシーバ
・ トランスミッタの動作制御を行うと共に、レシーバによる計測結果に基づいて、レシーバのセンサ座標系における位置姿勢情報を生成するセンサコントローラ
トランスミッタは現実空間中の所定の位置に配置する。そしてレシーバは、撮像部301に取り付ける。トランスミッタが磁界を発生させると、レシーバは、自身の位置姿勢(撮像部301の位置姿勢)に応じた磁界の変化を検知し、検知した結果を示す信号をセンサコントローラに送出する。センサコントローラは、係る信号に基づいて、レシーバのセンサ座標系における位置姿勢を示す位置姿勢情報を生成する。ここで、センサ座標系とは、トランスミッタの位置を原点とし、係る原点で互いに直交する3軸をそれぞれx軸、y軸、z軸とする座標系のことである。そして、センサコントローラは、求めた位置姿勢情報を、後段の画像処理装置300に対して送出する。
【0031】
しかし、位置姿勢計測部306にはどのようなセンサシステムを適用しても良く、位置姿勢計測部306に何れのセンサシステムを適用しても、その動作については周知であるので、これについての説明は省略する。また、センサシステムの代わりに、撮像部301が撮像した画像を用いて撮像部301の位置姿勢を求める方法を用いても良く、その場合には、位置姿勢計測部306は省略し、係る方法を実行する演算部を後段の画像処理装置300内に設ければよい。
【0032】
次に、画像処理装置300について説明する。図3に示す如く、画像処理装置300は、撮影画像取込部302、キー領域抽出部303、動きベクトル検出部304、被写体領域抽出部305、画像合成部308、画像生成部307、記憶装置310、により構成されている。以下、画像処理装置300を構成する各部について説明する。
【0033】
撮影画像取込部302は、撮像部301から送出された各フレームの画像の画像信号を受けると、これを順次ディジタルデータに変換し、動きベクトル検出部304、キー領域抽出部303、画像合成部308に送出する。
【0034】
キー領域抽出部303は、撮影画像取込部302から受けたディジタルデータが示す現実空間画像から、キー領域(第1の領域)を抽出する。ここで、キー領域とは、予め定められた画素値を有する画素で構成される領域である。本実施形態では、ユーザの手の色を示す画素値を有する画素で構成される領域をキー領域とする。そして、キー領域抽出部303は、現実空間画像においてキー領域を特定する為のデータであるキー領域データを生成し、生成したキー領域データを、被写体領域抽出部305に送出する。
【0035】
動きベクトル検出部304は、撮影画像取込部302から受けた現実空間画像(現フレーム)と、この現実空間画像よりも1つ前のフレームの現実空間画像とを用いて、現フレームにおける現実空間画像を構成する画素毎に、フレーム間の動きベクトルを求める。そして画素毎に求めた動きベクトルのデータを、被写体領域抽出部305に送出する。
【0036】
動きベクトル検出部304が行う動きベクトルの検出は、既存のブロックマッチング法によるオプティカルフローを算出することで実行することができる。本実施形態では、動きベクトルの検出(計算)をブロックマッチング法で行うものとするが、以下の説明は係る方法を用いることに限定するものではなく、フレーム間の動きベクトルを検出することができる方法であれば如何なる方法を用いても良い。例えば、動きベクトルの検出を勾配法によるオプティカルフローを用いることで行っても良い。
【0037】
被写体領域抽出部305は、キー領域抽出部303から入力されたキー領域データと、動きベクトル検出部304から入力された動きベクトルのデータと、を用いて、現実空間画像中における被写体の領域(被写体領域)を抽出する。係る被写体領域とは上述の通り、ユーザの手の領域と腕の領域とをマージした領域である。そして、抽出した被写体領域を特定するためのデータである被写体領域データを画像合成部308に送出する。
【0038】
画像生成部307は先ず、記憶装置310が保持している仮想空間のデータを用いて、仮想空間を構築する。仮想空間のデータには、仮想空間中に配置する仮想物体についてのデータ、仮想空間中に配置する光源のデータなどが含まれている。仮想物体のデータには、例えば、仮想物体がポリゴンで構成されている場合には、ポリゴンの法線ベクトルデータ、ポリゴンの色データ、ポリゴンを構成する各頂点の座標位置データ等が含まれている。また、仮想物体に対してテクスチャマッピングを施す場合には、テクスチャマップデータも、仮想物体のデータに含まれる。また、光源のデータには、例えば、光源の種類を示すデータ、光源の配置位置姿勢を示すデータ、等が含まれていることになる。
【0039】
そして画像生成部307は、仮想空間の構築後、係る仮想空間中に、位置姿勢計測部306から受けた位置姿勢情報が示す位置姿勢で視点を設定する。そして画像生成部307は、係る視点から見える仮想空間の画像(仮想空間画像)を生成する。なお、所定の位置姿勢を有する視点から見える仮想空間の画像を生成する為の技術については周知であるので、これについての説明は省略する。そして、生成した仮想空間画像のデータを、画像合成部308に送出する。
【0040】
画像合成部308は、撮影画像取込部302から受けたディジタルデータが示す現実空間画像上に、画像生成部307から受けたデータが示す仮想空間画像を重畳させる処理を行う。係る重畳処理では、被写体領域抽出部305から受けた被写体領域データが示す被写体領域には仮想空間画像が重畳されないようにする。そして画像合成部308はこのような重畳処理によって生成された複合現実空間の画像を映像信号に変換してからHMD390が有する表示部309に送出する。これにより、HMD390を頭部に装着したユーザの眼前には、自身の視点の位置姿勢に応じた複合現実空間の画像が提示されることになる。更に係る複合現実空間の画像において被写体領域(自身の手と腕の領域)には仮想空間画像は重畳されていない。
【0041】
なお、本実施形態では、複合現実空間の画像は、HMD390が有する表示部309に送出するものとしているが、複合現実空間の画像の送出先は特に限定するものではない。例えば、画像処理装置300にCRTや液晶画面等により構成されている表示装置を接続し、この表示装置に複合現実空間の画像を出力するようにしても良い。
【0042】
記憶装置310は、上述のように、仮想空間のデータを保持しており、画像生成部307は係るデータを適宜読み出して用いる。更に記憶装置310には、ユーザの手の色を示す画素値のデータ(キーカラーデータ)も記憶保持されている。
【0043】
ここで、キーカラーデータについて説明する。キーカラーデータは、多次元色空間における座標値として記述することができる。一般によく知られている表色系の種類には、RGB、YIQ、YCbCr、YUV、HSV、Lu*v*、La*b*など様々なものがある(日本規格協会 JIS色彩ハンドブック)。
【0044】
キーカラーデータには、被写体の色彩特性に合わせて適当なものを任意に用いてよいが、照明条件の相違による被写体の色彩特性の変化を相殺するために、輝度情報と色相情報とに分離する形式の表色系を用い、色相情報だけを用いることが望ましい。このような表色系の代表的なものとしてはYIQやYCbCrが一般的である。本実施形態では、YCbCr表色系を用いる。従って、記憶装置310に記憶保持されているキーカラーデータとは、ユーザの手の色を予め取得しておき、取得した色をYcbCr表色系のデータとして変換したものである。
【0045】
次に、画像処理装置300が複合現実空間の画像を生成し、生成した複合現実空間の画像をHMD390が有する表示部309に送出する為の一連の処理について、同処理のフローチャートを示す図5を用いて、以下説明する。
【0046】
先ずステップS501では、撮影画像取込部302は、撮像部301から送出された現実空間画像をディジタルデータとして取得する。
【0047】
次に、ステップS502では、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像から、キー領域(第1の領域)を抽出する。そして、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像においてキー領域を特定する為のデータであるキー領域データを生成し、生成したキー領域データを、被写体領域抽出部305に送出する。
【0048】
また動きベクトル検出部304は、ステップS501で撮影画像取込部302が取得した現フレームの現実空間画像と、現フレームより1フレーム前の現実空間画像とを用いて、現フレームの現実空間画像を構成する画素毎にフレーム間の動きベクトルを求める。そして動きベクトル検出部304は、画素毎に求めた動きベクトルのデータを、被写体領域抽出部305に送出する。
【0049】
そして被写体領域抽出部305は、キー領域抽出部303が生成したキー領域データと、動きベクトル検出部304が生成した動きベクトルのデータと、を用いて、ステップS501で撮影画像取込部302が取得した現実空間画像中の被写体領域を抽出する。そして、被写体領域抽出部305は、ステップS501で撮影画像取込部302が取得した現実空間画像中の被写体領域をマスクしたマスク画像のデータを、上記被写体領域データとして生成する。本実施形態では上述の通り、被写体とはユーザの手と腕であるので、現実空間画像から手と腕が存在する領域を抽出し、その領域からマスク画像を生成する。ステップS502における処理の詳細については後述する。
【0050】
次にステップS503では、画像生成部307は、位置姿勢計測部306から位置姿勢情報を取得する。係る位置姿勢情報は上述の通り、HMD390を頭部に装着するユーザの視点の位置姿勢であり、撮像部301の位置姿勢である。
【0051】
次にステップS504では、画像生成部307は、記憶装置310から仮想空間のデータを読み出し、読み出したデータに基づいて仮想空間を構築する。そして画像生成部307は、仮想空間の構築後、係る仮想空間中に、ステップS503において位置姿勢計測部306から取得した位置姿勢情報が示す位置姿勢で視点を設定する。そして画像生成部307は、係る視点から見える仮想空間の画像(仮想空間画像)を生成する。
【0052】
次にステップS505では、画像合成部308は、ステップS501で撮影画像取込部302が取得したディジタルデータが示す現実空間画像上に、ステップS504で画像生成部307が生成した仮想空間画像を重畳させる処理を行う。係る重畳処理では、ステップS502で被写体領域抽出部305が生成した被写体領域データが示す被写体領域には仮想空間画像が重畳されないようにする。ステップS505における処理の詳細については後述する。
【0053】
次にステップS506では、画像合成部308は、ステップS505における重畳処理によって生成した複合現実空間の画像を映像信号に変換してからHMD390が有する表示部309に送出する。
【0054】
次に、画像処理装置300が有する不図示の操作部を介して本処理の終了指示がユーザから入力された、若しくは本処理の終了条件が満たされた場合にはステップS507を介して本処理が終了する。一方、画像処理装置300が有する不図示の操作部を介して本処理の終了指示がユーザから入力されていないし、本処理の終了条件も満たされていない場合には、処理はステップS507を介してステップS501に戻す。そして、次のフレームの複合現実空間の画像を表示部309に送出すべく、ステップS501以降の処理を行う。
【0055】
次に、上記ステップS502における処理の詳細について説明する。図6は、上記ステップS502における処理の詳細を示すフローチャートである。
【0056】
先ずステップS601では、キー領域抽出部303は、記憶装置310からキーカラーデータを読み出す。そして、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有する画素の集合をキー領域として抽出する。
【0057】
具体的には、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有する画素については「1」を割り当てる。一方、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像を構成する各画素のうち、記憶装置310から読み出したキーカラーデータが示す画素値を有していない画素については「0」を割り当てる。即ち、現実空間画像において、手の領域を構成する各画素については「1」を割り当て、それ以外の領域を構成する各画素については「0」を割り当てる。
【0058】
ここで、ステップS601における処理をより詳細に説明する。図7は、上記ステップS601における処理の詳細を示すフローチャートである。なお、図7のフローチャートは、現実空間画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS601では、図7のフローチャートに従った処理を、現実空間画像を構成する各画素について行うことになる。
【0059】
先ずステップS701では、キー領域抽出部303は、ステップS501で撮影画像取込部302が取得した現実空間画像において画像座標(i、j)における画素の画素値(本実施形態ではRGB値で表されているものとする)をYCrCb値に変換する。画像座標(i、j)における画素のR値をR(i、j)、G値をG(i、j)、B値をB(i、j)とする。この場合、ステップS701では、RGB値をYCrCb値に変換する為の関数color_conversion()を用いて、R(i、j)、G(i、j)、B(i、j)を変換し、Y値、Cr値、Cb値を得る。
【0060】
次にステップS702では、ステップS701で求めたY、Cr、Cbのそれぞれの値が表現する色が、記憶装置310から読み出したキーカラーデータが示す色に略同じであるのか否かを判断する。例えば、ステップS701で求めたY、Cr、Cbのそれぞれの値が表現する色が、記憶装置310から読み出したキーカラーデータが示す色に略同じであるのか否かを、関数Key_area_func()を用いて判断する。係る関数Key_area_func()は、略同じであれば1を返し、略同じでなければ0を返す関数である。
【0061】
ここで、関数Key_area_func()による判断方法としては、例えば、Cb、Crで規定されるCbCr平面上における座標値(Cr、Cb)が、キーカラーデータの色分布の領域に属するか否かを判定する。判定結果は、例えば、キーカラーデータの色分布に属するのであれば1、属さないのであれば0と二値で表してもよいが、属する度合いを0から1までの連続値でもって表現するようにしても良い。
【0062】
そして係る関数Key_area_func()が返す値は、配列Key_area(i、j)に代入される。この配列key_area(i、j)は、画像座標(i、j)における画素がキー領域を構成する画素であるか否かを示す値を格納する為のものである。
【0063】
そして、全てのi、jについて図7のフローチャートに従った処理を行うことで、配列Key_areaには、現実空間画像を構成する各画素について「1」若しくは「0」が保持されることになる。係る配列Key_areaが、上記キー領域データとなる。
【0064】
なお、本実施形態では、撮影画像取込部302が取得した現実空間画像を構成する各画素の画素値はRGBで表されているものとしているが、YIQやYUVで表されていても良い。その場合には、ステップS701における処理を省略し、ステップS702において(Cb、Cr)の代わりにそれぞれIQ空間やUV空間における座標値を用いればよい。
【0065】
以上説明したように、キー領域抽出部303は、撮影画像取込部302が取得した現実空間画像を構成する各画素が、キー領域(手)を構成するものであるのか否かを示すキー領域データを生成する。
【0066】
図6に戻って、次にステップS602では、動きベクトル検出部304は、ステップS501で撮影画像取込部302が取得した現フレームの現実空間画像を構成する画素毎にフレーム間の動きベクトルを求める。なお、本実施形態では、動きベクトルは現実空間画像を構成する各画素について求めるものとしたが、これに限定するものではなく、現実空間画像上の複数箇所における動きベクトルを求めれば良い。例えば、キー領域の近辺のみの画素について動きベクトルを求めるようにしても良い。これにより動きベクトルを求める為に要する時間コストを削減することができる。
【0067】
次にステップS603では、被写体領域抽出部305は、ステップS602で求めた各画素についての動きベクトルのうち、キー領域以外(第1の領域以外)の領域(非キー領域、他領域)を構成する各画素について求めた動きベクトルの大きさの平均を求める。そして求めた平均(代表動きベクトルの大きさ)が、予め定めた閾値以上であるか否かを判断する。係る判断の結果、求めた平均が閾値以上であれば処理をステップS604に進め、閾値未満である場合には処理をステップS606に進める。
【0068】
なお、ここで述べている「動きベクトルの大きさ」とは、動きベクトル距離成分を示している。もちろん、動きベクトルの角度成分から「大きさ」を求めても良い。このように、動きベクトルの大きさを求めるための方法については特に限定するものではない。ここで、ステップS603で行う判断処理の意義について説明する。
【0069】
手の領域の動きベクトルと類似度の高い領域は、腕の領域として抽出する。これは手と腕はほとんどの場合において一緒に動作しているので、それぞれの動きベクトルには類似性があるということから実現している。ただし手だけが動いて腕はほとんど動かないという場合も考えられる。例えば、手首のみを回した場合がこれに相当する。この場合、そのまま被写体領域を抽出しようとしても腕は抽出されない。また、手も腕も全く動かずさらには撮像部301も動かない場合は、動きベクトルは算出されないので正常に被写体領域を抽出することができない。
【0070】
そこで本実施形態では、ステップS603において、手が動いていない場合と、手と腕と撮像部301の全部が動いていない場合とを判断する処理を行う。つまり、非キー領域の動きベクトルの大きさがほとんど0の場合は、腕の領域が動いていないか、手と腕と撮像部301の全部が動いていないと判断し、その場合はステップS606の処理を行うことで問題を回避する。ステップS606における処理については後述する。
【0071】
次にステップS604では、被写体領域抽出部305は、ステップS601で抽出したキー領域と、ステップS602で求めた動きベクトルと、に基づいて、キー領域にマージすべき第2の領域を特定する。そして特定した第2の領域とキー領域とをマージした領域を被写体領域として得る。本実施形態では、腕の領域を第2の領域として特定する。そして、特定した腕の領域を、キー領域としての手の領域にマージすることで被写体領域を得る。
【0072】
ここで、ステップS604における処理の詳細について説明する。図8は、上記ステップS604における処理の詳細を示すフローチャートである。
【0073】
先ず、ステップS801では、被写体領域抽出部305は、各動きベクトルを、距離成分と角度成分を特徴としてそれぞれの特徴軸で正規化する。これにより各特徴の単位の違いにより値の重み付けがなされてしまうことを回避する(一般的な正規化)。例えば、特徴のパターン相互の距離を最小にすることで正規化を行う。
【0074】
次に、ステップS802では、被写体領域抽出部305は、ステップS801で正規化された動きベクトルのうち、キー領域の特徴のみを特徴空間上でクラスタリングする。つまり、図9に示すようにベクトル距離成分軸(縦軸)と角度成分軸(横軸)とで規定される特徴空間上で、キー領域の特徴をクラスタリングする(特徴パターンの学習)。図9は、キー領域の特徴のみを特徴空間上でクラスタリングした結果の例を示す図である。
【0075】
ここで必要に応じてクラスタリングされたキー領域の特徴のうちノイズ成分を除外してもよい。具体的には、特徴の数の少ないクラスや距離成分の小さいクラスなどはノイズとして除外する。
【0076】
また、キー領域の特徴をクラスタリングするとしたが、クラスリングする特徴をキー領域のエッジ領域のみの特徴とすることでノイズを除外していもよい。エッジ領域の抽出は既存のラベリングアルゴリズムで実現できる。
【0077】
次に、ステップS803では、被写体領域抽出部305は、正規化した全ての動きベクトルの特徴のうち、ステップS802でクラスタリングされたキー領域のクラスに含まれるものとして判断された特徴を、このクラスに含める処理を行う。即ち、図10に示すように、動きベクトルの特徴空間においてキー領域のクラスに属する特徴は被写体領域クラスであるとみなすことで、被写体領域クラスとそれ以外を識別する。これから、被写体領域は、キーカラーデータを有する領域に加え、キー領域と類似した動きベクトル成分を有する領域も含むこととなる。図10は、キー領域のクラスとその他のクラスに属する特徴とを示す図である。
【0078】
係る処理は、例えば以下の式に基づいて行われる。
【0079】
target_area( i, j ) = discriminant_func( whole_vec( i, j ) )
ここで(i,j)は現実空間画像における画素座標、target_areaは被写体領域である。また、discriminant_func()はキー領域のクラスの動きベクトルの特徴によって学習されている被写体領域識別関数、whole_vecは現実空間画像の全体の動きベクトルである。なお、上述したように、動きベクトルは現実空間画像を構成する全ての画素について求めることに限定するものではないので、ステップS803では、全ての画素について行うのではなく、動きベクトルを求めた全ての画素について行うものである。
【0080】
次に、ステップS804では、被写体領域抽出部305は、キー領域と類似した動きベクトル成分を有する画素としてステップS803で特定されたそれぞれの画素についてラベリング処理を行う。以下ではラベリングされた画素で構成される領域を追加領域と呼称する。例えば、腕の領域を構成する画素のみをラベリングする。またここでラベリングされる画素にはユーザの手、腕以外の領域を構成する画素が含まれている可能性がある。本来それらの画素は、背景となる領域を構成する画素である。例えばそれはユーザ以外の人間の手や腕かもしれない。
【0081】
次に、ステップS805では、被写体領域抽出部305は、ステップS804でラベリングされた追加領域が被写体領域として適切か否かを判定する。ステップS805における判定で用いる判定基準は2つある。
【0082】
1つ目の基準は、追加領域がキー領域と連結しているかどうか(連結関係)である。つまり、被写体となるべき腕はもちろん手とつながっているので、追加領域がキー領域と連結しているかを判定し、連結していればこの追加領域は被写体領域であるとする。そしてそうでないものは被写体領域から除外する。
【0083】
2つ目の基準は、追加領域が現実空間画像の端の領域に属しているかどうかである。つまり、被写体領域となるべきである腕はもちろんユーザとつながっているので、ユーザは自身の手を見ている際は必ず手につながった腕がユーザの視界の端までつながっているはずである。従って、ユーザが見る画像の端の領域に腕の領域が存在するはずである。これらの理由から、追加領域が現実空間画像の端の領域に属しているか否かを判定し、属していればこの追加領域は被写体領域であるとする。そしてそうでないものは被写体領域から除外する。
【0084】
これらの処理によって、背景領域を被写体領域と誤認識することが軽減される。
【0085】
ここで2つ目の基準をより厳しくするために、追加領域が現実空間画像の左右か下の端の領域に属しているかを判断するようにしても良い。
【0086】
ステップS806では、ステップS805で被写体領域として認識された追加領域を、キー領域にマージすることで、被写体領域を形成する。
【0087】
被写体領域はつまり下記のようになる。
【0088】
被写体領域 = キー領域 + 追加領域
ただし、追加領域は、ステップS805で被写体領域として適切であると判定された領域である。
【0089】
そして、図6のステップS605にリターンする。
【0090】
ここで、以上の説明では、動きベクトルの距離成分と角度成分とを特徴として用いたが、距離成分のみを特徴として用いても良い。即ち、動きベクトルの特徴として用いるものは特に限定するものではなく、動きベクトル間の類似性を求めることができるのであれば、何れの特徴を用いても良い。
【0091】
図6に戻ってステップS605では、被写体領域抽出部305は、ステップS501で撮影画像取込部302が取得した現実空間画像からステップS604で抽出した被写体領域の領域をマスクしたマスク画像のデータを、上記被写体領域データとして生成する。
【0092】
ここで、ステップS605における処理の詳細について説明する。図11は、上記ステップS605における処理の詳細を示すフローチャートである。なお、図11のフローチャートは、現実空間画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS605では、図11のフローチャートに従った処理を、現実空間画像を構成する各画素について行うことになる。
【0093】
ステップS1101では、被写体領域抽出部305は、画像座標(i、j)における画素が被写体領域として上記ステップS805で認識されたのであれば、配列Key_area(i、j)に「1」を書き込む。係る動作は、関数mask_func()を実行することでなされる。これにより、配列Key_area(i、j)は、画像座標(i、j)における画素が被写体領域を構成する画素であるか否かを示す値を格納する為の2次元配列となる。
【0094】
そして、全てのi、jについて図11のフローチャートに従った処理を行うことで、配列Key_areaには、現実空間画像を構成する各画素について「1」若しくは「0」が保持されることになる。係る配列Key_areaが、上記被写体領域データとなる。
【0095】
なお、本実施形態では生成された被写体領域データが示すマスク画像はマスク領域内にノイズを含む場合がある。この場合は既存の凸閉方処理を行う。
【0096】
一方、図6に戻って、ステップS606では、被写体領域抽出部305は、1フレーム前に生成した被写体領域データを、現フレームでも使用するものとして設定する。これは前述したように、動きベクトルから被写体領域を正常に抽出できない場合は前回生成したマスク画像で代用する処理である。しかし、ステップS606では、キー領域部分は常に更新し、追加領域のみ更新されていないマスク画像を示す被写体領域データを出力してもよい。キー領域部分を常に更新するということはキーカラーデータに基づいて領域を抽出するということである。従って係る処理を行えば、キー領域の形状(手の形状)は必ずキーカラーデータによって正確に抽出されることが保障される。
【0097】
そして、ステップS605,S606の何れの処理の後も、図5のステップS503にリターンする。
【0098】
次に、図5のステップS505における、複合現実空間の画像の生成処理の詳細について説明する。図12は、上記ステップS505における、複合現実空間の画像の生成処理の詳細を示すフローチャートである。なお、図12のフローチャートは、複合現実空間の画像中の画像座標(i,j)における画素について行う処理のフローチャートである。従って、実際にステップS505では、図12のフローチャートに従った処理を、複合現実空間の画像を構成する各画素について行うことになる。
【0099】
先ずステップS1201では、画像合成部308は、次のような処理を行う。即ち、ステップS501で撮影画像取込部302が取得したディジタルデータが示す現実空間画像において画像座標(i,j)の画素real(i,j)を、画像処理装置300内のフレームメモリbuffer(i,j)に転送する。
【0100】
次にステップS1202では、上記ステップS502で生成した被写体領域データが示すマスク画像のうち画像座標(i、j)に対応するデータKey_area(i,j)を画像処理装置300内のステンシルバッファstencil(i,j)に転送する。
【0101】
次にステップS1203では、画像合成部308は、stencil(i,j)=0である場合には、上記ステップS504で生成した仮想空間画像において画像座標(i,j)の画素CGI(i,j)を、フレームメモリbuffer(i,j)に上書きする。一方、画像合成部308は、stencil(i,j)=1である場合には、フレームメモリbuffer(i,j)に対しては何も処理しない。即ち、被写体領域については、仮想空間画像の重畳対象外とする。
【0102】
そして、全てのi、jについて図12のフローチャートに従った処理を行うことで、フレームメモリbufferには、複合現実空間の画像が生成されることになる。そして、ステップS506では、この複合現実空間の画像を映像信号としてHMD390が有する表示部309に送出する。
【0103】
以上の説明により本実施形態によれば、現実空間画像上に仮想空間画像を重畳させる際、現実空間画像中に「手」と「腕」とが被写体として含まれている場合は、この被写体は常に仮想空間画像よりも手前に表示されるように、重畳処理を制御することができる。
【0104】
図13は、本実施形態によって生成される複合現実空間の画像の一例を示す図である。図13に示した複合現実空間の画像1301は、現実空間画像、仮想空間画像がそれぞれ図2に示した現実空間画像201、仮想空間画像202である場合に生成されるものである。図13に示す如く、手の領域150aはもちろんのこと、手の領域150aとは異なる画素値を有する腕の領域150bさえも、仮想空間画像202の手前に表示することができる。
【0105】
[第2の実施形態]
第1の実施形態の冒頭でも述べたように、被写体の領域は、「手」の領域と「腕」の領域とをマージしたものに限定するものではなく、どのような領域をマージして被写体の領域を形成しても良い。即ち、以下の説明は、被写体の領域が異なる複数の画素値で表示されるようなものであれば、どのような被写体の領域でも良い。
【0106】
例えば、ユーザが手で把持している現実物体を追加領域として判断して被写体領域を決定しても良い。これにより、ユーザの手、腕に加えて、手で把持している現実物体をも、仮想空間画像の手前に表示することができる。
【0107】
この場合、第1の実施形態において、ステップS805における処理を以下のように変更すれば良い。
【0108】
第1の実施形態では、ステップS805において2つの判断基準を設けていた。本実施形態ではそのうちの1つの判断基準を次のような判断基準に変更する。
【0109】
具体的には、追加領域が現実空間画像の端の領域に属しているかどうかの判定をなくす。これは、手で把持される現実物体が必ずしも現実空間画像の端にかかっているわけではないためである。
【0110】
本実施形態ではその代わりの判定処理として、キー領域と追加領域(ステップS805の判定済みの領域)とをマージすることで得られる被写体領域が現実空間画像の端にかかっているかどうかを基準として判定を行う。
【0111】
これより手に把持されていない領域の誤認識を回避する。
【0112】
[第3の実施形態]
第1,2の実施形態では、キー領域と追加領域とを毎フレーム毎に算出し、それらに基づいて被写体領域を決定した。即ち、キー領域と追加領域とに基づいて被写体領域を求める処理をフレーム毎に行っていた。本実施形態では、初期領域を指定するためのみキー領域と追加領域とを算出し、その後の被写体領域の更新は自動輪郭抽出処理によって行う。
【0113】
本実施形態では、初期登録された被写体領域を安定して毎回更新することが可能となる。ここでいう安定とは、例えば新しくキー領域に含まれる現実物体が現れても変わらない領域を抽出可能ということである。ここで、本実施形態では、第1、2の実施形態とステップS502における処理のみが異なる。
【0114】
図14は、本実施形態で行う、ステップS502における処理のフローチャートである。図14に示すフローチャートは、図6に示したフローチャートからステップS603における処理と、ステップS606における処理とが削除されている。そして代わりに、ステップS604とステップS605との間に、ステップS1401の動的輪郭対象登録の処理と、ステップS1402の動的輪郭抽出の処理が追加されている。
【0115】
ステップS1401では、被写体領域抽出部305は、ステップS604で抽出された被写体領域を動的輪郭抽出の対象として登録する。
【0116】
次にステップS1402では、被写体領域抽出部305は、ステップS1401で登録された被写体領域の動的輪郭抽出を行う。動的輪郭抽出はスネークなどの既存のアルゴリズムを用いればよい。動的輪郭抽出は既存の技術であるので説明は省略する。
【0117】
ステップS605では、被写体領域抽出部305は、ステップS1401で抽出された被写体領域に基づきマスク画像(被写体領域データ)を生成して出力する。
【0118】
[第4の実施形態]
上記実施形態では、撮像部301が撮像した現実空間画像から算出される動きベクトルのみから被写体領域を特定した。しかし、被写体領域の特定は係る方法に限定するものではない。例えば、現実空間画像から算出される動きベクトルを、撮像部301の位置および姿勢の変化から生じる動きベクトルを用いて補正することで得られる動きベクトルから被写体領域を特定してもよい。
【0119】
撮像部301が移動または回転する場合、現実空間画像のみから算出される動きベクトルでは、被写体領域を抽出する際に誤差が生じやすい。なぜならば、現実空間画像のみから算出される動きベクトルは、被写体の動きベクトルだけではなく撮像部301の動きベクトルをも含んでいるからである。例えば、被写体の動きとは逆の方向に撮像部301が動いた場合、被写体の動きベクトルのいくつかを打ち消してしまう可能性がある。
【0120】
そこで本実施形態では、現実空間画像から算出される動きベクトルから、撮像部301の位置および姿勢変化から生じる動きベクトルの影響を差し引くことで、被写体の動きベクトルを算出する。そして、その算出結果としての動きベクトルから被写体領域を特定する。この場合、第1の実施形態においてステップS502における処理を以下のように変更すればよい。
【0121】
第1の実施形態では、ステップS502内の、更にステップS602では、現実空間画像からのみ動きベクトルを算出するとした。本実施形態では、動きベクトルの算出方法を下記のように変更する。
【0122】
図16は、ステップS602において本実施形態で行う処理のフローチャートである。本実施形態ではステップS602では、撮像部301(撮像装置)の位置および姿勢の変化に基づいて、現実空間画像からのみ動きベクトルを補正する。
【0123】
ステップS1501では、動きベクトル検出部304は、現実空間画像から動きベクトルを算出する。ステップS1501における処理は、第1の実施形態で説明したステップS602における処理と同じである。
【0124】
次に、ステップS1502では、動きベクトル検出部304は、撮像部301の姿勢変化による動きベクトル(姿勢変化分動きベクトル)の情報を用いて、ステップS1501で算出された動きベクトルを補正する。
【0125】
より詳しくは、先ず、動きベクトル検出部304は、位置姿勢計測部306から撮像部301の姿勢情報を得る。ここで、動きベクトル検出部304は、予め前フレームにおける撮像部301の位置および姿勢情報を保持しているとする。動きベクトル検出部304は、前フレームにおける撮像部301の姿勢情報と現フレームにおける撮像部301に姿勢情報とから、姿勢の変化量を算出する。この姿勢変化量から、姿勢変化によって生じる動きベクトル(姿勢変化分動きベクトル)を求める。なお、動きベクトルの算出技術は周知の技術であるので、これについての詳細な説明は省略する。なお、ここで姿勢変化とは、撮像部301のレンズ中心を軸として光軸が回転することをいう。
【0126】
次に、算出された姿勢変化分動きベクトルを、撮像部301の画像平面に射影することで、画像上での動きベクトルとして変換する。
【0127】
そして動きベクトル検出部304は、画像平面に射影された姿勢変化分動きベクトルを用いて、ステップS1501で算出された動きベクトルを補正する。係る補正は以下の式に基づいて行う。
【0128】
M’=M−Rv・I (式1)
ここで、M’は姿勢変化分動きベクトルを現実空間画像内の動きベクトルから差し引いた動きベクトルを表す行列、Mは現実空間画像から算出された動きベクトルを表す行列である。また、Rvは画像平面上に射影された姿勢変化ベクトル、Iは単位行列(行列Mと大きさが同じ行列)である。
【0129】
このように、現実空間画像から算出された動きベクトルから姿勢変化による動きベクトルを減じる。
【0130】
図16に戻って、次に、ステップS1503では、動きベクトル検出部304は、撮像部301の位置変化による動きベクトル(位置変化分動きベクトル)の情報を用いて、ステップS1501で算出された動きベクトルを補正する。
【0131】
より詳しくは、先ず、動きベクトル検出部304は、位置姿勢計測部306から撮像部301の位置情報を得る。動きベクトル検出部304は、前フレームにおける撮像部301の位置情報と現フレームにおける撮像部301の位置情報とから、位置の変化量を算出する。この位置変化量から、位置変化によって生じる動きベクトルを求める。なお位置変化とは、撮像部301のレンズ中心を軸として並進移動した場合の位置変化のことをいう。
【0132】
次に、位置変化分動きベクトルを、撮像部301の画像平面に射影することで、画像上での動きベクトルとして変換する。ここで、位置変化分動きベクトルを画像平面に射影する際は、位置変化分動きベクトルの画像平面射影とは異なり、被写体までの奥行き情報を考慮する必要がある。なぜならば、画像平面上に射影される位置変化分動きベクトルは、被写体までの奥行き距離に応じて異なるからである。具体的には、被写体までの距離が大きくなるにつれて、位置変化分動きベクトルの大きさは大きくなる。
【0133】
従って、動きベクトル検出部304は、画像平面上に射影される位置変化分動きベクトルを算出するために被写体までの奥行き距離を測定する。
【0134】
本実施形態では、被写体はステレオビデオカメラから成るHMD390によって撮像されているので、ステレオマッチング法により奥行き距離を測定する。ステレオマッチング法は周知の技術であるので、これについての説明は省略する。
【0135】
本実施形態では、奥行き距離の測定をステレオマッチング法によって行うとしているが、係る方法に限定するものではない。例えば、奥行き距離の測定を赤外式距離測定カメラを用いて行っても良い。即ち、距離を測定できる方法であればどのような方法を用いても良い。また、位置変化分動きベクトルを算出するために、ユーザが奥行き距離を設定するようにしても良い。
【0136】
奥行き距離が測定されると、動きベクトル検出部304は、画像平面上に射影される位置変化分動きベクトルの算出を以下の式に基づいて行う。
【0137】
Tv=f・t/z (式2)
ここで、Tvは画像平面上に射影された位置変化分動きベクトル、fは撮像部301のレンズから結像面までの距離である。また、tは撮像部301の位置変化によって生じた動きベクトル、zは被写体までの奥行き距離である。
【0138】
図17は、画像平面上に射影された位置変化分動きベクトルTvを算出する原理を示す図である。図17では、現在よりも一つ前のフレームから現在のフレームに変わった際に撮像部301が並進移動した(tだけ並進移動した)例を示している(被写体は固定とする)。また、図17では、画像面を規定するXY座標軸のうち、X軸方向に撮像部301が並進した場合を示している。ここでは説明を簡単にするため、X軸方向のみの移動を想定しているが、ここで説明する方法の原理は、移動方向がY軸成分を有する場合にも適用可能であることは言うまでもない。
【0139】
図17において、O1は現在よりも一つ前のフレーム(前フレーム)おける撮像部301のレンズ中心を示す。O2は現在のフレーム(現フレーム)における撮像部301のレンズ中心を示す。P(x、z)は、撮像部301で撮像された被写体の一点(計測点)を示す。xはx座標の値、zはz座標の値を示す。ここで表現されている座標系は、前フレームにおける撮像部301のレンズ中心を原点とした現実空間の座標系である。つまり、zは撮像部301からの奥行き値である。
【0140】
X1は、前フレームにおいて計測点を画像平面上に投影したときのx座標である。X2は現フレームおいて計測点を画像平面上に投影したときのx座標である。つまり、X2-X1が、画像平面上での撮像部301の動きベクトルといえる。その他は(式2)と同じである。
【0141】
図17から分かるように、位置変化分動きベクトルtが与えられると、撮像部301のレンズから結像面までの距離fと被写体までの距離zとの相似関係から、画像平面上の位置変化分動きベクトルTvを算出することが可能である。
【0142】
そして動きベクトル検出部304は、画像平面に射影された位置変化分動きベクトルを用いて、ステップS1501で算出された動きベクトルを補正する。係る補正は下記の式に基づいて行う。
【0143】
M”=M’−Tv・I
M”は、位置変化分動きベクトルを動きベクトルM’から差し引いた動きベクトルを表す行列、M’はステップS1502の処理において補正された動きベクトルを表す行列である。また、Tvは、画像平面上に射影された位置変化ベクトル、Iは単位行列(行列Mと大きさが同じ行列)である。このように、現実空間画像から算出された動きベクトルから、撮像部301の位置変化による動きベクトルを減じる。
【0144】
最終的に、撮像部301が撮像した現実空間画像から算出された動きベクトルから、撮像部301の位置及び姿勢によって生じた動きベクトルを減ずることとなる。従って、結果的に撮像部301による動きベクトルを排除した被写体の動きベクトルを算出することとなる。
【0145】
本実施形態では、このようにして撮像部301の動きの影響を補正した動きベクトルに基づいて、被写体領域の特定を行う。ここで、本実施形態では、位置及び姿勢の両方の変化によって生じる動きベクトル分を補正するとした。しかし、動きベクトルの補正を、撮像部301の姿勢変化のみを考慮して行ってもよいし、移動変化のみを考慮して行っても良い。
【0146】
また、本実施形態では、撮像部301の動きによって生じる動きベクトルを、位置姿勢計測部306から得られる位置及び姿勢情報を用いて求めた。しかし、係る動きベクトルは他の方法でもって求めても良い。即ち、必ずしも、磁気センサや光学式センサなどのセンサシステムから得られる位置及び姿勢情報に基づいて動きベクトルを求める必要はない。例えば、撮像部301が撮像した画像を用いて、撮像部301の動きによって生じる動きベクトルを求めるようにしても良い。
【0147】
例えば、撮像部301が撮像した画面全体の動きベクトルの平均を、撮像部301の動きにより生じた動きベクトルと仮定するようにしても良い。また、撮像した画像を領域分割することで背景領域が分かっている場合には、背景領域に生じている動きベクトルを、撮像部301の動きにより生じた動きベクトルと仮定するようにしても良い。
【0148】
[第5の実施形態]
上記各実施形態では、図3に示した画像処理装置300を構成する各部はハードウェアで構成されているものとして説明したが、記憶装置310、撮影画像取込部302を除く他の各部はソフトウェアプログラムの形態で実現させても良い。その場合、記憶装置310、撮影画像取込部302を有するコンピュータに、係るソフトウェアプログラムをインストールし、係るソフトウェアプログラムを、このコンピュータが有するCPUが実行することで、各部の動作を実現させることになる。即ち、画像処理装置300には、一般のPC(パーソナルコンピュータ)などのコンピュータを適用させることができる。
【0149】
図15は、画像処理装置300に適用可能なコンピュータのハードウェア構成例を示す図である。
【0150】
CPU1501は、RAM1502やROM1503に格納されているプログラムやデータを用いて本コンピュータ全体の制御を行うと共に、画像処理装置300が行うものとして上述した各処理を実行する。
【0151】
RAM1502は、外部記憶装置1506からロードされたプログラムやデータ、I/F(インターフェース)1507を介して外部から受信した各種のデータ等を一時的に記憶するためのエリアを有する。更にRAM1502は、CPU1501が各種の処理を実行する際に用いるワークエリアも有する。更に、RAM1502は、上記フレームメモリ、ステンシルバッファとしても機能する。即ち、RAM1502は、各種のエリアを適宜提供することができる。
【0152】
ROM1503は、本コンピュータの設定データや、ブートプログラムなどを格納する。
【0153】
操作部1504は、キーボードやマウスなどにより構成されており、本コンピュータの操作者が操作することで、各種の指示をCPU1501に対して入力することができる。例えば、処理の終了指示等はこの操作部1504を用いて入力することができる。
【0154】
表示部1505は、CRTや液晶画面などにより構成されており、CPU1501による処理結果を画像や文字で表示することができる。例えば、画像処理装置300が行うものとして上述した各処理を本コンピュータ(CPU1501)が実行することで生成された複合現実空間の画像を表示することができる。
【0155】
外部記憶装置1506は、ハードディスクドライブ装置に代表される大容量情報記憶装置である。外部記憶装置1506には、OS(オペレーティングシステム)や、画像処理装置300が行うものとして上述した各処理をCPU1501に実行させるためのプログラムやデータなどが保存されている。係るプログラムには、動きベクトル検出部304、キー領域抽出部303、被写体領域抽出部305、画像合成部308、画像生成部307のそれぞれの機能をCPU1501に実行させるためのプログラムが含まれている。また、外部記憶装置1506は記憶装置310も兼ねている。外部記憶装置1506に保存されているプログラムやデータは、CPU1501による制御に従って適宜RAM1502にロードされる。そしてCPU1501はこのロードされたプログラムやデータを用いて処理を実行するので、本コンピュータは、画像処理装置300が行うものとして上述した各処理(上述の各フローチャートに従った処理)を実行することになる。
【0156】
I/F1507は、上述のHMD390や位置姿勢計測部306を本コンピュータに接続する為のもので、HMD390、位置姿勢計測部306とはこのI/F1507を介して信号の送受信を行う。I/F1507は、撮影画像取込部302も兼ねている。
【0157】
1508は上述の各部を繋ぐバスである。
【0158】
なお、画像処理装置300に適用可能なコンピュータのハードウェア構成については図15に示した構成に限定しない。例えば、本コンピュータにグラフィックスカード(ボード)を取り付け、係るグラフィックスカードが仮想空間画像の生成や、複合現実空間の画像の生成を行うようにしても良い。
【0159】
[その他の実施形態]
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体(または記憶媒体)を、システムあるいは装置に供給する。係る記憶媒体は言うまでもなく、コンピュータ読み取り可能な記憶媒体である。そして、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【0160】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0161】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0162】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【特許請求の範囲】
【請求項1】
複数のフレームからなる現実空間画像を取得する手段と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出手段と、
前記注目フレーム内において、物体の動きベクトルを求める計算手段と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定手段と、
仮想空間画像を生成する生成手段と、
前記仮想空間画像を前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳手段とを備え、
前記特定手段は、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする画像処理装置。
【請求項2】
前記特定手段は、
前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定し、前記注目フレームにおいて抽出された第1の領域を、前記注目フレームの第1の領域として特定すること特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記特定手段は、
前記第1の領域以外の他領域について前記計算手段が求めたそれぞれの動きベクトルのうち、前記第1の領域について前記計算手段が求めた動きベクトルの特徴と類似している動きベクトルに対応する領域を、前記第2の領域として特定する第1の手段を有することを特徴とする請求項1又は2に記載の画像処理装置。
【請求項4】
前記特定手段は、
前記第1の領域以外の他領域について前記計算手段が求めたそれぞれの動きベクトルのうち、前記第1の領域について前記計算手段が求めた動きベクトルの特徴と類似している動きベクトルに対応する領域を、前記現実空間画像中における位置および前記第1の領域との連結関係に基づいて、前記第2の領域として特定する第1の手段を有することを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
【請求項5】
前記特定手段は、前記他領域について前記計算手段が求めたそれぞれの動きベクトルに基づいて決まる代表動きベクトルの大きさが予め定められた大きさ以上であるか否かを判断し、前記代表動きベクトルの大きさが予め定められた大きさ以上である領域に対して前記第1の手段を適用することを特徴とする請求項3又は4に記載の画像処理装置。
【請求項6】
前記計算手段は、
撮像装置の姿勢変化量を算出する手段と、
前記姿勢変化量に基づき、前記撮像装置の姿勢変化によって生じる動きベクトルを姿勢
変化分動きベクトルとして計算する手段と、
前記姿勢変化分動きベクトルに基づいて、前記動きベクトルを補正する手段と
を備えることを特徴とする請求項1乃至5の何れか1項に記載の画像処理装置。
【請求項7】
前記計算手段は、
現実空間の奥行き情報を算出する手段と、
撮像装置の位置変化量を算出する手段と、
前記奥行き情報と前記位置変化量に基づいて、前記撮像装置の位置変化によって生じる動きベクトルを、位置変化分動きベクトルとして計算する手段と、
前記位置変化分動きベクトルに基づいて、前記動きベクトルを補正する手段と
を備えることを特徴とする請求項1乃至6の何れか1項に記載の画像処理装置。
【請求項8】
前記生成手段は、
前記現実空間画像を撮像した撮像装置の位置姿勢を示す位置姿勢情報に基づいて仮想空間画像を生成することを特徴とする請求項1乃至7の何れか1項に記載の画像処理装置。
【請求項9】
前記抽出手段は、前記現実空間画像において手の色を示す画素値を有する画素で構成される領域を前記第1の領域として抽出することを特徴とする請求項1乃至8のいずれか1項に記載の画像処理装置。
【請求項10】
前記計算手段は、前記現実空間画像を構成する各画素について動きベクトルを求めることを特徴とする請求項1乃至9のいずれか1項に記載の画像処理装置。
【請求項11】
更に、前記重畳手段による重畳処理によって得られる合成画像を出力する手段を備えることを特徴とする請求項1乃至10の何れか1項に記載の画像処理装置。
【請求項12】
複数のフレームからなる現実空間画像を取得する工程と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出工程と、
前記注目フレーム内において、物体の動きベクトルを求める計算工程と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定工程と、
仮想空間画像を生成する生成工程と、
前記仮想空間画像を、前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳工程とを備え、
前記特定工程において、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする画像処理方法。
【請求項13】
コンピュータに請求項12に記載の画像処理方法を実行させるためのプログラム。
【請求項14】
請求項13に記載のプログラムを格納した、コンピュータ読み取り可能な記憶媒体。
【請求項1】
複数のフレームからなる現実空間画像を取得する手段と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出手段と、
前記注目フレーム内において、物体の動きベクトルを求める計算手段と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定手段と、
仮想空間画像を生成する生成手段と、
前記仮想空間画像を前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳手段とを備え、
前記特定手段は、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする画像処理装置。
【請求項2】
前記特定手段は、
前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定し、前記注目フレームにおいて抽出された第1の領域を、前記注目フレームの第1の領域として特定すること特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記特定手段は、
前記第1の領域以外の他領域について前記計算手段が求めたそれぞれの動きベクトルのうち、前記第1の領域について前記計算手段が求めた動きベクトルの特徴と類似している動きベクトルに対応する領域を、前記第2の領域として特定する第1の手段を有することを特徴とする請求項1又は2に記載の画像処理装置。
【請求項4】
前記特定手段は、
前記第1の領域以外の他領域について前記計算手段が求めたそれぞれの動きベクトルのうち、前記第1の領域について前記計算手段が求めた動きベクトルの特徴と類似している動きベクトルに対応する領域を、前記現実空間画像中における位置および前記第1の領域との連結関係に基づいて、前記第2の領域として特定する第1の手段を有することを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
【請求項5】
前記特定手段は、前記他領域について前記計算手段が求めたそれぞれの動きベクトルに基づいて決まる代表動きベクトルの大きさが予め定められた大きさ以上であるか否かを判断し、前記代表動きベクトルの大きさが予め定められた大きさ以上である領域に対して前記第1の手段を適用することを特徴とする請求項3又は4に記載の画像処理装置。
【請求項6】
前記計算手段は、
撮像装置の姿勢変化量を算出する手段と、
前記姿勢変化量に基づき、前記撮像装置の姿勢変化によって生じる動きベクトルを姿勢
変化分動きベクトルとして計算する手段と、
前記姿勢変化分動きベクトルに基づいて、前記動きベクトルを補正する手段と
を備えることを特徴とする請求項1乃至5の何れか1項に記載の画像処理装置。
【請求項7】
前記計算手段は、
現実空間の奥行き情報を算出する手段と、
撮像装置の位置変化量を算出する手段と、
前記奥行き情報と前記位置変化量に基づいて、前記撮像装置の位置変化によって生じる動きベクトルを、位置変化分動きベクトルとして計算する手段と、
前記位置変化分動きベクトルに基づいて、前記動きベクトルを補正する手段と
を備えることを特徴とする請求項1乃至6の何れか1項に記載の画像処理装置。
【請求項8】
前記生成手段は、
前記現実空間画像を撮像した撮像装置の位置姿勢を示す位置姿勢情報に基づいて仮想空間画像を生成することを特徴とする請求項1乃至7の何れか1項に記載の画像処理装置。
【請求項9】
前記抽出手段は、前記現実空間画像において手の色を示す画素値を有する画素で構成される領域を前記第1の領域として抽出することを特徴とする請求項1乃至8のいずれか1項に記載の画像処理装置。
【請求項10】
前記計算手段は、前記現実空間画像を構成する各画素について動きベクトルを求めることを特徴とする請求項1乃至9のいずれか1項に記載の画像処理装置。
【請求項11】
更に、前記重畳手段による重畳処理によって得られる合成画像を出力する手段を備えることを特徴とする請求項1乃至10の何れか1項に記載の画像処理装置。
【請求項12】
複数のフレームからなる現実空間画像を取得する工程と、
前記現実空間画像の注目フレームにおいて、予め定められた画素値を有する画素で構成される第1の領域を抽出する抽出工程と、
前記注目フレーム内において、物体の動きベクトルを求める計算工程と、
前記動きベクトルが所定の条件を満たす場合に、前記動きベクトルを用いて、前記注目フレーム内の第1の領域に関連した第2の領域を特定する特定工程と、
仮想空間画像を生成する生成工程と、
前記仮想空間画像を、前記第1の領域と前記第2の領域以外の領域に、前記現実空間画像上に重畳させる重畳工程とを備え、
前記特定工程において、前記動きベクトルが、前記所定の条件を満たさない場合には、以前のフレームで第2の領域として特定された領域を前記注目フレームの第2の領域として特定することを特徴とする画像処理方法。
【請求項13】
コンピュータに請求項12に記載の画像処理方法を実行させるためのプログラム。
【請求項14】
請求項13に記載のプログラムを格納した、コンピュータ読み取り可能な記憶媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2013−77307(P2013−77307A)
【公開日】平成25年4月25日(2013.4.25)
【国際特許分類】
【出願番号】特願2012−260297(P2012−260297)
【出願日】平成24年11月28日(2012.11.28)
【分割の表示】特願2008−186501(P2008−186501)の分割
【原出願日】平成20年7月17日(2008.7.17)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年4月25日(2013.4.25)
【国際特許分類】
【出願日】平成24年11月28日(2012.11.28)
【分割の表示】特願2008−186501(P2008−186501)の分割
【原出願日】平成20年7月17日(2008.7.17)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]