(57)【要約】 【課題】強力で、スケーラブルで、再構成可能なイメージ処理システムおよびその中のデータを処理する方法を提供する。【解決手段】再構成可能イメージ処理システムは、ＰＣＩバスインターフェースチップ、クロック制御チップおよびデータパスチップをも含む。これは、単一のボードで実現することが可能である。これは、その外部環境からデータを受信し、対応を演算し、そして、様々な処理後産業的アプリケーションに対応演算の結果を用いる。再構成可能イメージ処理システムは、非パラメトリック局所変換とその後の相関を用いることによって相関を決定する。これらの非パラメトリック局所変換は、センサスおよびランク情報を含む。他の実施形態には、相関、修正、左右一貫性検査および対象オペレータのアプリケーションが含まれる。【選択図】図４
2008033958.tif 000002
【特許請求の範囲】
【請求項１】
ある光景の第１のデータの組のイメージデータと第２のデータの組のイメージデータとの間の最適な対応情報を提供する並列パイプライン方式イメージ処理システムであって、
該第１のデータの組および該第２のデータの組において選択されたイメージデータのそれぞれについて、複数の第１のベクトルおよび複数の第２のベクトルを発生させるベクトル発生器であって、該第１のベクトルおよび該第２のベクトルのそれぞれは、該選択されたイメージデータおよび該選択されたイメージデータの周囲にある複数の選択されたイメージデータの間の順序付けられた相関値を表す、ベクトル発生器と、
該ベクトル発生器に接続され、該複数の第１のベクトルおよび該複数の第２のベクトルを受信し、第１のオフセットだけ互いにオフセットされている選択された第１のベクトルおよび第２のベクトルの間の第１の対応情報を発生させる相関ユニットであって、第２のオフセットだけ互いにオフセットされている選択された第１のベクトルおよび別の第２のベクトルの間の第２の応答情報を発生させ、最適化条件に従って該第１の対応情報または該第２の対応情報のいずれかを選択することによって最適の対応情報を決定する、相関ユニットと
を備えた、並列パイプライン方式イメージ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は一般にデータ処理に関する。さらに詳細には、関連したデータの組の間の対応を決定すること、および、そのようなデータの解析に関する。一つの用途(application)では、本発明はリアルタイムでのステレオおよび深度／距離／動き解析に対するイメージデータ対応に関する。
【背景技術】
【０００２】
関係する技術の説明
データ処理用途のある形式は関連するデータの組の比較に関する。つまり、データの関連度を決定し、存在し得る差の重要性を判断するよう設計される。時間が経過するにつれてデータの組がどのくらい変化するのかを決定するよう設計される用途を例示は含む。同様に、同じデータの組の二つの異なる同時の風景(simultaneous views)の差を調べるように設計される用途も含まれる。
【０００３】
エラーから、または、データ収集プロセスのアーチファクトから生じる差をデータの組が含むならば、そのような用途は非常に複雑になり得る。そのような場合、データの基礎をなす実質的な差は、実質的な対象に関係しないアーチファクトによって覆い隠され得る。
【０００４】
例えば、物体が動いているかどうかを決定する映像シーケンスの解析は、あるフレームから別のフレームへピクセルが変化したかどうか、もしそうならば、それらのピクセルの差が物体の動きを表しているかどうかを決定するためにフレームごとの比較を実行することを必要とする。そのようなプロセスは、対象（物体の動きを示すもの）に対応し得るピクセルの差と無関係なアーチファクト（例えば、明暗の変化）の結果として導入されるピクセルの差とを区別することを必要とする。簡略なピクセルごとの比較はそのような用途にはあまり適さない。なぜなら、そのような比較は、意味のあるピクセル差と意味のないピクセルの差とを簡単に区別できないからである。
【０００５】
そのような問題の第二の例は、同じ光景のステレオイメージからの深度情報の計算に関する。同時にとられた同じ光景の二つの画像、カメラ間の距離、焦点距離、および光学レンズ特性の情報が与えられると、その光景における任意のピクセル（従って、ピクセルの任意の関連する群、すなわち物体）との距離を決定することは可能である。しかしながら、（ａ）異なる深度でのピクセルは、異なる合計をオフセットし（これは深度計算を可能にする）、（ｂ）カメラはわずかに異なる光学的な品質を有し得るので、簡略なピクセル整合によっては達成されない。異なる深度でのピクセルは、その異なる合計をオフセットするという事実によって作成される差が対象となる一方で、カメラの差のアーチファクトとして作成される差が対象とならないので、二つの形式の差を区別することは必要である。
【０００６】
そのうえ、そのような比較をリアルタイムで実行することは有用であり得る。例えば、ステレオ深度解析は周囲の状況によってロボットを導くのに使用され得る。明らかな理由に関しては、ロボットが反応して障害物を回避するのに間に合うようにそのような解析が実行されるならば、最も有用である。別の例を選ぶと、圧縮アルゴリズムが前景情報と背景情報とを区別すること、および背景情報を前景情報より高い程度に圧縮することを可能にする映像圧縮にとって深度情報は非常に有用であり得る。
【０００７】
しかしながら、この形式の正確なデータ組比較は演算量が高密度になる。非常にハイエンドなコンピュータ（最もあり得る実世界の用途にとっては高価過ぎる）を使用するか、または、正確さまたは速さを犠牲にするかのいずれかを、存在する用途に強いる。そのようなアルゴリズムは、差の二乗の合計（Sum of Squared Difference）（”ＳＳＤ”）、規格化ＳＳＤおよびラプラシアンレベル相いくつかまたはすべてをこれらのアルゴリズムが示す傾向がある。（１）低感度（イメージ内の重要なローカル変数を生成することができない）、（２）低安定性（対応するデータ位置の近辺に同様の結果を生じることができない）、（３）カメラの差に影響を受け易い。さらに、これらのアルゴリズムを実行するように設計されているシステムは、高価なハードウェアを使用する傾向にある。それらのハードウェアによって、これらのアルゴリズムは多くの用途に対して適応出来なくなる。
【０００８】
現在の対応アルゴリズムも、ローカル変換動作の制限のため、ファクショナりズム(factionalism)を扱うことはできない。ファクショナリズムは別個の強度集合を適切に区別することはできない。例えば、強度イメージは、どのような物体が光景の中にある場合でもその強度データをピクセルを経由して与える。これらの物体の境界付近で、強度イメージにおけるいくつかのローカル領域のピクセルは、二つの別個の強度集合(population)からの光景要素を表し得る。いくつかのピクセルは物体に由来し、そしていくつかは光景の他の部分に由来する。結果として、ローカルピクセル分布は一般に、境界付近で多様となる。深度不連続を重ね合わせるイメージウインドウは、異なる位置での他のイメージにおける二つのハーフウインドウを整合する。そのような領域における大多数のピクセルが、深度不連続の一つの側面に向けられる(fall)と仮定すると、深度推定は大多数に一致し、少数に不一致となるはずである。これは多くの対応アルゴリズムに対して問題を引き起こす。ローカル変換が元の強度データの強度分布を適切に表さないならば、少数集合からの強度データは結果を歪め得る。平均または変化(meanor variance)といったパラメトリック変換は多数の別個のサブ集合（それぞれがそれ自身と密接なパラメータを有する）の存在中で行儀良く振る舞(behavewell)わない。
【０００９】
非パラメトリック変換として知られているアルゴリズムの分類(class)は、他のアルゴリズムが本来持っている効率の悪さを解決するよう設計されている。それぞれの要素をそれらそれぞれのデータの組における周囲の要素と比較することによって、非パラメトリック変換は、一つのデータ組におけるデータ要素を第２のデータ組におけるデータ要素にマッピングする。その後、他のデータの組における周辺の要素に対して同じ関係を有する、その組における要素の位置決めを試みる。従って、そのようなアルゴリズムは、アーチファクトに基づいた差を選別して除くように設計される。そのアーチファクトに基づいた差は、データの組が集められた方法における差から生じ、重要な差を濃縮することを可能にする。
【００１０】
ランク変換は一つの非パラメトリックローカル変換である。ランク変換は対象ピクセルを、どのくらい多くのその周辺ピクセルが、対象ピクセルよりも高いまたは低い輝度を有するのかの関数として特徴付ける。その後、その特徴付けは、他のデータの組におけるピクセルに行われた特徴付けと比較され、最近接整合(closest match)を決定する。
【００１１】
センサス(census)変換は第２の非パラメトリックローカル変換アルゴリズムである。センサスはまた、輝度の差に依存するが、ランクよりもさらに洗練された解析に基づく。というのも、センサス変換はより高いまたは低い輝度の周辺ピクセルの数に単に基づくだけでなく、対象ピクセルを取り囲むピクセル輝度の順序付けられた関係に基づくからである。センサス変換は関係するデータ組を整合し、および、重要性を有さない差から重要な差を区別するために知られている良いアルゴリズムを構成するのだが、このアルゴリズムを実行する存在するハードウェアシステムは効果がなく、そして、演算的に効果のある方法におけるこのアルゴリズムを実行するシステムは、全く知られていない。
【００１２】
データ処理の広い分野において、データの組を解析するシステムおよび方法のための産業(industry)における必要性が存在し、このシステムおよび方法は関係性を決定し、これらのデータ組において含まれる本質的な情報を抽出し、他の望まない情報をフィルタで排除する。そのようなシステムおよび方法は、素早くそして効果のある方法で実行されるべきである。本発明はそのようなシステムおよび方法を与え、上述の問題に対する回答を与える。
【発明の開示】
【課題を解決するための手段】
【００１３】
発明の要旨
本発明は前記の問題に対する解決方法を与える。本発明の一つの目的は、データの組を解析するアルゴリズムを与え、これらのデータの組に含まれる本質的な属性(attribute)情報を抽出することである。本発明の別の目的は、これらのデータの組を解析し、リアルタイムに結果を出すアルゴリズムを与えることである。本発明のさらなる目的は、これらのデータの組を解析するためのハードウェア実行を与えることである。本発明のさらなる目的は、これらのアルゴリズムおよびハードウェア回答をコンピュータ映像(vision)およびイメージ処理のような様々な用途に導入し、組み入れることである。
【００１４】
本発明の様々な局面はソフトウェア／アルゴリズム、ハードウェア実行および用途を、単独または組み合わせのいずれかで含む。本発明は、単独または組み合わせのいずれかで、改善された対応アルゴリズム、リアルタイムに対応アルゴリズムを効率的および廉価で実行するよう設計されたハードウェア、およびそのようなアルゴリズムおよびハードウェアの使用を可能にする用途を含む。
【００１５】
本発明の一つの局面は改善された対応アルゴリズムに関係する。一般的なレベルでは、このアルゴリズムは行データの組のセンサスベクトルへの変換およびデータ組間の相関を決定するためのセンサスベクトルの使用に関係する。
【００１６】
一つの特別な実施形態では、センサス変換は一つの画像におけるピクセルを同時に得られた第二の画像におけるピクセルに整合するために使用され、それによって深度計算が可能になる。異なる実施形態では、このアルゴリズムは一つの画像と異なる時間に得られた第二の画像との間の動きの計算を可能にするために、または、音楽シーケンスを含む音を表すデータの組の比較を可能にするために使用され得る。
【００１７】
第１のステップでは、センサス変換は行データの組を取り、これらのデータの組を非パラメトリック演算を使用して変換する。例えば、ステレオイメージからの深度情報の計算に適用されると、この演算はそれぞれのピクセルに対するセンサスベクトルを生じる。そのセンサスベクトルは、周囲に隣接する他のピクセルに対するピクセルの順序付けられた関係を表す。一つの実施形態では、この順序付けられた関係は、ピクセル内の輝度の差に基づく。他の実施形態では、この関係は、色を含むピクセルの他の局面に基づく。
【００１８】
第２のステップでは、センサス変換アルゴリズムはセンサスベクトルを関連付け、一つのデータの組と他との間の最適な整合を決定する。これは、一つのデータの組におけるそれぞれの参照ピクセルと他のデータの組における参照ピクセルのサーチウインドウのそれぞれのピクセルとの間の最小ハミング距離を選択することによって行われる。一つの実施形態では、これは、参照ピクセルを取り囲むウインドウからの合計ハミング距離を他のデータ組におけるスライディングウインドウと比較することによって行われる。その後、この最適な整合は、データの組の一つと他のデータ組と間とのオフセット（または視差（disparity））として表され、外部指標アレイまたは視差マップにおいて視差の組が格納される。
【００１９】
第３のステップでは、一つの方向における最適の整合が他の方向における最適の整合と同一であるかを決定するために、アルゴリズムは反対の方向における同じ検査を行う。これは、左右一貫性検査(left-right consistency check)と称される。一貫性のないピクセルは、今後の処理のために分類され、廃棄される。ある実施形態では、アルゴリズムは対象演算子を適用してコントラストまたはテクスチャが低い領域における転置(displacement)を廃棄し得、モードフィルタを適用して集合解析に基づいた視差を選択し得る。
【００２０】
本発明の第２の局面は、センサス変換および対応アルゴリズムのようなアルゴリズムを実行するよう設計されたパワフルでスケーラブル(scaleable)なハードウェアシステムに関する。このハードウェアはパラレリゼイションを処理するデータを最大化するよう設計されている。一つの実施形態では、このハードウェアはフィールドプログラム可能装置を使用して再構成可能である。しかしながら、他の本発明の実施形態は、特定用途向け集積回路（ＡＳＩＣ）技術を使用して実行され得る。さらに他の実施形態は、カスタム(custom)集積回路の形態であり得る。一つの実施形態では、このハードウェアは、ステレオイメージデータのリアルタイム処理の間に改善された対応アルゴリズム／ソフトウェアとともに使用され、深度を決定する。
【００２１】
本発明の第３の局面は、用途に関する。ステレオ情報から深度計算を可能にするハードウェアおよびソフトウェアの使用を介して可能になる用途に関する。一つの実施形態では、そのような用途は、リアルタイムの物体検出および認識を必要とする用途を含む。そのような用途は、様々なタイプのロボットを含む。そのようなロボットはハードウェアを含み得、ロボットが回避するかまたは拾い上げることを望む物体との同一性(identity)および物体への距離を決定するためにソフトウェアアルゴリズムを動かし得る。深度情報はある距離はなれた情報を廃棄する（または記録しない）ために使用され得るので、そのような用途はまた、ｚキーイングまたはクロミックキーイング（例えば、ブルースクリーニング）のような映像合成技術を含み得る。それゆえ、光景の中に物理的スクリーンを配置すること、または、背景情報を排除するために手動で映像を処理することを必要とせずにブルースクリーニング効果を作成する。
【００２２】
第２の実施形態では、そのような用途は深度情報が静止イメージまたは映像に関連するピクセル情報の属性として格納される場合に可能となる用途を含む。そのような情報は圧縮アルゴリズムに有用であり得る。そのようなアルゴリズムはより離れた物体をカメラに接近して置かれている物体より高度に圧縮し得る。それゆえ、そのような情報はたぶん見る者にとってより興味のあるものになる。そのような情報はまた、映像およびイメージ編集において有用であり得る。例えば、一つの映像シーケンスからの物体が適切な深度で第２のシーケンスに挿入される合成イメージを作成するために使用され得る。
【発明を実施するための最良の形態】
【００２３】
好ましい実施形態の詳細な説明
Ｉ．概要
Ａ．概略
本発明の目的は高い性能、関係するデータ組の素早く効果のある解析を提供することである。本発明は、三つの関係する局面、すなわちアルゴリズム／ソフトウェア、ハードウェア実行、および産業用途を組み入れる。従って、本発明の様々な実施形態は、（１）これらのデータの組またはこれらのデータの組のいくつかの部分がいくつかの測定に関係付けられているかを決定し得、（２）これらのデータの組またはこれらのデータの組のいくつかの部分がどのようにして関係付けられているかを決定し得、（３）後で抽出された情報が元の本質的な情報を十分に表すような方法におけるデータの組の元の情報を変換する変換スキームを利用し得、（４）関係付けられているそれらのデータの組からいくつかの基礎となる本質的な情報を抽出し得、（５）ユーザが望む基礎となる情報に目立って貢献はしない他の情報（本質的かそうでないか）を排除し得る。これらの局面は以下でより詳細に議論する。
【００２４】
本発明の一つの局面は、一般に対応アルゴリズムと呼ばれるソフトウェア／アルゴリズム実行である。一般に、対応アルゴリズムの一つの実施形態は以下のステップを含む。１）行データの組をベクトルに変換する。２）そのベクトルを使用してデータの組の相関を決定する。最終結果は、一つのデータの組におけるデータ要素と他のデータの組におけるデータ要素との間の最適相関を表す視差（disparity）値である。言い換えると、最適視差はまた、一つのデータの組における一つのデータ要素と他のデータの組における最適整合データ要素との間の距離を表す。
【００２５】
本発明で使用される対応アルゴリズムの一つの実施形態の変換部分は、非パラメトリックローカル変換として知られる変換アルゴリズムのクラスを構成する。そのようなアルゴリズムは、関係のある範囲および性質を決定するために関係付けられたデータの組を評価するように設計され、それぞれの組に対して使用されるデータ収集技術における差の結果として異なり得る（関係付けられているのだが）データの組に対して特に有用であり得る。
【００２６】
特定の実施形態では、本発明の対応アルゴリズムは以下のステップのいくつかまたはすべてを組み入れ得る。それぞれは以下に、より詳細に記述される。（１）二つ以上の関係付けられたデータの組を必要とする。（２）両方のデータの組におけるデータの変換演算、同じデータの組における他のデータ要素との関係によるデータ要素を特徴付ける変換演算を利用する。（３）変換された特徴を使用し、一つのデータ組におけるデータ要素を他のデータの組におけるデータ要素と相関する。（４）異常と思われるか、または、しきい値または対象演算に合わない(do not meet)結果を選別するように設計される方法における結果をフィルタリングする。（５）有用なフォーマットにおける結果を報告または使用する。
【００２７】
本発明のソフトウェア／アルゴリズムの局面の他の実施形態では、センサスおよび相関ステップは並列およびパイプライン化様式で実行される。アルゴリズムのシストリック（systolic）性質は効率および速度を促進する。従って、一つのイメージにおけるセンサスベクトル（または相関ウインドウ）は、並列およびパイプライン化方法における他のイメージのそれぞれの視差シフトセンサスベクトル（または相関ウインドウ）のそれぞれと相関される。この相関ステップと同時に、左右一貫性検査が実行される。従って、最適視差およびこれらの視差の左右一貫性検査は同時に実行される。
【００２８】
本発明のハードウェア局面は、効率的におよび低コストでデータの組の比較を行うように設計される並列およびパイプライン化演算システムを表す。データはパイプラインを通ってシストリックな性質において処理される。このイメージ処理システムは高演算密度、高メモリ帯域幅、および、高Ｉ／Ｏ帯域幅を介して高性能を与える。このハードウェアの実施形態は、データ分布技術の変化を援助するように設計される柔軟性のあるトポロジーを含む。全体のスループットは、本発明のアレイボードを均等に通ってリソースを分布することによって増加される。そのようなトポロジーの一つは、再構成システムに対するトーラス構成である。
【００２９】
一つの実施形態では、本発明のハードウェアシステムは再構成され得る。つまり、そのハードウェアを特定の演算に適合するように近くに再構成できる。例えば、多くの乗算が必要ならば、そのシステムは多くの乗算器を含んで構成される。他の演算要素または機能が必要である場合、それらもまたシステムにおいてモデリングされまたは形成され得る。このように、システムは特定の演算（リアルタイム映像または音声処理）を実行するように最適化され得る。再構成可能なシステムはまた柔軟であり、製造中、テスト中、または、使用中に生じる少数のハードウェア欠陥にユーザは対処できる。
【００３０】
一つの実施形態では、本発明のハードウェア局面は、ＦＰＧＡチップおよび高速ＳＲＡＭからなる演算要素の二次元アレイとして設計される再構成イメージ処理システムを構成し、リアルタイム相互作用マルチメディア用途に必要とされる演算リソースを与える。一つの実施形態では、演算システムは、演算要素、データパスユニット、ＰＣＩインタフェースユニット、および、クロック制御ユニットの４×４アレイを含む。演算要素は、センサス変換を実行し、相関を決定し、他の変換機能を実行する。データパスユニットは、アレイにおける様々な演算要素に対するデータの経路を制御する。ＰＣＩインタフェースユニットはＰＣＩバスに対するインタフェースを与える。クロック制御ユニットは、演算要素、データパスユニット、および、ＰＣＩインタフェースユニットに対するクロック信号を生成し、分配する。
【００３１】
本発明の用途の局面は、イメージまたは映像の処理に関係付けられた用途を含み、そのアルゴリズムは、深度測定および動き追跡を含む様々な目的に使用され得る。アルゴリズムから派生する情報は、物体検出および認識、イメージ理解、圧縮および映像編集または合成として目的に使用され得る。
【００３２】
本発明の様々な局面は、様々な用途に使用され得るのだが、一つの図示的な実施形態は、発明の性質を図示するのに使用される。この実施形態では、センサス変換として知られる様々な非パラメトリックローカル変換は同一の光景を同時に記録するのに使用される二つのカメラから受信されるイメージに適用される。それぞれのイメージにおけるそれぞれのピクセルは、輝度値として表される。そのピクセルは選択された周囲のピクセルに対するそれぞれの輝度の関係を表す“センサスベクトル”に変換される。すなわち、その関係というのは、対象ピクセルの輝度が、他のピクセルの輝度よりも高いか低いかである。その後、一つのイメージにおける対象ピクセルを取り囲むウインドウからのセンサスベクトルは、合計ハミング距離と表される比較で、他のイメージにおける様々なウインドウからのセンサスベクトルと比較される。その合計ハミング距離は、一つのイメージにおける対象ピクセルと他のイメージにおける同一のピクセルとのあいだの適当な整合を決定するのに使用される。その後、その整合は、一つのイメージにおけるピクセルのｘｙ−座標と他のイメージにおける整合ピクセルのｘｙ−座標との間の差に基づく視差として（またはオフセットとして）表される。その後、結果は、エラー検出を受けて、しきい値付けに供される。エラー検出およびしきい値付けに供される、逆方向の比較を含んで同一の整合ピクセルが比較が他の方向にいつなされたかを見つける（左右一貫性検査）かを決定し、イメージにおける構成を調べて結果が十分に信頼性のあるもの（対象演算子）かどうかを決定し、生じた視差の集合解析を適用する（モードフィルタ）。
【００３３】
一つのイメージからのピクセルが、他のイメージにおけるピクセルにいったんマッピングされ、その視差がわかると、それぞれのイメージにおける光景に対するカメラからの距離は計算され得る。その後、この距離（または深度）は、様々な用途に使用され得る。それらの用途は、物体検出（周囲を動くロボットに有用である）および物体認識（物体エッジが深度視差に基づいて決定され得、物体の距離が物体の全三次元構造を決定するのに使用され得るので、物体はさらに容易に認識され得る）を含む。そのアルゴリズムにおけるステップの一つの特定の実施形態は、以下のことを含む。
【００３４】
１）二つのカメラから入力イメージを受信する。
【００３５】
２）エピポーラ(epipolar)線が結果イメージにおける線を走査されるように入力イメージを修正する。ただし、この制限がすでに満たされていれば、このステップが省略され得る。
【００３６】
３）センサス変換のようなローカル変換を使用して、入力イメージを変換する。これは、それぞれの輝度イメージにおいて別々になされる。
【００３７】
４）二つの変換されたピクセルＰおよびＱとの間のハミング距離を演算することによってステレオ整合を決定する。ここで、Ｐは一つの入力イメージに対して変換されたピクセルであり、Ｑは第二の入力イメージに対するサーチウインドウにおける変換されたピクセルである。これは、それぞれの輝度イメージにおいて別々になされる。
【００３８】
５）スライディング合計を使用してこれらのハミング距離を四角の相関ウインドウ全体で合計し、サーチウインドウ全体での最小合計ハミング距離の変位を決定する。
【００３９】
６）参照イメージを用いて上で逆にしたステップ３を概念的に繰り返すことによって左右一貫性検査を任意に実行し、結果の変位が逆であると決定する。構成されないピクセルを分類する。
【００４０】
７）対象演算子を入力イメージに任意に適用する。十分なコントラストまたは文のない領域における変位は疑いのあるものとして分類され得る。
【００４１】
８）モードフィルタを適用し集合解析に基づいた視差を選択する。
【００４２】
９）参照イメージにおけるそれぞれのピクセルに対して、他のイメージにおける対応するピクセルに対する変位を含む新しいイメージを生成する。他のイメージは、左右一貫性、対象信頼、および、モードフィルタ視差選択についての注釈に従う最小合計ハミング距離に関連付けられる。
【００４３】
ここで、ソフトウェア／アルゴリズムは、二つのイメージ、左カメラからの一つのイメージ、および、右カメラからの他のイメージを受信するイメージ処理アルゴリズムである。輝度イメージは明瞭であるがどこか関係付けられたデータの組を表す。アルゴリズムは入力として二つの輝度イメージを取り、それぞれのイメージピクセルに対する視差を構成する出力イメージを生成する。センサス変換は両方のイメージにおけるそれぞれのピクセルに対するセンサスベクトルを生成する。所与のセンサスベクトル／ピクセルに対するサーチウインドウにおけるすべてのハミング距離の最小ハミング距離は、再び最適ハミング距離として選択される。その後、最適ハミング距離に関連付けられる視差は、様々な処理後用途に使用される。
【００４４】
出力は、任意にさらに処理され、それぞれの結果ピクセルに対する信頼測定およびイメージ雑音特性に基づくしきい値付けを与える。一つ以上のそのような機構が使用されるならば、信頼／エラー検出検査を通過するまで、最初に選択される視差は単に一時的なものである。三つの信頼／エラー検出検査のいずれかの組み合わせは、このシステム（左右一貫性検査、対象演算子、および、モードフィルタ）において使用され得る。
【００４５】
左右一貫性検査は、エラー検出の形態である。この検査は右イメージにおけるイメージ要素による最適イメージ要素として選択される左イメージにおけるイメージ要素が、最適イメージ要素として右イメージにおける同一のイメージ要素を選択するかどうかを決定し、確認する。対象演算は、捕捉される光景の構成に基づいた高レベルの信頼に輝度イメージが関連付けられているかどうかを決定する。従って、均一な構成である光景のイメージ要素に関連付けられる対応演算は、構成がさらに変化しているそれらの光景でよりも低い信頼値を有する。モードフィルタは選択された最適な視差が集合解析に基づく視差を選択することにより高度の一貫性を有するかどうかを決定する。一つの実施形態では、モードフィルタはウインドウにおけるそれぞれの視差の頻度を計数し、そのウインドウに対する最大計数をもって視差を選択する。
【００４６】
いくつかの実施形態では、イメージ処理システムはその外部環境からデータを受信し、対応を演算し、距離／深度計算、物体検出、および、物体認識といった様々な処理後の産業用途に対して対応演算の結果を使用する。本発明の以下のイメージ処理システムは、対応アルゴリズムの複数の変形および実施形態を実行し得る。アルゴリズムは、以下でさらに詳細に記述される。ステレオ表示に対する対応アルゴリズムの実行では、イメージ処理システムの一つの実施形態は非バースト(burst)モードにおけるＰＣＩバスインタフェースから入力データとして一対のステレオイメージを受信し、２４個のステレオ視差を演算する。入力データ対は、時分割方法におけるデータを受信する空間的に分けられた二つのカメラまたはセンサ、または、単一のカメラまたはセンサであり得る。別の実施形態は、１６個の視差のみを使用する。他の実施形態は、他の数の視差を使用する。
【００４７】
この完成したシステムは、イメージ捕捉、ディジタイゼーション、ステレオおよび／または動き処理、および、結果の伝達を含む。これら他の実施形態は、データの捕捉において一つ以上のセンサを使用し、アルゴリズムはデータを処理する。
【００４８】
一般的な特徴として、再構成可能なイメージ処理システムは、そのハードウェアを再構成できて、すぐに特定の演算に適する機械またはエンジンである。多数の乗算が必要であれば、システムは多数の乗算器を有するように再構成される。他の演算要素または機能が必要であれば、それらはそのシステムにおいてモデルとなり形成される。このようにコンピュータは最適化され、特定の演算（例えばリアルタイム映像または音声処理）をさらに効率的に実行する。再構成可能なイメージ処理システムの別の利点は、その柔軟性である。テストまたはデバッグ中に生じる短絡のようなハードウェア欠陥は製造に重大な影響を与えることはない。ユーザは、他の線を使用して必要とされた信号の経路を決めることによってこれらの欠陥に直面し得る。
【００４９】
ステレオ表示用途に対するほとんどのコンピュータは、それらの指示を連続して実行する。本発明では、その指示を同時に実行して、再構成可能なイメージ処理システムの範囲全体に広がる。そのような演算を支援するために、本発明の再構成可能なイメージ処理システムは、ＦＰＧＡチップおよび高速ＳＲＡＭを構成する演算要素の二次元アレイとして設計されており、リアルタイム相互作用マルチメディア用途に必要とされる演算リソースを与える。
【００５０】
以下の様々な図に対する議論では、用語“イメージデータ”および“イメージ要素”は、様々なレベルの抽出概念でのイメージを表すデータのすべての局面を表すために使用される。従って、これらの用語は、単一ピクセル、ピクセル群、変換された（センサスまたはランク）イメージベクトル、単一データのハミング相関値、相関合計、外部指標、対象演算合計、または、その状況に依存するモードフィルタ指標を意味し得る。
【００５１】
Ｂ．ＰＣＩ準拠システム
図１は、二つのセンサまたはカメラが物体に関してデータを捕捉し、演算システムにデータを提供する本発明の特定の産業用途を示す。映像または他の映像処理システムで捕捉された光景１０は物体１１と背景１２を含む。この図では、物体１１にはフォルダを持った人間がいる。この物体１１は静止しているか動いているかのいずれかであり得る。ただし、光景１０におけるすべての要素は、構成、深度、および、動きをといった変化する特性を有し得る。従って、人間のシャツはズボンおよび持っているフォルダと異なるテクスチャを有し得る。
【００５２】
ｘ−ｙ−ｚ座標システム１５によって示されるように、光景は三次元図である。本発明は一次元または二次元図を捕捉することも同様に可能である。ただし、本発明の様々な実施形態は、これらの実施形態においてリアルタイムに決定される二つのカメラの間隔の関係、ピクセル間隔、焦点距離、レンズ特性、および、視差といった情報から距離／深度を決定し得る。従って、Dana H. Ballard & Christopher M. Brown, COMPUTER VISION 19-22(1982)を参考として援用すると、
2008033958.tif 000003
【００５３】
となる。ここでｚは深度位置、ｆは焦点距離、２ｄはカメラ間隔ベースライン、ｘ’’−ｘ’は視差である。
【００５４】
カメラ／センサシステム２０は、演算システム３０によるさらなる処理のためのイメージを捕捉する。カメラ／センサシステム２０は、実装ハードウェア２３に取り付けられた左カメラ２１と右カメラ２２を有する。カメラ２１および２２は、赤外センサのようなセンサにもなり得る。この図におけるカメラの大きさは、教示または説明する目的のために拡大されているので、図示されているよりもさらに小さくなり得る。例えば、カメラは、個々が身につけるめがねになり得る。
【００５５】
この特定の図示は、実装ハードウェア２３の使用を示しているが、図１のような実装ハードウェアは本発明を行うにあたり必要ではない。カメラはなんらかの実装ハードウェアを使用することなく様々な物体に直接に実装され得る。
【００５６】
他の実施形態では単一のカメラのみが用いられる。単一のカメラは、動き得るか、または動き得ない。従って、別個のイメージは、空間／時間特質によって同一であると認められ得る。単一のカメラを用いて、“左”イメージはある時間に捕捉されたイメージと対応し得、“右”イメージは別の時間に捕捉されたイメージと対応し得る。従って、解析は連続するフレームの比較を含む。つまり、ａ、ｂ、ｃ、および、ｄが単一のカメラで捕捉されたイメージの連続するフレームを表すならば、ａとｂが比較され、次にｂとｃ、次にｃとｄ、などと続く。同様に、単一のカメラは二つの別個の位置（すなわち、左位置および右位置）を前後へシフトしまたは動き、捕捉されたイメージは左または右イメージのいずれかへ適切に明示または指定される。
【００５７】
左カメラ２１と右カメラ２２は一対のステレオイメージを捕捉する。これらのカメラはアナログまたはディジタルのいずれかであり得る。ディジタルカメラはSilicon Visionによって広められたものを含む。本発明はディジタル情報を演算するので、システムがアナログカメラを含んでいれば、画像情報はディジタイザ（図示せず）を使用してディジタル形式に変換されなければならない。
【００５８】
フレームグラバは、カメラシステム２０または演算システム３０のいずれかに取り付けられ得る。たいてい、フレームグラバはディジタイザを有し、入ってくるアナログ信号をディジタルデータストリームに変換する。ディジタイザがフレームグラバに与えられないならば、別個のディジタイザが使用されうる。イメージデータは、ケーブルまたはワイヤ４０を介してカメラ／センサシステム２０から演算システム３０に送信される。
【００５９】
当業者によって通常知られているように、アナログ信号を形成する輝度データは、カメラ／センサシステム２０によって最初に捕捉される。アナログ信号は、電圧または電流の大きさによって表され得る。一つの実施形態では、カメラ／センサシステムは、この電圧または電流の大きさを０から２５５の範囲のルミナンス値に直す。ここで、０は黒を、２５５は白を表す。他の実施形態では、ルミナンス値は、０から５１１の範囲であり得る。これら０から２５５のルミナンス値をディジタルで表すために、８ビットが使用される。この８ビット値は、それぞれのピクセルまたはイメージ要素に対する輝度データを表す。他の実施形態では、カメラ／センサシステムは、イメージされる光景の温度特性を捕獲する赤外センサである。この温度情報は、輝度データに直され得、同じ方法でルミナンス値として使用され得る。
【００６０】
演算システム３０は、コンピュータ３４、マルチメディアスピーカ３２および３３、モニタ３１、および、マウス３６を有するキーボード３５を含む。この演算システム３０は、単独のパーソナルコンピュータ、ネットワークワークステーション、ネットワークにつながったパーソナルコンピュータ、ネットワークターミナル、または、特別な目的の映像／グラフィックワークステーションであり得る。
【００６１】
示された実施形態では、イメージデータを処理するのに使用されるハードウェアおよびアルゴリズムは、演算システム３０のコンピュータ３４に見られる。演算システムは、周辺装置相互接続(ＰＣＩ）規格に従う。一つの実施形態では、ＰＣまたはワークステーションホストと再構成可能なイメージ処理システムとの通信は、ＰＣＩバスで扱われる。
【００６２】
生放送または映像のソースデータは、フレームグラバから入ってくるイメージをともにＰＣＩバスでイメージ処理システムに送られる。あるいは、カメラは映像データをイメージ処理システムの端子に直接送られ得る。その方法は、（１）アナログ入力を使用して、ドータカードにおいてディジタイザを使用してイメージ信号をディジタル化して、ノイズ補償の間にディジタルデータをイメージ処理システムに送るか、または、（２）ディジタルカメラを使用するかのいずれかである。イメージ処理システムの視差計算は、明度が映像カメラに対して近接する光景要素のリアルタイム映像を生成する。
【００６３】
図２は、パーソナルコンピュータまたはワークステーションにおいて本発明のイメージ処理システムが一つ以上のＰＣＩカードに適合する周辺装置相互接続（ＰＣＩ）準拠システムを示す。ＰＣＩ準拠システムは、演算システム３０において見られ得る。本発明の一つの実施形態は、ＰＣＩバス１８２に接続されるイメージ処理システム１１０である。ホスト演算システムは、ローカルバス１８０およびホスト／ＰＣＩブリッジ１０１に接続されるＣＰＵ１００を含む。さらに、ホストプロセッサは、メインメモリ１０２に接続されるメモリバス１８１を含む。このホストプロセッサは、ホスト／ＰＣＩブリッジ１０１を介してＰＣＩバス１８２に接続される。ＰＣＩバス１８２に接続され得る他の装置は、音声周辺装置１２０、映像周辺装置１３１、バス１８８を介して映像周辺装置１３１に接続される映像メモリ１３２、ＳＣＳＩアダプタ１４０、ローカルエリアネットワーク（ＬＡＮ）アダプタ１５０、グラフィックアダプタ１６０、および、複数のブリッジを含む。これらのブリッジは、ＰＣＩ／ＩＳＡブリッジ１７０、ＰＣＩ／ＰＣＩブリッジ１７１、および、前述のホスト／ＰＣＩブリッジ１０１を含む。ＳＣＳＩアダプタ１４０は、ディスク１４１、テープドライブ１４２、ＣＤ  ＲＯＭ１４３、ＳＣＳＩバス１８３を介してＳＣＳＩアダプタ１４０に接続されるすべてのような複数のＳＣＳＩ装置に接続され得る。ＬＡＮアダプタ１５０は、ネットワークバス１８４を介する演算システム３０に対するネットワークインタフェースを可能にする。グラフィックアダプタ１６０は、バス１８６を介して映像フレームバッファ１６１に接続される。ＰＣＩ／ＰＣＩブリッジ１７１は、バスマスタによる最適バスアクセスを可能にしながら、不当なロード（undue load)なしに単一のシステムにおける多数のＰＣＩバスおよびＰＣＩ装置の相互接続を可能にする。ＰＣＩ／ＰＣＩブリッジ１７１は、例示的なＰＣＩ装置１７２および１７３をＰＣＩバス１８７に接続する。ＰＣＩ／ＩＳＡブリッジ１７０は、ＩＳＡ装置が同一のシステムに接続されることを可能にする。ＰＣＩ／ＩＳＡブリッジ１７０は、バスマスタ１７４、Ｉ／Ｏスレーブ１７５、および、ＩＳＡ拡張バス１８５を介するメモリスレーブ１７６に接続される。フレームグラバ１３０は、ＰＣＩバス１８２を介する本発明のイメージ処理システム１１０にイメージデータを与える。イメージ処理システム１１０もまた、同一のＰＣＩバス１８２を介してローカルホストプロセッサ１００に接続される。
【００６４】
当業者によって通常知られているように、フレームグラバ１３０のようなフレームグラバは、動く映像、静止した映像、および、生放送の映像オーバーレイ(overlay)を捕捉し表示するフレームグラバイメージ処理システムを与える。フレームグラバが存在することで、Ｗｉｎｄｏｗｓ（登録商標）に対するＶｉｄｅｏ、ＰＣＭＣＩＡ、または、ＰＣＩに十分な互換性があり、および、単一のフレームを捕らえることが出来る。これらのフレームグラバは、カムコーダ(camcorder)、映像レコーダ、ＶＣＲ、ビデオディスク、防犯カメラ、任意の規格ＮＴＳＣまたはＰＡＬに互換性のあるソース、ＲＣＡ型端子でＮＴＳＣ信号を出力する任意の装置、または、任意の規格外の映像信号を含む様々なソースからの入力を受信することが出来る。
【００６５】
上述した実施形態では、フレームグラバは、ピクセルアレイまたはディジタル画像要素を生成する。そのようなピクセルアレイはよく知られている。上述した実施形態は、カメラによって生成された輝度情報を使用し、数アレイを作る。ここで、それぞれの数は、特定の位置での光の強度に対応する。典型的に、数は正確に８ビットである。ここで、０は最も暗い強度値を、２５５は最も明るい強度値を表す。Ｘ（イメージの幅）およびＹ（イメージの高さ）の典型的な値は、３２０×２４０、６４０×２４０、および、６４０×４８０である。それぞれのピクセルで捕捉された情報は、クロミナンス（または色相）およびルミナンス（輝度として本明細書で示している）を含み得る。
【００６６】
代替の実施形態では、イメージデータは、フレームグラバ１３０を介するＰＣＩバス１８２に沿いＰＣＩシステムを通って与えられる必要はない。点線矢印１９９で示されるように、カメラ／フレームグラバからのイメージデータは、イメージ処理システム１１０に直接引き渡される。
【００６７】
ＰＣＩ準拠システムは、４２フレーム／秒で３２０×２４０ピクセルイメージでの２４個のステレオ視差を演算し、３２ビットのセンサスデータの形成を密集して生成する。この速さで動作すると、イメージ処理システムは、約２３億回のＲＩＳＣ相当の命令／秒（２．３giga-ops/秒）で動作し、５億バイト（５００ＭＢ）のメモリアクセス／秒を維持し、２ＧＢ／秒のＩ／Ｏサブシステムのバンド幅を達成し、約７７００万回の点×視差(point×disparity)測定（ＰＤＳ）/秒を達成する。バーストＰＣＩバスインタフェースを有すると、約１２４億回のＲＩＳＣ相当の演算／秒および２６９０ＭＢ／秒のメモリアクセスを使用して、このシステムは２５５フレーム／秒を達成し得る。入力データ対は、時分割方法でデータを受信する二つの空間的に分離されたカメラまたはセンサ、または、単一のカメラまたはセンサからなり得る。
【００６８】
Ｃ．アレイボード
図３に示されているように、ＰＣＩバス１８２に接続されたイメージ処理システム１１０は、演算要素及びメモリのアレイ１１４、ＰＣＩインターフェースユニット１１０、データパスユニット１１２、クロック制御ユニット１１３、及び幾つかの接続バス１１５を含む。アレイ１１４は、部分的なトーラス構成に配列された１６個のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）と１６個のスタティックランダムアクセスメモリ（ＳＲＡＭ）との均質なアレイを含む。これは、単一のボード上に実現され得る。もちろん、ＡＳＩＣ及びカスタム集積回路で実行される場合には、再構成可能な要素を使用せず、トーラス構成は使用しない。
【００６９】
１６個のＦＰＧＡのアレイは、センサス変換、相関、エラー検査（例えば、左右一貫性検査）、及び様々な伝送機能を実行する。これらの機能は、適用可能なレジスタ及びロジックの適切なプログラミングを介して、ＦＰＧＡ内に構築される。本発明のある実施形態は、シストリック的な（systolic）方法でデータを処理する。輝度イメージの各走査線に対して、本発明の並列及びパイプライン化アーキテクチュアは、あるイメージ中の各センサスベクトル（すなわち各イメージ要素）と他のイメージのサーチウインドウの中のそのセンサスベクトルの各々と比較し得る。ある実施形態では、この並列及びパイプライン化システムの出力が、完全なサーチウインドウを有する各データストリームについての、左右最適視差数、ウインドウの左右最小合計ハミング距離、右左最適視差数、及びウインドウの右左最小合計ハミング距離である。
【００７０】
ＰＣＩ対応演算システムで使用される場合には、ＰＣＩインターフェースユニットが、ＰＣＩバスと演算要素のイメージ処理アレイとの間で、（読み出し動作に対する）イメージデータ及び（書き込み動作に対する）対応データのトラフィックを制御する。更に、ＰＣＩホストが、２つ或いは３つのそのようなイメージ処理システムを含んでおり、結果として、単一の標準パーソナルコンピュータ中のより密で且つフレキシブルなパッケージをもたらす。ホストコンピュータは、マザーボード上のＰＣＩコントローラを通して、ＰＣＩインターフェースユニットと直接に通信する。ＰＣＩバスのためのインターフェースは、バースト或いは非バーストモードであり得る。
【００７１】
データパスユニット１１２は、アレイの様々な選択された部分へ及びそこからのデータの移送、並びに６４ビットＰＣＩバス拡張部の管理について、責任を担っている。データパスユニット１１２は、ホストプロセッサとアレイとの間での双方向データ伝送を許容し且つデータ通信タスクを管理する制御構造を有して、プログラムされている。アレイチップ間のパイプライン化されたデータパスは、３３ＭＨｚ以上で動作する。データパスユニット１１２は、アレイとＰＣＩバスとの間の通信を制御するが、ＰＣＩバスの６４ビット拡張部にも直接に接続されている。データパスユニット１１２は、ＰＣＩ３２チップによってプログラムされており、アプリケーションが必要とするように動的に再構成される。
【００７２】
クロック制御ユニット１１３及びデータパスユニット１１２が構成されると、クロック制御ユニット１１３はアレイの残りを構成する。構成データをアレイに直接に伝達するが、１度に１６ビット、１６アレイ演算要素（ＦＰＧＡ及びＳＲＡＭ）の各々に１ビットを、送る。アレイが完全にプログラムされると、クロック制御チップは、アレイ全体に対してのクロック分配を管理する。
【００７３】
ある実施形態では、イメージ処理システムは、完全にボードを構成するために、３レベルのブーストトラップを必要とする。ＰＣＩインターフェースユニット１１０は、イメージ処理システムをＰＣＩバスに直接に接続する。これは、データパスとクロック制御チップとをプログラムし、それらは次にアレイ全体をプログラムする。ＰＣＩインターフェースユニット１１０は、ＰＣＩバスの構成ビットを受け取り、それらをデータパスユニット１１２及びクロック制御ユニット１１３に転送する。
【００７４】
本発明の基本的なハートウェア及びシステムを用いて、実行すべきアルゴリズムの様々な実施形態が述べられる。ハードウエア及び実行されるシステムの更なる詳細は、後述される。
【００７５】
ＩＩ．アルゴリズム／ソフトウェア
Ａ．概略
本発明はアルゴリズムの階層及びこれらのアルゴリズムの様々なアプリケーションでの使用に関するが、対応アルゴリズムは、深度情報を生成するセンサス変換を使用する特定のソフトウェア実施形態の記述を通じて、最も良く説明される。このアルゴリズムは、まず高レベルの概略で説明され、引き続くセクションでは、様々なステップをより詳細に説明する。この明細書の例示的なプログラムでは、ＭＡＩＮと称されるプログラムが、本発明の対応アルゴリズムの一般的な動作及びある実施形態のフローを与える。
【００７６】
アルゴリズムの第１のステップは、イメージを修正することである。これは、各々の輝度イメージについて個別に行われる。修正は、ステレオ対応のエピポーラ制限（epipolar constraint）線がイメージ中の走査線でもあるように、イメージを再マッピングすることである。このステップは、カメラの位置合わせが不適切であったり、レンズのゆがみが個々のイメージを異なったように歪ませたりするときに、有用であり得る。しかし、修正ステップは、オプション的であって、オリジナルイメージが、一つのイメージからの線が修正無しに他のイメージからの線の上にうまくマッピングされるような質であるならば、不必要であり得る。
【００７７】
アルゴリズムの第２のステップは、修正されたイメージにセンサスやランクのような非パラメトリックなローカルな変換を適用することである。議論される実施形態では、使用されるアルゴリズムはセンサス変換である。この演算は、各イメージについての輝度マップをセンサスマップに変換し、センサスマップでは、各ピクセルが、そのピクセルと周囲のピクセルとの間の輝度関係を示すセンサスベクトルによって代表される。
【００７８】
第３のステップは、相関である。このステップは、変換イメージの連続する線に対して演算されて、相関合計バッファを更新する。相関ステップは、参照変換イメージ２（右のイメージ）のサイズＸＷＩＮ×ＹＷＩＮのウインドウの変換値を、視差と称される値だけ置換された参照変換イメージ１（左のイメージ）の同様なウインドウと比較する。比較は、参照イメージ要素のサーチウインドウの内部で、あるイメージの参照イメージ要素と他のイメージの各々のイメージ要素との間で行われる。
【００７９】
相関ステップが進行しているのと同時に、信頼値がまた、同じ相関ウインドウについての左右一貫性検査を実行するか及び／或いは対象計算を合計することによって、演算される。各々の新しい線に対する対象演算器の結果は、ウインドウ合計バッファの一つの線に記憶される。左右一貫性検査及び対象演算は、オプション的である。
【００８０】
相関ステップは、視差結果（disparity result）イメージの演算をもたらす。ここでは、２つの演算が行われる。（１）各イメージ要素のための最適視差値の決定、及び（２）低信頼イメージ輝度或いは視差結果の決定、である。最適視差演算は、最小合計相関値に対応する外部インデックスの生成を伴う。これは、最適マッチの視差を拾い出す。第２の演算は、（ａ）輝度値からの閾値信頼値の形態での対象演算、（ｂ）相関合計バッファ上での左右一貫性検査、及び（ｃ）母集団分析に基づいた視差を選択するためのモードフィルタ、に基づいて、低信頼として幾らかの視差結果を除去する。アルゴリズムの最終的な結果は、オリジナルイメージとほぼ同じサイズの視差値のイメージであり、視差イメージの各ピクセルは、輝度イメージ２の対応するピクセルの視差である。
【００８１】
図４は、様々な機能が、イメージデータを実行し、取り扱い、且つ操作して、他の有用なデータを生成する、本発明のある実施形態の高レベルの表現を示す。本発明のこの実施形態の最終的な目標は、オリジナルイメージの中の個々のイメージ要素に対する選択された最適視差の組である視差イメージ２９０を生成することである。この視差イメージを得るために、イメージデータは、変換され、相関され、エラー及び信頼を検査されなければならない。
【００８２】
光景１０が、左カメラ２１及び右カメラ２２によって捕捉される。適切なフレームグラバ及びデジタイザが、本発明の再構成可能なイメージの処理システムにイメージデータを提供する。個別のピクセル要素及びその各々の輝度の形態である左のイメージデータ２００と右のイメージデータ２０１とは、左の輝度イメージ２１０と右の輝度イメージ２１１とにマッピングされる。これらのイメージは、それぞれ幅がＸ及び高さがＹ（ＸｘＹ）である。センサス変換或いはランク変換のような非パラメトリックローカル変換は、これらの輝度イメージの各々に適用される。変換２１５は、矢印２１８によって示されているように左の輝度イメージ２１０に適用されて、変換されたベクトル左イメージ２２０を生成する。同様に、変換２１６は、矢印２１９によって示されているように右の輝度イメージ２１１に適用されて、変換されたベクトル右イメージ２２１を生成する。これらの変換は、各々のイメージ要素の近隣部或いはウインドウの中のこれら２つの輝度イメージの中のイメージ要素の実質的に全てに適用される。従って、ウインドウのサイズ及び参照イメージ要素の位置は、輝度イメージの端のどのイメージ要素が変換計算で無視されるかを決定する。これらの無視されたイメージ要素は参照イメージ要素としては使用されないが、これらは、他の参照イメージ要素の変換ベクトルの計算では、依然として使用され得る。
【００８３】
本発明は、更に相関合計プロセスを含む。相関合計プロセスは、左イメージと右イメージとの間の対応の決定における一ステップである。相関合計プロセス２２５は、左イメージ２２０のための相関ウインドウの内部の変換ベクトル、及び右イメージ２２１の中の同じサイズの相関ウインドウの内部の変換ベクトルに動作して、単一の矢印２２６で示されているような相関合計マトリクス２３０を生成する。この相関合計マトリクス２３０の生成において、左或いは右イメージの何れかが参照として使用されて、もう一方のイメージの中のウインドウがシフトされる。右イメージが参照として取り扱われるならば、相関合計マトリクス２３０は、相関ウインドウの中の右イメージ２２１の各イメージ要素がどのように相関しているか、或いは左イメージ要素の右イメージ要素からのシフト或いは視差の各々についての相関ウインドウの中で左イメージ要素にどのように対応しているかを示すデータを含む。定義によって、特定の左イメージ要素の、右イメージ要素の様々なシフト或いは視差との相関或いは対応を示すデータは、やはり相関合計マトリクス２３０に含まれている。これらの視差に基づく相関合計及び相関合計マトリクス２３０、矢印２３１で示される最適視差は、各右イメージ要素について選択されて、外部インデックスアレイ２７０に記憶され得る。最終的な視差イメージ２９０は、その後に、矢印２７１で示されているように、外部インデックスアレイ２７０で決定される。ステレオの場合には、視差は、変換イメージ１のウインドウと変換イメージ２のウインドウとの間の水平オフセットである。動きの場合には、視差は垂直オフセットに渡って同様に範囲を有し、第２の変換イメージは、垂直オフセットを有するウインドウを有するために、より多くの線を読まなければならない。これは、図５８に関連して後述される。
【００８４】
視差イメージ決定は、３つのオプションの信頼／エラー検出検査、すなわち、対象演算、左右一貫性検査、及びモードフィルタを含み得る。対象演算は、輝度イメージが高レベル信頼に関連しているかを、捕捉された光景のテクスチュアに基づいて決定する。これより、均一なテクスチュアである光景のイメージ要素に関連している対応演算は、テクスチュアが変化している光景よりも、低い信頼を有する。対象演算は、輝度イメージの一つのみ、左側或いは右側のいずれかにのみ、適用される。しかし、他の実施形態は、両輝度イメージに適用される対象演算をカバーし得る。図４では、対象演算２３５は、矢印２３６によって示されているように右輝度イメージに適用され、対象ウインドウの内部の各イメージ要素について、矢印２３７で示されているように合計のスライディング視差（ＳＳＤ）アレイ２４０を生成する。閾値演算２４１の適用によって、最終対象結果アレイ２５０が生成される。対象結果は、特定のイメージ要素がこのイメージ処理システムの中に確立された信頼閾値をパスするかどうかを反映するデータを含む。対象結果アレイ２５０の中のデータに基づいて、視差イメージ２９０は外部インデックスアレイ２７０に関連して決定され得る。
【００８５】
左右一貫性検査は、エラー検出の形態である。この検査は、右イメージの中のイメージ要素によって最適イメージ要素として選択された左イメージの中のイメージ要素が、最適イメージ要素として、右イメージの中の同じイメージ要素をまた選択する事を、決定且つ確認する。左右一貫性検査２４５は、矢印２４６によって示されているように相関合計アレイ２３０に適用され、矢印２７６で示されているように外部インデックスアレイ２７０と比較され、矢印２４７によって示されているようにＬＲ結果アレイ２６０を生成する。ＬＲ結果アレイ２６０は、左右一貫性検査をパスするイメージ要素を示すデータを含む。ＬＲ結果アレイ２６０は、外部インデックスアレイ２７０と協同して、矢印２６１によって示されるように視差イメージ２９０を生成するために使用される。
【００８６】
第３の信頼／エラー検出検査は、モードフィルタである。モードフィルタは、母集団分析に基づいて視差を選択することによって、選択された最適視差が高度の一貫性を有するかどうかを決定する。これより、外部インデックスアレイ２７０の中の選択された最適視差が、高度の一貫性を示さないならば、その後これらの最適視差は無効にされる。モードフィルタ２７５は、矢印２７６に示されているように外部インデックスアレイ２７０に動作し、矢印２７７に示されているようにモードフィルタ外部インデックスアレイ２８０を生成する。モードフィルタ外部インデックスアレイ２８０は、特定のイメージ要素がその視差一貫性検査をパスした視差を選択したかどうかを示すデータを含む。データ及びモードフィルタ外部インデックスアレイ２８０は、矢印２８１に示されるように、外部インデックスアレイ２７０と協同して視差イメージ２９０を生成するために使用され得る。
【００８７】
これらの３つの信頼／エラー検出検出検査がオプションであることに留意されたい。幾つかの実施形態は、視差イメージ２９０の決定に当たってこれらの３つの検査の全てを行い得るが、他の実施形態ではこれらの検査を全く含まなくてもよい。更に他の実施形態は、これらの検査の組合せを含み得る。或いは、対象演算、左右一貫性検査、及びモードフィルタを含む単一のプログラムが、ＭＡＩＮと呼ばれ得る。この単一プログラムでは、各々のウインドウの中のウインドウサイズ及び参照点の位置が、この信頼／エラー検出検査プログラムの開始において一度実行される。
【００８８】
これらの図は結果の一時的な記憶のために様々なメモリの使用を図示しているが、他の実施形態では、結果を記憶する必要性を無くし得る。これらの実施形態は、上記の様々な演算を並列に及びパイプライン方式で実行して、パイプラインのあるステージで得られた結果が直ぐ後のステージで使用される。残念ながら、タイミングの要求を満たすために、幾つかの一時的な記憶装置が必要であり得る。例えば、左右一貫性検査は相関演算と並列に発生する。パイプラインの出力は、各イメージに対する右から左への最適視差だけではなく、左から右への最適視差も生成する。検査が行われると、結果は必ずしもＬＲ結果アレイ２６０に記憶されない。そのような記憶装置（strage）は、結果が他のプロセッサにオフロードされるか、或いはイメージ処理のヒストリー的な記録が望まれる時に、必要である。
【００８９】
Ｂ．ウインドウ及び参照点
先のセクションは、対応アルゴリズムの概略を示した。このセクションでは、アルゴリズムの各ステップをもっと詳しく説明する後のセクションで使用されるある概念の、より詳しい説明を提供する。
【００９０】
図５（Ａ）及び５（Ｂ）は、ウインドウ或いは近隣部、参照イメージ要素、参照イメージ、及び視差の概念を示す。図５（Ａ）は、右イメージが参照として指定されたときの所与の視差に対する相対的なウインドウ位置を示し、図５（Ｂ）は、左イメージが参照として指定されたときの所与の視差に対する相対的なウインドウ位置を示す。
【００９１】
ウインドウ或いは近隣部は、参照イメージ要素の近くの規定された近傍或いは領域における、イメージ要素の（輝度イメージに比較して）小さいサブセットである。本発明では、ウインドウのサイズはプログラム可能である。ある実施形態は、９ｘ９のサイズの変換ウインドウを使用し、他のウインドウの組は全て７ｘ７のサイズである。変換ウインドウと他のウインドウ（例えば、相関ウインドウ、対象ウインドウ、モードフィルタウインドウ）との相対的なサイズの変更が、本発明の精神及び範囲から逸脱することなく使用され得るが、より小さい相関ウインドウの使用は、深度或いは動きの不連続さにおいて、よりよい局在化をもたらす。
【００９２】
ウインドウ内での参照イメージ要素の位置もまた、プログラム可能である。例えば、変換ウインドウのある実施形態は、変換ウインドウの中心に位置する参照点を使用する。他の実施形態では、参照イメージ要素はウインドウのより下の右側角に位置する。ウインドウの右下角の参照点としての使用は、本発明のボックスフィルタリング実施形態を手助けするが、そこでは、後述するように、過去に計算された結果を、各々の現在の計算に対するウインドウの合計を更新するために使用する。このようにして、ウインドウがあるイメージ要素から他に動くにつれて、新しい要素のみが右下角のイメージ要素になる。
【００９３】
図５（Ａ）は、参照イメージ要素３０２に関連したウインドウ３０１に沿った右イメージ３００を示す。同様に、左イメージ３０３は、ウインドウ３０４とそれに関連した参照イメージ要素３０５とを含む。これらのウインドウ及びそれぞれのイメージの相対的なサイズは、図示の目的で誇張されている。右イメージ３００のウインドウ３０１のサイズは、ＸＷＩＮｘＹＷＩＮである。左イメージ３０３のウインドウ３０４のサイズも、ＸＷＩＮｘＹＷＩＮである。右イメージ３００の上でのウインドウ３０１の位置は、参照イメージ要素３０２の位置によって定義される。ここで、参照イメージ要素３０２が、（ＸＲＥＦ，ＹＲＥＦ）に位置している。参照イメージ要素３０２に関連する様々な演算及び動作が、ウインドウ３０１の中の各々の選択されたイメージ要素に対して実行される。ある場合には、ウインドウ３０１の中の各々の且つ全ての要素が計算で使用され、他の場合には、イメージ要素の一部のみが演算のために選択される。例えば、９ｘ９の変換ウインドウは、その中に位置する８１のイメージ要素を有しているが、実際の変換操作は、参照イメージ要素を囲んでいる３２のイメージ要素のみを使用する。しかし、相関計算のためには、７ｘ７のウインドウは４９のイメージ要素を有し、４９のイメージ要素の全てが相関演算に使用される。
【００９４】
本発明のある実施形態では、右イメージ３００が参照イメージに設定され、左イメージ３１０が、各シフト或いは視差値に対する様々な相関合計演算のためにシフトされる。これより、視差がゼロ（ｄ＝０）では、右イメージのためのウインドウ３０１は（ＸＲＥＦ，ＹＲＥＦ）に位置し、左イメージ３０３のウインドウ３０４は、（ＸＲＥＦ，ＹＲＥＦ）の対応する位置に位置している。右イメージ３００は参照イメージに指定されているので、左イメージ３０３のウインドウ３０４は、各視差値について左から右へシフトされる。これより、参照イメージ要素３０２についての視差ゼロ演算の後には、視差１（ｄ＝１）演算が、左イメージ３０３のウインドウ３０４を１要素位置だけ右に（ＸＲＥＦ＋１，ＹＲＥＦ）シフトさせることによって、行われる。ｄ＝１に対する相関合計のこの組を演算した後に、ｄ＝２における次の視差に対する相関合計が演算される。再び、右イメージ３００のウインドウ３０１を固定したままで、左イメージ３０３のウインドウ３０４を１イメージ要素位置だけ右にシフトさせる。参照イメージ要素３０２に対するこれらの相関合計が、各視差（ｄ＝０、１、２、．．．、Ｄ）について、このシステムについてプログラムされた最大視差値が演算されるまで、演算される。本発明のある実施形態では、視差の最大数は１６（Ｄ＝１６）である。別の実施形態では、視差の最大数は２４（Ｄ＝２４）である。しかし、本発明の精神及び範囲を離れることなく、如何なる数の視差も使用され得る。ステレオに対しては、左イメージの視差オフセットは、右イメージと同じ水平線に沿っている。動きについては、左イメージの対応するイメージ要素の周囲に小さい水平及び垂直の近隣部がある。
【００９５】
図５（Ｂ）は、右イメージではなく左イメージが参照イメージとして指定されたときの視差相関合計演算のための類似したシフトを示している。ここで、左イメージ３０９のウインドウ３１０は、参照イメージ要素３１１に対する様々な相関合計演算のために固定され、右イメージ３０６のウインドウ３０７が、参照左イメージ要素３１１に関する必要な視差の数についての全ての相関合計が計算され記憶されるまで、一度に一イメージ要素位置だけ左にシフトされる。結局、右イメージが参照として指定されれば、左イメージのウインドウが左から右に各視差計算毎にシフトされる。左イメージが参照として指定されると、右イメージが、右から左に各視差計算毎にシフトされる。
【００９６】
Ｃ．非パラメトリックローカル変換
本発明は、非パラメトリックローカル変換を使用する。そのような変換は、要素間の絶対的な同様性ではなく要素が同じデータの組の他の要素に関連する様な方法での比較に基づいて、異なるデータの組のデータ要素を相関させるように設計されている。
【００９７】
２つの非パラメトリックローカル変換が知られている。ランク及びセンサスである。本発明の好適な実施形態はセンサスを使用しているが、代替として、ランク変換も使用でき、他の同様な非パラメトリックローカル変換演算も使用できる。
【００９８】
ランク変換は、ターゲットピクセルの輝度を周囲のピクセルの輝度と比較する。ある実施形態では、ターゲットピクセルよりも高い輝度を有する周囲のピクセルを「１」とし、ターゲットピクセルに等しいか低い輝度を有する周囲のピクセルを「０」とする。ランク変換は、これらの比較値を合計し、ターゲットピクセルに対するランクベクトルを生成する。記載した実施形態では、ランクベクトルは、ターゲットピクセルよりも高い輝度を有する周囲のピクセルの数を示す数からなる。
【００９９】
センサス変換は、以下のセクションでより詳細に説明される。一般には、この変換は、ターゲットピクセルを１組の周囲ピクセルと比較し、他のピクセルの輝度に対するターゲットピクセルの輝度に基づいて、センサスベクトルを生成する。ランク変換は、そのような比較の全ての合計を示す数を生成し、その数を使用して、ターゲットピクセルを特徴付ける。センサス変換は、個別化された比較の結果からなるセンサスベクトル（例えば、より高い輝度或いは、等しいかまたはより低い輝度を有する周囲ピクセルを示す１及び０の列）を生成する。
【０１００】
これらの非パラメトリックローカル変換は、主に比較７の組に依存し、従って、ゲイン或いはバイアスの変化の下では不変であり、ファクショナリズム（factionalism）に対する耐性を有する。加えて、そのような変換は、小数の輝度値に対する限定的な依存性を有している。これより、ローカルな近隣部での少数ピクセルが、多数ピクセルに対して非常に異なった輝度分布を有しているならば、少数メンバーを含む比較のみが実行される。そのようなピクセルは、輝度に比例した寄与をしないが、数に比例して寄与する。
【０１０１】
イメージのゲイン或いはバイアスを変化させても高く安定して不変の結果が得られることは、以下の例によって示される。ピクセルＰを囲む３ｘ３の近隣部ピクセルを想定する。
【０１０２】
Ｐ１  Ｐ２  Ｐ３
Ｐ４  Ｐ    Ｐ５
Ｐ６  Ｐ７  Ｐ８
このピクセルＰを囲む３ｘ３近隣部ピクセルの各ピクセルの実際の輝度値は、以下のように分布し得る。
【０１０３】
１１４  １１５  １２（
１１１  １１６  １２
１１５  １２５  Ａ
ここで、Ｐ８＝Ａであり、Ａは、０＃Ａ＜２５６とＰ＝１１６との間のどの値もとり得る。相対的輝度値に依存するセンサス或いはランクのような非パラメトリック変換を適用すると、以下の比較７の結果が得られる。
【０１０４】
１    １    ０
１          ０
１    ０    ａ
ここで、ａは、Ｐに関する輝度値Ａに依存して１或いは０の何れかであり、この例ではＰ＝１１６である。Ａが０から２５６まで変化すると、Ａ＜１１６であればａ＝１であり、Ａ≧１１６であればａ＝０である。
【０１０５】
センサス変換の結果として、｛１，１，０，１，０，１，０，ａ｝のような何らかのカノニカルオーダの８ビットが得られる。ランク変換は、Ａ＜１１６（ａ＝１）であれば「５」を生成し、Ａ≧１１６（ａ＝０）であれば「４」を生成する。
【０１０６】
この例は、中心ピクセルと近隣部での周囲のピクセルとの比較が近隣部の各ピクセルについて実行される非パラメトリックローカル変換演算を示す。しかし、本発明は十分にフレキシブルであって、サブ近隣部比較を含む。すなわち、実際の演算は、近隣部の全ての単一のピクセルに対してではなく、ウインドウのサブセットに対して行われ得る。従って、上記で示した例に対して、センサス演算は、中心ピクセルを、周囲の８ピクセル全てではなく近隣部のピクセルの幾つかとのみ比較することによって、８ビットよりも小さい長さのビット列を作り得る。
【０１０７】
これらの変換は、ハードウエア利得或いはバイアス差をもたらし得るピクセルＰ８に対する輝度値Ａの大きな変動にもかかわらず、安定した値を示す。そのような変動は、変換によって拾い上げられるが、例えば生の輝度値が合計されるときに生じるように、結果を大きくゆがめることはない。
【０１０８】
同じ理由で、これらの変換はまた、下地のデータに鋭い差が存在するファクショナリズムに耐えることができる。そのような差は、データ収集プロセスでのエラー或いはアーチファクトだけではなく、イメージの実際の差によっても、導入される。例えば、物体を示すピクセルとその物体の後ろの背景を示すピクセルとの間の境界線で、これは生じ得る。
【０１０９】
Ｄ．センサス変換
１．センサス変換概略
以下の名称が、変数、関数、及び組を述べるために使用される。Ｐをピクセルとする。Ｉ（Ｐ）は、８ビット整数のようなｎビットの数で表される、特定のピクセルの輝度を示す。Ｎ（Ｐ）は、Ｐを囲む直径ｄの方形の近隣部のピクセルの組を示す。センサス変換は、近隣部Ｎ（Ｐ）のピクセルに対するＰの相対的な輝度に依存する。ある実施形態では、変換は比較の符号に依存する。例えば、もしＩ（Ｐ′）＜Ｉ（Ｐ）ならばＶ（Ｐ，Ｐ′）＝１、そうでなければ０と定義する。非パラメトリックローカル変換は、ピクセル比較組のみに依存するが、その組とは、以下の順序付けられたペアである。
2008033958.tif 000004
【０１１０】
センサス変換Ｒ＼（Ｐ）は、ピクセルＰを囲むローカルな近隣部Ｎ（Ｐ）を、輝度がＰの輝度よりも低い近隣のピクセル組を示すビット列にマッピングする。これより、中心ピクセルＰの周囲の近隣部（例えば３ｘ３）に対して、センサス変換は、その近隣部の各近隣ピクセルＰ′がその中心ピクセルＰの輝度よりも低い輝度を有しているかどうかを決定し、Ｐを囲むこの近隣についての順序付けられたビットを生成する。言い換えれば、センサス変換は、コアピクセルＰをその直近の近隣にあるピクセル組と比較することによって、ビットベクトルを演算する。ピクセルＰ１の輝度がコアピクセルＰよりも低ければ、そのときにはビットベクトルの位置１が１であり、そうでなければ０である。ベクトルの他のビットが、ビット列が生成されるまで同様に演算される。このビット列は、比較に使用される組の近隣ピクセルの数と同じ長さである。このビット列は、センサスベクトルとして知られている。
【０１１１】
比較組のピクセル数は、変化し得る。ウインドウが大きくなると、より多くの情報が考慮され得るが、不連続さによるマイナスの効果が増加して、必要とされる演算量も増加する。現時点で好ましい実施形態は、３２ビットのセンサスベクトルを含んでいる。
【０１１２】
加えて、現時点で好ましい実施形態は、非パラメトリック変換の基礎として輝度情報を使用しているが、変換は、あるピクセルを他のピクセルに比較するために使用され得るどの定量的情報（色調情報を含む）を使用できる。加えて、記載した実施形態は、単一の参照ピクセルと近隣のピクセルとの個別化した比較組（一連の１対１の比較）を使用しているが、変換は、例えば、ある領域に関連する合計された輝度を周囲の領域に関連する合計された輝度と比較することによって、１つの或いは一連の多数対多数の比較に基づくこともできる。
【０１１３】
Ｎ（Ｐ）＝ＰｒＤとする。但し、ｒは、ミンコウスキ（Minkowski）合計演算を示し、Ｄは、変位組を示す。センサス変換のある実施形態は、以下のようである。
2008033958.tif 000005
【０１１４】
ここで、
2008033958.tif 000006
【０１１５】
は、濃度を示す。以下で述べるように、センサスベクトルは相関ステップで使用される。
【０１１６】
２．センサスウインドウ
現時点で好ましい実施形態は、９ｘ９のセンサスウインドウを使用する。これは、有意な変換を可能にするための十分な情報を盛り込む必要性と、必要な演算を最小にする必要性との間のトレードオフを示す。他の実施形態では、これら２つの考慮点をバランスさせることを考慮しながら、異なったサイズ或いは形状のウインドウを含むことができる。
【０１１７】
３．処理されないイメージ領域
参照ピクセルを囲むセンサスウインドウがマップのエッジを越えて処理しないように、ピクセルマップのエッジに近く位置する参照ピクセルに対する境界条件が存在する。例えば、センサスウインドウが９ｘ９であり、参照ピクセルがウインドウの中央に位置しているとき、完全な（complete）センサスウインドウは、全体イメージのエッジから５ピクセルより近く位置するピクセルに対しては、不可能である。これは、図６（Ａ）に示されており、参照ピクセル３１５が、センサスウインドウ３１２の中央に位置している。完全な（full）センサスウインドウは、参照ピクセル３１５がエッジから４ピクセル以内に位置するときには、不可能である。
【０１１８】
同様に、図６（Ｂ）に示されるように、参照ピクセル（３１８）が、９ｘ９のウインドウ（３２１）の右下のピクセルであれば、イメージの右側エッジ或いは底辺に位置するピクセルは、完全なセンサスウインドウを有するが、イメージの頂部或いは左側エッジから８ピクセルより近くに位置するピクセルは、完全なセンサスウインドウを含まないであろう。このように、完全な変換演算は、内部領域３１４（図６（Ａ））及び３２０（図６（Ｂ））に対してのみ可能である。
【０１１９】
現時点で好ましい実施形態では、これらの内部領域の外側に存在するピクセルに対しては、センサス変換は実行されない。これらのピクセルは、その代わりに無視される。その結果、深度計算が実行される左及び右のイメージのこれらの部分は、実際には全体の利用可能なピクチャー情報のサブセットを示す。他の実施形態では、内部領域の外側のピクセルは、改変されたセンサス変換の対象になり得るが、これは、境界条件の特別な処理を必要とする。そのような特別な処理は、付加的な演算を必要とし、その結果、比較低価格でリアルタイムに高質の深度データを与えるシステムの能力を損ねる。
【０１２０】
現時点で好ましい実施形態では、内部領域３１４及び３２０の全体が変換計算に利用可能であるが、ユーザ（或いは外部ソフトウェア）は、ある行及び列をスキップしてこれらの領域にセンサス変換を実行させないようにすることができる。例えば、これは、もしユーザ（或いは外部ソフトウェア）がイメージのある領域が不変になり、対象となる変化はイメージのサブセットで生じる可能性が高いと判断したときに、行われ得る。例えば、もし、カメラがドアを含む壁を記録していて、ユーザがドアが開いているかどうかに主に関心があるときには、ユーザは、各サイクル毎にドアを含むイメージ領域についてのセンサス変換演算を行うが、その他の全ての領域についてはそのような変換をもっと少ない頻度で行うか、或いはそのような変換を完全に行わないように、アルゴリズムをプログラムすることができる。
【０１２１】
このような方法で特定の行及び列を指定することで、ユーザ（或いは外部ソフトウェア）は、必要な演算を低減させ、それによってシステムをより高速に動作させたり、或いは低コストのシステムに適切に動作させたりすることが可能になる。
【０１２２】
４．センサスベクトルで使用されるセンサスウインドウの内部のピクセルの選択
現時点で好ましい実施形態では、センサスウインドウ或いは近隣部のサイズは、参照中心点を囲むピクセルの９ｘ９ウインドウである。ある実施形態では、センサスベクトルは、参照ピクセルとセンサスウインドウ内の全ピクセルとの比較を含む。９ｘ９ウインドウの場合、これは８０ビットのセンサスベクトルをもたらす。
【０１２３】
しかし、現時点で好ましい実施形態では、センサスベクトルは、参照ピクセルとセンサスウインドウに含まれるピクセルのサブセットとの間の比較を示し、３２ビットのセンサスベクトルをもたらす。サブセットの使用はセンサスベクトルに含まれる情報を減少させるが、この手法は、センサスベクトルを決定するために必要とされる演算ステップを低減させるので、特に有用である。センサスベクトルは各イメージの各ピクセルについて個別に計算されなければならないので、そのベクトルを演算するために必要とされる時間の低減は、全体プロセスにおいて非常に重要なスピードアップをもたらす。
【０１２４】
図７は、参照点（ｘ，ｙ）に中心を有するセンサスベクトルを演算するために使用される９ｘ９のセンサスウインドウの中のイメージ輝度データのある特定の選択及びシーケンスを示す。この図では、数を含む位置は、センサスベクトルの計算のために使用されるピクセルを示し、その数は、そのピクセルに割り当てられたセンサスベクトル内の位置を示す。示されている実施形態では、参照イメージ要素（ｘ，ｙ）のための３２ビットセンサスベクトルに対して使用される特定のピクセルは、以下の通りである：（ｘ＋１，ｙ−４），（ｘ＋３，ｙ−４），（ｘ−４，ｙ−３），（ｘ−２，ｙ−３），（ｘ，ｙ−３），（ｘ＋２，ｙ−３），（ｘ−３，ｙ−２），（ｘ−１，ｙ−２），（ｘ＋１，ｙ−２），（ｘ＋３，ｙ−２），（ｘ−４，ｙ−１），（ｘ−２，ｙ−１），（ｘ，ｙ−１），（ｘ＋２，ｙ−１），（ｘ−３，ｙ），（ｘ−１，ｙ），（ｘ＋２，ｙ），（ｘ＋４，ｙ），（ｘ−３，ｙ＋１），（ｘ−１，ｙ＋１），（ｘ＋１，ｙ＋１），（ｘ＋３，ｙ＋１），（ｘ−２，ｙ＋２），（ｘ，ｙ＋２），（ｘ＋２，ｙ＋２），（ｘ＋４，ｙ＋２），（ｘ−３，ｙ＋３），（ｘ−１，ｙ＋３），（ｘ＋１，ｙ＋３），（ｘ＋３，ｙ＋３），（ｘ−２，ｙ＋４）及び（ｘ，ｙ＋４）。このように、参照イメージ要素（ｘ，ｙ）との比較のために選択される最初のイメージデータは、図７では数「１」によって指定されている（ｘ＋１，ｙ−４）である。比較のために選択される第２のイメージデータは、数「２」によって指定されている（ｘ＋３，ｙ−４）であり、数「３２」によって指定されている最終イメージデータ（ｘ，ｙ＋４）が選択されるまで、続く。どの数によっても指定されていないピクセルは、センサスベクトル計算では無視されるか、或いはスキップされる。この実施形態では、そのような無視されるイメージデータは（ｘ−１，ｙ＋４）に位置しており、項目３２４として示されている。
【０１２５】
他の実施形態では、参照イメージ要素（ｘ，ｙ）のための３２ビットセンサスベクトルに対して使用される特定のピクセルは、以下の通りである：（ｘ−１，ｙ−４），（ｘ＋１，ｙ−４），（ｘ−２，ｙ−３），（ｘ，ｙ−３），（ｘ＋２，ｙ−３），（ｘ−３，ｙ−２），（ｘ−１，ｙ−２），（ｘ＋１，ｙ−２），（ｘ＋３，ｙ−２），（ｘ−４，ｙ−１），（ｘ−２，ｙ−１），（ｘ，ｙ−１），（ｘ＋２，ｙ−１），（ｘ＋４，ｙ−１），（ｘ−３，ｙ），（ｘ−１，ｙ），（ｘ＋２，ｙ），（ｘ＋４，ｙ），（ｘ−３，１），（ｘ−１，１），（ｘ＋１，ｙ＋１），（ｘ＋３，ｙ＋１），（ｘ−４，ｙ＋２），（ｘ−２，ｙ＋２），（ｘ，ｙ＋２），（ｘ＋２，ｙ＋２），（ｘ−３，ｙ＋３），（ｘ−１，ｙ＋３），（ｘ＋１，ｙ＋３），（ｘ＋３，ｙ＋３），（ｘ，ｙ＋４）及び（ｘ＋２，ｙ＋４）。ここで、これらの点は、図７で使用されている同じｘｙグリッドにマッピングされている。
【０１２６】
現時点で好ましい実施形態では、センサスベクトルのために使用される特定のピクセルの選択は、２つの原則に基づいている。（１）非対称性及び（２）簡潔さ。各々は以下のように説明される。
【０１２７】
非対称性は、センサスベクトルのために選択されたピクセルＡ及びＢに対して、対応するピクセル−Ａ及び−Ｂが除外されることを必要とする。すなわち、中心参照ピクセル（０，０）及び比較点（ａ，ｂ）を含む比較組において、点（−ａ，−ｂ）が、非対称性の性質を満たすために比較組に存在しない。これより、（１，−４）に位置し且つ数「１」で指定されたピクセルは、図７で選択され、（−１，４）に位置し且つ数「３２４」で指定されたピクセルは選択されない。（１，４）または（−１，−４）の選択が許容されることに留意されたい。
【０１２８】
非対称性は、あるピクセル関係の２重のカウントを避けるために設計されている。図７のピクセル（ｘ，ｙ）に対するセンサスベクトルが、ピクセル（ｘ，ｙ）と数１〜３２で指定されたピクセル（ｘ，ｙ）を囲む３２のピクセルとの間の関係を示していることを思い出されたい。また、イメージの各ピクセルに対してセンサスベクトルが計算されること、及びこのセンサスベクトルが各ピクセルの周囲の９ｘ９のセンサスウインドウに基づくことも、思い出されたい。
【０１２９】
図７は、ピクセル（ｘ，ｙ）を囲むセンサスウインドウを示す。必要な場合には、このセンサスウインドウはピクセル（ｘ，ｙ）を含み、それは図７に示すセンサスウインドウのための中心参照ピクセルをなす。図７に示されるセンサスウインドウでは、ピクセル「１」は（１，−４）に位置する。これは、図７におけるピクセル３２４の位置の否定を必ず示し、一般原則の典型である。図７のように、中心参照ピクセルからの正及び負のオフセットを示すＸ及びＹ座標にピクセルが位置するセンサスウインドウを考えると、ピクセルＰａがピクセルＰｂを囲むセンサスウインドウに含まれるならば、また、ＰｂはＰａのセンサスウインドウに含まれなければならず、ＰｂのためのセンサスウインドウにおけるＰａの位置は、Ｐａに対するセンサスウインドウにおけるＰｂの正確な否定であるだろう。
【０１３０】
従って、非対称性は、２重カウントを避ける。なぜなら、それによって、ピクセルＡが参照ピクセルＢのセンサスベクトルに含まれていれば、参照ピクセルＢはピクセルＡのセンサスベクトルには決して含まれないことを確実にするからである。これより、ピクセル（ａ，ｂ）を含む相関ウインドウに対して、相関合計はピクセル（ａ，ｂ）の２つの演算を含まない。２重カウントの回避は、有用である。なぜなら、２重カウントは、２重にカウントされた関係に比例しない重みを割り当てるからである。
【０１３１】
現時点で好ましい実施形態では、センサスベクトルのためのピクセルの選択は、簡潔さの原則にも基づいている。簡潔さは、非対称性の要件を条件にして、参照ピクセルにできるだけ近いピクセルが選択されることを要求する。これより、図７で参照ピクセル（ｘ，ｙ）に直かに隣接して位置する８つのピクセルから、４つのピクセル、すなわち、数１３、１６、２０及び２１で指定されたピクセルが、選択される。これは、非対称性を破ることなく参照ピクセル（ｘ，ｙ）からこの距離だけ離れて選択され得るピクセルの最大数である。同様に、参照ピクセルから１ピクセルだけ離れた距離にある１６の位置から、８つのピクセルが選択され（これらは、センサスベクトルビット位置８、９、１２、１４、１７、２３、２４、及び２５と割り当てられる）、参照ピクセルから２ピクセルだけ離れた距離にある２４の位置から、１２のピクセルが選択される（これらは、センサスベクトルビット位置４、５、６、７、１０、１５、１７、１９、２７、２８、２９、及び３０と割り当てられる）。これらの各々の場合に、利用可能なピクセルの半分が選択されている。これは、非対称性を維持しながら可能な最大の数を示す。
【０１３２】
センサスベクトルは３２ビットであるので、外部のリングから、付加的な８ビットが選択される。他の実施形態では、センサスベクトルは３２ビットより多く或いは少なく含み得る。長さ３２が好ましい実施形態で使用されるが、これは、この長さが大抵の処理システムで従来取り扱われてきた長さであり、次のより高い好都合な数（６４ビット）が使用されたときに必要とされる処理のオーバーヘッドを避けながら、深度演算に適すると思われる利用可能なピクセルの半分近くを含み得るからである。
【０１３３】
他の実施形態では、異なるサイズのセンサスウインドウ（例えば、７ｘ７、７ｘ９、９ｘ９、１０ｘ１２、１０ｘ１０）、センサスウインドウ内の参照イメージ要素の異なる位置（例えば、中心、右下角、左上角、中心を外れた位置）、センサスウインドウ内の異なるイメージデータ、センサスウインドウ内の異なる数のイメージデータ（例えば８、１０、１６、２４、３２）、及び、センサスウインドウ内の異なるイメージデータシーケンス（例えば、各行の３イメージ毎、隣接するイメージデータ１つおき）の組合せを使用する。同じ原則が、相関ウインドウ、対象ウインドウ、及びモードフィルタウインドウに適用される。
【０１３４】
Ｅ．相関
データの組が、各データの組の中でのデータ要素の相互関係を示すように変換（例えば、センサス変換が一例である）されると、データの組内で変換された要素を相関させる必要が生じる。再び、ステレオイメージからの深度を計算するためのセンサス変換の使用が、例示される実施形態として使用される。
【０１３５】
１．ハミング距離
好ましい実施形態では、ハミング距離が、参照イメージの中のピクセルを他のイメージの中のピクセルに相関させるために使用される。２つのビット列の間のハミング距離とは、これら２つのビット列の中で異なるビット位置の数である。２つのピクセルの対応は、センサス変換の適用後にハミング距離を最小化することによって、演算される。従って、ほとんど同じ輝度構造を有する２つのピクセル領域は、ほとんど同じセンサス変換を有し、それら２つの代表センサス変換値は小さい。
【０１３６】
ピクセルＰ及びＱが２つの変換されたピクセルを示し、Ｐは１つの入力イメージに対するセンサス変換されたピクセルであり、Ｑは、第２の入力イメージに対するサーチウインドウＷ（Ｐ）の中のセンサス変換されたピクセルである。２つの変換されたピクセル間のハミング距離は、２つのピクセルに関して異なっているセンサスベクトル内のビット位置の数（すなわち、一方のセンサスベクトルでは「０」で、他方では「１」）を計算することによって、演算される。これより、例えば、３２ビットのセンサス値は、０から３２の範囲のハミング距離をもたらし、ハミング距離０は、２つのセンサスベクトルが同一であることを示し、ハミング距離３２は、個々のビット位置が全て異なる２つのセンサスベクトルを示す。
【０１３７】
ハミング距離は、できるかぎりマッチするセンサスベクトルを決定するために使用されるので、全ての比較的大きなハミング距離を効果的に等しく処理することによって、演算効率を向上し得る。これは、飽和閾付け（saturation thresholding）によって実行され得て、そのときには、例えば、１４を超える全てのハミング距離が区別できないものとして取り扱われる。この例では、４ビットがハミング距離を記憶するために使用され得て、００００はハミング距離０を示し、０００１はハミング距離１を示し、００１０はハミング距離２を示し、００１１はハミング距離３を示し、同様に１１１１まで続いて、１５〜３２の範囲のハミング距離を示す。この範囲のハミング距離は２つの値の間に大きな差があり、従ってほぼ確実に対象外であることを意味しているので、飽和閾付けは、記憶空間（６ではなく４ビットを使用する）及び演算リソースを、質を犠牲にすることなく低減する。
【０１３８】
Ｆ．動くウインドウの合計及びボックスフィルタリング
最も単純な実施形態では、参照イメージの各ピクセルは、他のイメージの特定の数のピクセルと比較される。参照イメージとの比較に使用される特定の数のピクセルは、視差或いはサーチウインドウとして知られている。これより、参照ウインドウが右イメージに位置していれば、視差或いはサーチウインドウは左イメージにおけるある数のピクセルで構成される。ある実施形態では、視差ウインドウは、参照ピクセルと同じＸ，Ｙアドレスに位置する他のイメージの中のピクセルで開始して同じ線に沿って多数のピクセルに一方向に延びる。ある実施形態では、左イメージに対する視差ウインドウが、参照ピクセルと同じアドレスに位置するピクセルの右まで延び、右イメージに対する視差ウインドウが左まで延びる。この方向性は、もし同じ物体が２つのイメージに示されたら、その物体は左イメージでは右にオフセットし、右イメージでは左にオフセットするという事実から生じている。別の実施形態では、カメラが垂直に向いていて、視差ウインドウは垂直で、上のイメージについては下に、下のイメージについては上に延びるであろう。
【０１３９】
視差数Ｄは、右イメージデータに関する左イメージデータのシフトを意味し、プログラム可能である。上述したように、視差数はユーザが選択可能である。ある実施形態では、２４或いは１６の視差が使用される。
【０１４０】
最も単純な実施形態では、各参照ピクセルのセンサスベクトルは、その参照ピクセルに対する視差ウインドウの中に含まれる他のイメージのピクセルのセンサスベクトルと比較される。ある実施形態では、この比較は、参照ピクセルと視差ウインドウの各ピクセルとの間のハミング距離を計算し、最低のハミング距離を選択することによって、行われる。
【０１４１】
現時点で好ましい実施形態では、もう少し複雑なシステムを使用し、そこでは、相関はウインドウ中での合計ハミング距離を計算することによって決定される。ある実施形態では、参照イメージの中の各ピクセルについて、そのピクセルのセンサスベクトルと、他のイメージにおけるそのピクセルの視差ウインドウのピクセルのセンサスベクトルとの間で、ハミング距離が計算される。視差ウインドウが２４である（及びその瞬間での境界条件を無視する）とすれば、これによって、参照イメージの各ピクセルについて、２４のハミング距離が得られる。
【０１４２】
各参照ピクセルについての最適視差が、視差ウインドウの各視差を見て、参照ピクセルの近隣部のピクセルにおけるその視差に対するハミング距離を合計することによって、計算される。その後、最低の合計ハミング距離に関連する視差が、最適視差として選択される。
【０１４３】
相関ウインドウ合計の概念が、図８（Ａ）に示されている。ここでは、ウインドウは５ｘ５であり、参照イメージ要素は、ウインドウの右下角に位置している。図８（Ａ）は、（１４，１８）に位置する参照イメージ要素３３１を有するウインドウ３３０を示す。参照イメージ要素３３１について、２４の合計ハミング距離が計算されて、各合計ハミング距離は、ウインドウ中での１つの視差についてのハミング距離の合計を示す。これより、視差０における要素３３１に対するハミング距離が、ウインドウ３３０の中の全ての他の要素についての視差ゼロにおけるハミング距離に、加えられる。この合計は、視差０に関連した合計ハミング距離とされる。この演算は、視差１〜２３について繰り返される。合計ハミング距離の全てが計算された後に、最低の合計ハミング距離が選択される。これより、もしウインドウに対する合計ハミング距離が視差５で最低になると、そのときには、視差５がイメージ要素３３１に対する最適視差として選択される。このようにして、イメージ要素３３１はオフセット或いは視差が５である他のイメージにおけるイメージ要素に対応すると決定される。このプロセスは、参照イメージの各要素について繰り返される。
【０１４４】
各ウインドウは直ぐ近傍にあるウインドウにオーバラップしているので、各参照ピクセルに対する５ｘ５ウインドウにおける２４の合計ハミング距離を別個に計算することは極めて無駄であることに留意されたい。この非効率さは、各ウインドウ計算にて以前の計算を考慮し、新しい要素を追加して古い要素を減じるボックスフィルタリングの概念を使用することによって、除去され得る。
【０１４５】
ウインドウをスライドさせるこのボックスフィルタリングの概念は、図８（Ａ）〜８（Ｃ）に示されている。前述のように、図８（Ａ）は、１４、１８に位置する参照ピクセル３３１に基づいた５ｘ５のウインドウ３３０を示す。ウインドウ３３０の中では、ウインドウの各５列ずつに対して、列の合計が計算されて記憶される。この実施形態では、参照イメージ要素３３１によって同定される列の合計は、３３６、３３７、３３８、３３９、及び３３１のデータの合計を含む。
【０１４６】
このウインドウ３３０が、参照イメージ要素３３１（行１８）によって占められる行に沿って走査（travel）されて各参照イメージ要素についての合計が計算された後に、ウインドウは、次の行（行１９）に包み込まれて（wraparound to ）、各参照イメージ要素に対するその合計演算を続ける。
【０１４７】
図８（Ｂ）において、ウインドウ３３２は、ウインドウ３３０と同じであるが空間的（異なる行及び列）及び時間的（将来の計算）に変位されていて、点（８，１９）に位置する。先と同様に、参照イメージ要素３３３に関連し且つこれによって同定される列の合計が演算されて、列合計アレイに記憶される。この列合計アレイはイメージデータ３４４、３４５、３４６、３４７、及び３３３の合計を含む。
【０１４８】
図８（Ｃ）に示すように、ウインドウ３３４は、ウインドウ３３０及び３３２と同じであるが空間的（異なる行及び列）及び時間的（将来の演算）に変位されていて、いくつかの将来の反復において、点（１３，１９）に位置する。再び、参照イメージ要素３４０に関連し且つそれによって同定される対応する列の合計及び個別のウインドウ合計が、演算される。次の演算のために、ウインドウ３３５が、１つの列に亘って、参照イメージ要素３４１（位置（１４，１９））まで移動する。再び、ウインドウ３３５は、ウインドウ３３０、３３２及び３３４と同じであるが空間的（異なる行及び列）及び時間的（将来の演算）に変位されている。ウインドウ３３５に対するウインドウ合計の計算においては、先に計算されたウインドウ合計（ウインドウ３３４に対する）、及び先に計算された列合計（参照イメージ要素３３１に対する）が、使用される。ウインドウ３３０の右最上部角に位置するイメージデータ（イメージデータ３３６）は、列合計３３１から引き算される。イメージ要素３４１の寄与が列合計に加算されて、参照イメージ要素３４１に関連する新しい列合計が生成される。参照イメージ要素３３３にて先に計算された列合計は、現時点のウインドウ合計（ウインドウ３３４に対するウインドウ合計であった）から引き算される。最後に、参照イメージ要素３４１に関連して新しく生成された列合計が、ウインドウ合計に加算される。これらの新しく生成されたウインドウ合計及び列合計は、引き続く計算で使用される。
【０１４９】
このように、現時点で好ましい実施形態では、ウインドウ合計が、先のウインドウ合計に基づいて計算される。図８（Ｃ）における参照ピクセル３４１に対しては、ウインドウ合計３３５が、直前のウインドウ３３４に基づいて計算される。これは、以下のように行われる。（１）ウインドウ３３５の右側の列について、ウインドウがより高次の行に位置していたときに同じ列に対して計算した列合計を採用して（例えば、図８（Ａ）から列合計３３６、３３７、３３８、３３９、及び３３１を採用して）、列合計（３３６）から最も上の要素を引き算し、参照ピクセル（３４１）を加える。（２）この改変された列合計を先のウインドウ（ウインドウ３３４）についてのウインドウ合計に加算する。（３）先のウインドウから最も左側の列合計を引き算する（例えば、要素３３３を含む列に対する列合計をウインドウ３３４に対するウインドウ合計から引き算する）。このようにして、参照要素３４１に対するウインドウ合計が、ウインドウをスライドさせ、新しい値を加えて古い値を引き算することによって、参照要素３４０に対するウインドウ合計に基づいて、計算され得る。
【０１５０】
図９（Ａ）〜図９（Ｃ）は本発明の一実施態様の概要を示す。これらの図もまた境界条件を無視している。図９（Ａ）は、ウインドウ合計演算の間、３つのウインドウ３４３、３４４および３４５がオーバーラップすることを示す。これらのウインドウは実際は互いに間隔と時間を空けて移動された同一のウインドウである。すなわち、ウインドウ３４３は、参照イメージ要素３５１に対するウインドウ合計の計算のための、ウインドウの特定の過去のポジションを表している。ウインドウ３４４は、参照イメージ要素３５２に対するウインドウ合計の計算のための、それ以後のある時点でのウインドウのポジションを表している。またウインドウ３４５は、同一のウインドウの現在のポジションを表している。参照イメージ要素３５１および３５２がそれぞれウインドウ３４３および３４４を識別するように、参照イメージ要素３４６はこのウインドウを識別する。
【０１５１】
図９（Ｂ）を参照して、ウインドウ３４５に対するウインドウ合計の計算には、過去の計算を用いる必要がある。参照イメージ要素３５１に対して計算された列合計３４７およびウインドウ３４４に対して少し前に計算されたウインドウ合計３５４は既にメモリに格納されている。図９（Ｃ）に示すように、イメージ要素３４９に対するデータおよび参照イメージ要素３５３によって識別される列合計３５０もまたメモリ内で使用可能である。現在のウインドウ３４５に対するウインドウ合計を計算するために、以下の処理を行う必要がある：（１）列合計３４７からイメージ要素３４９からのデータを引く、（２）イメージ要素３４６内のデータを最新の修正列合計３４７に加える（この時点で３４７からのデータを含まない）、（３）列合計３５０（参照イメージ要素３５３に対して前に計算されたもの）をウインドウ合計３５４（ウインドウ３４４に対して前に計算されたもの）から引く、および（４）修正列合計（列合計３４７−データ３４９＋データ３４６）を修正ウインドウ合計（ウインドウ合計３５４−列合計３５０）に加えて現在のウインドウ３４５に対するウインドウ合計を生成する。後述するように、列合計または個々のデータ要素の減算は領域によっては必要でないことがあり得る。
【０１５２】
Ｇ．エッジ領域１〜１０
先に述べた議論はエッジ条件に関する議論を無視しているが、エッジ条件は考慮されなければならない。
【０１５３】
図１０（Ａ）〜図１０（Ｃ）は本発明の一実施態様によるエッジ領域を示す。図１０（Ａ）は多数のエッジ条件と関連する１０個の特定の領域を示す。これらの１０個の領域は概して相関合計、対象演算およびモードフィルタの演算に関する。これらの１０個の領域の正確なサイズおよび位置は、移動するウインドウのサイズおよびウインドウ内の参照イメージ要素の位置に依存する。
【０１５４】
ある実施態様では、ウインドウサイズは７×７（幅がイメージ要素７個×高さがイメージ要素７個）であり、参照イメージ要素の位置はウインドウの右下の角である。処理速度を増大させ且つ本発明の多様な実施態様をリアルタイムに動作させる演算において、列合計バッファを用いるために、これらの領域が存在する。相関およびモードフィルタウインドウについては、これらの１０個の領域は内部エリア３１４または３２０（図６（Ａ）および図６（Ｂ）参照）内に位置される。内部エリア３１４または３２０は変換ベクトルが多数存在する。相関合計は変換ベクトルに直接依存し、モードフィルタは相関合計に間接的に依存する。対象ウインドウについては、これらの１０個の領域は同じ内部エリア３１４または３２０（図６（Ａ）および図６（Ｂ）参照）に限定されない。対象計算は変換計算に依存せず、むしろ輝度イメージに依存するからである。
【０１５５】
上述のように、これらの全ての場合において、イメージの全側部の幾つかの行および列はスキップされ得るため、これらの１０の領域が実際にイメージの許容エリアの単に一部分しか占め得ない。このように相関およびモードフィルタ計算の場合は、内部エリア３１４または３２０（図６（Ａ）および図６（Ｂ）参照）の一部分のみが使用され得、また、対象演算計算の場合は、輝度イメージの一部分のみが使用され得る。
【０１５６】
以下に述べる議論は、参照イメージ要素がウインドウの最も右下の角に位置されており、且つイメージ処理に対する所望のエリアが決定済みである（すなわちスキップされる行および列が既にプログラムされている）ことを前提としている。従って、対象の所望のイメージエリアの左上の角に位置されるイメージ要素に対して、行および列のナンバリングは（０，０）にリセットされる。図１０（Ａ）に示されるように、領域１は第一の行（行０）であり、第１の行にある全ての列である。この領域は列合計アレイを初期化する。
【０１５７】
領域２は行１からＹＥＤＧＥ−１までである。７×７のウインドウの場合、領域２は行１から行５までを含み、これらの行にある全ての列を含む。ここでは、この系は列合計アレイを累積（built up）する。
【０１５８】
領域３は、（０，ＹＥＤＧＥ）に位置されるイメージ要素である。７×７のウインドウの場合、領域３は（０，６）に位置される。ここでは、ウインドウ合計（すなわち相関合計、モードフィルタウインドウ合計、対象演算の差のスライディング合計（ＳＳＤ））が初期化される。
【０１５９】
領域４は、行ＹＥＤＧＥであり、列１から列ＸＥＤＧＥ−１までを含む。７×７のウインドウの場合、領域４は行６上に位置し、列１から列５までの範囲である。ここではウインドウ合計が累積される。
【０１６０】
領域５は、（ＸＥＤＧＥ，ＹＥＤＧＥ）に位置されるイメージ要素であり、一実施態様では、この領域は（６，６）に位置される。ここでは、ウインドウ全体が所望のイメージ処理エリアに組み込まれ（fit into）、列合計全体およびウインドウ合計がその後の計算に使用可能である。
【０１６１】
領域６は列ＸＥＤＧＥ＋１から所望のイメージ処理エリアの端の列まで行ＹＥＤＧＥのを含む。ここでは、上述したように、直ぐ前のウインドウに関連する列合計を引く（例えば７×７のウインドウの場合、現在の参照イメージ要素の右の７行を引く）ことによって新しいウインドウ合計が計算される。ウインドウの下部の最も右の角による追加のイメージ要素合計（現在の参照イメージ要素）が全体のウインドウ合計に加算される。７×７のウインドウの場合、領域６は行６に位置され、列７から所望のイメージ処理エリアの端までの範囲である。
【０１６２】
領域７は、列０にある、行ＹＥＤＧＥ＋１から所望のイメージ処理エリアの下端までを含む。これは列０にある行７およびその下方を意味する。ここでは、１行上のウインドウの上部の右上の角が列合計アレイから引かれ、ウインドウ合計が初期化される。
【０１６３】
領域８は、列１から列ＸＥＤＧＥ−１までの、行ＹＥＤＧＥ＋１から所望のイメージ処理エリアの下端までに位置される全てのイメージデータを含む。これは列１から列５までの行７から下端までという意味である。ここでは、１行上のウインドウの最も右上の角が列合計アレイから引かれ、ウインドウ合計が累積される。
【０１６４】
領域９は、列ＸＥＤＧＥの、所望のイメージ処理エリアの行ＹＥＤＧＥ＋１から下端までを含む。これは、列６の行７から下端までという意味である。ここでは、１行上のウインドウの最も右上の角が列合計アレイから引かれ、完全なウインドウ合計が得られる。
【０１６５】
領域１０は、行ＹＥＤＧＥ＋１から所望のイメージ処理エリアの下端までであり且つ列ＸＥＤＧＥ＋１から所望のイメージ処理エリアの下端までの領域を含む。この領域は、領域の数の１／１０でしかないが、処理の大部分はこの領域で行われる。ここで生じる処理は計算の最も一般的な形態を表している。実際、領域１〜９はエッジ条件または境界値問題を表し、領域１０の一般的なケースに対して、特別なケースである。
【０１６６】
図１０（Ｂ）は領域１０の、他の９個の領域に対する相対的なサイズを示す。アイテム３２６で示されるように、イメージデータの大部分は領域１０にある。エッジ領域１〜９（アイテム３２５で示される）のサイズは領域１０のサイズ（アイテム３２６で示される）と比べて小さい。
【０１６７】
図１０（Ｃ）は領域１０の最も左上の角にあるウインドウのポジショニングを示す。ウインドウ３２９の参照イメージ要素が領域１０（アイテム３２８で示される）の左上の角に設けられる場合、所望のイメージ処理エリアにおいて、ウインドウ３２９の上方にあるのは、エリア３２７のイメージデータの多くとも１行のみでなければならず、またウインドウ３２９より左側にあるのは、エリア３２７のイメージデータの多くとも１列のみでなければならない。
【０１６８】
Ｈ.７×７のウインドウに対するウインドウ合計
図１１（Ａ）〜図１１（Ｊ）は、移動ウインドウサイズが７×７の場合の、１０個の領域の位置およびサイズを示す。これらの１０個の領域は前もって図１０（Ａ）〜図１０（Ｃ）について上記に特定している。図１１（Ａ）〜図１１（Ｊ）において、マトリクスエリアは、本発明の計算が実行される所望のイメージ処理エリアを表す。これらのスキップされた領域が、有用なイメージデータを含み得るという事実にもかかわらず、他の全てのエリアはスキップされたエリアを表す。マトリクスの各「ブロック」は、単一のイメージ要素についての、単一のイメージデータ、変換ベクトル、または極値的（extremal）指標データに対して特定の座標ポジションを表す。７×７のウインドウは幅に７個の「ブロック」、高さに７個の「ブロック」を有する。上述したように、計算の形態および内容は、１０個の領域について、参照イメージ要素の位置の影響を受ける。ウインドウの位置はまたその参照イメージ要素の位置と結合（tie）される。
【０１６９】
図１１（Ａ）は領域１を示す。領域１は、マトリクスの最上行（行０）を含む。ここでは、ウインドウ３５５はウインドウ合計または列合計を計算するために必要な全てのデータを有さない。しかし、ウインドウ３５５およびその参照イメージ要素３５６がこの行に沿って移動すると、後で用いられる多様なアレイおよび変数が初期化される。
【０１７０】
図１１（Ｂ）は領域２を示す。領域２は、行１〜５の全ての列を含む。ウインドウ３５５およびその参照イメージ要素３５６がこの領域の各行および各列に沿って移動すれば、前に初期化された変数およびアレイが累積される。領域１と同様に、ウインドウはイメージデータを完全に含まない。
【０１７１】
図１１（Ｃ）は領域３を示す。領域３は、行６および列０を含む。参照イメージ要素３５６はマトリクスのこの「ブロック」に位置する。この点では、列合計３５７全体が生成可能であり、生成される。この列合計３５７は、ウインドウ３５５におけるこの列にある全てのまたは選択された数のイメージデータの合計である。列合計３５７の存在のため、特定の参照イメージ要素３５６に対するウインドウ３５５のウインドウ合計は初期化可能であり、初期化される。ウインドウ合計は、このウインドウにおける全てのまたは選択された数のイメージデータの合計である。
【０１７２】
図１１（Ｄ）は領域４を示す。領域４は、行６、列１〜５で規定されるエリアを含む。個々の列合計が生成され、ウインドウ合計が累積される。しかし、この点では、完全なウインドウ合計は得られない。
【０１７３】
図１１（Ｅ）は領域５を示す。領域５は、行６、列６を含む。この点では、ウインドウ３５５全体は、所望のイメージ処理エリアの最も左上の角に丁度組み込まれ得る（just fit）。この座標に位置する参照イメージ要素３５６に関連する完全なウインドウ合計が生成され且つ格納される。個々の列合計もまた生成される。この領域の後、演算は、前に計算されたアレイおよびイメージデータの加算および減算の組み合わせを包含する。
【０１７４】
図１１（Ｆ）は領域６を示す。領域６は、行６であって且つ列７から所望のイメージ処理エリアの右端までを含む。ここでは、左にある７列の列合計（ｘ−ウインドウ幅）は直ぐ前に計算されたウインドウ合計から引くことができる。本実施態様では、引かれる列合計は参照イメージ要素３５８に関連する。このイメージデータ３５６はまた前回の繰り返し（previous iteration）においてと同様に列合計に加えられる。最終的に、参照イメージ要素３５６に関して新しく生成された列合計は新しく生成されたウインドウ合計に加えられる。
【０１７５】
図１１（Ｇ）は領域７を示す。領域７は、行７から所望のイメージ処理エリアの底部までであり且つ列０を含む。領域３と同様に、特定の参照イメージ要素３５６に関連するウインドウ３５５に対するウインドウ合計は初期化可能であり、初期化される。しかし、領域３と異なり、参照イメージ要素３６０に関する完全な列合計３６１が前の計算より得られる。参照イメージ要素３５６に対する列合計を計算するために、イメージデータ３５９が列合計３６１から引かれ、イメージデータ３５６が修正列合計３６１（データ３５９以外）に加えられる。参照イメージ要素３５６に関して新しく計算された列合計は、ここではウインドウ３５５に対するウインドウ合計を初期化するために用いられる。完全なウインドウ合計が得られないことに留意されたい。
【０１７６】
図１１（Ｈ）は領域８を示す。領域８は、列１から列５までの、行７から所望のイメージ処理エリアの下端に位置する全てのイメージデータを含む。ここでは、演算は領域７と類似した様式で行われるが、ウインドウ合計がここでは累積される点が異なる。
【０１７７】
図１１（Ｉ）は領域９を示す。領域９は、列６の、行７から所望のイメージ処理エリアの下端までを含む。領域５と同様に、ウインドウ３５５全体が所望のイメージ処理エリアの左上の角に組み込まれ得る。ここでは、参照イメージ要素３５６に関する完全なウインドウ合計が得られる。演算は領域７および８と類似の様式で行われる。
【０１７８】
図１１（Ｊ）は領域１０を示す。領域１０は、行７から所望のイメージ処理エリアの下端までと列７から所望のイメージ処理エリアの右端までを含む。ここで生じる処理は、演算の最も一般的な形態である。領域１０の演算の性質は図８および図９に関して既に述べた。
【０１７９】
Ｉ．代替の実施態様―行合計
本発明の一実施態様は、個々のイメージ要素演算、列合計、ウインドウ合計およびウインドウが行に沿って移動する場合の本明細書で述べたデータ操作スキームに関連する加算/減算を用いるが、別の実施態様はウインドウが列を下方へ移動する場合の同様のスキームを利用する。従って、ウインドウは列を一行ずつ下方へ移動し、列の端に至る。列の端では、ウインドウは次の列などの始点まで移動し、所望のイメージ処理エリアのすべての列および行が横断され且つそこにおけるデータが処理される。ここでは、ほとんどの演算の場合、参照イメージポイントがウインドウの右下の角にある。列合計の代わりに、ラインバッファで行合計が演算される。ウインドウ合計は、現在の参照ポイントの左にあるウインドウ幅の列の個々のデータを現在の行合計から引く工程（現在の領域でこの演算が適用可能な場合）と、この現在の修正行合計に現在のイメージ参照ポイントを加える工程と、現在の参照ポイントからのウインドウ高さに位置された行合計を現在のウインドウ合計から引く工程（現在の領域でこの演算が適用可能な場合）および、直ぐ前に修正されたウインドウ合計に現在の修正行合計に加えて、参照ポイントにおける現在のウインドウ位置に対する新しいウインドウ合計を生成する工程とによって演算される。この実施態様は、本明細書で列合計について述べたものと同じコンセプトを用いているが、この場合はウインドウが列内で一行ずつ下方へ移動する点が異なる。１０個の領域の位置は図１０（Ａ）で示すような領域を取ることで決定され得る。この１０個の領域のレイアウトがｘｙ平面内と仮定すれば、その位置を同一のｘｙ平面内で半時計回りに90度回転させ且つｚ平面内で180度反転させることによって、ウインドウが列を一行ずつ下方に移動する場合の代替実施態様に対する１０個の領域の位置が決定され得る。
【０１８０】
Ｊ．相関合計バッファの記述
図１３（Ａ）は相関合計バッファの構成を示す。相関合計バッファは図４において最初に導入された。相関合計バッファは最終的には、他の非参照イメージ内の視差によってオフセットされる一連の相関ウインドウに関する、参照イメージ内の相関ウインドウについての相関合計の結果を保持する。相関演算は２つのベクトル間のハミング距離である。相関合計バッファの幅は、イメージ幅（Ｘ）に視差数（Ｄ）を掛けたもの、すなわちＸ*Ｄである。
【０１８１】
相関合計バッファの部分は、ウインドウが演算の間に移動すれば、左右のイメージにある変換ベクトル対の個々のハミング距離を保持できる。イメージ処理システムが演算においてこれらの個々のハミング距離を用いた後、上記の相関合計バッファの部分は続いてウインドウ相関合計に書き換えられ得る。従って、ウインドウが相関バッファの行および列に沿って移動すれば、１つの相関合計バッファには、センサスベクトル-センサスベクトル間の個々のハミング距離およびウインドウ内のこれらのハミング距離の相関ウインドウ合計の両方が、異なる時間フェーズ（phase）で格納される。
【０１８２】
この例では、右のイメージが参照イメージとして指定される（designate）。相関合計バッファでは、特定の行にあるライン３６２は、右イメージの単一の変換ベクトルに対するＤ個の視差相関合計結果を含む。言い換えれば、ライン３６２は、特定の右イメージ参照変換ベクトルと、［ｘ]相関ウインドウに対応する視差によってオフセットされた参照右変換ベクトルのサーチウインドウにおける、左イメージの各変換ベクトルとの間のハミング距離を含む。Ｄ＝１６のとき、１６個の個々のハミング距離（すなわち、ｄ＝０，１，２，...，１５）はライン３６２に収容される。しかし、相関ウインドウは通常１ｘ１より大きい。１つの実施態様では、相関ウインドウは７×７である。よって、７×７相関ウインドウの場合、ライン３６２は、特定の右イメージ参照変換ベクトルに関連する相関ウインドウと、対応する視差によってオフセットされた参照右変換ベクトルのサーチウインドウにおける、左イメージの各変換ベクトルに関連する各相関ウインドウとの間の、合計ハミング距離を含む。同一の行にある変換ベクトルに対するＤ個の視差相関合計結果の他のラインは、ライン３６３および３７０を含む。ライン３７０は、サーチウインドウのそれぞれの変換ベクトルに関連する相関ウインドウと、同一の行内の所望のイメージ処理エリア内のサーチウインドウの変換ベクトルの完全な組（すなわちＤ変換ベクトル）を有する右イメージの最終参照変換ベクトルに関連する相関ウインドウとの間の、合計ハミング距離の最終組を含む。次の行では、代表的（representative）ラインは３６８、３６９および３７１を含む。所望のイメージ処理エリアの最終行では、対応するラインは３７２、３７３および３７４を含む。
【０１８３】
上述したように、ライン３６２は、特定の右イメージ参照変換ベクトルに関連する相関ウインドウと、対応する視差によってオフセットされた参照右変換ベクトルのサーチウインドウにおける、左イメージの変換ベクトルに関連する各相関ウインドウとの間の、合計ハミング距離を含む。従って、データ要素３６４内の相関データは、右イメージの参照変換ベクトルと関連する相関ウインドウと、参照右イメージの変換ベクトルと同じ行および列に位置する左イメージの変換ベクトルに関連する相関ウインドウとの相関を表す。ここで、視差はゼロ（０）であり、そのため左イメージおよび参照右イメージにある２つのウインドウは互いにオフセットされない。
【０１８４】
データ要素３６５内の相関データは、右イメージの参照変換ベクトルに関連するウインドウの、参照右イメージの参照変換ベクトルの位置と同じ行に位置されるが、参照右イメージの変換ベクトルの位置を右に２列シフトさせた、左イメージの変換ベクトルに関連するウインドウとの相関を表す。ここで、視差は２であり、そのため左イメージおよび参照右イメージにある２つのウインドウは互いに関して２列分オフセットされる。
【０１８５】
同様に、データ要素３６６内の相関データは、右イメージの参照変換ベクトルに関連するウインドウの、参照右イメージの参照変換ベクトルの位置と同じ行に位置されるが、参照右イメージの変換ベクトルの位置を右に１５列シフトさせた、左イメージの変換ベクトルに関連するウインドウとの相関を表す。ここで、視差は１５であり、そのため左イメージおよび参照右イメージにある２つのウインドウは互いに関して１５列分オフセットされる。
【０１８６】
他のイメージ要素およびそれらのそれぞれの視差に対する他の相関結果にとっても、上記と同じことが当てはまる。例えば、データ要素３６７の相関データは右イメージのライン３６３によって示される参照変換ベクトルと関連するウインドウの、参照右イメージのライン３６３によって示される変換ベクトルの位置と同じ行に位置されるが、その参照右イメージの変換ベクトルの位置を右に１列シフトさせた、左イメージの変換ベクトルに関連するウインドウとの相関を表す。ここで、視差は１であり、そのためそのため左イメージおよび参照右イメージにある２つのウインドウは互いに関して１列分オフセットされる。
【０１８７】
ウインドウのサイズが１×１（単一の座標位置）の場合は、データ要素３６４（視差＝０）内で計算され且つ格納される値は、右イメージの変換ベクトルと左イメージの対応する変換ベクトルとの間のハミング距離である。ウインドウのサイズが１×１より大きい場合（例えば７×７）、データ要素３６４で計算され且つ格納される値は、右イメージのウインドウの各変換ベクトルと左イメージの対応する変換ベクトルとの間で計算された個々のハミング距離の合計である。
【０１８８】
図１３（Ｂ）は、上記と同じ相関バッファを３次元的に抽出して説明する図である。図示されるように、Ｄ個の相関バッファのそれぞれはＸ×Ｙのサイズであり、所与のディスプレイに対する左イメージの対応するイメージ要素に関する所望のイメージ処理エリアの右イメージの各参照イメージ要素に対する相関合計値を保持する。Ｄ個の視差がある場合には、Ｄ個の上記の相関バッファが与えられる。
【０１８９】
Ｋ．ウインドウ間の相関
図１２を参照して、ウインドウ３７５は、参照右イメージの対応するウインドウ３７６から、特定の視差によってオフセットされる左イメージの３×３のウインドウを表す。相関計算が図１３（Ａ）のイメージ要素３７２に対するデータ要素３７７について行われる場合、視差は５である。図１２を再び参照して、各データ要素Ｌ１からＬ９は、前工程において左輝度イメージから計算された参照左イメージの一部分に対する変換ベクトルを表す。同様に、各データ要素Ｒ１〜Ｒ９は、前工程において右輝度イメージから計算された参照右イメージの一部分に対する変換ベクトルを表す。左ウインドウ３７５に対する参照変換ベクトルはＬ９であり、参照右ウインドウ３７６に対する参照変換ベクトルはＲ９である。変換ベクトルＬ９およびＲ９は、それらのそれぞれの変換イメージ内の同一の行上に位置されるが、Ｌ９は５列（視差＝５）分シフトされる。これらの２つの３×３のウインドウに対する相関は、各変換ベクトル間の個々のハミング距離の合計である。つまり、次に示す変換ベクトルの組の間でハミング距離が計算される。これらの変換ベクトルの組は、Ｌ１とＲ１、Ｌ２とＲ２、Ｌ３とＲ３、Ｌ４とＲ４、Ｌ５とＲ５、Ｌ６とＲ６、Ｌ７とＲ７、Ｌ８とＲ８、およびＬ９とＲ９である。次に、これらの９個の各組のハミング距離計算が合計される。ある実施態様では、完全な相関合計が領域５、６、９および１０について得られる。
【０１９０】
このようなウインドウ内の変換ベクトルの１対１マッチングは本発明の１実施態様である。他の実施態様では、右ウインドウ３７６内の全ての変換ベクトルと左ウインドウ３７５の１つおきの変換ベクトルとのマッチングを含む、異なるマッチングパターンが適用され得る。他の実施態様ではさらに、ある変換ベクトルをセンサス変換計算と類似の様式でスキップまたは無視することを含む。よって、処理速度を増大させるためには、相関演算がＬ１とＲ１、Ｌ３とＲ３、Ｌ５とＲ５、Ｌ７とＲ７およびＬ９とＲ９の間のハミング距離を決定する工程、これらの個々のハミング距離を合計する工程、および参照イメージ要素Ｒ９に対する適当なデータ要素ポジションにそれらのハミング距離を格納する工程を含み得る。
【０１９１】
Ｌ．列合計バッファ
図１５（Ａ）〜図１５（Ｄ）は相関合計、対象計算、および視差カウント計算に用いられる列合計アレイ［ｘ］［ｙ］の例示的な更新シーケンスを示す。図１４（Ａ）〜図１４（Ｄ）は、移動ウインドウに対する列合計アレイ［ｘ］［ｙ］の使用および動作を示す。図解の目的のため、議論の間、図１４（Ａ）〜図１４（Ｄ）を再び参照しなければならない。列合計アレイは、移動ウインドウがある座標位置から他の座標ポジションへ移動すると更新される、単一のラインバッファである。列合計アレイは相関合計計算、対象計算およびモードフィルタ計算に用いられて、ウインドウ合計計算を容易にし且つ処理速度を増大させる。この単一のライン列合計アレイの幅または長さはイメージの幅である。より具体的には、列合計バッファの幅は所望のイメージ処理エリアの幅である。所望のイメージ処理エリアの幅は通常は元のイメージよりも小さい。
【０１９２】
図１４（Ａ）に戻って、ウインドウ３７８およびその参照イメージ要素３７９は（Ｘ＋２，Ｙ）に位置される。つまり、参照イメージ要素３７９は行Ｙおよび列Ｘ＋２に位置される。列合計バッファはＸで開始し、２＊ＸＷＩＤＴＨ−１で終了する。従って、参照イメージ要素３７９は、所望のイメージ処理エリアの左端から２列分離れて位置される。参照イメージ要素３７９に対する列合計の計算後、列合計はポジション３８４で列合計バッファに格納される。列合計バッファは、図１５（Ａ）に示すように、そこに存在する列合計を書き換えて、それを（Ｘ＋２，Ｙ）に位置される参照イメージ要素３７９に対する列合計と置換する。図１４（Ａ）のウインドウは行の残りに沿って移動し、列合計を計算し、列合計バッファ内のそれぞれの位置でこれらの列合計を格納する。このように、図１５（Ａ）に示すように、Ｘ＋２を過ぎれば、列合計は列Ｘ＋３でイメージ要素に対して計算され、その列合計は列合計バッファ内の位置３８５で格納される。行の終点で、列合計バッファは行Ｙにおける各列（Ｘ，Ｘ＋１，Ｘ＋２，...，２＊ＸＷＩＤＴＨ−１）に対する列合計値を保持する。このことは図１５（Ａ）に示されている。これらは時間ｔ＝０のときに列合計バッファに保持される列合計値である。
【０１９３】
時間ｔ＝１のとき、列合計バッファは再び更新される。図１４（Ｂ）を参照して、ウインドウ３８０およびその参照イメージ要素３８１は新しい行の開始時には（Ｘ，Ｙ＋１）に位置される。この位置は、直前の計算から１行下且つ２＊ＸＷＩＤＴＨ−１列分左である。直前の計算がウインドウおよびその参照イメージ要素に対して、行Ｙの終点である位置（２＊ＸＷＩＤＴＨ−１，Ｙ）で行われたことを思い出されたい。図１５（Ｂ）に示すように、位置（Ｘ，Ｙ＋１）で、列合計が計算され列合計バッファ内にポジション３８６で格納される。列合計バッファ内の全ての他のポジションは前の行からの前に計算された列合計値を保持する。従って、図１５（Ｂ）のポジション３８６（Ｘ，Ｙ＋１）は、図１４（Ｂ）の参照イメージ要素３８１に関連する行の列合計を保持し、一方、列合計バッファの残りのポジションでは行Ｙからの列合計値を保持する。実際、参照イメージ要素３７９に対して計算された列合計はポジション３８４で格納されたままである。これは、時間ｔ＝１の場合である。
【０１９４】
時間ｔ＝２のとき、ウインドウ３８０は１列分右に移動したため、図１４（Ｃ）に示すように、参照イメージ要素３８１は（Ｘ＋１，Ｙ＋１）に位置される。この特定の位置（Ｘ＋１，Ｙ＋１）に対する列合計が計算された後、図１５（Ｃ）に示すように、列合計は列合計バッファのポジション３８７に格納される。ポジション３８７の右にある列合計バッファの残りのポジションは、前の行からの前に計算された列合計値を保持する。従って、ポジション３８４は参照イメージ要素３７９に対して計算された列合計をまだ保持している。
【０１９５】
時間ｔ＝3のとき、ウインドウ３８０は一列分右に移動したため、図１４（Ｄ）に示すように、参照イメージ要素３８１は（Ｘ＋２，Ｙ＋１）に位置される。参照イメージ要素３８１はイメージ要素３７９の直ぐ下に位置される。この特定の位置（Ｘ＋２，Ｙ＋１）に対する列合計が計算された後、図１５（Ｄ）に示すように、列合計は、列合計バッファのポジション３８４に格納される。格納は、前回の繰り返し（previousiteration）に、イメージ要素３７９に対して前に計算された列合計を書き換えることによって行われる。ポジション３８４の右にある列合計バッファの残りのポジションは、前の行からの前に計算された列合計値を保持する。この時点で、列合計バッファのポジション３８４は、参照イメージ要素３７９に対してではなく、参照イメージ要素３８１に対して計算された列合計を保持する。勿論、イメージ要素３７９に対する前の列合計値は、実際のポジション３８４への書き換え動作が行われる前に、演算で用いられる。前述したように、３７９に対する列合計からの右上の角のイメージ要素の減算が実行される。イメージ要素３８１の修正列合計への加算もまた、書込み動作の前に行われる。ウインドウおよびその参照イメージ要素の現在の位置に基づく過去の列合計の更新は、単一のライン列合計バッファを用いて繰り返し達成される。
【０１９６】
Ｍ．左−右一貫性検査
図１６（Ａ）〜図１６（Ｇ）は左−右一貫性検査を示す。図１６（Ａ）〜図１６（Ｄ）は、右イメージまたは左イメージのどちらかが参照として指定された場合の、視差に対する相対ウインドウシフトを示す。図１６（Ｅ）〜図１６（Ｆ）は例示的な左および右センサスベクトルの一部分を示す。そして図１６（Ｇ）は相関合計バッファの一実施態様の構造およびそこに格納されるイメージ要素および対応する視差データを示す。
【０１９７】
左−右一貫性検査はエラー検出の一形態である。この検査は右イメージのイメージ要素によって最適イメージ要素として選択された左イメージのイメージ要素がまた、その最適イメージ要素として右イメージの同じイメージ要素を選択するかどうか決定し且つ確認する。基本的に、左イメージのＰ’がベストマッチ（そのイメージ要素Ｐに対する視差のうちの最小の相関合計値）と決定されるように右イメージのイメージ要素Ｐが視差を選択すれば、次に右イメージのイメージ要素Ｐがそのベストマッチであるように左イメージのイメージ要素Ｐ’は視差値を選択しなければならない。光景要素がどちらのイメージにおいても視覚可能でない場合、あるいは光景がマッチングしているように見せかける（plausible match）ために十分なテクスチャを有しない場合には、１つの視界（view）から決定される最小値が意味をなさない可能性がある。
【０１９８】
左−右一貫性検査は、相関合計バッファ内の既に計算されたデータを用いてその任務を遂行する。相関合計バッファは、参照の役目をする右イメージに基づいて生成されたが、本発明の設計は、多様な視差に対するデータが、あたかも左イメージが（順序は異なるが）参照として指定されたように、含まれることを確実にする。
【０１９９】
図１６（Ａ）および１６（Ｂ）に示すように、右イメージが参照として指定される場合、多様な相関合計が右イメージの対応するポジションからのそれぞれのシフトまたは視差に対して演算されると、左イメージは右にシフトする。参照右イメージはその場所に留まる。図１６（Ｃ）および１６（Ｄ）に示されるように、左イメージが参照として指定される場合、多様な相関合計が右イメージの対応するポジションからのそれぞれのシフトまたは視差に対して演算されると、右イメージは左にシフトする。参照左イメージはその場所に留まる。
【０２００】
図１６（Ｅ）は、特定の光景の左イメージに対するセンサス変換ベクトルアレイを示す。センサス変換アレイは左輝度イメージから演算されたセンサスベクトルを含む。センサスベクトルはアレイ全体として、例えばＡＬ、ＢＬ、ＣＬ、ＤＬ、ＥＬ、ＦＬ、ＧＬ、ＨＬ、ＩＬ、ＪＬなどを含む。これらの特定の左センサスベクトルは単一の行に沿って位置される。図１６（Ｆ）は、同一の光景の右イメージに対するセンサス変換ベクトルアレイを表す。これらのセンサス変換アレイは右輝度イメージから計算されたセンサスベクトルを含む。これらのセンサスベクトルは、アレイ全体として、例えばＡＲ、ＢＲ、ＣＲ、ＤＲ、ＥＲ、ＦＲ、ＧＲ、ＨＲ、ＩＲ、ＪＲなどを含む。これらの特定のセンサスベクトルは単一の行であり且つ左イメージのセンサスベクトルＡＬ、ＢＬ、ＣＬ、ＤＬ、ＥＬ、ＦＬ、ＧＬ、ＨＬ、ＩＬおよびＪＬと同じ対応する行に沿って位置される。この例では、選択された視差の数は４（Ｄ＝４）であるため、視差は０から３まで及び（run）、右イメージは参照イメージとして指定される。
【０２０１】
図１６（Ｇ）は、上記のセンサスベクトルに対応する相関合計バッファの一部分を示す。第１の行０に沿って、相関合計データは参照右イメージにおける各参照イメージ要素に対して演算され、相関合計バッファ内の適切なポジションに格納された。他の相関合計データは、バッファの残りの行および列に格納される。従って、第１の参照イメージ要素ＡＲの各視差（０，１，２，３）に対する相関合計データは、行０の第１の４個のデータ位置に格納される。同様に、第２の参照イメージ要素ＢＲの各視差（０，１，２，３）に対する相関合計データは、行０の第２の４個のデータ位置に格納される。データの格納は、参照イメージ要素のそれぞれについて全ての相関合計が計算されるまで、参照右イメージ要素（例えばＣＲ、ＤＲ、ＥＲ、ＦＲ、ＧＲ、ＨＲ、ＩＲ、ＪＲ）の残りについて相関合計バッファ内でこの様式で実施される。
【０２０２】
相関合計バッファのデータが右イメージを参照として用いて生成されたが、一方で、左イメージのウインドウおよび点がそれぞれの視差に対してシフトされることに留意されたい。データはこのコンセプトを反映する様式で格納され且つ構成される。しかし、格納データはまた、相関合計バッファ内の順序は異なるが、あたかも左イメージが参照として指定されたように、左イメージの相関結果も反映する。概して、バッファ内の隣接するデータの連続シーケンスは参照右−左相関を示すが、Ｄ−１オフセットデータの連続シーケンスは参照左−右相関を示す。
【０２０３】
例えば、図１６（Ｇ）のイメージ要素Ｄに注目すれば、その視差０〜３のそれぞれに対する相関合計は既に計算され、隣接するバッファ位置に格納されている。これらの特定のデータは、左イメージのシフトされたイメージ要素（対応する変換ベクトル）に関する参照右イメージ要素ＤＲ（その変換ベクトル）の相関を表す。従って、ＤＲ（図１６（Ｆ）参照）の相関ウインドウ内の変換ベクトルとＤＬ（図１６（Ｅ）参照）の相関ウインドウ内の変換ベクトルとの相関合計は、相関合計バッファ内のデータ要素Ｄの位置０（ｄ＝０）に格納される。相関合計バッファ内のこの位置を図１６（Ｇ）に参照符号７１０として表す。同様に、ＤＲ（図１６（Ｆ）参照）の相関ウインドウ内の変換ベクトルと、ＥＬ（図１６（Ｅ）参照）の相関ウインドウ内の変換ベクトルとの相関合計は相関合計バッファ内のデータ要素Ｄの位置１（ｄ＝１）に格納される。相関合計バッファ内のこの位置を図１６（Ｇ）に参照符号７１1として表す。次に、ＤＲ（図１６（Ｆ）参照）の相関ウインドウ内の変換ベクトルと、ＦＬ（図１６（Ｅ）参照）の相関ウインドウ内の変換ベクトルとの相関合計は、相関合計バッファ内のデータ要素Ｄの位置２（ｄ＝２）に格納される。相関合計バッファ内のこの位置を図１６（Ｇ）に参照符号７１２として表す。最後に、データ要素Ｄに対して、ＤＲ（図１６（Ｆ）参照）の相関ウインドウ内の変換ベクトルと、ＧＬ（図１６（Ｅ）参照）の相関ウインドウ内の変換ベクトルとの相関合計は、相関合計バッファ内のデータ要素Ｄの位置３（ｄ＝３）に格納される。相関合計バッファ内のこの位置を図１６（Ｇ）に参照符号７１３として表す。これらの相関合計はデータ要素Ｄに関連する相関バッファ内の隣接する位置に格納される。他の相関合計データは、他の参照イメージ要素（すなわち変換ベクトル）Ａ、Ｂ、Ｃ、Ｅ、Ｆ、Ｇ、Ｈ、ＩおよびＪなどに対して、同様の方法で格納される。
【０２０４】
ここで、左イメージが参照として指定された場合、右イメージは左へシフトする。その結果、左イメージの全ての左データ要素が全ての視差に対する相関合計の完全な組を持たない。例えば、左データ要素ＡＬは、視差が０の場合、右データ要素ＡＲとのみマッチングし得る。視差が１の場合、ＡＬは右イメージ内に対応するデータ要素を持たない。左イメージが参照として指定された際に、それぞれの視差が左へシフトしたからである。
【０２０５】
従って、視差のそれぞれに対して相関合計の完全な組を有する左イメージの第１のデータ要素は、左イメージのＤデータ要素に位置される。言い換えれば、相関バッファ内のデータ要素Ａの視差Ｄ−１の相関合計と関連する左データ要素は、視差のそれぞれに対して相関合計の完全な組を有する、左イメージの第１のデータ要素である。視差が４（すなわちＤ＝４）の場合、Ｄ−１＝３であり、そのため左イメージの４個のデータ要素に位置されるデータ要素はＤＬである。逆に、相関合計バッファのデータ要素Ａに対して、視差３（すなわちＤ−１）に対する相関合計と関連する左データ要素はＤＬである。
【０２０６】
この例の場合、Ｄ＝４であり全ての視差に対して相関合計の完全な組を有する、第１の左データ要素はＤＬである。視差が３の場合、データ要素ＡはＡＲのウインドウとＤＬのウインドウとの相関合計を有する。Ｄ−１（すなわち３）位置を移動すれば、視差２において、データ要素ＢはＢＲのウインドウとＤＬのウインドウとの相関合計を有する。Ｄ−１（すなわち３）位置を移動すれば、視差１において、データ要素ＣはＣＲのウインドウとＤＬのウインドウとの相関合計を有する。Ｄ−１（すなわち３）位置を移動すれば、視差０において、データ要素ＤはＤＲのウインドウとＤＬのウインドウとの相関合計を有する。この例から明らかなように、相関合計バッファは元々右イメージを参照として用いて作成されたものであっても、相関合計バッファは多様な左イメージデータ要素および視差の分だけシフトされた右イメージデータ要素に対する相関合計を含む。
【０２０７】
左−右一貫性検査は、左および右イメージの対応選択を比較する工程およびそれらがマッチングするかどうかを決定する工程を含む。上述の例では、ＤＲがその最適視差として元々視差２を選択していれば、対応するイメージとしてＦＬを選択する。左−右一貫性検査は、ＦＬがＤＲをベストマッチとして選択したかを確認する。ベストマッチは所与の参照イメージ要素に対する視差のうちの最小の相関合計によって決定される。ＦＬに関して、視差のそれぞれに対する相関データが位置７１４（視差０、ＦＲ）、位置７１５（視差１、ＥＲ）、位置７１２（視差２、ＤＲ）および位置７１６（視差３、ＣＲ）に位置される。位置７１２がデータ要素ＦＬ（位置７１４、７１５、７１２および７１６）に対するこれらの全ての視差のうちの最小の相関合計を含めば、マッチングが起こり、左―右一貫性検査は元々の右から左への選択を確認する。マッチングが生じなければ、両方の視界（view）からの選択は無視できるか、あるいは両方の視界に対する視差のうち最小の相関合計を伴う視差が選択され得る。さらに、この選択は対象演算またはモードフィルタの結果に依存し得る。
【０２０８】
Ｎ．  対象演算
例示的なプログラムで用いられる別の検査は、対象演算器によって生成される信頼値に関する。対象演算から生じる低い値は、輝度イメージ（およびそれ故光景）内にテクスチャがほとんどない（または均一なテクスチャである）ことを表している。よって、有効な相関マッチングの可能性は比較的低い。対象演算から生じる高い値は、輝度イメージ内に多数のテクスチャが存在することを意味する。そのため、有効な相関マッチングの可能性は比較的高い。信頼値が低い場合、イメージ１近傍の輝度は均一であり、イメージ２に対して信頼性をもってマッチングされ得ない。
【０２０９】
視差値が十分高い信頼を有する場合を決定するために閾値が用いられる。閾値はプログラム可能であり、比較的高い値が、ピクセル近傍のテクスチャの量に関連する映像およびディジタイザシステム内のノイズの存在に依存する。
【０２１０】
本明細書に述べる対象演算器は、スライディング合計を用いる部分的なエリアまたはウインドウにわたる部分的な輝度の差も含む。本明細書ではそれを合計輝度差演算器と呼ぶ。スライディング合計法は、イメージ内の各ピクセルで、部分的なエリアの合計／差を演算する動的プログラムの一形態である。対象演算は、ピクセルの周囲の値の長方形の部分的領域（対象ウインドウと呼ばれる）にわたる輝度値の差を演算し、これらの差を合計することによって、この部分的エリア和／差法を用いる。約７×７の比較的小さい対象ウインドウは、本発明の一実施態様にとって十分である。他の実施態様では異なるサイズの対象ウインドウが用いられ得る。様々な相対的なサイズのセンサスウインドウおよび対象ウインドウが、本発明の精神および範囲を逸脱することなく用いられ得るが、より大きいセンサスウインドウおよびより小さい対象ウインドウが深度または動きの不連続性（motion  discontinuities）においてより良好な局在化（localization）を引き起こす。
【０２１１】
Ｏ．  モードフィルタ
モードフィルタは母集団分析（population analysis）に基づく視差を選択する。イメージ要素に関する極値的指標アレイ内に格納された全ての最適視差は、モードフィルタウインドウ内で調べられる（examine）。極値的指標アレイ内の最適視差はＭＡＩＮ内で予め決定されている。典型的に、ウインドウまたはイメージ要素の近傍の最適視差値は視差イメージの単一演算のために極めて均一でなければならない。特に光景内の対象物（object）または光景それ自体が幾分動的かつ変化する場合は、これらの特定の視差値は演算ごとに変動し得る。参照イメージ要素のモードフィルタウインドウ内の最大カウントを有する視差が、そのイメージ要素に対する視差として選択され、ＭＦ極値的指標アレイ内に格納される。これは誤って（strayerroneously）決定された視差値がもたらし得る、所与のイメージ要素に対する影響を打ち消す。例えば、７×７のウインドウの場合、イメージ要素に関連するウインドウの最適視差は、次に示す表のようになる。
2008033958.tif 000007
【０２１２】
この７×７ウインドウの各ブロックは、これらのブロック内に位置される各イメージ要素に対して選択された最適視差を表す。視差の最大数は１６（Ｄ＝１６）である。モードフィルタは、上の表に、大きいフォントで、下線付きでまたボールドで示される視差値４を有する、ウインドウの右下の角における参照点に関する近傍またはウインドウ内で視差の一貫性を決定する。このウインドウの視差値に対するカウントを次に示す。
2008033958.tif 000008
【０２１３】
このウインドウに対するカウント総数は４９（７×７）となるべきである。この例では、視差４値が２０回生じたが、この数はこのウインドウの全ての視差値の最高数である。視差３はこのウインドウ内で１１カウントあり、２番目に高い数である。従って、このウインドウに対して選択され、且つウインドウの右下にある参照点に割り当てられる視差値は、視差４である。これはまた、この位置でのこのイメージ要素に対して選択された最適視差値と一致する。
【０２１４】
視差値の結合（ties）のため、プログラムはスキューされるかまたはバイアスされて、より高い視差値を選択する。従って、この例では、視差４に対するカウントが１４であり且つ視差５に対するカウントが１４であれば、本発明の一実施態様では、このウインドウの最適視差値として視差５を選択する。他の実施態様では、結合状況（tie  situation）においてより低い視差値が最適視差値として選択される。モードフィルタ動作はエラー検出の一形態であるため、本発明の多様な実施態様を機能させるために実施する必要はない。
【０２１５】
Ｐ．  サブピクセル推定
これまでで、本発明のアルゴリズムが所望のイメージ処理エリアに位置される各イメージ要素に対する最適視差が生成された。この離散的または整数の最適視差は、たとえ極めて正確で高性能なものであっても、初期「推測」として特徴付けられ得る。対象演算、左−右一貫性検査、およびモードフィルタの任意の組み合わせを用いて、この「推測」が確認され、修正され、または無視される。この信頼/エラー検査に加えて、最適視差の初期「推測」はさらにサブピクセル推定を用いて正確に（refine）され得る。サブピクセル推定は、その両側に隣接する視差に対する相関合計を再検討する工程と、次に補間（interpolate）して新しい最小相関合計を得て、その結果より正確な視差をが得る工程とによって、より正確な視差（それが存在するならば）を推定する。従って、例として、視差ｄ＝３が最適視差として選択された場合、サブピクセル推定は、視差ｄ＝２、ｄ＝３、ｄ＝４を表す相関合計点間の線分（例えば［Ｖ］）また曲線（例えば放物線）の組などの、数学的に関連する点の組をフィッティング（fitting）することを含む。この「Ｖ」または放物線上の最小点は、適切な信頼/エラー検出検査を有するメイン相関プログラムを通じて初期に選択された離散視差に対応する相関合計と同じか、またはそれより低い相関合計を表す。新しい最大相関合計に関連する推定された視差は、この時点で新しい最適視差として選択される。
【０２１６】
図１７は、正確な（refined）最適視差数を決定するために用いられるサブピクセル推定のコンセプトおよび動作を示す。図１７（Ａ）は例示的な視差数の分布と特定の一イメージ要素に対する相関合計との関係を示す。ｘ軸は所与のイメージ要素に対する許容可能な視差を表す。ここでは、視差の最大数は５（Ｄ＝５）である。ｙ軸は特定のイメージ要素についてｘ軸に示されたそれぞれの視差に対して計算された相関合計を表す。よって、視差０の場合の相関合計はＹ０、視差１の場合の相関合計はＹ１、視差２の場合の相関合計はＹ２、視差３の場合の相関合計はＹ３および視差４の場合の相関合計はＹ４と計算される。この例では、Ｙ２＜Ｙ１＜Ｙ３＜Ｙ０＜Ｙ４である。最初に、アルゴリズムは最適視差として視差２を選択する。それが最も小さい相関合計であるからである。この初期の選択が対象演算、モードフィルタ、および左−右一貫性検査を通過すると仮定すれば（これらの信頼/エラー検出検査が少しでも役立てば）、この初期の選択は最適視差として特徴付けられる。図１７（Ａ）では、視差が整数であるため、相関合計が離散点にプロットされることに留意されたい。初期に選択された最適視差周辺にある相関パターンが存在すると仮定すれば、これらの多数のプロットされた点を通過して補間することにより、初期に選択された最適視差に関連する相関合計値よりも小さい相関合計値を生じ得る。
【０２１７】
図１７（Ｂ）は上記の補間の一方法を示す。図１７（Ａ）と同じプロットを用いて、本発明の一実施態様に沿った補間方法は、「Ｖ」字形を形成する２つの線分を用いる。「Ｖ」は、３点――視差２（すなわちＹ２）に対する初期に選択された相関合計の点、およびこの初期に選択された最適視差数（すなわち視差２）の直ぐ前（すなわち視差１に対する相関合計Ｙ１）および直ぐ後（すなわち視差３に対する相関合計Ｙ３）の視差数に関連する２個の相関合計の点を通って描かれている。この図では、正確な最適視差数は、相関合計Ｙ２よりも小さい相関合計ＹＯＰＴに対して１．８である。この正確な視差数を用いて、距離／動き（motion）／深度の演算をより正確にできる。
【０２１８】
「Ｖ」は異なる形を含んでいてもよい。ある実施態様では、「Ｖ」は完全な「Ｖ」、すなわち図１７（Ｂ）において角度１＝角度２であるが、角度についての特定値は１プロットから他のプロットまで変化し得る。角度１＝角度２である限り、完全な「Ｖ」が２次元スペースの任意の３点を通って描かれ得る。相関合計の特定の相関合計値の位置と、初期に選択された最適視差に関連する相関合計値に対する視差数プロットとの関係は、角度１および角度２に対して選択される角度値を決定する。
【０２１９】
次の式が、この新しい最適視差を計算するために用いられ得る。ここでも図１７（Ｂ）を参照する。
2008033958.tif 000009
【０２２０】
変数Offsetは、このサブピクセル推定動作の前の、初期に選択された離散最適視差からのオフセットを表す。ＭＩＮ（ａ，ｂ）関数は２つの値ａまたはｂの小さい方を選択する。ＭＡＸ（ａ，ｂ）関数は２つの値ａまたはｂの大きい方を選択する。従って、図１７（Ｂ）の例では、初期に選択される離散視差は２であり、計算されるオフセットは−０．２であり、その結果新しく推定される視差は１．８である。
【０２２１】
Ｑ．並行演算
明晰になることを意図して、議論はシーケンシャル処理（ｓｅｑｕｅｎｔｉａｌ  ｐｒｏｃｅｓｓｉｎｇ）に焦点を当ててきたが、本発明を実行するに当たって、さまざまな動作が、互いに別々の時間に行われる必要はない。むしろ、可能な限り早くエンドユーザに使用可能な結果を提供するために、動作は並行して実行され得る。実際ある実施形態は、並列動作およびパイプライン動作を要求する。つまり、システムは、シストリック（ｓｙｓｔｏｌｉｃ）様式でデータを処理し得る。
【０２２２】
本発明のある実施形態は、完全な並列およびパイプライン様式で左右の一貫性の検査を実行する一方で、視差の各々についての相関を決定する。さらに詳細な議論のために、以下、図４８、４９、５０、５２、５４、５５および５７を参照して、ハードウェア実現に言及する。
【０２２３】
ある実施形態は、まず所望のイメージ処理領域内の、関連する全イメージデータについてセンサス変換を演算し、次に生成されたセンサスベクトルのアレイから相関結果を演算する。別の実施形態において、イメージデータがシステムに与えられると、相関結果を素早く提供するために、センサス変換が、相関演算と並行して、イメージデータに適用される。従って、センサからの十分な数のイメージ輝度データがシステムによって受け取られた場合、対象の光景についてのセンサスベクトルを素早く生成するために、センサス変換がイメージ輝度データに即座に適用され得る。通常は、十分なイメージ輝度がセンサス計算のために利用可能かどうかの決定は、センサスベクトル生成のために選択されるセンサスウインドウのサイズ、センサスウインドウ参照点の位置およびセンサスウインドウ内の特定のイメージ輝度データに依存する。センサスベクトル計算のために使用されるセンサスウインドウ内の最終点が、左右両方のイメージについて利用可能である場合、センサス変換プログラムが開始し得る。これが、所望のイメージ処理領域の上方左端の隅についての単一のセンサスベクトルを計算する。
【０２２４】
十分なセンサスベクトルが、ある与えられたイメージ要素について相関結果を計算するために利用可能である場合、システムは相関合計プログラムをトリガまたは開始する。通常、左右のイメージの各々についての第１のセンサスベクトルが利用可能である場合、相関プログラムが、これら２つのベクトルについてのハミング距離を即座に計算し得、列合計およびウインドウ合計アレイを開始し得る。更なるイメージ輝度データがシステムによって受け取られると、更なるセンサスベクトルが生成され得、相関合計が列毎およびウインドウ毎に集められる。
【０２２５】
十分なウインドウ合計が利用可能な場合、視差最適化プログラムが開始し得る。従って、相関合計プログラムが、ある与えられたイメージ要素についての視差の各々についての相関合計を計算している場合、最適な視差が決定され得る。視差最適化プログラムが、ある与えられたイメージ要素についての視差の中の最小の相関を選択し、それを極値指標アレイ内に格納する。
【０２２６】
相関合計および最適視差決定、またはシステムによるイメージ輝度データ受容の受容のいずれかと並行して、対象動作が開始され得る。対象動作が、イメージ輝度データ受容とともに開始する場合、対象結果が、後の使用のために格納される。対象動作が、相関合計および最適視差決定プログラムとともに開始する場合、対象結果は、イメージ要素のために選択された最適視差の信頼を評価するために、即座に使用され得る。
【０２２７】
極値指標アレイが、イメージ要素について、十分な最適視差データを選択した場合、モードフィルタおよび左右一貫性検査が開始し得る。これらのエラー検出検査は、データが利用可能になると、選択された最適視差（つまり、左右一貫性検査）または最適視差の選択された群（つまり、モードフィルタ）を評価し得る。これら並行処理の全てが、フレーム内でデータ毎に進行し得、リアルタイムでの使用のために、結果がユーザに伝送される。
【０２２８】
本発明のさまざまな動作は、センサス変換、相関合計、視差最適化、対象動作、左右一貫性検査、モードフィルタ、および特定のキャッシング動作を含む。これら動作の量は、列合計およびウインドウ合計を介して、イメージ処理システム内で実行される。コンピューティング要素のアレイに加えて、システムは、ホストシステムからのコンピューティングおよびメモリリソースを利用し得る。
【０２２９】
ＩＩＩ．  例示的なプログラム
Ａ．メインプログラム
上で論じたコンセプトは、ステレオイメージからの深度を計算するためにセンサス変換を使用する例示的なプログラムを検討することによって説明され得る。
【０２３０】
図１８は、さまざまな任意性を有する本発明の一実施形態のハイレベルなフローチャートを示す。この実施形態において、さまざまな動作が、展開されたループを使用して実行される。展開されたループは、処理時間を節約するために、「イフ．．．ゼン．．．ネクスト」（”Ｉｆ．．．ｔｈｅｎ．．．Ｎｅｘｔ”）のループを実質的に省略する反復性の演算として、当業者には公知である。つまりプログラムがループに関する条件をテストする必要がない場合、これらのステップは組み込まれず、処理時間およびリソースを消費しない。
【０２３１】
”メイン（ＭＡＩＮ）”と呼ばれるプログラムは、ステップ４００において開始する。ステップ４０５が、所望のイメージ処理領域を決定する。通常、対象のオブジェクトは、スクリーンの小さな領域内に位置し、一方、光景の残りの部分は単に静的な背景である。このことが、リアルタイムアップデートのために所望のイメージ処理領域に焦点を当てる頻繁な演算を可能にし、一方で、静的な背景はよりずっと低い頻度で処理され、全く処理されない場合には、ノンリアルタイムモードでディスプレイに伝送される。他のケースにおいて、光景の他の部分が静的かどうかに関わらず、ユーザは光景の特定の領域に焦点を当てることを望み得るか、または光景全体が所望のイメージ処理領域であり得る。
【０２３２】
ステップ４１０は、本発明のこの実施形態において利用される、さまざまなアレイについてメモリスペースを割り当てる。左右のカメラのための元の輝度イメージが、各Ｘ×Ｙである。上で論じたように、他の実施形態において、Ｘ×Ｙは、光景の元の輝度イメージの画分（ｆｒａｃｔｉｏｎ）である所望のイメージ処理領域も表し得る。
【０２３３】
輝度イメージに基づいて、左右変換ベクトルが生成される。これらのベクトルは各々Ｘ×Ｙのメモリスペースを必要とする。列合計ラインバッファが、輝度イメージおよび変換イメージのラインに沿った各参照イメージ要素について計算されたさまざまな列合計を格納するために、長さＸの単一のラインを必要とする。相関合計バッファが、左右の輝度イメージについての最大の相関合計結果を保持する。相関合計バッファの幅または長さがＸ＊Ｄであり、Ｘは輝度イメージ幅、Ｄは視差の数である。相関合計バッファの高さはＹ＋１である。さらにもうひとつのラインまたは行が、領域５および６についての相関合計結果を格納するために必要とされる。相関の計算に基づいて、ディメンションＸ×Ｙの極値指標アレイが生成され、そのアレイが最適な視差を含む。最終的に、ディメンションＸ×Ｙの視差イメージが、最適視差から生成される。
【０２３４】
他の実施形態において、ステップ４０５とステップ４１０とが入れ換えられ得る。つまり、メモリ割り当てステップ４１０が、イメージ処理領域決定ステップ４０５の前に行われる。これが意味するのは、所望のイメージ処理領域が、イメージのための割り当てられたメモリスペースと同じかまたは小さいサイズでしかないということである。
【０２３５】
ステップ４２０は、光景の所望のフレームレートで、別個の左右の輝度イメージを得る。ステップ４３０は、左右のイメージのためのローカル変換ベクトルを演算し、各々の左右変換ベクトルアレイ内にそれらを格納する。ある実施形態において、変換はセンサス変換である。別の実施形態において、変換はランク変換である。そのようなベクトルを演算するために、変換ウインドウのサイズおよび変換ウインドウ内の参照点の位置が規定されねばならない。ある実施形態において、変換ウインドウは９×９であり、一方他の実施形態においては、７×７などの異なるサイズが使用され得る。参照点の位置はウインドウの中心である。他の実施形態において、ウインドウの下方右端の隅などの異なる参照点が使用される。
【０２３６】
ステップ４４０が、相関プロセスを開始し、このプロセスは左右のイメージ両方に依存する。この時またはこの時より前に、システムがいずれのイメージが参照イメージであるかを決定する。ある実施形態において、右のイメージが参照イメージとして指定される。ステップ４４０は、相関ウインドウ内の参照右イメージの（イメージ要素と関連した）各変換ベクトルについての相関合計の値を、同じサイズの相関ウインドウ内の左イメージの、対応する視差シフトされた変換ベクトルに関して演算する。従って、各右イメージ要素は、視差シフトされた左イメージ要素に関してＤ相関合計結果を有する。ある実施形態において、相関動作はハミング距離である。他の実施形態において、相関動作はハミング重量である。ある実施形態において、相関ウインドウは７×７、つまり、７個の変換ベクトル掛ける７個の変換ベクトルである。他の実施形態において、相関ウインドウは、９×９などの異なるサイズであり得る。相関ウインドウサイズは、データを処理するのに要求される処理時間と得られた結果の正確さとの間のバランスを表す。
【０２３７】
ステップ４５０が、ステップ４４０において生成された相関合計バッファに基づく参照右イメージ内の各イメージ要素についての最適視差を決定する。相関合計バッファが、左イメージの各所望のシフトまたは視差に関して、参照右イメージ内の、各イメージ要素についての相関合計の値（つまりハミング距離）を含むので、右イメージ内の各イメージ要素の最適視差は、参照右イメージの各イメージ要素について計算および格納された、視差に基づく相関合計の値の中の、最も低い相関合計の値である。次に、これらの最適視差は、視差イメージを生成するために使用され、他のアプリケーションについても有用である。ステップ４６０においてプログラムは終了する。しかし上のステップは、捕捉され得る輝度イメージの次のフレームのために繰り返され得る。次のフレームまたは一連の後続フレームは、光景内のオブジェクトの動き（または動きの欠如）を表し得、もしくは光景の異なる領域も表し得る。プログラムはステップ４０５、４１０または４２０から繰り返され得る。
【０２３８】
図１８はまた、３つの任意の信頼／エラー検出検査、つまり対象動作、モードフィルタおよび左右一貫性検査、を示す。対象動作は、光景の性質または描かれた光景内のオブジェクトに起因して得られた結果の信頼の決定を下す。光景またはイメージ化された光景内のオブジェクトが、変化するテクスチャーを有する場合、相関決定が信頼できる左右のイメージの”マッチ（ｍａｔｃｈ）”を表す信頼は高くなり得る。一方で、光景またはイメージ化された光景内のオブジェクトが均一なテクスチャーを有するまたはテクスチャーを有さない場合、相関決定が信頼できる左右のイメージの”マッチ”を表す信頼は比較的低くなり得る。
【０２３９】
対象動作４７０への呼び出しが、ステップ４２０の後、ステップ４３０の後、ステップ４４０の後およびステップ４５０の後を含むがそれに限定されないプログラムの中のいくつものポイントにおいて行われ得る。対象動作は輝度イメージに依存するので、輝度イメージが対象の光景のために得られるよりも前に、呼び出され得ない。呼び出された場合、必要な量の輝度イメージが利用可能な場合には、対象動作が、ＭＡＩＮに戻るか、または計算を続け得る。対象動作は、左または右のいずれかの、ただ１つの輝度イメージを必要とし、いずれかひとつが利用可能な場合、対象動作が誘発され得る。一方のまたは他方のイメージ、例えば右のイメージが、対象計算のために使用されねばならないとユーザが予定する場合、対象動作への呼び出しは、所望の輝度イメージが利用可能になるまで、遅延されねばならない。
【０２４０】
対象動作の性質のために、対象動作はスキャンインされた全てのフレームについて、イメージ処理システムへと呼び出される必要はない。あるケースにおいて、光景または光景内のオブジェクトは、静的なので対象動作を実行する必要性が比較的低い。対象結果がフレームからフレームへとまたはフレームの群からフレームの群へと頻繁に変化し得ない場合、イメージ処理システムは、有価な演算リソースを対象計算に転用することを望み得ない。しかし、光景が動的である場合、またはイメージ処理システムが、変化が頻繁に起こる光景の小さな領域に集中する場合に、対象動作が極めて頻繁に呼び出され得る。
【０２４１】
ステップ４７２が対象動作のためのメモリを割り当てる。これらのメモリスペースは、対象列合計ラインバッファ（Ｘ）、差のスライディング合計（ＳＳＤ）アレイ（Ｘ×Ｙ）、および対象結果アレイ（Ｘ×Ｙ）である。あるいは、メモリ割り当てステップは、対象動作内においてよりもむしろステップ４１０において、ＭＡＩＮプログラム内に組み込まれ得る。
【０２４２】
この時に前後して、対象ウインドウのサイズおよびウインドウ内の参照点の位置が決定される。ある実施形態において、対象ウインドウのサイズは７×７であり、参照点の位置はウインドウの下方右端の隅である。あるいは、これらのパラメーターは、対象動作プログラム内よりもむしろＭＡＩＮ内において決定され得る。
【０２４３】
対象動作は、ステップ４７４において、選択された輝度イメージ、例えば右輝度イメージに対して実行される。閾が設けられた（ｔｈｒｅｓｈｏｌｄｅｄ）信頼結果は、対象結果アレイ内に格納される。ステップ４７６において、対象動作プログラムはＭＡＩＮへ戻る。
【０２４４】
モードフィルタは、イメージ処理システムによって選択される最適視差の一貫性を、母集団分析に基づく視差を選択することによって決定する。イメージ要素に関連する極値指標アレイ内に格納された全ての最適視差が、モードフィルタウインドウ内で調べられる。極値指標アレイ内の最適視差は、ＭＡＩＮ内で前もって決定されている。典型的には、ウインドウ内のまたはイメージ要素の近傍の最適視差の値は、視差イメージの単一の演算のためにかなり均一でなければならない。参照イメージ要素のモードフィルタウインドウ内において最大のカウントを有する視差は、イメージ要素についての視差として選択され、ＭＦ極値指標アレイ内に格納される。モードフィルタ動作はエラー検出の形態であるので、本発明物のさまざまな実施形態を機能させるためにモードフィルタ動作が実行される必要は全く無い。
【０２４５】
モードフィルタプログラム、つまりステップ４８０への呼び出しは、最適視差が決定されＭＡＩＮ内の極値指標アレイ内に格納された後の、つまりステップ４５０の後のいずれの時点でもなされ得る。この時点に前後して、モードフィルタウインドウのサイズおよびウインドウ内の参照点の位置が決定される。ある実施形態において、モードフィルタウインドウのサイズが７×７であり、参照点の位置はウインドウの下方右端の隅である。あるいは、これらのパラメータは、モードフィルタプログラム内よりもむしろＭＡＩＮ内で決定され得る。
【０２４６】
ステップ４８２において、メモリスペースが、単一のライン列合計バッファ（ここでは視差カウントバッファ（Ｘ）と呼ぶ）およびＭＦ極値指標アレイ（Ｘ×Ｙ）について割り当てられる。ＭＦ極値指標アレイが、各イメージ要素についてモードフィルタによって選択された視差の値を保持する。あるいは、メモリ割り当てステップが、モードフィルタプログラム内よりもむしろステップ４１０においてＭＡＩＮプログラム内に組み込まれ得る。モードフィルタ動作が、ステップ４８４において実行され、ＭＦ極値指標アレイ内に最終結果を格納する。ステップ４８６はＭＡＩＮへ戻る。
【０２４７】
左右一貫性検査は、エラー検出の形態である。右イメージ内のイメージ要素Ｐが、左イメージ内のＰ′がその最良のマッチ（イメージ要素Ｐについての視差の中で最も低い相関合計の値）であると決定するように、視差を選択する場合、左イメージ内のイメージ要素Ｐ′は、右イメージ内のイメージ要素Ｐがその最良のマッチとなるように、視差の値を選択する。左右一貫性検査は、そのタスクを実行するために、相関合計バッファ内の既に計算されたデータを使用する。相関合計バッファは参照として利用される右イメージに基づいて生成されたが、それは、左イメージが参照として指定されているかのような、さまざまな視差についてのデータを必然的に含む。しかし、各左イメージ要素について関連するデータは、異なる様式で構成される。
【０２４８】
左右一貫性検査への呼び出しが、ステップ４９０において行われる。左右一貫性検査が相関合計および最適視差に依存するので、プログラムは、ステップ４５０の後のいずれの時点においても呼び出され得る。あるいは、プログラムは、相関合計の演算（ステップ４４０）の後で即座に呼び出され得、中間バッファ（ｉｎｔｅｒｍｅｄｉａｔｅ  ｂｕｆｆｅｒ）内の左イメージ要素についての最適視差を一時的に格納し得、ＭＡＩＮが、最適視差（右から左）の演算を行い、それらを極値指標アレイ内に格納するまでに、左右一貫性検査プログラムを終了し得る。この時点で、左右一貫性検査の最終ステージ（左から右を右から左と比較する）が実行され得る。
【０２４９】
左右一貫性検査が、ステップ４９２において、ＬＲ結果アレイ（Ｘ×Ｙ）のためのメモリスペースを割り当てる。あるいは、メモリ割り当てステップが、左右一貫性検査プログラム内よりもむしろステップ４１０において、ＭＡＩＮプログラム内に組み込まれ得る。左右一貫性検査動作はステップ４９４において実行される。プログラムはステップ４９６においてＭＡＩＮへ戻る。
【０２５０】
本発明は、相関合計をコンピューティングするのに先立って、輝度イメージから変換ベクトルを生成するために、ローカル変換を使用する。そのような変換の１つがセンサス変換である。図１９は、センサス変換動作のフローチャートおよびセンサスベクトルの生成を示す。単一のフローチャートが示されているが、もちろんそれは左右両方の輝度イメージに対して適用可能である。一般に、センサス変換は、センサスウインドウのサイズおよびウインドウ内の参照点の位置を考慮しつつ、所望のイメージ処理領域内の、実質的に全てのイメージ要素に適用される。センサス変換は、参照イメージ要素に関して、センサスウインドウ内のイメージ要素の相対イメージ輝度を数値（ｎｕｍｅｒｉｃａｌ  ｔｅｒｍ）で評価し且つ表す、ノン−パラメトリック動作である。その結果、イメージ要素の数値的評価はベクトルである。
【０２５１】
本発明のソフトウェア／アルゴリズム局面の別の実施形態において、センサスおよび相関ステップは並列およびパイプライン式で実行される。従って、一方のイメージ内のセンサスベクトル（または相関ウインドウ）は、もう一方のイメージのサーチウインドウ内の、それぞれ視差シフトされた（ｄｉｓｐａｒｉｔｙ−ｓｈｉｆｔｅｄ）センサスベクトル（または相関ウインドウ）の各々と、並列およびパイプライン式で、相関される。この相関ステップと同時に、左右一貫性検査が実行される。従って、最適視差およびこれらの視差の左右一貫性検査は、並行して計算される。この並列およびパイプラインシステムの出力は、左右の最適視差の数、ウインドウについての左右の合計ハミング距離の最小値、右左の最適視差の数、および完全なサーチウインドウを有する各データストリームのための、ウインドウについての右左の合計ハミング距離の最小値である。
【０２５２】
Ｂ．センサス変換プログラム
図１９に示されるように、ステップ５００において、センサス動作が開始する。ステップ５１０がセンサスウインドウのサイズおよび参照点の位置を決定する。ある実施形態において、センサスウインドウは９×９であり、参照点の位置はセンサスウインドウの中心である。各センサスベクトルの長さもまた決定されねばならない。ある実施形態において、センサスベクトルは３２ビットの長さである。つまり、参照点に加えて、センサスウインドウ内の３２個のイメージ要素が、３２ビットのセンサスベクトルを生成するために使用される。他の実施形態において、１６、２４および４８を含む、異なるセンサスベクトル長が使用され得る。もちろん、センサスベクトル長の選択は、センサスウインドウのサイズに密接に関連している。センサスウインドウが９×９よりも大きな場合、センサスベクトルは３２ビットよりも長くなり得る。逆に、センサスウインドウが９×９よりも小さな場合、センサスベクトルの長さは３２ビットよりも短くなり得る。
【０２５３】
ステップ５１５および５２０は、ステップ５６０および５７０と共に、センサス変換がイメージデータに適用される順序（ｏｒｄｅｒ）を示す。センサスウインドウは、行内の全ての列を通って、左から右へと行の最後まで、移動する。最後の点において、センサスウインドウは次の行の初めに即座に移動し、次の行内の全ての列を通って移動し、最後の行および最後の列内のイメージデータについてセンサス変換が実行されるまで、一般にこの様式で継続する。図１９のフローチャートに示すように、列ループは、外側の行ループに対して内側のループである。つまり、センサス変換がその行の全ての列内のイメージデータについて演算された後でのみ行が変わる。
【０２５４】
センサスウインドウについて参照点としても指定される、ある与えられた行および列の位置（ｘ，ｙ）について、ステップ５２５に示されるように、センサスベクトルが全てゼロへと初期値化される。ステップ５３０が、（ｘ，ｙ）において中心参照点のイメージ輝度値をフェッチする。ステップ５３５が、現センサスウインドウ内の選択されたイメージ要素のイメージ輝度データをフェッチする。この実施形態において、第１の選択された点は、ボックス５８０に示すように（ｘ＋１，ｙ−４）である。この現センサスウインドウ内の他のイメージ要素についての輝度値も後に、センサスウインドウ内の所望のイメージ要素の全てが調べられてしまうまで、フェッチされる。ある実施形態において、参照イメージ要素（ｘ，ｙ）についての３２ビットのセンサスベクトルを生成するための、センサス変換演算のために選択されたセンサスウインドウ内の、これら近傍のイメージデータは、（ｘ＋１，ｙ−４），（ｘ＋３，ｙ−４），（ｘ−４，ｙ−３），（ｘ−２，ｙ−３），（ｘ，ｙ−３），（ｘ＋２，ｙ−３），（ｘ−３，ｙ−２），（ｘ−１，ｙ−２），（ｘ＋１，ｙ−２），（ｘ＋３，ｙ−２），（ｘ−４，ｙ−１），（ｘ−２，ｙ−１），（ｘ，ｙ−１），（ｘ＋２，ｙ−１），（ｘ−３，ｙ），（ｘ−１，ｙ），（ｘ＋２，ｙ），（ｘ＋４，ｙ），（ｘ−３，ｙ＋１），（ｘ−１，ｙ＋１），（ｘ＋１，ｙ＋１），（ｘ＋３，ｙ＋１），（ｘ−２，ｙ＋２），（ｘ，ｙ＋２），（ｘ＋２，ｙ＋２），（ｘ＋４，ｙ＋２），（ｘ−３，ｙ＋３），（ｘ−１，ｙ＋３），（ｘ＋１，ｙ＋３），（ｘ＋３，ｙ＋３），（ｘ−２，ｙ＋４）および（ｘ，ｙ＋４）である。このパターンは図７に示されている。  
【０２５５】
別の実施形態において、参照イメージ要素（ｘ，ｙ）についての３２ビットのセンサスベクトルに使用される特定のイメージデータは、（ｘ−１，ｙ−４），（ｘ＋１，ｙ−４），（ｘ−２，ｙ−３），（ｘ，ｙ−３），（ｘ＋２，ｙ−３），（ｘ−３，ｙ−２），（ｘ−１，ｙ−２），（ｘ＋１，ｙ−２），（ｘ＋３，ｙ−２），（ｘ−４，ｙ−１），（ｘ−２，ｙ−１），（ｘ，ｙ−１），（ｘ＋２，ｙ−１），（ｘ＋４，ｙ−１），（ｘ−３，１），（ｘ−１，１），（ｘ＋２，ｙ），（ｘ＋４，ｙ），（ｘ−３，ｙ），（ｘ−１，ｙ），（ｘ＋１，ｙ＋１），（ｘ＋３，ｙ＋１），（ｘ−４，ｙ＋２），（ｘ−２，ｙ＋２），（ｘ，ｙ＋２），（ｘ＋２，ｙ＋２），（ｘ−３，ｙ＋３），（ｘ−１，ｙ＋３），（ｘ＋１，ｙ＋３），（ｘ＋３，ｙ＋３），（ｘ，ｙ＋４）および（ｘ＋２，ｙ＋４）である。
【０２５６】
ステップ５４０が、ちょうどフェッチされた近傍のイメージ要素、この例では（ｘ＋１，ｙ−４）についての輝度データが、（ｘ，ｙ）に位置する中心参照イメージ要素の輝度データよりも小さいかどうかを判定する。小さい場合、ステップ５４５が、センサスベクトル内の対応するビット位置を、”１”として設定する。これが第１の近傍のイメージ要素であったことから、センサスベクトル内の対応するビット位置は、ビット０、つまり最下位ビット（ＬＳＢ）である。ステップ５４０においての決定が”ＮＯ”として評価される場合（近傍のイメージ要素について輝度の値が、参照イメージ要素についての輝度の値と同値である、またはそれよりも大きい場合）、プログラムはステップ５５０へと分岐し、且つ対応するヒット位置（ビット０）のセンサスベクトルは”０”のままである。
【０２５７】
ステップ５５０が、センサスウインドウ内の全ての関連する近傍のイメージ要素が評価されたかどうかを決定する。ステップ５５０は、センサスベクトル内の対応するビット位置を設定する、ステップ５４５の後の決定分岐点でもある。ステップ５５０が”ＹＥＳ”と評価する場合、プログラムは、並列に配置されたセンサスウインドウ内の参照イメージ要素についてのセンサスベクトル全体を演算し、ここでステップ５６０によって指示されるように、次の列へと進むことができる。ステップ５５０が”ＮＯ”と評価する場合、ウインドウ内の参照イメージ要素についてのセンサスベクトルはまだ完成されず、且つセンサスウインドウ内の次の近傍のイメージ要素がフェッチされる。この例において、次のイメージ要素が、（ｘ＋３，ｙ−４）に位置する。この第２のイメージ要素についてのセンサスベクトル内の対応するビット位置は、ビット１である。次にフェッチされた近傍のイメージ要素についてのセンサスベクトル内の対応するビット位置はビット２などである。最後の近傍のイメージ要素についてのセンサスベクトル内の対応するビット位置はビット３１、つまり最上位ビット（ＭＳＢ）、である。このループ５３５−５４０−５４５−５５０は、参照イメージ要素についてのセンサスベクトル全体が生成されるまで、繰り返し循環する。もし参照イメージ要素についてのセンサスベクトル全体が生成された場合、ステップ５５０での決定は”ＹＥＳ”へと評価する。
【０２５８】
前に述べたように、ステップ５６０がステップ５２０と共に、同じ行内の次の列へと分岐するようにプログラムに指示する。現列が行内の最後の列である場合、ステップ５６０はステップ５７０へと進んで次の行へ演算を継続し、行の先頭に位置するイメージ要素が処理される次のデータとなるように列数はリセットする。参照イメージ要素が行内の次の列（またはその行の最後の列の場合には次の行の第１の列）へと移動すると、センサスウインドウがそれと共に移動する。この次の参照点の位置は、図１９において発明の理解を容易にするために、（ｘ，ｙ）で示される。従って、新しい参照点（ｘ，ｙ）の周辺に選択された近傍のイメージ要素は、ボックス５８０内に列挙したとおりである。所望のイメージ処理領域内の全てのイメージ要素についてのセンサスベクトルが生成された場合、プログラムはステップ５９０において終了する。
【０２５９】
Ｃ．相関合計および視差の最適化プログラム
本発明の１つの実施形態は、ボックスフィルタリングアレイデータの合計および操作を上述したように有用化する。個別のデータの行列またはアレイのためにウインドウ合計が所望であるときは、以下のステップが実行され得る：（１）現在の参照点の位置から同一列内でウインドウの高さ分上に位置するイメージ要素からのデータを、現在の列合計から減算する。（２）現在の参照イメージ要素中のデータを、変更された列合計へ加算する。（３）現在の参照点からウインドウ幅分横に位置する列合計を現在のウインドウ合計から減算する。そして、（４）現在のウインドウのためのウインドウ合計を生成させるために、変更された列合計を変更されたウインドウ合計に加算する。特定の領域中の現在のウインドウの位置にもよるが、列合計または個別のデータ要素の減算は、いくつかの領域において不必要であり得る。このスキーム自体が、特定の処理速度を与えられた効果的な処理能力の増加に有利である。ウインドウ合計のアレイに加えて、このキャッシング演算は所望のイメージ処理領域の幅と等しい幅を有する単一のライン列合計バッファを要求する。相関合計プログラムの１つの実施形態は、これらの概念を用いる。
【０２６０】
本発明のソフトウェア／アルゴニズム局面の他の実施形態では、センサスおよび相関のステップは、並列パイプライン方式で実行される。よって、１つのイメージ中のセンサスベクトル（または、相関ウインドウ）は、他のイメージのサーチウインドウ中で、それぞれの視差がシフトしたセンサスベクトル（または、相関ウインドウ）の各々と並列パイプライン方式で相関される。この相関ステップと同時に、左右一貫性の検査も実行される。
【０２６１】
次に本発明の１つの実施形態の相関演算および最適な視差の決定のスキームが議論される。図２０は、全ての領域１〜１０に対する相関合計および視差の最適化の機能の１つの実施形態のハイレベルのフローチャートを示す。プログラムのこの時点において、センサスベクトルが左および右のイメージのために発生される。このセンサスベクトルに基づいて、イメージ処理システムはどちらの左イメージのイメージ要素が右イメージの与えられたイメージ要素と対応するのかを決定しようと試みる。
【０２６２】
図２０に示すように、プログラムはステップ６００から開始する。ステップ６０１は、相関ウインドウの大きさとウインドウ中の参照点の位置とを決定する。１つの実施形態では、相関ウインドウは７×７であり、参照点は、ウインドウの一番右下の角に位置する。
【０２６３】
９つのエッジ条件および１つの一般的な場合が存在することから、演算は異なって実行される。領域１から９はエッジ条件を表し、領域１０は一般的な場合を表す。図１１（Ａ）から１１（Ｊ）について上記で議論したように、ウインドウ全体の相関またはウインドウ合計は、完全なウインドウが所望のイメージ処理領域に適合し得る領域について計算される。すなわち、イメージデータはウインドウの全ての部分において見つけられる。よって、ウインドウ相関合計の全体は、領域５、６、９および１０について計算される。処理の大部分は、領域１０で行われる。１０個の領域に関するウインドウの参照イメージ要素の位置は、どのようにおよび何の演算が達成されたかを指示する。ステップ６０２は、相関演算が実行された領域１から６に適用する。これらの領域は、列合計バッファ、中間相関合計、および相関ウインドウ合計を設定する。相関演算が完成したとき、ステップ６０３が、プログラムが領域７から１０に進むことを要求する。
【０２６４】
参照右イメージ中の各変換ベクトルについて、行の範囲内の列毎に演算が実行され、行の終わりにおいてプログラムは所望のイメージ処理領域中の次の行の第１の列へ進む。これは、ステップ６０４、６０５、６１０、６１２、６１１および６１３に反映される。ステップ６０４、６１２および６１３に規定される低い頻度で生じる行のループは、外側のループであり、一方、ステップ６０５、６１０および６１１に規定される高い頻度で生じる列のループは、内側のループである。プログラムが、行内で列毎に進むのにしたがい、ウインドウは領域７、８、９、および１０の順番で領域を通過する。プログラムが次の行に到達し、行の最後に進んだとき、領域７、８、９、および１０は、図１１（Ｇ）から１１（Ｊ）に再び示されるように、ウインドウによって横切られる。
【０２６５】
初めに、プログラムは、ステップ６０４および６０５に示すように、行Ｉの領域７および列Ｊに進む。行の始めにあるのが当然であるが、ウインドウが領域７にある場合、領域７の相関演算がステップ６０６に要求される通りに実行される。ウインドウが領域８にある場合、領域８の相関演算がステップ６０７に要求される通りに実行される。ウインドウが領域９にある場合、領域９の相関演算がステップ６０８に要求される通りに実行される。ウインドウが領域１０にある場合、領域１０の相関演算がステップ６０９に要求される通りに実行される。
【０２６６】
次へ進む前に、ステップ６１０は、行Ｉおよび列Ｊの現在の参照イメージ要素が行Ｉの最終列にあるかどうか決定する。この決定が「いいえ」と評価した場合、プログラムは次の列Ｊに進み（ステップ６１１および６０５）、ウインドウの位置によってステップ６０６、６０７、６０８または６０９のうちの１つを実行する。ステップ６１０への決定が「はい」と評価した場合、ステップ６１２はこの行が所望のイメージ処理領域の最終行であるかどうか決定する。異なる場合は、ステップ６１３および６０４は、ウインドウが次の行Ｉおよびその列の第１の列Ｊに進むことを要求する（列および行の番号は、最終列および行に到達した後リセットされる）。ステップ６１２の決定が「はい」と評価する場合、相関プログラムはステップ６１４で終了する。
【０２６７】
１．領域１および２
図２１は、領域１および２に対する相関合計および視差の最適化演算の１つの実施形態のフローチャートを示す。プログラムはステップ６１５で開始する。
【０２６８】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が領域１または２に位置する場合、ステップ６１６および６２２が、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求する。相関ウインドウの参照点が行の最後に到達したとき、参照点は次の行の始めに移動する。
【０２６９】
ステップ６１６は、相関ウインドウ範囲内の右イメージ中のセンサスベクトルおよび、それに対応する相関ウインドウ範囲内の左イメージ中のセンサスベクトルを選択するように要求する。これらの左および右のセンサスベクトルは同一の行および列に位置する。すなわち、これらのウインドウは、視差０で互いに関してシフトされない。
【０２７０】
ステップ６１７および６２１は、相関合計が参照右イメージ中の各ウインドウの各々の視差について演算されることを許容するループのそれぞれ始めと終わりである。ここでは、ｚが０からＤ／２−１へと変化し、よって、１６の視差について、Ｄ＝１６であり、ｚが０から７まで変化する。ｚループが用いられる補助的な理由は、データパッキングの目的のためである。
【０２７１】
１つの実施形態では３２ビット長の中間ｔｅｍｐ（ｉｎｔｅｒｍｅｄｉａｔｅ  ｔｅｍｐ）と呼ばれる変数が、２つの異なる視差の相関合計値をホールドする。変数のＭＳＢ部分中の１６ビットは、視差ｄ１のための相関合計値をホールドし、変数のＬＳＢ部分中の１６ビットは、視差ｄ２のための相関合計値をホールドする。よって、１６の視差について、８の中間ｔｅｍｐ値が用いられる。本発明の実施形態において、単一の中間ｔｅｍｐ変数が用いられているため、視差に基づいた相関合計の各一対は、１つのｚループで実質的に同時に演算される。すなわち、システムをインプリメントする１６の視差について、視差０および視差１の相関合計は一緒に処理され、視差２および視差３の相関合計は一緒に処理され、視差４および視差５の相関合計は一緒に処理されるなど、視差１４および視差１５の相関合計が処理されるまで同様の処理が続く。偶数の視差値に関する相関合計は、中間ｔｅｍｐ変数のＭＳＢの半分（１６ビット）中に格納され、一方、奇数の視差値に関する相関合計は、中間ｔｅｍｐ変数のＬＳＢの半分（１６ビット）中に格納される。中間ｔｅｍｐ変数の各半分の長さは１６ビットであるため、所定の視差について最大相関合計値をホールドすることは、十二分である。例えば、任意の２つの３２ビットセンサスベクトル間の、最大可能なハミング距離の値は３２である（左のセンサスベクトルｘは全て０であり、右のセンサスベクトルｘ’は全て１であるので、ｌとｌ’との間のハミング距離は３２である）。１６ビットは、３２のハミング距離の値を適応するのに十二分に長い。よって、中間ｔｅｍｐのためのデータパッキングスキームが設計され、ＬＳＢの半分がＭＳＢの半分への移動、またはＭＳＢの半分が中間ｔｅｍｐ変数の範囲の外への移動に対するキャリービット（またはビット１７）の危険性が存在しない。中間ｔｅｍｐのデータパッキングの概念は図３６に関連して下記に更なる詳細に説明される。
【０２７２】
中間ｔｅｍｐ変数の長さは、より小さく（または、より大きく）形成され得るが、最終的には、この設計は、列合計アレイの大きさに適応するべきである。なぜなら、中間ｔｅｍｐはデータ毎に３２ビット長である列合計アレイに追加されるからである。中間ｔｅｍｐおよび列合計バッファのそれぞれのデータの長さは、それぞれの追加に適応するべきである。その結果、追加の結果が追加演算を正確に反映する。単純化するために、中間ｔｅｍｐおよび列合計は、両方３２ビットである。
【０２７３】
データパックされた中間ｔｅｍｐは、本発明のいくつかの実施形態に組み込まれている。他の実施形態は、データパッキングの概念を用いず、代わりに、２つのイメージセンサスベクトルの間の個別のハミング距離の計算などの中間値を、後に相関合計バッファに格納され、列合計値に加えるためにホールドする単一の変数を用い得る。相関計算は、一時に２つの視差に実行され得ず、むしろ、相関合計は、全てのＤ視差に対する合計が計算されるまで一時に１つの視差に対して決定され得る。
【０２７４】
ステップ６１８は、対応する対のセンサスベクトルの間の個別のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚが０から７までループする。ｚループ内の所定のｚ値について、本発明の１つの実施形態では、異なる視差全体（視差２＊ｚおよび視差２＊ｚ＋１）に関係する一対の相関合計を処理する。ｚ＝０について、左イメージ内の（ｘ，ｙ）に位置するシフトしない（ｄ＝０）相関ウインドウ中のセンサスベクトルと参照右イメージ内の（ｘ，ｙ）に位置する参照相関ウインドウ中の参照センサスベクトルとの間のハミング距離が計算される。これら２つのセンサスベクトルの間の視差０である場合の結果として得られたハミング距離は、中間ｔｅｍｐ変数のＭＳＢの半分に格納される。
【０２７５】
同様に、左イメージ内の（ｘ＋１，ｙ）に位置する１つの列分シフトした（ｄ＝１）相関ウインドウ中のセンサスベクトルと、参照右イメージ内の（ｘ，ｙ）に位置する参照相関ウインドウ中の参照センサスベクトルとの間のハミング距離が計算される。右イメージは、参照イメージとして指定され、相関値は多様な視差または参照右相関ウインドウから左相関ウインドウへのシフトに対して決定されるので、参照右イメージ中の相関ウインドウはシフトされないことに注意されたい。視差１の場合の結果として得られるハミング距離は、中間ｔｅｍｐ変数のＬＳＢの半分に格納される。この時点で、中間ｔｅｍｐ変数は、視差０および１のみに対する、（ｘ，ｙ）における右イメージ相関ウインドウ中の参照点の相関結果をホールドする。続きの演算では、中間ｔｅｍｐは他の視差に対する相関結果をホールドする：ｚ＝１について、視差２および３の相関結果は中間ｔｅｍｐにあり、ｚ＝２について、視差４および５の相関結果は中間ｔｅｍｐにあり、ｚ＝３について、視差６および７の相関結果は中間ｔｅｍｐにあり、ｚ＝４について、視差８および９の相関結果は中間ｔｅｍｐにあり、ｚ＝５について、視差１０および１１の相関結果は中間ｔｅｍｐにあり、ｚ＝６について、視差１２および１３の相関結果は中間ｔｅｍｐにあり、そしてｚ＝７について、視差１４および１５の相関結果は中間ｔｅｍｐにある。
【０２７６】
ステップ６１９は、参照右イメージ中の参照相関ウインドウが領域１に位置する場合、中間ｔｅｍｐの内容で列合計バッファ［ｘ］を初期化する。列合計バッファ［ｘ］は、視差０および１に対する参照右イメージ点の相関結果をホールドする。ステップ６１９は、参照右イメージ中の参照相関ウインドウが領域２に位置する場合、列合計バッファ［ｘ］を前の列合計バッファに中間ｔｅｍｐを加えた内容にアップデートする。列合計バッファ［ｘ］は、視差０および１に対する参照右イメージ点の相関結果をホールドする。
【０２７７】
ステップ６２０は、相関合計バッファ［ｘ］［ｙ］内の参照点（ｘ，ｙ）に位置する参照右相関ウインドウの一対のセンサスベクトルの個別のハミング距離の結果の格納を要求する。相関合計バッファ［ｘ］［ｙ］は、最終的には参照右イメージの所望のイメージ処理領域中の各イメージ要素に関する相関結果をホールドする。領域１について、列合計は本質的に当面は個別の相関結果である。
【０２７８】
ステップ６２１は、プログラムが同一相関ウインドウの同一参照点について異なる一対の視差である次のｚへ進むことを要求する。Ｄ視差に対する全ての相関結果を計算するにあたって、プログラムはステップ６２２へ進む。ステップ６２２は、同一の行の次の列、または現在の参照点が行の最終列に位置する場合は次の行の最初を選択するシステムを指示する。そして、新しい参照点に対する同一相関計算が、各視差について実行される。最終的には、完全な列合計（相関ウインドウの高さ）はまだ入手可能ではないが、列合計アレイ［ｘ］は各視差について構築される。そして、各参照イメージ要素に対する個別の相関結果もまた、相関合計バッファ［ｘ］［ｙ］に格納される。相関合計および視差の最適化演算のこの部分は、ステップ６２３で終了する。
【０２７９】
他の実施形態では、データパッキングの概念および中間ｔｅｍｐ変数は用いられない。０から（Ｄ／２−１）までのｚループ内でハミング距離の対と一緒に扱う代わりに、２つの点の間の単一のハミング距離が計算され得、０からＤ−１まで変化するｚループの相関合計バッファ［ｘ］［ｙ］に格納され得る。
【０２８０】
２．領域３および４
図２２は、領域３および４に対する相関合計および視差の最適化演算の１つの実施形態のフローチャートを示す。プログラムは、領域１および２に若干の変化を加えた基本的には同一の方法で進む。ここでは、列の全部が利用可能であるので、相関ウインドウ全体の相関合計が初期化およびアップデートされ得る。プログラムはステップ６２４で開始する。
【０２８１】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が領域３または４に位置する場合、ステップ６２５および６３２は、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求する。相関ウインドウの参照点が行の最後に到達したとき、参照点は次の行の始めに移動する。領域３は、単一のイメージ要素位置であるので、次の列は領域４である。ステップ６２５は、相関ウインドウ範囲内の右イメージ中のセンサスベクトルおよび、それに対応する相関ウインドウ範囲内の左イメージ中のセンサスベクトルを選択するよう要求する。これら左および右のセンサスベクトルは、同一の行および列に位置する。すなわち、これらのウインドウは、視差０で互いに関してシフトされない。
【０２８２】
ステップ６２６および６３１は、相関合計が参照右イメージ中の各ウインドウの各視差に対して演算されることを許容するループのそれぞれ始めと終わりである。ここでは、ｚが０からＤ／２−１まで変化し、よって、１６の視差について、Ｄ＝１６でありｚが０から７まで変化する。ｚループが用いられる補助的な理由は、データパッキングの目的のためである。上記に説明された中間ｔｅｍｐと呼ばれる変数がデータパッキングの目的に用いられ得る。
【０２８３】
ステップ６２７は、対応する対のセンサスベクトルの間の個別のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚが０から７までループする。ｚループ内の所定のｚ値について、本発明の１つの実施形態では、異なる視差全体（視差２＊ｚおよび視差２＊ｚ＋１）に関係する一対の相関合計を処理する。ｚ＝０について、左イメージ内の（ｘ，ｙ）に位置するシフトしない（ｄ＝０）相関ウインドウ中のセンサスベクトルと参照右イメージ内の（ｘ，ｙ）に位置する参照相関ウインドウ中の参照センサスベクトルとの間のハミング距離が計算される。これら２つのセンサスベクトルの間の視差０である場合の結果として得られるハミング距離は、中間ｔｅｍｐ変数のＭＳＢの半分に格納される。同様に、左イメージ内の（ｘ＋１，ｙ）に位置する１つの列分シフトした（ｄ＝１）相関ウインドウ中のセンサスベクトルと、参照の右イメージ内の（ｘ，ｙ）に位置する参照相関ウインドウ中の参照センサスベクトルとの間のハミング距離が計算される。視差１の場合の結果として得られるハミング距離は、中間ｔｅｍｐ変数のＬＳＢの半分に格納される。この時点で、中間ｔｅｍｐ変数は、視差０および１のみに対する、（ｘ，ｙ）における右イメージ相関ウインドウ中の参照点の相関結果をホールドする。次の演算では、中間ｔｅｍｐは他の視差に対する相関結果をホールドする。
【０２８４】
ステップ６２８は、列合計バッファ［ｘ］を前の列合計バッファに中間ｔｅｍｐを加えた内容にアップデートし続ける。列合計バッファ［ｘ］は、視差０および１に対する参照右イメージ点の相関結果をホールドする。
【０２８５】
ステップ６２９は、相関合計バッファ［ｘ］［ｙ］内の（ｘ，ｙ）に位置する参照右参照点の対のセンサスベクトルの個別のハミング距離の結果の格納を要求する。領域３および４において、列合計全体が入手可能であるが、相関ウインドウ全体の相関合計は入手可能ではない。
【０２８６】
ステップ６３０は、参照点が領域３にある場合、列合計を加算することによって相関合計［ｘ］［ｙ］を初期化する。参照点が領域４にある場合、相関合計は現在の相関合計を列合計値に加算することによって構築される。
【０２８７】
ステップ６３１は、プログラムが同一相関ウインドウの同一参照点について異なる一対の視差である次のｚへ進むことを要求する。Ｄ視差に対する全ての相関結果を計算するにあたって、プログラムはステップ６３２へ進む。ステップ６３２は、同一の行の次の列、または現在の参照点が行の最終列に位置する場合は次の行の最初を選択するシステムを指示する。そして、新しい参照点に対する同一の相関計算が、各視差について実行される。最終的には、相関ウインドウ全体の相関合計が領域５、６、９、および１０で計算される。領域３および４は、適切な列合計および相関合計をウインドウ計算の準備として構築する。相関合計および視差の最適化演算のこの部分は、ステップ６３３で終了する。
【０２８８】
３．領域５
図２３は、領域５に対する相関合計および視差の最適化演算の１つの実施形態のフローチャートを示す。プログラムは、領域１から４に若干の変化を加えた、基本的には同一の方法で進む。ここでは、相関ウインドウ全体に対する相関合計が演算され得、よって、参照点の最適な視差が決定され得る。プログラムはステップ６３４で開始する。
【０２８９】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が領域５に位置する場合、ステップ６３５および６４５は、以下の相関合計が、行内で列毎に進むことによって各行および列について実行されることを要求する。相関ウインドウの参照点が行の最後に到達したとき、参照点は次の行の始めに移動する。領域５は、単一のイメージ要素位置であるので、次の列は領域６である。ステップ６３５は、相関ウインドウ範囲内の右イメージ中のセンサスベクトルおよび、それに対応する相関ウインドウ範囲内の左イメージ中のセンサスベクトルを選択するよう要求する。これら左および右のセンサスベクトルは、同一の行および列に位置する。すなわち、これらのウインドウは、視差０で互いに関してシフトされない。
【０２９０】
ステップ６３６および６４４は、相関合計が参照右イメージ中の各ウインドウの各視差に対して演算されるのを許容するループのそれぞれ始めと終わりである。ここでは、ｚが０からＤ／２−１まで変化し、よって、１６の視差について、Ｄ＝１６でありｚが０から７まで変化する。ｚループが用いられる補助的な理由は、データパッキングの目的のためである。上記に説明された中間ｔｅｍｐと呼ばれる変数がデータパッキングの目的に用いられる。
【０２９１】
ステップ６３７は、対応する対のセンサスベクトルの間の個別のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚが０から７までループする。ｚループ内の所定のｚ値について、本発明の１つの実施形態では、異なる視差全体（視差２＊ｚおよび視差２＊ｚ＋１）に関係する一対の相関合計を、領域１から４に関して上記に議論したのと同様に処理する。
【０２９２】
ステップ６３８は、列合計バッファ［ｘ］を前の列合計バッファに中間ｔｅｍｐを加えた内容でアップデートし続ける。列合計バッファ［ｘ］は、現在、各視差に対する参照右イメージ点の相関結果をホールドする。
【０２９３】
ステップ６３９は、相関合計バッファ［ｘ］［ｙ］内の（ｘ，ｙ）に位置する参照右参照点の対のセンサスベクトルの個別のハミング距離の結果の格納を要求する。領域５において、列合計の全体およびウインドウ全体の相関合計が、入手可能である。
【０２９４】
ステップ６４０は、相関ウインドウ合計［ｘ］［ｙ］を、列合計値と現在の相関合計を加算することでアップデートする。ステップ６４１は、相関ウインドウ内の個別のハミング距離の全ての合計である相関合計結果を、同一列内の相関ウインドウの高さの行だけ上方に位置する相関合計バッファに格納する。よって、相関合計は相関合計バッファ［ｘ］［ｙ−相関ウインドウの高さ］に格納される。１つの実施形態では、これは相関合計バッファの最上部の行である。
【０２９５】
ステップ６４２は、相関合計バッファにおける現在の相関合計データのうちのいずれが最も小さいかを決定する。最初に、相関合計が、ｚ＝０のときの視差０および１について計算される。ステップ６４２は、２つの相関合計データのうちの小さい方を決定し、この視差番号（この時点では、０または１）を極値指標アレイに格納する。ｚ＝１のときの次の繰り返しでは、相関合計は、視差２および３について計算される。これらの２つの視差についての相関合計のいずれかが、極値指標に格納されている現在の小さい方の視差番号に関連する相関合計よりも小さい場合には、ステップ６４３に示すように、その小さい方の相関合計データについての視差番号が、極値指標アレイに格納される。最も小さい相関合計を比較し、関連する視差番号を極値指標アレイに格納するこのプロセスは、すべてのｚ値が評価されるまで続けられる。本実施態様は、ｚループにおける最適視差選択を導入し、最適視差の決定が、一対の視差についての相関合計の計算と実質的に同時に行われる。あるいは、中間アレイは、最終の比較が、最も小さい相関合計で最適な視差値を生み出すまで、視差値およびそれに関連した相関合計を保持し得る。他の実施態様において、最適視差決定は、視差をベースとしたｚループ内でなされる必要はない。むしろ、視差決定は、ループの外で行われ得、最適視差は、視差のそれぞれについての相関合計の完全な組が計算された後にのみ選択される。中間視差アレイは、一時的な結果を保持するために用いられ得る。これらの変形は他のすべての適用可能な領域（例えば、領域６、９および１０）に適用される。
【０２９６】
ステップ６４４は、プログラムが次のｚに進むことを要求する。次のｚは、同じ相関ウインドウの同じ参照ポイントについての異なる一対の視差である。Ｄ視差についてのすべての相関結果を計算すると、プログラムは、ステップ６４５に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ相関計算が、各視差に対して行われる。最後に、全相関ウインドウについての相関合計が、領域５、６、９および１０において計算される。この相関合計および視差最適化演算の部分は、ステップ６４６で終了する。
【０２９７】
４．領域６
図２４は、領域６に対する相関合計および視差最適化オペレーションの１つの実施態様のフローチャートを示す。領域６に対する演算は、領域５に対する演算と同様である。但し、相関ウインドウ幅の列だけ左に位置する列合計は、列相関合計から減算される。プログラムは、ステップ６４７で開始する。
【０２９８】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が、領域６に位置する場合、ステップ６４８および６５９は、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、相関ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。ステップ６４８は、相関ウインドウ内の右イメージにおけるセンサスベクトルおよび相関ウインドウ内の左イメージにおける対応するセンサスベクトルが選択されることを要求する。これらの左および右センサスベクトルは、同じ行および列に位置する。即ち、これらのウインドウは、視差０では互いにシフトしない。
【０２９９】
ステップ６４９および６５８は、それぞれ、相関合計が参照右イメージにおける各ウインドウに対する視差のそれぞれについて演算されることを可能にするループの始めおよび終わりである。ここで、ｚは、０からＤ／２−１まで変化するので、１６の視差（Ｄ＝１６）の場合、ｚは、０から７まで変化する。ｚループが用いられる第２の理由は、データパッキングのためである。上記のように、中間ｔｅｍｐと呼ばれる変数が、データパッキングの目的で用いられる。
【０３００】
ステップ６５０は、対応する対のセンサスベクトル間の個々のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚは０から７までループする。ｚループにおける所定のｚ値について、本発明の１つの実施態様は、領域１から４に関して上述したように、個別の視差（視差２＊ｚおよび視差２＊ｚ＋１）と共に関連する一対の相関合計を処理する。  
【０３０１】
ステップ６５１は、前の列合計バッファおよび中間ｔｅｍｐの内容で、列合計バッファ［ｘ］を更新し続ける。中間ｔｅｍｐは、このｚループにおける適用可能な２つの視差についての参照イメージポイントに対する現在のハミング距離計算を保持する。この時点で、列合計バッファ［ｘ］は、各視差についての参照右イメージポイントに対する列合計結果を保持する。
【０３０２】
ステップ６５２は、相関合計バッファ［ｘ］［ｙ］内の位置（ｘ、ｙ）における参照右参照ポイントについてのこれらの対のセンサスベクトルに対するこれらの個々のハミング距離結果の格納を要求する。この時点で、領域６について、列合計全体およびウインドウ相関合計全体が得られる。
【０３０３】
ステップ６５３は、相関ウインドウ幅の列だけ左に位置する列合計値を、現在の相関合計値から減算する。ウインドウ合計を完全にするのに現在必要な唯一の値は、現在の列合計である。
【０３０４】
ステップ６５４は、列合計値を現在の相関合計に加えることによって、相関ウインドウ合計［ｘ］［ｙ］を更新する。この結果は、後の演算において有用である。ステップ６５５は、相関合計結果を格納する。この相関合計結果は、同じ列における相関ウインドウ高さの行だけ上の位置で相関合計バッファにおいて図１２を参照しながら説明したように得られる相関ウインドウの個々のハミング距離のすべての合計である。従って、相関合計は、相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］に格納される。
【０３０５】
ステップ６５６は、相関合計バッファにおける現在の相関合計データのうちのいずれが最も小さいかを決定し、この最適視差結果は、極値指標に格納される。プロセスは、領域５のプロセスと同様である。
【０３０６】
ステップ６５８は、プログラムが次のｚに進むことを要求する。次のｚは、同じ相関ウインドウの同じ参照ポイントについての異なる一対の視差である。Ｄの視差についてすべての相関結果を計算すると、プログラムは、ステップ６５９に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ相関計算が、各視差に対して行われる。最後に、全相関ウインドウについての相関合計が、領域５、６、９および１０において計算される。この相関合計および視差最適化演算の部分は、ステップ６６０で終了する。
【０３０７】
５．領域７および８
図２５は、領域７および８に対する相関合計および視差最適化オペレーションの１つの実施態様のフローチャートを示す。これらの２つの領域に対する演算は、わずかな変更を除いて、領域３および４に対する演算と同様である。ここで、同じ列において１行だけ上に位置するウインドウの最も右上側のイメージは、現在の計算から減算されなければならない。プログラムは、ステップ６６１で開始する。
【０３０８】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が、領域７または８に位置する場合、ステップ６６２および６７０は、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、相関ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。ステップ６６２は、相関ウインドウ内の右イメージにおけるセンサスベクトルおよび相関ウインドウ内の左イメージにおける対応するセンサスベクトルが選択されることを要求する。これらの左および右センサスベクトルは、同じ行および列に位置する。即ち、これらのウインドウは、視差０では互いにシフトしない。
【０３０９】
ステップ６６３および６６９は、それぞれ、相関合計が参照右イメージにおける各ウインドウに対する視差のそれぞれについて演算されることを可能にするループの始めおよび終わりである。ここで、ｚは、０からＤ／２−１まで変化するので、１６の視差（Ｄ＝１６）について、ｚは、０から７まで変化する。ｚループが用いられる第２の理由は、データパッキングのためである。上記のように、中間ｔｅｍｐと呼ばれる変数が、データパッキングの目的で用いられる。
【０３１０】
ステップ６６４は、列合計アレイ［ｘ］における値から最も右上の相関合計要素（相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］）を減算する。この時点で、列合計アレイは、列合計を完了するために、現在の参照ポイントからの寄与を必要とする。  
【０３１１】
ステップ６６５は、対応する対のセンサスベクトル間の個々のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚは０から７までループする。ｚループにおける所定のｚ値について、本発明の１つの実施態様は、領域１から４に関して上述したように、個別の視差（視差２＊ｚおよび視差２＊ｚ＋１）と共に関連する一対の相関合計を処理する。  
【０３１２】
ステップ６６６は、前の列合計バッファおよび中間ｔｅｍｐの内容で、列合計バッファ［ｘ］を更新し続ける。中間ｔｅｍｐは、このｚループにおける適用可能な２つの視差についての参照イメージポイントに対する現在のハミング距離計算を保持する。この時点で、列合計バッファ［ｘ］は、各視差についての参照右イメージポイントに対する列合計結果を保持する。
【０３１３】
ステップ６６７は、相関合計バッファ［ｘ］［ｙ］内の位置（ｘ、ｙ）における参照右参照ポイントについてのこれらの対のセンサスベクトルに対するこれらの個々のハミング距離結果の格納を要求する。ステップ６６８は、領域７についての相関合計を開始し、列合計値を領域８についての列相関合計に加えることによって、相関ウインドウ合計［ｘ］［ｙ］を更新する。この結果は、後の演算において有用である。
【０３１４】
ステップ６６９は、プログラムが次のｚに進むことを要求する。次のｚは、同じ相関ウインドウの同じ参照ポイントについての異なる一対の視差である。Ｄの視差についてすべての相関結果を計算すると、プログラムは、ステップ６７０に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ相関計算が、各視差に対して行われる。最後に、全相関ウインドウについての相関合計が、領域５、６、９および１０において計算される。この相関合計および視差最適化演算の部分は、ステップ６７１で終了する。
【０３１５】
６．領域９
図２６は、領域９に対する相関合計および視差最適化オペレーションの１つの実施態様のフローチャートを示す。この領域に対する演算は、わずかな変更を除いて、領域５に対する演算と同様である。ここでは、同じ列において１行だけ上に位置するウインドウの最も右上側のイメージ要素は、現在の計算から減算されなければならない。プログラムは、ステップ６７２で開始する。
【０３１６】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が、領域９に位置する場合、ステップ６７３および６８４は、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、相関ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。ステップ６７３は、相関ウインドウ内の右イメージにおけるセンサスベクトルおよび相関ウインドウ内の左イメージにおける対応するセンサスベクトルが選択されることを要求する。これらの左および右センサスベクトルは、同じ行および列に位置する。即ち、これらのウインドウは、視差０では互いにシフトしない。
【０３１７】
ステップ６７４および６８３は、それぞれ、相関合計が参照右イメージにおける各ウインドウに対する視差のそれぞれについて演算されることを可能にするループの始めおよび終わりである。ここで、ｚは、０からＤ／２−１まで変化するので、１６視差（Ｄ＝１６）について、ｚは、０から７まで変化する。ｚループが用いられる第２の理由は、データパッキングのためである。上記のように、中間ｔｅｍｐと呼ばれる変数が、データパッキングの目的で用いられる。  
【０３１８】
ステップ６７５は、列合計アレイ［ｘ］における値から最も右上の相関合計要素（相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］）を減算する。この時点で、列合計アレイは、列合計を完了するために、現在の参照ポイントからの寄与を必要とする。
【０３１９】
ステップ６７６は、対応する対のセンサスベクトル間の個々のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚは０から７までループする。ｚループにおける所定のｚ値について、本発明の１つの実施態様は、領域１から４に関して上述したように、個別の視差（視差２＊ｚおよび視差２＊ｚ＋１）と共に関連する一対の相関合計を処理する。
【０３２０】
ステップ６７７は、相関合計バッファ［ｘ］［ｙ］内の位置（ｘ、ｙ）における参照右参照ポイントについてのこれらの対のセンサスベクトルに対するこれらの個々のハミング距離結果の格納を要求する。このように、中間ｔｅｍｐは、相関合計バッファ［ｘ］［ｙ］に格納される。
【０３２１】
ステップ６７８は、前の列合計バッファおよび中間ｔｅｍｐの内容で、列合計バッファ［ｘ］を更新し続ける。中間ｔｅｍｐは、このｚループにおける適用可能な２つの視差についての参照イメージポイントに対する現在のハミング距離計算を保持する。この時点で、列合計バッファ［ｘ］は、各視差についての参照右イメージポイントに対する列合計結果を保持する。
【０３２２】
ステップ６７９は、列合計値を現在の相関合計に加えることによって、相関ウインドウ合計［ｘ］［ｙ］を更新する。この結果は、後の演算において有用である。ステップ６８０は、相関合計結果を格納する。この相関合計結果は、同じ列における相関ウインドウ高さの行だけ上の位置で相関合計バッファにおいて図１２を参照しながら説明したように得られる相関ウインドウの個々のハミング距離のすべての合計である。従って、相関合計は、相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］に格納される。
【０３２３】
ステップ６８１は、相関合計バッファにおける現在の相関合計データのうちのいずれが最も小さいかを決定し、この最適視差結果は、ステップ６８２において要求されるように、極値指標に格納される。プロセスは、領域５のプロセスと同様である。
【０３２４】
ステップ６８３は、プログラムが次のｚに進むことを要求する。次のｚは、同じ相関ウインドウの同じ参照ポイントについての異なる一対の視差である。Ｄの視差についてすべての相関結果を計算すると、プログラムは、ステップ６８４に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ相関計算が、各視差に対して行われる。最後に、全相関ウインドウについての相関合計が、領域５、６、９および１０において計算される。この相関合計および視差最適化演算の部分は、ステップ６８５で終了する。
【０３２５】
７．領域１０
図２７は、領域１０に対する相関合計および視差最適化オペレーションの１つの実施態様のフローチャートを示す。領域に対する演算は、プログラムの一般的な形式を示す。この領域に対する演算は、わずかな変更を除いて、領域６および９に対する計算と同様である。ここでは、演算は、同じ列における１ウインドウ上の最も右側の角を列合計から減算し、現在の参照イメージ要素を列合計に加え、ウインドウ幅の列だけ左側に位置する列合計をウインドウ合計から減算し、現在の変更された列合計を変更されたウインドウ合計に加えることを含む。プログラムはステップ６８６で開始する。
【０３２６】
相関ウインドウ、より詳細には、相関ウインドウ内の参照イメージ要素が、領域１０に位置する場合、ステップ６８７および６９９は、以下の相関合計が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、相関ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。ステップ６８７は、相関ウインドウ内の右イメージにおけるセンサスベクトルおよび相関ウインドウ内の左イメージにおける対応するセンサスベクトルが選択されることを要求する。これらの左および右センサスベクトルは、同じ行および列に位置する。即ち、これらのウインドウは、視差０では互いにシフトしない。
【０３２７】
ステップ６８８および６９８は、それぞれ、相関合計が参照右イメージにおける各ウインドウに対する視差のそれぞれについて演算されることを可能にするループの始めおよび終わりである。ここで、ｚは、０からＤ／２−１まで変化するので、１６の視差（Ｄ＝１６）について、ｚは、０から７まで変化する。ｚループが用いられる第２の理由は、データパッキングのためである。上記のように、中間ｔｅｍｐと呼ばれる変数が、データパッキングの目的で用いられる。
【０３２８】
ステップ６８９は、列合計アレイ［ｘ］における値から最も右上の相関合計要素（相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］）を減算する。この時点で、列合計アレイは、列合計を完了するために、現在の参照ポイントからの寄与を必要とする。
【０３２９】
ステップ６９０は、対応する対のセンサスベクトル間の個々のハミング距離を格納するデータパッキングの概念を用いる。１６の視差について、ｚは０から７までループする。ｚループにおける所定のｚ値について、本発明の１つの実施態様は、領域１から４に関して上述したように、個別の視差（視差２＊ｚおよび視差２＊ｚ＋１）と共に関連する一対の相関合計を処理する。
【０３３０】
ステップ６９１は、相関合計バッファ［ｘ］［ｙ］内の位置（ｘ、ｙ）における参照右参照ポイントについてのこれらの対のセンサスベクトルに対するこれらの個々のハミング距離結果の格納を要求する。このように、中間ｔｅｍｐは、相関合計バッファ［ｘ］［ｙ］に格納される。
【０３３１】
ステップ６９２は、前の列合計バッファおよび中間ｔｅｍｐの内容で、列合計バッファ［ｘ］を更新し続ける。中間ｔｅｍｐは、このｚループにおける適用可能な２つの視差についての参照イメージポイントに対する現在のハミング距離計算を保持する。この時点で、列合計バッファ［ｘ］は、各視差についての参照右イメージポイントに対する列合計結果を保持する。
【０３３２】
ステップ６９３は、相関ウインドウ幅の列だけ左に位置する列合計値を、現在の相関合計値から減算する。ウインドウ合計を完全にするのに現在必要な唯一の値は、現在の列合計である。
【０３３３】
ステップ６９４は、列合計値を現在の相関合計に加えることによって、相関ウインドウ合計［ｘ］［ｙ］を更新する。この結果は、後の演算において有用である。ステップ６９５は、相関合計結果を格納する。この相関合計結果は、同じ列における相関ウインドウ高さの行だけ上の位置で相関合計バッファにおいて図１２を参照しながら説明したように得られる相関ウインドウの個々のハミング距離のすべての合計である。従って、相関合計は、相関合計バッファ［ｘ］［ｙ−相関ウインドウ高さ］に格納される。
【０３３４】
ステップ６９６は、相関合計バッファにおける現在の相関合計データのうちのいずれが最も小さいかを決定し、この最適視差結果は、ステップ６９７において要求されるように、極値指標に格納される。プロセスは、領域５のプロセスと同様である。
【０３３５】
ステップ６９８は、プログラムが次のｚに進むことを要求する。次のｚは、同じ相関ウインドウの同じ参照ポイントについての異なる一対の視差である。Ｄの視差についてすべての相関結果を計算すると、プログラムは、ステップ６９９に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ相関計算が、各視差に対して行われる。最後に、全相関ウインドウについての相関合計が、領域５、６、９および１０において計算される。この相関合計および視差最適化演算の部分は、ステップ７００で終了する。
【０３３６】
一対のイメージに対するステレオ演算には、各イメージ内の各ピクセルにおいてセンサス変換を行い、その後、各ピクセルにおいてサーチウインドウ全体にわたるサーチが行われれなければならない。センサス変換には、中央ピクセルと、中央ピクセルを近隣で取り囲むＮ個の他のピクセルとの比較が含まれる。従って、変換には、中央ピクセルに対して１つのロードがとられ、続いて、Ｎロード、Ｎ比較、Ｎ−１シフト、およびＮ論理オペレーションを行って、最終的なＮ長のビットベクトルが形成される。従って、幅Ｘおよび高さＹのイメージに対するＮビットセンサス変換については、センサス変換は、約Ｘ＊Ｙ＊（１＋Ｎ）ロードをとり、Ｘ＊Ｙ＊（２＋４Ｎ）オペレーション（ポインタ算術、およびループオーバヘッドを無視する）の合計に対しては、Ｘ＊Ｙ格納およびＸ＊Ｙ＊３Ｎオペレーションをとる。
【０３３７】
最良の視差に対するサーチは、各ピクセルについてＤ個の可能な視差に制限される。各ピクセルに対する演算は、１つのイメージに対しては変換されたセンサスピクセルをロードし、他のイメージに対してはＤ個の変換されたピクセルをロードすることを含む。ハミング距離を演算するためには、後半のピクセルのそれぞれは、前半のピクセルとの間で、排他的論理和（ＸＯＲ）がなされなければならない。得られた結果におけるビット数は、ルックアップテーブルを用いてカウントされ得る。Ｎビットセンサスビットの数Ｎが８または１６ビットよりも大きい場合には、このビットカウンティングは、関係のあるバイトを抽出するために、多数のロードおよびさらなるオペレーションを必要とし得る。このハミング距離は、格納され、続いて使用され得る。ハミング距離が一旦演算されると、エリア合計は、ボックスフィルタを用いてＸＷＩＮ×ＹＷＩＮのエリアに対して演算される必要がある。以下のものがロードされなければならない。（１）前のピクセルと同じ視差に対する合計、（２）前の行と同じ視差に対する列合計、（３）ＸＷＩＮピクセル前と同じ視差に対する列合計、および（４）ＹＷＩＮ行前と同じ視差に対するハミング距離。これらが一旦ロードされると、新しい列合計は、古いハミング距離を前の行の列合計から減算し、新しいハミング距離に加えることによって形成される。この新しい列合計は、格納され、続いて使用され得る。新しいエリア合計は、ＸＷＩＮピクセル前から列合計を減算し、新しい列合計を加えることによって演算される。最後に、エリア合計は、前の最小スコアと比較され得る。新しいスコアが前の最小値より小さい場合には、新しいスコアが最小値として格納され、現在の視差が格納される。
【０３３８】
Ｄ．対象オペレーション
１．すべての領域
図２８は、領域１から１０についての対象オペレーションに対する１つの実施態様の高レベルフローチャートを示す。一般に、対象演算には、領域１から１０に関して上述した、相関合計および視差最適化オペレーションの要素である、同じ列における１つの対象ウインドウだけ上の最も右上の角を列合計から減算すること、現在の参照イメージ要素についての差の計算を列合計に加えること、ウインドウ幅の列だけ左に位置する列合計をウインドウ合計から減算すること、および現在の変更された列合計を改変されたウインドウ合計に加えることを含む。
【０３３９】
プログラムのこの時点において、輝度イメージの少なくとも１つが得られる。１つの実施態様において、参照イメージ（右または左）に対する輝度イメージが得られる場合、対象演算は進行し得る。図２８に示すように、プログラムはステップ８００で開始する。
【０３４０】
ステップ８０１は、対象ウインドウサイズ、およびウインドウにおける参照ポイントの位置を決定する。１つの実施態様において、対象ウインドウは、７×７であり、参照ポイントは、ウインドウの最も右下の角に位置する。
【０３４１】
９つのエッジ条件および１つの一般的なケースが存在するので、演算は異なって実行される。領域１から９はエッジ条件を示すのに対し、領域１０は一般的なケースを示す。図１１（Ａ）から図１１（Ｊ）について上述したように、ウインドウ全体に対する対象合計は、完全なウインドウが所望のイメージ処理エリアに適合し得る領域に対して計算される。即ち、イメージデータは、対象ウインドウの各部分において見いだされる。従って、ウインドウ合計全体は、領域５、６、９および１０について計算される。処理の大部分は、領域１０において起こる。１０個の領域に対するウインドウの参照イメージ要素の位置は、演算がどのように成し遂げられ、どんな演算が成し遂げられるかを示す。ステップ８０２は、対象オペレーションが実行される領域１から６に適用される。これらの領域は、列合計バッファ、差の変数、および対象ウインドウ合計をセットアップする。対象演算が完了すると、ステップ８０３は、プログラムが領域７から１０に進むことを要求する。
【０３４２】
演算は、行内で列毎に参照右イメージにおける各イメージ要素について行われ、行の最後になると、プログラムは、所望のイメージ処理エリアにおける次の行の第１の列に進む。これは、ステップ８０４、８０５、８１０、８１２、８１１および８１３によって反映される。ステップ８０４、８１２および８１３によって定義されるあまり頻繁に発生しない行ループは、外部ループであるのに対して、ステップ８０５、８１０および８１１によって定義されるより頻繁に発生する列ループは、内部ループである。プログラムが行内で列毎に進行するにつれて、ウインドウは、領域７、８、９および１０をこの順序で通過する。プログラムが次の行に到達し、行の終わりに進むと、領域７、８、９および１０は、図１１（Ｇ）から図１１（Ｊ）に示すように、ウインドウによって横切られる。
【０３４３】
最初に、プログラムは、ステップ８０４および８０５に示すように、行Ｉおよび列Ｊにおいて、領域７に進む。ウインドウが領域７にある場合、領域７は行の始めになければならないので、領域７の対象オペレーションは、ステップ８０６によって要求されるように行われる。ウインドウが領域８にある場合、領域８の対象オーペレーションは、ステップ８０７によって要求されるように行われる。ウインドウが領域９にある場合、領域９の対象オペレーションは、ステップ８０８によって要求されるように行われる。ウインドウが領域１０にある場合、領域１０の対象オペレーションは、ステップ８０９によって要求されるように行われる。
【０３４４】
進行する前に、ステップ８１０は、行Ｉおよび列Ｊにおける現在の参照イメージ要素が、行Ｉの最後の列にあるかどうかを決定する。この決定が「いいえ」と判定する場合、プログラムは、次に列Ｊに進み（ステップ８１１および８０５）、ウインドウの位置に従って、ステップ８０６、８０７、８０８または８０９の１つを実施する。ステップ８１０の決定が「はい」と判定する場合、ステップ８１２は、この行が所望のイメージ処理エリアの最後の行であるかどうかを決定する。もしそうでない場合、ステップ８１３および８０４は、ウインドウが次の行Ｉおよびその行の第１の列Ｊに進むことを要求する（列および行番号は、最後の列および行にそれぞれ到達した後にリセットされる）。ステップ８１２における決定が「はい」と判定する場合、対象プログラムはステップ８１４で終了する。
【０３４５】
いくつかの実施態様において、対象オペレーションは、同じ相関ウインドウにわたって信頼値を発生することによって、相関ステップが進行するのと同時に行われ得る。新しいラインのそれぞれに対する対象オペレータの結果は、ウインドウ合計バッファの１つのラインに格納される。このため、対象オペレータバッファの使用または同じ相関バッファの使用のいずれかが必要になる。対象演算は、相関バッファの次のラインに格納され、対象結果（即ち、信頼「１」または非信頼「０」）を発生するために用いられ、このラインにおける対象値は、相関合計および視差最適化方式から発生されるデータによって上書きされる。
【０３４６】
２．領域１および２
図２９は、領域１および２についての対象オペレーションの１つの実施態様のフローチャートを示す。プログラムは所望のイメージ処理エリアにおいてステップ８１５で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域１または２に位置する場合、ステップ８１６および８２０は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３４７】
ステップ８１７は、１つの実施態様において３２ビット長のｄｉｆｆ ｔｅｍｐと呼ばれる変数を用い、２つの隣接するイメージ要素間に値の視差を保持する。ｄｉｆｆｔｅｍｐ変数の長さは、より短く（またはより長く）され得るが、最終的には、対象列合計アレイのサイズを収容するような設計でなければならない。なぜなら、ｄｉｆｆ ｔｅｍｐは、データ当たり３２ビット長の対象列合計アレイに加えられるからである。ｄｉｆｆｔｅｍｐおよび対象列合計バッファのそれぞれのデータ長は、それらを加算したものを収容し、その加算結果が、加算オペレーションを正しく反映するようになされなければならない。簡単に言うと、ｄｉｆｆｔｅｍｐおよび対象列合計は共に３２ビットである。相関合計および視差最適化オペレーションからの中間ｔｅｍｐのように、データパッキングは、ｄｉｆｆ ｔｅｍｐに対して用いられ得る。
【０３４８】
ステップ８１７は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。いくつかの実施態様では、絶対値は、ファンクションコールとして計算される。他の実施態様では、差が計算され、結果が負であるかどうかに応じて、同じ値の正のバージョンが、ｄｉｆｆｔｅｍｐ変数に対して選択される。参照イメージ要素が、所望のイメージ処理エリアの最終列に到達すると、ｄｉｆｆ ｔｅｍｐに対する差の計算が行われる。なぜなら、この参照イメージ要素のすぐ右の位置（および所望のイメージ処理データの外側）にある輝度データは、プログラムの初めに決定され、飛ばされた行および列のために一定して得られる。
【０３４９】
ステップ８１８は、ｄｉｆｆ ｔｅｍｐの値をキャッシュ［ｘ］［ｙ]に格納する。このキャッシュはまた、差のスライディング合計（ＳＳＤ）アレイ［ｘ］［ｙ］でもあり得る。
【０３５０】
ステップ８１９は、参照対象ウインドウが領域１に位置する場合、ｄｉｆｆ ｔｅｍｐの内容で対象列合計バッファ［ｘ］を初期化する。この時点で、対象列合計バッファ［ｘ］は、参照イメージ要素に対する対象結果を保持する。ステップ８１９はまた、参照対象ウインドウが領域２に位置する場合、前の対象列合計バッファおよびｄｉｆｆｔｅｍｐの内容で対象列合計バッファ［ｘ］を更新する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての対象列合計結果を保持する。列のサイズは、対象ウインドウの高さである。領域１および２において、列全体は得られないので、列合計は部分のみである。
【０３５１】
プログラムはステップ８２０に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントに対して同じ対象演算が実施される。最後に、対象列合計アレイ［ｘ］は、対象ウインドウの高さに対して各列について構築される。しかし、完全な対象列合計（対象ウインドウの高さ全体）は、まだ得られない。対象オペレーションのこの部分は、ステップ８２１で終了する。
【０３５２】
３．領域３および４
図３０は、領域３および４についての対象オペレーションの１つの実施態様のフローチャートを示す。演算は、対象列合計がこの時点で得られることを除いて、領域１および２の演算と同様である。プログラムは、所望のイメージ処理エリアにおいてステップ８２２で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域３または４に位置する場合、ステップ８２３および８２８は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３５３】
ステップ８２４は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。ステップ８２５は、ｄｉｆｆｔｅｍｐの値をキャッシュ［ｘ］［ｙ］に格納する。このキャッシュはまた、差のスライディング合計（ＳＳＤ）アレイ［ｘ］［ｙ］でもあり得る。
【０３５４】
ステップ８２６は、前の対象列合計バッファとｄｉｆｆ ｔｅｍｐとを加算した内容で対象列合計バッファ［ｘ］を構築する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての完全な対象列合計結果を保持する。列のサイズは、対象ウインドウの高さである。
【０３５５】
ステップ８２７は、対象ウインドウが領域３に位置する場合、対象列合計アレイ［ｘ］［ｙ］における値で、ＳＳＤ［ｘ］［ｙ］アレイを初期化する。ステップ８２７は、対象ウインドウが領域４に位置する場合、ＳＳＤアレイの現在の値とイメージ要素の現在の位置についての対象列合計アレイにおける値とを加算して、ＳＳＤ［ｘ］［ｙ］アレイを構築する。
【０３５６】
プログラムはステップ８２８に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ対象演算が行われる。最後に、ＳＳＤ［ｘ］［ｙ］アレイが、各イメージポイントに対して構築される。対象オペレーションのこの部分は、ステップ８２９で終了する。
【０３５７】
４．領域５
図３１は、領域５に対する対象オペレーションの１つの実施態様のフローチャートを示す。演算は、この時点で対象ウインドウ合計全体が得られることを除いて、領域３および４の演算と同様である。プログラムは、所望のイメージ処理エリア内でステップ８３０で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域５に位置する場合、ステップ８３１および８３９は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３５８】
ステップ８３２は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。ステップ８３３は、ｄｉｆｆｔｅｍｐの値をキャッシュ［ｘ］［ｙ］に格納する。このキャッシュはまた、差のスライディング合計（ＳＳＤ）アレイ［ｘ］［ｙ］でもあり得る。
【０３５９】
ステップ８３４は、前の対象列合計バッファとｄｉｆｆ ｔｅｍｐとを加算した内容で対象列合計バッファ［ｘ］を構築する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての完全な対象列合計結果を保持する。
【０３６０】
ステップ８３５は、ＳＳＤアレイの現在の値とイメージ要素の現在の位置についての対象列合計アレイにおける値とを加算して、この参照ポイントにおいてＳＳＤ［ｘ］［ｙ］アレイを完了する。この領域では、ＳＳＤ［ｘ］［ｙ］の内容は、この時点で、完全なウインドウ合計を示す。
【０３６１】
ステップ８３６は、この領域に対して現在得られる対象ウインドウ合計値が、特定の予めプログラムされた閾値よりも大きいかどうかを決定する。対象ウインドウ合計が、その特定の参照イメージポイントにおいて、輝度イメージのテクスチャを示すことに留意されたい。閾値レベルは、テクスチャをベースとした出力の質を決定し、この出力は、イメージ処理システムに、相関演算の信頼測定を示す。閾値が非常に低いかまたは０に設定される場合、ほとんどすべての対象ウインドウ合計計算はこのレベルを越える。従って、白いボードなどの非常に均一な光景でもこの閾値を越え得る。閾値が非常に高く設定されている場合、ほとんどの対象ウインドウ合計はこの閾値を超えず、出力は、イメージ処理システムに、出力のほとんどが相関結果に対して充分に高い信頼を有することを示す。ステップ８３６における決定が「はい」と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８３８に示すように、１に設定され、これは、相関結果に対する信頼の測定を示す。ステップ８３６における決定が「いいえ］と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８３７に示すように、０に設定され、これは、相関結果の非信頼の測定を示す。
【０３６２】
対象結果アレイ［ｘ］［ｙ］についての適切な信頼値を設定した後、プログラムはステップ８３９に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ対象計算が行われる。対象オペレーションのこの部分はステップ８４０で終了する。
【０３６３】
５．領域６
図３２は、領域６に対する対象オペレーションの１つの実施態様のフローチャートを示す。演算は、この時点で、対象ウインドウ幅の列だけ左に位置する列合計が、対象ウインドウ合計から減算され得ることを除いて、領域５の演算と同様である。プログラムは、所望のイメージ処理エリア内でステップ８４１で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域６に位置する場合、ステップ８４２および８５１は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３６４】
ステップ８４３は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。ステップ８４４は、ｄｉｆｆｔｅｍｐの値をキャッシュ［ｘ］［ｙ］に格納する。このキャッシュはまた、差のスライディング合計（ＳＳＤ）アレイ［ｘ］［ｙ］でもあり得る。
【０３６５】
ステップ８４５は、前の対象列合計バッファとｄｉｆｆ ｔｅｍｐとを加算した内容で対象列合計バッファ［ｘ］を構築する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての完全な対象列合計結果を保持する。
【０３６６】
ステップ８４６は、ＳＳＤ［ｘ］［ｙ］アレイにおける現在の値から、対象列合計アレイ［ｘ−対象ウインドウ幅」における列合計値を減算する。その現在の値は、（ｘ−１、ｙ）に位置するイメージ要素に関連するウインドウ合計である。対象ウインドウ合計を完了するために、対象列合計［ｘ］は、ステップ８４７に示すように、ＳＳＤ［ｘ］［ｙ］に加えられる。この領域において、ＳＳＤ［ｘ］［ｙ］の内容は、この時点で、完全な対象ウインドウ合計を示す。
【０３６７】
ステップ８４８は、この領域に対して現在得られる対象ウインドウ合計値が、特定の予めプログラムされた閾値よりも大きいかどうかを決定する。ステップ８４６における決定が「はい」と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８５０に示すように、１に設定され、これは、相関結果に対する信頼の測定を示す。ステップ８４８における決定が「いいえ］と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８４９に示すように、０に設定され、これは、相関結果の非信頼の測定を示す。
【０３６８】
対象結果アレイ［ｘ］［ｙ］についての適切な信頼値を設定した後、プログラムはステップ８５１に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ対象計算が行われる。対象オペレーションのこの部分はステップ８５２で終了する。
【０３６９】
６．領域７および８
図３３は、領域７および８に対する対象オペレーションの１つの実施態様のフローチャートを示す。演算は、この時点で、同じ列における現在の参照ポイントから対象ウインドウ高さだけ上に位置するイメージポイントに対する単一の差の計算が、対象列合計［ｘ］における値から減算されなけれならないことを除いて、領域３および４の演算と同様である。プログラムは、所望のイメージ処理エリア内でステップ８５３で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域７または８に位置する場合、ステップ８５４および８６０は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３７０】
ステップ８５５は、対象列合計アレイ［ｘ］における値から、キャッシュ［ｘ］［ｙ−対象ウインドウ高さ］に位置する単一のイメージ要素についての差の計算を減算する。キャッシュアレイは、１つの実施態様においてＳＳＤ［ｘ］［ｙ］アレイである。
【０３７１】
ステップ８５６は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。ステップ８５７は、ｄｉｆｆｔｅｍｐの値をキャッシュ［ｘ］［ｙ]に格納する。このキャッシュはまた、ＳＳＤアレイ［ｘ］［ｙ］でもあり得る。
【０３７２】
ステップ８５８は、前の対象列合計バッファとｄｉｆｆ ｔｅｍｐとを加算した内容で対象列合計バッファ［ｘ］を構築する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての完全な対象列合計結果を保持する。
【０３７３】
ステップ８５９は、対象ウインドウが領域７に位置する場合、対象列合計アレイ［ｘ］［ｙ］における値で、ＳＳＤ［ｘ］［ｙ］アレイを初期化する。ステップ８５９は、対象ウインドウが領域８に位置する場合、ＳＳＤアレイの現在の値とイメージ要素の現在の位置についての対象列合計アレイにおける値とを加算して、ＳＳＤ［ｘ］［ｙ］アレイを構築する。
【０３７４】
プログラムはステップ８６０に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ対象演算が行われる。最後に、ＳＳＤ［ｘ］［ｙ］アレイが、各イメージポイントに対して構築される。対象オペレーションのこの部分は、ステップ８６１で終了する。
【０３７５】
７．領域９
図３４は、領域９に対する対象オペレーションの１つの実施態様のフローチャートを示す。演算は、この時点で同じ列における現在の参照ポイントから対象ウインドウ高さだけ上に位置するイメージポイントについての単一の差の計算が、対象列合計［ｘ］における値から減算されなければならないことを除いて、領域５の演算と同様である。プログラムは、所望のイメージ処理エリア内でステップ８６２で開始する。対象ウインドウ、より詳細には、対象ウインドウ内の参照イメージ要素が、領域９に位置する場合、ステップ８６３および８７２は、以下の対象計算が、行内で列毎に進むことによって各行および列に対して実行されることを要求し、対象ウインドウの参照ポイントが行の終わりに到達すると、参照ポイントは、次の行の始めに移動する。
【０３７６】
ステップ８６４は、対象列合計アレイ［ｘ］における値から、キャッシュ［ｘ］［ｙ−対象ウインドウ高さ」に位置する単一のイメージ要素についての差の計算を減算する。キャッシュアレイは、１つの実施態様においてＳＳＤ［ｘ］［ｙ］アレイである。
【０３７７】
ステップ８６５は、現在の参照イメージ要素（入力（ｘ、ｙ））の輝度値と、隣接のイメージ要素（入力（ｘ＋１、ｙ））の輝度値との間の視差の絶対値を演算する。ステップ８６６は、ｄｉｆｆｔｅｍｐの値をキャッシュ［ｘ］［ｙ]に格納する。このキャッシュはまた、差のスライディング合計（ＳＳＤ）アレイ［ｘ］［ｙ］でもあり得る。
【０３７８】
ステップ８６７は、前の対象列合計バッファとｄｉｆｆ ｔｅｍｐとを加算した内容で対象列合計バッファ［ｘ］を構築する。この時点で、対象列合計バッファ［ｘ］は、列の最も下側のイメージ要素である列の参照イメージ要素によって規定される各列についての完全な対象列合計結果を保持する。
【０３７９】
ステップ８６８は、ＳＳＤアレイの現在の値とイメージ要素の現在の位置についての対象列合計アレイにおける値とを加算して、この参照ポイントにおいてＳＳＤ［ｘ］［ｙ］アレイを完了する。この領域では、ＳＳＤ［ｘ］［ｙ］の内容は、この時点で、完全なウインドウ合計を示す。
【０３８０】
ステップ８６９は、この領域に対して現在得られる対象ウインドウ合計値が、特定の予めプログラムされた閾値よりも大きいかどうかを決定する。対象ウインドウ合計が、その特定の参照イメージポイントにおいて、輝度イメージのテクスチャを示すことに留意されたい。閾値レベルは、テクスチャをベースとした出力の質を決定し、この出力は、イメージ処理システムに、相関演算の信頼測定を示す。ステップ８６９における決定が「はい」と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８７１に示すように、１に設定され、これは、相関結果に対する信頼の測定を示す。ステップ８６９における決定が「いいえ］と判定する場合、対象結果［ｘ］［ｙ］における値は、ステップ８７０に示すように、０に設定され、これは、相関結果の非信頼の測定を示す。
【０３８１】
対象結果アレイ［ｘ］［ｙ］についての適切な信頼値を設定した後、プログラムはステップ８７２に進み、現在の参照ポイントが行の最終列に位置する場合には、システムは、同じ行の次の列または次の行の始まりにおける次の参照ポイントを選択するように方向づけられる。次に、新しい参照ポイントについて、同じ対象計算が行われる。対象オペレーションのこの部分はステップ８７３で終了する。
【０３８２】
８．  領域１０．
図３５は、領域１０についての対象演算の一実施形態を示すフローチャートである。演算は、領域６および９のものと同様であるが、ここではアルゴリズムの一般の場合を想起されたい。ここでの演算は、列合計から同じ列中の１ウインドウ上の右上角を減算し、現在の参照イメージ要素を列合計に加算し、ウインドウ合計からウインドウ幅の列数だけ左に位置する列合計を引算し、現在の修正された(modified)列合計を修正されたウインドウ合計に加算することを包含する。
【０３８３】
ステップ８７４において、所望のイメージ処理領域でプログラムは開始する。対象ウインドウ、より具体的には対象ウインドウ中の参照イメージ要素が領域１０に位置するならば、ステップ８７５および８８５は、行中において列単位で進むことにより以下の対象演算を各行および列について実行することを要求とし、もし対象ウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０３８４】
ステップ８７６では、キャッシュ[x][ｙ−対象ウインドウの高さ]に位置する単一のイメージ要素についての差計算を、対象列合計アレイ[x]中の値から減算する。一実施形態において、キャッシュアレイはＳＳＤ[x][y]アレイである。
【０３８５】
ステップ８７７では、現在の参照イメージ要素（入力(x,y)）の輝度値と、隣接するイメージ要素（入力(x+1,y)）の輝度値との差の絶対値を演算する。ステップ８７８は、ｄｉｆｆ  ｔｅｍｐの値をキャッシュ[x][y]に格納する。このキャッシュはまた、差（ＳＳＤ）アレイ[x][y]のスライディング合計であり得る。
【０３８６】
ステップ８７９では、対象列合計バッファ[x]に、前の対象列合計バッファの内容プラスｄｉｆｆ  ｔｅｍｐを累積していく(buildup)。こうして、対象要素合計バッファ[x]は、列中の参照イメージ要素（列中の一番下のイメージ要素である）によって規定される、各列についての完全な対象列合計結果を保持している。
【０３８７】
ステップ８８０では、対象列合計アレイ[x−対象ウインドウ幅]中の列合計値を、ＳＳＤ[x][y]アレイ中の現在の値から減算する。ＳＳＤ[x][y]アレイ中のこの現在の値は、（x-1,y）に位置するイメージ要素に対応するウインドウ合計である。ステップ８８１に示すように、対象ウインドウ合計を完全にするために、対象列合計[x]をＳＳＤ[x][y]に加算する。この領域において、ＳＳＤ[x][y]の内容はこの時点で完全な対象ウインドウ合計を表している。
【０３８８】
ステップ８８２では、この時点でこの領域について利用可能になった対象ウインドウ合計値が、特定の予めプログラムされたしきい値より大きいか否かを決定する。対象ウインドウ合計は、この特定の参照イメージポイントにおける輝度イメージのテクスチャを表していることに注意せよ。しきい値レベルは、テクスチャに基づいた出力品質を決定する。この出力は、相関演算の信頼度(confidence measure)を、イメージ処理システムに対して示している。ステップ８８２における決定が「ＹＥＳ」の評価をすれば、対象結果[x][y]中の値はステップ８８４に示されるように１に設定され、相関結果の信頼度を示す。ステップ８８２における決定が「ＮＯ」の評価をすれば、対象結果[x][y]中の値はステップ８８３に示されるように０に設定され、相関結果の非信頼度(measureof no confidence)を示す。
【０３８９】
対象結果アレイ[x][y] の適切な信頼値を設定した後、プログラムはステップ８８５に進み、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じ対象計算を行う。対象演算のこの部分は、ステップ８８６において終了する。
【０３９０】
Ｅ．データ圧縮(data packing)
図３６は、相関合計および視差最適化演算の一実施形態に用いられる、データ圧縮概念を示している。一実施形態においては３２ビット長である中間ｔｅｍｐと呼ばれる変数が、２つの異なる視差についての個々の変換ベクトル−変換ベクトルハミング距離値を保持する。変数のＭＳＢ部の１６ビットは視差ｄ１についての相関合計値を保持し、変数のＬＳＢ部の１６ビットは視差ｄ２についての相関合計値を保持する。このように図２１〜２７を参照して上述したｚループの間に、１６個の視差に対して８個の中間ｔｅｍｐ値が用いられる。本発明の一実施形態において単一の中間ｔｅｍｐ値が用いられるため、視差に基づいた相関合計の各対は、１つのｚループ中において実質的に同時に演算される。中間ｔｅｍｐは３２ビット長であることにより、過剰なデータ操作なしに３２ビット列合計値に単に加算することができる。
【０３９１】
一実施形態において、中間ｔｅｍｐ 1および中間 ｔｅｍｐ 2と呼ばれる２つの中間ｔｅｍｐ値を用いて、データを圧縮する。左（x+2*z,y）および参照右（x,y）の２つのセンサスベクトルの間のハミング距離を演算し、図３６において７０１として示す中間ｔｅｍｐ1のＬＳＢ側半分に一時的に格納する。この値を、図中７０２として示す中間ｔｅｍｐ 2のＭＳＢ側半分に移動する。左（x+2*z+1,y）および参照右（x,y）の２つのセンサスベクトルの間のハミング距離を演算し、図中において７０３として示す中間ｔｅｍｐ1のＬＳＢ側半分に一時的に格納する。このようにして、ｚ＝０について、中間ｔｅｍｐ 2のＭＳＢ側半分は左（x,y）および参照右（x,y）の間のハミング距離を保持しており、中間ｔｅｍｐ1のＬＳＢ側半分は左（x+1,y）および参照右（x,y）の間のハミング距離を保持しており、ｚループは０から（D/2−１）まで実行し、従ってＤ＝１６視差によりｚ＝０〜７が得られる。
【０３９２】
７０７として示す論理ＯＲ動作は、中間ｔｅｍｐ 1（７０５）と中間ｔｅｍｐ 2（７０４）との間で行われ、中間ｔｅｍｐ1（７０６）に格納される。７０６に示すように、この時点で中間ｔｅｍｐ 1は左（x+2*z,y）および参照右（x,y）の間のハミング距離を中間ｔｅｍｐ1のＭＳＢ側半分に格納しており、左（x+2*z+1,y）および参照右（x,y）の間のハミング距離を同じ中間ｔｅｍｐ 1のＬＳＢ側半分に格納している。
【０３９３】
Ｆ．左−右一貫性チェック
図３７は、左−右一貫性チェックの一実施形態のフローチャートを示している。このプログラムは最終的には、最適な視差値およびそれに対応する相関合計を決定し、各「参照」左イメージ要素についてＢＥＳＴ  ＬＲ  ＩＮＤＥＸおよびＢＥＳＴ  ＬＲ  ＳＣＯＲＥにそれぞれ格納する。プログラムはステップ７２０で開始する。
【０３９４】
ステップ７２１および７３３は、あるイメージ要素に対応するある変換ベクトルから別のイメージ要素に対応する別の変換ベクトルへと、行中を１度にＤ列進むことにより、以下の一貫性チェックを各行および列について実行することを要求する。もし参照イメージ要素が行の終わりに到達した場合は、参照イメージ要素は次の行の初めに移動する。相関合計バッファのデータ構造のため、１度につき１列移動することは一般に、同じイメージ要素中においてある視差の相関合計から別の視差の別の相関合計へと移動することになり、場合によっては、あるイメージ要素の視差Ｄ−１についての相関合計から次の隣接イメージ要素の視差０についての相関合計へと移動することになる。所与の視差についてあるイメージ要素から別のイメージ要素へ移動するためには、システムは視差０の位置から開始し、これを位置[x][y]と名付ける。次に右にＤ−１列移動しなければならない。もし現在のイメージが行中の最後のイメージ要素であれば、システムは次の行の最初のイメージ要素へ移動しなければならない。各イメージ要素について、システムはまず各イメージ要素の視差Ｄ−１に移動し、そこで時域計算についての相関データを得なければならない。各次の参照イメージ要素は、前のイメージ要素の位置からＤ列移動することを包含する。
【０３９５】
ステップ７２２では、インクリメントする変数ＩＮＣＲを０に設定する。この値を用いて、所与の「参照」左イメージ要素についての全ての相関合計データがチェックされるまで、Ｄ−１から０までの全ての視差をチェックする。
【０３９６】
ステップ７２３は、後の比較に用いるために、最適な視差数およびその視差数に対応する相関合計値を一時的に格納する。ステップ７２３は、相関合計バッファ[x+D-1-INCR][y]中に見いだされる相関合計値を、変数ＢＥＳＴ  ＬＲ  ＳＣＯＲＥに一時的に格納する。最初のイメージ要素について、Ｄ−１は、各視差について相関合計の完全な組を有する最初の左イメージ要素を見いだすための、初期のシフトである。１６個の視差に関して、最初のイメージ要素は、相関合計バッファ[x+15][y]（右イメージの最初のイメージ要素についての視差１５に関する相関合計データである）内に位置している。この現在１５である視差数Ｄ−１−ＩＮＣＲは、変数ＢＥＳＴ  ＬＲ  ＩＮＤＥＸに格納される。このようにシステムはスキューまたはバイアスされることにより、相関値にタイが生じた場合にはより高い視差数を最適視差数として維持する。他の実施形態においては、タイの場合において低い方の視差数を優先するようにシステムをバイアスしてもよい。
【０３９７】
ステップ７２４では、ＩＮＣＲ変数を１インクリメントする（例えばＩＮＣＲ＝１）。このインクリメントにより、次のより低い視差数を調べることができる。
【０３９８】
ステップ７２５では、変数ＣＵＲＲＥＮＴ  ＣＯＲＲＥＬＡＴＩＯＮ  ＳＵＭ  ＳＣＯＲＥを、相関合計バッファ[x+D*INCR+D-1-INCR][y]に設定する。現在、この値は相関合計バッファ[x+30][y]中に位置しており、これは視差１４についての次の隣接イメージ要素に関する相関合計データを保持している位置に対応する。D*INCR項は、システムが右方向に次のイメージ要素に移動するかまたは複数のイメージ要素移動することを可能にし、D-1-INCR項は、調べられている特定の視差を選択する。
【０３９９】
ステップ７２６では、「参照」左イメージ要素から視差１４であるデータ要素についての相関合計値を保持するＢＥＳＴ  ＬＲ  ＳＣＯＲＥが、「参照」左イメージ要素から視差１５であるデータ要素についての相関合計値を保持するＢＥＳＴ  ＬＲ  ＳＣＯＲＥ中の値未満であるか否かを決定する。もし決定の評価が「ＮＯ」であれば、システムはＣＵＲＲＥＮＴ  ＣＯＲＲＥＬＡＴＩＯＮ  ＳＵＭ  ＳＣＯＲＥおよびＢＥＳＴ  ＬＲ  ＩＮＤＥＸ中の値に変更を加えず、ステップ７２８に進んで現在の「参照」左イメージ要素について全ての視差を調べたか否かをチェックする。
【０４００】
ステップ７２６における決定の評価が「ＹＥＳ」であれば、ＢＥＳＴ  ＬＲ  ＩＮＤＥＸ変数およびＢＥＳＴ  ＬＲ  ＳＣＯＲＥ変数をステップ７２７において更新する。ＢＥＳＴ  ＬＲ  ＩＮＤＥＸは、現在の視差数Ｄ−１−ＩＮＣＲによって置換され、ＢＥＳＴ  ＬＲ  ＳＣＯＲＥは、ＣＯＲＲＥＬＡＴＩＯＮ  ＳＵＭ  ＳＣＯＲＥに格納されている現在の低い方の相関合計値によって置換される。
【０４０１】
ステップ７２８では、Ｄ−１−ＩＮＣＲ＝０か否かを決定することにより、現在の「参照」左イメージ要素について全ての視差を調べたか否かをチェックする。もしこの式の解が０であれば、最後の視差値およびその対応する相関合計値は最適性について調べられており、プログラムはステップ７２９に進む。もしこの式の解が０でなければ、プログラムはステップ７２４に進み、ＩＮＣＲを１インクリメントする。７２４−７２５−７２６−７２７−７２８で規定される流ロープは、所与の「参照」左イメージ要素についての全ての視差およびその対応する相関合計が調べられるまで続けられる。
【０４０２】
所与の「参照」左イメージ要素について全ての視差が調べられれば、ステップ７２８は「ＹＥＳ」と評価し、ステップ７２９において変数ＣＵＲＲＥＮＴ  ＲＬ  ＩＮＤＥＸを、右から左分析において最適と決定され、極値指標[x-BEST LR INDEX+D-1][y]に現在格納されている視差数に設定する。最終的には、全ての極値指標が、参照右イメージ中のイメージ要素についての最適視差を含んでいる。
【０４０３】
ステップ７３０では、ＢＥＳＴ  ＬＲ  ＩＮＤＥＸがＣＵＲＲＥＮＴ ＲＬ ＩＮＤＥＸに等しいか否かを決定する。すなわち、もし「参照」左イメージ要素が、それに最適にマッチするのが特定の右イメージであるように視差を選択した場合、この特定の右のイメージは現在の「参照」左イメージ要素を選択したか？このステップが決定を「ＮＯ」と評価した場合、左−右チェック結果は、元々の右−左チェック結果に対して一貫性を有していず、ステップ７３２においてＬＲ  ＲＥＳＵＬＴ[x][y]は−１に設定される。一実施形態においてこれは、データが破棄されることを意味する。他の実施形態において、モードフィルタおよび／または対象演算結果に依存して、データは条件的に破棄される。ステップ７３０が決定を「ＹＥＳ」と評価した場合、左−右チェック結果は元々の右−左結果と一貫性を有しており、ステップ７３１においてＬＲ  ＲＥＳＵＬＴ[x][y]に、変数ＢＥＳＴ  ＬＲ  ＩＮＤＥＸ中の値が設定される。このようにして、各「参照」左イメージ要素について、ＬＲ  ＲＥＳＵＬＴ[x][y]は、左−右および右−左間の一貫性を反映したデータを含んでいる。
【０４０４】
ステップ７３１および７３２におけるＬＲ  ＲＥＳＵＬＴ[x][y]へのデータ格納の後、ステップ７３３では、行中の処理するべき次のイメージ要素を選択する。次のイメージ要素は、現在のイメージ要素の現在位置からＤ行離れて位置している。もし現在のイメージ要素が行中の最後のイメージ要素であれば、次のイメージ要素は次の行中の最初のイメージ要素である。プログラムはステップ７３４で終了する。
【０４０５】
Ｇ．モードフィルタ
１．全領域。
【０４０６】
図３８は、領域１〜１０に対するモードフィルタの一実施形態の高レベルのフローチャートを示す。一般にモードフィルタ演算は、視差最適化演算および相関合計の領域１〜１０について前述した要素を含む。すなわち、列合計から同じ列中の１モードフィルタウインドウ上の右上角の相関カウントを減算し、現在の参照イメージ要素についてのモードフィルタカウント計算値を列合計に加算し、ウインドウ合計からウインドウ幅の列数だけ左に位置する列合計を引算し、現在の修正された列合計を修正されたウインドウ合計に加算することである。
【０４０７】
プログラム中のこのポイントにおいて、極値指標を利用することが可能である。図３８に示すように、プログラムはステップ９００において開始する。
【０４０８】
ステップ９０１は、モードフィルタウインドウサイズおよびウインドウ中の参照ポイントの位置を決定する。一実施形態において、モードフィルタウインドウは７×７であり、参照ポイントはウインドウの右下角に位置している。
【０４０９】
９個のエッジ条件および１つの一般的場合が存在するため、演算は異なって実行される。領域１〜９はエッジ条件を表し、領域１０は一般的場合を表している。図１１（Ａ）〜１１（Ｊ）について上述したように、全ウインドウについてのモードフィルタ合計を計算して、完全なウインドウが所望のイメージ処理領域内にはまり得るような領域を求める。すなわち、モードフィルタウインドウの全ての部分においてイメージデータを見いだす。このようにして、全ウインドウ合計を、領域５、６、９、および１０について計算する。処理の大部分は、１０で起こる。１０個の領域に対するウインドウの参照イメージ要素の位置が、どういった演算をどのように達成するかを支配する。ステップ９０２は、モードフィルタ演算がどこで実行されるかを領域１〜６に適用する。これらの領域は、列合計バッファ、個々の視差カウント、およびモードフィルタウインドウ合計を設定する(set up)。モードフィルタ演算が完了すれば、ステップ９０３においてプログラムが領域７〜１０に進むことを要求する。
【０４１０】
演算は、参照右イメージ中の各イメージ要素について、１つの行中において列単位で行われ、行の終わりにおいてプログラムは、所望のイメージ処理領域中の次の行中の次の列に進む。これは、ステップ９０４、９０５、９１０、９１２、９１１および９１３に反映される。より少なく起こるステップ９０４、９１２、９１３によって規定される行ループは外側ループであり、より頻繁に起こるステップ９０５、９１０および９１１によって規定される列ループは内側ループである。プログラムが行中において列単位で進むにつれ、ウインドウは領域７、８、９および１０をこの順で通過する。プログラムが次の行に到達しその行の終わりに進むとき、領域７、８、９、１０は再び図１１（Ｇ）〜１１（Ｊ）に示すようにウインドウによって横切られる。
【０４１１】
まずプログラムは、ステップ９０４および９０５に示されるように行Ｉおよび列Ｊにおいて領域７に進む。もしウインドウが領域７中にあれば（行の初めではそうなるはずである）、ステップ９０６において要求されるように領域７モードフィルタ演算を行う。もしウインドウが領域８中にあれば、ステップ９０７において要求されるように領域８モードフィルタ演算を行う。もしウインドウが領域９中にあれば、ステップ９０８において要求されるように領域９モードフィルタ演算を行う。もしウインドウが領域１０中にあれば、ステップ９０９において要求されるように領域１０モードフィルタ演算を行う。
【０４１２】
進む前にステップ９１０において、行Ｉおよび列Ｊにおける現在の参照イメージ要素が、行Ｉの最後の列にあるか否かを決定する。決定の評価が「ＮＯ」であれば、プログラムは次の列Ｊに進み（ステップ９１１および９０５）、ウインドウの位置に応じてステップ９０６、９０７、９０８、または９０９のうちいずれか１つを行う。ステップ９１０における決定の評価が「ＹＥＳ」であれば、ステップ９１２において行が所望のイメージ処理領域中の最後の行であるか否かを決定する。もしそうでなければ、ステップ９１３および９０４において、ウインドウが次の行Ｉおよびその行中の最初の列Ｊに進むことを要求する（列および行番号は最後の列および行にそれぞれ到達した後にリセットされる）。ステップ９１２における決定の評価が「ＹＥＳ」であれば、モードフィルタプログラムはステップ９１４において終了する。
【０４１３】
２．領域１および２
図３９は、領域１および２についてのモードフィルタの一実施形態のフローチャートを示す。領域１において、列合計を初期化する。領域２において、列合計を累積する。ただし両領域において、フル列合計またはウインドウ合計はまだ利用可能ではない。プログラムはステップ９１５から開始する。
【０４１４】
ステップ９１６では、モードフィルタウインドウサイズおよびウインドウ中の参照ポイントの位置を決定する。一実施形態において、ウインドウサイズは７×７である（７個のイメージ要素の幅掛ける７個のイメージ要素の高さ）であり、参照イメージ要素の位置は、ウインドウの左下角である。モードフィルタウインドウは本発明の相関合計および視差最適化部分において確立された極値指標アレイを横切って「移動する」ため、各イメージ要素は、視差値（すなわちｄ＝０、１、２、．．．またはＤ−１）を含んでいる。この視差値は、本発明のイメージ処理システムによって参照右イメージと視差シフトされた左イメージとの間の最高のマッチまたは対応を表しているものとして選択された、最適な視差を表している。モードフィルタサイズおよびウインドウ中の参照ポイント位置の決定あるいは選択は、このモードフィルタ演算へのサブプログラムコール無しに、プログラムの主部分（ＭＡＩＮ）で行われ得る。
【０４１５】
ステップ９１７では、視差カウント[x+Z]変数を初期化する。ここでモードフィルタの文脈において用いている「Ｚ」は、１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」とは異なる。一実施形態において、視差カウント[x+Z]は３２ビット長であり、各ビン(bin)が１バイト長である４つの「ビン」を有していると考えることができる。この構造を用いることは、本発明の相関合計および視差最適化スキームの、列合計アレイのデータ圧縮構造および中間ｔｅｍｐ変数データと類似している。視差カウント[x+Z]アレイの概念は、単一ライン列合計アレイバッファと若干似ている。実際、他の実施形態においては、列中の視差をカウントするために視差カウント[x+Z]アレイの構造を用いない。
【０４１６】
視差カウント[x+Z]はＺ＝０から５まで変わるため、このアレイは６個の変数を表しており、Ｚの特定の値についての各変数視差カウント[x+Z]は４個のビンを含んでいる。合計２４個のビンが利用可能である。各ビンは、単一の視差値を表している。本発明のイメージ処理システムは、各視差の発生を、その発生している視差に対応するビンに１ビットを加算することにより、カウントする。本発明の一実施形態においては、１６個の視差を用いる（Ｄ＝１６）。このように、２４ビットの全てを用いるわけではなく、むしろ、１６個のビンのみを用いて視差の発生をカウントする。以下の表は、Ｚの各値およびこれらのビンについての視差カウント[x+Z]の理解を容易にするものである：
2008033958.tif 000010
【０４１７】
2008033958.tif 000011
【０４１８】
表に示すように、視差カウント[x+Z]の６個の変数は以下に表される：視差カウント[x]、視差カウント[x+1]、視差カウント[x+2]、視差カウント[x+3]、視差カウント[x+4]、および視差カウント[x+5]である。各可変視差カウント[x+Z]は４バイト長であり、各バイトはビンを表す。「００」記号は１６進数記述であり、ビットに直せば実際には８ビット長−−００００  ００００である。従って、各ビンまたはバイト位置は、隣接するビンまたはバイト位置に影響することなく（すなわち繰り上がり(carries)なしに）、最悪の場合の最大視差カウント数を保持することができる。
【０４１９】
アンダーラインは、視差カウントを保持している特定のビンまたはバイト位置を表す。従って、可変視差カウント[x+3]について、視差１３カウントがＭＳＢから２番目のバイトに格納されている。従って、例えば視差７などの所与の視差があるウインドウ列内で３回発生した場合、値３が視差カウント[x+1]のＬＳＢバイトに格納される。視差１４があるウインドウ列内で１０回発生した場合、視差カウント[x+3]は、ＬＳＢバイトから２番目のバイトに値Ａ（１０進法における１０に対応する１６進数）を保持する。
【０４２０】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域１または２に位置している場合、ステップ９１８および９２１は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４２１】
ステップ９１９では、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む(fetch)。ステップ９２０において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠９２３内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４２２】
プログラムはステップ９２１に進み、システムに、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じモードフィルタ計算を行う。モードフィルタ演算のこの部分は、ステップ９２２において終了する。
【０４２３】
３．領域３および４
図４０は、領域３および４についてのモードフィルタの一実施形態のフローチャートを示している。領域３において完全な列合計が利用可能であるため、モードフィルタウインドウｓｕｍ＿Ｚが初期化される。領域４において、モードフィルタウインドウｓｕｍ＿Ｚを累積する。ただし、両領域において、フルのモードフィルタウインドウｓｕｍ＿Ｚはまだ利用可能ではない。プログラムはステップ９２４から開始する。
【０４２４】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域３または４に位置している場合、ステップ９２５および９２９は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４２５】
ステップ９２６では、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む。ステップ９２７において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠９３１内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４２６】
モードフィルタが６個の可変視差カウント[x+Z]を用いてそれぞれ４つの視差（合計２４個の可能な視差）の発生（単数または複数）をカウントするように、モードフィルタ合計は４個のウインドウ合計変数−−モードフィルタウインドウｓｕｍ＿Ｚ（Ｚ＝０〜５について）を用いて計算される。各モードフィルタウインドウｓｕｍ＿Ｚは、４個の視差に対してウインドウ合計を保持する。従って、ウインドウｓｕｍ＿０は、視差０〜３についてのウインドウ合計発生回数(occurences)を保持し；ウインドウｓｕｍ＿１は、視差４〜７についてのウインドウ合計発生回数を保持し；ウインドウｓｕｍ＿２は、視差８〜１１についてのウインドウ合計発生回数を保持し；ウインドウｓｕｍ＿３は、視差１２〜１５についてのウインドウ合計発生回数を保持し；ウインドウｓｕｍ＿４は、視差１６〜１９についてのウインドウ合計発生回数を保持し；ウインドウｓｕｍ＿５は、視差２０〜２３についてのウインドウ合計発生回数を保持する。
【０４２７】
ステップ９２８において、内側Ｚループ（１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」ループとは区別される）を行う。０から５の各Ｚについて、領域３はモードフィルタウインドウｓｕｍ＿Ｚ変数を初期化し、領域４は、列合計（視差カウント[x+Z]である）をモードフィルタウインドウｓｕｍ＿Ｚの現在の値に加算することにより、モードフィルタウインドウｓｕｍ＿Ｚを更新する。
【０４２８】
プログラムはステップ９２９に進み、システムに、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じモードフィルタ計算を行う。モードフィルタ演算のこの部分は、ステップ９３０において終了する。
【０４２９】
４．領域５
図４１は、領域５についてのモードフィルタの一実施形態のフローチャートを示している。ウインドウが所望のイメージ処理領域の左上角にちょうどはまるため、領域５において完全なウインドウ合計が利用可能である。従って、この領域において視差一貫性を決定することができる。プログラムはステップ９３２から開始する。
【０４３０】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域５に位置している場合、ステップ９３３および９４９は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４３１】
ステップ９３４では、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む。ステップ９３５において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠９５１内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４３２】
ステップ９３６において、内側Ｚループ（１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」ループとは区別される）を行う。０から５の各Ｚについて、領域５は、列合計（視差カウント[x+Z]である）をモードフィルタウインドウｓｕｍ＿Ｚの現在の値に加算することにより、モードフィルタウインドウｓｕｍ＿Ｚを更新する。この時点において、ウインドウ中で表される全ての視差の完全なウインドウ合計が利用可能になる。
【０４３３】
ステップ９３７ではまず、極値指標を０に設定し（ここで、Ｚ＝０について４＊Ｚ＝０である）、極値を一番左のＭＳＢビンのウインドウｓｕｍ＿Ｚに設定する。これにより、最大カウントを有する視差が視差０に向かってスキューまたはバイアスされ、カウント値はウインドウ内の視差０の発生回数にスキューまたはバイアスされる。このようにして、タイは低い方の視差数に向かってスキューされる。他の実施形態においては、タイの場合において高い方の視差数に向かってスキューする。
【０４３４】
ステップ９３８および９４７によって規定される第２の内側Ｚループを用いて、最大視差カウントを決定する。最大視差カウントは、ウインドウ内の２４個のビン（他の場合においては、１６個の視差のみを用いるので１６個のビンのみを比較する）中の個々のカウント値を比較することによって決定される。最悪の場合のカウントは、７×７のウインドウについて単一の視差が４９回発生することである（１６進数記述＝３１）。Ｚ＝０〜５について、ステップ９３９から９４６を行う。所与のＺについて、ステップ９３９から９４２は、ｓｕｍ＿Ｚの様々なビンが極値より大きいか否かを決定する。もしそうであれば、極値指標を、最大カウント視差値の極値指標によって置き換え、極値は適切なビンのｓｕｍ＿Ｚによって置き換えられる。このようにして、極値指標は、最大のカウントを有する視差によって表され、極値は最大の発生した視差回数のカウント（単数または複数）または量（特定の視差がウインドウ中において現れる回数）によって表される。
【０４３５】
ステップ９３９において、もしｓｕｍ＿Ｚの一番左のＭＳＢビンが極値より大きければ、ステップ９４３は、極値指標を４＊Ｚで置き換えることを要求する。極値はまた、ｓｕｍ＿Ｚの一番左のＭＳＢビンによって置き換えられる。次にプログラムはステップ９４０に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９３９の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９４０において次の比較に用いられる。
【０４３６】
ステップ９４０において、ｓｕｍ＿Ｚの左から２番目のＭＳＢビンが極値より大きければ、ステップ９４４は極値指標が４＊Ｚ＋１によって置き換えられることを要求する。また極値も、ｓｕｍ＿Ｚの左から２番目のＭＳＢビンによって置き換えられる。プログラムは次にステップ９４１に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９４０の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９４１において次の比較に用いられる。
【０４３７】
ステップ９４１において、ｓｕｍ＿Ｚの左から３番目のＭＳＢビンが極値より大きければ、ステップ９４５は極値指標が４＊Ｚ＋２によって置き換えられることを要求する。また極値も、ｓｕｍ＿Ｚの左から３番目のＭＳＢビンによって置き換えられる。プログラムは次にステップ９４２に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９４１の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９４２において次の比較に用いられる。
【０４３８】
ステップ９４２において、ｓｕｍ＿ＺのＬＳＢビンが極値より大きければ、ステップ９４６は極値指標が４＊Ｚ＋３によって置き換えられることを要求する。また極値も、ｓｕｍ＿ＺのＬＳＢビンによって置き換えられる。プログラムは次に、ステップ９４７に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９４２の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、Ｚをインクリメントした後にステップ９４７において次の比較に用いられる。
【０４３９】
極値を用いて比較を行い、比較により現在の極値より大きいｓｕｍ＿Ｚ値が得られた場合に極値指標および極値を更新するこの第２のＺループは、全てのＺ値についてループし続ける（０〜５）。最終結果として、ウインドウ内で見いだされる他の全ての最適視差中において最大のカウントを有する特定の視差数（すなわちｄ＝０、１、２、．．．またはＤ−１）を保持する極値指標および、実際のカウントそのものを保持する極値が得られる。全てのｓｕｍ＿Ｚを全てのＺについて比較した後、極値指標結果アレイ[x][y]は、ステップ９４８に示すように極値指標を対応する位置に格納する。
【０４４０】
プログラムはステップ９４９に進み、システムに、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じモードフィルタ計算を行う。モードフィルタ演算のこの部分は、ステップ９５０において終了する。
【０４４１】
５．領域６
図４２は、領域６についてのモードフィルタの一実施形態のフローチャートを示している。領域６において、演算は領域５のものと同様であるが、今度は、ウインドウ幅の列数だけ左に位置する列合計を、対象ウインドウ合計から引算することができる。完全なウインドウ合計もまた利用可能である。従って、この領域において視差一貫性を決定することができる。プログラムはステップ９５２から開始する。
【０４４２】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域６に位置している場合、ステップ９５３および９６９は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４４３】
ステップ９５４では、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む。ステップ９５５において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠９７１内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４４４】
ステップ９５６において、内側Ｚループ（１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」ループとは区別される）を行う。０から５の各Ｚについて、領域６は、モードフィルタウインドウｓｕｍ＿Ｚを更新する。第１に、現在の参照ポイントよりウインドウ幅だけ左に位置する列合計を現在のウインドウ合計から引算する。この結果、視差カウント[x+Z-モードフィルタウインドウ幅]がｓｕｍ＿Ｚから減算される。第２に、現在の列合計（視差カウント[x+Z]である）をモードフィルタウインドウｓｕｍ＿Ｚの現在の値に加算する。この時点において、ウインドウ中で表される全ての視差の完全なウインドウ合計が利用可能になる。
【０４４５】
ステップ９５７ではまず、極値指標を０に設定し（ここで、Ｚ＝０について４＊Ｚ＝０である）、極値を一番左のＭＳＢビンのウインドウｓｕｍ＿Ｚに設定する。これにより、最大カウントを有する視差が視差０に向かってスキューまたはバイアスされ、カウント値はウインドウ内の視差０の発生回数にスキューまたはバイアスされる。このようにして、タイは低い方の-視差数に向かってスキューされる。他の実施形態においては、タイの場合において高い方の視差数に向かってスキューする。
【０４４６】
ステップ９５８および９６７によって規定される第２の内側Ｚループを用いて、最大視差カウントを決定する。最大視差カウントは、ウインドウ内の２４個のビン（他の場合においては、１６個の視差のみを用いるので１６個のビンのみを比較する）中の個々のカウント値を比較することによって決定される。Ｚ＝０〜５について、ステップ９５９から９６６を行う。所与のＺについて、ステップ９５９から９６２は、ｓｕｍ＿Ｚの様々なビンが極値より大きいか否かを決定し、各決定につき、領域５のモードフィルタ計算について説明した通りの結果を決定する。
【０４４７】
ステップ９５９において、もしｓｕｍ＿Ｚの一番左のＭＳＢビンが極値より大きければ、ステップ９６３は、極値指標を４＊Ｚで置き換えることを要求する。極値はまた、ｓｕｍ＿Ｚの一番左のＭＳＢビンによって置き換えられる。次にプログラムはステップ９６０に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９５９の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９６０において次の比較に用いられる。
【０４４８】
ステップ９６０において、ｓｕｍ＿Ｚの左から２番目のＭＳＢビンが極値より大きければ、ステップ９６４は極値指標が４＊Ｚ＋１によって置き換えられることを要求する。また極値も、ｓｕｍ＿Ｚの左から２番目のＭＳＢビンによって置き換えられる。プログラムは次にステップ９６１に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９６０の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９６１において次の比較に用いられる。
【０４４９】
ステップ９６１において、ｓｕｍ＿Ｚの左から３番目のＭＳＢビンが極値より大きければ、ステップ９６５は極値指標が４＊Ｚ＋２によって置き換えられることを要求する。また極値も、ｓｕｍ＿Ｚの左から３番目のＭＳＢビンによって置き換えられる。プログラムは次にステップ９６２に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９６１の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、ステップ９６２において次の比較に用いられる。
【０４５０】
ステップ９６２において、ｓｕｍ＿ＺのＬＳＢビンが極値より大きければ、ステップ９６６は極値指標が４＊Ｚ＋３によって置き換えられることを要求する。また極値も、ｓｕｍ＿ＺのＬＳＢビンによって置き換えられる。プログラムは次に、ステップ９６７に進み、新しく更新された極値指標および極値により次の比較を行う。ステップ９６２の評価が「ＮＯ」であれば、現在の極値指標および極値は更新されず、Ｚをインクリメントした後にステップ９６７において次の比較に用いられる。
【０４５１】
極値を用いて比較を行い、比較により現在の極値より大きいｓｕｍ＿Ｚ値が得られた場合に極値指標および極値を更新するこの第２のＺループは、全てのＺ値についてループし続ける（０〜５）。最終結果として、ウインドウ内で見いだされる他の全ての最適視差中において最大のカウントを有する特定の視差数（すなわちｄ＝０、１、２、．．．またはＤ−１）を保持する極値指標および、実際のカウントそのものを保持する極値が得られる。全てのｓｕｍ＿Ｚを全てのＺについて比較した後、極値指標結果アレイ[x][y]は、ステップ９６８に示すように極値指標を対応する位置に格納する。
【０４５２】
プログラムはステップ９６９に進み、システムに、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じモードフィルタ計算を行う。モードフィルタ演算のこの部分は、ステップ９７０において終了する。
【０４５３】
６．領域７および８
図４３は、領域７および８についてのモードフィルタの一実施形態のフローチャートを示している。演算は領域３および４のものと同様であるが、今度は、同じ列中の現在の参照ポイントからモードフィルタウインドウ高さだけ上に位置するイメージポイントについての単一視差発生回数を、視差カウント[x+Z]（モードフィルタ列合計である）内の値から減算しなければならない。この単一視差発生回数は、全てのＺについての視差カウント[x+Z]のビンのうち１つ中の単一のビットである。領域７において、完全な列合計が利用可能であるため、モードフィルタウインドウｓｕｍ＿Ｚを初期化する。領域８において、モードフィルタウインドウｓｕｍ＿Ｚを累積する。ただし、両領域において、フルのモードフィルタウインドウｓｕｍ＿Ｚはまだ利用可能ではない。プログラムはステップ９７２から開始する。
【０４５４】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域７または８に位置している場合、ステップ９７３および９７８は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４５５】
ステップ９７４では、極値指標アレイ[x][y-モードフィルタウインドウ高さ]中に位置する視差カウント[x+Z]から１ビットを減算する。極値指標アレイ[x][y-モードフィルタウインドウ高さ]中において見いだされる特定の視差数に基づき、単一のカウントまたはビットを、視差数に対応する視差カウント[x+Z]中のビンから減算する。このようにして、位置極値指標アレイ[x][y-モードフィルタウインドウ高さ]に対応するイメージ要素に対して視差６が最適であることが見いだされた場合、視差最適化プログラムは、値６（視差６を表す）を、この位置において極値指標アレイに格納する。このようにして、視差カウント[x+1]の３番目のＭＳＢビンからの１ビットを、現在そのビンにおいて見いだされる値（すなわちカウント）から減算する。
【０４５６】
ステップ９７５において、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む。ステップ９７６において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠９８０内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４５７】
ステップ９７７において、内側Ｚループ（１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」ループとは区別される）を行う。０から５の各Ｚについて、領域７は、モードフィルタウインドウｓｕｍ＿Ｚを初期化し、領域８は、列合計（視差カウント[x+Z]である）をモードフィルタウインドウｓｕｍ＿Ｚの現在の値に加算する。
【０４５８】
プログラムはステップ９７８に進み、システムに、同じ行の次の列中の次参照ポイントを、あるいは現在の参照ポイントが行の最後の列に位置している場合は次の行の初めの次参照ポイントを、システムに選択させる。そして、新しい参照ポイントについての同じモードフィルタ計算を行う。モードフィルタ演算のこの部分は、ステップ９７９において終了する。
【０４５９】
７．領域９
図４４は、領域９についてのモードフィルタの一実施形態のフローチャートを示している。領域９において、演算は領域５のものと同様であるが、今度は、同じ列中の現在の参照ポイントからモードフィルタウインドウ高さだけ上に位置するイメージポイントについての単一視差発生回数を、視差カウント[x+Z]（モードフィルタ列合計である）内の値から減算しなければならない。この単一視差発生回数は、全てのＺについての視差カウント[x+Z]のビンのうち１つ中の単一のビットである。完全なウインドウ合計もまた利用可能である。従って、この領域において視差一貫性を決定することができる。プログラムはステップ９８１から開始する。
【０４６０】
モードフィルタウインドウ、より具体的にはモードフィルタウインドウ中の参照イメージ要素が領域９に位置している場合、ステップ９８２および９９９は、行中を列単位で進むことにより各行および列について以下のモードフィルタ計算を実行することを要求し、もしモードフィルタウインドウの参照ポイントが行の終わりに到達した場合は、参照ポイントは次の行の初めに移動する。
【０４６１】
ステップ９８３では、極値指標アレイ[x][y-モードフィルタウインドウ高さ]中に位置する視差カウント[x+Z]から１ビットを減算する。極値指標アレイ[x][y-モードフィルタウインドウ高さ]中において見いだされる特定の視差数に基づき、単一のカウントまたはビットを、視差数に対応する視差カウント[x+Z]中のビンから減算する。
【０４６２】
ステップ９８４では、モードフィルタウインドウ内の極値指標アレイ[x][y]から視差データを取り込む。ステップ９８５において、カウントビット（単数または複数）を、実質的に列合計である視差カウント[x+Z]中の各視差カウントビンに、モードフィルタウインドウ中の各視差の発生に基づいて加算する。カウントビット（単数または複数）は、特定の視差がモードフィルタウインドウ内における極値指標アレイ中に現れる回数を表す。これらのカウントビットは、枠１００１内に示されるように、適切な視差カウント[x+Z]ビン中に置かれる。
【０４６３】
ステップ９８６において、内側Ｚループ（１対の視差についての相関データの処理の説明のために図２１〜２７を参照して上述した相関合計および視差最適化スキームにおいて用いた「ｚ」ループとは区別される）を行う。０から５の各Ｚについて、領域９は、現在の列合計（視差カウント[x+Z]である）をモードフィルタウインドウｓｕｍ＿Ｚの現在の値に加算することによって、モードフィルタウインドウｓｕｍ＿Ｚを更新する。この時点において、ウインドウ中で表される全ての視差の完全なウインドウ合計が利用可能になる。
【０４６４】
ステップ９８７ではまず、極値指標を０に設定し（ここで、Ｚ＝０について４＊Ｚ＝０である）、極値を一番左のＭＳＢビンのウインドウｓｕｍ＿Ｚに設定する。これにより、最大カウントを有する視差が視差０に向かってスキューまたはバイアスされ、カウント値はウインドウ内の視差０の発生回数にスキューまたはバイアスされる。このようにして、タイは低い方の-視差数に向かってスキューされる。他の実施形態においては、タイの場合において高い方の視差数に向かってスキューする。
【０４６５】
ステップ９８８および９９７によって規定される第２の内部Ｚループを用いて、最大視差カウントが決定される。最大視差カウントは、ウィンドウ内の２４個のビンの個々のカウント値を比較することによって決定される（他の場合では、１６個の視差のみが用いられるため１６個のビンのみが比較される）。Ｚ＝０〜５に対してステップ９８８〜９９７が実行される。所与のＺに対して、ステップ９８９〜９９６は、ｓｕｍ＿Ｚのそれぞれのビンが極値、および領域５のモードフィルタ計算に関連して上述したようにいずれかの決定から生じる結果より大きいかどうかを決定する。
【０４６６】
ステップ９８９で、ｓｕｍ＿Ｚの最左端のＭＳＢビンが極値より大きい場合は、ステップ９９３で、極指数を４＊Ｚに置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端のＭＳＢビンに置き換えられる。プログラムは次にステップ９９０に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ９８９で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ９９０での次の比較のために使用され得る。
【０４６７】
ステップ９９０で、ｓｕｍ＿Ｚの最左端から２番目のＭＳＢビンが極値より大きい場合は、ステップ９９４で極指数を４＊Ｚ＋１に置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端から２番目のＭＳＢビンに置き換えられる。プログラムは次にステップ９９１に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ９９０で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ９９１での次の比較のために使用され得る。
【０４６８】
ステップ９９１で、ｓｕｍ＿Ｚの最左端から３番目のＭＳＢビンが極値より大きい場合は、ステップ９９５で極指数を４＊Ｚ＋２に置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端から３番目のＭＳＢビンに置き換えられる。プログラムは次にステップ９９２に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ９９１で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ９９２での次の比較のために使用され得る。
【０４６９】
ステップ９９２で、ｓｕｍ＿ＺのＬＳＢビンが極値より大きい場合は、ステップ９９６で極指数を４＊Ｚ＋３に置き換える必要がある。極値もまたｓｕｍ＿ＺのＬＳＢビンに置き換えられる。プログラムは次にステップ９９７に進み、Ｚをインクリメントし、新しく更新された極指数および極値によって次の比較を行う。ステップ９９２で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ９９７でＺをインクリメントした後、次の比較のために使用され得る。
【０４７０】
極値との比較を行って、比較により現在の極値より大きなｓｕｍ＿Ｚ値が得られる場合は極指数および極値を更新するこの第２のＺループは、すべてのＺ値（０〜５）に対してループを続ける。この最終結果には、ウィンドウ内で見いだされるすべての他の最適視差のうちで最大のカウントを有する特定の視差番号（すなわち、ｄ＝０，１，２，．．．またはＤ−１）を保持する極指数、および実際のカウント自体を保持する極値が得られる。すべてのＺに対してすべてのｓｕｍ＿Ｚ値が比較されると、ステップ９９８に示すように、極指数結果アレイ［ｘ］［ｙ］は、対応する位置に極指数を格納する。
【０４７１】
プログラムはステップ９９９に進み、ここでシステムに、同じ行の次の列の次の参照ポイントを、または現在の参照ポイントがその行の最後の列に位置する場合は、次の行の先頭を選択するように指示する。次に、新しい参照ポイントのためのモードフィルタ計算が行われる。モードフィルタ演算のこの部分はステップ１０００で終了する。
【０４７２】
８．領域１０
図４５は、領域１０のためのモードフィルタの１つの実施形態のフローチャートを示す。演算は領域６および９の演算と同様であるが、この場合はアルゴリズムの一般的な場合が喚起されるという点で異なる。この場合は、演算は以下のものを含む。すなわち、同じ列の上方の１つのウィンドウの最右上端を列合計から減算すること、現在の参照イメージ要素を列合計に加算すること、ウィンドウ幅の列だけ左に位置する列の合計をウィンドウ合計から減算すること、および現在の変更された列合計を変更されたウィンドウ合計に加算することを含む、完全なウィンドウ合計もまた得られる。従って、この領域では視差の一貫性が決定され得る。プログラムはステップ１００２で開始される。
【０４７３】
モードフィルタウィンドウ、より詳しくはモードフィルタウィンドウ内の参照イメージ要素が領域１０内に位置する場合は、ステップ１００３および１０２０で、行内を列毎に進むことによって、各行および列に対して以下のモードフィルタ計算を実行する必要がある。モードフィルタウィンドウの参照ポイントが行の終わりに到着した場合は、参照ポイントは次の行の先頭に移動する。
【０４７４】
ステップ１００４は、極指標アレイ［ｘ］［ｙ−モードフィルタウィンドウ高さ］内に位置する視差カウント［ｘ＋Ｚ］から１ビットを減算する。極指標アレイ［ｘ］［ｙ−モードフィルタウィンドウ高さ］内に見いだされる特定の視差番号に基づいて、視差番号に対応する視差カウント［ｘ＋Ｚ］のビンから単一カウントまたはビットが減算される。
【０４７５】
ステップ１００５は、モードフィルタウィンドウ内の極指標アレイ［ｘ］［ｙ］から視差データを取り出す。ステップ１００６は、モードフィルタウィンドウ内での各視差の出現に基づいて、実質的に列合計である、視差カウント［ｘ＋Ｚ］における各視差カウントビンにカウントビットを加算する。カウントビットは、特定の視差がモードフィルタウィンドウ内の極指数アレイに現れる回数を表す。これらのカウントビットは、ボックス１０２２に示すように、適切な視差カウント［ｘ＋Ｚ］内に置かれる。
【０４７６】
内部Ｚループ（一対の視差に対する相関データの処理について述べるために図２１〜２７に関連して上述した相関合計および視差最適化方法で使用される「ｚ」ループとは区別される）はステップ１００７で行われる。０〜５の各Ｚに対して、領域１０はモードフィルタウィンドウｓｕｍ＿Ｚを更新する。先ず、現在の参照ポイントよりウィンドウ幅だけ左に位置する列合計を現在のウィンドウ合計から減算する。従って、視差カウント「ｘ＋Ｚ−モードフィルタウィンドウ幅］の値がｓｕｍ＿Ｚから減算される。第２に、視差カウント［ｘ＋Ｚ］である現在の列合計が、モードフィルタウィンドウｓｕｍ＿Ｚの現在の値に加算される。この時点で、ウィンドウ内で表されるすべての視差の完全なウィンドウ合計が得られる。
【０４７７】
ステップ１００８は、先ず極指標を０に設定する。Ｚ＝０に対しては４＊Ｚ＝０である。そして、極値を、最左端のＭＳＢビンのウィンドウｓｕｍ＿Ｚに設定する。これにより、最大カウントを有する視差が、視差０に向かってスキューされまたはバイアスされ、カウント値がウィンドウ内の視差０の出現数に設定される。従って、連なりは、より低い視差番号に向かってスキューされる。他の実施形態では、スキューの連なりは、より高い視差番号に向かう。
【０４７８】
ステップ１００９および１０１８によって規定される第２の内部Ｚループを用いて、最大視差カウントが決定される。最大視差カウントは、ウィンドウ内の２４個のビンの個々のカウント値を比較することによって決定される（場合によっては、１６個の視差のみが用いられるため１６個のビンのみが比較される）。Ｚ＝０〜５に対して、ステップ１００９〜１０１８が実行される。所与のＺに対して、ステップ１０１０〜１０１７は、ｓｕｍ＿Ｚのそれぞれのビンが極値、および領域５のモードフィルタ計算に関連して上述したようにいずれかの決定から生じる結果より大きいかどうかを決定する。
【０４７９】
ステップ１０１０で、ｓｕｍ＿Ｚの最左端のＭＳＢビンが極値より大きい場合は、ステップ１０１４で極指数を４＊Ｚに置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端のＭＳＢビンに置き換えられる。プログラムは次にステップ１０１１に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ１０１０で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ１０１１で次の比較のために使用され得る。
【０４８０】
ステップ１０１１で、ｓｕｍ＿Ｚの最左端から２番目のＭＳＢビンが極値より大きい場合は、ステップ１０１５で極指数を４＊Ｚ＋１に置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端から２番目のＭＳＢビンに置き換えられる。プログラムは次にステップ１０１２に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ１０１１で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ１０１２での次の比較のために使用され得る。
【０４８１】
ステップ１０１２で、ｓｕｍ＿Ｚの最左端から３番目のＭＳＢビンが極値より大きい場合は、ステップ１０１６で極指数を４＊Ｚ＋２に置き換える必要がある。極値もまたｓｕｍ＿Ｚの最左端から３番目のＭＳＢビンに置き換えられる。プログラムは次にステップ１０１３に進み、新しく更新された極指数および極値によって次の比較を行う。ステップ１０１２で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ１０１３での次の比較のために使用され得る。
【０４８２】
ステップ１０１３で、ｓｕｍ＿ＺのＬＳＢビンが極値より大きい場合は、ステップ１０１７で極指数を４＊Ｚ＋３に置き換える必要がある。極値もまたｓｕｍ＿ＺのＬＳＢビンに置き換えられる。プログラムは次にステップ１０１８に進み、Ｚをインクリメントし、新しく更新された極指数および極値によって次の比較を行う。ステップ１０１３で「いいえ」と評価された場合は、現在の極指数および極値は更新されず、ステップ１０１８でＺをインクリメントした後、次の比較のために使用され得る。
【０４８３】
極値との比較を行って、比較の結果、ｓｕｍ＿Ｚ値が現在の極値より大きい場合は極指数および極値を更新するこの第２のＺループは、すべてのＺ値（０〜５）に対してループを続ける。この最終結果として、ウィンドウ内で見いだされるすべての他の最適視差のうちで最大カウントを有する特定の視差番号（すなわち、ｄ＝０，１，２，．．．またはＤ−１）を保持する極指数、および実際のカウント自体を保持する極値が得られる。すべてのｓｕｍ＿Ｚ値がすべてのＺに対して比較されると、ステップ１０１９に示すように、極指数結果アレイ［ｘ］［ｙ］は、対応する位置に極指数を格納する。
【０４８４】
プログラムはステップ１０２０に進み、ここでシステムに、同じ行の次の列の次の参照ポイント、または現在の参照ポイントがその行の最後の列に位置する場合は、次の行の先頭を選択するように指示する。次に、新しい参照ポイントに対して同じモードフィルタ計算が行われる。モードフィルタ演算のこの部分はステップ１０２１で終了する。
【０４８５】
ＩＶ．ハードウェア実装
Ａ．演算要素アレイ
本発明のハードウェア実装に戻ると、本明細書で述べる対応アルゴリズムは、マイクロプロセッサベースのコンピュータシステム、様々なＦＰＧＡを用いる再構成可能演算システム、アプリケーション特異的集積回路（ＡＳＩＣ）実装、およびカスタム集積回路の実装を含む様々な実施形態で実現され得る。特に、ＡＳＩＣおよびカスタム集積回路の実装は、本発明のデータ処理システムの大量生産を促進させる。ステレオビジョン演算のためのイメージ処理への適用可能性とは別に、本発明のハードウェアの局面は、データの組を処理してこれらの関連性を決定するいかなるアルゴリズムにも適用され得る。本明細書でのハードウェア実装の教示により、当業者であれば本発明を様々なハードウェア形態に容易に拡張させ得る。
【０４８６】
以下に述べるいくつかの図面はクロックソースを図示してはいないが、本発明を実行するためにクロックソースをどのようの組み込むかについては、当業者にとっては既知であろう。実際において、デジタルデータを処理するためにレジスタおよびデジタルロジックを使用することは、クロック信号が利用可能であることを示唆している。
【０４８７】
イメージ処理において、図４６は、本発明のハードウェアシステムの１つの実施形態を示す。同図では、ＦＰＧＡ、ＳＲＡＭ、コネクタ、データパスユニット、クロックユニット、ＰＣＩインタフェース要素、および様々なバスよりなる４×４アレイ１１００が、配分トーラス構成で配置される。ＦＰＧＡは、他の要素からのサポートにより、センサスベクトルを発生させ、各データの組の各要素に対する相関を決定する。この特定の実施形態は再構成システムを示しているが、他の実施形態は必ずしも再構成可能であるとは限らない。実際において、いくつかの実施形態は非ＦＰＧＡハードウェア構成要素を利用する。さらに他の実施形態はＡＳＩＣ形態である。
【０４８８】
様々な実施形態において、本発明は、データを並列パイプライン方式で処理し、これにより異なる時間からの多数の異なるイメージデータを同時に処理することができる。実際において、本システムの処理データは圧縮されているため、効率およびスループットが促進される。従って、各イメージ内の各ラインのためのイメージデータがシステムに供給され、システムは次にセンサスベクトルを演算し発生させ、相関を決定する。相関については、左右カメラからのイメージデータ対が同時に処理される。このとき、一方のイメージの各イメージ要素が、各サーチウィンドウ内の他方のイメージの各イメージ要素と比較される。以下の原理および実現可能な記述は、本発明のハードウェアの局面に対して用いられる形態に関係なく適用される。
【０４８９】
１つの実施形態では、配分トーラス構成で配置された１６個のＦＰＧＡおよび１６個のＳＲＡＭの特定の均一なアレイが、演算要素の４×４二次元アレイとなる。４×４アレイは、列Ａ、Ｂ、ＣおよびＤならびに行０、１、２および３を含む。４×４アレイは、コラムＡに演算要素１１０１、１１０２、１１０３および１１０４を、コラムＢに演算要素１１０５、１１０６、１１０７および１１０８を、コラムＣに演算要素１１０９、１１１０、１１１１および１１１２を、そしてコラムＤに演算要素１１１３、１１１４、１１１５および１１１６を含む。アレイはまた、コラムＡにメモリ要素１１２１〜１１２４、コラムＢにメモリ要素１１２５〜１１２８、コラムＣにメモリ要素１１２９〜１１３２、そしてコラムＤにメモリ要素１１３３〜１１３６を含む。演算要素の部分制御のために、アレイはクロックユニット１１２０およびデータパスユニット１１３８を含む。ＰＣＩバスシステム１１３９へのインタフェースのために、ＰＣＩインタフェース１２３３が配備される。
【０４９０】
１つの実施形態では、アレイは、周線４の円筒メッシュ状に接続された４個の演算要素（例えばＦＰＧＡ）およびメモリ要素よりなる４つの列として考えられ得る。円筒の中心軸は垂直である。垂直軸に沿ってアレイの演算要素が互いに接続される。列Ａでは、演算要素１１０１はコネクタ／バス１２２１を介して演算要素１１０２に接続され、演算要素１１０２はコネクタ／バス１２２２を介して演算要素１１０３に接続され、演算要素１１０３はコネクタ／バス１２２３を介して演算要素１１０４に接続され、そして演算要素１１０４は、コネクタ１１４０および１１４４を介してまたは要素間のケーブルを介して、列の先端の演算要素１１０１に接続される。列Ｂでは、演算要素１１０５はコネクタ／バス１２２４を介して演算要素１１０６に接続され、演算要素１１０６はコネクタ／バス１２２５を介して演算要素１１０７に接続され、演算要素１１０７はコネクタ／バス１２２６を介して演算要素１１０８に接続され、そして演算要素１１０８は、コネクタ１１４１および１１４５を介してまたは要素間のケーブルを介して、列の先端の演算要素１１０５に接続される。列Ｃでは、演算要素１１０９はコネクタ／バス１２２７を介して演算要素１１１０に接続され、演算要素１１１０はコネクタ／バス１２２８を介して演算要素１１１１に接続され、演算要素１１１１はコネクタ／バス１２２９を介して演算要素１１１２に接続され、そして演算要素１１１２は、コネクタ１１４２および１１４６を介してまたは要素間のケーブルを介して、列の先端の演算要素１１０９に接続される。列Ｄでは、演算要素１１１３はコネクタ／バス１２３０を介して演算要素１１１４に接続され、演算要素１１１４はコネクタ／バス１２３１を介して演算要素１１１５に接続され、演算要素１１１５はコネクタ／バス１２３２を介して演算要素１１１６に接続され、そして演算要素１１１６は、コネクタ１１４３および１１４７を介してまたは要素間のケーブルを介して、列の先端の演算要素１１１３に接続される。
【０４９１】
アレイの演算要素はまた、水平アクセスに沿って互いに接続される。行０では、演算要素１１０１はコネクタ／バス１１７４を介して演算要素１１０５に接続され、演算要素１１０５はコネクタ／バス１１７５を介して演算要素１１０９に接続され、演算要素１１０９はコネクタ／バス１１７６を介して演算要素１１１３に接続され、そして演算要素１１１３は、コネクタ／バス１１７７および１１７０を介して行の西側端部の演算要素１１０１に接続され得る。行１では、演算要素１１０２はコネクタ／バス１１７８を介して演算要素１１０６に接続され、演算要素１１０６はコネクタ／バス１１７９を介して演算要素１１１０に接続され、演算要素１１１０はコネクタ／バス１１８０を介して演算要素１１１４に接続され、そして演算要素１１１４は、コネクタ／バス１１８１および１１７１を介して行の西側端部の演算要素１１０２に接続され得る。行２では、演算要素１１０３はコネクタ／バス１１８２を介して演算要素１１０７に接続され、演算要素１１０７はコネクタ／バス１１８３を介して演算要素１１１１に接続され、演算要素１１１１はコネクタ／バス１１８４を介して演算要素１１１５に接続され、そして演算要素１１１５は、コネクタ／バス１１８５および１１７２を介して行の西側端部の演算要素１１０３に接続され得る。行３では、演算要素１１０４はコネクタ／バス１１８６を介して演算要素１１０８に接続され、演算要素１１０８はコネクタ／バス１１８７を介して演算要素１１１２に接続され、演算要素１１１２はコネクタ／バス１１８８を介して演算要素１１１６に接続され、そして演算要素１１１６は、コネクタ／バス１１８９および１１７３を介して行の西側端部の演算要素１１０４に接続され得る。
【０４９２】
他の要素が１つのポイントから別のポイントへのデータの伝送のみに使用されるのに対して、いくつかの演算要素はセンサスベクトルを発生させる。１つの実施形態では、２４個の視差が選択され、これによりサーチウィンドウは２４個のピクセルを含み、各ピクセル当たり２４回の比較を行わなければならない。各比較（すなわち単一の視差）は単一の相関ユニットで行われる。すなわち、各相関ユニットは、特定の視差のために左センサスベクトルと右センサスベクトルとの間の相関演算を行う。２４個の視差すべてに対して相関結果を演算するためには、２４個の相関ユニットが必要である。これを実現するために、８個の演算要素が配備される。従って、各演算要素には３個の相関ユニットが実装される。相関ユニットについては、データフローについての記述に関連してさらに後述する。特に、図５７は各層間ユニットの内部ハードウェア実装を示す。
【０４９３】
図４６を続けて参照すると、水平軸上の演算要素の各対間にメモリ要素が配置される。１つの実施形態では、メモリ要素は１ＭＢ×８ビットのオンチップＳＲＡＭであり、１６個のＳＲＡＭにより１６メガバイトのメモリが提供される。行０では、メモリ要素１１２１はそれぞれコネクタ／バス１１９０および１１９１を介して演算要素１１０１および１１０５の間に接続され、メモリ要素１１２５はそれぞれコネクタ／バス１１９２および１１９３を介して演算要素１１０５および１１０９の間に接続され、メモリ要素１１２９はそれぞれコネクタ／バス１１９４および１１９５を介して演算要素１１０９および１１１３の間に接続され、そしてメモリ要素１１３３はそれぞれコネクタ／バス１１９６および１１７０を介して演算要素１１１３および１１０１の間に接続される。行１では、メモリ要素１１２２はそれぞれコネクタ／バス１１９７および１１９８を介して演算要素１１０２および１１０６の間に接続され、メモリ要素１１２６はそれぞれコネクタ／バス１１９９および１２００を介して演算要素１１０６および１１１０の間に接続され、メモリ要素１１３０はそれぞれコネクタ／バス１２０１および１２０２を介して演算要素１１１０および１１１４の間に接続され、そしてメモリ要素１１３４はそれぞれコネクタ／バス１２０３および１１７１を介して演算要素１１１４および１１０２の間に接続される。行２では、メモリ要素１１２３はそれぞれコネクタ／バス１２０４および１２０５を介して演算要素１１０３および１１０７の間に接続され、メモリ要素１１２７はそれぞれコネクタ／バス１２０６および１２０７を介して演算要素１１０７および１１１１の間に接続され、メモリ要素１１３１はそれぞれコネクタ／バス１２０８および１２０９を介して演算要素１１１１および１１１５の間に接続され、そしてメモリ要素１１３５はそれぞれコネクタ／バス１２１０および１１７２を介して演算要素１１１５および１１０３の間に接続される。行３では、メモリ要素１１２４はそれぞれコネクタ／バス１２１１および１２１２を介して演算要素１１０４および１１０８の間に接続され、メモリ要素１１２８はそれぞれコネクタ／バス１２１３および１２１４を介して演算要素１１０８および１１１２の間に接続され、メモリ要素１１３２はそれぞれコネクタ／バス１２１５および１２１６を介して演算要素１１１２および１１１６の間に接続され、そしてメモリ要素１１３６はそれぞれコネクタ／バス１２１７および１１７３を介して演算要素１１１６および１１０４の間に接続される。
【０４９４】
３２ビットセンサス変換は、１サイクルでピクセルのためのセンサスベクトルを形成するために、９×９センサスウィンドウに対して８個のデータスキャンラインを必要とする。ＦＰＧＡ演算要素は、各サイクルにおいてこれらのスキャンラインのそれぞれから数個のピクセルにアクセスする必要がある。これは、数バイトのメモリ読み出し、および変換ピクセル毎に変換当たり１回の書き込みに翻訳される。８個の６４０ピクセルスキャンラインは１つのＸＣ４０２５ではおさまらないため、各変換演算は２つのＦＰＧＡで行われる。１つの実施形態では、メモリ要素（例えばＳＲＡＭ）は２５ナノ秒（ｎｓ）サイクル時間および３３ＭＨｚのクロック速度を有する。この特定のＳＲＡＭサイクル時間により、イメージ処理システムアレイボードの３３ＭＨｚクロック速度でメモリに読み出しまたは書き込みを行うことができる。しかし、読み出しから書き込みへの動作の変更時には、本発明のこの特定の実施形態ではさらなる遅延が生じ、このため、３３ＭＨｚのクロック速度で読み出しおよび書き込み間をサイクリングすることは可能ではない。ボードの持続読み出しまたは書き込み帯域幅は、毎秒５３３メガバイトである。他の実施形態では、異なるサイクル時間および異なるクロック速度のＳＲＡＭが用いられる。特定のクロック速度およびメモリサイクル時間により、本発明の精神および範囲が制限されるべきではない。
【０４９５】
上述のように、ＦＰＧＡは、各ＦＰＧＡが２つの隣接するＳＲＡＭに接続する配分トーラス形状で接続される。ＳＲＡＭはＦＰＧＡに堅固に接続されるため、すべてのＳＲＡＭは同時にアクセスされ得、メモリ帯域幅およびエンジン規則性を最大限にすることができる。このイメージ処理システムでは、利用するエッジ状態および外来資源の数が最小限ですむ。通常、演算中にエッジ状態が現れると、特別なケースが必要となる。外来資源は、これらの演算資源にとって障害およびボトルネックとなる。イメージ処理システムを通じて資源、例えばＳＲＡＭ資源を均一に配分することによって、汎用演算において全体的なスループットが向上し得る。さらに、翻訳の不変性を得ることができ、これによりあるＦＰＧＡ構成がＦＰＧＡのうちの１つで機能する場合は、これはアレイ内のＦＰＧＡのいずれにおいても機能し得る。メモリ帯域幅を大きくするためには、イメージ処理システムは、各ＦＰＧＡがメモリのそれ自体のメガバイトを局所的に制御し得るように設計および実装される。各メモリは８ビット幅であり、３３ＭＨｚで動作し得、これにより５００ＭＢ／秒を超えるピーク外部メモリ帯域幅が提供される。
【０４９６】
ＰＣＩインタフェースユニット１１３７は、ＰＣＩバスシステム１１３９に接続され、これにより本発明のイメージ処理システムが、ホストプロセッサ、ネットワーク、グラフィックス周辺機器、映像周辺機器、音声周辺機器、大規模記憶装置、ＳＣＳＩユニット、およびフレームグラバを含む多くのＰＣＩ互換システムと接続および通信することが可能となる。いくつかの実施形態では、ＰＣＩインタフェースユニット１１３７は、演算要素に直接接続されない。代わりに、ＰＣＩインタフェースユニット１１３７はデータパスユニット１１３８に接続され、データパスユニット自体が様々な演算要素に接続される。他の実施形態では、図４６に示すように、ＰＣＩインタフェースユニット１１３７はまた、各列（すなわちＡ、Ｂ、ＣおよひＤ）の演算要素にも接続される。ＰＣＩインタフェース１１３７は、コネクタ／バス１２３３を介して列Ａに、コネクタ／バス１２３４を介して列Ｂに、コネクタ／バス１２３５を介して列Ｃに、そしてコネクタ／バス１２３６を介して列Ｄに接続される。これらのコネクタ／バス１２３３、１２３４、１２３５および１２３６はアレイの中央バスの一部である。
【０４９７】
同様に、アレイからホストコンピュータへの主データ接続部を制御して、６４ビットＰＣＩバス延長部を管理するデータパスユニット１１３８は、ＰＣＩバスシステム１１３９に接続される。ＰＣＩインタフェースユニット１１３７とデータバスユニット１１３８とはまた、コネクタ／バス１２３７を介して互いに接続される。いくつかの実施形態では、データパスユニット１１３８は、演算要素の各列（すなわちＡ、Ｂ、ＣおよひＤ）に接続される。読み出し動作では、ＰＣＩバスからのデータは、ＰＣＩインタフェース１１３７を通して入力され、ＰＣＩインタフェースはデータパスユニット１１３８に通じている。データパスユニット１１３８は、データがアレイ内の適切な演算要素に伝送されるように制御する。書き込み動作では、アレイからのデータはデータパスユニット１１３８に入力される。データパスユニットはデータをＰＣＩインタフェースユニット１１３７を介してＰＣＩバスに伝送する。
【０４９８】
アレイ内で起こる様々な並列処理のサイクリングを制御するために、クロックユニット１１２０が配備される。クロックユニット１１２０は複数のクロック出力ａ、ｂ、ｃ、ｄおよびｐを有する。クロックユニット１１２０のポートａから列Ａの演算要素のポート１１５４、１１５５，１１５６および１１５７へのクロック信号は、クロックコネクタ／バス１１５０を介して送られる。クロックユニット１１２０のポートｂから列Ｂの演算要素のポート１１５８、１１５９，１１６０および１１６１へのクロック信号は、クロックコネクタ／バス１１５１を介して送られる。クロックユニット１１２０のポートｃから列Ｃの演算要素のポート１１６２、１１６３，１１６４および１１６５へのクロック信号は、クロックコネクタ／バス１１５２を介して送られる。クロックユニット１１２０のポートｄから列Ｄの演算要素のポート１１６６、１１６７，１１６８および１１６９へのクロック信号は、クロックコネクタ／バス１１５３を介して送られる。これらの異なるクロックラインは、クロック信号のスキューを補償するために配備される。これは通常は高い周波数で生じる。しかし、ほとんどの部分では、クロック信号は実質的に互いに類似している。
【０４９９】
クロックユニット１１２０のポートｐからＰＣＩインタフェースユニット１１３７およびデータパスユニット１１３８へのクロック信号は、コネクタ／バス１２２０を介して送られる。いくつかの実施形態では、ライン１２２０に加えて、クロック制御ユニット１１２０からＰＣＩインタフェースユニット１１３７への直接ラインが配備される。
【０５００】
アレイは垂直および水平コネクタを有する。各列の先端および末端の演算要素はそれぞれ上部および下部にコネクタを有する。列Ａはコネクタ１１４０および１１４４を有し、これらはそれぞれコネクタ／バス１２４０および１２４４を介して演算要素に接続される。列Ｂはコネクタ１１４１および１１４５を有し、これらはそれぞれコネクタ／バス１２４１および１２４５を介して演算要素に接続される。列Ｃはコネクタ１１４２および１１４６を有し、これらはそれぞれコネクタ／バス１２４２および１２４６を介して演算要素に接続される。列Ｄはコネクタ１１４３および１１４７を有し、これらはそれぞれコネクタ／バス１２４３および１２４７を介して演算要素に接続される。これらの垂直コネクタは、これら同士で接続されてトーラスを閉鎖するか、または別のイメージ処理システムボードに接続されて、４×８、４×１２、８×８、またはいかなる数のアレイサイズへもアレイを拡張し得る。これらのコネクタはまた、各列をリング状に作成して、トーラスを形成するか、または列を直列に接続して、南北軸に１６要素よりなるチェーンを形成し得る。多くの他の組み合わせも可能である。
【０５０１】
アレイ自体は、ボードの縁周りを囲む水平接続部を有する。これらのコネクタは垂直コネクタと同様に構成される。これらのコネクタはまた、周辺Ｉ／Ｏのためのドーターカードをサポートする。
【０５０２】
部分トーラス配置により、演算をアレイ内のいかなるサイトにも容易に再配置することができる。これにより、アレイを横断する様々な演算の混合および整合が柔軟に促進される。上述のように、トーラスは一次元に延長して、Ｎ個のボードを用いて４×４Ｎトーラスを形成し得る。アレイの各要素はその４つの隣接要素への幅広い通信チャネルを有する。アレイ内の最右端チップの右エッジは最左端チップの左エッジにトークして、水平方向のトーラスを形成する。アレイ内のすべての通信チャネルは、各要素の４つの最隣接要素間に存在する。通信チャネルは、２６〜３０個のアレイピンおよび８対の「スーパーピン」よりなる。スーパーピンについては後述する。これらの接続部は２５〜５０ＭＨｚで通信が可能であり、これは１６個の演算要素の各隣接対間で約１００〜２００ＭＢ／秒の直接通信速度が得られることを意味する。
【０５０３】
１つの実施形態では、演算要素はフィールドプログラマブルゲートアレイ（ＦＰＧＡ）である。本発明の１つの実施形態で用いられるＦＰＧＡの例としては、Xilinx XC4025がある。XC4000、XC4000A、XC4000D、XC4000H、XC4000E、XC4000EX、XC4000LおよびXC4000XLを含むＦＰＧＡのXilinxXC4000シリーズが用いられ得る。特定のＦＰＧＡとしては、Xilinx XC4005H、XC4025、およびXilinx XC4028EXが含まれる。
【０５０４】
XC4025ＦＰＧＡについて以下に簡単に概要を述べる。各アレイ演算要素は、２４０ピンのXilinxチップと１ＭＢ×８ビットのスタティックＲＡＭ（ＳＲＡＭ）よりなる。XilinxXC4025要素が配備されたアレイボードは約440,000個の構成可能ゲートを含み、映像コンボルーションまたはステレオ視差アルゴリズムなどの演算集中タスクを行い得る。XilinxXC4025ＰＦＧＡは、１０２４個の構成可能ロジックブロック（ＣＬＢ）よりなる。各ＣＬＢは、３２ビットの非同期ＳＲＡＭ、または少数の汎用ブールロジック、および２つのストローブレジスタを実装し得る。チップの周辺には、非ストローブＩ／Ｏレジスタが配備される。XC4025の代わりにXC4005Hを用いてもよい。これは、120,000個の構成可能ゲートを有する比較的低コストのアレイボードである。XC4005Hデバイスは、ハイパワーの２４ｍＡドライブ回路を有するが、標準XC4000シリーズの入出力フリップフロップは配備されていない。チップ間のパイプライン動作のためには、ＦＰＧＡアレイの内部フリップフロップが代わりに用いられる。クロック配分、データ配分、およびＰＣＩバスインタフェースのために、３つの追加のＦＰＧＡ、Xilinx4013ＦＰＧＡが用いられる。ＰＣＩインタフェースユニットは、Xilinx標準から９０度回転される。これらのおよび他のXilinxＦＰＧＡについての詳細は、一般に入手可能なデータシートを通して得ることができる。これらのデータシートは本明細書において参考として援用されている。
【０５０５】
Xilinx XC4000シリーズのＦＰＧＡの機能性は、構成データを内部メモリセルにロードすることによってカスタマイズされ得る。これらのメモリセルに格納された値が、ＦＰＧＡ内でのロジック機能および相互接続を決定する。これらのＦＰＧＡの構成データはオンチップメモリに格納され得、外部メモリからロードされ得る。ＦＰＧＡは外部の直列または並列ＰＲＯＭから構成データを読み出すか、または構成データが外部装置からＦＰＧＡに書き込まれ得る。これらのＦＰＧＡは、特にハードウェアがダイナミックに変更されるとき、またはユーザがハードウェアを異なるアプリケーションに適合させたいとき、無制限の回数で再プログラミングされ得る。
【０５０６】
一般に、XC4000シリーズのＦＰＧＡは１０２４個までのＣＬＢを有する。各ＣＬＢは２レベルのルックアップテーブル、ならびに２つの４入力ルックアップテーブル（または関数発生器ＦおよびＧ）および２つのフリップフロップまたはラッチを有する。４入力ルックアップテーブルは、入力のいくつかを第３の３入力ルックアップテーブル（または関数発生器Ｈ）に供給する。これらのルックアップテーブルの出力は、これらのフリップフロップまたはラッチとは独立して駆動され得る。ＣＬＢは、以下の任意のブール関数の組み合わせを実現し得る。すなわち、（１）４または５個の変数よりなる任意の関数、（２）４個の変数よりなる任意の関数、４個までの非関連変数よりなる任意の第２の関数、および３個までの非関連変数よりなる任意の第３の関数、（３）４個の変数よりなる１つの関数および６個の変数よりなる別の関数、（４）４個の変数よりなる任意の２つの関数、ならびに（５）９個の変数よりなるいくつかの関数である。ＣＬＢ入力を登録するかまたはルックアップテーブル出力を格納するためには、２つのＤタイプフリップフロップまたはラッチが利用され得る。これらのフリップフロップは、ルックアップテーブルとは独立して使用され得る。ＤＩＮが、これらの２つのフリップフロップまたはラッチのうちのいずれか一方への直接入力として使用され得、Ｈ１が他方を、Ｈ関数発生器を介して駆動し得る。
【０５０７】
ＣＬＢの各４入力関数発生器（すなわちＦおよびＧ）は、繰り上げおよび桁下げ信号を迅速に発生させるための専用の演算ロジックを含み、これは繰り入れ(carry-in)および繰り出し(carry-out)を有する２ビット加算器を実現するように構成され得る。これらの関数発生器はまた、読み出し／書き込みランダムアクセスメモリ（ＲＡＭ）として実現され得る。４入力ラインは、ＲＡＭのためのアドレスラインとして使用され得る。
【０５０８】
１つの実施形態では、イメージ処理システムは、ボードを完全に構成するために３レベルのブートストラッププロセスを必要とする。ＰＣＩ−３２チップは、イメージ処理システムをＰＣＩバスに直接接続する。このＰＣＩ−３２チップはデータパスおよびクロック制御チップをプログラムし、これらが次にアレイ全体をプログラムする。ＰＣＩ−３２チップは、ＰＣＩバスにわたって構成ビットを受け取ることができ、これらをデータパスおよびクロック制御チップに伝送する。この多段階プロセスにより、アレイがどのようにプログラムおよびアクセスされるかを決定する際にランタイムに柔軟性が与えられる。ボード上のアレイ全体は単一のＦＰＧＡとして同時にプログラムされ得る。単一のXilinx XC4025ＦＰＧＡは、最高速度でプログラムするのに約５０ミリ秒要する。本発明のアレイ全体はこの速度でプログラムされ得、理論的には構成の上書きが可能である。
【０５０９】
ＰＣＩ−３２チップはイメージ処理システム全体を制御し、イメージ処理システムの５０ピンコネクタに接続されたXilinx Xcheckerケーブルと共に、またはパワーアップ上の直列ＰＲＯＭと共にプログラムされ得る。Xchecker方式では、設計を、ホストパーソナルコンピュータまたはワークステーションから容易に変更、ダウンロード、または試験することができる。ＰＣＩ−３２チップの構成が決定されると、直列ＰＲＯＭは、イメージ処理システムを高信頼性で迅速におよび自動的にプログラムするように構成され得る。
【０５１０】
クロック制御チップおよびデータパスチップが構成されると、クロック制御チップがアレイの残りの部分を構成し得る。クロック制御チップは、構成データを、１６ビットを同時に、１６個のアレイチップ（ＦＰＧＡおよびＳＲＡＭ）のそれぞれに１ビットづつ、直接アレイに送る。アレイが完全にプログラムされると、クロック制御チップはアレイ全体へのクロック配分を管理する。
【０５１１】
アレイボードへのソフトウェア接続は、インタフェースライブラリを介して管理される。このインタフェースにより、プログラムされる予定の各ＦＰＧＡに対してXilinxビットファイルを特定化する手段によってアレイボードの構成が可能となる。ＦＰＧＡが構成されると、ホストプロセッサからアレイボード上の任意の列の中央接続部にデータの読み出しおよび書き込みを行うことが可能となる。この読み出しおよび書き込みは、ＰＣＩバスを横断するマッピングされたメモリにより実現され、ライブラリコールを介して、または直接ポインタ割り付けを介してサポートされる。
【０５１２】
使用される設計ツールは主に、図解捕捉システムであるViewlogicViewdrawおよびXilinx Xact位置およびルートソフトウェアである。
【０５１３】
メモリ帯域幅の別のソースとしては、ＦＰＧＡ内の構成可能ロジックブロック（ＣＬＢ）のオンチップＳＲＡＭがある。このメモリはＦＰＧＡ内のメモリであるため帯域幅を非常に高くすることができ、またアップ外部接続部を用いずに他の構成要素に直接接続し得る。Xilinx XC4025の１つのＣＬＢには３２ビットしか格納することができず、従って、１０２４個のＣＬＢよりなるＦＰＧＡ全体は４０００バイトしか保持することができない。他の演算要素はもっと多くのビットを記憶することができるため、メモリ資源は本発明の様々な実施形態において重要な制限ファクタとはならない。
【０５１４】
対応アルゴリズムは、変換ベクトルがシステムのまわりを搬送され得るように、相当な通信帯域幅を必要とする。1つの実施形態では、相関はハミング距離を利用する。ハミング距離を合計するには相当なメモリ帯域幅が必要である。カメラのピクセルは、便宜的に、約１２．５ＭＨｚで入力されると仮定され得、一方、本発明は３３ＭＨｚでそのバスおよび外部ＳＲＡＭとインタフェースし得る。ピクセルデータのためのストローブを用いるモデルが実現されている。これは、多くて２クロックサイクル毎に１回ハイになり得る。この２段階方式により、ピクセル毎に２回の通信および２回の外部ＳＲＡＭアクセスが可能になる。
【０５１５】
イメージ処理システムは、ＦＰＧＡチップのためのＨＱ２４０フットプリントを用いる。XilinxXC4028EXＦＰＧＡエンジンは、単一のＰＣＩボード上の最大５０万個のゲートに接近する。さらに、ＰＣＩホストは２または３個のこのようなイメージ処理システムを含みことができ、この結果、単一の標準パーソナルコンピュータに百万個以上の構成可能ゲートが可能になる。
【０５１６】
本発明のいくつかの実施形態によるボックスフィルタリング動作のハードウェアの面について以下に述べる。ボックスフィルタリングのハミング距離は、１本の列合計スキャンラインを格納すること、およびピクセルクロック毎に１つの要素の読み出しおよび書き込みを行うことを必要とする。これはまた、ピクセルクロック毎に一度読み出しおよび書き込みが行われる、2 BOX_RADIUS + 1行のハミング距離を必要とする。３２ビットのセンサスを用いると、ハミング距離は３２までの範囲となり得る。しかし、ハミング距離に飽和しきい値を用いることによって、距離は４ビットに制限され得る。ハミング距離を合計するためには、サイクル毎にデータの読み出しおよび書き込みを行う必要がする。しかし、外部ＳＲＡＭの読み出しから書き込みへの切り替えには１クロックサイクルが必要であるため、システムはスキャンラインでのアクティブピクセル中に切り替えを行うゆとりはない。従って、システムは相関のためにＦＰＧＡのうちの８個を用いるが、各ＦＰＧＡは、読み出し用に１つ、書き込み用に１つの合計２つのＳＲＡＭを使用する。2BOX_RADIUS + 1スキャンライン毎にこれらのメモリの役割が反転する。
【０５１７】
Ｂ．アレイ内データフロー
図４７は、イメージ処理システムのアレイ内でのデータフローを示し、図４８、図５２，図５４および図５５は、センサス変換、相関演算、および左右一貫性検査が並列して行われるときの、センサスベクトル発生器および相関ユニットを通るイメージデータおよびセンサスベクトルの高レベルデータフロー図を示す。図４８、図４９，図５０および図５１は、本発明のセンサスベクトル発生器の１つの実施形態を示す。図５７は、相関ユニットのハードウェア実装の１つの実施形態を示す。これらの図は合わせて、本発明のイメージ処理システムのパイプラインおよび並列動作を示す。
【０５１８】
図４７は、図４６に関連して最初に紹介および記載したアレイにおけるデータフローを示す。太い矢印は、アレイ１１００におけるデータのフローを示す。左側センサ／カメラおよび右側センサ／カメラが、フレームグラバ（図４７には示さず）を介してＰＣＩバス１１３９に左右イメージデータ情報を供給する。ＰＣＩインタフェース１１３７が（データパスユニット１１３８を介して）これらの左右イメージデータを列ＡおよびＣの演算要素に供給し、これらの演算要素で、これらのイメージデータの各センサス変換ベクトルが演算および発生され、さらに格納および処理される。１つの実施形態では、ＰＣＩインタフェース１１３７は、イメージデータの一方を、パス１３００および１３０１を介して、センサス変換が適用されるアレイ１１００の列Ａの演算要素１１０１および１１０２に供給する。１つの実施形態では、このイメージデータは、左または右カメラのいずれかからのピクセルに対するものである。ピクセルデータが右カメラからのものであると仮定すると、左カメラからの他方のイメージデータは横向きに、パス１３０２および１３０３を介して列Ｃの演算要素１１１０に、およびパス１３０４を介して演算要素１１０９に送られ、センサス変換が行われる。
【０５１９】
いくつかの実施形態では、ＰＣＩインタフェースユニット１１３７は演算要素に直接接続されない。代わりに、ＰＣＩインタフェースユニット１１３７はデータパスユニット１１３８に接続され、データパスユニット自体が様々な演算要素に接続される。いくつかの実施形態では、データパスユニット１１３８は演算要素の各列（すなわちＡ、Ｂ、ＣおよびＤ）に接続される。読み出し動作では、ＰＣＩバスからのデータはＰＣＩインタフェース１１３７を通って入力され、ＰＣＩインタフェースはデータパスユニット１１３８に通される。データパスユニット１１３８は、データがアレイの適切な演算要素に伝送されるように制御する。書き込み動作では、アレイからのデータはデータパスユニット１１３８に入力される。データパスユニットは、データをＰＣＩインタフェースユニット１１３７を介してＰＣＩバスに伝送する。
【０５２０】
列ＡおよびＣそれぞれのこれらの上部２つの演算要素は、センサスデータを列Ｂの演算要素１１０５に、演算要素１１０５の左右に配置されている１６本のワイヤを通して２倍の速度で出力する。列Ａの演算要素１１０１および１１０２からの右センサスデータは、パス１３０５を介して演算要素１１０５に送られ、列Ｃの演算要素１１０９および１１１０からの左センサスデータは、パス１３０６を介して同じ演算要素１１０５に送られる。
【０５２１】
次に相関演算が行われる。列Ｂの演算要素１１０５は、水平軸に沿って両側に配置されているメモリ要素１１２１および１１２５を用いて、３ステージの相関アルゴリズムを行う。この時点からデータは列Ｂの残りの部分を下向きに流れ、列Ｄの先端にケーブル接続され、列Ｄの末端へと下向きに進み、列Ｃの末端へと横向きに進み、そして列Ｃに沿って上向きに中央バスに通される。中央バスで、得られるデータはＰＣＩインタフェース１１３７およびＰＣＩバス１１３９を介してホストシステムに送られる。このパスの相関部分の演算要素は、列Ｂの演算要素１１０５、１１０６、１１０７および１１０８、ならびに列Ｄの演算要素１１１３、１１１４、１１１５および１１１６を含む。パスのこの相関部分はパス１３０７〜１３１５によって表される。
【０５２２】
このパス１３０７〜１３１５内の各演算要素は、隣接メモリ要素を用いて、３ステージの相関演算を行う。各ステージは、２つのセンサスベクトル間の相関決定である。パス内の８個の演算要素では、２４個のステージが、参照センサスベクトルとその２４個の視差との間の相関を表す。１６個の視差の場合は、各演算要素は、２ステージの相関演算を行うようにプログラムおよび構成される。もしくは、８個の演算要素は、任意の組み合わせの、Ｄ（すなわち視差）個のステージの相関演算を行い得る。演算要素のいくつかが、Ｄ個の視差の組全体に対する相関合計を計算している限り、８個の演算要素すべてを相関演算に使用する必要はない。
【０５２３】
１つの実施形態では、３２ビットセンサスベクトル対にとっては、２つの３２ビットセンサスベクトル間のハミング距離計算の最大数は３２であり、値３２が生じることは恐らくないため、得られるデータは５ビットであり、このため、５ビットで格納され得る値０〜３１で十分であり得る。しかし、いくつかの実施形態では、飽和しきい値を使用することによって、ハミング距離を表すために必要とされるビットまたはワイヤライン数を減らすことができる。従って、７または１５より大きい任意のハミング距離はそれぞれ天井数７または１５によって表され得るため、必要とされるハミング距離は、５ビットではなく、３または４ビットでよい。この結果はパス１３１６〜１３１８を介して中央バスに渡される。このバスに沿った演算要素、すなわち演算要素１１１２および１１１１は送達媒体として働く。
【０５２４】
ＰＣＩインタフェースユニット１１３７はパス１３１９を介して結果を受け取り、これをＰＣＩバス１１３９に供給する。ＰＣＩバス上に供給されると、適切なＰＣＩ媒体、通常はホストプロセッサおよびそのメモリがデータを読み出す。
【０５２５】
ＦＰＧＡを用いることにより、本発明のイメージ処理システムのアーキテクチャは、所望のロジック演算を実現するように設計され得る。適切なプログラミングツールを用いることにより、これらのＦＰＧＡ内のロジックブロック、およびこれらのロジックブロックとＦＰＧＡとの組み合わせは、センサスベクトルを発生させ、本発明の相関演算を行うように構成され得る。
【０５２６】
Ｃ．センサスベクトル発生器
図４８〜図５１は、本発明によるセンサスベクトル発生器の１つの実施形態を示す。図４８は、本発明によるセンサスベクトル発生器のハードウェア実装の１つの実施形態の高レベルブロックブロック図を示す。同図は、単一イメージのためのセンサスベクトル発生器を示す。言うまでもなく、２台のカメラから捕捉される一対のイメージに対して、２台のこのようなセンサスベクトル発生器が配備される。
【０５２７】
このセンサスベクトル発生器は、イメージスキャンライン遅延要素と、センサスウィンドウの実質的に上半分に位置するイメージ要素のための１６ビットのセンサスベクトル発生器と、センサスウィンドウの実質的に下半分に位置するイメージ要素のための１６ビットのセンサスベクトル発生器と、これら２台の１６ビット発生器間の時間差を補償する遅延要素と、２つの個別の１６ビット結果を組み合わせて３２ビットセンサスベクトルを発生させる連結器とを含む。連結器は、単に連なることによって大きなバスを形成する一連のバスであり得る。連結器は特定の装置を必要としない。代わりに、融合して大きなバスラインを形成する数本のバスラインを表し得る。従って、例えば、一対の１６ビット幅バスを互いに隣接させて配置し、大きな３２ビットバスを形成する。
【０５２８】
以下の記述では、センサスベクトル発生器は、センサスウィンドウ内の中央の参照イメージ要素をセンサスウィンドウ内のこれを取り囲む他のイメージ要素と比較することによって、３２ビットセンサスベクトルを発生させ得る。比較のために選択される特定のイメージ要素は図７に示すものである。図７では、最初の３２ビットセンサスベクトルの発生における（ｘ，ｙ）は（５，５）である。しかし、以下の教示を考慮すれば、当業者であれば、センサスウィンドウ内の他のイメージ要素を比較のために選択するように、後述する回路を操作し得る。すなわち、センサスウィンドウ内の異なるポイント組を用いて３２ビットセンサスベクトルを発生させることができる。
【０５２９】
センサスベクトル発生器は、イメージデータをライン１６００を介して直列に受け取り、３２ビットセンサスベクトルをライン１６３７に出力する。イメージデータは直列に入力されるが、センサスウィンドウの異なるライン上のこれらのイメージデータは並列に処理される。９×９のセンサスウィンドウでは、９本のライン上の選択イメージ要素は、センサスウィンドウがイメージを通って移動するとき、各中央イメージ要素に対する３２ビットセンサスベクトルを発生させるように処理されなければならない。９本のラインすべてのイメージデータが１６ビットセンサスベクトル発生器１６１１および１６１２で実質的に同時に処理されるのを確実にするために、適切な遅延要素１６０１〜１６０８が配備される。すなわち、各ライン（Ｌ１〜Ｌ９）のためのイメージデータが、これらの１６ビットセンサスベクトル発生器１６１１および１６１２に実質的に並列に入力される。これらの９本のライン（Ｌ１〜Ｌ９）のためのイメージデータは並列に入力されるため、３２ビットセンサスベクトルは、実質的に新しいピクセルのイメージデータがこの３２ビットセンサスベクトル発生器に入る毎に発生され得る。そのイメージの特定のラインに対して最後のセンサスベクトルが発生された後は、IMAGE DATA INライン１６００に沿って次のピクセルのイメージデータを受け取ることにより、ラインＬ１〜Ｌ９はライン２〜１０の先頭からの最初のピクセルのイメージデータを含む結果となる。従って、これは、センサスウィンドウが次のラインの先頭にシフトしこれにより中央参照イメージ要素が変更することに対応する。
【０５３０】
このセンサスベクトルジェネレータは、８つの遅延要素１６０１〜１６０８を有する。各遅延要素は、入力データを、１本の走査線の長さ分である３２０時間単位だけ遅延させる。各遅延要素１６０１〜１６０８へのそれぞれの入力１６１４〜１６２１は、その前の遅延要素の出力からくる。従って、ライン１６００からのイメージデータは、ライン１６１４を介して遅延要素１６０１に入る。遅延要素１６０１は、遅延されたイメージデータをライン１６１５上に出力して、遅延要素１６０２に送る。遅延要素１６０２は、遅延されたイメージデータをライン１６１６上に出力して、遅延要素１６０３に送る。遅延要素１６０３は、遅延されたイメージデータをライン１６１７上に出力して、遅延要素１６０４に送る。遅延要素１６０４は、遅延されたイメージデータを、ノード１６３４へのライン１６２７、ライン１６１８、およびライン１６２９上に出力する。以下、ノード１６３４について説明する。ライン１６２８および１６１８上のイメージデータは、遅延要素１６０５に入力される。遅延要素１６０５は、遅延されたイメージデータをライン１６１９上に出力して、遅延要素１６０６に送る。遅延要素１６０６は、遅延されたイメージデータを、ライン１６２０上に出力して、遅延要素１６０７に送る。遅延要素１６０７は、遅延されたイメージデータをライン１６２１上に出力して、遅延要素１６０８に送る。遅延要素１６０８は、イメージデータを、ライン１６３３上に出力して、１６ビットセンサスベクトルジェネレータ１６１１に送る。
【０５３１】
入力されるイメージデータはまた、介在する遅延要素のないライン１６００および１６２２を介して低部１６ビットセンサスベクトルジェネレータ１６１２に入力される。１６ビットセンサスベクトルジェネレータ１６１２へのこの入力は、センサスウィンドウのライン９上のイメージデータを表す。遅延要素１６０１〜１６０８の各々はまた、イメージデータを、それぞれの１６ビットセンサスベクトルジェネレータ１６１１または１６１２に直接出力する。このように、遅延要素１６０１は、遅延されたイメージデータをライン１６２３上に出力して、１６ビット低部センサスベクトルジェネレータ１６１２に送る。１６ビットセンサスベクトルジェネレータ１６１２へのこの入力は、センサスウィンドウのライン８上のイメージデータを表す。遅延要素１６０２は、遅延されたイメージデータをライン１６２４上に出力して、１６ビット低部センサスベクトルジェネレータ１６１２に送る。１６ビットセンサスベクトルジェネレータ１６１２へのこの入力は、センサスウィンドウのライン７上のイメージデータを表す。遅延要素１６０３は、遅延されたイメージデータをライン１６２５上に出力して、１６ビット低部センサスベクトルジェネレータ１６１２に出力する。１６ビットセンサスベクトルジェネレータ１６１２へのこの入力は、センサスウィンドウのライン６上のイメージデータを表す。
【０５３２】
ライン５（Ｌ５）は、センサスウィンドウのラインであって、中心参照イメージ要素がこの９×９のセンサスウィンドウに配置されるラインを表す。尚、１６ビットセンサスベクトルジェネレータ１６１１および１６１２はともに、センサスウィンドウのライン５上のイメージデータを処理する。１６ビットセンサスベクトルジェネレータの各々は、中心参照イメージ要素の左側または右側のいずれかのイメージデータを扱う。センサスウィンドウの下半分については、遅延要素１６０４が、遅延されたデータをライン１６２６上に出力して、１６ビット低部センサスベクトルジェネレータ１６１２に送る。センサスウィンドウの上半分については、遅延要素１６０４が、遅延されたデータをライン１６２７、１６２８および１６２９上に出力して、１６ビット低部センサスベクトルジェネレータ１６１１に送る。１６ビットセンサスベクトルジェネレータ１６１１へのこの入力は、センサスウィンドウのライン５上のイメージデータを表す。
【０５３３】
続けて上部１６ビットセンサスベクトルジェネレータ１６１１への入力について、遅延要素１６０５は、遅延されたイメージデータをライン１６３０上に出力して、１６ビット低部センサスベクトルジェネレータ１６１１に送る。１６ビットセンサスベクトルジェネレータ１６１１へのこの入力は、センサスウィンドウのライン４上のイメージデータを表す。遅延要素１６０６は、遅延されたイメージデータをライン１６３１上に出力して、１６ビット低部センサスベクトルジェネレータ１６１１に送る。１６ビットセンサスベクトルジェネレータ１６１１へのこの入力は、センサスウィンドウのライン３上のイメージデータを表す。遅延要素１６０７は、遅延されたイメージデータをライン１６３２上に出力して、１６ビット低部センサスベクトルジェネレータ１６１１に送る。１６ビットセンサスベクトルジェネレータ１６１１へのこの入力は、センサスウィンドウのライン２上のイメージデータを表す。遅延要素１６０８は、遅延されたイメージデータをライン１６３３上に出力し、１６ビット低部センサスベクトルジェネレータ１６１１に送る。１６ビットセンサスベクトルジェネレータ１６１１へのこの入力は、センサスウィンドウのライン１上のイメージデータを表す。
【０５３４】
９番目のラインからのイメージデータのストリームがライン１６００上に入るときに、１６ビットセンサスベクトルジェネレータ１６１１への入力Ｌ１〜Ｌ５はそれぞれ、センサスウィンドウのライン１〜５からのイメージデータを表し、１６ビットセンサスベクトルジェネレータ１６１２への入力Ｌ５〜Ｌ９はそれぞれ、センサスウィンドウのライン５〜９からのイメージデータを表す。１６ビットセンサスベクトルジェネレータ１６１１は、中心参照イメージ要素と、センサスウィンドウの上半分（ライン１〜５）にある他の１６個のイメージ要素との比較により、ライン１６３５上の出力で、１６ビットのベクトルを発生する。同様に、１６ビットセンサスベクトルジェネレータ１６１２は、中心参照イメージ要素と、センサスウィンドウの下半分（ライン５〜９）にある他の１６個のイメージ要素との比較により、ライン１６３６上の出力で、１６ビットのベクトルを発生する。ほとんどの実施形態では、ジェネレータ１６１１からの上位１６ビットは、ジェネレータ１６１２からの下位１６ビットと実質的に同時に発生される。
【０５３５】
他の実施形態では、ジェネレータ１６１１からの上位１６ビットは、ジェネレータ１６１２からの下位１６ビットの１時間単位前に発生される。このタイミング差を補償するために、ライン１６３５上にレジスタまたは遅延要素が設けられ得る。ライン１６３５上の上位１６ビットおよびライン１６３６上の下位１６ビットは、連結器１６１３で連結され、ライン１６３７上に３２ビットセンサスベクトルが発生される。
【０５３６】
センサスウィンドウがラインの終わりに達し、移動しているセンサスウィンドウの各中央イメージ要素について３２ビットセンサスベクトルが発生されるまで、ライン１６００で入力されるイメージデータの次の組は、ライン１０の初めからのイメージデータを表す。従って、この時点で、ラインＬ９はライン１０のイメージデータを含み、ラインＬ８はライン９のイメージデータを有し、ラインＬ７はライン８のイメージデータを有し、ラインＬ６はライン７のイメージデータを有し、ラインＬ５はライン６のイメージデータを有し、ラインＬ４はライン５のイメージデータを有し、ラインＬ３はライン４のイメージデータを有し、ラインＬ２はライン３のイメージデータを有し、ラインＬ１はライン２のイメージデータを有する。従って、センサスウィンドウは、今、次のラインの行の初めに移動している。より多くのイメージデータが入力されると、センサスウィンドウはラインを下方に移動し、より多くのセンサスベクトルが発生される。このサイクルは、ユーザにより停止されるまで、または、それ以上のイメージデータがセンサスベクトルジェネレータに入らなくなるまで、繰り返される。
【０５３７】
１つの実施形態では、図４８に示されるセンサスベクトルジェネレータは、２つのＦＰＧＡユニットにおいて実現される。一方のＦＰＧＡユニットは、ノード１６３４よりも上のイメージデータを処理するコンポーネントおよびラインにおいて上位１６ビット（ライン１〜５）を発生する。他方のＦＰＧＡユニットは、ノード１６３４よりも下のイメージデータを処理するコンポーネントおよびラインにおいて下位１６ビット（ライン５〜９）を発生する。実際には、ノード１６３４は、２つのＦＰＧＡユニット間の境界を表す。他の実施形態では、図４８に示される３２ビットセンサスベクトルジェネレータ全体は、１つのＦＰＧＡユニットにおいて実現される。言うまでもなく、ＡＳＩＣおよびカスタム集積回路の実現では、ＦＰＧＡは使用されず、従って、ノード１６３４は、伝送ラインと単に一体であってもよい。
【０５３８】
通信パスにおける様々な遅延の結果として起こるタイミング差を補償するために、適切な遅延要素またはシフトレジスタが設けられ得る。これらのシフトレジスタの例示的な場所としては、ライン１６３５、１６３６および／または１６２７などがある。
【０５３９】
図４９は、中心参照イメージ要素と、センサスウィンドウの実質的に上半分（ライン１〜５）にあるイメージ要素との比較結果を表す最下位１６ビットについてのセンサスベクトルジェネレータ１６１１（図４８参照）を示す。センサスベクトルジェネレータ１６１１（図４８参照）は５つの入力（Ｌ１、Ｌ２、Ｌ３、Ｌ４およびＬ５）を有し、出力ライン１６５５で、３２ビットセンサスベクトルの最下位１６ビットを発生する。これらの１６ビットは、中心参照イメージ要素と、センサスウィンドウの上半分にある他のイメージ要素との比較から得られる。特に、ライン１〜４のイメージ要素と、ライン５の、中心参照イメージ要素の右側の２つのイメージ要素とが比較のために使用される。
【０５４０】
１６ビットセンサスベクトルジェネレータは、幾つかの遅延要素１６５７〜１６６１、比較器１６６２〜１６６６、および連結器１６６７を含む。遅延要素１６５７〜１６６１は、ライン１〜５のイメージ要素の所望の組み合わせが、センサス比較のために確実に選択されるようにする。比較器１６６２〜１６６６は、比較演算を行って、センサスベクトルについてのビットを発生する。これらの比較器はまた、比較的変動する数の遅延要素を組み込んで、ライン１〜５の特定の所望のイメージ要素がセンサス比較のために確実に選択されるようにする。連結器は、各ラインからの様々な出力センサスビットを組み合わせ、これらのビットを整理して、このセンサスウィンドウのライン１〜５について１６ビットセンサスベクトルを発生する。
【０５４１】
各ラインからのイメージデータは、ライン１６４０〜１６４４を介してこの１６ビットセンサスベクトルジェネレータに入る。従って、ライン１からのイメージデータは、ライン１６４０を介して遅延要素１６５７に入り、ライン２からのイメージデータは、ライン１６４１を介して遅延要素１６５８に入り、ライン３からのイメージデータは、ライン１６４２を介して遅延要素１６５９に入り、ライン４からのイメージデータは、ライン１６４３を介して遅延要素１６６０に入り、ライン５からのイメージデータは、ライン１６４４を介して遅延要素１６６１に入る。
【０５４２】
遅延要素１６６２〜１６６６は、比較器１６６２〜１６６６へのイメージデータ入力のタイミングを制御する。従って、遅延要素１６５７は、イメージデータをライン１６４５を介して比較器１６６２に出力し、遅延要素１６５８は、イメージデータをライン１６４６を介して比較器１６６３に出力し、遅延要素１６５９は、イメージデータをライン１６４７を介して比較器１６６４に出力し、遅延要素１６６０は、イメージデータをライン１６４８を介して比較器１６６５に出力し、遅延要素１６６１は、イメージデータをライン１６４９を介して比較器１６６６に出力する。比較器自体は、これらの比較器に既に入力されたイメージデータのうちの特定のイメージデータが、センサス比較のために選択され得るように、独自の遅延要素の組を組み込む。１つの実施形態では、遅延要素は、選択されたクロックエッジで入力データを出力するレジスタまたはＤフリップフロップである。
【０５４３】
遅延要素１６５７〜１６６１の各々における遅延量は、他のラインの他のイメージ要素に関する、比較器１６６２〜１６６６へのイメージデータ入力が制御されるように、慎重に選択される。この特定の実施形態では、センサス比較のために選択された特定のイメージデータが、最終的に図７のイメージデータと一致するように、図４９に示される遅延が選択されている。この特定の１６ビットセンサスベクトルジェネレータは、図７のポイント１〜１４、１７および１８を選択する。従って、遅延要素１６５７は２時間単位の遅延を与え、遅延要素１６５８は３時間単位の遅延を与え、遅延要素１６５９は２時間単位の遅延を与え、遅延要素１６６０は３時間単位の遅延を与え、遅延要素１６６１は１時間単位の遅延を与える。１つの実施形態では、１時間単位は１クロックサイクルであり、遅延要素は、クロックの立ち上がりエッジごとに変わる。他の実施形態では、遅延要素は、クロックの立ち下がりエッジごとにトリガされる。
【０５４４】
比較器１６６２〜１６６６は、センサスウィンドウのライン１〜５の選択されたイメージ要素を、センサスウィンドウの中心参照イメージ要素と比較する。センサスウィンドウの各ラインについて選択されるイメージ要素数に依存して、各比較器１６６２〜１６６６において、異なる数の個々の比較器ユニットが実現される。従って、センサスウィンドウのライン１で２つのイメージ要素が選択されるため、比較器１６６２は２つの比較器ユニットを含み、センサスウィンドウのライン２で４つのイメージ要素が選択されるため、比較器１６６３は４つの比較器ユニットを含み、センサスウィンドウのライン３で４つのイメージ要素が選択されるため、比較器１６６４は４つの比較器ユニットを含み、センサスウィンドウのライン４で４つのイメージ要素が選択されるため、比較器１６６５は４つの比較器ユニットを含み、センサスウィンドウのライン５で２つのイメージ要素が選択されるため、比較器１６６６は２つの比較器ユニットを含む。
【０５４５】
中心参照イメージ要素との比較は、センサスウィンドウの選択されたイメージ要素の各々について行われる。各センサスウィンドウの中心参照イメージ要素は、比較器１６６６の出力１６５０に与えられ、比較器１６６６はまた、センサスウィンドウの、中心参照イメージ要素が配置されるライン５を処理する。この出力は、必要な比較が行われ得るように、比較器１６６２〜１６６６の各々への入力の別の組にフィードバックされる。イメージデータの新しい組が比較器１６６２〜１６６５に入ると、センサスウィンドウは、新しい場所にシフトし、従って、新しい中心参照イメージ要素が、比較のために使用される。
【０５４６】
比較結果は、ライン１６５１〜１６５５上に出力される。連結器１６６７は、ライン１６５６での出力がＬＳＢ１６ビットセンサスベクトルを含むように、これらのビットを配列する。従って、完全な３２ビットセンサスベクトルの半分が発生されている。
【０５４７】
図５０は、中心参照イメージ要素と、センサスウィンドウの実質的に下半分（ライン５〜９）にあるイメージ要素との比較結果を表す最上位１６ビットについてのセンサスベクトルジェネレータ１６１２（図４８参照）を示す。センサスベクトルジェネレータ１６１２（図４８参照）は５つの入力（Ｌ５、Ｌ６、Ｌ７、Ｌ８およびＬ９）を有し、出力ライン１６９８で、３２ビットセンサスベクトルの最上位１６ビットを発生する。これらの１６ビットは、中心参照イメージ要素と、センサスウィンドウの下半分にある他のイメージ要素との比較から得られる。特に、ライン６〜９のイメージ要素と、ライン５の、中心参照イメージ要素の左側の２つのイメージ要素とが比較のために使用される。
【０５４８】
１６ビットセンサスベクトルジェネレータは、幾つかの遅延要素１６７０〜１６７５、比較器１６７６〜１６８０、および連結器１６８１を含む。遅延要素１６７０〜１６７５は、ライン５〜９のイメージ要素の所望の組み合わせが、センサス比較のために確実に選択されるようにする。比較器１６７６〜１６８０は、比較演算を行って、センサスベクトルについてのＭＳＢビットを発生する。これらの比較器はまた、比較的変動する数の遅延要素を組み込んで、ライン５〜９の特定の所望のイメージ要素がセンサス比較のために確実に選択されるようにする。連結器１６８１は、各ラインからの様々な出力センサスビットを組み合わせ、これらのビットを整理して、このセンサスウィンドウのライン５〜９について１６ビットセンサスベクトルを発生する。
【０５４９】
各ラインからのイメージデータは、ライン１６８２〜１６８６を介してこの１６ビットセンサスベクトルジェネレータに入る。従って、ライン５からのイメージデータは、ライン１６８２を介して遅延要素１６７０に入り、ライン６からのイメージデータは、ライン１６８３を介して遅延要素１６７２に入り、ライン７からのイメージデータは、ライン１６８４を介して遅延要素１６７３に入り、ライン８からのイメージデータは、ライン１６８５を介して遅延要素１６７４に入り、ライン９からのイメージデータは、ライン１６８６を介して遅延要素１６７５に入る。
【０５５０】
遅延要素１６７０の出力には、別の遅延要素１６７１が設けられる。このライン５には６つの遅延要素が必要とされるが、遅延要素１９７０の出力のイメージデータは、比較において中心参照イメージ要素として使用するために、ライン１６９２を介して抽出されなければならない。
【０５５１】
遅延要素１６７０〜１６７５は、比較器１６７６〜１６８０へのイメージデータ入力のタイミングを制御する。従って、遅延要素１６７０および１６７１は、イメージデータをライン１６８７を介して比較器１６７６に出力し、遅延要素１６７２は、イメージデータをライン１６８８を介して比較器１６７７に出力し、遅延要素１６７３は、イメージデータをライン１６８９を介して比較器１６７８に出力し、遅延要素１６７４は、イメージデータをライン１６９０を介して比較器１６７９に出力し、遅延要素１６７５は、イメージデータをライン１６９１を介して比較器１６８０に出力する。比較器自体は、これらの比較器に既に入力されたイメージデータのうちの特定のイメージデータが、センサス比較のために選択され得るように、独自の遅延要素の組を組み込む。１つの実施形態では、遅延要素は、選択されたクロックエッジで入力データを出力するレジスタまたはＤフリップフロップである。
【０５５２】
遅延要素１６７０〜１６７５の各々における遅延量は、他のラインの他のイメージ要素に関する、比較器１６７６〜１６８０へのイメージデータ入力が制御されるように、慎重に選択される。この特定の実施形態では、センサス比較のために選択された特定のイメージデータが、最終的に図７のイメージデータと一致するように、図５０に示される遅延が選択されている。この特定の１６ビットセンサスベクトルジェネレータは、図７のポイント１５、１６および１９〜３２を選択する。従って、遅延要素１６７０は５時間単位の遅延を与え、遅延要素１６７１は１時間単位の遅延を与え、遅延要素１６７２は２時間単位の遅延を与え、遅延要素１６７３は、１時間単位の遅延を与え、遅延要素１６７４は、２時間単位の遅延を与え、遅延要素１６７５は、５時間単位の遅延を与える。
【０５５３】
比較器１６７６〜１６８０は、センサスウィンドウのライン５〜９の選択されたイメージ要素を、センサスウィンドウの中心参照イメージ要素と比較する。センサスウィンドウの各ラインについて選択されるイメージ要素数に依存して、各比較器１６７６〜１６８０において、異なる数の個々の比較器ユニットが実現される。従って、センサスウィンドウのライン５で２つのイメージ要素が選択されるため、比較器１６７６は２つの比較器ユニットを含み、センサスウィンドウのライン６で４つのイメージ要素が選択されるため、比較器１６７７は４つの比較器ユニットを含み、センサスウィンドウのライン７で４つのイメージ要素が選択されるため、比較器１６７８は４つの比較器ユニットを含み、センサスウィンドウのライン８で４つのイメージ要素が選択されるため、比較器１６７９は４つの比較器ユニットを含み、センサスウィンドウのライン９で２つのイメージ要素が選択されるため、比較器１６８０は２つの比較器ユニットを含む。
【０５５４】
中心参照イメージ要素との比較は、センサスウィンドウの選択されたイメージ要素の各々について行われる。各センサスウィンドウの中心参照イメージ要素は、センサスウィンドウのライン５上の遅延要素１９７０の出力１６９２に与えられる。この出力は、必要な比較が行われ得るように、比較器１６７６〜１６８０の各々への入力の別の組に与えられる。イメージデータの新しい組が比較器１６８２〜１６８６に入ると、センサスウィンドウは、新しい場所にシフトし、従って、新しい中心参照イメージ要素が、比較のために使用される。
【０５５５】
比較結果は、ライン１６９３〜１６９７上に出力される。連結器１６８１は、ライン１６９８での出力がＭＳＢ１６ビットセンサスベクトルを含むように、これらのビットを配列する。従って、完全な３２ビットセンサスベクトルの半分が発生されている。
【０５５６】
図５１は、センサスウィンドウの各ラインについて３２ビットベクトルを計算するために用いられる比較器１６６２〜１６６６（図４９参照）および１６７６〜１６８０（図５０参照）のより詳細な図を示す。イメージデータはライン１７２０で入力され、ライン１７３０〜１７３３で入力される中心参照イメージ要素との比較が行われ、センサス比較結果は、各比較器ユニット１７００〜１７０２の出力でライン１７４０〜１７４３に与えられる。未処理のイメージデータもまた、比較器ユニットを介して出力１７２６に送られる。
【０５５７】
各比較器は、比較器ユニット１、比較器ユニット２および比較器ユニットＮのための多数の比較器ユニット１７００、１７０１および１７０２をそれぞれ含む。ここで、Ｎは、比較のために使用されるライン中のイメージ要素数である。従って、ライン１〜９では、センサス比較のためにイメージ要素は２つしか選択されないため、Ｎ＝２であり、２つの比較器ユニット１７００および１７０１だけが設けられる。ライン３では、センサス比較のために４つのイメージ要素が選択されるため、Ｎ＝４であり、４つの比較器ユニットだけが設けられる。
【０５５８】
各ラインの特定の所望のイメージ要素が、各センサスウィンドウについてのセンサス比較のために選択されることを確実にするために、遅延要素１７１０および１７１１が設けられる。これらの遅延要素は、レジスタまたはＤフリップフロップであり得る。１つの実施形態では、各遅延ユニットにおける遅延量は、１時間単位である。他の実施形態では、比較のために望ましい特定のイメージデータに依存して、他の時間単位の遅延を組み込んでもよい。この実施形態では、比較ユニット１７００〜１７０２のそれぞれの間に遅延要素が設けられる。他の実施形態では、幾つかの比較ユニット１７００〜１７０２の間には幾つかの遅延要素が存在しなくてもよい。これらの遅延要素および比較ユニットは、ライン１７２１〜１７２５を介して互いに結合される。
【０５５９】
図４９のライン５の比較器１６６６について、図５１の比較器回路図では、正し中心参照イメージ要素が、比較器１６６２〜１６６６の各々の入力にフィードバックされるように、出力１７２６に別の遅延要素が設けられている。
【０５６０】
図５１のこの比較器回路の動作を説明するために、９×９のセンサスウィンドウであり、第１の３２ビットセンサスベクトルが今発生されていると仮定する。中心参照点は（５，５）の位置にある。即ち、中心点は、列５、行／ライン５に位置する。イメージ要素５に関連するイメージデータは、比較器ユニット１７００〜１７０２の各々へのライン１７３０〜１７３３に与えられる。従って、ライン２では、イメージ要素７に関連するイメージデータは、比較器ユニット１７００への入力１７２０に与えられ、イメージ要素５に関連するイメージデータは、比較器ユニット１７０１への入力１７２２に与えられ、イメージ要素３に関連するイメージデータは、その次の比較器ユニット（図示せず）への入力に与えられ、最後に、イメージ要素１に関連するイメージデータが、比較器ユニット１７０２への入力１７２５に与えられる。中心参照イメージデータが、入力イメージデータ未満である場合、比較結果ライン１７４０〜１７４３に論理「１」が出力される。そうでなければ、これらの比較結果ラインに論理「０」が与えられる。これらの比較結果データは、連結され、３２ビットセンサスベクトルが発生される。
【０５６１】
Ｄ．相関合計ジェネレータ
図５２および図５４に示されるように、本発明の１つの実施形態は、完全にパイプライン式で、パラレルで、シストリックな態様で実現され得る。図５２に示される特定の実施形態は、標準の形態をとる。図５２は、相関計算の２４ステージを示す。視差が２４個であるため、この実施形態では２４のステージが設けられる。しかし、他の実施形態では、ステージの数は、視差の数と一致していなくてもよい。
【０５６２】
図４６および図４７の計算要素、特に、列ＢおよびＤの計算要素が、これらの２４のステージにおいて計算を行う。典型的には、列ＢおよびＤの８つの計算要素の各々は、これらのステージのうちの３つのステージでの計算を行う。本発明のこの実施形態は、センサス変換ユニット、相関ユニットおよび遅延要素を用いて、各ピクセルのサーチウィンドウ内の一方のイメージの各ピクセルのセンサスベクトルを、他方のイメージの各ピクセルのセンサスベクトルと比較する。即ち、一方のイメージのピクセルについてのサーチウィンドウは、許容可能な視差の各々についての他方のイメージのシフトされたピクセルを含む。２４個の視差の場合、サーチウィンドウ内の一方のイメージのピクセルと、他方のイメージのピクセルとの間の最も遠いピクセル変位は、２３のピクセル変位である。最終的には、この実施形態は、比較から得られた最も小さい合計ハミング距離決定値を表すｍｉｎスコアと、この最も小さい合計ハミング距離決定値に関連する視差の値を表すｍｉｎ指標とを出力する。
【０５６３】
左側のカメラからのイメージデータを、基準とする。左右のカメラからのピクセルがイメージ処理システムに入ると、このシステムは、データを２つの並列なセンサス変換ユニット１４００および１４０１に与える。センサス変換ユニット１４００は、左側のピクセルについてのセンサスベクトルを発生し、センサス変換ユニット１４０１は、右側のピクセルについてのセンサスベクトルを発生する。実際に、センサス変換ユニット１４００および１４０１は、左右のイメージの対応する場所の、ピクセルデータの各対についてのセンサスベクトルストリームを発生する。第１のステージで、センサスベクトルは、左側のピクセルについてはライン１４１０および１４２０を介して、右側のピクセルについてはライン１４１１および１４２１を介して、相関ユニット１４４０に送られる。相関ユニット１４４０は、これらの２つのセンサスベクトルの視差０の相関を表すこれらの２つのベクトル間のハミング距離を計算する。相関ユニット１４４０はまた、ハミング距離を発生して、これをライン１４３０に出力し、最小の合計ハミング距離についての視差の数をライン１４３１に出力し、この時点までに行われたすべての比較についてのそれぞれの関連する視差の数を出力する。この時点まで、ｍｉｎスコアは、視差が０の２つのベクトルのハミング距離である。左側のピクセルについての同じセンサス変換ベクトルは、パイプを下方に移動して他の相関ユニットに達すると、そのサーチウィンドウの、この左側のピクセルのＤの視差を表す他のすべてのセンサスベクトルと比較される。１つの実施形態では、２４個の視差が使用されるため、右側のイメージの各ピクセルについて比較が２４回行われなければならない。他の実施形態では、１６個の視差が使用される。しかし、視差の数はどんな数であってもよく、ユーザにより選択可能である。
【０５６４】
この実施形態では、各相関ユニットはまた、最小の合計ハミング距離（ＭＩＮ ＳＣＯＲＥ）を運ぶデータパスに１遅延要素（ｚ−１）を含み、それに関連する視差の数（ＭＩＮＩＮＤＥＸ）を運ぶデータパスに別の遅延要素（ｚ−１）を含む。別の実施形態では、遅延要素（ｚ−１）は、相関ユニットの外部にあり、ＭＩＮＳＣＯＲＥのデータパスおよびＭＩＮ ＩＮＤＥＸのデータパスの相関ユニットの間に配置される。従って、２クロックサイクルごとに、左側の同じピクセル（そのセンサスベクトルを介する）が、右側の異なるピクセル（そのセンサスベクトルを介する）と比較され、最小の合計ハミング距離が更新され、最小の合計ハミング距離に関連する視差の数も更新される。これらの動作は、左右のセンサスベクトルのストリームが相関ユニットおよび遅延要素に供給されると、パイプライン式に行われる。左右のセンサスベクトルの１つまたは２つの遅延はそれぞれ、各ピクセルのそれぞれのサーチウィンドウでそのような比較が行われることを可能にする。最後の相関ユニット１４４３の終わりでは、左側のピクセルのサーチウィンドウの様々な右側のピクセルに必要とされるすべての比較が行われており、ＭＩＮＳＣＯＲＥおよびＭＩＮ ＩＮＤＥＸが出力される。
【０５６５】
１つの実施形態では、出力は、すべての関連する右−左の比較についてのすべての最適な視差を追跡する極値インデックスアレイに格納される。この極値インデックスアレイは、後に、左−右の一貫性検査、モードフィルタリング、および様々なアプリケーションのための視差イメージの発生のために使用され得る。
【０５６６】
別の実施形態では、右−左および左−右の比較は、図５２に示されるものと同じデータパスを使用してパラレルに同時に行われ、最後の相関ユニット１４４３の出力は、左右のピクセルの各々について選択された最適な視差をキューイングバッファに格納するため、一貫性検査は、データが処理されて、パラレルパイプライン式データパスを通過するときに、リアルタイムで行われ得る。これについては、以下に図５３、図５４、図５５および図５７を参照して説明する。この実施形態では、すべての左−右の一貫性検査結果のそのように格納は必要でない。但し、何らかのアプリケーションまたは何らかの履歴記録が望まれるため、結果が、別のプロセッサに送られている場合は除く。
【０５６７】
１つの実施形態では、Xilinx ＦＰＧＡの構成論理ブロックなどの論理ブロックが、論理機能を実現する。当業者に知られているように、これらの論理ブロックおよび論理機能は、別の方法でも表され得る。より低いレベルでは、遅延要素は、データのビットごとに、レジスタまたはＤフリップフロップによって表され得る。１つのクロッキング信号が使用される場合、２で割る適切な除算回路が、１時間単位の遅延要素（即ち、視差がシフトされたピクセルについてのセンサスベクトルによって使用されるパスに沿った遅延要素）へのクロック入力で実現され得、そのような除算回路は、２時間単位の遅延要素へのクロック入力では使用されず、そのため、適切なシフトが起こり得、各ステージで正しいデータ対が比較される。あるいは、適切な乗算回路が、２時間単位の遅延要素へのクロック入力で使用され得るが、そのような乗算回路は、１時間単位の遅延要素へのクロック入力には使用されない。これらのクロック信号変更回路は、Ｄフリップフロップへの入力でのデータが、比較演算のための適切な時間に、出力にシフトされることを確実にする。
【０５６８】
相関要素は、異なるビット位置を決定するための排他的ＯＲ論理演算、異なるビットを加えて、ハミング距離ビットを計算し、これをｎビット（例えば、ｎ＝５）の数で表すためのビットカウンタ、ボックスフィルタリング動作のための幾つかの加算器、ならびに、現在のｍｉｎスコアの値を新しく発生されたハミング距離と比較して、２つの値のうちの小さい方を決定するための幾つかの比較器およびマルチプレクサによって表され得る。あるいは、ビット数をｎ＝５からｎ＝３またはｎ＝４に減らしてハミング距離を表すために、飽和閾値デバイスが用いられ得る。入力データについて相関演算が２時間単位ごとに行われることを確実にして、適切なピクセルのセンサスベクトルが比較のためにシフトされるようにするために、適切なクロッキング回路が用いられ得る。別の実施形態では、左イメージセンサスベクトルと右イメージセンサスベクトルとの間の適切な相対遅延を確実にするためにそのようなクロッキング回路は必要でなく、その代わりに、右イメージデータパスに遅延要素を２つ使用し、各相関ユニット（視差０のユニットを表す第１の相関ユニット１４４０を除く）への入力での左イメージデータパスに遅延要素を１つだけ使用する。
【０５６９】
図５３（Ａ）および図５３（Ｂ）は、２つのカメラの左右のイメージについての左右のセンサスベクトルを示す。これらの２つのカメラは、互いに間隔があけられているが、同じ光景を見て捕捉している。これらの図は、本発明の１つの実施形態のパラレルパイプライン式データフローを説明するために使用される。図５３（Ａ）は、左側のセンサスベクトルを示す。各ベクトルは、数字で表される。教授の目的のために、走査線には、１５個の左側のセンサスベクトル１〜１５しか与えていない。同様に、図５３（Ｂ）は、右側のセンサスベクトル１’〜１５’を示す。この図示およびそれに関する説明では、プライム符号（’）を付した数字は右側のイメージを表し、プライム符号を付していない数字は左側のイメージを表す。ここでも、教授の目的のために、図５４および図５５に関する説明では、サーチウィンドウの長さが５の視差だけである（Ｄ＝５）と仮定している。即ち、一方のイメージ中の関係するセンサスベクトルの各々が、他方のイメージの５つの他のセンサスベクトル（視差ｄ＝０、１、２、３および４）とのみ比較されると仮定している。
【０５７０】
図５４は、本発明の１つの実施形態のパラレルパイプライン式相関アーキテクチャのブロック図を示す。データを受け取り、他のデータを出力している相関ユニット１４５０、１４９０、１４９１、１４９２、および（サーチウィンドウの大きさ、即ち、視差に依存して）その他の相関ユニットが示されている。図５３（Ａ）に示される１５個の左側のセンサスベクトルと、図５３（Ｂ）に示される１５個の右側のセンサスベクトルとは、これらの相関ユニットに送られる。視差Ｄ＝５である場合、５つの相関ユニットが使用される。従って、視差Ｄ−１（ｄ＝Ｄ−１）についての相関演算を行う相関ユニット１４９２まで、相関ユニット１４５０は、視差０（ｄ＝０）についての相関演算を行い、相関ユニット１４９０は、視差１（ｄ＝１）についての相関演算を行い、相関ユニット１４９１は、視差２（ｄ＝２）についての相関演算を行う、などとなる。Ｄ＝５については、相関ユニット１４９２が、視差４（ｄ＝４）についての相関演算を行う。
【０５７１】
各相関ユニットへの入力は、左センサスベクトル（Ｌ）、右センサスベクトル（Ｒ）、左−右の最小合計ハミング距離スコア（ＬＲＳＣ）、左−右の最小合計ハミング距離に関連する左−右の視差の数または指標（ＬＲＩ）、右−左の最小合計ハミング距離スコア（ＲＬＳＣ）、および右−左の最小合計ハミング距離に関連する右−左の視差の数または指標（ＲＬＩ）である。相関ユニットでの処理前のＬＲＳＣ、ＬＲＩ、ＲＬＳＣおよびＲＬＩの初期値は、これらの値の可能な最大値よりも高い、非常に高い値に設定することができる。このようにして、最初の相関ユニットからの計算結果は、最初の相関比較後に最適値として選択される。この最適値は、その後、パイプラインの下方でより最適な値が決定されると、他の相関ユニットにより更新され得る。
【０５７２】
相関ユニット間には、幾つかの遅延要素が設けられる。これらの遅延要素は、典型的には、Ｄフリップフロップである。左センサスベクトル（Ｌ）、左−右の指標（ＬＲＩ）およびスコア（ＬＲＳＣ）についてのそれぞれのデータパス間には、１遅延要素が設けられる。右センサスベクトル（Ｒ）、右−左の指標（ＲＬＩ）およびスコア（ＲＬＳＣ）についてのそれぞれのデータパス間には、２遅延要素が設けられる。従って、出力１４５１は１遅延要素１４７５に結合され、出力１４５２は２遅延要素１４７６に結合され、出力１４５３は１遅延要素１４７７に結合され、出力１４５４は１遅延要素１４７８に結合され、出力１４５５は２遅延要素１４７９に結合され、出力１４５６は２遅延要素１４８０に結合される。これらの遅延要素の出力は、次の相関ユニット１４９０についてのそれぞれのＬ、Ｒ、ＬＲＳＣ、ＬＲＩ、ＲＬＳＣおよびＲＬＩへの入力に結合される。同様に、出力１４５７は１遅延要素１４８１に結合され、出力１４５８は２遅延要素１４８２に結合され、出力１４５９は１遅延要素１４８３に結合され、出力１４６０は１遅延要素１４８４に結合され、出力１４６１は２遅延要素１４８５に結合され、出力１４６２は２遅延要素１４８６に結合される。これらの遅延要素の出力は、次の相関ユニット１４９１についてのそれぞれのＬ、Ｒ、ＬＲＳＣ、ＬＲＩ、ＲＬＳＣおよびＲＬＩへの入力に結合される。これと同じ遅延要素構成が、残りの相関ユニットの相関ユニット間に使用される。最後の出力１４６９、１４７０、１４７１、１４７２、１４７３および１４７４は、相関ユニット１４９２の出力に示されている。
【０５７３】
図５５は、本発明の１つの実施形態のパイプラインおよびパラレル動作を示す。この図は、視差Ｄ＝５のときに、左右のセンサスベクトルが、いつどのように相関ユニットを通って進んでいくかを示す疑似タイミング図を示す。ここに示されるように、水平方向の「軸」は時間であり、垂直方向の「軸」は相関ユニットである。従って、この図は、任意の所定の瞬間に、各相関ユニットにおいて、一方のイメージのどのセンサスベクトルが、他方のイメージのそのサーチウィンドウ内のセンサスベクトルと比較されるかを示す。図５３も参照して、この実施例では、走査線について１５個の左センサスベクトルと、１５個の右センサスベクトルとが使用される。従って、左センサスベクトル５〜１５および右センサスベクトル１’〜１１’だけが、それぞれのサーチウィンドウの、視差だけシフトされたセンサスベクトルを有する。従って、例えば、左センサスベクトル５は、相関計算のために、そのサーチウィンドウにおいて、右センサスベクトル１’、２’、３’、４’および５’を有する。左センサスベクトル４は、そのサーチウィンドウにおいて１’、２’、３’および４’だけを有するが、これは、５つの視差に対する完全な組ではないため、左センサスベクトル４は、左−右の比較については無視される。同様に、右センサスベクトル１’は、相関計算のために、そのサーチウィンドウにおいて、１、２、３、４および５を有する。右センサスベクトル１２’は、そのサーチウィンドウにおいて、１２、１３、１４および１５しか持たず、これは、５つの視差に対する完全な組ではないため、右センサスベクトル１２’は、右−左の比較については無視される。以下の説明でも、図５４が参照される。
【０５７４】
図５５の時間ｔ＝１で、左センサスベクトル１（Ｌの入力）および右センサスベクトル１’（Ｒの入力）は、視差０の相関ユニット（即ち、図５４の相関ユニット１４５０）で互いに比較される。比較に加えて、飽和閾値、エッジ状態識別、およびボックスフィルタリング（以下に説明する）が行われる。この時点で、１−１’について計算されたハミング合計が、最も最適であると考えられる。これが、それまでに行われた唯一の比較であるからである。パイプの下方の他の相関ユニットは、センサスベクトルデータストリームの前の組（例えば、前の走査線）からのセンサスベクトルを含むか、または、何も含まない。従って、ＬＲＳＣは、１−１’についてのハミング合計であり、ＬＲＩは０であり、ＲＬＳＣは、１−１’についてのハミング合計であり、ＲＬＩは０である。
【０５７５】
図５５の時間ｔ＝２で、左センサスベクトル１は、左−右の最小のスコアおよび指標（ＬＲＳＣ、ＬＲＩ）とともに、次の相関ユニット（ｄ＝１）に移動しており、右センサスベクトル１’は、最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）とともに、相関ユニット１４５０（視差０）と相関ユニット１４９０（視差１）との間の２遅延要素１４７６にある。相関ユニット１４９０は、左センサスベクトル１だけを含み、右センサスベクトルを含まないため、相関ユニット１４９０では、使用できる相関演算は行われない。同様に、左センサスベクトル１は、そのサーチウィンドウに、使用できる右センサスベクトルを持たないため、左−右の指標およびスコアは使用できない。今、相関ユニット１４５０は、左右のセンサスベクトルの次の対２−２’を含んでいる。相関ユニット１４５０のセンサスベクトルのこの新しい対について、相関演算が行われる。
【０５７６】
図５５の時間ｔ＝３で、左センサスベクトル２は、相関ユニット１４９０（視差１）に移動している。前に２遅延要素１４７６にあった右センサスベクトル１’もまた、これと同じ相関ユニットに移動している。この２遅延要素１４７６にある右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）もまた、これと同じ相関ユニットに移動している。左センサスベクトル２と右センサスベクトル１’との間の相関演算が行われる。尚、この時点で、右センサスベクトル１’は、相関ユニット１４５０（時間０）および相関ユニット１４９０（現在の時間３）で、左センサスベクトル１および２と比較されている。従って、そのサーチウィンドウにおける５つのベクトルのうちの２つが処理されている。新しく計算された相関結果は、前に計算された右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）と比較され、新しく計算された相関結果が前に計算された相関結果よりも小さければ、更新される。左センサスベクトル３はまた、相関ユニット１４５０で右センサスベクトル３’と比較される。
【０５７７】
図５５の時間４で、左センサスベクトル４は、相関ユニット１４５０で、右センサスベクトル４’と比較される。左センサスベクトル３はまた、相関ユニット１４９０で、右センサスベクトル２’と比較される。右センサスベクトル１’は、最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）とともに、２遅延要素１４８６に移動している。
【０５７８】
図５５の時間５で、左センサスベクトル３は、相関ユニット１４９１（視差２）に移動している。前に２遅延要素１４８６にあった右センサスベクトル１’もまた、これと同じ相関ユニットに移動している。この２遅延要素１４８６にある右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）もまた、これと同じ相関ユニットに移動している。左センサスベクトル３と右センサスベクトル１’との間の相関演算が行われる。尚、この時点で、右センサスベクトル１’は、相関ユニット１４５０（時間０）、相関ユニット１４９０（時間３）、および相関ユニット１４９１（現在の時間５）で、左センサスベクトル１、２および３と比較されている。従って、そのサーチウィンドウにおける５つのベクトルのうちの３つが処理されている。新しく計算された相関結果は、前に計算された右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）と比較され、新しく計算された相関結果が前に計算された相関結果よりも小さければ、更新される。左センサスベクトル５はまた、相関ユニット１４５０で右センサスベクトル５’と比較され、左センサスベクトル４は、相関ユニット１４９０で右センサスベクトル３’と比較される。
【０５７９】
ここで、図５５の時間ｔ＝５では、そのサーチウィンドウの左センサスベクトルと右センサスベクトルとの最初の使用できる比較が行われている。ここで、左センサスベクトル５は、そのサーチウィンドウの視差０のセンサスベクトルである右センサスベクトル５’と比較されている。パイプラインの下方に移動して各相関ユニットにより更新される右センサスベクトルと右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）と同様に、左センサスベクトル５もまた、左−右の指標（ＬＲＩ）およびスコア（ＬＲＳＣ）とともにパイプの下方に移動し、そのサーチウィンドウの各右センサスベクトルで更新される。右センサスベクトルとは異なり、左センサスベクトルについての相関および更新は、各時間で起こる。なぜなら、これらのベクトルおよびそれらに対応する左−右のデータ（ＬＲＳＣ、ＬＲＩ）が、１遅延要素だけを通って下方に移動しており、右センサスベクトルおよびそれらに対応する右ー左のデータ（ＲＬＳＣ、ＲＬＩ）が、２遅延要素を通ってデータパスを下方に移動しているからである。
【０５８０】
尚、図５５の時間ｔ＝２およびｔ＝４では、右センサスベクトル２’は、相関ユニット１４５０（視差０）および１４９０（視差１）で、左センサスベクトル２および３と比較されている。これらの左センサスベクトル２および３は、右センサスベクトル２’のサーチウィンドウの５つの左センサスベクトルのうちの２つである。右センサスベクトル２’についてのこれらの相関演算は、１’についての相関演算と同時に行われている。右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）はまた、右センサスベクトル２’とともに、右センサスベクトル１’のパイプラインから遅延されたパイプラインを下方に移動する。
【０５８１】
同様に、図５５の時間ｔ＝３およびｔ＝５では、右センサスベクトル３’は、相関ユニット１４５０（視差０）および１４９０（視差１）で、左センサスベクトル３および４と比較されている。これらの左センサスベクトル３および４は、右センサスベクトル３’のサーチウィンドウの５つの左センサスベクトルのうちの２つである。右センサスベクトル３’についてのこれらの相関演算は、１’および２’についての相関演算と同時に行われている。右−左の最小のスコアおよび指標（ＲＬＳＣ、ＲＬＩ）はまた、右センサスベクトル３’とともに、右センサスベクトル１’および２’のパイプラインから遅延されたパイプラインを下方に移動する。
【０５８２】
これらのパラレルパイプライン式相関演算は、入力ＬおよびＲから入るセンサスベクトルのストリームに対して行われる。相関演算は、図５５に示されるように様々な時間に様々な相関ユニットで行われる。視差Ｄ＝５のこの走査線で、左右のイメージの１５個のセンサスベクトルしか比較されないこの特定の実施例では、ｔ＝１からｔ＝１９である。
【０５８３】
図５５の時間ｔ＝９で始まると、右センサスベクトルと、そのサーチウィンドウの左センサスベクトルの各々とについて、相関結果の完全な組が利用可能である。従って、右センサスベクトル１’は、以前の相関ユニットで左センサスベクトル１、２、３および４と比較されており、現在の相関ユニットで左センサスベクトル５と比較されている。相関ユニット１４９２の出力は、左センサスベクトル（Ｌ）、右センサスベクトル（Ｒ）、左−右の最小合計ハミング距離スコア（ＬＲＳＣ）、左−右の最小合計ハミング距離に関連する左−右の視差の数または指標（ＬＲＩ）、右−左の最小合計ハミング距離スコア（ＲＬＳＣ）、および右−左の最小合計ハミング距離に関連する右−左の視差の数または指標（ＲＬＩ）である。この時点から先では、最適な左−右および右−左の指標（視差）が出力され、キューイングバッファに格納される。キューイングバッファは、左−右の一貫性検査のために使用される
以下、左−右の一貫性検査のためのキューイングバッファについて図５６を参照して説明する。この最後の相関ユニット１４９２の出力の、左−右の最小合計ハミング距離指標（ＬＲＩ）および右−左の最小合計ハミング距離指標（ＲＬＩ）は、２つのキューイングバッファに格納される。これらの２つのキューイングバッファのうちの一方は、左−右の指標（ＬＲＩ）用であり、他方は、右−左の指標（ＲＬＩ）用である。このキューイングバッファの１つの実施形態では、格納場所を指定するためにポインタが用いられる。別の実施形態では、キューイングバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファであり、格納されているデータは、スタックの頂部に入れられ、頂部に新しいデータが入ると、スタックの底部に向かって下方向にシフトされる。１つの実施形態では、各バッファのサイズは、視差の高さ（Ｄ）であり、視差が５である（Ｄ＝５）場合、５つのバッファ場所が与えられる。別の実施形態では、キューイングバッファのサイズは、視差Ｄの２倍であり、Ｄ＝５の場合、キューイングバッファは１０の記憶場所を有する。
【０５８４】
図５５の時間ｔ＝９で、左センサスバッファ５および右センサスバッファ１’のそれぞれの左−右および右−左の最適な視差（ＬＲＩ、ＲＬＩ）は、相関ユニット１４９２から出力され、図５６（Ａ）に示されるようにそれぞれのキューイングバッファに入れられる。時間ｔ＝１０で、左センサスバッファ６および右センサスバッファ２’のそれぞれの左−右および右−左の最適な視差（ＬＲＩ、ＲＬＩ）は、相関ユニット１４９２から出力され、キューイングバッファの頂部に入れられ、以前に格納された視差を押し下げる。これは、キューイングバッファ内のすべての記憶場所が図５６（Ａ）に示されるように満たされるまで続く。これは、図５５の時間ｔ＝１３に対応する。図において、記憶場所は、２つのバッファ間の数字１〜５として与えられる。従って、最も古い指標ＬＲＩ（５）およびＲＬＩ（１’）は、記憶場所１にあり、最も新しい指標ＬＲＩ（９）およびＲＬＩ（５’）は、記憶場所５にある。
【０５８５】
一旦満たされると、左センサスベクトル５の最も古い左−右の指標ＬＲＩ（５）が、左センサスベクトル５によって選択される最適な視差に対応する右センサスベクトルの右−左の指標と比較される。即ち、以下の関係、ＬＲＩ（ｘ）＝ＲＬＩ（Ｄ−ＬＲＩ（ｘ））が検査される。ここで、ｘは、記憶場所１のセンサスベクトルであり、ＬＲＩ（ｘ）は、そのセンサスベクトルｘがパイプラインを進んで最終的に相関ユニット１４９２の出力に達したときにセンサスベクトルｘによって選択される指標または最適な視差である。Ｄは、サーチウィンドウにおける視差の最大数を表し、ＲＬＩ（ｘ）は、記憶場所ｙのセンサスベクトルによって選択される指標または最適な視差を表す。
【０５８６】
例えば、左センサスベクトル５によってそのサーチウィンドウについて選択された最適な視差が２であると仮定する。これは、右センサスベクトル３’に対応する。従って、ｘ＝５、ＬＲＩ（ｘ）＝２、およびＤ−ＬＲＩ（ｘ）＝３である。記憶場所３（即ち、Ｄ−ＬＲＩ（ｘ）＝３）の右センサスベクトルは、右センサスベクトル３’である。ＲＬＩ（３’）＝２であれば、ＬＲＩ（ｘ）＝ＲＬＩ（ｙ）であるため、一致が存在し、左−右の一貫性検査で、最適な視差の選択が確認されている。一方、ＲＬＩ（３’）≠２であれば、ＬＲＩ（ｘ）≠ＲＬＩ（ｙ）であるため、一致が存在せず、左−右の一貫性検査で、エラーが検出されている。不一致である場合、この右センサスベクトルの視差に、ダミー値（例えば、−１）が割り当てられ得る。
【０５８７】
あるいは、視差ＬＲＩ（ｘ）−（ＲＬＩ（Ｄ−ＬＲＩ（ｘ）））の絶対値が検査され、この結果が１以下であるかどうか判断される。１以下であれば、選択された最適な個別の視差は、左−右の一貫性検査に合格し、この視差は保持される。この交互の関係を与えるために、何らかの「スロップ（slop）」または公差が設けられる。即ち、左−右および右−左の視差が１だけ異なっていても、とにかく、選択された視差は許容可能となる。
【０５８８】
記憶場所１にあるこのデータ対についてこの左−右の一貫性検査が終了すると、新しいデータ対が、キューイングバッファの頂部に入れられ得、これにより、古いデータ対（即ち、ＬＲＩ（５）およびＲＬＩ（１’））がキューイングバッファから押し出される。この時点でのキューイングバッファの内容が、図５６（Ｂ）に示される。次に、記憶場所１にあるＬＲＩ（ｘ）およびＲＬＩ（ｘ）の次の対が、左−右の一貫性について検査される。今、この対は、ＬＲＩ（６）およびＲＬＩ（２’）である。このデータ対が検査された後、記憶場所１にあるこの対は、キューイングバッファ外に出され、新しい対が、キューイングバッファの頂部に入れられる。これは、図５６（Ｃ）に示される。
【０５８９】
図５６（Ｄ）に示されるように、キューイングバッファの大きさはまた、視差の総数（Ｄ）の２倍であり得る。Ｄ＝５である場合、キューイングバッファの高さは、１０個の記憶場所である。
【０５９０】
図５７は、本発明の相関ユニットの１つの実施形態のハードウェア実現を示す。相関ユニット１４５０、１４９０、１４９１および１４９２の各々は、同じ方法で形成される。左右のセンサスベクトルはそれぞれ、ライン１５２０および１５２１で入力される。別の相関ユニットがある場合、これらのセンサスベクトルはまた、相関ユニットから、ＬＯＵＴライン１５２２およびＲＯＵＴライン１５２３を介して次の相関ユニットに送られる。しかし、このステージでは、左右のセンサスベクトルは、排他的ＯＲゲート１５２４を介して比較される。排他的ＯＲゲート１５２４は、入力が異なる場合には論理「１」を出力する。３２ビットセンサスベクトルの場合、そのようなＸＯＲ演算がパラレルに３２回行われ、ハミングビットカウンタまたはルックアップテーブル１５２５に出力される。ハミングビットカウンタまたはルックアップテーブル１５２５は、単に、その入力にある論理「１」の数をカウントするだけである。このビットカウンタ１５２５の出力値は、０のような低い値（左センサベクトルと右センサスベクトルとの間に差がない場合）から３２のような高い値（左センサベクトルと右センサスベクトルとのすべてのビット位置が異なる場合）であり得る。
【０５９１】
この値は、飽和閾値ユニット１５２６に出力される。飽和閾値への入力が、０と１５との間の値（０および１５を含む）であれば、出力値は、入力値である。飽和閾値への入力が、１５よりも大きい値であれば、出力値は、１５に設定される。飽和閾値ユニット１５２６から出力される最大値が１５であるため、ハミング距離を伝達するのに必要な出力ラインの数はより少ない。ここでは、ラインを４本だけ使用して、ハミング距離０〜１５を表している。ほとんどの場合、ハミング距離が１５以上であれば、相関ユニットは、おそらく、それを最適な視差としては選択しない。従って、大きい（＞１５）ハミング距離の精度は必要でない。他の実施形態では、出力が２つのセンサスベクトル間のハミング距離そのものを表すように、そのような飽和閾値を使用しなくてもよい。
【０５９２】
飽和閾値ユニットを用いることにより、３または４ビット（および従って３または４ライン）がハミング距離を表すために用いられ得る。そうでなければ最大３２ハミング距離を伝達するために５ビットが必要である。７の最大ハミング距離が用いられる場合、３ビットが用いられ得る。すなわち、飽和閾値前の計算されたハミング距離が０以上且つ７以下である場合、計算されたハミング距離の値が用いられ、飽和閾値前の計算されたハミング距離が７以上且つ３２以下である場合、計算されたハミング距離の値は７である。最大ハミング距離が７である場合に３ビットが用いられるのに対して、用いられるシーリングが１５である場合、４ビットが用いられ得る。
【０５９３】
相関ユニットにおいて、入力された左および右センサスベクトルに関する特定の行および列情報もまた、エッジ条件決定のために留意される。これは、ボックスフィルタリング動作に特に関係がある。
【０５９４】
次の加算／減算動作のシーケンスは、最終的に各移動相関ウインドウに関するウインドウ合計を計算するボックスフィルタリング動作を表す。飽和閾値ユニット１５２６の出力１５４０は、相関ウインドウの最も右側の下隅のイメージ要素を表す。これは、移動相関ウインドウのウインドウイラストレーション１５７０の黒い部分部分によって表される。この部分がウインドウ合計演算に寄与する前に、さらに１つの動作が行われる。加算器１５２７は、ライン１５４１内の値からライン１５４２内の値を減算し、その結果をライン１５４３に出力する。ウインドウイラストレーション１５７２内に図示するように、現在のイメージ要素上方のウインドウ高さに位置するイメージに関して計算されたハミング距離は、ライン１５４１上にある。列合計ラインバッファ内の列合計は、ウインドウイラストレーション１５７１内に図示するように、現在のイメージ要素位置の直上に位置し、ライン１５４２上にある。出力ライン１５４３は、ウインドウイラストーション１５７３内に図示するように、改変された列合計を供給する。
【０５９５】
加算器１５２８はライン１５４０上の値をライン１５４３上の値に加算することにより、ライン１５４４上に新しい列合計を生成する。ウインドウイラストレーション１５７０内に図示する左および右センサスベクトルの現在の対に関する現在のハミング距離が、ライン１５４０上に供給される。出力ライン１５４３は、ウインドウイラストレーション１５７３内に示すように、改変された列合計を供給する。加算器１５２８の出力は、ウインドウイラストレーション１５７４内に図示するように、新しい列合計である。
【０５９６】
加算器１５２９は、ライン１５４４上の値からライン１５４５上の値を減算することにより、出力１５４６を生成する。ライン１５４４は、ウインドウイラストレーション１５７４内に図示するように、新しい列合計を含む。ライン１５４５は、ウインドウイラストレーション１５７５内に図示するように、新しい列合計位置からのウインドウ長さに位置する列合計を含む。この差違が、ウインドウ合計を生成するために用いられる。
【０５９７】
加算器１５３０は、ライン１５４７上の値にライン１５４６上の値を加算することによりライン１５４８上に新しいウインドウ合計を生成する。この出力ウインドウ合計値はまた、レジスタ１５３１内に格納されてライン１５４９上に載置される。この加算前に、ライン１５４７上のレジスタ１５３１の出力は、直前の計算からのウインドウ合計を含む。次のクロックサイクルにおいて、現在の左および右センサスベクトル（ＬおよびＲ）を表す新しいウインドウ合計が出力ライン１５４８および１５４９で生成されるように、ライン１５４６上の値からの寄与が、ウインドウ合計を更新する。ライン１５４８、レジスタ１５３１、ライン１５４７、および加算器１５３０によって規定されるループ構造は、ウインドウ合計が１サイクルで計算されることを可能にする。
【０５９８】
左−右スコアおよび指標（ＬＲＳＣ、ＬＲＩ）は対応する左センサスベクトル（Ｌ）と共にパイプラインを下流に進み、且つ右−左スコアおよび指標（ＲＬＳＣ、ＲＬＩ）は対応する右センサスベクトル（Ｒ）と共にパイプラインを下流に進むため、ライン１５４９、１５５３、１５５０および１５５１におけるウインドウ合計は、この相関ユニットのための左−右スコアおよび右−左スコア（および従ってこの差）を表す。左−右スコアおよび右−左スコアは、これらが最小の左−右および右−左スコアをも表すか否かを決定するために、比較において用いられる。
【０５９９】
比較器１５３２の出力は次の相関ユニットのためのＬＲＳＣおよびＬＲＩ値を生成するために用いられるマルチプレクサのためのセレクタ信号を供給する。同様に、比較器１５３６の出力は次の相関ユニットのためのＲＬＳＣおよびＲＬＩ値を生成するために用いられるマルチプレクサのためのセレクタ信号を供給する。比較器１５３２はライン１５４９におけるウインドウ合計を、以前の相関ユニットから決定された入力ＬＲＳＣと比較する。新しいウインドウ合計が以前に計算されたＬＲＳＣ未満である場合、比較器１５３２は論理「１」を生成する。そうでなければ、論理「０」が比較器１５３２から出力される。比較器１５３６は、ライン１５５１におけるウインドウ合計を、以前の相関ユニットから決定された入力ＲＬＳＣと比較する。新しいウインドウ合計が以前に計算されたＲＬＳＣ未満である場合、比較器１５３６はライン１５５４において論理「１」を生成する。そうでなければ、論理「０」がライン１５５８において比較器１５３６から出力される。
【０６００】
マルチプレクサ１５５３への入力は、ライン１５５２における以前に計算されたＬＲＳＣと、この相関ユニットにおいて計算されたライン１５５３における新しいウインドウ合計とを含む。比較器１５３２からのライン１５５４上のセレクタ信号が論理「１」である場合、マルチプレクサ１５３３の出力１５６３はウインドウ合計である。なぜなら、この新しいウインドウ合計は、以前の相関ユニットからの以前に計算されたウインドウ合計よりも低いウインドウ合計を表すからである。ライン１５５４上のセレクタ信号が論理「０」である場合、マルチプレクサ１５３３の出力１５６３は、以前の相関ユニットからの出力と同一のＬＲＳＣである。同様に、マルチプレクサ１５３４への入力は、ライン１５５５における以前に計算されたＬＲＩと、この相関ユニットにおいて計算されたライン１５５６における相関ユニットのための現在の視差の数（ｄｉｓｐａｒｉｔｙ  ｎｕｍｂｅｒ）とを含む。比較器１５３２からのライン１５５４上のセレクタ信号が論理「１」である場合、マルチプレクサ１５３４の出力１５６４は、この相関ユニットのための視差の数である。なぜなら、この視差の数は、以前の相関ユニットからの以前に計算されたウインドウ合計よりも低いウインドウ合計と関連するからである。ライン１５５４上のセレクタ信号が論理「０」である場合、マルチプレクサ１５３４の出力１５６４は、以前の相関ユニットからの出力と同一のＬＲＩである。
【０６０１】
マルチプレクサ１５３５への入力は、ライン１５５７における以前に計算されたＲＬＳＣと、この相関ユニットにおいて計算されたライン１５５０における新しいウインドウ合計とを含む。比較器１５３６からのライン１５５８上のセレクタ信号が論理「１」である場合、マルチプレクサ１５３５の出力１５６５は新しいウインドウ合計である。なぜなら、この新しいウインドウ合計は、以前の相関ユニットからの以前に計算されたウインドウ合計よりも低いウインドウ合計を表すからである。ライン１５５８上のセレクタ信号が論理「０」である場合、マルチプレクサ１５３５の出力１５６５は、以前の相関ユニットからの出力と同一のＲＬＳＣである。同様に、マルチプレクサ１５３７への入力は、ライン１５６１における以前に計算されたＲＬＩと、この相関ユニットにおいて計算されたライン１５６２における相関ユニットのための現在の視差の数とを含む。比較器１５３６からのライン１５５８上のセレクタ信号が論理「１」である場合、マルチプレクサ１５３７の出力１５６６は、この相関ユニットのための視差の数である。なぜなら、この視差の数は、以前の相関ユニットからの以前に計算されたウインドウ合計よりも低いウインドウ合計と関連するからである。ライン１５５８上のセレクタ信号が論理「０」である場合、マルチプレクサ１５３７の出力１５６６は、以前の相関ユニットからの出力と同一のＲＬＩである。
【０６０２】
上記に述べたように、各相関ユニットは特定の視差の数と関連する。２４の視差に対して２４の相関ユニット（各視差の数当たり１つ）が供給される。製造プロセスを容易にするために相関ユニットが同一に製造されることを確実にするために、各相関ユニットのための視差の数を生成する回路は同一でなければならない。上述したように、相関ユニットに関連するこの視差の数は、マルチプレクサ１５３４および１５３７ヘの入力のために用いられる。その回路は、以前の相関ユニットから伝搬した視差の数を受け取ってそれをインクリメント値（通常「１」）に加算することにより相関ユニットに割り当てられた現在の指標または視差の数を生成する加算器である。相関ユニットは、この視差においてセンサスベクトルを比較する。ワイヤラインを節約するために、以前の相関ユニットからの視差の数は、新しいＬＲＩ値を伝送するために用いるラインと同一のライン上で伝送される。従って、新しいＬＲＩ値が次の相関ユニットに伝送されない期間、伝搬する視差の数がまず次の相関ユニットに伝送され、その後新しいＬＲＩ値が次に伝送される。
【０６０３】
第１の相関ユニットへの入力は、値−１でハードワイヤされる。従って、第１の相関ユニットは視差の数０に割り当てられ、この相関ユニットにおいて行われる全ての比較は視差０におけるセンサスベクトル間にある。この伝搬する視差の数は、第１の相関ユニットにおいては０であり、新しいＬＲＩ値を伝送するために用いられるライン上で次の相関ユニットに伝送される。この伝送は、新しいＬＲＩ値が次の相関ユニットに伝送される前に起こる。新しいＬＲＩ値が次の相関ユニットに入り、従って加算器に入ると、伝搬する視差の数は、第２の相関ユニット用に１になる。これが、パイプライン内の最後の相関ユニットまで続けられる。
【０６０４】
図５４を参照して上述したように、視差Ｄ＝５に対して、５つの相関ユニットが用いられる。換言すると、相関ユニットの数はサーチウインドウ内で用いられる視差Ｄの数に一致する。しかし、他の実施形態において、利用される相関ユニットの数は、視差Ｄの数と一致する必要はない。実際、１を越える視差に対するデータを処理するために単一の相関ユニットが用いられ得る。従って、視差２４サーチウインドウを実行するシステムに対して、１２の相関ユニットが供給され得、各相関ユニットは２４の異なる視差のうちの互いに２ずつオフセットしたイメージデータを処理する。従って、例えば、１つの相関が、視差０および１において互いにオフセットしたイメージデータを処理し、別の相関ユニットが視差２および３において互いにオフセットしたイメージデータを処理し、第３の相関ユニットが視差４および５において互いにオフセットしたイメージデータを処理し、これが、視差２２および２３において互いにオフセットしたイメージデータを処理する相関ユニット１２まで同様に行われる。
【０６０５】
しかし上記の記載は、本発明のサブピクセル推定特徴を組み込まない。以下の議論は、並列パイプライン内にサブピクセル推定を組み込むために必要な詳細を提供する。上述したように、サブピクセル推定動作は、初期選択された不連続な最適の視差の数を与えられた、より良好且つより精密な視差の数を推定する。概念的には、推定は、視差の数（Ｘ軸）と合計されたハミング距離（Ｙ軸）との関係を表すグラフを分析し、初期選択された最適の視差の数と、最適の不連続な視差の数のいずれかの側の２つの視差の数との間を補間することによって達成される。１実施形態において、「Ｖ」が補間に用いられる。特定の視差の数もまた以下の関係を用いて計算され得る。
2008033958.tif 000012
【０６０６】
サブピクセル推定はまた、相関ユニットに関して上述した並列のパイプライン化システムにおいて実行され得る。図５４において、左センサスベクトル（Ｌ）、右センサスベクトル（Ｒ）、左−右スコア、左−右指標、右−左スコア、および右−左指標が、並列パイプラインシステムに沿ってパスされる。サブピクセル推定のために、以下の値がパイプライン内をパスされる。（１）現在の相関合計が最小合計である場合に用いられる以前の視差からの相関合計（図１７においてＹ１で表す）、（２）最適の視差の数（ＬＲＩ）、（３）最小相関合計、および（４）サブピクセル推定。最小相関合計は左−右（ＬＲＳＣ）である。これらの値は各相関ユニットにおいて処理される。これらの変数の、相関ユニット間の遅延は単一の遅延である。ＬＲＩおよびＬＲＳＣは、上述したように既にパイプラインの相関部分をパスされていることに留意されたい。
【０６０７】
従って、データが相関ユニットを介してパイプラインを下流に進む際に、サブピクセル推定は、新しく且つより低い相関合計に当たると更新される。パイプライン内の１点において新しい最小相関合計に達した場合、最小相関合計（ＬＲＳＣ）が更新され、最適の視差の数（ＬＲＩ）が更新されて、以前の視差からの相関合計が格納されパスされる。このとき、次の視差からの相関合計データはまだ処理されていないため、サブピクセル推定は生成され得ない。他のデータが予測されない（従って最適の不連続な視差がＤであり現在の相関ユニットが最後の相関ユニットでもある）場合、不連続な視差の数はサブピクセル推定動作からの最適の視差として扱われる。より多くの相関ユニットが使用可能である（すなわち、この左の参照イメージ要素のサーチウインドウ内の全てのイメージ要素が、この左の参照イメージ要素とまだ比較されていない）場合、次の相関ユニット内の次回のユニットにおいて、サブピクセル推定が計算され得る。なぜなら、現在の相関合計（最小でなくとも）が「Ｖ」補間曲線に適合する他方の隣接点であり、すなわち、この次の相関合計が図１７のＹ３を表すからである。次の相関ユニット内の次回のユニット（存在する場合）において、相関合計は、新しい最小相関合計でない場合は、無視される。なぜなら、最適の不連続な視差の数に隣接する２点のうちの１つではないからである。
【０６０８】
Ｅ．モーションのための垂直および水平移動
モーションの分析のために、垂直な移動もまた考慮されなければならない。視差の範囲は、垂直オフセットにも亘り、システムは、垂直オフセットを有するウインドウを有するためには、イメージデータのより多くのライン（すなわちセンサスベクトル）を読み出さなければならない。垂直モーションを並列処理するために、各走査線に関する上記の教示内容が用いられ得る。従って、１つのイメージ内の座標（ｘ１、ｙ１）に位置する与えられたイメージ要素に対して、他のイメージ内の位置（ｘ２、ｙ２）にある対応するイメージ要素が本発明によって決定され得る。垂直オフセットが考慮されるため、最適の合致は必ずしも同一の線内で見い出され得ない。サーチウインドウはこのとき、ラインまたはラインに対応する行または参照イメージ要素の行に沿った１組のイメージ要素ではない。むしろ、サーチウインドウはこのとき、いくつかの行および列のイメージ要素を含む。
【０６０９】
図５８は、本発明の１つの実施形態を示す。ライン１８００での入力は、センサスベクトル発生器からの左および右のセンサスベクトルのストリームである。ライン１８２９上の出力におけるデータは、左および右のイメージ内の各選択されたイメージ要素に関する特定の行および列における最適の視差である。１つの実施形態において、出力は、最小の左−右スコア（ＬＲＳＣ）、左−右指標（ＬＲＩ）、最小の右−左スコア（ＲＬＳＣ）、および右−左指標（ＲＬＩ）を含む。ライン１８００における、センサス発生器（図５８には示さない）からの左（Ｌ）および右（Ｒ）のセンサスベクトル出力は、ＬＲＳＣ、ＬＲＩ、ＲＬＳＣおよびＲＬＩと共にライン１８２９からも出力され得る。
【０６１０】
この並列のパイプライン化システム内のライン１における出力１８２９は、左−右および右−左の一貫性チェッキング用のキューイングバッファおよび外部指標アレイまたは視差マップに接続され、並びに／または視差データの処理用の別のアプリケーション／システムに直接接続されている。上述したように、視差データは、互いに行および列に位置する、１つのイメージ内の選択されたイメージ要素と他のイメージ内のイメージ要素との間の最適のオフセットを表す。これは、ライン２〜５用の「出力」ライン１８３０および１８３３を、直上のラインにおける第１の相関ユニットの入力に供給することにより達成される。例えば、ライン１８３３はライン５の相関ユニット１８５９の出力をライン４の相関ユニット１８５２への第２の組の入力に接続する。ライン１８３２は、ライン４の相関ユニット１８５５の出力を、ライン３の相関ユニット１８４８への第２の組の入力に接続する。ライン１８３１は、ライン３の相関ユニット１８５１の出力を、ライン２の相関ユニット１８４４への第２の組の入力に接続する。ライン１８３０は、ライン２の相関ユニット１８４７の出力を、ライン１の相関ユニット１８４０への第２の組の入力に接続する。これらのライン１８３０〜１８３３は、ＬＲＳＣ、ＬＲＩ、ＲＬＳＣおよびＲＬＩを含む。
【０６１１】
図５８に示し且つ図５３〜図５７に関して上述したように、この実施例において５つの視差（Ｄ＝５）が用いられており、従って、５ラインのセンサスベクトルが処理され得る。各ラインまたは行について、相関結果を演算するために５つの相関ユニットが用いられ得る。従って、各ライン（Ｌ１〜Ｌ５）の最後の相関ユニットは、視差４（ｄ＝Ｄ−１であって、Ｄ＝５であり、従ってｄ＝５−１＝４である）のためである。他の視差Ｄも選択され得、選択される特定の視差Ｄに依存して、この並列のパイプライン化システムを介して処理される走査線の数もまた変化し得ることに留意されたい。
【０６１２】
各ライン（Ｌ１〜Ｌ５）について、図５４〜図５７に示す構造に類似の構造を有する５つの相関ユニットが提供される。相関ユニット間の遅延要素もまた、図５４に示すが、簡潔化および教育上の目的のために、これらの遅延要素は図５８には示さない。しかし、適切な遅延を有するこれらの遅延要素は、この実施形態において、一方のイメージ内の各参照イメージ要素と、他方のイメージ内の参照イメージ要素のサーチウインドウ内の全てのイメージ要素との間のデータ処理を扱うために、実際に存在する。これもまた、図５３〜図５７を参照して述べている。
【０６１３】
ライン１（Ｌ１）について、相関ユニット１８４０〜１８４３が、データパス１８１３、１８１４、１８１９、１８２４および１８２９を介してイメージデータ対（左および右）を処理する。ライン２（Ｌ２）について、相関ユニット１８４４〜１８４７が、データパス１８１２、１８１５、１８２０、１８２５および１８３０を介してイメージデータ対（左および右）を処理する。ライン３（Ｌ３）について、相関ユニット１８４８〜１８５１が、データパス１８１１、１８１６、１８２１、１８２６および１８３１を介してイメージデータ対（左および右）を処理する。ライン４（Ｌ４）について、相関ユニット１８５２〜１８５５が、データパス１８１０、１８１７、１８２２、１８２７および１８３２を介してイメージデータ対（左および右）を処理する。ライン５（Ｌ５）について、相関ユニット１８５６〜１８５９が、データパス１８０９、１８１８、１８２３、１８２８および１８３３を介してイメージデータ対（左および右）を処理する。各ラインについて、左および右のセンサスベクトル（Ｌ、Ｒ）がライン１８０９〜１８１３を介して相関ユニットに向かう。
【０６１４】
適切なライン（Ｌ１〜Ｌ５）がこの並列のパイプライン化システムに入ることを確実にするために、遅延要素１８０１〜１８０４が設けられている。ここでの設定は、図４８に示すセンサス発生器用の設定と類似である。従って、ライン１８００において左および右のイメージに関するセンサスベクトルが入る。簡潔化のためにここでは単一のラインを示すが、実際には、左のイメージに１つ及び右のイメージに１つの、１対のラインが実行される。ライン１８００においてこのシステムに入るイメージデータの５ラインは最終的には、ライン１８０９〜１８１３において相関ユニットに入る。ライン１８１０〜１８１３は、各遅延要素１８０１〜１８０４からの出力である。従って、ライン１８００からの左および右のセンサスベクトルはライン１８０５を介して遅延要素１８０１に入る。遅延要素１８０１からの左および右のセンサスベクトルは、ライン１８０６を介して遅延要素１８０２に入る。遅延要素１８０２からの左および右のセンサスベクトルはライン１８０７を介して遅延要素１８０３に入る。遅延要素１８０３からの左および右のセンサスベクトルはライン１８０８を介して遅延要素１８０４に入る。
【０６１５】
ライン１〜５（Ｌ１〜Ｌ５）を図示するが、これは本発明を、イメージの最初の５ラインまたは所望のイメージ処理データの最初の５ラインに限定するものではない。Ｌ１〜Ｌ５は、参照イメージ要素のサーチウインドウ内のいずれの５ラインをも示す。従って、例えば、Ｌ１〜Ｌ５はライン７８〜８２上に位置するイメージデータに対応し得る。
【０６１６】
従って、この構成は、システムが、互いにオフセットする行および列に位置する、１方のイメージ内のイメージ要素と他方のイメージ内のイメージ要素との間の最適の合致を決定することを可能にする。この並列のパイプライン化システム内のライン１における出力１８２９は、左−右および右−左一貫性チェッキング用のキューイングバッファ、外部指標アレイまたは視差マップに接続され、並びに／または視差データの処理用の別のアプリケーション／システムに直接接続される。
【０６１７】
Ｆ．「スーパーピン」バス
図５９は、本発明のイメージ処理システムの一部分に関連する「スーパーピン」バスおよびコネクタのいくつかを示す。図５９に示すように、４×４アレイは、最近傍メッシュ接続を有するのみならず、各演算要素の各側に１組み８つの「スーパーピン」接続を有し、スーパーピンバスを形成する。これらのスーパーピン接続は、データが、互いに隣接するピン間の単一の接続を用いて、１つのチップから次のチップへと移動することを可能にする。従って、ソフトパイプラインバス、トークンリング、または他の分布ネットワークが、演算要素上のルーティングリソースの多くを用いることなく構築され得る。これらのスーパーピンは、ローカル通信およびパイプライン化バス用のローカル相互接続用に用いられ得る。北−南および東−西バスを通過し得るいずれのデータもスーパーピンバスを通過し得る。
【０６１８】
図５９は、図４６および図４７に元々示すアレイの一部分のみを示す。互いに隣接して位置づけられた演算要素１１０１、１１０２、１１０５および１１０６は互いに接続されており、且つスーパーピンバスを介してコネクタに接続されている。図示しない他の演算要素はもまた互いに、コネクタに、および類似の様式でここに示す演算要素と接続されている。スーパーピンバス１５００は、演算要素１１０１とコネクタ１１４０との間に接続されている。スーパーピンバス１５０１は演算要素１１０１と演算要素１１０２との間に接続されている。スーパーピンバス１５０２は、演算要素１１０１と演算要素１１０５との間に接続されている。スーパーピンバス１５０３は演算要素１１０１と、そのすぐ左に位置する演算要素（図示せず）があればその演算要素との間に接続されている。スーパーピンバス１５０４は演算要素１１０５とコネクタ１１４１との間に接続されている。スーパーピンバス１５０５は演算要素１１０５と演算要素１１０６との間に接続されている。スーパーピンバス１５０６は演算要素１１０５と、そのすぐ右に位置する演算要素（図示せず）があればその演算要素との間に接続されている。スーパーピンバス１５０７は演算要素１１０６と、その下に位置する演算要素（図示せず）があればその演算要素との間に接続されている。スーパーピンバス１５０８は演算要素１１０６と、そのすぐ右に位置する演算要素（図示せず）があればその演算要素との間に接続されている。スーパーピンバス１５０９は演算要素１１０６と演算要素１１０２との間に接続されている。スーパーピンバス１５１０は演算要素１１０２と、そのすぐ左に位置する演算要素（図示せず）があればその演算要素との間に接続されている。スーパーピンバス１５１１は演算要素１１０２と、そのすぐ下に位置する演算要素（図示せず）があればその演算要素との間に接続されている。
【０６１９】
Ｇ．概要
図６０は、図４６に関して述べた４×４アレイのより詳細な図である。図６０はさらに、スーパーピンバス、テストピン、およびプログミングピンを示す。しかし、データパスユニット、ＰＣＩインターフェースユニット、およびクロックユニットは示されていない。演算モジュールＣＵＩ〜ＣＵ１６のレイアウトおよびピンは実質的に同一である。しかし、これらの機能は異なる。上述したように、完全にパイプライン化されたアーキテクチャは、いくつかの演算モジュールがセンサス変換を演算するため、別の演算モジュールが相関合計を演算するため、更に別の演算モジュールがＰＣＩバスへの伝送パスを提供するための準備をする。
【０６２０】
例としての演算モジュールは、行１列Ｂに位置する演算モジュールＣＵ６である。１つの実施形態において、演算モジュールＣＵ６は、Ｘｉｌｉｎｘ  ＸＣ４０００シリーズＦＰＧＡチップおよび外部ＳＲＡＭを含む。北−南軸ピンは、北ピン用のＮＯＲＴＨおよび南ピン用のＳＯＵＴＨとして示される。西−東軸ピンは、西ピン用のＷＥＳＴおよび東ピン用のＥＡＳＴとして示される。ＮＳＰ、ＳＳＰ、ＷＳＰおよびＥＳＰは、それぞれ、北、南、西および東スーパーピンバスピンである。
【０６２１】
いくつかのピンが構築の目的のために用いられる。ＴＤＩ、ＴＣＫおよびＴＭＳは、これらの電子サブアセンブリのボードレベルテスト用の境界走査目的のための、Ｔｅｓｔ  Ｄａｔａ  Ｉｎ、Ｔｅｓｔ  ＣｌｏｃｋおよびＴｅｓｔ  Ｍｏｄｅ  Ｓｅｌｅｃｔ入力である。境界走査が用いられない場合、これらのピンは、構築が完了した後、ＣＬＢ論理への入力として用いられ得る。ＴＤＯは、境界走査が用いられる場合のＴｅｓｔ  Ｄａｔａ  Ｏｕｔｐｕｔである。ＴＤＯは、境界走査が用いられない場合、構築後のレジスタのない３状態出力である。ＰＲＯＧは、演算モジュールＣＵ６を、強制的に構築メモリをクリアさせて構築サイクルを開始させる入力である。ＤＯＮＥは、双方向信号であり、入力としては、グローバル論理初期化および出力のイネーブルを遅延させるために用いられ得、出力としては、構築プロセスの完了を示す。ＩＮＩＴは、構築中および構築後の双方向信号である。ＩＮＩＴは、電力安定化および構築メモリの内部クリアリング中の出力である。ＩＮＩＴは、入力としては、構築の開始前にＦＰＧＡを内部ＷＡＩＴ状態に保持するために用いられ得る。構築中、ＩＮＩＴは構築データエラーを示すために用いられ得る。
【０６２２】
いくつかのピンが構築機能を提供し、さらに構築後の他の機能を提供する。ＤＩＮは、スレーブ／マスタ直列構築中の直列構築データ入力として作用し、並列構築中の出力Ｄ０として作用する。構築後、ＤＩＮはユーザプログラマブルＩ／Ｏピンとして作用する。典型的には、ＤＩＮはＨ機能発生器入力２であり、ＤＯＵＴは、構築中（エクスプレスモード以外）のデージーチェーンスレーブＦＰＧＡのＤＩＮピンを駆動し得る直列構築データ出力である。構築後、ＤＯＵＴは、ユーザプログラマブルＩ／Ｏピンである。
【０６２３】
２つのクロック信号が用いられる。構築中、ＣＣＬＫはマスタモードまたは非同期周辺モード中の出力として作用し得るが、スレーブモード、同期周辺モード、およびエクスプレスモードにおいては入力である。構築後、ＣＣＬＫは、リードバッククロックとして選択され得る。ＣＬＫはアレイ内の演算モジュールＣＵ１〜ＣＵ１６の同期を制御する主要クロッキング信号である。ＣＬＫ用クロッキング信号は、アレイの列Ａ〜Ｄにユニークである。これらのＸｉｌｉｎｘ  ＦＰＧＡの詳細は、参考のためここに援用する、データブックであるXilinx, The Programmable Logic Data Book(9/96)において得られ得る。
【０６２４】
上述したように、アレイの上部および底部は、アレイを拡張するため、トーラスを閉じるため、および周辺（Ｉ／Ｏ）デバイスを追加するために適した５０ピンコネクタを有する。行０の演算モジュール（すなわち、ＣＵ１、ＣＵ５、Ｃ９、ＣＵ１３）より上で且つ行３の演算モジュール（すなわち、ＣＵ４、ＣＵ８、ＣＵ１２、ＣＵ１６）より下のコネクタＸＣＯＮＮは、北−南軸スーパーピン（すなわち、ＮＳＰ、ＳＳＰ）への接続および北−南メッシュ接続（すなわち、ＮＯＲＴＨ、ＳＯＵＴＨ）を提供する。４×４アレイのためには、僅か８つのコネクタが必要であるにすぎない。異なるサイズのアレイは異なる数の接続を有し得る。
【０６２５】
チップ間通信は北−南通信および東−西通信に分割される。アレイは、ボード上の２つの垂直方向に隣接したＦＰＧＡ間に４３のピンを有する。北および南端コネクタがリボンケーブルによって接続される場合、各列の最上および最下のチップもまた４３本のピンによって接続される。中間の２つの行は４３のピンによって接続されるが、いずれかの列がホストプロセッサと通信している場合、これらのピンのうちの２０ピンはこの通信専用となっている。東−西通信のために、アレイは４２のピンを有する。しかし、外部ＳＲＡＭが用いられている場合、これらのピンのうちの２０ピンは、アドレス専用となり、８ピンがデータ専用となり、東−西軸の通信用には１６本ピンが残されるのみである。
【０６２６】
相関パイプラインの各段階間の通信は、２つの３２ビットセンサスベクトル、５ビット指標、１０ビット合計ハミング距離、および１対の制御情報ビットを含む。これらの合計は、パイプライン全体を介して起こることが必要である８１ビットの通信となる。これは、北−南軸上のこのような通信を提供するために使用可能な４３のピンを越える。しかし、２つのクロックサイクル用に１つのピクセルというモデルは、ピクセル当たり２回の通信を可能にする。従って、北−南の４３のピンによる接続上の出力および入力を多重化することにより、８６ビットが通信され得る。損失的な（ｌｏｓｓｙ）通信およびレジスタ使用の大容量による否定的な影響は、ストローブされたＩ／Ｏレジスタおよび多重化されたＩ／Ｏピンの使用により減少する。Ｘｉｌｉｎｘ  ＸＣ４０２８ＥＸは、このような機能性を提供する。
【０６２７】
互いに隣接する要素間のピンは、容量的に軽くロードされ、チップ間のギャップを介して非常に迅速にデータをパスすることができる。ＸＣ４０２５チップは、各チップから及び各チップにパスされる際にデータをラッチし得るＩ／Ｏレジスタを有し、それにより高速パイプラインが起こることが可能になる。実際、クロックイネーブルを用いることは、データワイヤ上の遅延が制御ワイヤを通った遅延とほぼ均等である限り、簡単な束ねられた要求／承認通信スキームが設定されることを可能にする。要求／承認の往復を必要とすることは、通常、制御信号が往復を完了するときまでに、データ伝送のための適切な時間を確実にする。
【０６２８】
アレイボード上の最も遅いラインは、エッジチップの遠い側を連結する、ボードの右エッジからボードの左エッジまでのラインである。これらのラインは、レジスタタイミングの何らかのスキューイングが行われた場合、２５ＭＨｚでのデータ伝送を可能にする。高速デバイスは、スキューイングの必要性を排除する。実際、これらのより高速なデバイスをアレイのエッジで用いることは、アレイ全体の性能を均等化する。
【０６２９】
図６１は、１つのＦＰＧＡ演算モジュール（すなわち、Ｕ８）と１対のＳＲＡＭ（Ｕ９およびＵ１０）の詳細図を示す。１つの実施形態において、ＳＲＡＭは、Ｔｏｓｈｉｂａ  ＴＣ５５１４０２チップである。メモリ要素Ｕ９およびＵ１０は、ＥＡＳＴメッシュバスラインを介して演算モジュールＵ８に接続される。メモリ要素Ｕ９内のアドレスラインＡ０〜Ａ１９は、その後ＬＳＢデータラインＤ０〜Ｄ３上で読み出されるデータを読み出すことによりにより、またはアドレスラインによって識別された特定のメモリ位置への書込みにより、ＳＲＡＭチップ内のデータにアクセスするために用いられる。ＣＥは、チップイネーブルを表し、ＷＥはライトイネーブルを表す。メモリ要素Ｕ１０はＭＳＢデータラインＤ４〜Ｄ７を供給する。
【０６３０】
アレイボードの各ＦＰＧＡ演算要素は４つの最も近傍の隣接する演算要素に接続し、さらに各ＦＰＧＡに使用可能な１ＭＢ×８ビットメモリを共に形成する１対のＳＲＡＭチップにも接続する。接続は、容量的ロードを最小にするためにアレイ内にできるだけ短くレイアウトされる。しかし、メッシュ端部において、トーラスを閉じるために、より長いワイヤが必要である。これらのより長いワイヤは、アレイワイヤよりも多少ゆっくりと動作する。
【０６３１】
アレイボードの各演算要素は、要素毎に２つの１ＭＢ×４ビットのチップを用いることにより、１ＭＢメモリを有する。２つのチップは平行にオーガナイズされて、ＦＰＧＡ演算要素チップから見られるように、１ＭＢ×８ビットメモリを供給する。ＳＲＡＭは、ＦＰＧＡチップ間の西−東相互接続チャネル上にあり、ＣＥピンを高く保持することにより無視され得るか、またはＣＥラインを降下することにより活性化され得る。現在のボードは２５ｎｓの速度グレードを用いている。Ｔｏｓｈｉｂａなどのいくつかの製造者は、より高性能用の２０ｎｓのＳＲＡＭチップを供給し得る。アレイボード上には、計１６ＭＢのスタティックメモリが供給される。
【０６３２】
アレイボードは、ＦＰＧＡデバイス上およびＦＰＧＡ外の両方において、映像ピクセルなどのデータ要素のリアルタイム処理およびフローを管理するために非常に有用なメモリ階層を含む。メモリは、アクセス速度およびメモリサイズに応じてオーガナイズされ得、ＦＰＧＡデバイス、ＦＰＧＡオンチップＳＲＡＭ、オフチップＳＲＡＭ、およびホストコンピュータＤＲＡＭ内にレジスタを含む。これらの各々の速度およびメモリアクセスを以下に述べる。
【０６３３】
各ＦＰＧＡチップは、構築可能論理ブロックまたはＣＬＢの２次元アレイからなる。各ＣＬＢは、Ｘｉｌｉｎｘ  ＸＣ４０００シリーズ内に２つのレジスタと３つのルックアップテーブルとを有する。レジスタは、ＦＰＧＡチップ間およびＦＰＧＡチップ内においてデータ動作をパイプライン化するために非常に有用である。レジスタは、Ｘｉｌｉｎｘデバイスの速度グレードに依存して、３〜５ナノ秒でアクセスされ得る。所望の位置への総伝搬時間を得るためには、ワイヤ遅延がこの図に追加されなければならない。ＸＣ４０２５ベースのアレイボードは、演算アレイ内に３２Ｋレジスタを有し、ＰＣＩおよびクロックチップ内に３４５６レジスタを有する。映像の適用については、レジスタは、個々のピクセルを格納するために非常に有用である。レジスタの総帯域幅は、最高１００ＭＨｚの速度で動作すると仮定して、３兆ビット／秒である。
【０６３４】
ＸｉｌｉｎｘデバイスのオンチップＳＲＡＭは、１０ナノ秒未満の読出し／書込みサイクル時間を有し、レジスタの１６倍高密度である。これらのＳＲＡＭは、ビットを格納するために、ＣＬＢ内のルックアップテーブルを用いる。Ｘｉｌｉｎｘチップ内の各ＣＬＢは、３２ビットのＳＲＡＭとして構築され得る。ＸＣ４０２５ベースのアレイボードの総容量は、ＳＲＡＭ５１２Ｋビットまたは６４Ｋバイトである。これらの内部ＳＲＡＭは、データの走査線をオンチップで格納すラインバッファとして非常に有用である。例えば、畳込みフィルタは、マルチタップＦＩＲフィルタを作成するために、このＳＲＡＭを用い得る。理論的には、オンチップＳＲＡＭは、ＳＲＡＭの全てを用いるアレイボード全体において１秒当たり１．５兆ビットの総帯域幅を用いる。ＳＲＡＭのアドレスラインは、ルーティング制約を与えられた場合、最高約５０ＭＨｚの速度で動作し得る。
【０６３５】
外部ＳＲＡＭはＴｏｓｈｉｂａなどの多くの製造者を介して入手可能であり、２５ナノ秒のアクセス時間および１メガバイトの容量を有しており、ボード上で計１６ＭＢとなる。このメモリは、イメージのフレーム全体を格納するために適している。このストリームの帯域幅ははるかに限定されている。なぜなら、各２５〜４０ｎｓ毎に、メガバイト全体のうちの僅か１バイトが使用可能であるにすぎないからである。このＳＲＡＭ用の総メモリ帯域幅は、３０〜５０億ビット／秒であり、オンチップＳＲＡＭから３オーダー狭い。
【０６３６】
ホストＣＰＵ上のＤＲＡＭは、アレイボード用のイメージのシーケンスまたはプログラムオーバーレイを格納するために適している。ＰＣＩバス上では、３２ビットインターフェースでの１３０ＭＢ／秒および６４ビットインターフェースでの２６０ＭＢ／秒が達成され得る。具体的には、今日までＰＣにおいて最高８０ＭＢ／秒の速度が達成されている。オフボードＲＡＭは１オーダー狭い帯域幅で１オーダー大きい容量を供給し得る。
【０６３７】
最後に、ＲＡＩＤアレイは１０ギガバイト（ＧＢ）以上の容量および１秒当たり約１０〜２０メガバイトのアクセス速度を提供し得る。これは、オフボードＤＲＡＭよりも１オーダー遅い速度で２オーダー大きい容量を提供する。
【０６３８】
アレイボードの１構成は、最高２５ＭＨｚの速度で非バーストバス転送を実行するカスタム設計されたＰＣＩインターフェースを用いる。現存するボード上のＰＣＩチップの全ては、ＸＣ４０１３Ｅ−２デバイスにより置換され得る。ＸＣ４０１３Ｅ−２デバイスは、ＰＣＩバスの最高速度（３３ＭＨｚ）でバースト転送を行うことが可能である。ＰＣＩバスは、転送データに対する単一ワード転送または複数バーストモード転送を用いて動作することができる。単一ワード転送は、標的インターフェースに対して有するタイミングが比較的重要でない傾向がある。バースト転送によるとはるかに高い速度が可能である。なぜなら、アドレスを送るために費やされる時間が、多くのデータサイクルに亘って償却されるからである。バーストモード転送用のタイミングおよび制御論理は、単一ワード転送用よりも重要である。Ｘｉｌｉｎｘ  ＬｏｇｉＣｏｒｅ  ＰＣＩインターフェース設計は、アレイボード上での使用に適合され得る。アレイボードは、１３２ＭＢ／秒でバースト書込みをすることができ、６６ＭＢ／秒でバースト読出しをすることができる。
【０６３９】
図６２は、ＰＣＩインターフェースチップ、データパスチップ、およびバス接続の詳細図を示す。ＰＣＩバスは、標的インターフェースを供給するために数千のゲートを必要とする。インターフェースは、データトランザクションを開始し且つ管理する１組の制御信号と組み合わされた３２ビット多重化アドレスおよびデータバスからなる。制御信号用のターンアラウンド時間は、ＰＣＩ−３２バスインターフェースにとって重要なパスを表す。Ｘｉｌｉｎｘ  ＸＣ４０００−４シリーズチップを用いると、システムは、２５ＭＨｚの速度から３３ＭＨｚの最高ＰＣＩ速度で動作し得る。
【０６４０】
ＰＣＩ６４チップは、ＰＣＩバスの６４ビット拡張に接続し、さらにアレイからホストコンピュータへの主要データ接続を制御するデータパスチップとして作用する。データパスチップは、アレイに対してデータを出し入れすること、および６４ビットＰＣＩバス拡張を管理することに責任を負う。データパスチップは、クロック制御チップに類似の構造を有し、クロック制御チップ同様、ＰＣＩ−３２チップによってプログラム可能である。制御構造は、アレイを介する双方向データ伝送を可能にし、且つデータ通信タスクを管理する。
【０６４１】
図６３は、クロック制御チップの詳細図を示す。クロック制御チップは、アレイ全体への制御信号分布ツリーを制御する。これらの信号は、１以上のクロック信号、並びにアレイからのグローバル制御信号およびデータを含む。ラインは、いずれのアレイチップもがデータをクロック制御チップに送信するように又はデータ管理チップから信号を受信するように構成されるように、双方向である。１組の信号がアレイチップをプログラムする責任を負う。各チップは１６方向スターパターンでクロック制御チップから直接導かれるいくつかの専用プログラミングラインを有する。構築後、これらのラインのうちのいくつか（ＤＩＮおよびＤＯＵＴ）が汎用データＩ／Ｏのために用いられ得る。
【０６４２】
さらに、アレイの各列は、クロック制御チップから８つの信号を受信する。これらの８つの信号は、ＦＰＧＡチップ上の４つの主要クロック信号および４つの２次的クロック信号に達する。各クロック信号は列内の各チップ内の同一のピンに接続する。アレイ内の列は、ボード上のほぼ等時間的領域を表し、その結果、クロック制御チップのレイアウトは、１つの列から次の列まで正当な量のスキューを提供することにより、最小のネットのスキューでボード全体に亘る同期クロック生成するように設計され得る。
【０６４３】
Ｃｙｐｒｅｓｓ周波数シンセサイザは、１ＭＨｚ〜６０ＭＨｚのクロック源をとって、周波数を３５０ｋＨｚ〜少なくとも１１５ＭＨｚの範囲の所望の周波数に乗算／除算することができる。アレイボードは、２つのシンセサイザを有し、２つのシンセサイザは同一のクロック源からの異なる周波数を合成することができる。ＰＣＩバスクロックは、アレイボード用の基本的クロック源を提供することができる。しかし、多くのＰＣシステムは、１％以上のジッタを有し、映像タイミング生成などの精密なタイミング適用のために外部クロック源を必要とする。外部クロック源は、クロック制御チップに直接接続する外部５０ピンコネクタにより達成され得る。この特徴は、アレイボードへの外部インターフェースを処理する際に、大量のフレキシビリティを提供する。
【０６４４】
図６４は、上部および底部の外部コネクタ並びにそれらのピンの詳細図を示す。アレイの上部および底部は、アレイを拡張するため、トーラスを閉じるため、または周辺（Ｉ／Ｏ）デバイスを追加するために適した５０ピンコネクタを有する。４×４アレイのためには、僅か８つのコネクタが必要であるにすぎない。異なるサイズのアレイは、異なる数のコネクタを必要とし得る。いくつかの実施形態において、カメラまたは映像データは、これらの上部および底部コネクタを介してアレイに直接供給され得る。トーラスを閉じることは、長さ僅か１ｃｍの短いジャンパケーブルを、互いに隣接するコネクタ間に取り付けることを含む。複数のイメージ処理システムボードが共にデージーチェーンされて、より大きなトーラスを形成する。他の適用は、特別な制御または信号条件を要する他のリボンケーブルと周辺デバイスとを取り付け得る。
【０６４５】
１秒当たり２ギガバイトを越える総帯域幅は、転送速度が５０ＭＨｚであると仮定して、アレイボード上において４対の５０ピンコネクタを用いることにより入手可能である。この帯域幅は、映像ホログラフィなどの最も要求の厳しい適用に適している。アレイボードのアーキテクチャは、複数のボードを拡張するため、リボンケーブルを用いて外部機器に接続するため、またはアレイボード上に適合するドーターボードを支持するために十分フレキシブルである。５０ピンコネクタは、外部機器に対するリボンケーブル接続を形成し得る。短いリボンケーブル接続は、単一のアレイボード上のトーラスを閉じ得るか、またはドーナツ形状デージーチェーン用の他のアレイボードに接続し得る。アレイボード接続はさらに、ドーターボードに接続することにより、外部インターフェース用の専用ハードウェアを提供する。
【０６４６】
ＦＰＧＡ内で最も電力消費の激しい機能は、出力ピンを駆動することである。本発明の１つの実施形態は、３３ＭＨｚで出力ピンを駆動するために、相関演算要素の各々において、４３の通信ピンおよび最高５６のメモリピンを必要とするため、イメージ処理システム全体がかなりの電力を消費し得る。ＰＣＩ仕様は、バス上において最高５アンペアの電力消費を可能とする。本発明の１つの実施形態は、２４の視差、３２０×２４０ピクセルの解像度で、４．５アンペアの定常状態電力消費を必要とする。
【０６４７】
何百ワットもの電力を消費するようにボードをプログラムすることが可能であるため、アレイボードは、温度の上昇を感知するＤＳ１６２０ディジタルサーモメータ／リレーを含む。このチップは、クロック制御チップに取り付けられる。クロック制御チップは、必要であれば、ボードがオーバーヒートすることを阻止するために、アレイチップの全てを初期の低電力状態にリセットし得る。空気流はボード上でＤＳ１６２０に向けられることにより、アレイの温度上昇を感知することができることを確実にする。
【０６４８】
単一のチップ内の加熱を検出するために、チップが室温にあるときに、各チップ上のリング発振器の周波数が測定され得る。チップの温度が上昇すると、リング発振器の動作周波数は予想可能に低下する。リング発振器の周波数の低下を測定することにより、温度変化が感知され得、いずれのアレイチップがオーバーヒートしていることをも高い信頼度で予測し得る。閾値温度を越えるチップは、システムに対するダメージを阻止するためにシャットダウンされ得る。従って、ユーザは、ＰＣ上のアレイボードを、オーバーパワー状態を懸念することなく直接動作し得る。
【０６４９】
本発明の別の実施形態は、６４０長の走査線の拡張である。これは、１２のＦＰＧＡ内に、各隣接するＳＲＡＭ要素の僅か半分を用いて２つの相関段階を置くことにより達成され得る。光学的フローアルゴリズムもまた、本発明の別の重要な適用である。
【０６５０】
本発明のアルゴリズムは、限定されたメモリリソースを有する小さい低電力の埋め込みプロセッサにおいて実行されるように設計された。本発明は、アルゴリズムの多くの異なるハードウェア実行を想定しており、それらは、現存するコンポーネントを１対１で別のコンポーネントに置換すること、多くのコンポーネント全体を単一のコンポーネントに置換すること、または請求の範囲に記載する本発明の思想および範囲が満たされる限りにおける完全に異なる設計概念を含む。本明細書に記載する特定の実施形態は、サイズ、速度および消費電力のすべてにおいて有効である。
【０６５１】
Ｖ．産業上の利用性
本発明に記載する技術は、広範囲の分野の多くのタスク領域に適用される。多くの場合、ある範囲内で改変される方法およびそれらを具現化した手段により生成される結果は、即刻、独立した適用を提供する。多くの場合、手段および方法は、それぞれの分野で確立された現存する方法と組み合わされることにより、性能の大幅な向上をもたらす。
【０６５２】
Ａ．Ｚ−キーイング
Ｚ−キーイングは、Ｚまたは深度情報を用いて映像光景またはイメージを編集または操作することからなる。Ｚ−キーイングは、以下を含む多くの映像での適用を有し得る。
【０６５３】
（ａ）ブルースクリーニング
映像処理における共通の必要性は、イメージ信号の重畳、例えば、単一の人を合成された表示の前で動かすこと（地図の前の天気予報官を考えられたい）である。この錯覚を起こさせるような表示は、現在、「ブルースクリーニング」と呼ばれる方法を用いて行われている。ブルースクリーニングにおいて、グラウンドに近い映像（すなわち、天気予報官）が色に基づいてその周囲から識別され抽出される。その場合、背景は特定の色、例えばブルーである。所望のキャラクターの分離は、単一色のスレショールディングにより得られ、残りの信号（天気予報官）は所望の背景（天気地図）上に重畳している。
【０６５４】
開示する発明は、このような適用を、従来のブルースクリーニングよりも正確で且つ低価格な様式で行うために用いられ得る。図６８はこのような１実施形態を示す。この図において、ステレオ映像カメラＤ１が、メインカメラＤ２および２次カメラＤ３とからなるように示されている。
【０６５５】
メインカメラＤ２は、映像情報をアナログまたはディジタルのいずれかの形態で捕捉するために用いられる。このような情報がディジタル形態で記録されている場合、情報はフレームバッファＤ４から直接ダウンロードされる。このような情報がアナログ形態で記録されている場合、情報は、当該分野で周知のアナログ／ディジタル変換プロセスを介してディジタル形態に変換される。ディジタル表示はその後ピクセルバッファＤ５内に格納される。これらの要素は、ステレオ映像カメラＤ１の一部分として示されているが、バスまたは何らかの他の接続メカニズムを介してステレオ映像カメラＤ１に接続された別個のコンピュータ内に存在し得ることに留意されたい。
【０６５６】
当該分野で周知であるように、映像データのディジタル表示は、各記録ピクセルのクロミナンスおよびルミナンスの値を含む。１つの実施形態において、各ピクセルのルミナンス情報は、ピクセルバッファＤ５から抽出されて輝度マップＤ６に格納され、それにより各ピクセルの輝度値マップが生成される。他の実施形態においては、クロミナンスを含む他の情報が用いられ得る。
【０６５７】
１つの実施形態において、２次カメラＤ３が、深度計算のためのみに用いられる。この実施形態においては、２次カメラＤ３は、メインカメラＤ３よりも低品質であり得、且つ、深度計算プロセスに関連するピクセルデータのコンポーネント、この例ではルミナンスのみを捕捉し格納するように設計され得る。他の実施形態においては、２次カメラＤ３はメインカメラＤ２と同等の品質を有し得、且つ、入手可能な映像情報の完全な範囲を捕捉し得、それによりＤ３映像を可能にする。
【０６５８】
２次カメラＤ３がルミナンス情報のみを捕捉するように設計されている場合、その情報は捕捉されて２次カメラＤ３用の輝度マップＤ７に直接転送される。それにより、映像情報を別個のピクセルバッファ内に格納しルミナンス情報を抽出する必要が回避される。
【０６５９】
一旦各カメラについて輝度マップが生成されると、視差の値が上記の教示に従って計算され、上述したようにこれらの値から、深度または視差の測定値が導かれる。これらの測定値はその後、ピクセルバッファＤ５の、メインカメラからの映像情報を表す部分をマスクするために用いられる。このようなマスキングは、カメラからの、ある深度を越える情報、例えば、カメラから４フィートを越える全ての情報、ある深度範囲内の情報、または何らかの他の様式で規定された空間容量の情報をマスキングするように設計され得る。マスキングされないピクセルはその後、別のイメージ上に重ねられ得る。別のイメージは、格納されたイメージを表し得るか、または生映像を表し得る。
【０６６０】
１つの可能性のある適用を得るために、開示する発明は、天気予報官のイメージをピックアップしてそのイメージを天気地図のイメージ上に重畳させて表示するために用いられ得る。
【０６６１】
このようなＺキーイング適用において用いられる深度計算の信頼性は、２つの方法で向上し得る。第１に、抽出用に用いられる映像イメージ（例えば、天気予報官の写真）が、背景内でのコントラストおよび背景と抽出すべき前景とのコントラストを最大にするように設計された背景と共に撮影され得る。第２に、背景からの天気予報官のイメージの抽出の場合、深度計算において追加の後工程が追加され得る。後工程において、周囲のピクセルに関して計算された深度と合致しないピクセルまたはピクセル群がその深度に割り当てられる。このようにして、誤ったピクセル計算が排除され得る。
【０６６２】
メインカメラＤ２が調整可能焦点距離（通常そうであるように）である場合、２次カメラＤ３は常に同一の焦点距離を用いなければならないことに留意されたい。なぜなら、そうでなければ、２台のカメラの焦点が発散し、その結果、１つのイメージ内の対象が他のイメージ内の対象よりも近く（且つ大きく）見えるからである。２台のカメラの焦点を同期させる手法は、当該分野で周知であり、機械的手法を含むことにより一方のカメラの焦点距離の移動が直接、他方のカメラの焦点距離の移動を制御し、且つ電子的手法を含むことにより回路がメインカメラの焦点距離を監視しメインカメラの焦点距離が変化するときに自動的に２次カメラの焦点距離を調整する。このような手法は、カメラの焦点距離が調整可能である場合、デュアルカメラを用いる如何なる適用にも用いられ得る。
【０６６３】
（ｂ）背景減算
インタラクティブコンピュータ／映像ゲームは現在、参加者を、合成された表示への再挿入（参加者または参加者を表すアイコンがゲーム画像内で重畳されている）のために参加者の周囲から分離するために、背景減算であるブルースクリーニングの変形を採用している。背景減算はさらに、S. Ahmad、"A Usable Real-Time 3D Hand Tracker"、28thAsilomar Conference on Signals, Systems and Computers, IEEE Computer SocietyPress 1995およびT. Darrell、B. MoghaddamおよびA. Pentland、"Active Face Trackingand Pose Estimation in an Interactive Room"、 Computer Vision and PatternRecognition Conference, San Francisco、67〜72頁、1996に記載されている。
【０６６４】
開示する発明は、このようなアプリケーションを、ブルースクリーニングに置き換わるために用いられるアプリケーションと同様の様式で実行するために用いられ得る。このアプリケーションにおいて、通常映像コンファランスの適用に用いられるタイプの２台の比較的安価なカメラが用いられ得る。このようなカメラはコンピュータモニタに直接搭載され得る。
【０６６５】
（ｃ）多層表示
多くの類似のイメージ合成シナリオもまた、この技術から利益を得る。この書類に記載の深度または「Ｚキーイング」（ブルースクリーニングに対向して）はこのような適用の１つである（T. Kanade、A. Yoshida、K. Oda、H. KanoおよびM. Tanake、"A sterioMachine for Video-rate Dense depth Mapping and Its New Applications"、Computer Vision and Pattern Recognition Conference, IEEE Computer Society Press、196〜202頁、1996を参照のこと）。マルチプルクリッピング平面を有する多層表示は、このＺキーイングのより一般的な形態である。
【０６６６】
例えば、図６９に示す２つの映像シーケンスを考える。映像シーケンスＥ１は、道を走るモーターサイクルＥ３のいくつかのフレームを示し、映像シーケンスＥ２は森の光景のフレームを示す。モーターサイクルＥ３が映像シーケンスＥ２からの森を走っているように示されるように、これらの２つの光景を合成することは、通常、多大な尽力を含む。なぜなら、モーターサイクルは映像シーケンスＥ２からの木のいくつかの前であって他の木の後ろを通過するように示されなければならないからである。
【０６６７】
この合成の問題は、本発明の使用を介して解決され得る。映像シーケンスＥ１および映像シーケンスＥ２がディジタルカメラを用いて（またはアナログカメラを用いて出力をディジタルに変換することにより）撮影されていると仮定する。さらに、このようなカメラの各々が、上述したようにメインカメラと２次カメラを含んでいると仮定する。このような場合、各映像シーケンスの各フレームに関する深度情報は、各ピクセルのディジタル表示のアトリビュート（他のアトリビュートはルミナンスおよびクロミナンスを含む）として、または各フレームに対応する別の深度マップ内に格納され得る。この深度情報は、以下の工程を用いて、映像シーケンスＥ１を映像シーケンスＥ２と合成するために用いられ得る。
【０６６８】
（１）上述したように映像シーケンスＥ１からモーターサイクルを抽出し、その結果映像シーケンスＥ４を得る。
【０６６９】
（２）フレームバッファ内において、抽出されたピクセルを映像シーケンスＥ２からのピクセルと組み合わせ、その結果映像シーケンスＥ５を得る。ピクセルの重複がない部分（すなわち、映像シーケンスＥ２のうち、モーターサイクルと重複しない部分）において、映像シーケンスＥ２からのピクセルを用いる。ピクセルの重複がある部分（すなわち、映像シーケンスＥ２のうち、モーターサイクルと重複する部分）において、カメラに近い方のピクセルを用いる。従って、カメラに「より近い」木の後ろであるがカメラから「より遠い」木の前にモーターサイクルＥ３を示すフレームが構成される。
【０６７０】
開示された技術は、そのような合成が、多数のビデオストリームフレームについてリアルタイムで行われることを可能にする。本発明により、合成において多数の明らかな改良点が得られる。この改良点には、背景が一定のまたは均一な色分布である必要がないこと、被写体が背景色となることを避ける（そうしなければ、表示にホールができる）必要がないこと、動きとともに変化し得る場所に基づいて被写体を識別することができること、ビデオシーンの様々な場所から多数のオーバレイを選択することができること、などがある。最終的な作業生成物を作り出すため、または、ビデオエディタが、どのビデオストリームが従来の合成に最良に使用され得るかを迅速に見極めることを可能にするために、そのような合成を用いることができる。
【０６７１】
（ｄ）ビデオ会議
上で開示されたＺキーイング技術は、デスクトップビデオ会議アプリケーションに容易に適用され得る。そのようなアプリケーションでは、目的の情報は、通常、カメラに比較的近い場所にある。背景情報は、通常関係ないが、前景および背景がともに動きを含み得るため、排除するのが困難である場合もある。背景情報の捕捉および伝送は、性能に関する重大な問題につながる。なぜなら、利用可能な処理力およびバンド幅が、許容可能な解像度で光景全体を伝送するには不十分である場合があるからである。
【０６７２】
Ｚキーイングは、通常はユーザのビデオディスプレイスクリーンに配置されるステレオカメラ対から、ある特定の距離（例えば、５フィート）を越えるところにあるすべての背景情報を排除することにより、そのようなアプリケーションに使用され得る。これにより、関連情報だけを送ることが可能になる。受信者の場所では、前景情報が、送信者のサイトから捕捉された静止背景情報、または、選択可能な背景（例えば、グレー一色の背景、森林の光景を示す背景、など）と組み合わされ得る。
【０６７３】
Ｂ．空間情報
この情報は、視覚的な欠陥、暗さ、または障害物のため、他の方法では判断することができない空間情報を、ユーザに示すために使用され得る。そのようなアプリケーションでは、ステレオカメラ対は、その時にその他の方法ではユーザに視覚的にアクセス不可能な場所に取り付けられる。その後、距離情報を使用して、ユーザに、規定された視野内に入っている対象物についての情報が与えられる。
【０６７４】
各々の場合、これらのアプリケーションは、ステレオカメラ対を使用する。ステレオカメラ対は、環境からのディジタル情報を入力し、センサスステレオ（または、他の非パラメトリックローカル変換）を使用して、深度マップを作成する。この深度マップは、その後、処理されて、ユーザに示される。
【０６７５】
尚、この対象物の検出は、対象物の認識を必要としない。その代わりに、対象物の検出は、単に、所定の経路または視野に存在する構造物の場所を示して、ユーザにその構造物の存在を警告するだけであり得る。潜在的なアプリケーションは多数存在する。
【０６７６】
１．暗がりでの対象物の検出
赤外線カメラは、当該分野において周知である。そのようなカメラは、光景の色またはルミナンスではなく、光景の様々な部分から受け取られる赤外線信号に基づいて、光景を記録する。
【０６７７】
開示された非パラメトリックローカル変換は、赤外線入力からの深度情報を抽出するために使用され得る。そのようなアプリケーションでは、赤外線信号の強度は、ピクセルごとに記録され、その後、この強度を用いて、ローカル変換が作り出される。他のすべての点では、そのようなアプリケーションは、上で開示された態様と同様の態様で動作するが、このアプリケーションでは、可視光線強度の代わりに赤外線強度が使用される。
【０６７８】
一旦、深度情報が抽出されると、特定の距離または特定の空間領域内に入る対象物は、背景と区別され得る。そのような対象物についての情報は、ビデオスクリーン上でユーザに示され得、赤外線ピクセルが、表示されるイメージ全体から引き出されて表示される対象物を表す。そのような情報はまた、アラームなどの自動システムに示され得る。そのような用途は、アラームシステムが、ユーザの介入も可視照射もなしに、受動的に動作して、対象物をその場所で区別することを可能にし、動き分析を使用する場合には、対象物をその動きで区別することを可能にする。
【０６７９】
２．死角(obscured view)における対象物検出
開示する発明は、死角のため通常ユーザには見えない領域における対象物の検出に用い得る。これは、複数の重要な死角が存在し、ユーザがリアルタイムで決定を行うことを要求されるようなアプリケーションにおいて、特に有用であり得る。このような状況下において、ユーザは複数のスクリーン上で同時にリアルタイムの画像(picture)を観察かつ分析することは不可能であり得るため、フル映像の用途は限られ得る。開示する発明は、Ｚキーイング用の深度情報を用いることにより、対象物が予め設定された距離内に来たときに警告を発した後特定の距離内にあるイメージの部分のみを表示することでこの問題を解決し得る。
【０６８０】
例えば、長いまたは関節部を有する(articulated)大型トレーラー(bigrig)を後進させるのは困難な作業であり、作業者が自身の乗り物と潜在的な障害物との間の関係についての適切な空間的モデルを得ることができないことのため、より困難さが増す。範囲センサ(rangingsensor)の出力の俯瞰図（立面圧縮された）により、作業者の近傍にある対象物ならびに、それらに対する作業者の乗り物の位置および方向のディスプレイされた空中展望が、作業者に提供される。キャブディスプレイにより、作業者は自身の制御および周囲に対して最適な注意を払うことを可能にし、安全な操作が可能になる。
【０６８１】
このようなシステムを、大型トレーラーＡ１を示す図６５に図示する。大型トレーラーＡ１の後部周辺には、ステレオカメラ対Ａ２〜Ａ７が並べられている。これらのカメラは、大型トレーラーＡ１の後部ならびに大型トレーラーＡ１の側部の後部に最も近い部分の連続的なカバレージ(coverage)を提供するように、配置されている。
【０６８２】
大型トレーラーＡ１が後進状態にされたとき、Ａ２〜Ａ７は、範囲処理を開始する。上記に開示するように深度をフィルタとして用いることにより、カメラ対は、特定の範囲（例えば５フィート）内の対象物のみをユーザに知らせる。
【０６８３】
大型トレーラーＡ１は、カメラＡ２〜Ａ７の予め設定された範囲内の画素のみを出力する映像ディスプレイを有するように設計され得る。あるいは、大型トレーラーＡ１は、図６６中Ｂ１として示すような単純で安価な分割ディスプレイを有するように設計され得る。この分割ディスプレイにおいて、各分割部分(segment)は、ステレオ対のうちいずれか１つの視野(field of view)を表している。従って、分割部分Ｂ２はカメラ対Ａ２からの情報を表し、分割部分Ｂ３はカメラ分割部分Ｂ３からの情報を表す、といった具合である。ディスプレイはまた、全ての観察された分割部分を統一化ディスプレイに結合してもよい。
【０６８４】
ディスプレイＢ１は、対応するカメラから特定の距離内（例えば５フィート）に対象物が来たときに分割部分がまず照明されるように設計され得る。ディスプレイＢ１はさらに、より近い距離（例えば４フィート）にある対象物の存在が、視覚的に区別され得る方法、例えば分割部分の照明を増大する、分割部分を点滅させる、分割部分の色を変えるなどにより、ユーザに表示されるように設計され得る。ディスプレイＢ１はさらに、対象物がさらにより近づく（例えば３フィート、２フィート、および１フィート）に従って分割部分が変化し(alter)、対象物が特定の最小距離（例えば６インチ）内に来たときに可聴形態の警告が発されるように設計され得る。
【０６８５】
Ｂ１のようなディスプレイは当該分野において周知であり、大型トレーラーの運転手に対象物の近さを告知するために、多くの異なる機構を用い得る。非パラメトリックローカル変換(non-parametric local transform)アルゴリズムを深度計算に用いることは、このアプリケーションにおいて大きな利点を有する。大型トレーラーＡ１の後部および側部に位置するカメラからの映像データをを単に表示することは、数個の効果な絵像ディスプレイを必要とし、運転手に大量の情報を呈示してしまうが、そのほとんどは任意の時刻において運転手には無関係であったりする。また、対象物と背景とを示す不異端な映像ディスプレイのみに基づいて運転手が対象物への距離を決定することや、シーン中の比較的小さな構造物に適切に注意を払うことは、非常に困難であり得る。開示するハードウェアおよびソフトウェアは、これらの問題を緩和し得る。
【０６８６】
大型トレーラーＡ１をアプリケーション例として用いたが、開示される発明は、ユーザの視界が隠される領域においてリアルタイムの障害物検出および回避を要求する任意のアプリケーションに用いられ得る。また、本発明は、より多くのあるいはより少ないカメラを用いて実施することができ、これらは図６５とは異なって設けられ得る。
【０６８７】
３．目の不自由な人のための対象物の検出
このシステムによって生成されるレンジマップは、目の不自由な人に対して、触覚または聴覚で知覚される環境の表示を提供する。これらのデータを用いるために、優れた「光景理解」は必要ない。なぜなら、人は、レンジ測定値の取得を方向づけ、これらを解釈することがかなりできるからである。レンジを測定する「長いステッキ（Long Cane）」を目の不自由な人に与えることで即座に使用される。ヘッドまたは他の動きによってレンジングシステムを方向づけることで、光景のそのエリアにおける選択可能ないくらかの距離レンジにわたって知覚可能なものすべてに対する深度が伝えられる。フィードバックは、シーケンシャルまたはパラレル（２次元）な様式の聴覚手段（ピッチ、強度等）、触覚コーディング（単一または多重フィンガリングデバイス（T.H.Massie and J.K. Salibury, "The Phantom Haptic Interface: A Device forProbing Virtual Objects," ASME Winter Annual Meeting, Symposium on HapticIntefaces for Virtual Environment and Teleoperator System, Chicago, November1994; J.P. Fritz, T.P. Way and K.E. Barner, "Haptic representation ofscientific data for visually impaired orblind persons, "Proceedings ofCSUN Technology and Persons with Disabilities Conference, 1996）、接触感知用に配置されたまたはフィンガフィードバック用に構成されたアレイ（J.Fricke and Baehring, H., "Design of a tactile graphic I/O tablet and itsintegration into a personal computer system for blind users, "Electronicproceedings of the 1994 EASI High Resolution Tactile Graphics Conferenceを参照）、およびシーケンシャルまたはパラレルな様式で深度信号を通信する他の手段を通して行われ得る。T.Heyes,"Sonic Pathfinder: Electronic Travel Aids for the Vision Imparied, Remotesensing using Ultra-Sonics,"  Perceptual Alternatives, Melbourne,Australia; P.Meijer, "An Experimental System for Auditory Image Representations,"IEEE Trans. Biomedical Engineering, V39, N2, 1992, 112-121頁を参照のこと。
【０６８８】
４．ディジタルマッピング用深度推定
本発明はまた、むしろ従来の方向測定法において多く応用される。例えば、建築における写真測量分析、工業的視察、ならびに、例えばディジタル地形マッピングおよび顕微鏡的表面評価におけるマクロおよびマイクロレベルでの距離測定である。これらすべてにおいて、リアルタイムセンサス深度演算を導入することによって、より迅速かつより安価なマッピングが可能になり、開発のための新たな機会が得られやすくなる。
【０６８９】
Ｃ．オートフォーカス
従来のオートフォーカス技術は、比較的未完成の傾向にある。例えば、テレビまたはフィルム製造において、動いている対象物（例えば、俳優）に焦点を当てる場合、カメラオペレータによる手動制御、または特定距離において焦点を予め設定しておく必要が頻繁にあり、俳優は、正確にかつ予め設定されたように移動することが要求される。ホームビデオカメラにおけるオートフォーカスは、大抵、イメージの「ファジネス（fuzziness)」の度合いを解釈し、ファジネスを減少させ、対象物間で明確な境界線を形成するように焦点を変更する回路からなる。
【０６９０】
開示される発明は、主要カメラをオートフォーカスするために用いられ得る。１つのこのような応用において、図６８を参照しながら上述したのと同様の主要カメラおよび第２のカメラが用いられ得る。ショットの初めにおいて、主要カメラＤ２および第２のカメラＤ３は、移動する対象物の１つの局面、例えば、俳優の目に焦点が当てられ得る。フレーム毎に焦点対象物を追跡するために、開示される非パラメトリックローカル変換が用いられ得る。各場合において、同じカメラからの各フレームと前のフレームとを比較し、ローカル変換を用いて、後のフレームのどの近隣のピクセルが、前のフレームの参照ピクセルと同じであるかを決定することによって、焦点対象物は、マスターカメラおよび第２のカメラによって形成されるフレームにおいて識別され得る。適切に較正されたカメラ配置が用いられる場合、このような比較によるイメージ修正は必要ない。
【０６９１】
次のフレームにおいて焦点対象物が一旦識別されると、焦点対象物への距離が１つのフレームから次のフレームへと変化するかどうかを決定するために、深度測定値が用いられ得る。深度が変化する場合、カメラの焦点距離は、このような変化を反映するように自動的に変更される。同様に、多数の特徴が、コレクションに対する最適なフォーカス制御のために追跡され得る。
【０６９２】
Ｄ．映像圧縮
格納および伝送のための映像イメージの圧縮は、コンピュータおよびビデオ産業が直面している最も困難で重要な問題の１つである。ＭＰＥＧおよびＭＰＥＧ２などの従来のシステムは、フレームの他の近隣フレームからの変化を表す部分を格納および伝送し、光景の非変化部分は前のフレームに基づいて再生成されるように設計される。
【０６９３】
このような圧縮アルゴリズムは、背景が多くのクラッタおよび／または動きを含む映像シーケンスの場合には困難となる。背景は映像シーケンスのためには重要ではないかも知れないが、従来の圧縮システムでは、「重要な」前景の動きと「重要ではない」背景の動きとの間を区別するのは困難であり、従って、両タイプの情報を同等に処理するため、多大な帯域幅が必要となり得る。利用可能な処理パワーおよび／または帯域幅によってはこのような映像シーケンスを扱うことができない場合は、画像の質が目視によっても低下し得る。
【０６９４】
開示した本発明は、背景の特徴を前景の特徴から容易に区別し得るようにすることによって、圧縮アルゴリズムにおいて有用となり得る。上述のタイプのデュアルカメラシステムは、映像シーケンスのための深度情報を計算および格納するために使用され得る。このような深度情報は、各ピクセルの属性として、ルミナンスおよびクロミナンス情報を格納するために用いられる方法と類似の方法で格納され得る。
【０６９５】
制限された帯域幅のみが利用可能な場合は、このような情報により、圧縮アルゴリズムを、より重要な前景情報を送ることに集中させ得る。例えば、前処理ステップでは、光景の背景（例えば、カメラから１０フィート離れた位置のすべてのもの）を表すピクセルを１つおきに取り去って、直前のフレームからの背景ピクセルに置き換えてもよい。これにより、イメージ全体（背景および前景）はフレーム１に対しては格納されるが、フレーム２は、フレーム１の背景にフレーム２の前景を重ねたものを表す。フレーム１では隠れているがフレーム２では前景の移動によって可視となる背景ピクセルは、フレーム２の背景から取り出すことができる。本システムは、ユーザが背景の動きが特に重要である映像シーケンスを選択し、このようなシーケンスを上述のプロセスから除外することができるように設計され得る。
【０６９６】
これらの変更されたフレームは次に、ＭＰＥＧエンコーダなどの標準圧縮装置に供給され得る。開示された本発明は、フレームからフレームへの背景の変化を最小限にすることによって、このようなエンコーダがより迅速に動作して、エンコードされた映像ストリームを、より狭い帯域幅しか必要とせずに出力することを可能にし得る。
【０６９７】
もしくは、深度情報は、このような情報を考慮に入れるように設計されたアルゴリズムによって直接使用され得る。上述のＺキーイングは、このようなアルゴリズムの１つの極端な例を構成する。すなわち、背景情報を、伝送前に映像シーケンスから完全に除去し得る。これは特に、デスクトップ映像会議などの、背景情報が重要ではないアプリケーションにとって有用であり得る。
【０６９８】
もしくは、比較的静的におよび均一に変化している背景情報は、各フレームに対してシングルユニフォームベクトルを使用して伝送され得る。例えは、カメラがクローズアップまたはミディアムショットで演技者を追跡するように移動している場合は、カメラの視野角が変化しているという事実によって生じる変化以外は、背景は完全に静止状態であり得る。このような環境下では、背景イメージの変化は比較的単純な一方向のシフトを表し得る。このようなシフトはシングルベクトルによって容易に表され得る。このシングルベクトルは、復号化アルゴリズムに、前の背景を用いるべきであるが、特定の方法でトランスレートさせるべきであると知らせ、前のフレームからシフトインされた情報が供給される。
【０６９９】
Ｅ．液浸型ディスプレイ
仮想空間および一般に液浸型(immersive)ディスプレイは、参加者の目線の位置および方向が、イメージが参加者が見るために生成される各瞬間において既知であることをその基本的な要件とする。映像ディスプレイが観察者の知覚予想と密接に連結しているとき、すなわち観察者が見るイメージが観察者の動きと一貫しているときのみに、経験が確実なものとなる。この連結は、現時点では、ユーザが外部に装着するセンサの使用によって実現されているが、これらのセンサは、経験にとって邪魔になり気を散らすものである。
【０７００】
そのようなセンサは開示された発明に基づく映像オリエンテーションシステムによって置換され得る。そのようなシステムにおいては、１以上のステレオカメラ対が、空間内のユーザの頭の位置と方向を正確に決定するために使用される。開示された非パラメトリックローカル変換は、上述した方法に類似の方法で、ユーザの頭の特定の位置の移動を追従するために用いられ得る。そのようなリアルタイム頭トラッキングは、頭の位置とオリエンテーションを正確に突き止めるように設計されたセンサの必要をなくす。
【０７０１】
Ｆ．目線トラッキング
対象目線方向のトラッキングは、長年に亘り科学研究の領域の１つであった。対象目線方向のトラッキングは、精神物理研究に始まり（例えば、H.D.CraneとC.M.Steele、"Generation-V Dual-Purkinje-ImageEyetracker"、Applied Optics 24(4) 527〜537頁、1985年；H.D.Crane、"ThePurkinje Image Eyetracker"、Visual Science and Engineering、D.Kelly編集、DekkerPublishing、1994年参照）、より最近ではヒューマン−コンピュータインタフェースの領域において試みられている（例えば、R.J.K.Jacob、"EyeTracking in Advanced Interface Design"、Virtual Environments andAdvanced Interface Design、258〜288頁、W.BarfieldとT.A.Furness編集、OxfordUniversity Press、New York、1995年参照）。多くのこの研究は外部に装着された感知装置（例えば、Skalar Instruments,Inc.（現在はBruxton Corporation）の眼トラッキングのための電磁気鞏膜サーチコイルシステム参照）又はアクティブイルミネーション（LEDエミッタのような）を使用していた。
【０７０２】
目線の非侵入型の監視は好まれるが、これは余り一般的でなく、より難しい。目線トラッキングは、高速処理が必要であることによってさらに難しくされている。高速処理が必要なのは、眼が非常に高速に動き、人間が３０ミリ秒（映像の１フレーム）よりはるかに小さいオーダーの潜伏時間で知覚するからである。眼の位置及び視線方向を知ることにおける遅延は、決定及び適切な情報の表示における遅延を導く。このことは、眼の緊張、疲労、吐き気、及び視覚者側の苛立ちを引き起こす。
【０７０３】
正確性はもう１つの困難である。目線推定の解像度が足りないことにより、多くの目線関連タスクは性質上定性である。対象は空間の狭い領域内に位置することが必要であり、分析はこの位置についての仮定に基づいている（例えば、R.J.K.Jacob、"Eye Tracking in Advanced Interface Design"、VirtualEnvironments and Advanced Interface Design、258〜288頁、W.BarfieldとT.A.Furness編集、OxfordUniversity Press、New York、1995年参照）。
【０７０４】
本発明は両方の眼の同時トラッキングをも可能にし、これにより固定位置と目線位置とが決定され得る。
【０７０５】
従来技術の目線トラッキングシステムは不便なセンサか、ユーザが小さな所定の領域に位置することかのいずれかを要求する。開示された発明は、目線トラッキングシステムが高速かつ正確にユーザの頭と眼の位置を識別することを可能にすることにより、そのような制限を回避するために使用され得る。このことは頭を背景（背景は大きく離れている）とは別の物体として識別することにより達成され得る。また、形状及びオリエンテーションに関する正確な情報を提供し、虹彩位置及び方向を局在させることにより達成され得る。
【０７０６】
視覚者の目線位置及び目線方向の認識が要求される任意のタスクは、ここで述べられるシステムから恩恵を受ける。これらのアプリケーションの近い範囲のエンドにおいては、コンピュータオペレータは、自分の行動場所を制御し、仮想ページを持ち上げて動かし、オブジェクトを選択し、インタラクティブ編集コマンドを起動するための、手で操作するマウスポインティングデバイスよりむしろ、自分の眼を使って、自分のディスプレイの前に座っていることができる。コンピュータオペレータがウェブサイトに移動すると、コンピュータオペレータの注意は目的を説明するために監視されている。これらのアプリケーションのより遠いエンドにおいては、３次元動画鑑賞者はディスプレイ環境の中で動きながら、自動立体視ディスプレイシステムを見ることができる（例えば、R.EzraらとSharp Labs、"Observer Tracking autostereoscopic 3Ddisplay system"、Photonics West Conference、San Jose CA, 3012-23、1997年）。この自動立体視ディスプレイシステムは、その位置にかかわらず適当な画素データを鑑賞者の目に向けさせる。
【０７０７】
見る方向の認識は、視覚者の視覚感度に合うように選択された、変化するデータの品質を提供することにより、表示の帯域幅を削減するためにも使用され得る。例えば、高い分解能は視覚者の中心窩視覚のために提供され、低い分解能は周辺に向かって減少する品質で提供される。このことは、自動立体視ディスプレイシステムにおいて、相当の計算上の通信帯域幅を節約する。
【０７０８】
Ｇ．視点従属ディスプレイ
仮想現実システムは、一般にユーザに人工的な環境を通じてナビゲートすることを可能にする。しかしながら、そのような環境は一般に動く物体によって構築されている。映像品質のイメージに基づいた仮想世界の創造は、一般に経済的に合理的な方法で実行することが困難であると考えられている。
【０７０９】
１．範囲マップを使用した視覚合成
本発明は視覚補間を可能にするディスプレイを含む、映像品質の仮想世界ディスプレイの創造を可能にする。視覚補間は、カメラによって得られたことがない透視光景を表示することを可能にする。例えば、M.LevoyとP.Hanrahan、"Light Field Rendering"、SIGGRAPH 97.ACM、及びD.Scharstein、"Stereo Vision for View Synthesis"、Computer Visionand Pattern Recognition Conference、 San Francisco、852〜858頁、1996年を参照のこと。
【０７１０】
範囲推定と関連するイメージ画素は、あたかも別の視野（perspective）から見たかのようにイメージ上に置かれうる。このことは視点従属ディスプレイの合成を可能にする。例えばアフリカの自然保護領域のような遠隔地点の実データが得られた状況を考える。このとき視覚者は、他のどこかに位置して、この範囲に基づく視覚合成を通じて同じ場所であるように見える所を動き回る経験を与えられている。２以上のカメラが像を補正し、範囲はカメラ対の間で計算される。我々および他の者（例えば、D.Scharstein、"StereoVision for View Synthesis"、Computer Vision and Pattern RecognitionConference、 San Francisco、852〜858頁、1996年参照）は、この知覚的な再構築オフラインを実証した。リアルタイム範囲決定（ranging）はそのような方法に親しむ者によって、従前に実証された非リアルタイムディスプレイから完全に直接的に開発されることを期待され得る。
【０７１１】
２．３Ｄ光景モデリング
特定の場所の３次元表現の構築は、上述の範囲決定システムによって促進される。例えば、建物の内部はステレオイメージングシステムによって連続して観察され得る。ここで、連続範囲記述は、範囲セットの間の通信を確立するための、距離測定と動きトラッキング特徴の両方を使用して統合されている（例えば、H.BakerとR.BollesとJ.Woodfill、"Realtime Stereo and MotionIntegration for Navigation"、ISPRS Spatial Information from DigitalPhotogrammetry and OCmputer Vision、1994年９月、Munich Germany、17〜24頁参照）。そのような連続した範囲および強度情報の蓄積は、種々の視点からの自動車又は家の連続したリアルタイム観察に実証されるような、物体ジオメトリのモデリングに等しく適用可能である。
【０７１２】
図６７は、この適用における本発明の使用の単純な例を表す。この図において、ステレオカメラ対Ｃ１およびＣ２は、カメラ対の視界が例えば直交する様式で交差するように配置される。この視界は建物Ｃ３と木Ｃ４、Ｃ５を含む。
【０７１３】
上述したように、各カメラ対は光景のデジタルイメージを捕捉し格納する。各カメラ対はまた、各ピクセルについての深度情報を計算する。１つの視界の１つの物体は、２つのカメラ対の関係と各物体への距離を考慮に入れることによって、他の視界の同じ物体と関連づけられ得る。この方法において、ステレオカメラ対Ｃ１により捕捉された建物Ｃ３のイメージは、ステレオカメラＣ２により捕捉された同じ建物のイメージと関連づけられ得る。深度情報を有効かつリアルタイムに捕捉することにより、開示された発明はそのような関連づけを可能にする。関連づけには、各カメラ対からの各物体の距離の認識が要求され、そのような距離情報はそれから各イメージに示されるように各物体を関連づけるために使用される。
【０７１４】
１つの物体が２つの視界において関連づけられると、その物体の３次元イメージが作成される。例えば、図６７において、建物Ｃ３の前面および１つの側面のイメージが入手できてもよい。この建物の他の側面は、イメージの他の側面に配置されたカメラ対を要求する可能性がある。
【０７１５】
３次元イメージが構築されると、本来の知覚された各物体への距離と共に、ユーザの知覚された物理的な位置を考慮に入れて、そのイメージを通じてユーザをナビゲートすることが可能となる。
【０７１６】
この例においては、範囲情報の登録は同時に得られた深度データセットの２つの対を一致させることによって得られた。別のアプローチはデータが直接統合され得るように予めカメラセットを較正し、又は上述したように、個別の特徴を追従するためにカメラの動きを使用することである。個別の特徴を追従するためにカメラの動きを使用する場合、観察された動きはデータ統合のためのカメラ位置の獲得を明らかにする。
【０７１７】
Ｈ．動き分析
提示されたリアルタイムシステムの動きトラッキング能力は、信頼できる高速空間情報の欠乏により分析方法が妨げられていた適用領域を開ける。我々の範囲と動きの結果は特定のプロセスの動的モデルと共に取得されて、高度な注釈、制御および測定可能性を与える。
【０７１８】
例えば水泳、ランニング、空手、又はダンスのような、特定の一連のアクションを要求するスポーツ又は物理的な活動の研究を考える。そのような連続を、「本来の」活動を行う方法を表現する、理想化された連続に関連づけることはしばしば有用である。そのような活動の２次元イメージは、特定の価値ある情報を捕捉し損なうことになる。それは、そのようなイメージでは、例えば運動者の身体の部分への距離の正確な計算ができないからである。
【０７１９】
開示された範囲を発見する発明は、特に図６７に図示されるように、直交する視界に方向付けされたステレオカメラ対と共に使用されたとき、上記のような用途に使用され得る。そのようなカメラは、熟練した運動者を表現するイメージおよび深度情報を記録するために使用され得る。そのような情報は、その後、トレーニングする運動者を表現するイメージおよび深度情報の上にオーバレイされ得る。このことは、例えば、前方、後方、側方、上面視点から示されるオーバーレイされたイメージを生ぜしめ得る。それぞれの場合において、熟練者の動きと練習生の動きとの間の差は強調され得る。
【０７２０】
そのような能力は、歩行分析又は身体治療評価におけるように、機能不全に対して等しく有効である（D.A.Meglan、"Enhanced Analysis of Human Locomotion"、OhioState University、PhD Thesis、1991年参照）。
【０７２１】
Ｉ．入力装置としての手の使用
もしステレオカメラ対がユーザの映像スクリーンディスプレイ上又はその近くに位置しているならば、開示された発明は、ディスプレイの前の規定された視界内において起こる、手のジェスチャーのリアルタイム認識を可能にする。従って、例えばステレオカメラは、仮想彫刻アプリケーションにおけるユーザの手の位置およびオリエンテーションを識別するために使用され得る。仮想彫刻アプリケーションにおいては、手の位置およびオリエンテーションが追従されることにより、ユーザがスクリーン上に表現される仮想物体を「形作る」ことが可能にされる。同様に、特定のユーザのジェスチャー（例えば、スクリーンを指し示す）は、標準のマウスと組み合わされて、又は標準のマウスの代替として、仮想ディスプレイの制御メカニズムとして使用され得る。例えば、R.J.K.Jacob、"Eye Tracking in Advanced Interface Design"、VirtualEnvironments and Advanced Interface Design、258〜288頁、W.BarfieldとT.A.Furness編集、OxfordUniversity Press、New York、1995年を参照のこと。
【０７２２】
Ｊ．高度なナビゲーションおよび制御
高度なナビゲーションおよび制御の能力は、本明細書において述べられているリアルタイム範囲決定および動作分析システムが、移動する乗物に取り付けられることにより実現可能となる。単純なナビゲーションタスクにおいては、範囲決定システムは乗物の前の地表が平坦かつ水平ではない場合に、警告として作用する。このことは窪みのような障害を識別するために使用され、あるいは乗物が舗装された地表から外れる危険にある場合を判定するために使用される。
【０７２３】
範囲決定システムによって描写されるより複雑な形状の分析により、障害の検知および弁別、移動する物体のトラッキング、および多数の移動する装置の整合が可能となる。交差点に置かれると、範囲決定および動きシステムは交通、歩行者および他の相互作用する通りの要素を監視することができ（N.FerrierとS.RoweとA.Blake、"Real Time Traffic Monitoring"、2ndIEEE Workshop on Applications of Computer Vision、Sarasota、Florida、1994年12月5〜7日；D.BeymerとP.McLauchlanとB.CoifmanとJ.Malik、"AReal-Time Computer Vision System for Measuring Traffic Parameters"、ComputerVision and Pattern Recognition Conference、Puerto Rico、1997年）、ある所定の状況のための特定の行動（子供が車の座席に座っていると判定されたときにエアバッグの力を緩和する、猫・鹿などであると判定された侵入者に対して音又は水を向ける、制御された区域に入る人にその存在の危険を警告し又はその回りの危険な活動の向きを変える、ごみ・再生利用可能物・果物などのような種々の素材を調査し評価する等のような行動）を呼び起こす特殊化された警報として機能することができる。
【０７２４】
乗物の周辺に設置されると、本発明はナビゲーションおよび障害回避制御のために情報を提供する。前方の範囲および動き測定は、乗物自体の道路に対する位置と共に、他の乗物および潜在的な障害の存在、位置および速度を示す。側方および後方の範囲測定は、乗物の横方向のドリフト、他の近づく乗物、および一般的な操作状態についての等しく重要な情報を提供する。本発明の処理のリアルタイム高帯域幅の性質は、乗物の護送を高速移動に安全に近接して結合させることを可能にする。それは、パーキングおよびドッキングのような、近い範囲の操作における自動ナビゲーションの基礎として使用され得る。
【０７２５】
ＶＩ．要旨
要約すれば、本発明の様々な局面には、ソフトウェア／アルゴリズム、ハードウェア実現、および応用が、単独でまたは組み合わせて含まれる。これらの実施形態は、データの組を分析し、それらの相関性を決定し、そして、これらのデータの組に含まれる実体的(substantive)属性情報を抽出する。ある形態において、上記データの組は、何らかのプロセスの内部で、または何らかの外部刺激から得られる。別の形態の１つにおいて、これらのデータの組は、同じ光景を観察する空間的に変位させた２つのカメラからのイメージデータである。上記の様々な実施形態によって、データをより使用可能な形式に変換し（例えば、センサス変換）、その後、変換されたデータを相関させて、２つのデータの組の関係から導出され得る何らかの所望の実体的な情報を表す出力を発生させる。
【０７２６】
本発明のいくつかの実施形態は、イメージ処理の分野において、ファクショナリズムを許容する局所変換(local transform)を規定および適用する。さらに、本発明は、最先端技術からの進歩を明らかにするその他の特性を有する：（１）高い感度−−局所変換は、所与のイメージ中に有意な局所的変化を提供するデータを生成し、高密度組の結果値を生成する。いくつかの他の方法は低密度な(sparse)結果を生成する；（２）高い安定性−−本スキームは、２つのイメージ間における対応点の近傍において同様の結果を生じる；（３）上記変換は、イメージゲインまたはバイアスにおける、センサまたはカメラハードウェアの相違に対して不変の結果を生じ、これにより、適切にステレオ像(imagery)を処理する；（４）本発明は、他のアルゴリズムよりも空間効率的である。必要とされるのは、小さな格納バッファ組および２つの処理用イメージである。この空間効率特徴は、ハードウェア実現のために必要なオーバーヘッドを低減し、より多くの局所参照を用いることによって処理速度を高める；（５）本発明は、各ピクセル、各視差毎に最大でも４つの命令しか必要としない内部ループを有するので、他のアルゴリズムよりも時間効率的である；（６）本発明のいくつかの実施形態は、ステレオ読み値が信頼性を持つ、または信頼性を持たない点を決定するための、対象オペレーション(interestoperation)と呼ばれる特有の信頼尺度を含む；（７）リアルタイム形状(real-time feature)トラッキングおよび局在化を必要とする様々な規律(disciplines)に対する本発明の産業的な利用方法は、現時点では利用可能ではない機能性を得ることを可能にし、プロセスの信頼性を大幅に高める。
【０７２７】
上記の発明の好適な実施形態の説明は、説明および記載の便宜上示したものである。これは全てを網羅しているわけではなく、開示されている厳密な形態に本発明を限定するものでもない。明らかに、多数の改変例および変形例が当業者には明らかである。当業者であれば、本発明の趣旨および範囲から逸脱することなく、本明細書中に記載した応用に代えて他の応用を使用し得ることが容易に理解されるであろう。従って、本発明は、以下に記載の請求の範囲によってのみ限定される。
【図面の簡単な説明】
【０７２８】
本発明の上記の目的および記述は以下の文と添付の図面を参照してよりよく理解され得るであろう。
【図１】図１は、二つのセンサまたはカメラが光景に関するデータを捕捉し、そのデータを演算システムに供給する本発明の特定の産業用途を示す。
【図２】図２は、本発明が実行されるＰＣＩ準拠バスシステムを形成するブロック図を示す。
【図３】図３は、演算要素、データパスユニット、クロック制御ユニット、および、ＰＣＩインタフェースユニットを含む本発明の特定のブロック図表示を示す。
【図４】図４は、様々な機能がデータを演算し、取り扱い、操作して、他の有用なデータを発生させる本発明の一つの実施形態の高レベル表示を示す。
【図５】図５（Ａ）は、右イメージが参照として指定されたときの所与の視差に対する相対ウインドウ位置を示し、一方で図５（Ｂ）は、左イメージが参照として指定されたときの所与の視差に対する相対ウインドウ位置を示す。
【図６】図６（Ａ）および図６（Ｂ）は、Ｘ×Ｙ輝度イメージおよびそれらそれぞれの参照イメージ要素に関した二つの特定の９×９変換ウインドウを示す。
【図７】図７は、参照位置（ｘ，ｙ）に中心を置かれたセンサスベクトルを計算するために使用される９×９センサスウインドウにおけるイメージ輝度データの一つの特定の選択およびシーケンスを示す。
【図８】図８（Ａ）から図８（Ｃ）は、イメージデータを横断する動作ウインドウの動きを図示する。
【図９】図９（Ａ）から図９（Ｃ）は、本発明の一つの実施形態を略して図示する。
【図１０】図１０（Ａ）は、本発明の一つの実施形態がどのようにして演算するかを決定する多数のエッジ状態に関連した１０個の特定領域を示し、図１０（Ｂ）は、他の９個の領域に関する領域１０の相対サイズを示し、図１０（Ｃ）は、領域１０の左最上部角の適用可能なウインドウの位置を示す。
【図１１】図１１（Ａ）から図１１（Ｊ）は、動作ウインドウのサイズが７×７である場合の１０個の領域の位置とサイズを図示する。
【図１２】図１２は、二つのウインドウの相関整合を示す。
【図１３】図１３（Ａ）は、相関合計バッファの構造を示し、図１３（Ｂ）は、同一の相関バッファの概略三次元表示を示す。
【図１４】図１４（Ａ）から図１４（Ｄ）は、動作ウインドウに関する列合計アレイ［ｘ］［ｙ］の使用および演算を図示する。
【図１５】図１５（Ａ）から図１５（Ｄ）は、相関合計、対象計算、および、視差計数計算において使用される列合計アレイ［ｘ］［ｙ］の例示的な更新シーケンスを示す。
【図１６】図１６（Ａ）から図１６（Ｇ）は、左右一貫性検査を導入する図を与える。図１６（Ａ）から図１６（Ｄ）は、左イメージまたは右イメージのいずれかが参照として指定されるときの視差に対してシフトする相対ウインドウを示す。図１６（Ｅ）および図１６（Ｆ）は、左および右センサスベクトルの部分を示す。図１６（Ｇ）は、相関合計バッファの構造およびそこに格納されたイメージ要素と対応する視差データを示す。
【図１７】図１７は、本発明の一つの実施形態によるサブピクセル推定を図示する。
【図１８】図１８は、様々なオプションを有する本発明の一つの実施形態の高レベルフローチャートを示す。
【図１９】図１９は、センサス変換演算のフローチャートおよびセンサスベクトルの発生のフローチャートを示す。
【図２０】図２０は、すべての領域１から１０に対する相関合計および視差最適化機能の一つの実施形態の高レベルフローチャートを示す。
【図２１】図２１は、領域１および２に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２２】図２２は、領域３および４に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２３】図２３は、領域５に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２４】図２４は、領域６に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２５】図２５は、領域７および８に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２６】図２６は、領域９に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２７】図２７は、領域１０に対する相関合計および視差最適化機能の一つの実施形態のフローチャートを示す。
【図２８】図２８は、領域１から１０に対する対象演算の一つの実施形態の高レベルフローチャートを示す。
【図２９】図２９は、領域１および２に対する対象演算の一つの実施形態のフローチャートを示す。
【図３０】図３０は、領域３および４に対する対象演算の一つの実施形態のフローチャートを示す。
【図３１】図３１は、領域５に対する対象演算の一つの実施形態のフローチャートを示す。
【図３２】図３２は、領域６に対する対象演算の一つの実施形態のフローチャートを示す。
【図３３】図３３は、領域７および８に対する対象演算の一つの実施形態のフローチャートを示す。
【図３４】図３４は、領域９に対する対象演算の一つの実施形態のフローチャートを示す。
【図３５】図３５は、領域１０に対する対象演算の一つの実施形態のフローチャートを示す。
【図３６】図３６は、相関合計および視差最適化機能の一つの実施形態において使用されるようなデータ収納概念を図示する。
【図３７】図３７は、左右一貫性検査の一つの実施形態のフローチャートを示す。
【図３８】図３８は、領域１から１０に対するモードフィルタ演算の一つの実施形態の高レベルフローチャートを示す。
【図３９】図３９は、領域１および２に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４０】図４０は、領域３および４に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４１】図４１は、領域５に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４２】図４２は、領域６に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４３】図４３は、領域７および８に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４４】図４４は、領域９に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４５】図４５は、領域１０に対するモードフィルタの一つの実施形態のフローチャートを示す。
【図４６】図４６は、ＦＰＧＡ、ＳＲＡＭ、コネクタ、および、ＰＣＩインタフェース要素の４×４アレイが部分トーラス(torus)構成に配置された本発明のイメージ処理システムの一つの実施形態を示す。
【図４７】図４７は、イメージ処理システムのアレイにおけるデータフローを示す。
【図４８】図４８は、本発明によるセンサスベクトル発生器のハードウェア実行の一つの実施形態の高レベルブロック図を示す。
【図４９】図４９は、センサスウインドウの実質的に上半分に位置するイメージ要素を有する中心参照イメージ要素間の比較結果を表す最下位１６ビットのためのセンサスベクトル発生器を示す。
【図５０】図５０は、センサスウインドウの実質的に下半分に位置するイメージ要素を有する中心参照イメージ要素間の比較結果を表す最下位１６ビットのためのセンサスベクトル発生器を示す。
【図５１】図５１は、センサスウインドウにおけるそれぞれの線に対する３２ビットセンサスベクトルを演算するために使用される一連の比較器およびレジスタ要素を示す。
【図５２】図５２は、相関演算および最適視差決定の高レベルデータフローを示す。
【図５３】図５３（Ａ）および図５３（Ｂ）は、本発明の一つの実施形態の並列パイプライン化データフローを記述するために使用され得る左および右イメージに対する左および右センサスベクトルを示す。
【図５４】図５４は、本発明の一つの実施形態の並列パイプライン化アーキテクチャのブロック図を示す。
【図５５】図５５は、Ｄ＝５のときに左および右センサスベクトルがどのようにそしていつ相関ユニットを通って進行するかの擬似タイミング図を示す。
【図５６】図５６は、本発明の待ち(queueing)バッファの一つの実施形態を示す。
【図５７】図５７は、本発明の相関ユニットの一つの実施形態のハードウェア実行を示す。
【図５８】図５８は、物体の垂直移動がリアルタイムに処理され得る動き解析のための並列パイプライン化システムの一つの実施形態を示す。
【図５９】図５９は、本発明のイメージ処理システムの部分に関連するいくつかの“スーパーピン”(superpin)バスおよびコネクタを示す。
【図６０】図６０は、本発明のイメージ処理システムアレイ構造の詳細図を示す。
【図６１】図６１は、一つのＦＰＧＡ演算要素および一対のＳＲＡＭの詳細図を示す。
【図６２】図６２は、ＰＣＩインタフェースチップおよびデータパスチップの詳細図を示す。
【図６３】図６３は、クロック制御チップの詳細図を示す。
【図６４】図６４は、上部および底部の外部コネクタおよびそれらのピンの詳細図を示す。
【図６５】図６５は、不明瞭な光景に対する物体検出のための本発明の利用を示す。
【図６６】図６６は、図６５で示された実施形態についてセグメントに分割した表示を示す。
【図６７】図６７は、映像品質バーチャルワールド表示のための本発明の利用を示す。
【図６８】図６８は、ブルースクリーニング用途を改善するための本発明の利用を示す。
【図６９】図６９は、複数のイメージ合成シナリオにおける本発明の利用を示す。
【図１】
2008033958.tif 000013
【図２】
2008033958.tif 000014
【図３】
2008033958.tif 000015
【図４】
2008033958.tif 000016
【図５】
2008033958.tif 000017
【図６】
2008033958.tif 000018
【図７】
2008033958.tif 000019
【図８】
2008033958.tif 000020
【図９】
2008033958.tif 000021
【図１０】
2008033958.tif 000022
【図１１】
2008033958.tif 000023
【図１２】
2008033958.tif 000024
【図１３】
2008033958.tif 000025
【図１４】
2008033958.tif 000026
【図１５】
2008033958.tif 000027
【図１６】
2008033958.tif 000028
【図１７】
2008033958.tif 000029
【図１８】
2008033958.tif 000030
【図１９】
2008033958.tif 000031
【図２０】
2008033958.tif 000032
【図２１】
2008033958.tif 000033
【図２２】
2008033958.tif 000034
【図２３】
2008033958.tif 000035
【図２４】
2008033958.tif 000036
【図２５】
2008033958.tif 000037
【図２６】
2008033958.tif 000038
【図２７】
2008033958.tif 000039
【図２８】
2008033958.tif 000040
【図２９】
2008033958.tif 000041
【図３０】
2008033958.tif 000042
【図３１】
2008033958.tif 000043
【図３２】
2008033958.tif 000044
【図３３】
2008033958.tif 000045
【図３４】
2008033958.tif 000046
【図３５】
2008033958.tif 000047
【図３６】
2008033958.tif 000048
【図３７】
2008033958.tif 000049
【図３８】
2008033958.tif 000050
【図３９】
2008033958.tif 000051
【図４０】
2008033958.tif 000052
【図４１】
2008033958.tif 000053
【図４２】
2008033958.tif 000054
【図４３】
2008033958.tif 000055
【図４４】
2008033958.tif 000056
【図４５】
2008033958.tif 000057
【図４６】
2008033958.tif 000058
【図４７】
2008033958.tif 000059
【図４８】
2008033958.tif 000060
【図４９】
2008033958.tif 000061
【図５０】
2008033958.tif 000062
【図５１】
2008033958.tif 000063
【図５２】
2008033958.tif 000064
【図５３】
2008033958.tif 000065
【図５４】
2008033958.tif 000066
【図５５】
2008033958.tif 000067
【図５６】
2008033958.tif 000068
【図５７】
2008033958.tif 000069
【図５８】
2008033958.tif 000070
【図５９】
2008033958.tif 000071
【図６０】
2008033958.tif 000072
【図６１】
2008033958.tif 000073
【図６２】
2008033958.tif 000074
【図６３】
2008033958.tif 000075
【図６４】
2008033958.tif 000076
【図６５】
2008033958.tif 000077
【図６６】
2008033958.tif 000078
【図６７】
2008033958.tif 000079
【図６８】
2008033958.tif 000080
【図６９】
2008033958.tif 000081