IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-07
(45)【発行日】2022-12-15
(54)【発明の名称】命令リストの生成
(51)【国際特許分類】
   G06T 15/04 20110101AFI20221208BHJP
【FI】
G06T15/04
【請求項の数】 22
(21)【出願番号】P 2021529818
(86)(22)【出願日】2018-11-27
(65)【公表番号】
(43)【公表日】2022-01-28
(86)【国際出願番号】 EP2018082661
(87)【国際公開番号】W WO2020108738
(87)【国際公開日】2020-06-04
【審査請求日】2021-06-21
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】トスキ,ビョルン
【審査官】山口 大志
(56)【参考文献】
【文献】特開2010-257357(JP,A)
【文献】米国特許出願公開第2011/0310102(US,A1)
【文献】米国特許出願公開第2008/0225047(US,A1)
【文献】特開2009-231936(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/00
G06T 11/00-19/20
(57)【特許請求の範囲】
【請求項1】
命令の順序付きリストを生成する、コンピュータによって実行される方法であって、前記命令の順序付きリストは、ソース座標系(30)における基準入力画像(33′)のストリップ(50)内のトライアングル(51)の頂点(53)であるピクセル座標のリストを備え、前記頂点を宛先座標系(32)における対応する出力画像(33)に変換すると、前記トライアングルが、ラインメモリのブロック(47)にマッピングする画像データのブロックにマッピングされ、前記方法は、
基準出力画像を前記宛先座標系における複数のタイル化されたセクション(35)に分割することと、
セクションごとに、
前記セクションを前記ラインメモリのブロックに分割することによって、前記セクションにおけるピクセル(46)のストリップ(50)のアレイの第1の境界および第2の境界を定義することと、
ストリップごとに、
各ストリップに含まれているピクセルの各セットを一連の順序付きトライアングルに分割することと、
前記ストリップ内の各トライアングルの頂点ごとに宛先座標およびソース座標のセットを生成することと、
ソース座標系および宛先座標系(30、32)における前記頂点(53)の座標を、前記命令の順序付きリストに格納することとを備える、方法。
【請求項2】
前記宛先座標系(32)における複数のタイル化されたセクション(35)の各々のコーナー(34)を前記ソース座標系(30)に変換して、複数の変換されたセクション(35′)を生成することと、
変換されたセクションごとに、
ピクセル(46)のv次元における最も広い範囲を求めることと、
前記v次元にまたがるピクセル(46)の数を前記ラインメモリのブロック(47)の高さ(45)で割ることとを備える、請求項1に記載の方法。
【請求項3】
セクション(35)ごとに前記ストリップのアレイにおける各ストリップ(50)の前記第1の境界および前記第2の境界を定義することは、
ソース座標におけるセクション(35′)のエッジ(44)の最高v座標と最低v座標との間の最大範囲に基づいて始点(41)および終点(42)を求めることと、
前記始点から開始し、前記終点に向かって時計回りおよび反時計回りに移動する、初期ヒットポイント(43)の対を反復的に作成することとを備え、
前記エッジ(44)上の隣接する初期ヒットポイント(43)同士の間の距離はトライアングルのサイズによって求められ、
初期ヒットポイントの各対の間に初期ヒットライン(48)を生成して、前記ストリップ(50)の境界を形成することを備える、請求項1または2に記載の方法。
【請求項4】
各ストリップ(50)の前記第1の境界および前記第2の境界を定義することは、
初期ヒットポイント(43)を前記エッジ(44)に沿って反復的に移動させて、リファインされたヒットポイント(56)を生成することと、
前記リファインされたヒットポイント(56)の対の間にリファインされたヒットライン(57)を生成することとをさらに備える、請求項3に記載の方法。
【請求項5】
各ストリップ(50)の前記第1の境界および前記第2の境界を定義することは、
前記リファインされたヒットライン(57)に沿って一連の中間ラインポイント(58
)を生成することをさらに備え、前記リファインされたヒットポイント(56)と前記中間ラインポイントとの間の距離は前記トライアングル(51)のサイズによって求められ、
中間ラインポイントをリファインされたヒットライン(57)に対して直交して移動させて(59)、リファインされたヒットポイント(56)の前記ソース座標系(30)におけるv座標に一致させて、最終位置中間ヒットポイント(62)を生成することと、
最終位置中間ヒットポイントに交差するリファインされたヒットポイントの各対の間に最終位置ヒットライン(63)を生成することとをさらに備える、請求項4に記載の方法。
【請求項6】
最初のライン(61)が時計回り方向または反時計回り方向のいずれかにおいて前記始点(41)に隣接する前記エッジ(44)に追加されて、前記セクション(35)の最初のストリップ(50)の境界が定義される、請求項3~5のいずれか1項に記載の方法。
【請求項7】
最後のライン(65)が時計回り方向または反時計回り方向のいずれかにおいて前記終点(42)に隣接する前記エッジ(44)に追加されて、前記セクション(35)の最後のストリップ(50)の境界が定義される、請求項3~5のいずれか1項に記載の方法。
【請求項8】
前記トライアングルを生成する前に、前記セクション(35)の各コーナー(34)が、それらのコーナーを頂点(53)として含むストリップ(50)に追加される、請求項1~7のいずれか1項に記載の方法。
【請求項9】
第1の境界上の第1のポイントと第2の境界上の第2のポイントとの間の第1の距離L1を、前記第2の境界上の第1のポイントと前記第1の境界上の第2のポイントとの間の第2の距離L2と比較することによって、各ストリップ(50)内に生成される第1のトライアングル(51)の頂点(53)が求められ、
前記第1の距離L1が前記第2の距離L2以上である場合、前記第1の境界上の最初の2つのポイントがトライアングル頂点として用いられ、
前記第2の距離L2が前記第1の距離L1よりも大きい場合、前記第2の境界上の最初の2つのポイントがトライアングル頂点として用いられる、請求項1~8のいずれか1項に記載の方法。
【請求項10】
第1のトライアングルの第1の頂点から第2の頂点までのベクトルと前記第1のトライアングルの前記第1の頂点から第3の頂点までのベクトルとのクロス積によって、ストリップ(50)内の第1のトライアングル(51)のカリング方向(73)が求められ、正のクロス積の場合は時計回りのカリング方向となり、負のクロス積の場合は反時計回りのカリング方向となる、請求項1~9のいずれか1項に記載の方法。
【請求項11】
ストリップ(50)内の連続してレンダリングされるトライアングル(51)の前記カリング方向(73)は、前記第1のトライアングルのカリング方向とその反対のカリング方向とを交互に繰り返す、請求項10に記載の方法。
【請求項12】
ストリップ(50)内の隣接するトライアングル(51)の前記カリング方向(73)は同一である、請求項11に記載の方法。
【請求項13】
前記命令の順序付きリストは表示リスト(22)である、請求項1~12のいずれか1項に記載の方法。
【請求項14】
歪み画像(9)を補正する、コンピュータによって実行される方法であって、前記方法は、
システムメモリ(14)からテクスチャキャッシュ(24)内に歪み画像を受信することと、
前記歪み画像のトライアングル(51)を、システムメモリ(14)に格納された命令の順序付きリストに格納された前記トライアングルの頂点(53)の座標を用いて、歪み補正された画像上にテクスチャマッピングすることと、
これを宛先キャッシュ(25)に格納することとを備え、
前記命令の順序付きリストは、ソース座標系(30)および宛先座標系(32)における基準入力画像(36′)のストリップ(52)内のトライアングル(51)の頂点(53)であるピクセル座標のリストを備え、前記ソース座標系における前記頂点を宛先座標系(32)における対応する出力画像(36)に変換すると、前記トライアングルが、ラインメモリのブロック(47)にマッピングする画像データのブロックにマッピングされ、
前記対応する出力画像(36)を前記宛先座標系における複数のタイル化されたセクション(35)に分割することによって生成され、
セクションごとに、
前記セクションをラインメモリのブロックに分割することによって、前記セクションにおけるピクセル(46)のストリップ(50)のアレイの第1の境界および第2の境界を定義することと、
ストリップごとに、
各ストリップに含まれているピクセルの各セットを一連の順序付きトライアングルに分割することと、
前記ストリップ内の各トライアングルの頂点ごとに宛先座標およびソース座標のセットを生成することと、
ソース座標系および宛先座標系(30、32)における前記頂点(53)の座標を、前記命令の順序付きリストに格納することとを備える、方法。
【請求項15】
1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに請求項1~12のいずれか1項に記載の方法を実行させる命令を備える、コンピュータプログラム。
【請求項16】
請求項15に記載のコンピュータプログラムを格納する、コンピュータ読取可能媒体。
【請求項17】
請求項14に記載の方法を実行するように構成された、モジュール。
【請求項18】
ハードウェアモジュールである、請求項17に記載のモジュール。
【請求項19】
少なくとも1つのプロセッサおよびメモリを備えるプロセッササブシステムと、
請求項17または18に記載のモジュールとを備える、モノリシック集積回路。
【請求項20】
歪み画像データを提供するための少なくとも1つのカメラ(9)と、
前記少なくとも1つのカメラから歪み画像データを受信するように配置された請求項19に記載の集積回路とを備える、システム。
【請求項21】
請求項20に記載のシステムを備える、自動車両。
【請求項22】
少なくとも1つのプロセッサと、
メモリとを備え、
前記少なくとも1つのプロセッサは請求項1の方法を実行するように構成される、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
分野
本発明は、テクスチャマッピングに基づく画像歪み補正に用いる表示リストなどの、命令の順序付きリストを生成することに関する。
【背景技術】
【0002】
背景
自動車両には、運転中または駐車中に車両の運転者を支援するために用いることができるライブ映像を提供可能な複数のカメラシステムが搭載されることが多くなっている。たとえば、使用事例として、道路標識検出、車線検出、駐車車線マーカー、歩行者検出などのためのフロントカメラまたはサラウンドビューが挙げられる。これらのシステムでは、単一のカメラで可能な最大視野を取り込むために広角レンズまたは魚眼レンズを用いることが多い。しかしながら、これらのタイプのレンズを用いて取り込んだ画像は歪んでいるため、それらを解釈するおよび/または処理することが困難である。自動車両上で用いる多くの視覚および後処理アルゴリズムは、たとえば歩行者までの距離を判定するために、「同一スケール」オブジェクトに依存する。画像歪み補正はリアルタイムで行われることが好ましい。画像歪み補正の例は、JP 2009 267603 Aから知ることができる。
【0003】
テクスチャマッピングを用いて画像歪みを補正する場合がある。レンズ歪み補正は、「標準の」球面収差補正された投影レンズ(完全に平行化された画像から偏差を除去する)および画像平行化(通常は標準レンズと比べて異なる投影を有する「魚眼」レンズの場合に特に重要である)の形態であることができる。さらに、たとえば円筒マッピングなどの異なるマッピング、および、通常は3D「ボウル」もしくはイメージプレーンを用いるたとえば「3D」投影またはサラウンドビュー(「ヒューマンビジョン」)などの異なる投影を適用することができる。いくつかのタスク(たとえばパノラマ再現)については、歪み補正のみが、平行化なしで、特定のレンズに対して適用され得る。
【0004】
テクスチャマッピングは、歪み補正されたポリゴンメッシュとゆがんだポリゴンメッシュとの間の変換の実行を伴う。ソース座標系におけるゆがんだメッシュのポリゴンの頂点のテクスチャ座標には、歪んでいない宛先座標系における対応する座標が割り当てられる。これらの座標は、関連するコマンドとともに、命令の順序付きリストとして格納される。命令の順序付きセットは、表示リストの形態をとることができる。表示リストは、書き込みレジスタ(「レジスタセットアップ」)、同期(キャッシュフラッシング、割り込み、IP間の同期など)、およびトライアングルコマンド(N座標が続く)を含み得る、コマンドコードならびにデータを含むことができる。
【0005】
表示リストなどの命令の順序付きリストは、リアルタイムもしくはほぼリアルタイムで起こり得るオンラインで(すなわち実行時に)、またはオフラインで生成することができる。生成のタイミングは使用事例またはベンダに依存し得る。たとえば、フロントカメラ用の表示リストを数分毎または数十分毎に再生成して、熱応力、道路の影響などによるレンズ歪みの変化に合わせて調整してもよい。命令の順序付きリストを用いて、新たな歪み画像のどのピクセルをキャッシュメモリにロードすべきか、および無歪み画像にマッピングすべきかを判断することができる。
【0006】
画像データは、キャッシュラインメモリを用いて処理することができる。画像の領域はオンデマンドで(すなわちキャッシュミス時に)キャッシュラインメモリにロードされるか、またはそれらは予めロードされてもよい。領域はハードウェアによって暗黙的にロードされる。たとえば、ハードウェアは、各々が256バイトの2×16本のキャッシュラインにマッピングする、(u,v)座標におけるテクスチャデータを要求してもよい。
【0007】
いくつかの例では、マルチウェイキャッシュは用いられず、ランダム置換はない。テクスチャマッピング機能が実行されてもよく、出力画像の無歪み領域が格納される。テクスチャマッピングの例は、US 2015/0254820 A1から知ることができる。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、テクスチャマッピング画像データをキャッシュメモリに格納することには1つ以上の欠点があり得る。ソース-キャッシュのミスアライメントは、特に、たとえば広角レンズなどの高歪みレンズの場合に問題となり得る。たとえば、テクスチャキャッシュ内のまったく同じキャッシュラインにマッピングする画像の複数の領域(すなわちライン)にポリゴンストリップがまたがる場合は、キャッシュトラッシングが起こり得る。これはメモリ帯域幅を超えて、過度の性能ペナルティにつながる可能性がある。
【課題を解決するための手段】
【0009】
概要
本発明の第1の局面に従い、命令の順序付きリストを生成する方法が提供される。上記命令の順序付きリストは、ソース座標系における基準入力画像のストリップ内のトライアングルの頂点であるピクセル座標のリストを備え、上記頂点を宛先座標系における対応する出力画像に変換すると、上記トライアングルが、ラインメモリのブロック(本明細書では「テクスチャキャッシュ」と呼ぶ)にマッピングする画像データのブロックにマッピングされる。上記方法は、上記基準出力画像を上記宛先座標系における複数のタイル化されたセクションに分割することを備える。上記方法は、セクションごとに、上記セクションをラインメモリのブロックに分割することによって、上記セクションにおけるピクセルのストリップのアレイの第1の境界および第2の境界を定義することを備える。上記方法は、ストリップごとに、各ストリップに含まれているピクセルの各セットを一連の順序付きトライアングルに分割することと、上記ストリップ内の各トライアングルの頂点ごとに宛先座標およびソース座標のセットを生成することと、ソース座標系および宛先座標系における上記頂点の座標を、上記命令の順序付きリストに格納することとを備える。
【0010】
よって、頂点を宛先座標系における対応する出力画像に変換すると、読み出し時にキャッシュトラッシングが減少するかまたはないように、トライアングルを、ラインメモリのブロックにマッピングする画像データのブロックにマッピングすることができる。
【0011】
上記方法は、上記宛先座標系における複数のタイル化されたセクションの各々のコーナーを上記ソース座標系に変換して、複数の変換されたセクションを生成することによって、各セクションにおけるストリップの数を求めることをさらに含んでもよい。上記方法は、変換されたセクションごとに、ピクセルのv次元における最も広い範囲を求めることと、上記v次元にまたがるピクセルの数を上記ラインメモリのブロックの高さで割ることとをさらに備えてもよい。
【0012】
上記方法は、ソース座標におけるセクションのエッジの最高v座標と最低v座標との間の最大範囲に基づいて始点および終点を求めることによって、セクションごとに上記ストリップのアレイにおける各ストリップの上記境界を定義することをさらに備えてもよい。上記方法は、上記始点から開始し、上記終点に向かって時計回りおよび反時計回りに移動する、初期ヒットポイントの対を反復的に作成することをさらに備えてもよく、上記エッジ上の隣接する初期ヒットポイント同士の間の距離はトライアングルのサイズによって求められる。上記方法は、初期ヒットポイントの各対の間に初期ヒットラインを生成して、上記ストリップの境界を形成することをさらに備えてもよい。
【0013】
上記方法は、初期ヒットポイントを上記エッジに沿って反復的に移動させて、リファインされたヒットポイントを生成することと、上記リファインされたヒットポイントの対の間にリファインされたヒットラインを生成することとによって、各ストリップの上記境界を定義することをさらに備えてもよい。
【0014】
上記方法は、上記リファインされたヒットラインに沿って一連の中間ラインポイントを生成することによって、各ストリップの上記境界を定義することをさらに備えてもよく、上記リファインされたヒットポイントと上記中間ラインポイントとの間の距離は上記トライアングルのサイズによって求められる。上記方法は、中間ラインポイントをリファインされたヒットラインに対して直交して移動させて、リファインされたヒットポイントの上記ソース座標系におけるv座標に一致させて、最終位置中間ヒットポイントを生成することと、最終位置中間ヒットポイントに交差するリファインされたヒットポイントの各対の間に最終位置ヒットラインを生成することとをさらに備えてもよい。
【0015】
上記方法は、最初のラインを時計回り方向または反時計回り方向のいずれかにおいて上記始点に隣接する上記エッジに追加して、上記セクションの最初のストリップの境界を定義することをさらに備えてもよい。
【0016】
上記方法は、最後のラインを時計回り方向または反時計回り方向のいずれかにおいて上記終点に隣接する上記エッジに追加して、上記セクションの最後のストリップの境界を定義することをさらに備えてもよい。
【0017】
上記方法は、上記トライアングルを生成する前に、上記セクションの各コーナーを、それらのコーナーを頂点として含むストリップに追加することをさらに備えてもよい。
【0018】
上記方法は、第1の境界上の第1のポイントと第2の境界上の第2のポイントとの間の第1の距離L1を、上記第2の境界上の第1のポイントと上記第1の境界上の第2のポイントとの間の第2の距離L2と比較することによって、各ストリップ内に生成される第1のトライアングルの頂点を求めることをさらに備えてもよく、上記第1の距離L1が上記第2の距離L2以上である場合、上記第1の境界上の最初の2つのポイントがトライアングル頂点として用いられ、上記第2の距離L2が上記第1の距離L1よりも大きい場合、上記第2の境界上の最初の2つのポイントがトライアングル頂点として用いられる。
【0019】
上記方法は、第1のトライアングルの第1の頂点から第2の頂点までのベクトルと上記第1のトライアングルの上記第1の頂点から第3の頂点までのベクトルとのクロス積によって、ストリップ内の第1のトライアングルのカリング方向を求めることをさらに備えてもよく、正のクロス積の場合は時計回りのカリング方向となり、負のクロス積の場合は反時計回りのカリング方向となる。
【0020】
上記方法は、ストリップ内の連続してレンダリングされるトライアングルの上記カリング方向を、上記第1のトライアングルのカリング方向とその反対のカリング方向とを交互に繰り返すことをさらに備えてもよい。
【0021】
上記方法は、ストリップ内の隣接するトライアングルの上記カリング方向を同一に維持することをさらに備えてもよい。
【0022】
命令の順序付きリストは、表示リストであってもよい。
命令の順序付きリストは、GPUに最適なテクスチャアクセスメッシュであってもよい。
【0023】
命令の順序付きリストは、OpenGL Drawコマンドであってもよい。
命令の順序付きリストは、Microsoft(登録商標)DirectX(登録商標)Drawコマンドであってもよい。
【0024】
命令の順序付きリストは、メッシュとして格納されてもよい。
本発明の第2の局面に従い、歪み画像を補正する方法が提供される。上記方法は、システムメモリからテクスチャキャッシュ内に歪み画像を受信することと、上記歪み画像のトライアングルを、システムメモリに格納された命令の順序付きリストに格納された上記トライアングルの頂点の座標を用いて、歪み補正された画像上にテクスチャマッピングすることと、これを宛先キャッシュに格納することとを備える。上記命令の順序付きリストは、ソース座標系および宛先座標系における基準入力画像のストリップ内のトライアングルの頂点であるピクセル座標のリストを備え、上記ソース座標系における上記頂点を宛先座標系における対応する出力画像に変換すると、読み出し時にラインメモリのブロック内に閉じ込められたキャッシュトラッシングがないように、上記トライアングルが、ラインメモリのブロックまたは「テクスチャキャッシュ」にマッピングする画像データのブロックにマッピングされる。上記命令の順序付きリストは、上記基準出力画像を上記宛先座標系における複数のタイル化されたセクションに分割することによって生成される。上記方法は、変換されたセクションごとに、上記変換された領域をラインメモリのブロックに割り当てることによって、ピクセルのストリップのアレイの第1の境界および第2の境界を定義することを備える。上記方法は、ストリップごとに、各ストリップに含まれているピクセルの各セットを一連の順序付きトライアングルに分割することと、上記ストリップ内の各トライアングルの頂点ごとに宛先座標およびソース座標のセットを生成することと、ソース座標系および宛先座標系おける上記頂点の座標を、上記命令の順序付きリストに格納することとを備える。
【0025】
本発明の第3の局面に従い、1つ以上のプロセッサによって実行されると上記1つ以上のプロセッサに第1の局面に係る方法を実行させる命令を備えるコンピュータプログラムが提供される。
【0026】
本発明の第4の局面に従い、第3の局面のコンピュータプログラムを格納するコンピュータ読取可能媒体を備えるコンピュータプログラムプロダクトが提供される。
【0027】
本発明の第5の局面に従い、第2の局面の方法を実行するように構成されたモジュールが提供される。
【0028】
当該モジュールはハードウェアモジュールであってもよい。
本発明の第6の局面に従い、少なくとも1つのプロセッサおよびメモリを備えるプロセッササブシステムと、第5の局面のモジュールとを備えるモノリシック集積回路が提供される。
【0029】
本発明の第7の局面に従い、歪み画像データを提供するための少なくとも1つのカメラと、上記少なくとも1つのカメラから歪み画像データを受信するように配置された第6の局面の集積回路とを備えるシステムが提供される。
【0030】
本発明の第8の局面に従い、第7の局面のシステムを備える自動車両が提供される。
自動車両は、オートバイ、自動車(「車」とも呼ぶ)、ミニバス、バス、トラックまたは大型トラックであってもよい。自動車両は、内燃機関および/または1つ以上の電気モータによって動力を供給されてもよい。
【0031】
本発明の第9の局面に従い、命令の順序付きリストを生成するためのコンピュータシステムが提供され、上記命令の順序付きリストは、ソース座標系[u,v]における基準入力画像のストリップ内のトライアングルの頂点であるピクセル座標のリストを備え、上記頂点を宛先座標系[x,y]における対応する出力画像に変換すると、読み出し時にラインメモリのブロック内に閉じ込められたキャッシュトラッシングがないように、上記トライアングルが、ラインメモリのブロック(または「テクスチャキャッシュ」)にマッピングする画像データのブロックにマッピングされる。上記コンピュータシステムは、少なくとも1つのプロセッサと、メモリとを備える。上記少なくとも1つのプロセッサは、第1の局面の方法を実行するように構成される。
【0032】
本発明の第10の局面に従い、ソース座標系における基準入力画像のストリップ内のトライアングルの頂点であるピクセル座標のリストと、宛先座標系における対応する座標のリストとを備える表示リストが提供される。ピクセル座標のリストは、上記ソース座標系における単一のストリップ内の上記頂点が、ラインメモリのブロック(または「テクスチャキャッシュ」)にマッピングする画像データのブロックにマッピングされるように構成され、上記ソース座標系における上記頂点を上記宛先座標系におけるトライアングルにレンダリングすると、それらは不要なキャッシュトラッシングなしで基準出力画像を形成する。
【0033】
本発明の第11の局面に従い、第10の局面の表示リストを格納するコンピュータ読取可能媒体が提供される。
【0034】
次に、例示として、添付の図面を参照しながら本発明の特定の実施形態を説明する。
【図面の簡単な説明】
【0035】
図1】歪み画像を生成する1つ以上のカメラと歪み補償モジュールとを含む自動車両を示す図である。
図2】歪み補償モジュールの第1の概略ブロック図である。
図3】歪み補償モジュールの第2の概略ブロック図である。
図4】画像歪み補償時の表示リストの使用を概略的に示す図である。
図5】歪み画像の例をソース座標u、vを用いて示す図である。
図6】歪み補正された画像の例を宛先座標x、yを用いて示す図である。
図7】座標の順序付きリストを生成する方法のプロセスフロー図である。
図8】表示リスト生成モジュールの概略ブロック図である。
図9】ソース座標u、vにマッピングされている宛先座標x、yにおける基準入力画像のセクションを示す図である。
図10】セクションに分割された宛先座標x、yにおける基準画像を示す図である。
図11図10に示される画像に対応するセクションに分割されたソース座標u、vにおける基準画像を示す図である。
図12】宛先座標x、yにおける基準画像のセクションを示す図である。
図13】開始コーナーポイントおよび終了コーナーポイントが求められた、図12に示される基準画像のセクションを示す図である。
図14】ヒットポイントおよびヒットラインが追加された、図12に示される基準画像のセクションを示す図である。
図15】ヒットポイントおよびヒットラインが追加された、図12に示される基準画像のセクションを示す図である。
図16】ブロックラインメモリのストリップに分割されたソース座標u、vにおける基準入力画像のセクションを示す図である。
図17】ブロックラインメモリの例を示す図である。
図18】宛先座標x、yにおけるセクション、ならびに初期ヒットポイントおよび初期ヒットラインの例を示す図である。
図19図18に示される第1の対のヒットポイントのリファインメントの例を示す図である。
図20図19に示されるリファインされたヒットポイントおよびリファインされたヒットラインの例を示す図である。
図21】中間ラインポイントの追加およびリファインメント、ならびに図20に示されるリファインされたヒットラインのさらなるリファインメントの例を示す図である。
図22】最終位置中間ヒットポイントおよび最終位置ヒットラインの例を示す図である。
図23図22に示されるストリップ内に第1のトライアングルストリップを形成するために生成されるトライアングルの例を示す図である。
図24】最終位置ヒットラインおよび最終位置ヒットポイントが生成された後の、図18に示されるセクションの例を示す図である。
図25図24に示されるセクションにおけるトライアングルストリップに沿った第1のトライアングルの生成を示す図である。
図26】カリング方向がどのように求められるかを示す図である。
図27図24に示されるセクションからの完全なトライアングルストリップの生成を示す図である。
図28図24に示されるセクションにおけるトライアングルストリップ内にトライアングルを生成する前の余分なポイントの追加を示す図である。
図29図24に示されるセクションにおいてトライアングルストリップを生成する際に必要なスワップを示す図である。
図30図24に示されるセクションから生成された完全なトライアングルストリップの例を示す図である。
図31】最終位置ヒットライン、および宛先座標系における基準画像のセクションをカバーするトライアングルストリップの例を示す図である。
図32】最終位置ヒットライン、およびソース座標系における基準画像のセクションをカバーするトライアングルストリップの例を示す図である。
【発明を実施するための形態】
【0036】
特定の実施形態の詳細な説明
システム概要
図1を参照して、自動車両1が示されている。
【0037】
自動車両1は、高度な運転者支援システム2を含む。システム2は、車載通信バス5に接続された複数のデジタルまたはアナログカメラ3とヘッドユニット4とを含む。システム2は、ヘッドユニット4に接続されたディスプレイ6を含んでもよい。ディスプレイ6は、たとえば中央コンソール(図示せず)またはダッシュボード(図示せず)に位置するフラットパネルディスプレイの形態をとることができる。
【0038】
各デジタルまたはアナログカメラ3は、たとえば広角レンズなどのレンズ7と、画像センサ8とを含む。各カメラ3は、たとえば60fpsの速度で画像データ9(または「画像フレーム」)を一連の画像フレーム(または「ピクチャ」)として取り込むことができる。画像データ9は、車載通信インターフェイス5を介してヘッドユニット4に1つ以上のデータフレームとして送信される。車載通信インターフェイスは、たとえば、通信バス、パラレルインターフェイス、シリアルインターフェイスを介したMIPI CSI-2、Ether/AVBまたはPCI-Expressであってもよい。
【0039】
ヘッドユニット4は、マイクロコントローラ10または他の同様のマイクロプロセッサベースのシステムを含む。マイクロコントローラ10は、中央処理装置(CPU)12を含むCPUサブシステム11と、歪み補償モジュール13と、システムメモリ14と、バスシステム15とを含む。マイクロコントローラ10は、(他の異なるタイプの通信ネットワーク用の)他の通信ネットワークコントローラ、タイマなどの、他の周辺モジュール(図示せず)を含む。
【0040】
画像データ9はシステムメモリ14に一時的に格納され、歪み補償モジュール13によってリアルタイムで処理されてもよい。
【0041】
以下により詳細に説明するように、歪み補償モジュール13は、歪み画像データ9に対してテクスチャマッピングを用いて画像歪み補正を行い、補正画像23(図6)をバスシステム15を介してシステムメモリ14に出力する。補正画像23(図6)はディスプレイ6に表示されてもよい。
【0042】
画像歪み補償処理
図2を参照して、歪み補償モジュール13がより詳細に示されている。
【0043】
歪み補償モジュール13は、ホストインターフェイス16と、バスインターフェイス17と、表示リストバッファ18と、画像フィルタ19と、トライアングルセットアップエンジン20と、テクスチャキャッシュ21とを含む。
【0044】
バスインターフェイス17は、システムメモリ14から表示リスト22を受信し、表示リスト22を表示リストバッファ18に供給する。表示リスト22は次にトライアングルセットアップエンジン20に供給される。システムメモリ14から受信した歪み画像データ9は、テクスチャキャッシュ21に供給された後に画像フィルタ19に渡される。CPU12は、ホストインターフェイス16を介して歪み補償モジュールを構成および制御することができる。
【0045】
図3を参照して、複数の歪み補償モジュール13、13、13、13を用いて画像データを同時に処理することができる。各モジュール13、13、13、13は、各自のテクスチャキャッシュ21、21、21、21と宛先キャッシュ25、25、25、25とを有する。歪み補償モジュールの各々は、入出力においてAXI Masterインターフェイスを共有してもよい。
【0046】
表示リスト22は、コマンドの順序付きリストを含む。これらは、次にレンダリングされるトライアングルストリップを形成するN個の次の頂点を読み込むようにモジュールに命令するレンダリング開始コマンド(または「TRIコマンド」)と、書き込みレジスタ(複数可)コマンドと、同期コマンドとを含んでもよい。各TRIコマンドは、ソース座標系30(図5)における座標の順序付きセット、宛先座標系32(図6)における対応する座標の順序付きセット、または色および/もしくはルミネッセンス補正値、のうちの1つを含んでもよい。
【0047】
ソース座標系30(図5)における座標の順序付きセットは、歪み画像データ9の一部を定義する。宛先座標系32(図6)における座標の順序付きリストは、歪み補正された画像データ23の一部を定義する。
【0048】
表示リスト22は、表示リストバッファ18(図2)を介して歪み補償モジュール13内にバス15を通って供給される準備ができた状態で、システムメモリ14に格納される。表示リストバッファ18は、バッファが空になると新たなデータを要求する。表示リスト22によって定義された各トライアングルによって参照される画像データ9は、テクスチャキャッシュ21に供給された後、歪み補正された宛先座標系32(図6)にテクスチャマッピングされて、歪み補正された画像データ23を形成する。歪み補正された画像データ23は、宛先キャッシュ25に、または最終画像の矩形部分を保持可能なローカルSRAMに供給される。たとえば、ローカルSRAMは、結果として得られる画像の矩形部分を形成する、各々が512バイトからなる256ラインについてのストレージを提供してもよく、当該画像は、16ビット/ピクセルモードで256×256ピクセル、または8ビット/ピクセルモードで512×256ピクセルである。
【0049】
歪み補正された画像データ23は、キャッシュラインエビクションを用いて、またはキャッシュをフラッシュするもしくはSRAMをシステムメモリに転送する特別なコマンドを用いて、システムメモリ14に格納される。
【0050】
他のコマンドの順序付きリストが作成されてもよい。たとえば、GPU(すなわちOpenGL表示リスト)キャッシュレイアウトに最適なテクスチャアクセスメッシュを推定することができる(TAG作成、およびキャッシュトラッシングなしに保持可能な領域)。OpenGL Drawコマンド、およびMicrosoft(登録商標)DirectX(登録商標)Drawコマンドが作成されてもよい。コマンドの順序付きリストは、たとえばテクスチャ座標を含む3Dモデルなどのメッシュとして格納されてもよい。
【0051】
図4を参照して、歪み補償モジュール13はレジスタセットアップ27をさらに有してもよい。レジスタセットアップ27は、表示リスト22におけるコマンドの順序付きリストの1つまたは複数のフォーマットをセットアップする。フォーマットは、物理メモリアドレス、幅、高さ、およびストライドを含むイメージプレーンI/Oセットアップを含んでもよい。フォーマットは、色フォーマット、トライアングルフォーマット、レンダリングフラグ、および制御レジスタを含んでもよい。基礎となる状態機械は、特定のコマンドを用いて変更されてもよく、たとえばOpenGLカリング方向において(時計回り対反時計回りに)変更されてもよい。
【0052】
歪み補償モジュール13は、画像データ9の各ラインが位置合わせされたメモリ場所で開始しなければならないことを要求し得る(すなわち、256バイトの倍数での入力については、下位8ビットはすべてゼロでなくてはならない)。この状況は、たとえば、キャッシュ実装に起因して、または他の理由で起こり得る。たとえば、2バイト/ピクセル(16ビット/ピクセル)フォーマットの1080×1920ピクセルの画像は、位置合わせされた場所(256バイトの倍数)で次のラインを開始させるために128ピクセルの追加の「パディング」を有する必要があり得る。そのようなシナリオでは、ストライド(すなわちライン間のオフセット)を2048バイトに設定する必要がある。
【0053】
図5を参照して、ソース座標系(u,v)30におけるカメラ3によって撮影された歪み画像9の例が示されている。歪みは、広角レンズおよび魚眼レンズに起因する歪みに典型的な重ね合わせグリッド線31によって示されている。矩形画像9は、典型的には1920×1080ピクセルのサイズを有する。しかしながら、画像9はより大きくても小さくてもよく、および/または異なるアスペクト比を有してもよい。
【0054】
図6を参照して、宛先座標系(x,y)32における歪み補正された画像23の例が示されている。重ね合わせグリッド線31′は、ソース座標系30におけるグリッド線31(図5)に対応する。グリッド線31′は直線で画像23にわたって均等に離間しているように見え、歪みが補正されたことを示している。
【0055】
表示リストの作成
図7図30を参照して、次に表示リスト22を生成する方法を説明する。
【0056】
マッピング
特に図7図11を参照して、宛先座標系32における基準画像33(「較正画像」と呼ぶ場合もある)を用いてセクション35の頂点34、34、34、34を生成する(ステップS1)。各セクション35の頂点34、34、34、34の各々をソース座標系30にマッピングする(ステップS2)。基準画像33は歪み画像データ9と同じ寸法を有してもよい。しかしながら、基準画像33は、入力画像データ9の関心領域(ROI)の寸法、アスペクト比、および解像度を有してもよい。たとえば、1536ピクセル×512ピクセルの寸法を有する基準入力画像33を用いて、1920ピクセル×1080ピクセルの寸法を有する入力画像データ9の特定のROIを分離してもよい。各基準画像33は現実世界の較正パターンの完全な画像であり、すなわち、既知の寸法を有しており、宛先座標系32において歪みがない。
【0057】
マッピングは、歪み補正の公式を提供する、および、たとえばサラウンドビューなどの画像投影も提供し得るマップ関数37によって実行される。可能な歪み補正の公式として、逆のBrown-Conradyの公式、「OpenCV」歪み公式、またはルックアップテーブル38の使用が挙げられる。しかしながら、他の画像歪み補償モデルを用いることもできる。マップ関数37はCPU12(図1)によって実行されることが好ましい。マッピングにより、ソース座標系30において頂点34′、34′、34′、34′およびセクション35′が生成される。マッピングされたセクション35′は表示リスト生成器39に供給され、表示リスト生成器39はコマンドの順序付きリストを生成し、コマンドの順序付きリストは表示リスト22として格納されてもよい。
【0058】
各セクション35は4辺を有する。しかしながら、各セクション35は3辺以上を有していればよい。辺の数が異なるセクションは、たとえば1つのカメラが画面全体にマッピングしない場合など、画像をクリップする場合に用いてもよい。
【0059】
特に図10を参照して、宛先座標系32における基準画像33は、32個の等しい正方形セクション35に分割されている。基準画像33は、任意の数のセクション35に分割することができる。セクション35は任意の形状を有することができる。各セクション35は、基準画像33以下の任意のサイズとすることができる。セクション35は等しいサイズおよび形状を有してもよい。セクション35は64×64ピクセルまたは128×64ピクセルのサイズを有してもよい。しかしながら、セクション35は、たとえば256×256ピクセル、512×128ピクセル、または512バイト×256ラインなど、他のサイズを有してもよい。基準画像33は矩形であってもよく、1920×1080ピクセルのサイズを有してよい。
【0060】
基準画像33の各セクション35は、コーナーポイント34においてマップ関数37を評価することによって宛先座標(x,y)32からソース座標(u,v)30にマッピングされる。
【0061】
特に図11を参照して、基準画像33内の各セクション35は、マップ関数37を用いて宛先座標32からソース座標30にマッピングされる。明確にするために、ソース座標30におけるマッピングされたセクション35′は、ソース座標30におけるマッピングされた画像33′全体を示す図10において互いに隣接して示されている。基準画像33′は矩形であってもよく、1920×1080ピクセルのサイズを有してよい。
【0062】
ヒットポイントおよびヒットラインの生成
図12および図13を参照して、セクション35ごとに始点41および終点42を求める(ステップS3)。始点41および終点42は、各セクション35のエッジ44に沿って最小または最大v座標のいずれかに位置する。セクション35ごとの最大v座標および最小v座標は、各ピクセル46をエッジ44に沿って宛先座標系[x,y]32からソース座標系[u,v]30にマッピングし、ピクセル46ごとにv座標の値を評価することによって求められる。
【0063】
始点41が最小v値に位置する場合、終点42は最大v値に位置する。始点41が最大v値に位置する場合、終点42は最小v値に位置する。エッジ44に沿った極値が複数ある(すなわち最小または最大v座標が複数ある)場合は、1つの最小点および1つの最大点のうちの一方が始点41として選択され、他方が終点42として選択される。
【0064】
始点41および終点42はいずれも、ソース座標(u,v)30および宛先座標(x,y)32を含む。
【0065】
時計回り経路80および反時計回り経路81が始点41から生成され、終点42に達するまでエッジ44に沿って移動する。時計回り経路80および反時計回り経路81に沿って進みながら、各頂点においてコーナーポイント82を追加する(ステップS4)。最小または最大v座標が頂点34にある場合は、その頂点34にはコーナーポイント82は追加されない。
【0066】
特に図13を参照して、生成された時計回り経路は、始点41からエッジ44に沿って最初に遭遇する頂点341へ移動し、次いでエッジ44に沿って次に遭遇する頂点342へ移動し、次いでエッジ44に沿って最後に遭遇する頂点343へ移動し、次いでエッジ44に沿って終点42に達するまで移動する。反時計回り経路は、始点41からエッジ44に沿って最初に遭遇する頂点344へ移動し、次いでエッジ44に沿って終点42に達するまで移動する。
【0067】
次に図14図16を参照して、宛先座標32における領域35のエッジ44に、初期ヒットポイント43(「初期交点」とも呼ぶ)を対にして反復的に追加する(ステップS4およびS5)。始点41から開始して、1対の初期ヒットポイントの一方4311が時計回り経路80に沿ってエッジ44に追加され、当該1対の初期ヒットポイントの他方4322が反時計回り経路81に沿ってエッジ44に追加される。エッジ44に沿った初期ヒットポイントの対(4311、4322)は、ソース座標系30において同じv座標を有する。初期ヒットポイント43同士の間の間隔は、ラインメモリのブロック47のピクセル46の高さ45によって求められる。
【0068】
任意に、初期ヒットポイント43の各対が生成されると、初期ヒットポイント43の各対の間に初期ヒットライン48を反復的に生成する(ステップS6)。しかしながら、初期ヒットラインは、初期ヒットポイント43の位置の何らかのリファインメントの後に初めて生成されてもよい。この段階では、初期ヒットライン48は直線である。
【0069】
特に図16を参照して、ブロックラインメモリ47(または「キャッシュメモリ」)を、128ピクセルまたは256ピクセルの偶数の、および128ピクセルまたは256ピクセルの奇数の、u座標のビット7またはビット8に分割して、u次元における256ピクセルの「安全な重複領域」を可能にしている。1つのキャッシュラインは、厳密に256バイトの画像データを保持することができる。1ピクセル当たりのバイト数(BPP)に応じて、これにより、1キャッシュライン当たり128ピクセル(2BPP)または256ピクセル(1BPP)のいずれかが得られる。このため、偶数/奇数のキャッシュラインは、x座標のビット8(1BPP)またはビット7(2BPP)のいずれかによって決定される。ソース座標30におけるセクション35′がラインメモリのブロック47の長さ49よりも大きいピクセル46のサイズを有する場合は、追加のラインメモリブロック47を、当該ラインメモリブロック47がセクション35′の全領域を包含するまで追加することができる。
【0070】
セクション35における初期ヒットライン48をさらにリファインしてもよく、これは以下により詳細に説明する(ステップS7~S10)。
【0071】
図17を参照して、並んでいるラインメモリ(すなわちキャッシュメモリ)の2つのブロック47の例が示されている。各ラインメモリブロック47は、256バイトの16本のラインを備えてもよい。しかしながら、ラインメモリブロック47は、より少ないもしくはより多いラインを有することができ、および/または、各ライン内により少ない(たとえば64バイト)もしくはより多いバイトを備えることができる。
【0072】
ラインメモリの1つの「偶数」ブロック47およびラインメモリの1つの「奇数」ブロック47を含む256バイトの2×16本のラインがあってもよい。ラインメモリの隣接ブロック47は画像データ9の隣接ラインを必ずしも保持しないが、頂点53の座標はラインメモリの隣接ブロック47を通って連続するように作成される。ラインメモリのブロック47内の「以前の」ラインと「現在の」ラインとの間のアクティブブロックは画像データ9をラップアラウンドしてもよく、たとえば24から34までのv座標を用いる場合は、画像データ9の「上部」で充填されたキャッシュメモリライン8~15と、画像データ9の「下部」で充填されたライン0~2とがある。
【0073】
使用するラインの数は、バイリニアフィルタリングに丸め許容誤差を加えたものを可能にするために、利用可能なラインの数よりも2つ低い数に保たれる。たとえば、1つのストリップ50の高さ45にまたがるラインメモリブロック47は、利用可能なラインの数の半分から2を引いたものであってよい。
【0074】
再び図16を、および図18も参照して、隣接する初期ヒットライン48は、セクション35においてストリップ50の第1および第2の境界を形成する。ストリップ50をトライアングル51に分割してトライアングルストリップ52を作る(ステップS11)。第1のトライアングルストリップは、第1の初期ヒットライン48とエッジ44の隣接部分との間に生成されてもよい。トライアングルストリップ52は、始点40に隣接したストリップで開始して終点42に向かって移動するように生成される。トライアングルストリップ52は、エッジ44と生成された最終ヒットライン48との間にストリップ50に沿って生成される。ソース座標系および宛先座標系30、32の両方におけるトライアングル51の頂点53の座標を、表示リスト22の一部として格納され得るTRIコマンドとともに、座標の順序付きリストとして格納する(ステップS12)。1つのトライアングル51がラインメモリの複数のブロック47にまたがっていてもよい。
【0075】
そのような表示リスト22によって、テクスチャ座標30のアクセスがテクスチャキャッシュ21を最良に利用し、ロードされたすべてのピクセル46がフェッチされる、処理される、またはアクセスされるまで「ワーキングセット」内に留まるように、トライアングル51をレイアウトすることができる。ミスが発生すると処理(またはロード)がキャッシュハードウェア(HW)によって行われる。このように、セクション35′のストリップ50をテクスチャキャッシュ21に効率的にフェッチする、処理する、またはアクセスすることができると、画像データ9の1つのストリップをロードするために必要なラインメモリのブロック47の数が減少するため、不要なキャッシュトラッシングが減少する。キャッシュトラッシングが減少すると、ハードウェアのオーバーヘッドが減少するため、メモリ(たとえばDRAM)帯域幅が節約できるので、より高速かつ効率的な処理がもたらされる。
【0076】
また、表示リスト22によってトライアングルストリップ52の形態のアクセスパターンを生成することができ、これを用いて、「ダブルバッファ」のような技術を使用して歪み画像データ9をフェッチ、処理、またはアクセスしてもよい。ハードウェアアプリケーションプロセッサの中には、「プリフェッチ」命令が発行されることにより、初期命令が与えられた直後に特定範囲のピクセルへのアクセスが始まるというハードウェア事前通知が可能になり得るものもある。
【0077】
トライアングルストリップ52の生成のさらなる詳細を以下に説明する。
ヒットポイントおよびヒットラインのリファインメント
特に図18図19および図20を参照して、ソース座標系30においてブロックラインメモリ47をより良く用いるために、初期ヒットポイント43の各対と(任意の)初期ヒットライン48とをリファイン55して、リファインされたヒットポイント56およびリファインされたヒットライン57を生成してもよく、リファインされたヒットライン同士の間の範囲は、ソース座標系30におけるブロックラインメモリ47の高さ45に一致する(ステップS7およびS8)。初期ヒットポイント43および初期ヒットライン48は、始点41と終点42との間の時計回り経路および反時計回り経路80、81によって決定される順序で反復的に生成されてリファインされる。任意の初期ヒットライン48が生成されない場合は、リファインされたヒットライン57(「直線ヒットライン」とも呼ぶ)が、生成される最初のヒットラインである。これらのヒットライン57は、リファインされたヒットポイント56の対の間に生成される。図18は、例示のためにのみ、すべての初期ヒットポイント43および初期ヒットライン48を示している。たとえば割線法など、いずれかの適切なリファインメント処理を用いることができる。
【0078】
図21図22および図23を参照して、リファインされたヒットライン57は、リファインされたヒットポイント56の対の間のラインである。リファインされたヒットライン57は、ソース座標においてセクション35′全体を効率的にロードすることができないブロックラインメモリ48の境界を生成する場合がある。したがって、リファインされた各ヒットライン57に沿っていくつかの中間ラインポイント58が生成される。中間ラインポイント58を、所望のトライアングル51のサイズのエッジに一致する距離を置いて、リファインされたヒットライン57に沿って追加する(ステップS9)。
【0079】
特に図21図22および図23を引き続き参照して、各セクション35における最初の反復時に、最初のライン61が、宛先座標系32においてエッジ44に沿って時計回り方向または反時計回り方向のいずれかにおいて始点41と第1のリファインされたヒットポイント56との間に生成される。時計回り経路または反時計回り経路80、81のいずれかに沿って移動する際に、始点41と遭遇する第1のコーナーポイント82との間のエッジ44上にリファインされたヒットポイント56が存在しない場合は、最初のライン61は、始点と遭遇する第1のコーナーポイント82(図22では34)との間に生成される。図18図24では、時計回り経路80は、始点41(頂点34としても識別される)からエッジ44に沿って第1のコーナーポイント82(頂点34としても識別される)へ移動し、次いでエッジ44に沿って終点42(頂点34としても識別される)に達するまで移動する。反時計回り経路81は、始点41(頂点34としても識別される)からエッジ44に沿って第1のコーナーポイント82(頂点34としても識別される)へ移動し、次いでエッジ44に沿って終点42(頂点34としても識別される)に達するまで移動する。
【0080】
最初の反復時に、中間ラインポイント58はリファインされたヒットライン57に対して直交して移動させられ、アクティブに処理されているヒットラインとセクション35の最初のライン61との間のストリップ50がトライアングル51のサイズに一致するピクセル46のサイズを有するまで、移動時に、リファインされたヒットライン57を曲げる(ステップS10)。最終位置中間ヒットポイント62は、最終位置ヒットライン63に沿っている。最終位置ヒットライン63は湾曲していてもよい。
【0081】
特に図22を参照して、最初のラインポイント64が最初のライン61上に生成される。最初のラインポイント64は最初のライン61に沿って均等に離間している。最初のラインポイント64の数は、始点41から最も近い最終位置ヒットライン62に沿った最終位置ヒットポイント61の数と等しい。
【0082】
2番目の反復から最後から2番目の反復までの各反復時に、中間ラインポイント58はリファインされたヒットライン57に対して直交して再び移動させられ、アクティブに処理されているリファインされたヒットラインと以前の反復で処理された最終位置ヒットライン63との間のストリップ50がトライアングル51のサイズに一致するピクセル46のサイズを有するまで、移動時に、リファインされたヒットライン57を曲げる(ステップS10)。
【0083】
図24を参照して、最後の反復時に、最後のライン65が、時計回り方向または反時計回り方向のいずれかにおいて終点42に達するまで、セクション35ごとに宛先座標系32においてエッジ44に沿って終点42と最後のリファインされたヒットポイント56との間に生成される。時計回り経路または反時計回り経路80、81のいずれかに沿って移動する際に終点42と遭遇する最後のコーナーポイント82との間のエッジ44上にリファインされたヒットポイント56が存在しない場合は、最後のライン65は、終点42から遭遇する最後のコーナーポイント82までのエッジ44の全長に沿って生成される。
【0084】
頂点34がストリップ50に隣接している場合は、頂点34はトライアングル頂点53としても用いられる。
【0085】
図24を引き続き参照して、最終位置ヒットポイント56の対ごとに最終位置ヒットライン62が引かれている。例示のためにのみ、トライアングルストリップ52がストリップ50内に描かれている。
【0086】
トライアングルストリップの生成
図23を参照して、最初のライン61と最終位置ヒットライン63との間の宛先座標系32においてセクション35のストリップ50内にトライアングル51が生成されて、トライアングルストリップ52を作成している。トライアングル51の頂点53は、最終位置ヒットポイント62と、最初のラインポイント64と、リファインされたヒットポイント56とによって求められる。
【0087】
図24を参照して、トライアングルストリップ52はストリップ50ごとに反復的に生成され、始点41に最も近い最終位置ヒットライン62から開始して、終点42に向かって移動する。トライアングルストリップ52に分割される第1のストリップ50は、始点41に最も近い最終位置ヒットライン62と、最初のライン63と、エッジ44とによって境界が付けられる。トライアングルストリップ52に分割される第2のストリップ50は、始点41に最も近い第1および第2の最終位置ヒットライン62とエッジ44とによって境界が付けられる。反復は、終点42の境界を付けるストリップ50に達するまで継続する。トライアングルストリップ52に分割される最終ストリップ50は、終点42の境界を付け、最終位置ヒットライン62と、最後のライン65と、エッジ44とによって境界が付けられる。
【0088】
反復ごとに、第2の境界を形成する現在の最終位置ヒットライン62と、第1の境界を形成する以前の最終位置ヒットライン62とがある。第1のストリップ50については、最初のライン63が以前のヒットラインとして用いられる。最後の反復については、最後のライン65が現在の最終位置ヒットラインとして用いられる。
【0089】
図25を参照して、第1のトライアングルが第2のストリップ50内に求められる。2つの距離L1とL2とを比較することによって、トライアングルストリップ52の最初の3つのポイントが求められる。L1は、現在の最終位置ヒットライン上の第1のポイントと以前の最終位置ヒットラインに沿った第2のポイントとの間の距離である。L2は、以前の最終位置ヒットライン上の第1のポイントと現在の最終位置ヒットライン上の第2のポイントとの間の距離である。L1がL2以上である場合、トライアングルストリップ52内の第1のトライアングル51は、現在の最終位置ヒットラインに沿った最初の2つのポイントと以前の最終位置ヒットラインに沿った第1のポイントとの間に描かれる。
【0090】
図26を参照して、トライアングルレンダリング時、カリングは、特定の向きを有するトライアングルの除去を可能にするためにトライアングルレンダリングハードウェア(HW)およびアプリケーションプログラミングインターフェイス(API)上で用いられることが多い処理である。この処理は一般に「背面カリング」と呼ばれ、たとえば、2Dで投影されたトライアングルを確認するために3Dグラフィックスハードウェアとともに用いられる。いくつかの実装例では、トライアングルストリップが正しくレンダリングされることを確実にするために、レンダリングされるトライアングルについてのトライアングル向き(カリング=レンダリングパイプラインからのトライアングルの除去)をしかるべく調整する必要がある。このため、必要なカリング方向が以前に設定された方向とは異なる場合に備えて、ハードウェアの構成レジスタ内の特定のビットを、TRIコマンドの前に「write register short」(WTS)命令によって更新しなければならない場合がある。
【0091】
背面カリング処理が実行される場合、カリング方向73はトライアングルストリップ52内の第1のトライアングル51に基づいて求められ得る。カリング方向73は、画像歪み補償モジュール13が歪み画像データ9のレンダリングに成功することができるように、表示リスト22によってしかるべく更新する必要があり得る。カリング方向73は、トライアングルストリップ52内の最初の3つのトライアングル頂点53によって定義されるトライアングル51に基づく。背面カリングを有さないトライアングルレンダリング処理もある。トライアングルレンダリング処理の実行は座標系(たとえば、右手側対左手側)に依存し得る。レンダリング技術は、たとえばプレーンジオメトリを用いてもよい。
【0092】
【数1】
【0093】
図27を参照して、ストリップ50がトライアングルに分割されており、カリング方向73は典型的には、トライアングルストリップ52を生成する現在のまたは以前の最終位置ヒットライン上に残っているポイントがなくなるまで、時計回りと反時計回りとを交互に繰り返す。ストリップ50内の第1のトライアングル51のカリング方向だけはハードウェアによって決定する必要があり、当該カリング方向はストリップ内の後続の各トライアングルで更新する必要はない。
【0094】
図28を参照して、トライアングルの縮退を避けるために、余分なポイント66がエッジ44に沿って追加されている。トライアングルストリップ52が作られ、反復時に余分なポイント66を組み込んでいる。
【0095】
図29を参照して、以前の最終位置ヒットラインと次の最終位置ヒットラインとを接続するトライアングルエッジの長さをできるだけ短くするために、「スワップ」がトライアングルストリップ52に追加されている。平均の接続エッジは、現在のおよび以前の最終位置ヒットライン62に対してほぼ直交しているべきであり、これにより最短エッジが与えられる。これは、長距離にわたる非線形マッピングの線形補間による画質劣化を避けるためである。
【0096】
スワップが追加され得る状況は2つある。第1の状況は、トライアングル51を作るために、現在のもしくは以前の最終位置ヒットラインのいずれかのすべてのポイントが用いられた、または最後のポイント間の距離が用いられた場合である。第2の状況は、以前のトライアングルを作るために用いた以前のポイントと以前の最終位置ヒットライン上の次のポイントとの間の距離(L3)が、以前の最終位置ヒットライン上の以前のポイントと現在の最終位置ヒットライン上の次のポイントとの間の距離(L4)以上である場合である。トライアングルレンダリングの処理時は、頻繁なスワップを避けるためにスワップを挿入するたびにペナルティが含まれる。スワップは以前のポイントを再び追加することによって追加され、この結果、ゼロサイズのトライアングルが生じ、これは典型的にはレンダリングハードウェアによって廃棄されるため、トライアングルの向きが効果的にスワップされる。この追加ポイントをトライアングル内の第2のポイントとして用いて、トライアングルストリップ52内の次のトライアングル51が生成される。
【0097】
図29を引き続き参照して、ここに図示されている場合においてトライアングルエッジの長さを最小にすることは、L4がL3よりも短いため、L4を選択することを意味する。L4は、トライアングルストリップ52内のトライアングル51のうちの2つのトライアングルエッジになる。
【0098】
図30を参照して、宛先座標におけるセクション35のストリップ50がトライアングル51に分割されてトライアングルストリップ52を作っている。ストリップ52は1つのスワップおよび余分なポイント66を含む。
【0099】
最大のトライアングル51のサイズは、たとえばハードウェアの制約のために128ピクセルに制限され得る。しかしながら、最大のトライアングルサイズはより小さくても大きくてもよい。最大または最小のトライアングル51のサイズを決定づける他の制約があってもよい。
【0100】
表示リストの実装
図31を参照して、重ね合わされた最終位置ヒットライン63の例を示す、宛先座標32における歪み補正された画像データ23の例示的なセクションが示されている。最終位置ヒットライン63はセクションインターフェイスにおいて交わらなくてもよい。頂点53を含むトライアングルストリップ52の例が、このセクションにおけるストリップについて示されている。
【0101】
宛先座標系32において、歪み補償モジュール13は、命令の順序付きリスト(たとえば表示リスト22)を用いて、トライアングルストリップ52内に形成されるトライアングル51をセットアップする。この処理によって、外側エッジ44が生成され、宛先セクション35に対してクリップされるスキャンライン単位の「ラン」(クリップ座標)が生成され、外側スキャンラインおよび/またはピクセルならびにいずれのゼロピクセルスキャンラインも廃棄される。
【0102】
宛先座標系32における各ピクセル46は、1つ以上のピクセル46処理段階に入力され、当該段階では、ソース座標系30と宛先座標系32との間のマッピング技術を用いて実際のテクスチャ座標が求められる。当該マッピング技術は、たとえば、線形補間、重心座標、または他の方法であってもよい。
【0103】
ピクセル46処理段階の別の例は、OpenGLにおけるピクセルシェーダであるが、レジスタセットアップによって求められた固定関数を用いる。
【0104】
これらの処理は、たとえば消費者3Dグラフィックスカードなどの他のハードウェ上で実行されてもよい。
【0105】
図32を参照して、ソース座標系30における歪み画像データ9の例示的なセクションが示されている。最終位置ヒットライン63が例示のために重ね合わせられている。図23からのトライアングルストリップ52もここに示されている。ストリップ50はラインメモリブロック47の高さ45である。
【0106】
他の実装例
上記で生成された命令の順序付きリストは、3Dメッシュ上への表面テクスチャのマッピング(「テクスチャアトラス作成」としても公知)、または大きなテクスチャアトラスを用いる3Dメッシュの高速レンダリングなど、さまざまなアプリケーションについての多種多様な実装例で用いられてもよい。
【0107】
そのような命令の順序付きリストは、本明細書に説明したのと同様に最適化され、データの一部をランダムアクセスメモリ(RAM)にロードしてそれをレンダリングする必要があるたとえば地震学的画像などの大きなデータセットの効率的なレンダリングを可能にして、データセット全体をレンダリングするために必要なロードの数を最小にすることによって、レンダリング時間を最小にするために用いられてもよい。
【0108】
変形
上述の実施形態に対してさまざまな変形をなし得ることが理解されるであろう。このような変形は、画像歪み補正モジュールおよびそのコンポーネント部品の設計、製造、および使用において既に公知でありかつ本明細書に既に記載の特徴の代わりにまたはそれに加えて使用し得る、均等なその他の特徴を含み得る。ある実施形態の特徴は別の実施形態の特徴によって置き換えるまたは補足することができる。
【0109】
CPUは2つ以上あってもよい。
請求項は本願において特定の特徴の組み合わせについて作成したが、本発明の開示の範囲は、いずれかの請求項において現在クレームされているものと同じ発明に関連するか否か、および、これが本発明と同一の技術的課題のうちのいずれかまたはすべてを緩和するか否かとは関係なく、本明細書に明示的または暗示的に開示されている新規の特徴または新規の特徴の組み合わせも含むことを理解すべきである。本願または本願から派生するその他いずれかの出願の手続中に、このような特徴および/またはこのような特徴の組み合わせに関して新たな請求項を作成し得ることを、出願人は通知する。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32