(57)【要約】立体視画像形成装置１は、二次元画像データのグレースケール値に基づいて奥行き値（Ｚ値）を算出する。そして、このＺ値に対し、逆転判定処理、平滑化処理、分布補正処理、および局所補正処理等を施す。そして、求めたＺ値に基づいて視差を決定し、この視差に応じた分だけ各画素を移動させる処理を行うことにより、立体視画像データを生成する。
2004019621.tif 000002
【特許請求の範囲】
【請求項１】
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出ステップと、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正ステップと、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成ステップと
を有することを特徴とする立体視画像作成方法。
【請求項２】
前記算出ステップにおいて、画像データの色成分の各々に所定の係数を乗じることにより奥行き値を算出することを特徴とする請求項１に記載の立体視画像作成方法。
【請求項３】
前記所定の係数は、人間の網膜に存在する赤錐体、緑錐体、および青錐体の数の割合に等しいことを特徴とする請求項２に記載の立体視画像作成方法。
【請求項４】
前記修正ステップにおいて、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値よりも、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値の方が大きくなるように、前記各画素の奥行き値を補正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項５】
前記修正ステップにおいて、一の領域に含まれる画素の奥行き値と他の領域に含まれる画素の奥行き値とを比較することにより、前記画像における奥行き値の変化傾向を解析し、
得られた解析結果が所定のものである場合、前記作成ステップにおいて、前記奥行き値と前記画素移動量との大小関係を逆転させる
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項６】
前記修正ステップにおいて、当該画素を含む領域に含まれる画素の奥行き値の平均値を算出し、当該画素の奥行き値を当該平均値に置き換える
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項７】
前記修正ステップにおいて、前記画像における奥行き値の分布および全画素の奥行き値の平均値を算出し、該算出した平均値を用いて当該分布の偏りを補正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項８】
前記修正ステップにおいて、前記算出された奥行き値を参照して、前記画像データによって表される画像中の少なくとも一以上の被写体の画像を特定し、該被写体に対応する領域内の画素の奥行き値に基づいて当該画素の奥行き値を修正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項９】
前記修正ステップにおいて、ユーザによって指定されるパラメータ値を用いて、奥行き値の量子化ステップを定める
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項１０】
前記修正ステップにおいて、ユーザによって指定されるパラメータ値を用いて、前記算出された奥行き値のとり得る値の上限値または下限値のいずれか一つを決定する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項１１】
複数の画像から構成される動画像を取得するステップを更に備え、
前記取得した画像の各々から立体視画像を作成することにより、前記動画像に対応する立体視画像をリアルタイムに作成することを特徴とする
請求項１に記載の立体視画像作成方法。
【請求項１２】
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出手段と、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正手段と、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成手段と
を有することを特徴とする立体視画像作成装置。
【請求項１３】
前記修正手段において用いられるパラメータをユーザから取得する取得手段を更に備えることを特徴とする請求項１１に記載の立体視画像作成装置。
【請求項１４】
前記パラメータは前記奥行き値の上限値または下限値を表すことを特徴とする請求項１２に記載の立体視画像作成装置。
【請求項１５】
前記パラメータは前記奥行き値の量子化ステップを表すことを特徴とする請求項１２に記載の立体視画像作成装置。
【請求項１６】
該作成された、右目用画像および左目用画像の画像データを格納する格納手段と、
前記格納手段に格納されている画像データで表される画像を、所定の方式に従って表示する表示手段と
を更に備えることを特徴とする請求項１２に記載の立体視画像作成装置。
【請求項１７】
コンピュータを、
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する手段と、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する手段と、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を、決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する手段と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】  本発明は、二次元画像データから立体視用画像データを作成する方法および装置に関する。
【背景技術】  人間は、視覚を通じて、三次元空間内の立体物を立体的に捉える、いわゆる立体視をすることができる。この立体視のプロセスにおいて、人間の脳は、左右それぞれの目で見た映像に基づいて、立体を認識する。従って、立体視を行うためには左目用と右目用の一組の画像が必要である。
一方、二次元画像にある加工を施すことによって、平面的な画像を立体的な画像として鑑賞者に認識させるいわゆる「立体視」という技術がある。そして、この「立体視」の技術の中には、一枚の画像のデータを加工して、左目用と右目用の２つの画像データを作成する技術がある。具体的には、まず画像の中の物体（被写体）に対する両眼の視差を算出し、次に、この視差に応じて元の画像データの画素の位置を左右にずらすことにより左目用画像および右目目画像を生成するという処理が行われる。
この視差を算出する方法としては、物体の彩度、明度あるいは色彩のいずれかに基づいて、実際の物体がどの位奥（または手前）に位置しているのかを表す奥行き値（以下ではＺ値という）を算出し、この値を視差とみなすものがある。
例えば、特開２００２−１２３８４２号には、元の画像の彩度および明度に基づいてＺ値を決定する方法が開示されている。具体的には、まず画像データの彩度に基づいて、画素毎にＺ値を算出する。加えて、画像データの明度に基づいて静止画像に含まれる物体の輪郭線を抽出する。そして、抽出した物体に含まれる画素全てのＺ値の平均値を算出し、これを当該物体のＺ値とする。このＺ値に基づいて視差が決定される。更に、立体感を向上させるため、物体周縁（エッジ）の画素の彩度を変更することにより、当該物体のエッジを「ぼかす」処理が行われる。この技術は、景色は一般に遠い方ほど淡く（彩度が低下し）、近い方ほど色が鋭く（彩度が高く）なる傾向があるという経験則を利用している。すなわち、遠景では空気中の塵などにより彩度が低下し、物体のエッジ（輪郭線）が細く、ぼやける。一方、近景では彩度が高くなる物体の数が多くなり、物体のエッジは太く、くっきりと見える。
しかしながら、例えば、暗い森の中から遠くの明るい空が見えるような構図の画像は上記の経験則に当てはまらず、従って、得られたＺ値は実際の物体の奥行きを正しく反映していない。すなわち、正しい視差が得られず、得られた立体視画像は不自然なものとなる
さらに、物体の一部にハイライトもしくは影が形成されている場合、換言すれば、物体における彩度の変化が著しい場合も、正しいＺ値を算出することができない。このような場合、得られた立体視画像は、その物体の一部だけが局所的に飛び出して（または引っ込んで）見えてしまうのである。さらにこの場合は、物体のエッジを正確に抽出することができないため、上述したぼかし処理を行っても立体感の向上に寄与しない。
また、ハイライト部分では算出されるＺ値は大きい値をとるため、結果的にその部分の視差が大きく見積もられる。その結果、立体視用画像を作成する際に、元の画像において隣り合った画素が異なる方向に移動される場合が生じる。これは画素クロス現象と呼ばれるものであり、これにより画像の歪みが引き起こされ、作成される立体画像の質は鑑賞に堪えられないほど劣化する。特に、複数の物体が重なり合う場所では上記の問題が顕著となり、画像の乱れが生じやすく、自然な立体感が得られる立体視用画像を生成することが一層困難となる。
このように、従来の技術では、立体視用画像を生成するために画像データから適切なＺ値を算出することができず、したがって現実感のある立体視用画像を生成することは困難であった。
【発明の開示】
本発明はかかる実情に鑑みてなされたものであり、二次元画像データから、自然な立体視が得られる立体視用画像データを作成する方法、および当該方法を用いた立体視画像データ作成装置を提供することを目的とする。
出願人は、人間が強く立体感を感ずるのにはどのような条件が必要なのかを研究し、この研究の結果、本発明を想到するに至った。
本発明の立体視用画像作成方法は、画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出ステップと、前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正ステップと、各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成ステップとを有することを特徴とする。
このようにＺ値の修正を行うことで、自然な立体感が得られる立体視用画像が生成される。
好ましい態様において、前記算出ステップにおいては、画像データの色成分の各々に所定の係数を乗じることにより奥行き値を算出する。また、前記所定の係数は、人間の網膜に存在する赤錐体、緑錐体、および青錐体の数の割合に等しいことが好ましい。
また、前記修正ステップにおいては、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値よりも、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値の方が大きくなるように、前記各画素の奥行き値を補正してもよい。
また、前記修正ステップにおいては、当該画素を含む領域に含まれる画素の奥行き値の平均値を算出し、当該画素の奥行き値を当該平均値に置き換えてもよい。また、前記画像における奥行き値の分布および全画素の奥行き値の平均値を算出し、該算出した平均値を用いて当該分布の偏りを補正してもよい。
また、前記算出された奥行き値を参照して、前記画像データによって表される画像中の少なくとも一つ以上の被写体の画像を特定し、該被写体に対応する領域内の画素の奥行き値に基づいで当該画素の奥行き値を修正してもよい。また、ユーザによって指定されるパラメータ値を用いて、奥行き値の量子化ステップ、算出された奥行き値のとり得る値の上限値、またはその下限値のいずれか一つを決定してもよい。
また、前記修正ステップにおいて、一の領域に含まれる画素の奥行き値と他の領域に含まれる画素の奥行き値とを比較することにより、前記画像における奥行き値の変化傾向を解析し、得られた解析結果が所定のものである場合、前記作成ステップにおいて、前記奥行き値と前記画素移動量との大小関係を逆転させる。
また、好ましい態様において、複数の画像から構成される動画像を取得するステップと、前記取得した画像の各々から立体視画像を作成するステップを更に有することにより、前記動画像に対応する立体視画像をリアルタイムに作成することとしてもよい。
また、本発明に係る立体視画像作成装置は、画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出手段と、前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正手段と、各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成手段とを有することを特徴とする。さらに、前記修正手段において用いられる各種パラメータをユーザから取得する取得手段を更に備えてもよい。
また、本発明は、上述した立体視用画像作成装置としてコンピュータを機能させるためのプログラムを提供する。このプログラムは、例えば、各種記録媒体に格納されて、またはネットワークを介して、該コンピュータにインストールされる。
【図面の簡単な説明】図１は、本発明の第１実施形態にかかる立体視画像形成装置の一例を示す機能ブロック図である。
図２は、立体視画像表示アプリケーションの表示画面の一例を示す概略図である。
図３は、設定ダイアログパネルの一例を示す概略図である。
図４は、本発明の第１実施形態における立体視表示機構を説明するための概略図である。
図５は、本発明の第１実施形態における立体視表示機構を説明するための概略図である。
図６は、立体視メガネを示す図である。
図７は、立体視表示モードが選択された場合に行われる画像処理を示すフローチャートである。
図８は、画像データの構造を説明するための概略図である。
図９は、グレースケール補正処理を示すフローチャートである。
図１０は、グレースケール補正処理を示すフローチャートである（続き）。
図１１は、グレースケール補正処理を示すフローチャートである（続き）。
図１２は、逆転判定処理において用いられるサンプリング領域および重み係数を示す図である。
図１３は、逆転判定処理を示すフローチャートである。
図１４は、逆転判定処理を示すフローチャートである（続き）。
図１５は、平滑化処理において用いられるマトリクス領域ＭＭを示す図である。
図１６は、平滑化処理を示すフローチャートである。
図１７は、分布補正処理を説明するための模式図である。
図１８は、分布補正処理を示すフローチャートである。
図１９は、分布補正処理を示すフローチャートである（続き）。
図２０は、局所補正処理で適用する被写体のＺ値分布を示す図である。
図２１は、局所補正処理を示したフローチャートである。
図２２は、局所補正処理の一過程である等高線算出処理を示すフローチャートである。
図２３は、局所補正処理の一過程である等高線算出処理を説明するための図である。
図２４は、局所補正処理の一過程である等高線算出処理を示すフローチャートである（続き）。
図２５は、局所補正処理の一過程である被写体中心特定処理を示すフローチャートである。
図２６は、局所補正処理の一過程である被写体中心特定処理を示すフローチャートである（続き）。
図２７は、局所補正処理の一過程である被写体中心特定処理を示すフローチャートである（続き）。
図２８は、局所補正処理の一過程である交点算出処理を示すフローチャートである。
図２９は、局所補正処理の一過程である面内Ｚ値算出処理を示すフローチャートである。
図３０は、局所補正処理の一過程である面内修正値算出処理を示すフローチャートである。
図３１は、局所補正処理の一過程であるＺ値補正処理を示すフローチャートである。
図３２は、画素移動処理を示すフローチャートである。
図３３は、画素移動処理を示すフローチャートである（続き）。
図３４は、画素移動処理を示すフローチャートである（続き）。
図３５は、本発明の変形例における強調処理を説明するための図である。
図３６は、本発明の変形例における画像処理を示すフローチャートである。
図３７は、本発明の変形例における強調処理を示すフローチャートである。
図３８は、本発明の変形例における立体視画像の表示方式を示す概略図である。
図３９は、本発明の変形例における立体視画像の表示方式を示す概略図である。
図４０は、本発明の変形例における立体視画像の表示方式を示す概略図である。
図４１は、本発明の変形例における立体視画像の表示方式を示す概略図である。
図４２は、本発明の変形例における画素移動処理を示すフローチャートである。
図４３は、本発明の第２実施形態における携帯端末１Ａの機能構成を説明するためのブロック図である。
図４４は、携帯端末１Ａの外観図である。
図４５は、表示部２１ｂの構成を示す概略図である。
図４６は、裸眼立体視の原理を説明すための図である。
図４７は、携帯端末１Ａにおいて、静止画を表示する際に行われる処理を示すフローチャートである。
図４８は、携帯端末１Ａにおいて、動画を表示する際に行われる処理を示すフローチャートである。
図４９は、本発明の第三実施形態に係る立体視画像形成装置１Ｂの機能構成の一例を示すブロック図である。
図５０は、立体視画像形成装置１Ｂにおける動画を表示する際の処理を示すフローチャートである。
図５１は、本発明の一応用例である運転シミュレータ４０の機能構成を示すブロック図である。
【発明を実施するための最良の形態】  以下、添付図面を参照しながら、本発明の実施の形態を詳細に説明する。
＜第１実施形態＞
＜Ａ．装置の構成＞
図１は、本発明の第１実施形態にかかる立体視画像形成装置１を示す。
同図において、ＣＰＵ（中央処理装置）１１は、この立体視画像形成装置１の各部の動作を制御し、立体視用画像データ作成処理などの各種処理を実行する。ＲＯＭ（リード・オンリ・メモリ）１２は、起動時などに実行されるプログラムや参照データなどを格納する。ＲＡＭ（ランダム・アクセス・メモリ）１３は、ＣＰＵ１１のワークエリアなどを実現するためのものである。
キャラクタジェネレータ１４は、図形文字の表示データ（フォントデータ）を発生する。時計回路１５は現在時刻を出力する。インタフェース１６は、立体視画像形成装置１をインターネット（図示略）へ接続するためのものである。伝送制御部１７は、インタフェース１６を介し、インターネットに接続された端末との間でデータの授受を行う。
磁気ディスク装置１８は、立体視画像形成装置１で実行される各種処理やオペレーティングシステムなどのプログラムデータを記憶するとともに、各種処理により作成される各種データなどを記憶する記憶装置である。ＣＤ−ＲＯＭドライブ１９は、ＣＤ−ＲＯＭ２０に記憶されている画像データを読み出すためのものである。表示部２１は、例えばＣＲＴやＬＣＤであり、表示制御部２２の制御の下、画像を表示する。
キーボード２３はフルキー配列のキーボードであり、ユーザはキーボード２３を用いて指示を入力する。画面指示装置２４は、タッチパネル等の入力デバイスであり、ユーザはタッチパネルを押圧することにより各種指示を入力する。入力制御部２５は、キーボード２３および画面指示装置２４から入力された指示を取り込みＣＰＵ１１へ出力する。
ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、キャラクタジェネレータ１４、時計回路１５、伝送制御部１７、磁気ディスク装置１８、ＣＤ−ＲＯＭドライブ１９、表示制御部２２、および、入力制御部２５は、内部バス２６に接続されている。これらの各種要素間のデータのやりとりは、この内部バス２６を介して行われる。
立体視用画像データを作成するにあたり、ＣＰＵ１１によって、例えばＲＯＭ１２内の立体視画像表示用のアプリケーションが実行される。当該アプリケーションが実行されたときに表示部２１に表示される画面の一例を図２に示す。
同図に示すように、アプリケーション実行時に表示される画面は、メイン画面ＭＤとメニュー項目が配列されるメニューバーＭＢとからなる。メイン画面ＭＤには、ユーザが選択した動画が表示される。
また、メニューバーＭＢには、項目ＭＩ１〜ＭＩ１０が表示される。項目ＭＩ１は、ユーザが処理対象となる動画データの選択等を行うための「ファイルメニュー」を選択するためのものである。項目ＭＩ２は、立体視画像の表示設定を行うためのものである。項目ＭＩ３は、立体視画像データを記録する際に選択操作するためのものである。項目ＭＩ４は、この立体視画像表示アプリケーションを終了させる操作を行うためのものである。項目ＭＩ５は、メイン画面ＭＤに表示している動画の再生操作を行うためのものである。項目ＭＩ６は、メイン画面ＭＤに表示している動画の停止操作をおこなうためのものである。項目ＭＩ７は、メイン画面ＭＤに表示している動画の一時停止操作を行うためのものである。
項目ＭＩ８は、メイン画面ＭＤに表示する動画の表示モードを通常モード（２Ｄ）であるかあるいは立体視モード（３Ｄ）であるのかを表示すると同時に、その表示モードの切換を指定するための操作を行うためのものである。具体的には、ユーザが項目ＭＩ８をクリックするたびに通常モード（２Ｄモード）と立体視モード（３Ｄモード）が切換るトグル動作が行われる。図２の上側の図は２Ｄモード時の表示画面であり、下側の図は３Ｄモード時の画面である。
項目ＭＩ９は、立体視表示モードの種類（Ｏｄｄ−ｅｖｅｎモード／余色モード）の選択を行うためのものである。なお、本実施形態においては２つのモードのみが選択可能であるが、これに限らず、他の合成方法に適合したモードを設定することも可能である。具体的には、立体視画像を合成するに当たり、左右両眼の２視点に対応する２つの画像を使用する方法以外に、４視点に対応する４つの画像を用いる方法や、８視点および９視点にそれぞれ対応する８画像および９画像を用いる合成方法のモードをユーザに選択できるようにする。
項目ＭＩ１０は、合成方法を指定するものであって、立体世界が画面から奥に引っ込んで見える（Ｆ１モード）のか、飛び出して見える（Ｆ２モード）のかを切換える操作を行うためのものである。図２では両画面ともＦ１モードとなっているから、ユーザには立体世界が奥に引っ込んでいるように見えることになる。
図３は、ユーザが項目ＭＩ２を操作した場合に表示部２１に表示される設定ダイアログパネルの一例を示している。同図に示すように、この設定ダイアログパネルは、上部にタイトルバーＢＲが表示され、そのタイトルバーには、この設定ダイアログパネルを閉じるためのクローズボックスＢＣが配置されている。
また、設定ダイアログパネルは、スライダバーＩＳ１、ＩＳ２、入力窓ＩＢ１、ＩＢ２、ＩＢ３、ＩＢ４、入力ボックスＩＢ５およびＩＢ６、およびボタンＢＭ２およびＢＭ３が配置されている。ユーザは、スライダバーＩＳ１を操作し、「インタフェース深度」の値を指定することができる。入力窓ＩＢ１には指定されているインタフェース深度の値が表示される。あるいは、入力窓ＩＢ１に直接数値を入力することも可能である。
ここで、「インタフェース深度」とは、ユーザに、表示画面に対し立体視世界全体がどの程度引っ込んで（または飛び出して）知覚されるかを示すパラメータである。この値が大きいほど、立体視世界全体が画面からより飛び出して（または引っ込んで）いるように知覚される。また、例えば、画素を左目画像について視差分を左に移動し右目画像について右に移動して表示された立体視画像が表示画面から内部に引っ込んで見えるとすれば、画素移動方向を反対にすることで、立体視画像は表示画面から飛び出して見えることになる。
ユーザは、スライダバーＩＳ２を操作し、「起伏度」の値を指定することができる。入力窓ＩＢ２には指定されている起伏度の値が表示される。あるいは、入力窓ＩＢ２に直接数値を入力してもよい。ここで「起伏度」とは、立体視世界の起伏度、換言すれば、立体視世界の最低奥行きから最高奥行きまでの深さを示す。すなわち、この値が大きいほど立体視世界内の起伏が強調され、逆にこの値が小さいと、立体視世界全体がのっぺりとしたように知覚される。
ユーザは、被写体深度の上限値および下限値をそれぞれ入力窓ＩＢ３およびＩＢ４に入力することができる。ここで「被写体深度」とは、画像に含まれる被写体毎に割り当てられる量であって、画面に対してその被写体がどの程度奥に引っ込んでいるか（または飛び出しているか）を示すパラメータである。操作ボタンＢＭ１は被写体深度の上限値および下限値をデフォルト値に設定するためのものである。
ユーザは、入力ボックスＩＢ５またはＩＢ６のいずれか一方をチェックすることにより開始ラインを奇数ラインとするか偶数ラインとするかを指定することができる。ボタンＢＭ２が操作されると、現在の設定内容が確定し、ボタンＢＭ３が操作されると、現在の設定内容が破棄され以前に設定した内容が有効となる。このようにして設定されたパラメータ値は後述する画像処理において用いられる。
一組の画像を用いて立体視を実現させる手法は種々あるが、本実施形態においてはＯｄｄ−Ｅｖｅｎ方式を採用する。すなわち、表示部２１の画面に偏光ストライプフィルタを貼り付け、ユーザは偏光メガネを装着して表示画面を見ることにより、立体的な画像がユーザに知覚されるのである。
具体的には、まず、図４に示すように、表示部２１の表示画面を構成する各水平走査線のうち偶数ラインＳＬ０，ＳＬ２，・・・に、左目用の偏光ストライプフィルタＦＬ０，ＦＬ２，・・・を、それぞれに対応する幅と間隔で貼り付ける。一方、表示画面の奇数ラインＳＬ１，ＳＬ３，・・・には、右目用の偏光ストライプフィルタＦＬ１，ＦＬ３，・・・を、それぞれに対応する幅と間隔で貼り付ける。そして、図５に示すように、立体視用画像データのうちの左目用画像データを表示部２１の偶数ラインＳＬ０，ＳＬ２，・・・に表示するとともに、右目用画像データを表示部２１の奇数ラインＳＬ１，ＳＬ３，・・・に表示する。ここで左目用の偏光ストライプフィルタＦＬ０，ＦＬ２，・・・と右目用の偏光ストライプフィルタＦＬ１，ＦＬ３，・・・とは、その偏光方向が直交している。
一方、図６に示す偏光メガネＧＳにおいては、左目に対応してフィルタＦｌｅｆｔが、右目に対応してフィルタＦｒｉｇｈｔが配設される。ここで、ＦｌｅｆｔおよびＦｒｉｇｈｔの偏光方向は、それぞれ左目用の偏光ストライプフィルタおよび右目用の偏光ストライプフィルタと平行である。
ユーザは、偏光メガネＧＳを装着してこの表示部２１の表示画面を見ると、表示部２１の偶数ラインＳＬ０，ＳＬ２，・・・の表示内容は偏光ストライプフィルタＦＬ０，ＦＬ２，・・・を通過するので、左目に対応して配設されたフィルタＦｌｅｆｔを透過して左目に到達するが、右目に対応して配設されたフィルタＦｒｉｇｈｔによって遮断されるため右目には到達しない。一方、表示部２１の奇数ラインＳＬ１，ＳＬ３，・・・の表示内容は偏光ストライプフィルタＦＬ１，ＦＬ３，・・・を通過するので、フィルタＦＬｒを透過して右目に到達するが、フィルタＦＬｆによって遮断されるので左眼には到達しない。このようにして、ユーザの左目では左目用画像が、右目では右目用画像がそれぞれ感知されるので、ユーザは表示画像を立体的に知覚することができるのである。
＜Ｂ．画像処理＞
図７は、ユーザが所定の操作を行い、立体視画像表示アプリケーションが起動され立体視表示モードが選択された場合に、立体視画像形成装置１が行う画像処理の流れの概略を示すものである。
まず、ＣＰＵ１１は、カラー動画データの１フレーム分のデータを読み出し（ステップＳ１０１）、そのデータがＲＧＢフォーマットのものであるかどうかを調べる（ステップＳ１０２）。ＲＧＢ以外のフォーマットであった場合、読み込んだ１フレーム分のカラー画像データを、ＲＧＢフォーマットのカラー画像データへ変換する（ステップＳ１０３）。ここで、カラー動画データのフォーマットは任意である。また、当該動画データは圧縮されていてもよい。この場合、ステップＳ１０１の前に、当該データを復号化する処理を設ければよい。また、カラー動画データの１画素あたりの色深度（ビット深度）としては、１６ビット、２４ビット、または、３２ビットのいずれかのものを適用することができる。また、このカラー動画データは、磁気ディスク装置１８やＣＤ−ＲＯＭ２０に保存されているものであってもよい。あるいは、ＤＶＤ等の映像再生機器とケーブル接続することにより画像データを入力してもよい。または、デジタルカメラやビデオ等の撮像機器から入力されてもよい。または、受像器と接続することにより、受信した衛星放送や有線放送の画像データを入力することとしてもよい。または、インターネット上のサーバからダウンロードしたものであってもよい。
次に、ＣＰＵ１１は、読み出した１フレーム分のカラー画像データについて、それぞれの画素について、画像データ値（Ｒ、Ｇ、Ｂ値）に基づきグレースケール値を算出し、これをＺ値に設定するグレースケール補正処理（ステップＳ１０４）を行う。
このようにして各画素のＺ値を決定すると、逆転判定処理（ステップＳ１０５）、平滑化（ステップＳ１０６）、分布補正（ステップＳ１０７）、局所補正（ステップＳ１０８、Ｓ１０９）を行い、Ｚ値を補正してゆく。最後に、このようにして得られた補正後のＺ値に基づいて画素移動量を算出し、画素をずらすことにより立体視画像を作成するのである（ステップＳ１１０）。以下、各処理を詳細に説明する。
なお、以下の説明において、式の構文やデータ型等の記述方法は、Ｃ言語またはそれの拡張言語（Ｃ＋＋言語等）の記述方法に準拠するものとする。また、上述したように、本実施形態では、色彩深度として１６ビット、２４ビット、および、３２ビットのいずれかのＲＧＢフォーマットのカラー画像データを用いるものとする。図８に示すように、各画素における色深度が１６ビットのカラー画像データは、Ｒデータが５ビット、Ｇデータが６ビット、および、Ｂデータが５ビットのデータ構成を持つ。色深度が２４ビットのデータの場合は、Ｒデータ、Ｇデータ、Ｂデータは、それぞれ８ビット、８ビット、８ビットのデータ構成を持つ。また、色彩深度が３２ビットの場合は、２４ビットのカラー画像データの先頭に８ビットのダミーデータを付加したデータ構成を持つ。
＜Ｂ−１．グレースケール補正処理＞
図９、図１０、および図１１を用いて、グレースケール補正処理（図７、ステップＳ１０４）の詳細を説明する。
このグレースケール補正処理においては、原画像データのＲ値、Ｇ値、および、Ｂ値をそのままＺ値とするのではなく、まず、Ｒ値、Ｇ値、および、Ｂ値に対し、重み付けを行う。具体的には、以下の式（１）に示すように、それぞれの画素の表示色のうち赤色成分（Ｒ）、緑色成分（Ｇ）および青色成分（Ｂ）のそれぞれに所定の重み付けを行ってグレースケール値を取得する。
Ｚ＝０．３×Ｒ＋０．５９×Ｇ＋０．１１×Ｂ        （１）
画像データの色深度が１６ビットの場合には、一つの画素のグレースケール値のとり得る範囲は、０〜３１であり、２４ビットおよび３２ビットの場合は、ともに０〜２５５となる。
なお、この重み付け係数（３０％、５９％、１１％）は、人間の網膜に存在する赤錐体、緑錐体、および、青錐体の数の割合に基づいたものである。これ以外の重み付け係数も採用することは可能であるが、上記係数を用いて算出したグレースケール値に基づいて立体視用画像を生成すると、最も自然な立体感を出すことができる。
次に、重み付け係数を用いたグレースケールの値を補正する。このグレースケールの１階調を１単位の深度として使用すると、原画像の構図上で手前に位置する１階調と奥に位置する１階調とが、同じ単位の深度（同じ奥行き距離）を表現することになり、画素本来の奥行き値の表現に不正確が生じる。そこで、原画像の構図上で手前に位置する階調の値（グレースケール値）よりも奥に位置する階調の値（グレースケール値）ほど、より大きい値の深度（奥行き距離）を表現する必要がある。その方法として、重み付け係数を用いて取得したグレースケールの階調の値を数列ａｎ（ｎ＝１、２、３、・・・）とみなし、以下の数式（２）に示す等差数列あるいは以下の数式（３）に示す等比数列を用いて、原画像の構図上で手前に位置する階調から奥に位置する階調ほど、より大きな単位の深度（奥行き距離）を与えて得られる値を当該画素のＺ値とする。
ａｎ＝ａ＋（ｎ−１）＊ｄ  （２）
ａｎ＝ａ＊ｒｎ−１        （３）
ただし、ｎは正の整数、ａは初項であって、補正量を表すパラメータである公差ｄおよび公比ｒは、原画像の特徴に応じて好適な値を設定することができる。
以下、＊ｓｒｃは原画像データｓｒｃが格納された領域（アドレス）を示すポインタ、ＷＤは元の画像の横方向の画素数、ＨＴは元画像の縦方向の画素数、＊ｚｉｎｆｏは算出したＺ値を格納する領域を示すポインタを表すものとする。例えば、元の画像データのサイズが「１０２４ドット＊７６８ドット」であった場合、ＷＤは１０２４、ＨＴは７６８となる。
まず、図９において、ＣＰＵ１１は、処理対象となっている画素のデータの色深度が１６ビットであるか否かを判定する（ステップＳ２０１）。１６ビットの場合、「Ｕｎｓｉｇｎｅｄ  Ｓｈｏｒｔ  ＊ｓｒｃｐ」を変数宣言し（ステップＳ２０２）、注目画素のデータｓｒｃをｕｎｓｉｇｎｅｄ  ｓｈｏｒｔへ型変換し（ステップＳ２０３）、変数ｓｒｃｐに、データｓｒｃのアドレスを代入する（ステップＳ２０４）。
次いで、ＣＰＵ１１は、カウンタＣＣの値を０に設定する（ステップＳ２０５）。次に、ステップＳ２０６へ進み、カウンタＣＣの値が「ＷＤ＊ＨＴ」よりも小さいかどうかを判定する（ステップＳ２０６）。判定結果がＮＯの場合は、１画面分の全ての画素についての処理が終了したと判断し、グレースケール補正処理を終了する。
判定結果がＹＥＳの場合、後段のステップＳ２０７〜Ｓ２１０において、当該画素についてグレースケール補正処理を行う。すなわち、ＣＰＵ１１は、まず、ステップＳ２０７において、変数Ｒに、ポインタ＊ｓｒｃｐによって指示される領域に格納されている１６ビットのデータと１６進数「Ｆ８００」（２進数では「１１１１１０００００００００００」）との論理積をとり、これを１１ビット算術右シフトし、その結果に３０を乗じる。こうして得られた値をｉｎｔに型変換し、これを新たなＲ値をとする（ステップＳ２０７）。このようにして、変数Ｒには５ビットのＲデータに３０を乗じた値が代入される。次に、ステップＳ２０８へ進み、変数Ｇに、ポインタ＊ｓｒｃｐによって指示される領域に格納されている１６ビットデータと１６進数「０７Ｅ０」を論理積し、これを５ビット算術右シフトし、これに５９を乗じる。さらに、こうして得られた値をｉｎｔに型変換し、これを新たなＧ値とする（ステップＳ２０８）。以上により、変数Ｇには、６ビットのＧデータに５９を乗じた値が代入される。次に、変数Ｂに、ポインタ＊ｓｒｃｐによって指示される領域に格納されている１６ビットデータと１６進数「００１Ｆ」とを論理積をとり、これに１１を乗じる。さらに、こうして得られた値をｉｎｔに型変換し、これを新たなＢ値とする（ステップＳ２０９）。このようにして、変数Ｂには、５ビットのＢデータ（５ビット）に１１を乗じた値が代入される。最後に、変数Ｒと変数Ｇと変数Ｂの値の総和を１００で除した結果を、ポインタ＊ｚｉｎｆｏで示される領域へ代入する（ステップＳ２１０）。
これで１画素分の処理が終了したので、変数ｓｒｃｐ，ｚｉｎｆｏ、カウンタＣＣの値をそれぞれ１つ増やして（ステップＳ２１１）、再びステップＳ２０６へ戻り、次の画素について同様の処理を行う。以上の処理を１画面分の全ての画素について行う。
また、ステップＳ２０１の判定結果がＮＯになる場合は、色深度が２４ビットであるか否かを調べる（図１０、ステップＳ２１５）。次に、図９のステップＳ２０５およびＳ２０６と同様、カウンタのリセット（ステップＳ２１６）および終了判定（ステップＳ２１７）を行う。
続いて１６ビットデータの場合と同様、Ｒ値，Ｇ値，Ｂ値をそれぞれ補正する。すなわち、図９のステップＳ２０７〜Ｓ２０９に替えて、図１０のステップＳ２１８〜Ｓ２２０を実行する。すなわち、まず、変数Ｂに、ポインタ＊ｓｒｃで示される領域に格納されている２４ビットデータに１１を乗じ、これを変数Ｂに代入する（ステップＳ２１８）。次に、ポインタ＊（ｓｒｃ＋１）によって示される領域に格納されている２４ビットデータに５９を乗じた値を変数Ｇに代入する（ステップＳ２１９）。次いで、ポインタ＊（ｓｒｃ＋２）によって示される領域に格納されているデータに３０を乗じた値を変数Ｒに代入する（ステップＳ２２０）。ステップＳ２２１およびＳ２２２を含む以降の処理は、１６ビットデータの場合と同様である。
ステップＳ２１５において判断結果がＮＯの場合、ＣＰＵ１１は色深度が３２ビットであると判断する。この場合には、「Ｕｎｓｉｇｎｅｄ  ｌｏｎｇ  ＊ｓｒｃｐ」を変数宣言し（図１１、ステップＳ２２５）、処理対象の画素のデータｓｒｃをｕｎｓｉｇｎｅｄ  ｌｏｎｇへ型変換し（ステップＳ２２６）、変数ｓｒｃｐに、データｓｒｃのアドレスを代入する（ステップＳ２２７）。次いで、１６ビットデータの場合と同様、カウンタ値のリセット（ステップＳ２２８）および終了判定（ステップＳ２２９）を行う。
次に、ステップＳ２３０〜Ｓ２３２において、Ｒ値、Ｇ値、Ｂ値を補正する。すなわち、まずポインタ＊ｓｒｃｐによって示される領域に格納されている３２ビットデータと１６進数「００ＦＦ００００」との論理積をとり、これを１６ビット算術右シフトし、その結果に３０を乗じる。更にこれをｉｎｔに型変換し、変数Ｒに代入する（ステップＳ２３０）。これにより、変数Ｒには、８ビットのＲデータに３０を乗じた値が代入される。次に、データ（３２ビットデータ）と１６進数「００００ＦＦ００」を論理積し、これを８ビット算術右シフトし、その結果に５９を乗じる。更にこれをｉｎｔに型変換して変数Ｇに代入する（ステップＳ２３１）。これにより、変数Ｇには８ビットのＧデータに５９を乗じた値が代入される。次に、ポインタ＊ｓｒｃｐによって指示される領域に格納されているデータ（３２ビットデータ）と１６進数「００００００ＦＦ」との論理積をとり、これに１１を乗じる。さらに、この値をｉｎｔに型変換して変数Ｂに代入する（ステップＳ２３２）。これにより、変数Ｂには、８ビットのＢデータに１１を乗じた値が代入される。以降の処理は１６ビットおよび２４ビットの場合と同様である。
＜Ｂ−２．逆転判定処理＞
次に、図１２〜１４を参照して逆転判定処理（図７、ステップＳ１０５）について説明する。
本処理においては、立体視画像をより自然な立体感が得られる画像とするために、ステップＳ１０４にて得られたＺ値を修正する。
上述したように、立体視用画像を作成する際には、Ｚ値に応じて画素移動量を決定すればよいというのが原則である。例えば、ステップＳ１０４で得られたＺ値に正比例するように画素移動量を決定すればよい。このようにすると、Ｚ値が大きい被写体（すなわち明るい被写体）ほど利用者からみて手前に位置し、Ｚ値が小さい被写体（すなわち暗い被写体）ほど利用者からみて奥に位置することとなる。よって、実際の原画像において、暗い被写体が奥に位置し、明るい被写体が手前に位置する場合には、現実感のある自然な立体視が実現される。
しかしながら、原画像のなかには、明るい背景（例えば青空）の中央に暗い被写体が存在するといった具合に、Ｚ値が大きい被写体ほど利用者からみて奥に位置し、Ｚ値が小さい被写体ほど利用者からみて手前に位置する場合もある。このような画像についてＺ値に比例するように画素移動量を決定するものとすれば、利用者が知覚する立体視画像は被写体の遠近が逆転した不自然なものとなる。
そこで、本処理においては、原画像におけるＺ値の変化の傾向を解析し、これに基づいて、画素移動量の大小とＺ値の大小との関係を逆転させるべきか否かを判定するのである。
具体的には、図１２に示すように、原画像データによって表される１画面を、左上隅、中央上端、右上隅、中央左端、中央、中央右端、左下隅、中央下端、右下隅にある縦８ドット×横８ドットのサイズの各領域（以下、「サンプリング領域」という）ＳＳ１〜ＳＳ９に分割する。なお、このサンプリング領域の大きさは縦８ドット×横８ドットに限らず、またサンプリング領域の数も任意に設定することができる。
これらサンプリング領域の各々には、重み係数が割り当てられている。具体的には、領域ＳＳ１，ＳＳ２，ＳＳ３，ＳＳ４，ＳＳ５，ＳＳ６，ＳＳ７，ＳＳ８，ＳＳ９には、それぞれ「３」、「４」、「３」、「２」、「５」、「２」、「１」、「２」、「１」の重み係数が割り当てられる。割り当て方法はこれに限らないが、画像中の被写体の遠近に関する一般的な傾向に基づいて決定される。ここで一般的な傾向とは、画像のうち上部の方が下部よりも遠景（例えば空）である場合が多く、また、人物や花などを撮影した画像の場合は、画像の中央部に被写体が配置される場合が多い、というものである。すなわち、中央のサンプリング領域の重み係数が最も大きく、かつ、上方のサンプリング領域は下方のサンプリング領域よりも大きな重み係数が割り当てられればよい。
以下、図１３および１４を参照し、逆転判定処理の流れを具体的に説明する。
まず、ＣＰＵ１１は、画像データにおける全画素のＺ値の平均値ＭＺを算出する（ステップＳ３０１）。次に、変数Ｓ１、Ｓ２、および、カウンタＣＴの値を０に初期設定する（ステップＳ３０２）。ここで、変数Ｓ１（Ｓ２）は、画面の明るさの平均値よりも暗い（明るい）領域の重み係数を表すパラメータであり、カウンタＣＴの値は処理が行われたサンプリング領域の数を表す。
次いで、カウンタＣＴの値が９より小さいかどうかを判定し、（ステップＳ３０３）、すべてのサンプリング領域ＳＳに関して処理が終了したか否かを判定する。判定結果がＹＥＳである場合は、当該サンプリング領域の平均Ｚ値が平均値ＭＺ以上であるかどうかを判定する（ステップＳ３０４）。
ステップＳ３０４の判定結果がＹＥＳになるときには、変数Ｓ１に、ＣＴ番目のサンプリング領域の重み係数を加算する（ステップＳ３０５）。また、ステップＳ３０４の判定結果がＮＯになるときには、変数Ｓ２に、ＣＴ番目の領域の重み係数を加算する（ステップＳ３０６）。次に、カウンタＣＴの値を１つ増やし（ステップＳ３０７）、ステップＳ３０３に戻り、次のサンプリング領域に関して処理を行う。
このようにして９つサンプリング領域の全てに関して処理が終了すると（ステップＳ３０３，ＮＯ）、図１４のステップＳ３０８へ進み、変数Ｓ１の値が変数Ｓ２の値よりも大きいかどうかを調べる。Ｓ１＞Ｓ２である場合は（ステップＳ３０８，ＹＥＳ）、Ｚ値を反転すると決定する（ステップＳ３０９）。
Ｓ１＞Ｓ２でない場合（ステップＳ３０８、ＮＯ）、さらにＳ１＜Ｓ２であるかを判定する（ステップＳ３１０）。Ｓ１＜Ｓ２である場合（ステップＳ３１０、ＹＥＳ）Ｚ値を反転しないと判定する（ステップＳ３１１）。
Ｓ１＞Ｓ２かつＳ１＜Ｓ２、すなわちＳ１＝Ｓ２の場合は（ステップＳ３１０、ＮＯ）、中央部のサンプリング領域ＳＳ５の平均Ｚ値が、平均値ＭＺ以上であるかどうかを判定する（ステップＳ３１２）。ステップＳ３１２の判定結果がＹＥＳのときにはＺ値を反転しないと決定し（ステップＳ３１３）、ＮＯにときはＺ値を反転すると決定する（ステップＳ３１４）。
また、以下の判定処理を更に行ってもよい。すなわち、９つのサンプリング領域ＳＳ１〜ＳＳ９のうち、サンプリング領域内のＺ値の平均値が原画像全体のＺ値の平均値よりも大きいサンプリング領域を特定し、特定した１以上のサンプリング領域の重み値を合計する。そして、求めた合計値が予め定められたしきい値以上である場合、原画像の構図上で手前の位置に描写されている部分がより暗く、奥の位置に描写されている部分がより明るい傾向にあると判断し、画素移動量の大小とＺ値の大小との関係を反転させると判定する。これに対し、求められた合計値が予め定められたしきい値未満である場合、すなわち原画像の構図上で手前の位置に描写されている部分がより明るく、奥の位置に描写されている部分がより暗い傾向にあると判断し、画素移動量の大小とＺ値の大小との関係を反転させないと判定する。
次いで、ＣＰＵ１１は、立体視画像表示アプリケーションにおける項目ＭＩ１０の設定が、Ｆ２モード（飛び出して見える）になっているかどうかを判定する（ステップＳ３１５）。Ｆ２モードになっている場合は、ステップＳ３０９、３１１，３１３，３１４で得られた判定結果を更に反転する（ステップＳ３１６）。Ｆ２モードの場合は、奥行きとＺ値の関係とのを逆転させる必要があるからである。以上で、逆転判定処理が終了する。なお、本処理で得られた逆転の有無の判定結果は、後述する処理（図７、ステップＳ１１０）に反映される。
＜Ｂ−３．平滑化処理＞
逆転判定処理に続いて、ＣＰＵ１１は、図７のステップＳ１０４にて算出したＺ値を平滑化するための処理を行なう（ステップＳ１０６）。本処理を行う理由は以下である。
上述したように、立体視画像は、各画素を元の位置から視差に相当する量だけ左右に移動することによって生成される。そして、その移動量はＺ値から求められる。したがって、Ｚ値の変化が激しい部分では視差の変化が激しく、画素のクロス現象（隣接する画素が、それぞれ左右逆の方向へ移動すること）が発生する。このような現象は物体に光が当たってハイライトになっている輪郭の部分などに多く発生する。その結果、生成された立体視画像には、輪郭のぼやけ、にじみ、干渉縞模様といった乱れが生じる。本処理では、このような現象が出現しないようにＺ値を補正するのである。
具体的には、図１５に示すように、ＣＰＵ１１は、原画像に含まれる各画素Ｐｘごとに、その画素Ｐｘを含む特定の領域（以下「マトリクス領域」という）ＭＭにおけるＺ値の平均値を算出し、この求めた平均値を当該画素ＰｘのＺ値として更新する。すなわち、各画素ＰｘのＺ値が、当該画素Ｐｘを左上隅に含む縦１２ドット（Ｍｙ）で横１２ドット（Ｍｘ）のマトリクス領域ＭＭにおける計１４４画素のＺ値の平均値に置き換えられる。この処理を行うことにより、原画像における近接画素のＺ値の変化は、ステップＳ１０４にて算出されたＺ値よりも滑らかなものとなる。
なお、マトリクス領域ＭＭの大きさは任意に設定可能である。マトリクス領域ＭＭが大きくすれば、平均値を算出する対象となる画素数が多くなるから、各画素同士のＺ値の差は小さくなり、従って利用者によって知覚される立体感は小さくなる。逆に、マトリクス領域が小さくすれば、各画素同士のＺ値の差は大きくなり、利用者によって知覚される立体感は大きくなる。
以下、図１６を参照して本処理の流れ、を具体的に説明する。なお、「＊ｏｕｔｉｎｆｏ」は平滑化されたＺ値を格納する領域へのポインタを表すものとする。
まず、注目画素の縦方向の位置を表すカウンタＣＬＮを０にセットする（ステップＳ４０１）。次に、カウンタＣＬＮの値が縦画素数ＨＴより小さいかどうかを判定する（ステップＳ４０２）。この判定結果がＮＯのときは、１画面分の処理が終了したと判定し、この処理を終了する。
ステップＳ４０３において、着目画素Ｐｘが画面の下端から１２画素よりも上にあるか、すなわち（ＨＴ−ＣＬＮ）の値が１２以上であるかを判定する。この判定結果がＹＥＳになるときには、マトリクス領域ＭＭの縦方向のサイズを表す変数ＭＴｈに１２を代入する（ステップＳ４０４）。そうでない場合、変数ＭＴｈに（ＨＴ−ＣＬＮ）の値を代入する（ステップＳ４０５）。このようにして、着目画素が画面の下端付近にある場合のマトリックス領域のサイズを調整する。
次に、注目画素の横方向の位置を表すカウンタＣＷＤの値を０にセットする（ステップＳ４０６）。次に、カウンタＣＷＤの値が横幅画素数ＷＤより小さいかどうかを判定する（ステップＳ４０７）。この判定結果がＹＥＳの場合、着目画素Ｐｘが画面の右端から１２画素分よりも左にあるか、すなわち（ＷＤ−ＣＷＭ）の値が１２以上であるかどうかを判定する（ステップＳ４０８）。
この判定結果がＹＥＳの場合には、マトリクス領域ＭＭの縦のサイズを表す変数ＭＴｗに１２を代入する（ステップＳ４０９）。判断結果がＮＯの場合は、変数ＭＴｗに（ＷＤ−ＣＷＤ）の値を代入する（ステップＳ４１０）。このようにして、着目画素が画面の右端付近にある場合のマトリックス領域のサイズを調整する。
次に、そのときのカウンタＣＬＮ，ＣＷＤの値で示される着目画素について、サイズがＭＴｈ×ＭＴｗで表されるマトリクス領域ＭＭ内の全画素のＺ値（ｚｉｎｆｏ）の合計値ＳＭ１を算出する（ステップＳ４１１）。そして、マトリクス領域ＭＭのＺ値の平均値であるＳＭ１／（ＭＴｈ＊ＭＴｗ）をｏｕｔｉｎｆｏに代入する（ステップＳ４１２）。
これで１画素分の処理が完了したので、次にカウンタＣＷＤの値を１つ増やし（ステップＳ４１３）、ステップＳ４０７へ戻り、着目画素を変えて同様の処理を行う。また、ステップＳ４０７の判定結果がＮＯになるときには、１行分の画素についての処理が終了したので、カウンタＣＬＮの値を１つ増やして（ステップＳ４１４）、ステップＳ４０２へ戻り、同様の処理を繰り返す。以上のようにして、全画素について本処理を行う。
＜Ｂ−４．分布補正処理＞
次に、分布補正処理（図７、ステップＳ１０７）について説明する。
上記平滑化処理を経て算出された各画素のＺ値は、画像全体のＺ値の平均に依存するので、その分布が偏っている場合がある。この例を示したのが図１７の上図である。このＺ値をそのまま用いて立体視画像を作成すると、自然な立体感が得られないものとなってしまう。そこで、Ｚ値分布を図１７の下図のように補正するのが本処理である。
以下、図１８および図１９を参照し、具体的に説明する。ここで、「＊ｚ＿ｉｍａｇｅ」はＺ値を格納した領域を示すポインタ、ａｖｅ＿ｚは全画素の平均のＺ値、「ｍａｘ＿ｚ」および「ｍｉｎ＿ｚ」はそれぞれＺ値の最大値、最小値を表し、「＊ａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅ」は補正後のＺ値を格納する領域を示すポインタである。
まず、ｍａｘ＿ｚ，ｍｉｎ＿ｚ，ａｖｅ＿ｚをそれぞれ算出する（ステップＳ５０１）。次いで、分布の拡がり度を表す変数ｍａｘ＿ｓｐａｎおよび変数ｍｉｎ＿ｓｐａｎに、それぞれ（ｍａｘ＿ｚ−ａｖｅ＿ｚ）の値および（ｍｉｎ＿ｚ−ａｖｅ＿ｚ）の値を代入する（ステップＳ５０２）。
次に、色深度が１６ビットであるかどうかを判定する（ステップＳ５０３）。１６ビット場合は、階調度を表す変数「ｍａｘ」に３１を代入し（ステップＳ５０４）する。色深度が２４ビットまたは３２ビットの場合（ステップＳ５０３、ＮＯ）、変数ｍａｘに２５５を代入する（ステップＳ５０５）。
次いで、カウンタＣＬＮを０にセットし、着目画素におけるＺ値の修正分を表すポインタ変数＊ｐｚ＿ｉｍａｇｅにｚ＿ｉｍａｇｅが格納されるアドレスを格納する（ステップＳ５０６）。続いて、カウンタ値ＣＬＮが縦幅画素数ＨＴよりも小さいかどうかを調べる（ステップＳ５０７）。この判定結果がＮＯの場合、全ての画素について処理が終了したと判定し、分布補正処理を終了する。
この判定結果がＹＥＳの場合、カウンタＣＷＤを０にセットし（ステップＳ５０８）、カウンタＣＷＤの値が横幅画素数ＷＤよりも小さいかどうかを判定する（ステップＳ５０９）。この判定結果がＮＯのときは、１行分の画素の処理が終了したと判定し、カウンタＣＬＮの値を１つ増やし（ステップＳ５１０）たのち、ステップＳ５０７へ戻り、次行の画素の処理を行う。
また、ステップＳ５０９の判定結果がＹＥＳになるときには、ｐｚ＿ｉｍａｇｅの値がａｖｅ＿ｚよりも大きいかどうかを判定する（ステップＳ５１１）。ｐｚ＿ｉｍａｇｅ＞ａｖｅ＿ｚ、すなわちＺ値が平均値よりも大きい場合は、Ｚ値の修正分を表す変数ｚに、（ｚ−ａｖｅ＿ｚ）／ｍａｘ＿ｓｐａｎ＊（ｍａｘ−ａｖｅ＿ｚ）の値を代入する（ステップＳ５１２）。
ステップＳ５１１の判定結果がＮＯの場合は、さらに、＊ｐｚ＿ｉｍａｇｅ＜ａｖｅ＿ｚであるか否かを判定する（ステップＳ５１３）。ステップＳ５１３の判定結果がＹＥＳになるときには、変数ｚに、（ｚ−ａｖｅ＿ｚ）／（ｍｉｎ＿ｚ−ａｖｅ＿ｚ）＊ｍｉｎ＿ｓｐａｎの値を代入する（ステップＳ５１４）。ステップＳ５１３の判定結果がＮＯになるとき、すなわち、＊ｐｚ＿ｉｍａｇｅの値が画素平均値ａｖｅ＿ｚに等しいときには、変数ｚに０を代入する（ステップＳ５１５）。
このようにして、変数ｚを算出すると、＊ａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅに、＊ｐｚ＿ｉｍａｇｅ＋ｚの値を代入する（ステップＳ５１６）。以上により、当該画素について補正後のＺ値が格納される。
次に、ｐｚ＿ｉｍａｇｅの値、ａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅの値、ＣＬＮの値をそれぞれ１つ増やしたのち（ステップＳ５１７）、ステップＳ５０９へ戻り、注目画素を替えて同様の処理を行う。これを繰り返し、全画素について同様の処理を行う。
＜Ｂ−５．局所補正処理＞
次に、局所補正処理（図７、ステップＳ１０８）について説明する。
以上の処理を行ってＺ値を補正しても、まだ十分ではない場合がある。具体的には、一つの被写体におけるＺ値分布に歪みが生じる場合がある。例えば、本来、球形の物体内ではＺ値は中心から放射状に緩やかに変化するべきところ、何らかの原因で、ある部分の画素だけそのＺ値が極端に大きい（小さい）という場合が生じ得る。あるいは、そのＺ値の分布にムラがある場合もあり得る。
このようなＺ値を用いて立体視用画像を作成すると、当該被写体の奥行きの順序性が歪み、一物体として認識されるべき被写体の画像が不自然なものとなってしまう。そこで、この局所補正処理においては、一以上の被写体を抽出して、被写体毎に画素のＺ値を補正するのである。
この処理の概要を、図２０および図２１を参照して説明する。まず、ステップＳ１０７までの処理で得られたＺ値の範囲（段階数）を修正する（図２１、ステップＳ７００）。次に、修正後のＺ値が等しい画素により表されるＺ値の等高線（ＨＬ０〜ＨＬ５）を求める（ステップＳ７０１）。次に、得られた等高線に基づいて被写体（図２０：ＯＢ１、ＯＢ２）を特定する（ステップＳ７０２）。さらに、該被写体のＺ値に関する中心点ＰＰｃのｙ座標を求め、ＰＰｃから引いた垂線ＶＬと各等高線との交点のｙ座標を算出する（ステップＳ７０３）。そして、これら算出した座標を用いて被写体にかかる画素のＺ値を求める（ステップＳ７０４、Ｓ７０５）。最後に、隣り合う２つの等高線で囲まれた領域（これを等高面という）毎に、該領域内の画素のＺ値を補正する（ステップＳ７０６）。ただし、等高線が一本しかない場合は、該等高線の内側の領域が等高面となる。以下、各処理について詳説する。
（ａ）階調数修正
上述したように、立体視画像における画素移動量の最小の単位はひとつの画素である。すなわち、ひとつの画素よりも小さい量を画素移動量として設定することはできない。従って、Ｚ値が「１」だけ増加するごとに画素移動量をその最小単位である画素ひとつ分だけ増加させるとしても、Ｚ値が最大値たる「２５５」である場合には画素移動量が画素２５６個分に相当する大きさとなる。しかしながら、画素移動量があまりに大きくなると（例えば画面上で８ｍｍ以上になると）立体視画像を視認する利用者に目の疲労が生じやすくなり、さらには利用者が立体として知覚しにくくなるといった問題が生じ得る。このため、ＣＰＵ１１は、ステップＳ１０７までの処理で得られた各画素のＺ値をいくつかの段階の離散値に近似するための処理を行う。
具体的には、ＣＰＵ１１は、画素ごとに、ステップＳ１０７により得られたＺ値を丸め係数ＭＫで除し、この除算結果を整数化（小数点の切り捨て、切り上げ、または四捨五入）した数値に対して同じ丸め係数ＭＫを乗算する。この結果、各画素のＺ値は丸め係数ＭＫの整数倍に相当する数値に近似される。
すなわち、丸め係数ＭＫは、Ｚ値が近似されるべき各離散値の間隔の大きさを表す数値であるということができる。本実施形態においては、この丸め係数ＭＫとして、Ｚ値の取り得る値の最大値（２５５）を、ユーザにより指定される被写体深度Ｏｂで除した値を整数化した数値が用いられる。この被写体深度Ｏｂは、近似により得られたＺ値がとり得る値の段階数を表す。例えば、ＭＫ＝１０とすれば、とり得るＺ値の範囲は０、１、２、３、・・・２５の２６段階となる。
（ｂ）等高線算出
次に、図２２〜２４を参照して、等高線算出処理について詳説する。ここで、＊ｏｕｔｌｉｎｅは輪郭抽出基礎データの格納領域を示すポインタ、＊ｃｏｒｄはＺ値ベクトル格納用領域を示すポインタである。また、ｃｏｒｄは、Ｖｉｎｆｏという構造体のデータであり、Ｖｉｎｆｏという構造体は、Ｚ値、ｎｐｏｉｎｔ（整数値）、および、＊ｐｏｉｎｔ（座標データ）というデータ要素を持つ。
まず、ＣＰＵ１１は、定数ｍａｘに、２５５を丸め係数ＭＫで除算した結果を代入し、処理が終わった画素の数を表す変数Ｔａｒｇｅｔ＿ｚに０を代入する（ステップＳ７１０）。
次に、変数Ｔａｒｇｅｔ＿ｚの値が所定の定数ｍａｘよりも大きくなったかどうかを判定する（ステップＳ７１１）。判定結果がＮＯになるときには、この処理を終了する。判定結果がＹＥＳになるときには、カウンタＣＬＮを０にセットし（ステップＳ７１２）、カウンタＣＬＮの値がＨＴよりも小さいかどうかを判定する（ステップＳ７１３）。この判定結果がＮＯの場合は、Ｔａｒｇｅｔ＿ｚの値を１つ増やして（ステップＳ７１４）、ステップＳ７１１へ戻る。ステップＳ７１３の判定結果がＹＥＳになる場合は、カウンタＣＷＤに０を代入し、変数Ｐ１に−１を代入し、変数Ｐ２に−１を代入し、変数ｆｎｄに０を代入する（ステップＳ７１５）。
次に、カウンタＣＷＤの値がＷＤより小さいかどうかを調べ（ステップＳ７１６）、ステップＳ７１６の判定結果がＹＥＳになるときには、＊ｏｕｔｌｉｎｅの値がＴａｒｇｅｔ＿ｚの値に等しいかどうかを判定する（ステップＳ７１７）。ステップＳ７１７の判定結果がＹＥＳになるときには、変数Ｐ１の値が０以上であるかどうかを調べ（ステップＳ７１８）、この判定結果がＮＯの場合は、変数Ｐ１にカウンタＣＷＤの値を代入し（ステップＳ７１９）、カウンタＣＷＤの値を１つ増やして（ステップＳ７２０）、ステップＳ７１６へ戻る。また、ステップＳ７１８の判定結果がＹＥＳになるときには、ステップＳ７２０へ移行し、それ以降の処理を実行する。
また、ステップＳ７１７の判定結果がＮＯの場合は、変数Ｐ１の値が０以上であるかどうかを判定する（ステップＳ７２１）。この判定結果がＹＥＳの場合は、変数Ｐ２にカウンタＣＷＤの値を代入し、変数ｆｎｄの値を１つ増やし（ステップＳ７２２）、ステップＳ７２０へ移行し、それ以降の処理を同様に実行する。また、ステップＳ７２１の判定結果がＮＯの場合は、ステップＳ７２０へ移行し、それ以降の処理を同様に実行する。
また、ステップＳ７１６の判定結果がＮＯの場合は、変数ｆｎｄの値が０よりも大きいかどうかを判定し（ステップＳ７２３）する。この判定結果がＮＯの場合は、カウンタＣＬＮの値を１つ増やして（ステップＳ７２４）、ステップＳ７１３へ戻る。
また、ステップＳ７２３の判定結果がＹＥＳの場合は、当該画素位置について、Ｚ値が変化している近傍の画素を探索する。具体的には、図２３の左側に示した順序に従って探索していく。すなわち、まず、注目画素Ｐ１と右上位置にある画素のＺ値を比較する（ステップＳ７３０）。２つのＺ値が等しい場合は（ステップＳ７３０、ＮＯ）、画素Ｐ１の真上にある画素のＺ値と注目画素のＺ値を比較する（ステップＳ７３１）。以下同様にして、注目画素の周囲６つの画素について比較判定を行う（ステップＳ７３２〜Ｓ７３５）。この探索順序の模式図を図２３の右側に示す。
注目画素Ｐ１のＺ値と異なるＺ値を持つ画素を発見した場合（ステップＳ７３０，７３１，７３２，７３３，７３４，７３５、ＹＥＳ）は、見つけた画素の座標が既に発見済であるかどうかを調べて、近傍の画素を全て調べたかを判定する（ステップＳ７３６）。このようにして、１画素ずつＺ値の異なるエッジ部分を検出してゆく。エッジ部分を全て調べ終えた場合（ステップＳ７３６、ＹＥＳ）この処理を終了する。
また、ステップＳ７３６の判定結果がＮＯの場合は、ｃｏｒｄのｐｏｉｎｔのｘおよびｙの値に、それぞれ発見した画素のｘ座標の値、ｙ座標の値を格納する（ステップＳ７３７）。次に、ｃｏｒｄのｐｏｉｎｔの値およびｎｐｏｉｎｔの値をそれぞれ１つ増やし（ステップＳ７３８およびＳ７３９）、注目画素Ｐ１を当該発見した画素の位置に移動して（ステップＳ７４０）、ステップＳ７３０へ戻り、次の画素について処理を行う。このようにしてエッジ部分を順次検出していくと、一本の等高線が求まる。
（ｃ）被写体中心特定
次に、図２５〜２７を参照して、被写体中心特定処理（図２１、ステップＳ７０２）を説明する。本処理においては、一つの被写体にかかる等高線のなかで最内にあるものに外接する矩形の頂点の座標を求め、当該矩形の中心を当該被写体のＺ値の中心とする。なお、ｃｅｎｔ＿ｃｏｒｄは最内の矩形を格納するベクトル領域を示すポインタ、ｃｅｎｔｅｒは求める中心点の座標データ、＊ｓｉｄｅ＿ｃｏｒｄは求める矩形（ただし最内ではない）を格納するベクトル領域を示すポインタである。
まず、ＣＰＵ１１は、処理対象となる等高線を１つ選択し（ステップＳ７５０）。次に、この等高線上の画素のｘ座標およびｙ座標の最小値および最大値を表す変数ｇ＿ｍｉｎ＿ｘ、ｇ＿ｍａｘ＿ｘ、ｇ＿ｍｉｎ＿ｙ、およびｇ＿ｍａｘ＿ｙの値を初期設定する（ステップＳ７５１）。なお、図２５においては、便宜上、ｇ＿ｍｉｎ＿ｘの初期値は９９９９９９としているが、ＷＤよりも大きければどのような値でもよい。＿ｍｉｎ＿ｙについても同様である。また、ｃｏｒｄｐにｃｏｒｄの値を代入する（ステップＳ７５２）。
次に、ｃｏｒｄｐのｎｐｏｉｎｔの値が０よりも大きいかどうかを判定する（ステップＳ７５３）。この判定結果がＮＯの場合は、全ての等高線についての処理が終了したかどうかを判定する（ステップＳ７５４）。この判定結果がＮＯの場合、ステップＳ７５０へ戻り、次の等高線についての処理を行う。また、ステップＳ７５４の判定結果がＹＥＳの場合、処理を終了する。
ステップＳ７５３の判定結果がＹＥＳになるときには、変数の初期設定を行う。具体的には、カウンタＣＮＴの値を０にセットし（ステップＳ７５５）、ｍｉｎ＿ｘに９９９９９９を代入し、ｍａｘ＿ｘに０を代入し、ｍｉｎ＿ｙに９９９９９９を代入し、ｍａｘ＿ｙに０を代入し（ステップＳ７５６）、変数ＰＮＴにｃｏｒｐｄのｐｏｉｎｔの値を代入する。
次いで、カウンタＣＮＴの値がｃｏｒｄｐのｎｐｏｉｎｔよりも小さいか、すなわち、一本の等高線にかかる画素の全てに関し処理が完了したか否かを判定する（ステップＳ７５７）。完了していない場合（ステップＳ７５７、ＹＥＳ）、変数ＰＮＴのｘの値がｍｉｎ＿ｘよりも小さいかどうかを判定する（ステップＳ７５８）。この判定結果がＹＥＳの場合、水平最小位置をｐ１に代入する。すなわち、ｐ１．ｘの値にＰＮＴのｘの値を代入し、ｐ１．ｙの値にＰＮＴのｙの値を代入し、ｍｉｎ＿ｘの値にｐ１．ｘの値を代入する（ステップＳ７５９）。この判定結果がＮＯの場合は、ステップＳ７５９は実行しない。
次いで、ＰＮＴのｘの値がｍａｘ＿ｘよりも大きいかどうかを判定する（ステップＳ７６０）。この判定結果がＹＥＳの場合、水平最大位置をｐ２に代入する。すなわち、ｐ２．ｘの値にＰＮＴのｘの値を代入し、ｐ２．ｙの値にＰＮＴのｙの値を代入し、ｍａｘ＿ｘの値にｐ２．ｘの値を代入する（ステップＳ７６１）。この判定結果がＮＯの場合、ステップＳ７６１は実行しない。
次に、変数ＰＮＴのｙの値が、ｍｉｎ＿ｙよりも小さいかどうかを判定する（ステップＳ７６２）。この判定結果がＹＥＳの場合は、垂直最小位置をｐ３に代入する。すなわち、ｐ３．ｘの値にＰＮＴのｘの値を代入し、ｐ３．ｙの値にＰＮＴのｙの値を代入し、ｍｉｎ＿ｙの値にｐ３．ｙの値を代入する（ステップＳ７６３）。この判定結果がＮＯの場合は、ステップＳ７６３は実行しない。
次いで、変数ＰＮＴのｙの値がｍａｘ＿ｙよりも大きいかどうかを判定する（ステップＳ７６４）。この判定結果がＹＥＳの場合は、垂直最大位置をｐ４に代入する。すなわち、ｐ４．ｘの値にＰＮＴのｘの値を代入し、ｐ４．ｙの値にＰＮＴのｙの値を代入し、ｍａｘ＿ｙの値にｐ４．ｙの値を代入する（ステップＳ７６５）。この判定結果がＮＯの場合は、ステップＳ７６５は実行しない。そして、カウンタＣＮＴの値を１つ増やし、ＰＮＴの値を１つ増やして（ステップＳ７６６）、ステップＳ７５７へ戻る。
外接矩形の頂点が算出されると（ステップＳ７５７、ＮＯ）、ｐ１．ｘの値がｇ＿ｍｉｎ＿ｘの値よりも小さいかどうか、すなわち求めた矩形が最内にあるか否かを判定する（ステップＳ７６７）。矩形が最内にある場合（ステップＳ７６７、ＹＥＳ）、ｃｏｒｄｐをｃｅｎｔ＿ｃｏｒｄに格納し（ステップＳ７６８）、ｇ＿ｍｉｎ＿ｘにｐ１．ｘの値を代入する（ステップＳ７６９）。次いで、決定された最内の矩形の頂点である（ｐ１．ｘ、ｐ３．ｙ）と点（ｐ２．ｘ、ｐ４．ｙ）を結ぶ線分と、点（ｐ２．ｘ、ｐ３．ｙ）と点（ｐ１．ｘ、ｐ４．ｙ）を結ぶ線分との交点を求め、このｘ座標とｙ座標の値を、それぞれｃｅｎｔｅｒ．ｘおよびｃｅｎｔｅｒ．ｙに格納する（ステップＳ７７０）。なお、矩形が最内のものでない場合（ステップＳ７６７、ＮＯ）、ステップＳ７６８〜７７０を実行しない。
次に、ｐ２．ｘがｇ＿ｍａｘ＿ｘよりも大きいかを判定する（ステップＳ７７１）。ｐ２．ｘ＞ｇ＿ｍａｘ＿ｘである場合（ステップＳ７７１、ＹＥＳ）、ｃｏｒｄｐをｓｉｄｅ＿ｃｏｒｄに格納し、ｇ＿ｍａｘ＿ｘにｐ２．ｘを代入する（ステップＳ７７２、Ｓ７７３）。なお、ｐ２．ｘ＞ｇ＿ｍａｘ＿ｘでない場合（ステップＳ７７１、ＮＯ）、ステップＳ７７２およびＳ７７３を実行しない。そして、ｃｏｒｄｐの値を１つ増やし（ステップＳ７７４）、ステップＳ７５３へ戻り、別の等高線に対して同様の処理を繰り返す。
（ｄ）交点算出
図２８を参照し、交点算出処理（図２１、ステップＳ７０３）について詳説する。ここで、ｐ［］は、交点の座標データを格納する配列である。
まず、等高線を１つ選択し（ステップＳ７８０）、ｃｏｒｄｐにｃｏｒｄを代入し、変数ｆｉｎｄを０に初期設定する（ステップＳ７８１）。次いで、ｃｏｒｐｄのｎｐｏｉｎｔの値が０よりも大きいかどうかを判定する（ステップＳ７８２）。この判定結果がＮＯの場合は、全ての等高線の処理が終了したかどうかを判定する（ステップＳ７８３）。ステップＳ７８３の判定結果がＮＯの場合は、ステップＳ７８０へ戻り、次の等高線について処理を実行する。また、ステップＳ７８３の判定結果がＹＥＳの場合は、この交点算出処理を終了する。
ステップＳ７８２の判定結果がＹＥＳの場合は、変数ＰＮＴにｃｏｒｄｐのｐｏｉｎｔの値を代入し、カウンタＣＮＴの値を０に初期設定する（ステップＳ７８４）。次に、カウンタＣＮＴの値が、ｃｏｒｄｐのｎｐｏｉｎｔよりも小さいかどうかを判定する（ステップＳ７８５）。この判定結果がＹＥＳになるときには、更にＰＮＴ．ｘとｃｅｎｔｅｒ．ｘとが等しいかどうかを判定する（ステップＳ７８６）。
ステップＳ７８６の判定結果がＹＥＳの場合は、更に、ＰＮＴ．ｙがｃｎｅｔｅｒ．ｙよりも大きいかどうかを判定する（ステップＳ７８７）。この判定結果がＹＥＳの場合は、中心点から垂直に下ろした垂線と等高線との交点を求める。すなわち、ｐ［ｆｉｎｄ］．ｘにＰＮＴ．ｘの値を代入し、ｐ［ｆｉｎｄ］．ｙにＰＮＴ．ｙの値を代入する（ステップＳ７８８）。
次いで、ｆｉｎｄの値を１つ増やし（ステップＳ７８９）、また、データの終端を示すために、ｐ［ｆｉｎｄ］．ｘとｐ［ｆｉｎｄ］．ｙにそれぞれ−１を代入する（ステップＳ７６０）。次に、ｃｏｒｄｐの値を１つ増やして（ステップＳ７９１）、ステップＳ７８２へ戻る。
また、ステップＳ７８６またはＳ７８７の判定結果がＮＯの場合は、ＣＮＴの値を１つ増やし、ＰＮＴの値を１つ増やして（ステップＳ７９２）、ステップＳ７８５へ戻り、同様の処理を繰り返す。ステップＳ７８５の判定結果がＮＯになるときには、ステップＳ７９１へ進む。
（ｅ）面内Ｚ値算出
図２９を参照して、面内Ｚ値算出処理（図２１、ステップＳ７０４）を詳説する。本処理においては、算出された被写体中心および交点の座標を用いて、等高面内の画素のＺ値を新たに算出する。ここで、定数ｄｉｓｔは、画面上に表示される画像をカメラで撮影したと仮定した場合における、カメラから表示画面までの距離、定数ｆｏｃｕｓは上記カメラの焦点距離、ｎｅｗ＿ｚ［］は、本処理で算出されるＺ値を格納する配列である。
まず、ＣＰＵ１１は、等高面を１つ選択したのち（ステップＳ７９５）、カウンタＣＮＴの値を０に初期設定する（ステップＳ７９６）。次に、ｃｅｎｔ＿ｈにＨＴからｃｅｎｔｅｒ．ｙを減じた値を代入し、被写体の奥行き度を表すｏｂｊｅｃｔ＿ｈに、（ｄｉｓｔ／ｆｏｃｕｓ＊ｃｅｎｔ＿ｈ）の値を代入する（ステップＳ７９７）。
次いで、ｐ［ＣＮＴ］．ｘの値が０以上であるかどうかを判定する（ステップＳ７９８）。この判定結果がＹＥＳの場合は、ｎｅｗ＿ｚ［ＣＮＴ］に、（ｏｂｊｅｃｔ＿ｈ＊ｆｏｃｕｓ／（ｐ［ＣＮＴ］．ｙ−ｃｅｎｔｅｒ．ｙ）−ｄｉｓｔ）の値を代入する（ステップＳ７９９）。すなわち、ある等高面内の画素のＺ値を、被写体のＺ値の中心点から該画素までの距離のｙ成分に比例するように補正するのである。
そして、カウンタＣＮＴの値を１つ増やして（ステップＳ８００）、ステップＳ７９８へ戻り、同様の処理を行う。ステップＳ７９８の判定結果がＮＯになるときには、全ての等高面について処理が終了したかどうかを調べ（ステップＳ８０１）、ステップＳ８０１の判定結果がＮＯになるときには、ステップＳ７９５へ戻り、他の等高面に対しての処理を行う。また、ステップＳ８０１の判定結果がＹＥＳになるときには、この処理を終了する。
（ｆ）面内修正値算出
本処理においては、図２１に示したステップＳ７０４にて算出されたＺ値を用いて、等高面内にある画素のＺ値の修正値を算出する。以下、図３０を用いて本処理を詳説する。なお、ａｄｊｕｓｔ＿ｏｕｔｌｉｎｅ［］は、補正後のＺ値と元のＺ値との差分を格納する配列である。
まず、算出した交点を１つ選択し（ステップＳ８０５）、カウンタＣＮＴの値に１を代入する（ステップＳ８０６）。次に、ｐ［ＣＮＴ］．ｘの値が０以上であるかどうかを判定する（ステップＳ８０７）。この判定結果がＮＯの場合は、１つの交点についての処理が終了したと判定し、更に、全ての交点に対する処理を終了したかどうかを判定する（ステップＳ８０８）。ステップＳ８０８の判定結果がＮＯになるときには、ステップＳ８０５へ戻り、他の交点についての処理を行う。また、ステップＳ８０８の判定結果がＹＥＳの場合は、本処理を終了する。
ステップＳ８０７の判定結果がＹＥＳの場合は、変数ｏｚ１に（ｐ［ＣＮＴ−１］．ｘ，ｐ［ＣＮＴ−１］．ｙ−１）の座標のＺ値を代入し（ステップＳ８０９）、変数ｏｚ２に（ｐ［ＣＮＴ］．ｘ，ｐ［ＣＮＴ］．ｙ−１）の座標のＺ値を代入する（ステップＳ８１０）。次に、変数ｓｕｂ１に（ｏｚ２−ｏｚ１）の値を代入し（ステップＳ８１１）、変数ｓｕｂ２に補正後のＺ値の増分である（ｎｅｗ＿ｚ［ＣＮＴ］−ｎｅｗ＿ｚ［ＣＮＴ−１］）の値を代入する（ステップＳ８１２）。
次に、ｓｕｂ１とｓｕｂ２の符号が同一であるかどうかを判定する（ステップＳ８１３）。符号が同一である場合（ステップＳ８１３、ＹＥＳ）、ａｄｊｕｓｔ＿ｏｕｔｌｉｎｅ［ＣＮＴ］に０を代入する（ステップＳ８１４）。符号が異なる場合（ステップＳ８１３、ＮＯ）、ａｄｊｕｓｔ＿ｏｕｔｌｉｎｅ［ＣＮＴ］に（ｓｕｂ２−ｓｕｂ１）の値を代入する（ステップＳ８１５）。次に、カウンタＣＮＴの値を１つ増やして（ステップＳ８１６）、ステップＳ８０７へ戻る。
（ｇ）被写体内Ｚ値補正
このＺ値補正処理では、ステップＳ７０５にて算出された面内修正Ｚ値を用いて、被写体内にある画素のＺ値を補正する。以下、図３１を参照して、被写体内Ｚ値補正処理（図７、ステップＳ１０９）を詳説する。なお、＊ａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅは修正Ｚ値を格納する領域を示すポインタである。
まず、カウンタＣＬＮに０を代入し（ステップＳ９０１）、次にＣＬＮの値がＨＴより小さいかどうかを判定する（ステップＳ９０２）。この判定結果がＮＯの場合は、本処理を終了する。この判定結果がＹＥＳの場合は、カウンタＣＷＤに０を代入し（ステップＳ９０３）、続いて、ＣＷＤがＷＤよりも小さいかどうかを判定する（ステップＳ９０４）。ステップＳ９０４の判定結果がＹＥＳの場合は、そのときの注目画素に対応するａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅを取得し（ステップＳ９０５）、ｚ＿ｉｍａｇｅを、ｚ＿ｉｍａｇｅとａｄｊｕｓｔ＿ｚ＿ｉｍａｇｅを加算した値で更新する（ステップＳ９０６）。以上で、一画素分の処理が終了する。
次いで、ＣＬＮの値を１つ増やし（ステップＳ９０７）、ステップＳ９０４へ戻り、次の画素について同様の処理を行う。ステップＳ９０４の判定結果がＮＯの場合は、ＣＷＤの値を１つ増やして（ステップＳ９０８）、ステップＳ９０２へ戻り、次行にかかる画素について処理を行う。以上の処理を繰り返し、全画素についてＺ値を補正する。
＜Ｂ−６．画素移動処理＞
本処理においては、以上の処理により算出されたＺ値、およびユーザが指定したパラメータに基づいて視差値（画素移動量）を決定し、この移動量に従って画素を左右に移動させる。図３２に、画像移動処理（図７、ステップＳ１１０）の概要を示す。ここで、＊ｉｍａｇｅ３ｄは立体視画像データを格納する領域を示すポインタである。
まず、カウンタＣＬＮを０にセットし（ステップＳ１００１）、ＣＬＮがＨＴより小さいかどうかを判定する（ステップＳ１００２）。この判定結果がＮＯの場合は、本処理を終了する。この判定結果がＹＥＳの場合は、カウンタＣＷＤを０に初期設定する（ステップＳ１００３）。
次いで、ＣＷＤがＷＤよりも小さいかどうかを判定する（ステップＳ１００４）。この判定結果がＹＥＳの場合は、このときのｏｕｔｉｎｆｏに対応したＺ値の範囲を補正する（ステップＳ１００５）。以下、これによって得られたＺ値をＺＺと称する。図３３を参照してこのＺＺ算出処理を具体的に説明する。
まず、丸め係数ＭＫを用いてＺ値のとり得る範囲を修正する（ステップＳ１０２０およびＳ１０２１）。この処理は、図７に示したステップＳ７００において説明した処理と同様である。以下では、ステップＳ１０２０およびＳ１０２１を行って得られたＺ値をＺＺと記する。
次に、ＺＺの値が上限値よりも大きいかどうかを判定する（ステップＳ１０２２）。この上限値は、ユーザによって上述した設定ダイアログパネルの入力窓ＩＢ３に入力されたものである。ＺＺ値が上限値を越えている場合は（ステップＳ１０２２、ＹＥＳ）、ＺＺを当該上限値に置き換える（ステップＳ１０２３）。同様に、ＺＺの値が下限値よりも小さいかどうかを判定する（ステップＳ１０２４）。この下限値は、ユーザによって上述した設定ダイアログパネルの入力窓ＩＢ４に入力された値である。ＺＺ値が下限値を下回っている場合（ステップＳ１０２４、ＹＥＳ）、ＺＺを当該下限値で置き換える。
このようにして、上限基準値や下限基準値の処理で特定の値を超えるＺ値を一定範囲内に収まるように修正する。この処理は、Ｚ値が高い画素やＺ値が低い画素の数は画像データ全体の画素数に比べて非常に少ない数という事実を利用したものである。このように、画素クロス現象が発生しない範囲でＺ値のとり得る範囲を修正することにより、生成される立体視画像の質を効果的に高めることができる。
再び図３２へ戻り、続いて得られたＺＺ値を用いて視差値ＳＳを算出する。この処理を、図３４を用いて具体的に説明する。まず、ステップＳ１０５の逆転判定処理において、Ｚ値を反転する決定がなされていたかを判定する（ステップＳ１０３０）。反転の決定がされていた場合（ステップＳ１０３０、ＹＥＳ）、ＺＺに（２５６−ＺＺ）の値を代入する（ステップＳ１０３１）。
次に、ＺＺにインタフェース深度を加算して、その判定結果を視差値ＳＳに代入して（ステップＳ１０３２）この処理を終了する。このインタフェース深度は、上述した設定ダイアログパネルの入力窓ＩＢ１に入力された値である。
なお、反転しない旨の決定がなされていた場合（ステップＳ１０３０、ＮＯ）、そのままステップＳ１０３２へ処理を移行する。
再び図３２へ戻り、このようにして視差値ＳＳが算出されると、次にカウンタＣＬＮの値の偶奇を判定する（ステップＳ１００７）。偶数である場合（ステップＳ１００７、ＹＥＳ）、画素移動値ＭＶに（ＣＮ＋ＳＳ）の値を代入し（ステップＳ１００８）、奇数である場合はＭＶに（ＣＮ−ＳＳ）の値を代入する（ステップＳ１００９）。このようにして、右目用と左目用とで反対方向に画素を移動させる。最後に、元画像データの（ｓｒｃ＋ＭＶ）の位置の画素データをｉｍａｇｅ３ｄへ格納する（ステップＳ１０１０）。以上で一画素分の処理が終了した。
次に、ｉｍａｇｅ３ｄの値を１つ増やし、ｏｕｔｉｎｆｏの値を１つ増やし、カウンタＣＷＤの値を１つ増やして（ステップＳ１０１１）、ステップＳ１００４へ戻り、次の画素について同様の処理を行う。これを繰り返し、一行分の画素について処理を行う。一行分の画素の処理が終了したら（ステップＳ１００４、ＮＯ）、ｓｒｃを次の行頭へ進め（ステップＳ１０１２）、ＣＬＮの値を１つ増やして（ステップＳ１０１３）、ステップＳ１００２へ戻り、同様の処理を繰り返す。これを繰り返し、全ての行に関して処理が終了すると、（ステップＳ１００２、ＮＯ）本処理が完了する。
このように、一物体として認識されるべき被写体ごとにＺ値の補正が行われるため、被写体内の奥行きの順序性が担保され、生成される立体視画像はより現実感のあるものとなる。
以上示したように、本実施形態においては、Ｚ値に上述した補正をすることにより、質の高い立体視画像を生成することができる。また、立体視画像の生成に当たっては、ユーザが設定ダイアログパネルで入力した入力値が用いられるので、ユーザの好みに応じた立体視画像を生成することができる。
なお、本実施形態においては、図７に示すステップＳ１０３からＳ１０９までの補正処理を連続して実行したが、必ずしも全てを実行する必要はない。適宜、好適な補正処理を組み合わせて実行することが可能であることはいうまでもない。
＜Ｃ．変形例＞
＜１．強調処理＞
ところで、図２０に示したような画面ＧＧに含まれる複数の被写体のうち、特定のもののみの立体感を意図的に強調するような効果を立体視画像に与えることが可能である。例えば、動画において、ある物体が奥行き方向の動きに特徴があるような場合、このような効果を与えることは有用である。これを模式的に表したのが図３５である。これを実現させるためには、同図に示すように、被写体ＯＢａに含まれる全ての等高面のＺ値に所定値を加算すればよい。
図３６は、この場合に、立体視表示モードが選択された場合に行われる処理の一例を示している。画像移動処理（ステップＳ１１１１）の直前に強調処理（ステップＳ１１１０）が追加されている点である。ステップＳ１１０１〜Ｓ１１０９およびＳ１１１１の処理は第１実施形態と同様であるから、その説明を省略する。
以下、図３７を参照して、強調処理（ステップＳ１１１０）を説明する。ここで、ｏｆｆｓｅｔ＿ｚは被写体を強調させる度合いを表す量である。まず、ステップＳ１１２０〜Ｓ１１２２において終了判定を行う。すなわち、カウンタＣＬＮの値を０に設定し（ステップＳ１１２０）、ＣＬＮがＨＴよりも小さいかどうかを判定する（ステップＳ１１２１）。この判定結果がＮＯの場合は、本強調処理を終了する。この判定結果がＹＥＳの場合は、ＣＬＮの値を０に設定する（ステップＳ１１２２）。
次に、カウンタＣＷＤがＷＤより小さいかどうかを判定する（ステップＳ１１２３）。この判定結果がＹＥＳの場合は、座標（ＣＷＤ、ＣＬＮ）から画像上辺までの半直線を引き（ステップＳ１１２４）、この半直線と等高線との交点の数を求める（ステップＳ１１２５）。
そして、求めた交点数の偶奇を判定する（ステップＳ１１２６）。奇数である場合（ステップＳ１１２６、ＹＥＳ）、座標（ＣＷＤ、ＣＬＮ）は当該周縁矩形の内部に位置すると判定する（ステップＳ１１２７）。続いて、ｐｚ＿ｉｍａｇｅに（ｚ＿ｉｍａｇｅ＋ＣＬＮ＊ＷＤ＋ＣＷＤ）を代入し（ステップＳ１１２８）、＊ｐｚ＿ｉｍａｇｅに（＊ｐｚ＿ｉｍａｇｅ＋ｏｆｆｓｅｔ＿ｚ）の値を代入する（処理１１２９）。奇数である場合（ステップＳ１１２６、ＮＯ）、ステップＳ１１２７〜Ｓ１１２９を実行しない。以上で一画素について処理が終了した。
次いで、ＣＷＤの値を１つ増やし、ステップＳ１１２３へ戻り、次の画素について同様の処理を行う。これを繰り返し、全画素について処理を終えると、強調処理が完了する。
＜２．表示方式＞
上述した実施例では、立体視画像の表示方式として、表示部２１の表示画面の偶数ラインに左目画像を表示するとともに、奇数ラインに右目画像を表示するようにしたいわゆるＯｄｄ−ｅｖｅｎ方式のものを採用している。しかしながら本発明はこれに限定されず、例えば、表示部２１の表示画面の偶数ラインに右目画像を表示するとともに、奇数ラインに左目画像を表示するようにしたＯｄｄ−ｅｖｅｎ方式のものにも適用することができる。
あるいは、図３８に示すように、左目用画像データの偶数ラインを抽出してフレームバッファの上画像部分に格納するとともに、右目用画像データの奇数ラインを抽出してフレームバッファの下画像部分に格納する上下方式にも適用できる。この表示方式は、立体視プロジェクタ等で採用されているものである。逆に、右目用画像データの偶数ラインをフレームバッファの上画像部分に、左目用画像データの奇数ラインをフレームバッファの下画像部分に格納する方式にも適用可能である。
また、図３９に示すように、左目用画像データの偶数番目の画素を抽出してフレームバッファの左側画像部分に格納するとともに、右目用画像データの奇数番目の画素を抽出してフレームバッファの右側画像部分に格納する左右方式にも適用できる。この表示方式は、裸眼立体視用ＣＲＴ等に採用されているものである。逆に、右目用画像データの偶数番目の画素をフレームバッファの左側画像部分に、左目用画像データを奇数番目の画素をフレームバッファの右側画像部分に格納する方式にも適用可能である。
また、図４０に示すように、左目用画像データを偶数番目のフレームバッファに格納するとともに、右目用画像データの奇数番目のフレームバッファに格納する２フレーム方式にも適用できる。この表示方式は、立体視プロジェクタ等で採用されているものである。逆に、右目用画像データを偶数番目フレームのフレームバッファに、左目用画像データの奇数番目のフレームバッファに格納する方式にも適用できる。
また、図４１に示すように、左目用画像データと右目用画像データファイルとそれぞれ別々のファイルに格納するＯｄｄ−ｅｖｅｎファイル分離方式にも適用できる。この表示方式は立体視プロジェクタ等で採用されているものである。
＜３．データ格納領域＞
右目用画像と左目用画像を別領域に格納することも可能である。この場合は、画素移動処理（図７、ステップＳ１１０）を図４２に示すように行えばよい。図３２を用いて説明した第１実施形態にかかる画素移動処理と、本変形例の画素移動処理との違いは、図３２のステップＳ１００７〜Ｓ１０１１に替えて、図４２のステップＳ１０５７〜１０６０を行う点である。すなわち、左目用画像データと右目用画像データを、それぞれＬｉｍａｇｅ３ｄとＲｉｍａｇｅ３ｄで示される左目用画像データ領域と右目用画像データ領域に格納している点が異なる。
具体的には、ステップＳ１０５６において視差値ＳＳが算出されると、ＭＶ１に（ＣＮ＋ＳＳ）の値を代入するとともに、ＭＶ２に（ＣＮ−ＳＳ）の値を代入する（ステップＳ１０５７）。次いで、原画像データの（ｓｒｃ＋ＭＶ１）の位置の画素のデータをＬｉｍａｇｅ３ｄへ格納し（ステップＳ１０５８）、原画像データの（ｓｒｃ＋ＭＶ２）の位置の画素のデータをＲｉｍａｇｅ３ｄへ格納する（ステップＳ１０５９）。次に、Ｌｉｍａｇｅ３ｄの値を１つ増やし、Ｒｉｍａｇｅ３ｄの値を１つ増やし、ｏｕｔｉｎｆｏの値を１つ増やし、ＣＷＤの値を１つ増やして（ステップＳ１０６０）、ステップＳ１０５４へ戻り同様の処理を繰り返す。
＜４．データ種類＞
ところで、上述した実施形態では、処理対象とする画像データを、二次元カラー画像データとしているが、本発明は、白黒映画の動画データのような二次元白黒多階調画像データについても同様に適用することができる。また、上記実施形態では、加工される元画像データは動画データの１フレーム分のデータとしているが、静止画データであってもよいことは言うまでもない。
＜５．Ｚ値算出＞
上記実施形態においては、原画像のＲ値、Ｇ値、Ｂ値にそれぞれ０．５９、０．３、０．１１程度の係数を乗じたものをＺ値としていたが、係数の組み合わせはこれに限定されない。各ユーザが感じる立体感が最も自然となるように、あるいは各ユーザの好みに合わせて、当該係数を適宜変更することが可能である。また、画像の色表現として、ＲＧＢ表現ではなく輝度、彩度、色相に基づいた表現も用いてもよい。あるいは、ＡＲＧＢ表現（「Ａ」はアルファ色成分を表す）等を用いてもよいことは言うまでもない。
＜６．被写体特定＞
上記実施形態においては、Ｚ値の等高線を算出し、これに基づいて被写体を特定し、当該被写体に対応する画素のＺ値を補正していた。しかしながら、被写体を特定する方法はこれに限らない。例えば、輝度、彩度、あるいは色相情報から輪郭（エッジ）を検出し、該エッジで囲まれた領域を一物体であると判定してもよい。
＜第２実施形態＞
＜Ａ．装置の構成＞
以下、本発明の第２実施形態について説明する。なお、第１実施形態と同様の構成要素には同様の参照符号を付してある。第２実施形態が第１実施形態と異なるのは、立体視画像形成装置１に替えて携帯端末１Ａを用いる点である。図４３に携帯端末１Ａの機能構成図を、図４４にその外観図を示す。図４４に示すように、携帯端末１Ａは、例えば携帯電話機である。以下、第１実施形態との差異に着目して、本実施形態を説明する。
図４３において、無線通信ユニット２７は、アンテナＡＴを含み、この携帯端末装置を移動体通信網へ接続し、動画データを含む各種データの送受信を行う。通話ユニット２８は、スピーカユニットおよびマイクユニットを含み、音声通信を行う。表示部２１ａは、非立体視モードの画像表示機能と立体視モードの画像表示機能を備えたものであり、裸眼立体視が可能な表示パネルを備えている。また、表示制御部２２ａは、表示部２１ａの表示内容を制御するためのものである。入力操作部３０は、テンキーやカーソルキー等の入力デバイスであり、これを用いてユーザは携帯端末１Ａに対して指示等を入力する。
ここで、図４５および図４６を用いて、裸眼立体視の原理を簡単に説明する。図４５に示すように、表示部２１ａは、バックライト２１１、液晶パネル２１２、およびパララックス液晶パネル２１３を備えている。パララックス液晶パネル２１３は、一定間隔で縦方向にスリット２１４が設けられている。この状態で、液晶パネルに左目用画像Ｌ１〜Ｌ５、右目用画像Ｒ１〜Ｒ５が、スリット間隔と同じ間隔でストライプ状に表示され、かつ観察者が画面から所定の距離だけ離れたとすると、左目用画像Ｌ１〜Ｌ５は左目にのみ、右目用画像Ｒ１〜Ｒ５は右目にのみ到達する。よって、左目用画像Ｌ１〜Ｌ５と右目用画像Ｒ１〜Ｒ５とを一定の視差を有するように作成すれば、裸眼立体視が実現されるというしくみである。
図４４に戻り、携帯端末１Ａ筐体の下部には電話番号等を入力するためのテンキーＴＫが設けられており、その上側にはファンクションキーＦＫおよび表示モードを非立体視モード（２Ｄモード）と立体視モード（３Ｄモード）に切換えるための切換スイッチＤＫが設けられている。その上部には、液晶部２１ａの表示画面が配設されており、さらにその上部には、アンテナＡＴが設けられる。また、通話ユニット２８のスピーカユニットのための孔部２８ａと、マイクユニットのための孔部２８ｂがそれぞれ適宜な場所に設けられている。
＜２．動作＞
＜Ａ．静止画表示＞
図４７は、携帯端末１Ａにおいて、携帯端末１Ａに格納された静止画像を表示する場合の処理の一例を示している。
まず、携帯端末１Ａに電源が投入されたのち、ユーザが所定の操作を行って画像を選択すると（ステップＳ２００１）、ＣＰＵ１１は表示モードを非立体視モード（２Ｄモード）に設定する（ステップＳ２０００）。次に、ＣＰＵ１１は当該画像のデータを表示制御部２２ａへ出力する（ステップＳ２００２）。これにより、移動体通信端末装置のユーザは、通常の静止画を見ることができる。
ユーザが当該画像表示の中止を指示すると（ステップＳ２００３，ＮＯかつステップＳ２００４、ＹＥＳ）、ＣＰＵ１１は当該画像の表示を中止する（ステップＳ２００５）。
切換スイッチＤＫが操作された場合（ステップＳ２００３、ＹＥＳ）、ＣＰＵ１１は表示モードを立体視表示モードにセットし（ステップＳ２００６）、立体視用画像表示データ作成処理を行う（ステップＳ２００７）。ＣＰＵ１１は作成されたデータを表示制御部２２ａへ出力する（ステップＳ２００８）。これにより、ユーザは立体視画像を見ることができる。なお、立体視用画像データの作成方法は、第１実施形態で用いた方法と同様であるので、その説明は省略する。
ユーザが表示の終了を指示すると（ステップＳ２００９、ＮＯかつステップＳ２１１０、ＹＥＳ）、当該画像の表示を終了する（ステップＳ２１１１）。ユーザが再び切換スイッチＤＫを操作すると（ステップＳ２００９、ＹＥＳ）、ステップＳ２００１へ戻り、携帯端末１Ａを非立体視モード（２Ｄモード）に設定する。
＜Ｂ．動画表示＞
図４８は、携帯端末１Ａにおいて、移動通信網を介して動画をダウンロードして表示する場合の処理の一例を示している。
まず、携帯端末１Ａの電源が投入されると、ＣＰＵ１１は表示モードを非立体視モード（２Ｄモード）に設定する（ステップＳ３００１）。ユーザが所定の操作を行うと、複数のフレームの画像データから構成された動画データを受信する（ステップＳ３００２）。すると、ＣＰＵ１１は、受信した動画データをＲＡＭ１３に格納し、当該データの先頭の１フレームの画像データを表示制御部２２ａへ出力する（ステップＳ３２０３）。次いで、ＣＰＵ１１は受信した動画データに後続フレームがあるかどうかを判定する（ステップＳ３００４）。後続フレームがない場合（ステップＳ３００４、ＮＯ）、または後続フレームはあるがユーザから表示終了の指示があった場合、（ステップＳ３００７、ＹＥＳ）、当該表示を終了する（ステップＳ３００５）。後続フレームがある場合（ステップＳ３００４、ＹＥＳ）、ＲＡＭ１３から当該フレームの画像データを読み出して、表示制御部２２ａへ出力する。
このように、ユーザが切換スイッチＤＫの操作、または画像表示の終了の指定のいずれかを行うまで、１フレームずつ画像を読み込みだして、それを表示部に出力していく（ステップＳ３００６、ＮＯかつＳ３００７、ＮＯ）。ユーザが画像表示の終了を指定すると（ステップＳ３００６、ＮＯかつステップＳ３００７、ＹＥＳ）、画像表示を終了する（ステップＳ３００５）。以上により、初期状態では、移動体通信端末装置のユーザは、非立体視モードの動画を見ることができる。
ユーザが切換スイッチＤＫを操作すると（ステップＳ３００６、ＹＥＳ）、ＣＰＵ１１は表示モードを立体視表示モードに設定する（ステップＳ３００８）。次に、当該フレームの次のフレームにかかる画像データをＲＡＭ１３から読み出す（ステップＳ３００９）。読み出した画像データについて上述した立体視表示データ作成処理を行い（ステップＳ３０１０）、表示制御部２２ａへ出力する（ステップＳ３０１１）。これにより、ユーザは立体視用の動画を見ることができる。
後続のフレームが存在しなくなった（ステップＳ３０１２、ＮＯ）、ユーザが切換え操作を行った（ステップＳ３０１３、ＹＥＳ）、ユーザが表示終了を指示した（ステップＳ３０１４、ＹＥＳ）のいずれかの場合に該当するまで、立体視用動画をーフレームずつ順次表示し続ける。
ユーザが切換スイッチＤＫを操作すると（ステップＳ３０１３、ＹＥＳ）、ステップＳ３００１へ戻り、ＣＰＵ１１は表示モードを非立体視モード（２Ｄモード）に設定して、次フレームの表示制御部２２ａへ出力する。
このように本実施形態によれば、ユーザが切換スイッチＤＫを操作するたびに、表示部２１ａに表示される画像（静止画または動画）が、通常の画像と立体視画像とにリアルタイムに切り替わる。これにより、ユーザは通常の画像と立体視画像とを適宜切換えて鑑賞することができるため、立体視画像の楽しみ方が広がる。例えば、通常は非立体視モードで動画を鑑賞し、好みの所望のシーンが始まると立体視モードに切換えて鑑賞するといったことが可能になる。
なお、本実施形態においては、動画データを一括してダウンロードしたのち再生することを仮定しているが、動画の受信および再生方法はこれに限らない。例えば、全動画データの内うつの一部を逐次受信しながら再生していく、いわゆるストリーミング配信・再生であっても構わない。
＜第３実施形態＞
図４９は、本発明の第３実施形態における立体視画像形成装置１Ｂの機能構成図を示す。立体視画像形成装置１Ｂが第１実施形態における立体視画像形成装置１と異なるのは、表示制御部２２に替えて、表示制御部２２ｂ、第１データバッファ３１、第２データバッファ３２を用いる点、および表示部２１に替えて表示部２１ｂを用いる点である。なお、本実施形態においては、ユーザが液晶シャッタメガネ３４を装着することで立体視を実現する方式を採用している。
また、この立体視画像形成装置１Ｂにおいては、第２実施形態と同様、立体視表示モードと非立体視表示モードとを備えている。立体視表示モード時において、表示制御部２２ｂは、第１データバッファ３１に左目用画像データを格納し、第２データバッファ３２に右目画像データが格納する。さらに、表示制御部２２ｂは、切換器３３を制御して、第１のデータバッファ３１および第２の画像データバッファ３２を交互に選択する。具体的には、表示部２１ｂは所定の周期で一画面の描画を更新するが、表示制御部２２ｂは、この描画更新に同期させて切替器３３を切換える。さらに、表示制御部２２ｂは、この描画更新に同期させて液晶シャッタメガネ３４の切換動作を行う。
すなわち、切換器３３が第１の画像バッファ３１を選択している状態では、液晶シャッタメガネ３４の左目をオン（透過状態）にするとともに右目をオフ（遮断状態）にし、切換器３３が第２の画像バッファ３２を選択している状態では、液晶シャッタメガネ３４の右目をオン（透過状態）にするとともに左目をオフ（遮断状態）にする。このようにすることにより、左目用画像は左目でのみ視認され、右目用画像は右目でのみ視認されるため、立体視が実現されるのである。
なお、非立体視モードの場合には、表示制御部２２ｂは、第１の画像データバッファ３１に画像データを格納し、切換器３３により第１の画像データバッファ３１を選択する。
図５０は、この立体視画像表示装置１Ｂを用いて、受信した動画を表示する際の処理の一例を示している。本処理の流れは、図４８を用いて説明した第２実施形態と同様であるが、ステップＳ３００３に替えてステップＳ３００３ｂおよびステップＳ３０１１に替えてステップＳ３０１１ｂを設けている点で異なる。
すなわち、２Ｄモードにおいては、ＣＰＵ１１は、ＲＡＭ１３に格納された原画像データのうち、一フレーム分の画像データを抽出して第１データバッファ３１に格納するとともに、切替器を第１データバッファ３１側に選択する（ステップＳ３００３ｂ）。これにより、初期状態では、ユーザは非立体視モードの動画を見ることができる。
また、３Ｄモードにおいては、表示制御部２２ｂは、ステップＳ３０１０において作成された立体視用画像のうち左目画像データを第１データバッファ３１に格納し、右目画像データを第２データバッファ３２に格納する（ステップＳ３０１１ｂ）。そして、表示制御部２２ｂは、表示部２１ｂの描画更新に同期させて、切替器３３を切換える。このようにして、ユーザは当該フレームを立体視することができる。これを１フレームずつ行い、当該動画の立体視が実現される。
＜応用例＞
本発明における立体視画像形成装置を、自動車、電車、飛行機などの操作を訓練するために使用されるシミュレータに適用することが可能である。すなわち、当該シミュレータの画面に立体視画像を表示させる。これにより、訓練者に現実感を与えることができるので非常に有益である。本発明の立体視画像形成装置１Ｂを組み込んだ運転シミュレータ装置４０の一例を図５１に示す。
同図において、操作ユニット４１はハンドル等の操作デバイスを有する。ユーザの操作情報はシミュレーション処理部４２に供給される。シミュレーション処理部４２は、操作ユニット４１から入力された操作情報に基づき演算処理等を行い、画面に表示すべきデータを作成する。表示データはフレームバッファ４３へ出力される。
立体視画像形成装置１Ｂは、操作ユニット４１により２Ｄモード（非立体視表示モード）が指定されている場合には、通常の画像を画面に表示する。３Ｄモード（立体視表示モード）が指定されている場合には、フレームバッファ４３に保存されている１フレーム分画像データを抽出し立体視画像データを作成して、この画像を画面に表示する。
本発明の立体視画像形成方法をＬＳＩ（大規模集積回路）によって実現することが可能である。このＬＳＩを様々な電子機器に組み込むことにより、低コストで立体視画像を生成することが可能となる。例えば、通信端末装置、デジタルカメラ、受像器、ストレージ型表示装置、内視鏡その他の医療器具に本発明の立体視画像形成方法を適用することが可能である。
以上、本実施形態について説明したが、本発明の範囲は上記実施形態に限定されるものではなく、本発明の範囲を逸脱しない限りにおいて、変形等を行うことが可能であることは言うまでもない。
【図１】
2004019621.tif 000003
【図２】
2004019621.tif 000004
【図３】
2004019621.tif 000005
【図４】
2004019621.tif 000006
【図５】
2004019621.tif 000007
【図６】
2004019621.tif 000008
【図７】
2004019621.tif 000009
【図８】
2004019621.tif 000010
【図９】
2004019621.tif 000011
【図１０】
2004019621.tif 000012
【図１１】
2004019621.tif 000013
【図１２】
2004019621.tif 000014
【図１３】
2004019621.tif 000015
【図１４】
2004019621.tif 000016
【図１５】
2004019621.tif 000017
【図１６】
2004019621.tif 000018
【図１７】
2004019621.tif 000019
【図１８】
2004019621.tif 000020
【図１９】
2004019621.tif 000021
【図２０】
2004019621.tif 000022
【図２１】
2004019621.tif 000023
【図２２】
2004019621.tif 000024
【図２３】
2004019621.tif 000025
【図２４】
2004019621.tif 000026
【図２５】
2004019621.tif 000027
【図２６】
2004019621.tif 000028
【図２７】
2004019621.tif 000029
【図２８】
2004019621.tif 000030
【図２９】
2004019621.tif 000031
【図３０】
2004019621.tif 000032
【図３１】
2004019621.tif 000033
【図３２】
2004019621.tif 000034
【図３３】
2004019621.tif 000035
【図３４】
2004019621.tif 000036
【図３５】
2004019621.tif 000037
【図３６】
2004019621.tif 000038
【図３７】
2004019621.tif 000039
【図３８】
2004019621.tif 000040
【図３９】
2004019621.tif 000041
【図４０】
2004019621.tif 000042
【図４１】
2004019621.tif 000043
【図４２】
2004019621.tif 000044
【図４３】
2004019621.tif 000045
【図４４】
2004019621.tif 000046
【図４５】
2004019621.tif 000047
【図４６】
2004019621.tif 000048
【図４７】
2004019621.tif 000049
【図４８】
2004019621.tif 000050
【図４９】
2004019621.tif 000051
【図５０】
2004019621.tif 000052
【図５１】
2004019621.tif 000053
【手続補正書】
【提出日】平成16年2月3日(2004.2.3)
【手続補正００１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出ステップと、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正ステップと、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成ステップと
を有することを特徴とする立体視画像作成方法。
【請求項２】
前記算出ステップにおいて、画像データの色成分の各々に所定の係数を乗じることにより奥行き値を算出することを特徴とする請求項１に記載の立体視画像作成方法。
【請求項３】
前記所定の係数は、人間の網膜に存在する赤錐体、緑錐体、および青錐体の数の割合に等しいことを特徴とする請求項２に記載の立体視画像作成方法。
【請求項４】
前記修正ステップにおいて、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値よりも、原画像の構図上で手前に位置する被写体を表す画像を構成する画素の奥行き値の方が大きくなるように、前記各画素の奥行き値を補正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項５】
前記修正ステップにおいて、一の領域に含まれる画素の奥行き値と他の領域に含まれる画素の奥行き値とを比較することにより、前記画像における奥行き値の変化傾向を解析し、
得られた解析結果が所定のものである場合、前記作成ステップにおいて、前記奥行き値と前記画素移動量との大小関係を逆転させる
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項６】
前記修正ステップにおいて、当該画素を含む領域に含まれる画素の奥行き値の平均値を算出し、当該画素の奥行き値を当該平均値に置き換える
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項７】
前記修正ステップにおいて、前記画像における奥行き値の分布および全画素の奥行き値の平均値を算出し、該算出した平均値を用いて当該分布の偏りを補正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項８】
前記修正ステップにおいて、前記算出された奥行き値を参照して、前記画像データによって表される画像中の少なくとも一以上の被写体の画像を特定し、該被写体に対応する領域内の画素の奥行き値に基づいて当該画素の奥行き値を修正する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項９】
前記修正ステップにおいて、ユーザによって指定されるパラメータ値を用いて、奥行き値の量子化ステップを定める
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項１０】
前記修正ステップにおいて、ユーザによって指定されるパラメータ値を用いて、前記算出された奥行き値のとり得る値の上限値または下限値のいずれか一つを決定する
ことを特徴とする請求項１に記載の立体視画像作成方法。
【請求項１１】
複数の画像から構成される動画像を取得するステップを更に備え、
前記取得した画像の各々から立体視画像を作成することにより、前記動画像に対応する立体視画像をリアルタイムに作成することを特徴とする
請求項１に記載の立体視画像作成方法。
【請求項１２】
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する算出手段と、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する修正手段と、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する作成手段と
を有することを特徴とする立体視画像作成装置。
【請求項１３】
（補正後）前記修正手段において用いられるパラメータをユーザから取得する取得手段を更に備えることを特徴とする請求項１２に記載の立体視画像作成装置。
【請求項１４】
（補正後）前記パラメータは前記奥行き値の上限値または下限値を表すことを特徴とする請求項１３に記載の立体視画像作成装置。
【請求項１５】
（補正後）前記パラメータは前記奥行き値の量子化ステップを表すことを特徴とする請求項１３に記載の立体視画像作成装置。
【請求項１６】
（補正後）該作成された、右目用画像および左目用画像の画像データを格納する格納手段と、
前記格納手段に格納されている画像データで表される画像を、所定の方式に従って表示する表示手段と
を更に備えることを特徴とする請求項１３に記載の立体視画像作成装置。
【請求項１７】
コンピュータを、
画像を構成する複数の画素の画像データに基づいて、各画素に対応する被写体の奥行きを表す奥行き値を算出する手段と、
前記算出ステップにおいて算出された各画素に対応する奥行き値を、当該画素以外の画素に対応する奥行き値を用いて修正する手段と、
各画素の修正後の奥行き値に基づいて各画素の画素移動量を決定し、前記画像を構成する各画素を、決定された移動量の分だけ左右にずらすことにより、右目用画像と左目用画像とを作成する手段と
して機能させるためのプログラム。
【国際調査報告】
2004019621.tif 000054
2004019621.tif 000055
2004019621.tif 000056