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

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

▶ エヌビディア コーポレーションの特許一覧

特許7429542拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別
<>
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図1A
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図1B
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図2A
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図2B
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図2C
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図3
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図4
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図5
  • 特許-拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-31
(45)【発行日】2024-02-08
(54)【発明の名称】拡張現実、仮想現実、ロボティクスに適したグラフィカルな基準マーカ識別
(51)【国際特許分類】
   G06T 7/60 20170101AFI20240201BHJP
   G06T 7/136 20170101ALI20240201BHJP
【FI】
G06T7/60 300A
G06T7/136
【請求項の数】 20
【外国語出願】
(21)【出願番号】P 2020003331
(22)【出願日】2020-01-14
(65)【公開番号】P2020119550
(43)【公開日】2020-08-06
【審査請求日】2022-10-17
(31)【優先権主張番号】16/248,135
(32)【優先日】2019-01-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】501450960
【氏名又は名称】エヌビディア コーポレーション
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ブカシン ミロバノビッチ
(72)【発明者】
【氏名】ジョイ デスーザ
(72)【発明者】
【氏名】ロシェル ペレイラ
(72)【発明者】
【氏名】チエンユアン ミン
【審査官】伊知地 和之
(56)【参考文献】
【文献】特開2011-076374(JP,A)
【文献】特開2007-333679(JP,A)
【文献】米国特許出願公開第2007/0098234(US,A1)
【文献】米国特許出願公開第2012/0095433(US,A1)
【文献】John WANG et al.,“AprilTag 2: Efficient and robust fiducial detection”,2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS),2016年10月,pp.4193-4198
【文献】柴田直樹他,SumiTag:あまり目立たないARマーカーとGPGPUを利用した読み取り方法,情報処理学会研究報告 2011(平成23)年度(4) [CD-ROM] ,日本,一般社団法人情報処理学会,2011年12月15日,pp.1-9
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/00
G06T 3/00 - 3/60
G06T 5/00 - 5/50
G06T 7/00 - 7/90
G06T 11/60 - 13/80
G06T 17/05
G06T 19/00 - 19/20
G06V 10/00 - 20/90
G06V 30/418
G06V 40/16
G06V 40/20
CSDB(日本国特許庁)
(57)【特許請求の範囲】
【請求項1】
画像を表す画像データを受け取ることと、
前記画像データを、高次元の色空間から、低次元の色空間の変換画像に変換することと、
前記変換画像内の境界に相当する第1のピクセルを識別することと、
候補コーナ点を表す第2のピクセルを検出することと、
前記第1のピクセルと前記第2のピクセルとに基づいて、前記境界のうちの少なくとも1つまでのしきいピクセル距離内にある前記候補コーナ点のセットを判定することと、
前記候補コーナ点の前記セットを分析して、少なくとも1つのポリゴンのコーナを表す前記候補コーナ点のサブセットを判定することと、
少なくとも1つのフィルタを、前記少なくとも1つのポリゴンに適用して、基準マーカの基準マーカ境界に対応するものとして、前記少なくとも1つのポリゴンのうちのポリゴンを識別することとを備えた、方法。
【請求項2】
前記画像データを前記変換画像に前記変換することは、グローバルしきい値処理又は適応しきい値処理のうちの少なくとも1つを備えた、請求項1に記載の方法。
【請求項3】
前記境界に相当する前記第1のピクセルを前記識別することは、
前記変換画像において、第1の色のピクセルの第1の連続クラスタと、第2の色のピクセルの第2の連続クラスタとを識別することと、
前記第1の連続クラスタのうちの少なくとも1つと、前記第2の連続クラスタのうちの少なくとも1つとが、互いに隣接して延びるところを識別することに少なくとも部分的に基づいて、前記境界に相当する前記第1のピクセルを判定することとを備えた、請求項1に記載の方法。
【請求項4】
前記基準マーカは、AprilTag、ARTag、ARToolkit基準マーカ、又はARToolkitPlus基準マーカのうちの1つである、請求項1に記載の方法。
【請求項5】
前記候補コーナ点を表す前記画像内の前記第2のピクセルを前記検出することと、前記画像データを前記変換画像に前記変換することと、前記変換画像内の前記境界に相当する前記第1のピクセルを前記識別することと、前記境界のうちの前記少なくとも1つまでの前記しきい距離内にある前記候補コーナ点の前記セットを前記判定することとのうちの少なくとも1つは、グラフィック処理装置(GPU)によって実行される、請求項1に記載の方法。
【請求項6】
前記画像データを前記変換画像に前記変換することは、
前記画像データを、前記画像のグレースケール・バージョンを表すグレースケール画像データに変換することと、
前記画像のバイナリ・バージョンを表すバイナリ画像データを生成するために、前記グレースケール画像データをしきい値処理することとを備え、
前記変換画像は、前記画像の前記バイナリ・バージョンである、請求項1に記載の方法。
【請求項7】
前記変換画像内の前記境界に相当する前記第1のピクセルを前記識別することは、前記候補コーナ点を表す前記画像内の前記第2のピクセルを前記検出することと並列に実行される、請求項1に記載の方法。
【請求項8】
前記候補コーナ点の前記セットを前記分析して、前記少なくとも1つのポリゴンの前記コーナを表す前記候補コーナ点の前記サブセットを判定することは、
同じ境界IDに関連付けられた前記候補コーナ点の前記セットのメンバを判定することと、
前記候補コーナ点の前記セットの前記メンバ間に延びるエッジを生成することと、
前記エッジの隣接するエッジによって形成される角度を計算することと、
最小の大きさの角度のセットに関連付けられた前記候補コーナ点の前記セットの前記メンバを、前記候補コーナ点の前記サブセットとして識別することとを備えた、請求項1に記載の方法。
【請求項9】
前記少なくとも1つのフィルタを、前記少なくとも1つのポリゴンに前記適用することは、
前記少なくとも1つのポリゴンを表すピクセル・データを生成するために、前記少なくとも1つのポリゴン内のピクセル値を復号することと、
前記ピクセル・データを、基準マーカを表す基準マーカ・データと比較することと、
前記比較することに少なくとも部分的に基づいて、前記少なくとも1つのポリゴンのいずれかが前記基準マーカのいずれかに対応するか否かを判定することとを備えた、請求項1に記載の方法。
【請求項10】
第1の画像における境界を表すデータと、前記境界の関連付けられた境界識別子(ID)とを受け取ることと、
前記境界のうちの少なくとも1つの境界までのしきいピクセル距離内の候補コーナ点を表す、前記第1の画像又は第2の画像のうちの少なくとも1つにおけるピクセルを判定することと、
前記境界の各境界について、
前記境界IDに少なくとも部分的に基づいて、同じ境界IDに関連付けられた前記候補コーナ点のセットを判定することと、
前記候補コーナ点の前記セットのメンバ間に延びるエッジを生成することと、
前記エッジの隣接するエッジによって形成される角度を計算することと、
最小の大きさの角度のセットに関連付けられた前記候補コーナ点の前記セットのサブセットを、四辺形のコーナとして識別することと、
前記四辺形が、基準マーカの基準マーカ境界に対応するか否かを判定するために、少なくとも1つのフィルタを、前記四辺形に適用することとを備えた、方法。
【請求項11】
前記方法の少なくとも第1の部分は、中央処理装置(CPU)において実行され、前記方法の第2の部分は、グラフィック処理装置(GPU)において実行される、請求項10に記載の方法。
【請求項12】
前記少なくとも1つのフィルタを、前記四辺形に前記適用することは、
前記四辺形を表すピクセル・データを判定するために、前記四辺形内のピクセル値を復号することと、
前記ピクセル・データを、基準マーカを表す基準マーカ・データと比較することと、
前記比較することに少なくとも部分的に基づいて、前記四辺形が前記基準マーカのいずれかに対応するか否かを判定することとを備えた、請求項10に記載の方法。
【請求項13】
前記候補コーナ点の前記セットの前記メンバ間に延びる前記エッジを前記生成することは、前記メンバの各メンバについて、
前記メンバから、前記メンバの第1の隣接するメンバへ延びる第1のエッジを生成することと、
前記メンバから、前記メンバの第2の隣接するメンバへ延びる第2のエッジを生成することとを備えた、請求項10に記載の方法。
【請求項14】
前記エッジを前記生成することに少なくとも部分的に基づいて、第1のエッジは、前記候補コーナ点の前記メンバの第1のメンバから、前記第1のメンバに隣接する前記メンバの第2のメンバへ延び、
前記エッジを前記生成することに少なくとも部分的に基づいて、第2のエッジは、前記候補コーナ点の前記メンバの前記第1のメンバから、前記第1のメンバに隣接する前記メンバの第3のメンバへ延び、
前記第1のエッジ及び前記第2のエッジは、前記隣接するエッジに含まれ、
前記エッジの前記隣接するエッジによって形成される前記角度を前記計算することは、前記第1のエッジ及び前記第2のエッジによって形成される角度を計算することを含む、請求項10に記載の方法。
【請求項15】
前記基準マーカは、AprilTag、ARTag、ARToolkit基準マーカ、又はARToolkitPlus基準マーカのうちの1つである、請求項10に記載の方法。
【請求項16】
候補コーナ点を表す画像内の第1のピクセルを、1つ又は複数のグラフィック処理装置(GPU)によって判定することと、
前記画像内の境界を表す前記画像内の第2のピクセルを、1つ又は複数のグラフィック処理装置(GPU)によって判定することと、
前記境界に相当する前記2つのピクセルの記1つ又は複数から、閾値ピクセル距離内にある前記第1のピクセルに相当する前記候補コーナ点のセットを、1つ又は複数のグラフィック処理装置(GPU)によって判定することと、
前記1つ又は複数のGPUによって、GPUメモリから中央処理装置(CPU)メモリに前記候補コーナ点のセットをコピーすることであって、前記CPUメモリは、1つ又は複数のCPUに関連付けられた、コピーすることと、
前記境界の各境界について、
前記少なくとも1つの境界のうちの同じ境界に関連付けられた前記候補コーナ点のセットのサブセットを、前記1つ又は複数のCPUによって判定することと、
前記候補コーナ点の前記セットの前記サブセットのメンバ間に延びるエッジを、前記1つ又は複数のCPUによって生成することと、
前記エッジの隣接するエッジによって形成される角度を、前記1つ又は複数のCPUによって計算することと、
最小の大きさの角度のセットに関連付けられた前記候補コーナ点の前記セットの前記サブセットから前記候補コーナ点を、前記1つ又は複数のCPUによって、四辺形のコーナとして識別することと、
前記四辺形が基準マーカの基準マーカ境界に対応するか否かを、前記1つ又は複数のCPUによって判定することとを備えた、方法。
【請求項17】
前記四辺形が前記基準マーカの前記基準マーカ境界に対応するか否かを前記判定することは、
前記四辺形を表すピクセル・データを判定するために、前記四辺形内のピクセル値を復号することと、
前記ピクセル・データを、基準マーカを表す基準マーカ・データと比較することと、
前記比較することに少なくとも部分的に基づいて、前記四辺形が前記基準マーカのいずれかに対応するか否かを判定することとを備えた、請求項16に記載の方法。
【請求項18】
前記候補コーナ点の前記セットの前記サブセットの前記メンバ間に延びる前記エッジを前記生成することは、前記メンバの各メンバについて、
前記メンバから、前記メンバの第1の隣接するメンバへ延びる第1のエッジを生成することと、
前記メンバから、前記メンバの第2の隣接するメンバへ延びる第2のエッジを生成することとを備えた、請求項16に記載の方法。
【請求項19】
前記エッジを前記生成することに少なくとも部分的に基づいて、第1のエッジは、前記候補コーナ点の前記メンバの第1のメンバから、前記第1のメンバに隣接する前記メンバの第2のメンバへ延び、
前記エッジを前記生成することに少なくとも部分的に基づいて、第2のエッジは、前記候補コーナ点の前記メンバの前記第1のメンバから、前記第1のメンバに隣接する前記メンバの第3のメンバへ延び、
前記第1のエッジ及び前記第2のエッジは、前記隣接するエッジに含まれ、
前記エッジの前記隣接するエッジによって形成される前記角度を前記計算することは、前記第1のエッジ及び前記第2のエッジによって形成される角度を計算することを含む、請求項16に記載の方法。
【請求項20】
前記基準マーカは、AprilTag、ARTag、ARToolkit基準マーカ、又はARToolkitPlus基準マーカのうちの1つである、請求項16に記載の方法。
【発明の詳細な説明】
【背景技術】
【0001】
AprilTag、ARTag、ARToolkit、ARToolkitPlus、RUNE-Tag、reacTIVison、QRコード(登録商標)などの基準マーカは、仮想現実、拡張現実、ロボティクス、及びオブジェクトのローカリゼーションのための他の技術分野(たとえば、ロボットからロボットへのローカリゼーション)、オブジェクトの識別、オブジェクトの位置の検出、オブジェクトの方位の検出、仮想現実ヘッドセットのテスト、環境内のオブジェクトの追跡、同時ローカリゼーション及びマッピング(SLAM)アルゴリズム評価、カメラ・キャリブレーション、及び他の用途で使用されてきた。通常、基準マーカは、ポリゴン内の所定の配置においてグラフィカルなデータのパターンとして展開され、各パターンは、対応するデータ・レコード(ユーザ・アカウント、ユニット、製品、メッセージなど)に一意にマッピングされる。これらの目的のために基準マーカを使用するためには、特殊なアルゴリズムを使用して、シーン又は環境における基準マーカを検出及び識別する。
【0002】
基準マーカを検出するためのいくつかの従来のアプローチは、入力画像内の線を識別し、それらをポリゴンに結合するためのグラフ・ベースの画像分割アルゴリズムに依存してきた。これらのアプローチは、圧倒的な数の識別されたポリゴン(たとえば、四辺形)をもたらし、それにより、ポリゴンをフィルタ処理して画像内の実際の基準マーカを識別するときに、コンピューティング・リソースを消耗する。さらに、いくつかの従来のアプローチでは、分割を使用して画像内の境界を識別し、境界に沿ったピクセルのおのおのを分析して、ポリゴンのコーナを判定する。しかしながら、境界に沿ったピクセルのおのおのの分析は非効率的であり、コンピューティング、時間、及びエネルギのコストが大幅に増加する。
【0003】
上述のように、これらの従来の方法のおのおのは、コンピューティング及びエネルギのリソースの著しい消耗をもたらす。これは、基準マーカを識別するために中央処理装置(CPU)に依存していることによって悪化される。たとえば、CPUの処理限界により、これらの従来のアプローチは、たとえば、640×480(たとえば、480p)の解像度を有する入力画像で、毎秒30フレーム(fps)のフレーム・レートで動作でき得るが、1920×1080(たとえば、1080p)の解像度の入力画像に対して10fpsのフレーム・レートでのみ動作でき得る。このような低フレーム・レートは、特に入力画像の解像度が(たとえば、3840×2160(たとえば、4k)、7680×4320(たとえば、8k)、又はそれ以上へ)増加し続けるので、基準マーカの多くの用途のために必要とされる機能性をサポートしない場合がある。
【発明の概要】
【課題を解決するための手段】
【0004】
本開示の実施例は、グラフィカルな基準マーカ識別に関する。より具体的には、いくつかの実例では、グラフィック処理装置(GPU)において少なくとも部分的に実施されるコンピュータ・ビジョン処理を使用して、基準マーカを含む環境を表す画像データを使用して基準マーカを識別するシステム及び方法が開示される。
【0005】
上述のような従来のシステムとは対照的に、本システムは、入力画像内の境界を識別するために、入力画像のフィルタ処理及び分割を実施し得る。このように境界を識別することにより、入力画像内の多数の四辺形又は他のポリゴンを識別することに関連する従来のアプローチの欠点が大幅に低減される。それに加えて、いくつかの実例では、本システムは、画像しきい値処理及び分割処理と並列に、入力画像内のオブジェクトのコーナに対応するピクセルを識別するためのコーナ検出を実施し得る。その後、入力画像内の境界のうちの1つまで、しきい距離内のコーナのみが残るように、識別されたコーナがフィルタ処理される。このようにコーナを識別及びフィルタ処理することにより、入力画像内のポリゴンを検出及び処理するために必要なピクセル数が少なくなるため、それにより、基準マーカの識別のためのコンピューティング・コストが大幅に低減される。
【0006】
それに加えて、従来のシステムとはさらに対照的に、本システムは、GPU上で少なくともいくつかの処理を実施し得る。そうすることで、特に2つ以上の処理(たとえば、画像しきい値処理、画像分割、及び/又はコーナ検出)が並列に実行される場合、処理の実行効率が向上する。さらに、処理のいくつかをGPUにオフロードすることにより、中央処理装置(CPU)に必要な処理量はわずかとなり得るため、コンピューティング及びエネルギの要件も低減しながら、システムの全体的な効率及び有効性が向上する。たとえば、本明細書で説明される処理は、入力画像内の基準マーカを毎秒30フレーム(fps)以上のフレーム・レートで効果的に識別することにより、システムが、より高い画像解像度(たとえば、1080p、4kなど)で効果的に実行できるようにし得る。
【0007】
グラフィカルな基準マーカ識別のための本システム及び方法は、添付の図面を参照して以下で詳細に説明される。
【図面の簡単な説明】
【0008】
図1A】本開示のいくつかの実施例による、基準マーカ識別システムのシステム図である。
図1B】本開示のいくつかの実施例による、図1Aの基準マーカ識別システムによって実施され得る処理を示す例示的なデータ・フロー図である。
図2A】本開示のいくつかの実施例による、基準マーカ識別のための例示的なデータ・フロー図である。
図2B】本開示のいくつかの実施例による、基準マーカ識別のための別の例示的なデータ・フロー図である。
図2C】本開示のいくつかの実施例による、基準マーカ識別のための別の例示的なデータ・フロー図である。
図3】本開示のいくつかの実施例による、基準マーカ識別方法の一部の例示的な図である。
図4】本開示のいくつかの実施例による、基準マーカ識別のための方法を示すフロー図である。
図5】本開示のいくつかの実施例による、基準マーカ識別のための別の方法を示すフロー図である。
図6】本開示のいくつかの実施例を実施する際の使用に適した例示的なコンピューティング・デバイスのブロック図である。
【発明を実施するための形態】
【0009】
グラフィック処理装置を使用する基準マーカ識別に関連するシステム及び方法が開示される。図1Aを参照して示すように、図1Aは、本開示のいくつかの実施例による、基準マーカ識別システム100の例示的なシステム図である。本明細書で説明されるこの配置及び他の配置は、実例としてのみ記載されていることを理解されたい。示されているものに加えて、又はその代わりに、他の配置及び要素(たとえば、マシン、インターフェース、機能、順序、機能のグループ化など)を使用でき、いくつかの要素は完全に省略され得る。さらに、本明細書で説明される要素の多くは、個別の構成要素又は分散された構成要素として、又は他の構成要素と連携して、任意の適切な組合せ及び場所で実施され得る機能エンティティである。エンティティによって実行されるものとして本明細書で説明される様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、メモリに記憶された命令を実行するプロセッサによって、様々な機能が実行され得る。
【0010】
基準マーカ識別システム100は、とりわけ、コンピューティング・デバイス102、コンピューティング・デバイス130、及び/又はネットワーク128を含み得る。コンピューティング・デバイス102及びコンピューティング・デバイス130が図1に示されているが、これは限定することを意図していない。任意の実施例では、任意の数のコンピューティング・デバイス102及び/又はコンピューティング・デバイス130が存在し得る。基準マーカ識別システム100(及び、その構成要素及び/又は特徴)は、本明細書にさらに詳細に説明されるように、図6のコンピューティング・デバイス600のような1つ又は複数のコンピューティング・デバイスを使用して実施され得る。
【0011】
基準マーカ識別システム100の構成要素は、ネットワーク128を介して通信し得る。ネットワークには、広域ネットワーク(WAN)(たとえば、インターネット、公衆交換電話網(PSTN)など)、ローカル・エリア・ネットワーク(LAN)(たとえば、Wi-Fi、ZigBee、Z-Wave、Bluetooth(登録商標)、Bluetooth(登録商標) Low Energy(BLE)、Ethernet(登録商標)など)、低電力広域ネットワーク(LPWAN)(たとえば、LoRaWAN、Sigfoxなど)、グローバル・ナビゲーション衛星システム(GNSS)ネットワーク(たとえば、全地球測位システム(GPS))、及び/又は別のネットワーク・タイプを含み得る。いずれの実例でも、基準マーカ識別システム100の構成要素のおのおのは、ネットワーク128の1つ又は複数を介して、他の構成要素の1つ又は複数と通信し得る。
【0012】
コンピューティング・デバイス102(及び/又はコンピューティング・デバイス130)は、スマート・フォン、ラップトップ・コンピュータ、タブレット・コンピュータ、デスクトップ・コンピュータ、ウェアラブル・デバイス、ゲーム・コンソール、仮想現実システム(たとえば、ヘッドセット、コンピュータ、車両、ゲーム・コンソール、リモート、コントローラ、及び/又はその他の構成要素)、拡張現実システム、インテリジェント・パーソナル・アシスタントを含み得るスマート・ホーム・デバイス、ロボティクス・デバイス、スマート・カメラ又はIoTカメラ、及び/又は、基準マーカの識別が可能な(たとえば、入力画像内の1つ又は複数の基準マーカを識別するために入力画像を分析することが可能な)他の任意のタイプのデバイスを含み得る。
【0013】
コンピューティング・デバイス102は、画像マネジャ104、しきい値処理器106、画像分割器108、コーナ検出器110、コーナ・フィルタ112、クワッド・フィッタ114、デコーダ116、基準マーカ・マネジャ118、カメラ120、グラフィック処理装置(GPU)122、中央処理装置(CPU)124、データ・ストア126、及び/又は追加又は代替の構成要素を含み得る。いくつかの実例では、構成要素又は特徴の1つ又は複数は、第1のコンピューティング・デバイス102によって実施され得、他の構成要素又は特徴の1つ又は複数は、第2のコンピューティング・デバイス102及び/又は130によって実施され得る。たとえば、処理132の少なくともいくつかは、第1のコンピューティング・デバイス102によって実施され得、処理132の少なくともいくつかは、第2のコンピューティング・デバイス102及び/又は130によって実施され得る。他の実例では、処理132の処理ブロックのおのおのは、単一のコンピューティング・デバイスによって実施され得る。
【0014】
非限定的な実例では、第1のコンピューティング・デバイス102は、カメラ120を使用して画像をキャプチャし得、別のコンピューティング・デバイス102及び/又は130は、処理132に従って画像を処理し得る。さらに別の非限定的な実例では、同じコンピューティング・デバイス102は、カメラ120を使用して画像をキャプチャし得、処理132に従って画像を処理し得る。たとえば、第1のコンピューティング・デバイス102はロボット内にあり得、第2のコンピューティング・デバイス102及び/又は130は、サーバであり得るか、及び/又は、別のロボット内にあり得、これによって、ロボットは、画像をキャプチャし得るか、及び/又は、いくつかの処理を実行し得る一方、他の処理は、サーバ及び/又は他のロボットにオフロードされる。いくつかの実例では、コンピューティング・デバイス102は、仮想現実システムであり得、システムは、ヘッドセット、コンピュータを含み得るか、及び/又は、ネットワーク128を介して1つ又は複数のサーバと通信し得る。その結果、処理132は、ヘッドセット、コンピュータ、及び/又は、サーバによって実行され得る。本開示の範囲から逸脱することなく、他の実例が企図される。言い換えれば、コンピューティング・デバイス102及び/又は130の任意の組合せを使用して、基準マーカ識別システムを実施し、処理132、及び/又は、基準マーカ識別のための他の処理を実行し得る。
【0015】
基準マーカ識別システム100は、いくつかの異なる方法及び/又は処理のいずれかに従って基準マーカ識別を実行するために使用され得る。言い換えれば、システム100の構成要素及び機能性は、基準マーカ識別のための処理132を示す図1Bのデータ・フロー図に関して本明細書で説明され得るが、これは、限定することを意図していない。たとえば、適応しきい値処理136及び画像分割138は、コーナ検出140と並列に実行されるものとして示されているが、これは限定することを意図していない。いくつかの実例では、追加又は代替の処理ブロックが並列に実行され得るか、又は処理132の処理ブロックのいずれも並列に実行され得ない。別の実例として、追加又は代替の処理ブロックは、図1Bに示されたもの以外の基準マーカ識別システム100によって実施され得る。
【0016】
図1Bを参照して示すように、図1Bは、本開示のいくつかの実施例による、図1Aの基準マーカ識別システム100によって実施され得る処理132を示す例示的なデータ・フロー図である。処理132は、限定することなく、コンピューティング・デバイス102のGPU122及びCPU124において実施され得る。たとえば、効率を高めるために、より計算的に高価な処理132の処理ブロックが、GPU122において実施され得る。それに加えて、GPU122において処理ブロックの少なくともいくつかを実施することにより、2つ以上の処理ブロックが並列に実施され得る(たとえば、NVIDIAのCUDAを使用した並列処理)。たとえば、GPU122は多数のスレッドを同時に実行することができ得、GPU122は、GPU122において処理ブロックの少なくともいくつかを実施することによって、CPU124よりも画像データの処理により適し得るので、画像内の基準マーカを識別するための計算時間は、本明細書で説明されるような従来のアプローチと比較して大幅に低減され得る。それに加えて、本明細書で説明されるように、処理132自体は、CPU124上で実施されたとしても、従来のアプローチと比較して計算時間を低減する処理ブロックを含む。その結果、より効率的な処理132を作成し、GPU122において少なくとも部分的に処理132を実施することにより、画像内の基準マーカを識別するのに必要な全体的な処理要件、計算能力、エネルギ、帯域幅リソースが大幅に低減される。
【0017】
いくつかの実例では、限定することなく、図1Bの破線150の上方に示される処理132の処理ブロックは、コンピューティング・デバイス102のGPU122において少なくとも部分的に実行され得、破線150の下方に示される処理ブロックは、コンピューティング・デバイス102のCPU124において少なくとも部分的に実行され得る。
【0018】
処理132は、入力画像受取134を含み得る。たとえば、入力画像202(図2A)を表す画像データが、画像マネジャ104によって、(たとえば、入力画像202がカメラ120によってキャプチャされることに応答して)受け取られ、及び/又は、管理され得る。たとえば、入力画像202は、入力画像受取134の際に画像マネジャ104によりデータ・ストア126に記憶され得るか、及び/又は、画像マネジャ104によってデータ・ストア126から取得され、入力画像202が、別の処理ブロック(たとえば、適応しきい値処理136、コーナ検出140など)へ渡され得る。
【0019】
いくつかの実例では、入力画像202は、(本明細書でより詳細に説明される)適応しきい値処理136の結果として生成される変換画像よりも高次元の色空間からなり得る。たとえば、入力画像202は、赤、緑、及び青(RGB)カラー画像、シアン、マゼンタ、黄、及び黒(CMYK)カラー画像、インデクス付きカラー画像、色相、彩度、及び明度(HSB)カラー画像、及び/又は別の画像タイプのようなカラー画像であり得る。
【0020】
図2Aに示されるように、入力画像202は、任意の数の基準マーカ204(たとえば、基準マーカ204A、基準マーカ204B、基準マーカ204Cなど)を含み得る。図2A図2C及び図3に関して説明された基準マーカ204は、AprilTagを含むが、これは限定することは意図されていない。たとえば、本開示の範囲から逸脱することなく、ARKit基準マーカ、ARToolkit、ARToolKitPlus、及び/又は他の基準マーカ・タイプを使用して、処理132の同様の処理及び/又は処理ブロックが実行され得る。
【0021】
入力画像202はさらに、たとえば、入力画像202の背景208に、テーブル206などの追加のオブジェクト、及び/又は、1つ又は複数の他のオブジェクト(図示せず)を含み得る。
【0022】
画像マネジャ104は、入力画像202の適応しきい値処理136のために、入力画像202をしきい値処理器106に伝送、送信、及び/又は渡し得、及び/又はコーナ検出140のために、入力画像202をコーナ検出器110に伝送、送信、及び/又は渡し得る。しきい値処理器106は、入力画像202を受け取り、実例として、限定することなく、入力画像202に対して適応しきい値処理136を実行し得る。しかしながら、他の実例では、他のタイプのしきい値処理が、しきい値処理器106によって実行され得る。たとえば、グローバルしきい値処理、ローカルしきい値処理、適応しきい値処理、及び/又はそれらの組合せは、適応しきい値処理に加えて又は代替として、しきい値処理器によって実行され得る。
【0023】
適応しきい値処理136を実施する場合、しきい値処理器106は、入力画像202を入力画像202のグレースケール・バージョン(たとえば、グレースケール入力画像)に変換し得る。グレースケール入力画像が生成されると、グレースケール入力画像の各ピクセルの周囲の領域における最小値及び最大値を発見するために、適応しきい値処理136が実行され得る。しかしながら、いくつかの実例では、グレースケール入力画像の各ピクセルの周囲の正確な極値(たとえば、最大値及び最小値)を計算する代わりに、グレースケール入力画像が、ピクセルのタイル(たとえば、いくつかの実例では、4×4ピクセル)に分割され得る。その後、タイルのおのおの内の極値(たとえば、最大及び最小)が計算され得る。極値の差が大きいタイル境界間でアーティファクトが発生しないように、(たとえば、少なくとも1つのタイルの重なりが、極値の算出に考慮されることを保証するため)入力グレースケール画像における隣接ピクセルのための極値を計算する場合、周囲のタイルのグループの極値(たとえば、いくつかの実例ではタイルの3×3近傍)が使用され得る。その結果、各ピクセルは、周囲のタイルからの最大値及び最小値を、その最大値及び最小値として採用し得る。所与のタイルにおいて、最大値と最小値とが近すぎる場合、タイルは十分高いコントラストを有していないと識別され得、タイル内のピクセルには、グレー(又は別の色)に関連付けられたピクセル値が割り当てられ、さらなる処理から省略され得る。タイルが十分なコントラストを有する場合、平均値(たとえば、(最大+最小)/2)をしきい値として使用して、各ピクセルに白又は黒の値が割り当てられ得る。
【0024】
適応しきい値処理136の結果は、変換画像210(本明細書では代わりにしきい値処理画像210とも呼ばれる)を含み得る。いくつかの実例では、(たとえば、さらなる処理で使用されるピクセルは、黒ピクセル及び白ピクセルのみであり得るため)変換画像210は、バイナリ画像であり得る、及び/又は、バイナリ画像と呼ばれ得る。そのため、変換画像210は、本明細書で説明されるように、入力画像202よりも低次元の色空間からなり得る。変換画像210に示されるように、適応しきい値処理136の結果として、白ピクセルに隣接する黒ピクセル、及び黒ピクセルに隣接する白ピクセルの領域212(たとえば、白領域212A及び黒領域212B)は、適応しきい値処理136後も白黒のままであり得る一方、変換画像210の他の部分214(たとえば、その中のピクセル)は、(たとえば、密集した対角線によって示されるように)グレーであり得る。たとえば、黒ピクセルのタイルが黒ピクセルのタイルで囲まれている領域は、コントラストが十分に高くない場合があり得、したがってグレーに変換され得る。いくつかの実例では、グレーを表すピクセル値(又は、基準マーカの識別のために重要ではないピクセルを示す別の色)が割り当てられたピクセルのいずれも、処理132の将来のあらゆる処理ブロックから除外され得る(たとえば、画像分割器108は、画像分割138を実行する場合、これらのピクセルを処理から除外し得る)。
【0025】
AprilTag、ARTagなどの基準マーカを識別する場合、(たとえば、基準マーカが白黒であるため)画像内の基準マーカに関連付けられたピクセルの色は黒又は白のみであり、結果として、この適応しきい値処理136の処理は、基準マーカを形成する白ピクセルと黒ピクセルの一貫した区別を可能にし得、他の色(たとえば、グレー)に変更される残りのピクセルを無視する。
【0026】
しきい値処理器106は、変換画像210を画像分割器108に伝送、送信、及び/又は渡し得る。画像分割器108は、画像分割138を実行して、変換画像210の連続的な白領域212A及び黒領域212Bをグループ化し、これらの領域212を分割する境界を抽出し得る。
【0027】
従来のアプローチは、反対の色の近傍ピクセル(たとえば、黒ピクセルに隣接する白ピクセル)を有するピクセルを識別し、その後、エッジとして識別されたこれらピクセルの連結グループ(たとえば、おのおの黒ピクセルに隣接する白ピクセルの連続グループ)を形成した。しかしながら、これら従来のアプローチは、白ピクセルのグループ化が単一のピクセルの幅しかない場合(たとえば、遠いタグ又は物理的に小さなタグの結果として)効果的ではない場合があり得る。このようなアプローチでは、単一のピクセル幅の白ピクセルのグループに隣接する黒ピクセルのグループは、誤って単一のエッジとして識別され得、その結果、基準マーカが検出されなくなる可能性がある。
【0028】
従来のアプローチのこれらの欠点を克服するために、画像分割器108は、結合発見ベースの領域クラスタリング及び領域境界抽出を使用し得る。結合発見ベースの領域クラスタリングは、変換画像210を、黒の連続領域と白の連続領域(たとえば、白領域212A及び黒領域212B)に分割又はグループ化することを含み得る。このように変換画像210を分割するために、変換画像210からの近傍の白ピクセルがともにグループ化され得、変換画像210からの近傍の黒ピクセルがともにグループ化され得る。この処理は、ローカル・マージ、境界処理、グローバル結合マージを含み得る。処理のおのおのは、GPU122を使用して(たとえば、第1のCUDAカーネルにおいてローカル・マージ、第2のCUDAカーネルにおいて境界処理、及び第3のCUDAカーネルにおいてグローバル結合マージのように)個別のカーネルで実施され得る。
【0029】
結合発見ベースの領域クラスタリングのローカル・マージ処理のために、変換画像210は、ピクセルのブロック(たとえば、4×4ピクセル、8×8ピクセルなど)に分割され得る。いくつかの実例では、ブロックのおのおのは、GPU122上の異なるスレッドに割り当てられ得、異なるスレッドは、共有メモリを使用して互いに協力することができ得るか、及び/又は、互いに同期可能であり得る。すべてのピクセルをその左の近傍のピクセルとその上の近傍のピクセルにリンクするために、ピクセルの各ブロックで行スキャン及び列スキャンが実行され得る。いくつかの実例では、リンクは、近傍ピクセルの強度が同じ場合(たとえば、黒又は白)にのみ形成され得る。ローカル・マージ後、ピクセルのブロック間ではなく、同じブロック内のピクセル間にのみリンクが存在し得る。
【0030】
結合発見ベースの領域クラスタリングの境界処理では、ピクセルのブロックの境界に沿ったセル(又はピクセル)は、ピクセルの近傍ブロックの境界に沿ったセル(又は、ピクセル)にリンクされ得る。たとえば、別の行スキャン及び列スキャンは、ピクセルの隣接ブロックの隣接境界に関してピクセルの各ブロックの境界で実行され得る。ローカル・マージ処理及び境界処理の後、変換画像210における各ピクセルは、同じ強度(たとえば、白又は黒)の近傍ピクセルへのリンクを有し得る。
【0031】
結合発見ベースの領域クラスタリングのグローバル結合マージ処理のために、連続する黒領域又は連続する白領域のピクセルのおのおのは、同じ代表的な親ピクセルにリンクされ得る。その後、連続する各黒領域及び連続する各白領域に、ユニークな領域識別子(ID)が割り当てられ得る。
【0032】
領域境界抽出のために、連続する黒領域と連続する白領域との間の境界が抽出され得る。領域境界抽出は、GPU122上で実行され得、より具体的には、処理カーネル(たとえば、CUDAカーネル)を使用して実行され得る。たとえば、境界は、領域IDによってラベル付けされた一連の順序付けられていない点として表され得る。境界は、ピクセルのブロック内のセル位置が、境界座標を符号化し得、セル値が、領域IDを示し得る2次元境界グリッドに記憶され得る。その後、各黒ピクセルと近傍の又は隣接する白ピクセルとの間の境界点が識別され得る。たとえば、領域ID「ID1」の画像座標「P1」の各黒ピクセルと、領域ID「ID2」の画像座標「P2」のその近傍の白ピクセルとが識別され得る。境界点は、その後、画像座標(たとえば(P1+P2)/2)によってインデクス付けされ、近傍の領域のIDに基づいて境界識別子(ID)値を割り当てられ得る(たとえば、2つの32ビットの領域IDは、そのうちの1つを32ビットシフトし、他のIDを追加して、ユニークな64ビット境界IDを取得することによって結合され得る)。
【0033】
たとえば、変換画像210に関して、領域境界抽出処理を使用して、白領域212Aと、白領域212Aに隣接又は近傍の黒領域との間の境界が、境界として識別され得る。同様に、白領域に隣接して延びる黒領域のおのおのについて、他の境界が識別され得、境界のおのおのは境界IDを割り当てられ得、境界IDは、単一の連続した境界を示す。
【0034】
結果として、上述のような従来のシステムとは対照的に、画像分割138の結果として、第1の黒領域及び第2の黒領域に隣接する単一ピクセル幅の白領域(たとえば、白領域の両側)は、2つの異なる境界(たとえば、第1の黒領域と白領域との間の第1の境界と、第2の黒領域と白領域との間の第2の境界)の識別となり得る。
【0035】
画像分割器108は、境界情報をコーナ・フィルタ112に伝送、送信、及び/又は渡し得る。それに加えて、以下でより詳細に説明するように、コーナ・フィルタ112はまた、コーナ検出140後にコーナ検出器110からの出力を受け取り得る。適応しきい値処理136及び画像分割138の処理ブロックは、コーナ検出140を実行するために必要とされない可能性があるため、これらの処理は、いくつかの実例では、境界コーナ・フィルタ処理142のためコーナ・フィルタ112へハンド・オフする前に、(たとえば、GPU122の並列処理能力を使用して)並列に実行され得る。
【0036】
本明細書で説明される従来のシステムは、画像内で識別された境界に沿ったピクセルのおのおの又は多数を分析して、ポリゴンのコーナを判定し得る。しかしながら、境界に沿ったピクセルのおのおのを分析することは非効率的であり、コンピューティング及びエネルギのコストが大幅に増加する。従来のシステムとは対照的に、主題技術でコーナ検出140を使用することにより、比較的少数の点のみが候補コーナとして識別され、その大部分は、コーナ218A及び218B)のような実際のコーナ218を表す。少数の点が(候補コーナ220A及び218Dのような候補コーナ218として一時的に誤識別され得る一方、全体のピクセル(たとえば、候補コーナ218を表すピクセル)の処理が少なくなるため、処理、コンピューティング、及びエネルギの要件が低減する。それに加えて、従来のシステムとは対照的に、入力画像内の境界は、コーナ検出140の前に識別される必要がないため、コーナ検出140は、適応しきい値処理136及び/又は画像分割138(たとえば、境界を識別するための処理ステップ)と並列に実行され得るので、それにより、処理時間を低減し、システム100の効率を向上させる。
【0037】
コーナ検出器110は、グレースケール・バージョンの入力画像202(たとえば、グレースケール入力画像)、入力画像202、及び/又は変換画像210(図2Bに示すように)でコーナ検出140を実行し、グレースケール入力画像、入力画像202及び/又は変換画像210における候補コーナ218(たとえば、図2Bにおいて陰影又は他の塗りつぶしなしで示される)を検出し得る。入力画像202上に表されるコーナ検出140の例示的な結果を示す視覚化216は、基準マーカ204、テーブル206、背景、及び複数の候補コーナ218を含み得る。本開示の範囲から逸脱することなく、追加又は代替の候補コーナ218が、コーナ検出140の結果として識別された可能性があるため、候補コーナ218(たとえば、コーナ218A~218C、及びラベルなしコーナ218)は、限定することは意図されていない。いくつかの実例では、本明細書で説明されるように、コーナ検出140は、GPU122において実施され得る。
【0038】
いくつかの実例では、コーナ検出140は、(たとえば、図2Bに陰影で示される誤識別されたピクセル220のように)ピクセルが実際のコーナを表していない場合でも、いくつかのピクセルが候補コーナとしてラベル付けされるという結果となり得る。たとえば、コーナ検出140は、影、ノイズ、及び/又は画像解像度の懸念に敏感であり得、その結果、ピクセルの一部(たとえば、誤識別されるピクセル220A~220D)は、たとえそれらが実際のコーナ点ではなくても、候補コーナ218として識別され得る。しかしながら、誤識別されたピクセル220であっても、コーナ検出140を使用した結果では依然として、従来のアプローチよりも減少した、分析される必要のあるピクセル(たとえば、コーナ218)が識別される。いずれの実例でも、コーナ218及び誤識別されたピクセル220は、集合的に、候補コーナ点のセット、又は識別された候補コーナ点のセットと総称され得る。
【0039】
いくつかの実例では、影、ノイズ、及び/又は画像解像度の懸念に関する問題点を考慮するために、追加の処理が実行され得る。たとえば、(たとえば、グレースケール入力画像及び/又は変換画像210のみが単一のスケールで使用される)コーナ検出140がスケール変化であり得る実例では、画像内の異なるスケール空間をカバーするために、可変ガウス畳み込みカーネルを使用するなどによって、追加の処理が実行され得る。たとえば、グレースケール入力画像及び/又は変換画像210に加えて、少なくとも1つの追加のスケール空間画像が生成され得る。いくつかの非限定的な実例では、3つの追加のスケール空間画像が生成され得、グレースケール入力画像及び/又は変換画像210に加えて、又は代わりに、3つの追加のスケール空間画像も分析され、候補コーナを判定し得る。いくつかの実例では、スケール空間画像のおのおのは、画像のスケール空間に固有の異なるカーネルを使用して実行され得る。いずれの実例においても、異なるスケール空間画像並びにグレースケール入力画像及び/又は変換画像210で検出されたコーナが比較され、検出された候補コーナ間の関係が判定され得る。たとえば、各スケール空間画像で検出された候補コーナが、グレースケール入力画像及び/又は変換画像210と比較され、各画像でコーナがサポートされている(たとえば、識別されている)か否かが判定され得る。結果として、ノイズ、影、及び/又は、画像解像度の懸念の結果として検出された誤識別された(たとえば、1つの画像では、候補コーナとして検出されるが、異なるスケール空間の別の画像では、検出されない)ピクセルの少なくともいくつかが、フィルタ処理によって除外され得、それにより、コーナ218として分析されるピクセルの数がさらに少なくなる。
【0040】
上述のように、検出された候補コーナ218(誤識別されたピクセル220を含み得る)は、その後(図2Cに例示されるように)、境界コーナ・フィルタ処理142のためにコーナ・フィルタ112へ伝送、送信、及び/又は渡され得る。コーナ・フィルタ112はまた、上述のように、画像分割138から境界308(たとえば、白ピクセル領域212Aと黒ピクセル領域212Bとの間の境界)を受け取り得る。その結果、コーナ・フィルタ112は、コーナ218、誤識別されたピクセル220、及び境界308を使用して、境界コーナ・フィルタ処理142を実行し得る。本明細書で説明されるように、コーナ検出140は、境界308上にない誤識別されたピクセル220A及び220Bなどの誤識別されたピクセル220をもたらす可能性があるため、境界コーナ・フィルタ処理142が使用され、誤識別されたピクセル220の少なくとも一部が、フィルタ処理によって除外され得る。
【0041】
図3に示すように、コーナ218である第1のピクセル302は、コーナ検出器110により識別され得、境界208の上又は近くにあるが、誤識別されるピクセル220である第2のピクセル304が識別され得、コーナ218ではないが、境界208上又は近くにもなく(たとえば、境界308から2ピクセル、4ピクセルのように、境界308からしきい距離離れた)、誤識別されるピクセル220である(図3に陰影で示される)第3のピクセル306が識別され得る。その後、境界コーナ・フィルタ処理142を使用して、第3のピクセル306をフィルタ処理によって除外し得る。これらは、誤識別されたピクセル220であり、境界308までのしきい距離内にない。いくつかの実例では、しきい距離は、境界308から離れたいくつかのピクセル(たとえば、境界308に関連付けられたピクセル)であり得る。たとえば、限定することなく、しきい距離は、2ピクセル、3ピクセル、7ピクセル、10ピクセルなどであり得る。結果として、画像内のピクセルは、それらがコーナ候補に含まれておらず(たとえば、コーナ218及び/又は誤識別されたピクセル220に含まれておらず)、境界308のうちの1つに対するしきい距離内にない場合、フィルタ処理によって除外され得る。結果として生じるピクセル(たとえば、第1のピクセル302及び第2のピクセル304)は、候補コーナのセット(たとえば、ピクセルのセットは、コーナ218及び誤識別されたピクセル220を含み得る)のサブセットと集合的に呼ばれ得る。
【0042】
本明細書で説明されるように、境界コーナ・フィルタ処理142は、GPU122によって実行され得、カーネル(たとえば、CUDAカーネル)は、コーナ218として識別されたピクセル(たとえば、第1のピクセル302、第2のピクセル304、及び第3のピクセル306)、及び/又は、並列に誤識別されたピクセル220のおのおのを分析するために使用され得る(たとえば、各ピクセルが、GPU122上の個別のスレッドに適用され得る)。
【0043】
コーナ・フィルタ112は、その後、ピクセル(たとえば、第1のピクセル302及び第2のピクセル304)をクワッド・フィッタ114に伝送、送信、及び/又は渡し、クワッド・フィッティング144を実行し得る。いくつかの実例では、クワッド・フィッティング144はCPU124によって実行され、その結果、ピクセルはGPU122に関連付けられたメモリから、CPU124に関連付けられたメモリにコピーされ得る。たとえば、ピクセル(たとえば、画像内のピクセルの位置)は、GPU122のメモリから検索され、CPU124へ伝送され、CPU124のメモリによって記憶され得る。いくつかの実例では、データ・ストア126は、GPU122に関連付けられたメモリ、及び/又は、CPU124に関連付けられたメモリを含み得る。多数のエッジ・ピクセル(たとえば、画像で識別された境界に沿ったピクセルのおのおの)がCPUによって分析される従来のシステムとは対照的に、システム100は、ピクセルがポリゴンのコーナ(たとえば、AprilTag、ARTagなどの基準マーカ境界を形成する四辺形のような四辺形)を表すか否かを判定するために、CPU124が単にピクセル(たとえば、第1のピクセル302及び第2のピクセル304)のセットのサブセットを分析することのみを必要とし得る。結果として、かなりの計算及び処理時間が節約され、それにより、同じ又はより高いフレーム・レート(たとえば、30fps、60fpsなど)において、基準マーカを正確に識別しながら、従来のシステムよりもより高い画像解像度(たとえば、1080p、4kなど)を処理でき得る、より効率的で堅牢なシステム100となる。
【0044】
クワッド・フィッタ114は、ポリゴンのコーナ218を識別するためにクワッド・フィッティング144を実行し得る。そのため、クワッド・フィッタ114は、クワッドすなわち四辺形に関して言及されているが、これは限定するように意図されていない。たとえば、クワッド・フィッタ114は、(たとえば、基準マーカ境界が、四辺形ではない場合)代わりに、ポリゴン・フィッタ114と呼ばれ、クワッド・フィッティング144は、代わりに、ポリゴン・フィッティング144と呼ばれ得る。
【0045】
コーナ218及び誤識別されたピクセル220のおのおのは、ハッシュ・テーブルに記憶され得る。ハッシュ・テーブル内で、各コーナ218(たとえば、第1のピクセル302)及び各誤識別されたピクセル220(たとえば、第2のピクセル304のように、境界308に関連付けられた誤識別されたピクセル220)は、それぞれの境界308(たとえば、隣接又は近傍の白ピクセル領域212Aと黒ピクセル領域212Bとの間に広がる画像分割138中に判定される境界)について(たとえば、ピクセルが、画像分割138に関連付けられ、画像分割138によって判定されるような境界308に基づいて)、対応する境界IDとともに記憶され得る。その結果、同じ境界IDに関連付けられた各コーナ218及び/又は誤識別されたピクセル220は、ともにグループ化され得る。その後、クワッド・フィッタ114は、基準マーカ204の基準マーカ境界を表すための最良のコーナ候補(たとえば、最良のコーナ218及び/又は誤識別されたピクセル220)を識別するために、各グループを他のグループと別個に分析し得る。
【0046】
いくつかの実例では、ピクセルのグループは、まず、各境界に関連付けられたピクセルの数に基づいて分析され得る。たとえば、既知の形状の境界を有する基準マーカの場合、コーナ点の数も既知であり得る(たとえば、正方形又は長方形は4つのコーナを有し、三角形は3つのコーナを有するなど)。そのため、ピクセルのグループが各境界に対して形成されると、ピクセルのグループは、基準マーカ・タイプのために存在すべきピクセルの数を考慮して分析され得る。たとえば、基準マーカの境界が正方形であり、したがって、4つのコーナ点を有すると知られている場合、4つ未満のピクセルを有するピクセルのグループのいずれかは、フィルタ処理によって除外され、以降のいずれの処理にも含まれない可能性がある。このような実例では、4つのコーナ点を有するピクセルのグループのいずれも、4つの候補コーナのみを識別するために追加のコーナ・フィルタ処理を必要としない場合があるが、4つのピクセルによって形成される四辺形は、以下でより詳細に説明するように、依然としてフィルタ処理を受けて、四辺形が、基準マーカ境界の候補であるか否かを判定し得る。それに加えて、ピクセルのグループが4より大きい場合、以下でより詳細に説明するように、フィルタ処理を実行して、四辺形の候補コーナ点になり得る4つのピクセルを判定し得る。
【0047】
候補コーナの各グループについて、エッジ310の連続ストリングが形成され得るまで、各候補コーナから、次に近い候補コーナ(たとえば、候補コーナから、重心に関して時計回りの第1の候補と、候補コーナから反時計回りの第2の候補コーナ)まで延びるエッジ310(たとえば、第1の境界308Aのエッジ310、第2の境界308Bのエッジ310Bなど)が生成され得る。いくつかの実例では、候補コーナは、それらの重心に関して(たとえば、時計回り、反時計回りなどで)ソートされ、エッジ310は、候補コーナのソートされたリストに基づいて、各候補コーナから次のコーナ候補まで生成され得る。たとえば、図3におけるクワッド・フィッティング144に関し、境界308Aに関連付けられた候補コーナは、重心から時計回りにソートされ得る。このような実例では、候補コーナは、第1のピクセル302C、第2のピクセル304B、第1のピクセル302D、第1のピクセル302E、第2のピクセル304A、第1のピクセル302F、第2のピクセル304C、そして第1のピクセル302Cとしてソートされ得る。そのため、候補コーナのおのおのを介して延びる、連続ループ又はエッジのグループ化が形成されるまで、第1のピクセル302Cと第2のピクセル304Bとの間に延びる第1のエッジ310Aが生成され得、第2のピクセル304Bと第1のピクセル302Dとの間に延びる第2のエッジ310Aが生成され得、第1のピクセル302Dと第1のピクセル302Eとの間に延びる第3のエッジ310Aが生成され得るという具合である。
【0048】
いくつかの実例では、画像のエイリアシング又はノイズの結果として、1つ又は複数のピクセルが、実際にはコーナではなく、エッジ(たとえば、ポリゴンの一部を形成するエッジ)に沿って誤識別されたピクセルである候補コーナとして検出され得る。したがって、コーナとして不適切に識別されたこれらのピクセルをフィルタ処理によって除外するために、連続ループ又はエッジのグループ化が形成されると、候補コーナからポリゴン(たとえば、四辺形)の実際のコーナを識別するために、各2つの隣接するエッジ間に形成される角度312が、計算(たとえば、算出)され得る。いくつかの実例では、候補コーナは、それらの重心、時計回り、又は反時計回りに関して順序付けられ得る。候補コーナのおのおのについて、角度312は、候補コーナから直前の候補コーナまでの第1のベクトル(たとえば、第1のエッジ)と、候補コーナから直後の候補コーナまでの第2ベクトル(たとえば、第2のエッジ)との間で算出され得る。(たとえば、2つの近傍コーナに関して)同一直線上にないエッジ(又はベクトル)に関連付けられた候補コーナは、実際のコーナと見なされ得る。言い換えると、最小の大きさの角度312、又は90度に最も近い角度(たとえば、ポリゴンが四辺形である場合)を使用して、実際のコーナ(たとえば、第1のピクセル302C)を識別し及び/又は、ポリゴンのエッジにある候補コーナ(たとえば、第2のピクセル304A)をフィルタ処理によって除外し得る。結果として、最小の大きさの角度312、又は90度に最も近い角度312が、ポリゴン(たとえば、図3の例示に関する四辺形)の実際のコーナとして識別され得る。別の実例として、ポリゴンが正三角形である場合など、60度に最も近い角度312は、実際のコーナであると判定され得る。同様の判定は、識別されるべき基準マーカの境界に対応する形状に応じて行われ得る。
【0049】
たとえば、第1のピクセル302Fと第2のピクセル304Cとの間に延びるエッジ310Aと、第1のピクセル302Fと第2のピクセル304Aとの間に延びるエッジ310Aとの間に形成される角度312Aは、約90度の角度を含み得る。このような実例では、第1のピクセル302Fと第2のピクセル304Aとの間に延びるエッジ310Aと、第2のピクセル304Aと第1のピクセル302Eとの間に延びるエッジ310Aとの間に形成される角度は、約0度であり得る。同様に、第1のピクセル302C、302D、及び302Eから延びるエッジ310Aによって形成される角度312は、約90度であり、第2のピクセル304B及び304Cから延びるエッジ310Aによって形成される角度は、約0度である。そのため、第1のピクセル302C、302D、302E、及び302Fは、境界308Aの実際のコーナ点であると判定され得る(たとえば、最終的に、基準マーカ境界であると判定され得る)。
【0050】
別の実例として、境界308Bに関連付けられたコーナ候補は、境界308Aに関して説明したものと同様の処理を受け得る。結果として、4つのコーナ点(たとえば、エッジ310Bがその間に延びる4つのコーナ点)が識別され得る。エッジ310Bは、最終的に基準マーカ境界(たとえば、境界308Aなど)の候補として含まれない可能性がある識別されたポリゴン(又は図3に関して四辺形)の実例である。同様に、図2Cにおける境界222B及び22Dは、基準マーカ境界の候補として最終的に含まれない可能性があるクワッド・フィッティング144の結果として識別されたポリゴンを表す一方、境界222A及び222Cは、基準マーカ境界を表し得る。そのため、基準マーカ境界を識別するために、追加の処理(たとえば、フィルタ処理)が適用され得る。
【0051】
基準マーカ境界の候補として使用することが望ましくない可能性のある識別されたポリゴンをフィルタ処理によって除去するために、クワッド・フィッタ114によって1つ又は複数のフィルタが実行され得る。たとえば、エッジ310の長さを探し、及び/又は、同じ境界308のエッジ310の長さを比較して、割合又は比率を判定する第1のフィルタが適用され得る。たとえば、いくつかの基準マーカは、データを効果的に符号化するために最小数のピクセルを必要とし得る。結果として、最小数のピクセルよりも短い長さを有する任意のエッジ310は、エッジ310が関連付けられているポリゴンを、フィルタ処理によって除外する結果となり得る。別の実例として、いくつかの基準マーカは、正方形、長方形、三角形(たとえば、正三角形)などの既知の形状を含み得、その結果、異なるエッジ間の割合は、基準マーカ境界として、ポリゴンの候補を示し得る。特定の実例では、基準マーカの境界が正方形であると知られている場合、様々な割合のエッジ310(たとえば、環境内の画像の歪み又は基準マーカの方位を考慮したしきい値の外側)は、フィルタ処理によって除外され得る。
【0052】
別の実例として、検出されたポリゴン内の角度を使用して、基準マーカ境界の候補として、ポリゴンをフィルタ処理によって除外し得る。たとえば、既知の形状の基準マーカの場合、基準マーカのエッジによって形成される角度は既知であり得る。たとえば、正方形の基準マーカ境界の場合、画像内の基準マーカの方位、画像の歪みなどに基づくいくつかの分散を考慮して、内角は、すべて約90度である必要がある。そのため、図3に関して、基準マーカ境界が、正方形であることが知られている場合、ポリゴンのエッジ310B間に形成される角度312Bは、基準マーカ境界の候補としてポリゴンをフィルタ処理によって除外するために使用され得る(なぜなら、たとえば、この角度は約45度であり、これは、画像内で検出されたポリゴンの角度のしきい値の外側になり得るからである)。
【0053】
クワッド・フィッティング144の結果は、基準マーカ境界の候補となり得る1つ又は複数のポリゴンのセットである。クワッド・フィッタ114は、基準マーカ復号146のために候補ポリゴンをデコーダ116に伝送、送信、及び/又は渡し得る。デコーダ116は、実施例に応じて、入力画像202、入力画像202のグレースケール・バージョン、及び/又は、変換画像210を使用して候補クワッドを復号し得る。ピクセル値のパターンでデータを符号化し得る基準マーカ(たとえば、ピクセル・データ)を使用した結果、デコーダ116は、候補基準マーカ境界内のピクセルのパターン(たとえば、クワッド・フィッタ114によって識別されるポリゴン内のピクセル)を復号し、(たとえば、ピクセル値を表す)復号されたデータを、既存又は既知のピクセル値マスク又は基準マーカのテンプレート(たとえば、白黒ピクセル値コード、又は基準マーカ・データ)と比較し得る。たとえば、ポリゴンのコードを表す復号されたデータは、既知の基準マーカを表すコード(たとえば、基準マーカ・データ)のリストを含むコード表と比較され得る(たとえば、ルックアップ・テーブルであり得るコード表でクエリが実行され得る)。ポリゴンに関連付けられたコードがコード表に含まれている場合、基準マーカ(たとえば、図2Cの基準マーカ204A、204B、及び204C)が正常に認識され得る一方、コードがコード表に含まれていない場合、ポリゴンは偽った肯定と見なされ得、フィルタ処理によってさらなる処理から除外され得る。
【0054】
たとえば、AprilTagを参照すると、AprilTagは一般に正方形であり、一般に、N×Nの黒又は白のセルであり、ここで、Nは、AprilTagファミリ又はクラスに応じて事前に定義されている。その結果、ファミリ又はクラスにおける各AprilTagは、N×Nビットのバイナリ・コードで符号化され得、ここで、0及び1は、黒及び白をそれぞれ表す。デコーダ116は、(たとえば、図3における境界308A内のピクセルによって表されるように)画像内のポリゴンによって表されるデータを判定するために復号アルゴリズムを実行し得る。ピクセル値が境界308A内から復号されると、(たとえば、AprilTagのような基準マーカのコードを表す)復号されたピクセル値は、ルックアップ・テーブル、及び/又は、AprilTagの既知のパターン・マスク又はテンプレートを含むコード表と比較され得る。結果として、境界308A内のピクセルは、コード表内のコードの1つに対するしきい類似度内(たとえば、2、3、4などのしきいハミング距離内)にあると判定され得る。その結果、境界308Aは、正常に復号された基準マーカ(たとえば、AprilTag)であると判定され得、基準マーカ・マネジャ118によって使用されて、1つ又は複数の機能を実行し、1つ又は複数のコマンドを実行し、コンピューティング・デバイス102及び/又は別のコンピューティング・デバイス102及び/又は130の別の構成要素又は特徴によって、1つ又は複数のコマンドをトリガし得る。
【0055】
図3を参照して示すように、コーナ検出140について「白」及び「黒」とラベル付けされた画像の部分は、他の処理ブロック(たとえば、境界コーナ・フィルタ処理142、クワッド・フィッティング144、及び基準マーカ復号146)においても白及び黒であるが、明確化のために、他の処理ブロックには含まれていない。図3における黒領域及び白領域は、AprilTag、ARKit、ARToolkitなどの基準マーカを構成し得る。
【0056】
図4及び図5を参照して示すように、本明細書で説明される方法400及び方法500の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得るコンピューティング処理を含む。たとえば、メモリに記憶された命令を実行するプロセッサによって、様々な機能が実行され得る。方法400及び方法500はまた、コンピュータ記憶媒体に記憶されたコンピュータ使用可能命令として具現化され得る。方法400及び方法500は、いくつか例を挙げると、スタンドアロン・アプリケーション、サービス又はホスト・サービス(スタンドアロン又は別のホスト・サービスとの組合せ)、又は別の製品へのプラグ・インによって提供され得る。それに加えて、方法400及び方法500は、実例として、基準マーカ識別システム100(図1A)及び処理132(図1B)に関して説明される。しかしながら、これらの方法は、追加的又は代替的に、本明細書で説明されるものを含むがこれらに限定されない任意の1つのシステム、又はシステムの任意の組合せによって実行され得る。
【0057】
図4は、本開示のいくつかの実施例による、基準マーカ識別のための方法400を示すフロー図である。方法400は、ブロックB402で、画像を表す画像データを受け取ることを含む。たとえば、画像マネジャ104は、(たとえば、処理132の入力画像受取134処理ブロックで)画像を表す画像データを受け取り得る。入力画像は、コンピューティング・デバイス102のカメラ120によってキャプチャされていてもよい。いくつかの実例では、入力画像は、データ・ストア126に記憶され、画像マネジャ104によって管理され得る。
【0058】
方法400は、ブロックB404で、候補コーナ点を表すピクセルを検出することを含む。たとえば、コーナ検出器110は、候補コーナ点を表すピクセル(たとえば、図2Bのコーナ218及び誤識別されたピクセル220)を検出し得る。いくつかの実例では、候補コーナ点を表すピクセルの検出は、処理132のコーナ検出140処理ブロックでコーナ検出器110によって実行され得る。
【0059】
方法400は、ブロックB406で、画像データを変換画像に変換することを含む。たとえば、画像は、高次元の色空間から、低次元の色空間の変換画像に変換され得る。これには、画像の、適応しきい値処理136などの、しきい値処理を含み得る。いくつかの実例において、画像のグレースケール・バージョンは、適応しきい値処理136(及び/又はグローバルしきい値処理)の前に生成され得る。いくつかの実例では、画像の変換画像への変換は、しきい値処理器106によって実行され得る。
【0060】
方法400は、ブロックB408で、変換画像内の境界を識別することを含む。たとえば、隣接する白ピクセル領域(たとえば、図2Aの領域212A)と黒ピクセル領域(たとえば、図2Aの領域212B)とを分離する境界は、画像分割器108による画像分割138の結果として識別され得る。
【0061】
方法400は、ブロックB410で、境界までのしきい距離内にある候補コーナ点のセットを判定することを含む。たとえば、コーナ・フィルタ112は、ブロックB408で識別された境界の1つへのしきい距離内にない候補コーナ点のセットから、ピクセルをフィルタ処理によって除外し得る。いくつかの実例では、コーナ・フィルタ112は、処理132の境界コーナ・フィルタ処理142を実行するときに候補コーナ点のセットを判定し得る。
【0062】
方法400は、ブロックB412で、候補コーナ点のセットを分析して、ポリゴンのコーナを表す候補コーナ点のサブセットを判定することを含む。たとえば、クワッド・フィッタ114は、候補コーナ点のセットを分析して、ポリゴンのコーナである候補コーナ点のサブセットを判定し得る。たとえば、隣接する候補ピクセル間を延びるエッジを生成し、隣接するエッジ間の角度を分析して、候補コーナ点がコーナ点として適切であるか否かが判定され得る。候補コーナ点のセットの分析は、処理132のクワッド・フィッティング144を実行するときにクワッド・フィッタ114によって実行され得る。
【0063】
方法400は、ブロックB414で、少なくとも1つのフィルタをポリゴンに適用して、基準マーカの基準マーカ境界に対応するものとしてポリゴンを識別することを含む。たとえば、エッジの長さ、エッジの長さの割合、エッジによって形成される角度に基づいて、及び/又は、ポリゴン内からの復号されたデータを、既知のマスク又は基準マーカのテンプレートを表すコード表と比較することに基づいて、ポリゴンがフィルタ処理され得る。いくつかの実例では、フィルタは、クワッド・フィッティング144中にクワッド・フィッタ114によって適用され得、及び/又は、処理132を実行するときにデコーダ116による基準マーカ復号146中にフィルタ処理によって除去され得る。フィルタ及び/又は復号の結果として、残りのポリゴンは、基準マーカであると判定され得、ポリゴンは、基準マーカ境界であると判定され得る。
【0064】
図5は、本開示のいくつかの実施例による、基準マーカ識別のための別の方法500を示すフロー図である。方法500は、ブロックB502で、画像内で識別された少なくとも1つの境界までのしきい距離内の候補コーナ点を表す画像内のピクセルを判定することを含む。たとえば、変換画像210及び/又は入力画像202のグレースケール・バージョンで識別された境界の1つへのしきい距離内にある、変換画像210及び/又は入力画像202のグレースケール・バージョンのピクセルが、判定され得る。いくつかの実例では、処理132の入力画像受取134、適応しきい値処理136、画像分割138、コーナ検出140、及び/又は境界コーナ・フィルタ142の後に、候補コーナ点が判定され得る。いくつかの実例では、本明細書で説明されるように、これらのステップのおのおのは、GPU122において実行され得、処理ブロックの1つ又は複数は、並列に実行され得る。
【0065】
処理500は、ブロックB504で、GPUメモリからCPUメモリにピクセルをコピーすることを含む。たとえば、境界コーナ・フィルタ処理142がGPU122により完了すると、処理132はCPU124で継続し得る。そのため、ブロックB502で識別されたピクセルは、CPU124によるさらなる処理のために、GPUメモリからCPUメモリにコピーされ得る。しかしながら、破線で示されているように、ブロックB504はオプションであり、GPU122とCPU124の両方が使用されていない実例、又は次の処理ブロックがCPU124において実行されていない例では、ブロックB504は削除され得る。
【0066】
処理500は、ブロックB506で、同じ境界に関連付けられた候補コーナ点のセットを判定することを含む。たとえば、同じ境界IDに関連付けられた候補コーナ点は、クワッド・フィッティング144中にクワッド・フィッタ114によって判定され得る。
【0067】
処理500は、ブロックB508で、候補コーナ点のセットのメンバ間に延びるエッジを生成することを含む。たとえば、クワッド・フィッタ114は、各候補コーナ点と各隣接候補コーナ点との間に延びるエッジを生成し得る。
【0068】
処理500は、ブロックB510で、エッジの隣接するエッジによって形成される角度を計算することを含む。たとえば、クワッド・フィッタ114は、エッジの隣接するエッジによって形成される角度を計算し得る。
【0069】
処理500は、ブロックB512で、最小の大きさの角度のセットに関連付けられた候補コーナ点のセットのサブセットを、ポリゴンのコーナとして識別することを含む。たとえば、クワッド・フィッタ114は、最小の大きさの角度(たとえば、図3の第1のピクセル302C、302D、302E、及び302F)に関連付けられた候補コーナ点のセットのサブセットを識別し得る。
【0070】
処理500は、ブロックB514で、ポリゴンが基準マーカの基準マーカ境界に対応するか否かを判定することを含む。たとえば、クワッド・フィッタ114及び/又はデコーダ116は、画像内で検出されたポリゴンが、基準マーカの基準マーカ境界に対応するか否かを判定し得る。この処理は、上述した図4の方法400のブロックB414の処理と同様であり得る。
【0071】
図6を参照して示すように、図6は、本開示の少なくともいくつかの実施例を実施する際の使用に適した1つの実例のコンピューティング・デバイス600のブロック図である。コンピューティング・デバイス600は、以下のデバイス、すなわち、メモリ604、1つ又は複数の中央処理装置(CPU)606、1つ又は複数のグラフィック処理装置(GPU)608、通信インターフェース610、入力/出力(I/O)ポート612、入力/出力構成要素614、電源616、及び1つ又は複数の表示構成要素618(たとえば、ディスプレイ)を直接的又は間接的に結合するバス602を含み得る。
【0072】
図6の様々なブロックは、バス602を介してラインと接続されているように示されているが、これは限定を意図するものではなく、明確にするためだけのものである。たとえば、いくつかの実施例では、ディスプレイ・デバイスなどの表示構成要素618は、(たとえば、ディスプレイがタッチ・スクリーンである場合)I/O構成要素614と見なされ得る。別の実例として、CPU606及び/又はGPU608は、メモリを含み得る(たとえば、メモリ604は、GPU608、CPU606、及び/又は他の構成要素のメモリに加えて記憶デバイスを表し得る)。言い換えれば、図6のコンピューティング・デバイスは、単なる例示である。「ワークステーション」、「サーバ」、「ラップトップ」、「デスクトップ」、「タブレット」、「クライアント・デバイス」、「モバイル・デバイス」、「ハンドヘルド・デバイス」、「ゲーム・コンソール」、「電子制御ユニット(ECU)」、「仮想現実システム」、「ロボット・デバイス」、及び/又は、他のデバイス又は、システムのタイプなどのカテゴリは区別されず、すべて図6のコンピューティング・デバイスの範囲内で考慮される。
【0073】
バス602は、アドレス・バス、データ・バス、制御バス、又はそれらの組合せのような1つ又は複数のバスを表し得る。バス602は、業界標準アーキテクチャ(ISA)バス、拡張業界標準アーキテクチャ(EISA)バス、ビデオ・エレクトロニクス標準協会(VESA)バス、周辺機器相互接続(PCI)バス、周辺機器構成要素相互接続エクスプレス(PCIe)バス、及び/又は別のタイプのバスなどの1つ又は複数のバス・タイプを含み得る。
【0074】
メモリ604は、様々なコンピュータ可読媒体のいずれかを含み得る。コンピュータ可読媒体は、コンピューティング・デバイス600によってアクセスできる任意の利用可能な媒体であり得る。コンピュータ可読媒体は、揮発性媒体と不揮発性媒体、及びリムーバブル媒体と非リムーバブル媒体の両方を含み得る。実例として、限定ではなく、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を含み得る。
【0075】
コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は他のデータ・タイプのように、情報を記憶するための任意の方法又は技術で実施される揮発性媒体及び不揮発性媒体及び/又はリムーバブル及び非リムーバブル媒体の両方を含み得る。たとえば、メモリ604は、(たとえば、オペレーティング・システムなどのプログラム及び/又はプログラム要素を表すコンピュータ可読命令を記憶し得る。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュ・メモリ又は他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)又は他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶デバイス、又は、所望の情報を記憶するために使用でき、コンピューティング・デバイス600によってアクセスできる任意の他の媒体を含み得るが、これらに限定されない。本明細書で使用されるように、コンピュータ記憶媒体は、信号自体を含まない。
【0076】
通信媒体は、コンピュータ可読命令、データ構造、プログラム・モジュール、及び/又は、搬送波又は他のトランスポート機構のような変調データ信号における他のデータ・タイプを具現化することができ、任意の情報配信媒体を含む。「変調データ信号」という用語は、信号内の情報を符号化するように設定又は変更された特性の1つ又は複数を有する信号を称し得る。限定ではなく実例として、通信媒体は、有線ネットワーク又は直接有線接続のような有線媒体、及び音響、RF、赤外線、及び他の無線媒体のような無線媒体を含み得る。上記のいずれの組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0077】
CPU606は、コンピュータ可読命令を実行してコンピューティング・デバイス600の1つ又は複数の構成要素を制御し、本明細書で説明された方法及び/又は処理の1つ又は複数を実行するように構成され得る。CPU606はおのおの、多数のソフトウェア・スレッドを同時に処理することができる1つ又は複数(たとえば、1、2、4、8、28、72など)のコアを含み得る。CPU606は、任意のタイプのプロセッサを含み得、実施されるコンピューティング・デバイス600のタイプに応じて異なるタイプのプロセッサ(たとえば、モバイル・デバイスのコアが少ないプロセッサ及びサーバのコアが多いプロセッサ)を含み得る。たとえば、コンピューティング・デバイス600のタイプに応じて、プロセッサは、縮小命令セット・コンピューティング(RISC)を使用して実施されるARMプロセッサ、又は複合命令セット・コンピューティング(CISC)を使用して実施される×86プロセッサであり得る。コンピューティング・デバイス600は、1つ又は複数のマイクロプロセッサ、又は数学コプロセッサのような補助的なコプロセッサに加えて、1つ又は複数のCPU606を含み得る。
【0078】
GPU608は、コンピューティング・デバイス600によって使用され、グラフィック(たとえば、3Dグラフィック)をレンダリングし得る。GPU608は、数百又は数千のソフトウェア・スレッドを同時に処理することができる数百又は数千のコアを含み得る。GPU608は、レンダリング・コマンド(たとえば、ホスト・インターフェースを介して受け取ったCPU606からのレンダリング・コマンド)に応答して、出力画像のピクセル・データを生成し得る。GPU608は、ピクセル・データを記憶するためのディスプレイ・メモリなどのグラフィック・メモリを含み得る。ディスプレイ・メモリは、メモリ604の一部として含まれ得る。GPU608は、(たとえば、リンクを介して)並列に動作する2つ以上のGPUを含み得る。ともに組み合わされると、各GPU608は、出力画像の異なる部分又は異なる出力画像(たとえば、第1の画像用の第1のGPUと、第2の画像用の第2のGPU)のピクセル・データを生成し得る。各GPUには独自のメモリを含めることも、又は他のGPUとメモリを共有することもできる。
【0079】
コンピューティング・デバイス600がGPU608を含まない実例では、CPU606を使用してグラフィックをレンダリングし得る。
【0080】
通信インターフェース610は、有線及び/又は無線通信を含む電子通信ネットワークを介してコンピューティング・デバイス600が他のコンピューティング・デバイスと通信できるようにする1つ又は複数の受信機、送信機、及び/又はトランシーバを含み得る。通信インターフェース610は、無線ネットワーク(たとえば、Wi-Fi、Z-Wave、Bluetooth(登録商標)、Bluetooth(登録商標) LE、ZigBeeなど)、有線ネットワーク(たとえば、Ethernet(登録商標)を介した通信)、低電力広域ネットワーク(たとえば、LoRaWAN、SigFoxなど)、及び/又はインターネットのような多くの異なるネットワークのいずれかを介した通信を可能にする構成要素及び機能性を含み得る。
【0081】
I/Oポート612により、コンピューティング・デバイス600を、I/O構成要素614、表示構成要素618、及び/又は他の構成要素を含む他のデバイスに論理的に結合することができ得、これらのいくつかは、コンピューティング・デバイス600に組み込まれ(たとえば、統合され)得る。例示的なI/O構成要素614は、マイクロホン、マウス、キーボード、ジョイスティック、ゲーム・パッド、ゲーム・コントローラ、衛星放送受信アンテナ、スキャナ、プリンタ、無線デバイスなどを含む。I/O構成要素614は、エア・ジェスチャ、音声、又はユーザによって生成された他の生理学的入力を処理する自然なユーザ・インターフェース(NUI)を提供し得る。場合によっては、入力は、さらなる処理のために、適切なネットワーク要素に送られ得る。NUIは、音声認識、スタイラス認識、顔認識、生体認証、ともに画面上及び画面に隣接するジェスチャ認識、エア・ジェスチャ、頭と目の追跡、及び、コンピューティング・デバイス600のディスプレイに関連付けられた(以下で詳細に説明するような)タッチ認識の任意の組合せを実施し得る。コンピューティング・デバイス600は、ジェスチャ検出及び認識のために、立体視カメラ・システム、赤外線カメラ・システム、RGBカメラ・システム、タッチ・スクリーン技術、及びこれらの組合せなどの深度カメラを含み得る。さらに、コンピューティング・デバイス600は、動きの検出を可能にする加速度計又は(たとえば、慣性測定ユニット(IMU)の一部として)ジャイロスコープを含み得る。いくつかの実例では、加速度計又はジャイロスコープの出力が、コンピューティング・デバイス600によって使用され、没入型拡張現実又は仮想現実をレンダリングし得る。
【0082】
電源616は、ハード・ワイヤ電源、バッテリ電源、又はこれらの組合せを含み得る。電源616は、コンピューティング・デバイス600に電力を供給して、コンピューティング・デバイス600の構成要素が動作できるようにし得る。
【0083】
表示構成要素618は、ディスプレイ(たとえば、モニタ、タッチ・スクリーン、テレビ画面、ヘッド・アップ・ディスプレイ(HUD)、他のディスプレイ・タイプ、又はそれらの組合せ)、スピーカ、及び/又は他の表示構成要素を含み得る。表示構成要素618は、他の構成要素(たとえば、GPU608、CPU606など)からデータを受け取り、データを(たとえば、画像、ビデオ、音声などとして)出力し得る。
【0084】
本開示は、携帯情報端末又は他のハンドヘルド・デバイスなどのコンピュータ又は他のマシンによって実行される、プログラム・モジュールのようなコンピュータ実行可能命令を含むコンピュータ・コード又はマシン使用可能命令の一般的な文脈で説明され得る。一般に、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含むプログラム・モジュールは、特定のタスクを実行したり、又は特定の抽象データ・タイプを実施するコードを称する。本開示は、ハンドヘルド・デバイス、家庭用電化製品、汎用コンピュータ、より専門的なコンピューティング・デバイスなどを含む様々なシステム構成で実現され得る。本開示は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実現され得る。
【0085】
本開示の実施例に関して説明された要素(たとえば、システム、構成要素、特徴、マシン、インターフェース、機能、順序、機能のグループ化、機能性、及び/又は配置)は、実例としてのみ記載されている。本明細書で説明される要素以外の他の要素は、本明細書で説明される要素に加えて、又はその代わりに使用され得、いくつかの要素は完全に省略され得る。さらに、本明細書で説明される要素の多くは、個別の構成要素又は分散された構成要素として、又は他の構成要素と組み合わせて、任意の適切な組合せ及び場所で実施され得る機能エンティティである。エンティティによって実行されるものとして本明細書で説明される様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、メモリに記憶された命令を実行するプロセッサによって様々な機能が実行され得る。
【0086】
本明細書で使用されるように、2つ以上の要素に関する「及び/又は」の列挙は、1つの要素のみ、又は要素の組合せを意味すると解釈されるべきである。たとえば、「要素A、要素B、及び/又は要素C」は、要素Aのみ、要素Bのみ、要素Cのみ、要素Aと要素B、要素Aと要素C、要素Bと要素C、又は要素A、B、及びCを含み得る。それに加えて、「要素A又は要素Bの少なくとも1つ」は、要素Aの少なくとも1つ、要素Bの少なくとも1つ、又は要素Aの少なくとも1つ及び要素Bの少なくとも1つを含み得る。さらに、「要素A及び要素Bの少なくとも1つ」は、要素Aの少なくとも1つ、要素Bの少なくとも1つ、又は要素Aの少なくとも1つ及び要素Bの少なくとも1つを含み得る。
【0087】
本開示の主題は、法的要件を満たすように本明細書で具体的に説明された。しかしながら、説明自体は、本開示の範囲を限定することを意図したものではない。むしろ、本発明者は、特許請求される主題が他の手法で具現化され、他の現在又は将来の技術と併せて、本書に説明されるものとは異なるステップ、又は類似したステップの組合せを含むことを企図している。さらに、「ステップ」及び/又は「ブロック」という用語は、適用される方法の異なる要素を示すために本明細書で使用され得るが、これら用語は、個々のステップの順序が明示的に説明されていない限り、及び個々のステップの順序が明示的に説明される場合を除いて、本明細書で開示される様々なステップ間の特定の順序を示唆するとして解釈されるべきではない。
図1A
図1B
図2A
図2B
図2C
図3
図4
図5
図6