(57)【特許請求の範囲】
【請求項１】
ハッシュコードを画像の一部に紐付ける方法であって、
多次元格子の複数の格子点を選択して、前記画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成するステップと、
分布基準に従って前記選択された複数の格子点から格子点を決定するステップと、
前記特徴ベクトルを前記決定された格子点に割り当てるステップと、
前記決定された格子点と関連付けられたハッシュコードと、前記画像の一部と、の間の紐付けを格納するステップと、
を備え、
前記決定された格子点は、前記最小の囲み領域及び前記特徴ベクトルのクエリ半径距離内に配置された前記最小の囲み領域に隣接する前記格子の領域に共通であり、
前記特徴ベクトルは、クエリベクトルの前記クエリ半径内に配置される場合に一致している
ことを特徴とする方法。
【請求項２】
前記分布基準は、前記複数の格子点の少なくとも１つに既に割り当てられている多数の特徴ベクトルの数に基づくことを特徴とする請求項１記載の方法。
【請求項３】
前記決定するステップは、
前記複数の格子点の各格子点に既に割り当てられている多数の特徴ベクトルの数を決定するサブステップと、
前記決定された数に基づいて前記複数の格子点から格子点を選択するサブステップと、
前記選択された格子点を除く前記複数の格子点の格子点から形成された平面を決定するサブステップと、
前記決定された平面から前記選択された格子点までの距離を計算するサブステップと、
前記計算された距離を前記クエリ半径と比較するサブステップと、
前記比較に基づいて、前記選択された格子点を前記決定された格子点として使用するサブステップと
を含むことを特徴とする請求項２記載の方法。
【請求項４】
前記クエリベクトルはクエリ画像の一部を示すことを特徴とする請求項１記載の方法。
【請求項５】
前記クエリ半径は、前記クエリ画像の一部と、一致していると考えられる別の画像と、の間の最大相違の基準であることを特徴とする請求項４記載の方法。
【請求項６】
前記最小の囲み領域は、前記多次元格子のドローネ領域であることを特徴とする請求項１記載の方法。
【請求項７】
コンピュータプログラムを格納する記憶装置と、
前記プログラムを実行するプロセッサと
を備え、ハッシュコードを画像の一部に紐付けるシステムであって、
前記プログラムは、
多次元格子の複数の格子点を選択して、前記画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成する方法ステップと、
分布基準に従って前記選択された複数の格子点から格子点を決定する方法ステップと、
前記特徴ベクトルを前記決定された格子点に割り当てる方法ステップと、
前記決定された格子点と関連付けられたハッシュコードと、前記画像の一部と、の間の紐付けを格納する方法ステップと
を実行するコードを含み、
前記決定された格子点は、前記最小の囲み領域及び前記特徴ベクトルのクエリ半径距離内に配置された前記最小の囲み領域に隣接する前記格子の領域に共通であり、
前記特徴ベクトルは、クエリベクトルの前記クエリ半径内に配置される場合に一致している
ことを特徴とするシステム。
【請求項８】
ハッシュコードを画像の一部に紐付ける方法を実行するようにプロセッサに指示するコンピュータプログラムを記録したコンピュータ可読記憶媒体であって、前記コンピュータプログラムは、
多次元格子の複数の格子点を選択して、前記画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成するステップと、
分布基準に従って前記選択された複数の格子点から格子点を決定するステップと、
前記特徴ベクトルを前記決定された格子点に割り当てるステップと、
前記決定された格子点と関連付けられたハッシュコードと、前記画像の一部と、の間の紐付けを格納するステップと
を実行するコードを含み、
前記決定された格子点は、前記最小の囲み領域及び前記特徴ベクトルのクエリ半径距離内に配置された前記最小の囲み領域に隣接する前記格子の領域に共通であり、
前記特徴ベクトルは、クエリベクトルの前記クエリ半径内に配置される場合に一致している
ことを特徴とするコンピュータ可読記憶媒体。
【請求項９】
ハッシュテーブルの格納及び検索の方法であって、
少なくとも１つのレコードを格納するために登録フェーズを実行する登録ステップと、
前記ハッシュテーブルから前記格納されたレコードのうち少なくとも１つを検索するためにクエリフェーズを実行する検索ステップと
を備え、
前記登録ステップは、前記格納されたレコード毎に、
多次元格子の格子点により形成された特徴ベクトルの周囲の最小の囲み領域であるドローネ領域を該多次元格子から選択するステップと、
前記ドローネ領域から候補となる格子点を識別するステップと、
前記候補となる格子点のうち１つを前記特徴ベクトルに対するハッシュコードとして選択するステップと、
前記レコードを前記ハッシュテーブルの前記ハッシュコードと関連付けるステップと
を含み、
前記検索ステップは、
探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、
前記識別されたハッシュコードのうち少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップと
を含むことを特徴とする方法。
【請求項１０】
前記ドローネ領域は、ｎ次元特徴空間に対してｎ＋１個の格子点を含むことを特徴とする請求項９記載の方法。
【請求項１１】
前記多次元格子は、Ａ格子、Ｄ格子、Ａ＊格子、Ｄ＊格子、Ｚ格子、及びリーチ格子から構成される格子のグループから選択されることを特徴とする請求項９記載の方法。
【請求項１２】
前記候補となる格子点のうちの１つを前記特徴ベクトルに対するハッシュコードとして選択する前記ステップは、前記候補となる格子点の各々に割り当てられた多数の特徴ベクトルに基づくことを特徴とする請求項９記載の方法。
【請求項１３】
各特徴ベクトルは、画像の一部、テキスト、又はペーパーフィンガープリントから導出されることを特徴とする請求項９記載の方法。
【請求項１４】
前記探索基準は、クエリベクトル及びクエリ半径により規定されたクエリ領域に基づいており、
また、前記識別されたハッシュコードは前記クエリ領域内に配置されることを特徴とする請求項９記載の方法。
【請求項１５】
前記クエリベクトルはクエリ画像から導出されることを特徴とする請求項１４記載の方法。
【請求項１６】
コンピュータプログラムを格納する記憶装置と、
前記プログラムを実行するプロセッサと
を備えるハッシュテーブルの格納及び検索のシステムであって、前記プログラムは、
少なくとも１つのレコードを格納するために登録フェーズを実行する登録ステップと、
前記ハッシュテーブルから前記格納されたレコードのうち少なくとも１つを検索するためにクエリフェーズを実行する検索ステップと
を実行するコードを含み、
前記登録ステップは、前記格納されたレコード毎に、
多次元格子の格子点により形成された特徴ベクトルの周囲の最小の囲み領域であるドローネ領域を該多次元格子から選択するステップと、
前記ドローネ領域から候補となる格子点を識別するステップと、
前記候補となる格子点のうち１つを前記特徴ベクトルに対するハッシュコードとして選択するステップと、
前記レコードを前記ハッシュテーブルの前記ハッシュコードと関連付けるステップと
を含み、
前記検索ステップは、
探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、
前記識別されたハッシュコードのうち少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップと
を含む
ことを特徴とするシステム。
【請求項１７】
ハッシュテーブルの格納及び検索の方法を実行するようにプロセッサに指示するコンピュータプログラムを記録したコンピュータ可読記憶媒体であって、前記コンピュータプログラムは、
少なくとも１つのレコードを格納するために登録フェーズを実行する登録ステップと、
前記ハッシュテーブルから前記格納されたレコードのうち少なくとも１つを検索するためにクエリフェーズを実行する検索ステップと
を実行するコードを含み、
前記登録ステップは、前記格納されたレコード毎に、
多次元格子の格子点により形成された特徴ベクトルの周囲の最小の囲み領域であるドローネ領域を該多次元格子から選択するステップと、
前記ドローネ領域から候補となる格子点を識別するステップと、
前記候補となる格子点のうち１つを前記特徴ベクトルに対するハッシュコードとして選択するステップと、
前記レコードを前記ハッシュテーブルの前記ハッシュコードと関連付けるステップと
を含み、
前記検索ステップは、
探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、
前記識別されたハッシュコードのうち少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップと
を含む
ことを特徴とするコンピュータ可読記憶媒体。
【請求項１８】
ハッシュコードを画像の一部に紐付けてハッシュテーブルに格納する方法であって、
前記画像の一部を示す特徴ベクトルに基づいて複数のハッシュコードの候補を選択するステップと、
前記選択された複数のハッシュコードの候補の中から、既に紐付けられている特徴ベクトルが最も少ないハッシュコードを、前記画像の一部に紐付けるべきハッシュコードとして決定するステップと、
前記決定されたハッシュコードと、前記画像の一部と、の間の紐付けを前記ハッシュテーブルに格納するステップと
を備えることを特徴とする方法。
【請求項１９】
前記複数のハッシュコードの候補は、前記特徴ベクトルの配置された多次元特徴空間において、該特徴ベクトルを囲む領域を構成する複数の格子点の中から、該特徴ベクトルの位置に基づいて決定されることを特徴とする請求項１８記載の方法。
【請求項２０】
前記複数のハッシュコードの候補は、前記特徴ベクトルの配置された多次元特徴空間において、該特徴ベクトルを囲む領域を構成する複数の格子点の中から、前記特徴ベクトルの位置を中心とした所定の半径で規定される領域に基づいて決定されることを特徴とする請求項１９記載の方法。
【請求項２１】
前記特徴ベクトルを囲む領域はドローネ領域であることを特徴とする請求項１９記載の方法。
【請求項２２】
ハッシュコードを画像の一部に紐付けてハッシュテーブルに格納する装置であって、
前記画像の一部を示す特徴ベクトルに基づいて複数のハッシュコードの候補を選択する手段と、
前記選択された複数のハッシュコードの候補の中から、既に紐付けられている特徴ベクトルが最も少ないハッシュコードを、前記画像の一部に紐付けるべきハッシュコードとして決定する手段と、
前記決定されたハッシュコードと、前記画像の一部と、の間の紐付けを前記ハッシュテーブルに格納する手段と
を備えることを特徴とする装置。
【請求項２３】
ハッシュコードを画像の一部に紐付けてハッシュテーブルに格納するコンピュータを、
前記画像の一部を示す特徴ベクトルに基づいて複数のハッシュコードの候補を選択する手段、
前記選択された複数のハッシュコードの候補の中から、既に紐付けられている特徴ベクトルが最も少ないハッシュコードを、前記画像の一部に紐付けるべきハッシュコードとして決定する手段、
前記決定されたハッシュコードと、前記画像の一部と、の間の紐付けを前記ハッシュテーブルに格納する手段
として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高次元類似探索に関し、特にコンテンツベースの画像探索の分野に関する。
【背景技術】
【０００２】
特に画像のデータベースが大きい場合及びクエリ画像が要求されたデータベース画像が劣化したものである場合のコンテンツベースの画像探索の問題に対処するために多くの方法が提案されている。
【０００３】
提案された方法の多くは特徴ベクトルを使用する。特徴ベクトルは、画像の一部を示す数値の配列である。新しい特徴ベクトルが受信されると、多くの場合、データベースから同様の特徴ベクトルを検索できることが有用である。同様の特徴ベクトルは、受信された特徴ベクトルと関連付けられた画像の類似画像を示す。
【０００４】
データベースが小さく且つ類似性関数の計算が高速である場合、網羅的探索法が使用される。網羅的探索は、クエリ画像と関連付けられたクエリベクトルとデータベースの各レコードとの類似性を計算する。特にデータベースのサイズが大きくなる様な多くの応用例では、そのような網羅的探索は処理が遅すぎる。コンテンツベースの画像探索に関する問題の１つは、クエリ画像の特徴ベクトルに一致する特徴ベクトルをデータベースにおいてどのように迅速に発見するかである。多くの方法が提案されているが、提案された方法の各々の欠点は、制限があったりあるいは不正確であったりすることである。
【０００５】
ハッシュベースの戦略は、最も高速且つ正確な方法を提供する。ハッシュベースの方法は、データベースの各ベクトルに対するハッシュコードを計算することと、ハッシュテーブルにおいてレコードをエントリと関連付けるためにハッシュコードを使用することとを含む。クエリ時間において、ハッシュコードは、クエリベクトルに対して計算され、ハッシュテーブルにおいて一致するレコードを迅速に発見するために使用される。この戦略を効果的にするために、ハッシュ関数は「局所性鋭敏型」であるべきであり、これは、関数が互いに近接するベクトルに対して同一のハッシュコードを返送することを意味する。局所性鋭敏型ハッシュ関数は、特徴空間を各々が特定のハッシュコードと関連付けられる領域に区分する。
【０００６】
ハッシュベースの方法と共存する１つの問題は、どんなハッシュ関数に対しても近接するが異なるハッシュコードを返送する２つのベクトルが常に存在することである。これは、２つのベクトルが区分境界の両側に配置され且つ偽陰性一致（false-negative matches）の問題を招く場合に生じる。類似ベクトルのそれぞれのハッシュコードが異なるために方法が類似ベクトルを発見できない場合、偽陰性一致が起こる。
【０００７】
この問題に対する１つの既知の方法は、ハッシュ関数毎に無作為に選択されたパラメータを有する多数のハッシュ関数を使用する局所性鋭敏型ハッシュ（ＬＳＨ）である。データベースの各特徴ベクトルは、全てのハッシュ関数を使用してハッシュされ、対応するハッシュテーブルに記録される。クエリベクトルが与えられる場合、全てのハッシュ関数は、格納されたレコードにアクセスするために使用される。各ハッシュ関数が異なるため、使用されるハッシュ関数の数の増加と共に偽陰性一致の可能性は低下する。しかし、ハッシュ関数の数の増加により、ハッシュを格納するために必要とされるメモリの量及びハッシュテーブルを探索するのにかかる時間も増加する。ハッシュ関数の数を変更することにより、選択されるメモリと、速度と、精度との間の妥協が可能になるが、ＬＳＨは、高次元特徴ベクトルと共に使用される場合に高い精度を実現するために多くのハッシュ関数を必要とする。ＬＳＨの拡張機能は、各ハッシュコードへの割り当ての数を均衡させるハッシュ関数を選択することにより、精度と速度との間の妥協を更に可能にする。レコードの割り当てを均衡させるハッシュコードの次元毎のハッシュ関数、並びに類似性及びハッシュ関数のエントロピーの保存を共に最適化するハッシュ関数を選択することにより、均衡が実現される。ＬＳＨ拡張機能の欠点は、ハッシュ関数が訓練フェーズの間に選択され、且つ訓練データの分布に従ってレコードの割り当てを均衡させることである。均衡の有効性は、訓練データと比較して更なるデータの分布の何らかの変動により低下する。このメモリに対する要求は、高次元ベクトルの大きなデータベースに適用される場合にＬＳＨの有用性を制限している。
【０００８】
別の方法は、探索ステップで処理される偽陰性一致の問題を有する単一のハッシュ関数を使用するPointPerturbation法である。クエリベクトルが与えられる場合、ハッシュテーブルにアクセスして候補となるレコードの第１のリストを取得する。無作為の僅かな摂動を元のクエリ点に適用することにより、多数のプローブが生成される。各プローブはハッシュテーブルにアクセスするために使用され、検索されたレコードは候補となるレコードのリストに追加される。元のクエリ点から更なるプローブを生成する処理は、複数回繰り返される。使用されるプローブの数の増加と共に偽陰性一致の可能性が低下するため、ＬＳＨを使用するよりメモリに対する要求は低く、プローブの数を変更することにより速度と精度との間の妥協を管理する。PointPerturbation法の欠点は、クエリベクトルに対して必要とされるプローブの数である。単一のクエリベクトルに対して高い精度を実現するためにより多くのプローブが必要とされるため、ベクトルの次元数が増加するにつれ、PointPerturbation法はより低速になる。
【０００９】
別のハッシュ法はハッシュの摂動である。ハッシュの摂動は、クエリ毎に多数のプローブを実行するが、クエリ点を無作為に摂動する必要があるという問題を回避するという点でPointPerturbation法に類似する。代わりに、この方法は、元のクエリ点のハッシュコードを直接摂動する。ハッシュ関数が多くの小さなハッシュコードから構成されるハッシュコードを生成するため、これは可能になる。この場合、より小さなハッシュコードの各々は、厳密に特徴ベクトルの１つの座標の関数である。この方法の先の一実現例はグリッドファイルである。グリッドファイル方法は、各次元を量子化することで可能なベクトルの空間にわたりグリッドを形成し、各グリッドセルをベクトルがセル内にあるレコードと関連付ける。クエリ点が与えられる場合、クエリ点のクエリ半径内のグリッドセルを決定する。次に、点を一致させるためにアクセスされたグリッドセルと関連付けられたレコードを確認する。しかし、この方法は高次元空間に対して時間がかかる。それは、ｎ次元空間が与えられる場合に１つのクエリに対するアクセスされたグリッドセルの数が２ｎ次だからである。各次元が個別にハッシュされる時、ハッシュコードは空間の矩形領域と関連付けられ、クエリは、ハッシュセルの結合から構成される矩形領域を範囲に含む。極端に、各次元は単一のビットにハッシュされる。その場合、ベクトルに対するハッシュコードは、各座標からのビットの連結である。従って、ｎ次元ベクトルによりｎビットのハッシュコードが得られる。第１のハッシュコードにおいて１ビット以上をフリップすることにより、更なるクエリハッシュコードが生成される。
【００１０】
ハッシュの摂動に関する１つの問題は、各次元が個別にハッシュされることである。ハッシュ関数は空間を矩形領域に区分する。クエリ点が領域の端に近接する場合、偽陰性を回避するために２ｎ個のプローブが必要とされる。高次元ベクトル（大きなｎ）の場合、必要とされるプローブの数は、ハッシュにより行われる高速化を大幅に制限する。これは、クエリ毎のプローブの数を減少することで改善されるが、これにより精度も低下する。
【００１１】
格子理論は、Ａ＊及びＤ＊として知られている格子を使用して点の摂動及びハッシュの摂動に適用されている。これにより、ボロノイ領域内のクエリ点の場所に基づくクエリに対するプローブを決定する方法が得られた。関連ベクトルを有するレコードがデータベースに追加される場合、ベクトルが配置されるボロノイ領域を決定し、レコードを対応する格子点と関連付ける。例えば１つの方法は、格子点と関連付けられたハッシュコードを使用する。クエリベクトルが受信される場合、クエリベクトルに最近接する格子点は、格子点と関連付けられたレコードにアクセスするために使用される。クエリに対する更なるプローブは、クエリ点からボロノイ領域の壁までの距離を計算することで決定される。距離が十分に短い場合、壁の反対側の格子点はプローブとして使用される。しかし、ベクトルが大きな次元数を有する場合、ボロノイ領域の壁の数は非常に多く、クエリ点から壁までの距離の計算は遅くなる。従って、この方法は、高次元ベクトルを有し且つ正確で高速なクエリを必要とするシステムには適さない。
【００１２】
無作為のハッシュ関数の場合、均衡された割り当てを実現するために二元チェーニングが適用される。一対のハッシュ関数を使用するため、２つのハッシュコードを各オブジェクトに提供する。挿入時、貪欲法は既存の登録数が最も少ないハッシュコードを選択する。検索時、双方のクエリハッシュコードは、オブジェクトを検索するために使用される。無作為のハッシュ関数を有する不均衡なハッシュの割り当てと比較して、いずれかのハッシュコードに対して予想される最大登録数は、二元チェーニングアルゴリズムを使用することで激減する。
【００１３】
従って、コンテンツベースの画像探索のために改善された方法及びシステムを提供する必要がある。
【発明の概要】
【００１４】
本発明の目的は、既存の構成の１つ以上の欠点を実質的に克服すること又は少なくとも改善することである。
【００１５】
本発明の第１の態様によると、ハッシュコードを画像の一部に紐付ける方法が提供される。方法は、多次元格子の複数の格子点を選択して、画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成するステップと、分布基準に従って選択された複数の格子点から格子点を決定するステップであり、決定された格子点は、最小の囲み領域及び特徴ベクトルのクエリ半径距離内に配置された最小の囲み領域に隣接する格子の領域に共通であり、特徴ベクトルは、クエリベクトルのクエリ半径内に配置される場合に一致していると考えられるステップと、特徴ベクトルを決定された格子点に割り当てるステップと、決定された格子点と関連付けられたハッシュコードと画像の一部との間の紐付けを格納するステップとを備える。
【００１６】
本発明の第２の態様によると、ハッシュコードを画像の一部に紐付けるシステムが提供される。システムは、コンピュータプログラムを格納する記憶装置と、プログラムを実行するプロセッサとを備える。プログラムは、多次元格子の複数の格子点を選択して、画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成する方法ステップと、分布基準に従って選択された複数の格子点から格子点を決定する方法ステップであり、決定された格子点は、最小の囲み領域及び特徴ベクトルのクエリ半径距離内に配置された最小の囲み領域に隣接する格子の領域に共通であり、特徴ベクトルは、クエリベクトルのクエリ半径内に配置される場合に一致していると考えられる方法ステップと、特徴ベクトルを決定された格子点に割り当てる方法ステップと、決定された格子点と関連付けられたハッシュコードと画像の一部との間の紐付けを格納する方法ステップとを実行するコードを含む。
【００１７】
本発明の第３の態様によると、ハッシュコードを画像の一部に紐付ける方法を実行するようにプロセッサに指示するコンピュータプログラムを記録したコンピュータ可読記憶媒体が提供される。コンピュータプログラムは、多次元格子の複数の格子点を選択して、画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成するステップと、分布基準に従って選択された複数の格子点から格子点を決定するステップであり、決定された格子点は、最小の囲み領域及び特徴ベクトルのクエリ半径距離内に配置された最小の囲み領域に隣接する格子の領域に共通であり、特徴ベクトルは、クエリベクトルのクエリ半径内に配置される場合に一致していると考えられるステップと、特徴ベクトルを決定された格子点に割り当てるステップと、決定された格子点と関連付けられたハッシュコードと画像の一部との間の紐付けを格納するステップとを実行するコードを含む。
【００１８】
本発明の第４の態様によると、ハッシュテーブルの格納及び検索の方法であって、少なくとも１つのレコードを格納するために登録フェーズを実行するステップであり、前記格納されたレコード毎に、前記登録フェーズが、特徴ベクトル及びハッシュテーブルの現在の状態に基づいてレコードと関連付けられた特徴ベクトルに対するハッシュコードを生成するステップと、レコードをハッシュテーブルの生成されたハッシュコードと関連付けるステップとを含むステップと、前記ハッシュテーブルから前記格納されたレコードの少なくとも１つを検索するためにクエリフェーズを実行するステップであり、前記クエリフェーズが、探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、前記識別されたハッシュコードの少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップとを含むステップとを備える方法が提供される。
【００１９】
本発明の第５の態様によると、コンピュータプログラムを格納する記憶装置と、プログラムを実行するプロセッサとを備えるハッシュテーブルの格納及び検索のシステムが提供される。プログラムは、少なくとも１つのレコードを格納するために登録フェーズを実行する方法ステップであり、前記格納されたレコード毎に、前記登録フェーズが、特徴ベクトル及びハッシュテーブルの現在の状態に基づいてレコードと関連付けられた特徴ベクトルに対するハッシュコードを生成するステップと、レコードをハッシュテーブルの生成されたハッシュコードと関連付けるステップとを含む方法ステップと、前記ハッシュテーブルから前記格納されたレコードの少なくとも１つを検索するためにクエリフェーズを実行する方法ステップであり、前記クエリフェーズが、探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、前記識別されたハッシュコードの少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップとを含む方法ステップとを実行するコードを含む。
【００２０】
本発明の第６の態様によると、ハッシュテーブルの格納及び検索の方法を実行するようにプロセッサに指示するコンピュータプログラムを記録したコンピュータ可読記憶媒体が提供され、前記コンピュータプログラムは、少なくとも１つのレコードを格納するために登録フェーズを実行するステップであり、前記格納されたレコード毎に、前記登録フェーズが、特徴ベクトル及びハッシュテーブルの現在の状態に基づいてレコードと関連付けられた特徴ベクトルに対するハッシュコードを生成するステップと、レコードをハッシュテーブルの生成されたハッシュコードと関連付けるステップとを含むステップと、前記ハッシュテーブルから前記格納されたレコードの少なくとも１つを検索するためにクエリフェーズを実行するステップであり、前記クエリフェーズが、探索基準を満たす特徴ベクトルと関連付けられる前記ハッシュテーブルのハッシュコードを識別するステップと、前記識別されたハッシュコードの少なくとも１つに割り当てられた少なくとも１つのレコードを検索するステップとを含むステップとを実行するコードを含む。
【００２１】
本発明の別の態様によると、上述の方法のうちのいずれか１つを実現する装置が提供される。
【００２２】
本発明の別の態様によると、上述の方法のうちのいずれか１つを実現するコンピュータプログラムを記録したコンピュータ可読媒体を含むコンピュータプログラム製品が提供される。
【００２３】
本発明の他の態様も開示される。
【図面の簡単な説明】
【００２４】
【図１】図１は、画像と、画像部分と、画像部分と関連付けられた特徴ベクトルとを示す図である。
【図２】図２は、ベクトル、クエリ点及びクエリ半径の空間的解釈を示す図である。
【図３】図３は、本発明の一実施形態に係るハッシュ法を示すフローチャートである。
【図４Ａ】図４は、レコードと関連付けられた所定のベクトルに対するハッシュ領域の空間的解釈の一例を示す図である。
【図４Ｂ】図４は、レコードと関連付けられた所定のベクトルに対するハッシュ領域の空間的解釈の一例を示す図である。
【図５Ａ】図５Ａは、２次元特徴空間の囲み領域内に配置された特徴ベクトルの配列を示す図である。
【図５Ｂ】図５Ｂは、２次元特徴空間の囲み領域内に配置された特徴ベクトルの配列を示す図である。
【図６】図６は、図３のハッシュ法において使用されたような候補となる格子点を選択する方法を示すフローチャートである。
【図７】図７は、図３のハッシュ法の１つ以上のステップで使用されるハッシュ決定方法を示すフローチャートである。
【図８】図８は、図３のハッシュ法において使用される別の格子候補点選択方法を示すフローチャートである。
【図９】図９は、ハッシュテーブルのクエリ方法を示すフローチャートである。
【図１０】図１０は、所定のクエリベクトルに対するハッシュ領域の空間的解釈を示す図である。
【図１１】図１１は、２次元特徴空間の囲み領域における特徴ベクトルを示す図である。
【図１２Ａ】図１２Ａは、２次元特徴空間における格子点への特徴ベクトルの割り当てを示す図である。
【図１２Ｂ】図１２Ｂは、２次元特徴空間における格子点への特徴ベクトルの割り当てを示す図である。
【図１３Ａ】図１３Ａは、説明した構成を実施する汎用コンピュータシステムの概略ブロック図である。
【図１３Ｂ】図１３Ｂは、説明した構成を実施する汎用コンピュータシステムの概略ブロック図である。
【図１４Ａ】図１４Ａは、検索システムの登録フェーズ及びクエリフェーズを示す図である。
【図１４Ｂ】図１４Ｂは、検索システムの登録フェーズ及びクエリフェーズを示す図である。
【図１４Ｃ】図１４Ｃは、検索システムの登録フェーズ及びクエリフェーズを示す図である。
【発明を実施するための形態】
【００２５】
次に、以下の図面を参照して、本発明の少なくとも１つの実施形態を説明する。
【００２６】
いずれか１つ以上の添付の図面において、同一の参照番号を有するステップ及び／又は特徴を参照する場合、それに反する意図が示されない限り、これらのステップ及び／又は特徴は、本明細書のために同一の機能又は動作を有する。
【００２７】
本発明は、レコードの格納及び検索に関する。説明される構成は、ｎ次元特徴ベクトルと関連付けられたレコードを効率的に検索するためにハッシュテーブルを作成し且つそれにアクセスするために検索システムにおいて使用される。検索されたレコードのベクトルは、所定のクエリベクトルの特定のクエリ半径内に配置される。システムが構成される時にクエリ半径が既知の場合に偽陰性を最低限にするためにシステムを使用できるため、これは偽陰性の損失が大きい場合に特に有用である。
【００２８】
第１に、登録フェーズは１つ以上のレコードの格納に関する。第２に、クエリフェーズは、探索基準に従って格納されたレコードの１つ以上の検索に関する。登録フェーズは、特徴ベクトル及びハッシュテーブルの現在の状態に基づいて特徴ベクトルに対するハッシュコードを生成する。次に、登録フェーズは、特徴ベクトルと関連付けられたレコードをハッシュテーブルの生成されたハッシュコードと関連付ける。第２に、クエリフェーズは、探索基準を満たすベクトルが使用するハッシュコードを識別する。
【００２９】
本発明に係る検索システムは、各々が特徴ベクトル及びレコードと関連付けられる画像と関連付けられたレコードを格納及び検索するように実現される。特徴ベクトルは、対応するレコードを格納するために重要なものとして使用される。レコードは画像に関する情報を含む。情報は、対応する特徴ベクトル、画像、画像の一部、画像のサブサンプルバージョン、所有者情報、アクセス情報、印刷情報又はそれらのあらゆる組合せ等を含むが、それに限定されない。
【００３０】
本発明に係る検索システムは、テキスト、テキストの一部又はペーパーフィンガープリントの検索等の撮影以外の適応例に対しても実現されてもよい。
【００３１】
本発明の一態様は、ハッシュコードを画像の一部に紐付ける方法、システム及びコンピュータプログラムを提供する。多次元格子の複数の格子点を選択して、画像の一部を示す特徴ベクトルの周囲に最小の囲み領域を形成する。分布基準に従って選択された複数の格子点から格子点を決定する。決定された格子点は、最小の囲み領域及び特徴ベクトルのクエリ半径距離内に配置された最小の囲み領域に隣接する格子の領域に共通である。特徴ベクトルは、クエリベクトルのクエリ半径内に配置される場合に一致していると考えられる。特徴ベクトルを決定された格子点に割り当て、決定された格子点と関連付けられたハッシュコードと画像の一部との間の紐付けを格納する。
【００３２】
本発明の別の態様は、ハッシュテーブルの格納、並びに検索の方法、システム及びコンピュータプログラムを提供する。少なくとも１つのレコードをハッシュテーブルに格納するために登録フェーズを実行し、ハッシュテーブルから格納されたレコードの少なくとも１つを検索するためにクエリフェーズを実行する。格納されたレコード毎に、登録フェーズは、特徴ベクトル及びハッシュテーブルの現在の状態に基づいてレコードと関連付けられた特徴ベクトルに対するハッシュコードを生成し、レコードをハッシュテーブルの生成されたハッシュコードと関連付ける。クエリフェーズは、探索基準を満たす特徴ベクトルと関連付けられるハッシュテーブルに対するハッシュコードを識別し、識別されたハッシュコードの少なくとも１つに割り当てられた少なくとも１つのレコードを検索する。
【００３３】
図１４Ａは、レコード１４０５及び点［１．０，  ０．１］の形式の関連特徴ベクトル１４１０を示す。登録フェーズは、点及びハッシュテーブル１４１５の現在の状態の座標に基づいて特徴ベクトル１４１０に対するハッシュコード１４２０を生成する。図１４Ｂは、ハッシュテーブル１４１５の生成されたハッシュコード１４２０と関連付けられるレコード１４０５を示す。図１４Ｃは、クエリベクトル１４２５を一致させる点が使用するハッシュテーブル１４１５のハッシュコード１４３０、１４４０、１４５０を識別するために点［１．１，  ０．０］の形式のクエリベクトル１４２５が使用されるクエリフェーズを示す。
【００３４】
Ａ＊格子を使用してハッシュ関数が規定される本発明の少なくとも１つの実施形態を説明する。Ａ＊系は、Ａ格子系に関して規定される。格子Ａｎは、以下のように規定される。
Ａｎ＝｛ｐ∈Ｚ（ｎ＋１）｜Σｉｐｉ＝０｝
Ａｎは、座標の整数を作成するようにＲ（ｎ＋１）に組み込まれるｎ次元格子である。Ａｎの両数（ｄｕａｌ）はＡｎ＊であり、同様に、同一のｎ次元部分空間の内部に組み込まれる。Ａｎ＊は、以下により規定される。
Ａｎ＊＝｛ｐ∈Ｒ（ｎ＋１）｜Σｉｐｉ＝０，∀ｑ∈Ａｎ，ｐ・ｑ∈Ｚ｝
関連特徴ベクトルを有するレコードが受信される場合、隣接する格子点が選択され、ベクトルに対するハッシュコードを決定するために使用される。隣接する格子点は、ベクトルを含むドローネ領域のコーナーに対応する格子の点である。任意であるが特定の格子が与えられる場合、格子の各ドローネ領域は、互いにある所定の範囲内にあるコーナーを有する。従って、隣接する格子点は、ベクトルのある所定の範囲内にある格子の点である。しかし、ベクトルのある所定の範囲内の全ての格子点が「隣接する格子点」であるというのは不確かである。ハッシュコードは格子点に紐付けられ、格子点を決定し且つ格子点からハッシュコードを決定するためにハッシュコードを使用することも可能である。その結果、ハッシュコード及び格子点は、同一の情報を示し、区別なく使用される。一実施形態において、格子点はハッシュコードである。別の実施形態は、ハッシュコードを決定するために関数を格子点に適用する。レコードは、ハッシュテーブルを使用してハッシュコードと関連付けられる。クエリベクトルが受信される場合、囲みドローネ領域のコーナーの格子点が配置され、配置された格子点の各々に対応するクエリハッシュコードが決定される。ハッシュテーブルは、各クエリハッシュコードと関連付けられたレコードを検出するために使用される。
【００３５】
本発明の実施形態は、本発明の趣旨及び範囲から逸脱することなくＡ＊格子以外の多次元格子を適用することで実施されてもよいことが当業者により明らかとなるだろう。例えば、Ａ格子、Ｄ格子、Ｄ＊格子、Ｚ格子及びリーチ格子が使用されてもよい。
【００３６】
図１３Ａ及び図１３Ｂは、説明される種々の構成を実施する汎用コンピュータシステム１３００を示す。
【００３７】
図１３Ａに示されるように、コンピュータシステム１３００は、コンピュータモジュール１３０１と、キーボード１３０２、マウスポインタデバイス１３０３、スキャナ１３２６、カメラ１３２７及びマイク１３８０等の入力装置と、プリンタ１３１５、表示装置１３１４及びスピーカ１３１７を含む出力装置とを備える。外部変復調器（モデム）送受信機デバイス１３１６は、接続１３２１を介して通信ネットワーク１３２０と通信するためにコンピュータモジュール１３０１により使用される。通信ネットワーク１３２０は、インターネット、セルラ電気通信ネットワーク等のワイドエリアネットワーク（ＷＡＮ）又は専用ＷＡＮである。接続１３２１が電話線である場合、モデム１３１６は従来の「ダイヤルアップ」モデムである。あるいは、接続１３２１が大容量（例えば、ケーブル）接続である場合、モデム１３１６はブロードバンドモデムである。無線モデムは、通信ネットワーク１３２０に無線接続するために更に使用される。
【００３８】
一般にコンピュータモジュール１３０１は、少なくとも１つのプロセッサユニット１３０５と、メモリユニット１３０６とを備える。例えばメモリユニット１３０６は、半導体ランダムアクセスメモリ（ＲＡＭ）及び半導体読み出し専用メモリ（ＲＯＭ）を有する。コンピュータモジュール１３０１は、ビデオディスプレイ１３１４、スピーカ１３１７及びマイク１３８０に結合するオーディオ−ビデオインタフェース１３０７と、キーボード１３０２、マウス１３０３、スキャナ１３２６、カメラ１３２７及び必要に応じてジョイスティック又は他のヒューマンインタフェースデバイス（不図示）に結合する入出力（Ｉ／Ｏ）インタフェース１３１３と、外部モデム１３１６及びプリンタ１３１５用のインタフェース１３０８とを含む複数のＩ／Ｏインタフェースを更に備える。いくつかの実現例において、モデム１３１６は、インタフェース１３０８等のコンピュータモジュール１３０１内に組み込まれる。コンピュータモジュール１３０１は、接続１３２３を介してコンピュータシステム１３００がローカルエリアネットワーク（ＬＡＮ）として知られているローカルエリア通信ネットワーク１３２２に接続できるようにするローカルネットワークインタフェース１３１１を更に有する。図１３Ａに示されるように、ローカル通信ネットワーク１３２２は、一般にいわゆる「ファイアウォール」デバイス又は同様の機能性を備えるデバイスを含むワイドネットワーク１３２０に接続１３２４を介して更に結合する。ローカルネットワークインタフェース１３１１は、ＥｔｈｅｒｎｅｔＴＭ回路カード、ＢｌｕｅｔｏｏｔｈＴＭ無線装置又はＩＥＥＥ８０２．１１無線装置を備えるが、多数の他の種類のインタフェースがインタフェース１３１１に対して実現される。
【００３９】
Ｉ／Ｏインタフェース１３０８及び１３１３は、直列接続性及び並列接続性のいずれか一方又は双方を提供する。一般に直列接続性は、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格に従って実現され、対応するＵＳＢコネクタ（不図示）を有する。記憶装置１３０９が提供され、一般に記憶装置１３０９はハードディスクドライブ（ＨＤＤ）１３１０を含む。フロッピディスクドライブ及び磁気テープドライブ（不図示）等の他の記憶装置が更に使用されてもよい。光ディスクドライブ１３１２は、一般に、データの不揮発性ソースとして動作するように提供される。例えば、光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ、Ｂｌｕ−ｒａｙ  ＤｉｓｃＴＭ）、ＵＳＢ−ＲＡＭ、ポータブルな外部ハードドライブ及びフロッピディスク等のポータブルメモリ装置は、システム１３００に対する適切なデータソースとして使用される。
【００４０】
コンピュータモジュール１３０１の構成要素１３０５〜１３１３は、一般に、結果として当業者に既知であるコンピュータシステム１３００の動作の従来のモードから得られる方法で相互接続バス１３０４を介して通信する。例えばプロセッサ１３０５は、接続１３１８を使用してシステムバス１３０４に結合される。同様に、メモリ１３０６及び光ディスクドライブ１３１２は、接続１３１９によりシステムバス１３０４に結合される。説明した構成を実施するコンピュータの例には、ＩＢＭ−ＰＣ及び互換性のあるもの、Ｓｕｎ  Ｓｐａｒｃｓｔａｔｉｏｎｓ、Ａｐｐｌｅ  ＭａｃＴＭ又は同様のコンピュータシステムが含まれる。
【００４１】
ハッシュコードを画像の一部に紐付ける方法、並びにハッシュコードの格納及び検索の方法は、コンピュータシステム１３００を使用して実現される。本明細書において説明される図１〜図１２及び図１４Ａ〜図１４Ｃの処理は、コンピュータシステム１３００内で実行可能な１つ以上のソフトウェアアプリケーションプログラム１３３３として実現される。特に、ハッシュコードを画像の一部に紐付ける方法のステップ、並びにハッシュコードの格納及び検索の方法は、コンピュータシステム１３００内で実行されるソフトウェア１３３３中の命令１３３１（図１３Ｂを参照）により実施される。ソフトウェア命令１３３１は、各々が１つ以上の特定のタスクを実行する１つ以上のコードモジュールとして形成される。ソフトウェアは２つの別個の部分に更に分割され、第１の部分及び対応するコードモジュールは紐付ける方法、格納する方法及び検索する方法を実行し、第２の部分及び対応するコードモジュールは、第１の部分とユーザとの間のユーザインタフェースを管理する。
【００４２】
例えばソフトウェアは、以下に説明する記憶装置を含むコンピュータ可読媒体に格納される。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム１３００にロードされ、コンピュータシステム１３００により実行される。そのようなソフトウェア又はコンピュータ可読媒体に記録されているコンピュータプログラムを有するコンピュータ可読媒体は、コンピュータプログラム製品である。コンピュータシステム１３００においてコンピュータプログラムを使用することにより、ハッシュコードを画像の一部に紐付けること、並びにハッシュコードの格納及び検索に有利な１つ以上の装置を実施することが好ましい。
【００４３】
一般にソフトウェア１３３３は、ＨＤＤ１３１０又はメモリ１３０６に格納又は記録される。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム１３００にロードされ、コンピュータシステム１３００により実行される。従って、例えばソフトウェア１３３３は、光ディスクドライブ１３１２により読み出される光学的に読み出し可能なディスク記憶媒体（例えば、ＣＤ−ＲＯＭ）１３２５上に格納される。そのようなソフトウェア又コンピュータプログラムを記録したコンピュータ可読媒体は、コンピュータプログラム製品である。コンピュータシステム１３００においてコンピュータプログラムを使用することにより、ハッシュコードを画像の一部に紐付けること、並びにハッシュコードの格納及び検索に有利な１つ以上の装置を実施することが好ましい。
【００４４】
いくつかの例において、アプリケーションプログラム１３３３は、１つ以上のＣＤ−ＲＯＭ１３２５上でユーザが符号化したものに供給されて対応するドライブ１３１２を介して読み出されるか、あるいはユーザによりネットワーク１３２０又は１３２２から読み出される。また、ソフトウェアは、他のコンピュータ可読媒体からコンピュータシステム１３００に更にロードされてよい。コンピュータ可読記憶媒体は、実行及び／又は処理するために記録された命令及び／又はデータをコンピュータシステム１３００に提供するあらゆる非一時的な有形記憶媒体を示す。そのような記憶媒体の例には、フロッピディスク、磁気テープ、ＣＤ−ＲＯＭ、ＤＶＤ、Ｂｌｕ−ｒａｙ  Ｄｉｓｃ、ハードディスクドライブ、ＲＯＭ又は集積回路、ＵＳＢメモリ、光磁気ディスク、あるいは例えばＰＣＭＣＩＡカード等のコンピュータ可読カードが含まれ、そのようなデバイスは、コンピュータモジュール１３０１の内部又は外部にある。ソフトウェア、アプリケーションプログラム、命令及び／又はデータをコンピュータモジュール１３０１に提供することに更に関係する一時的又は非一時的なコンピュータ可読伝送媒体の例には、無線送信チャネル又は赤外線送信チャネル及び別のコンピュータ又はネットワーク化されたデバイスへのネットワーク接続、並びに電子メール送信及びウェブサイト上等に記録された情報を含むインターネット又はイントラネットが含まれる。
【００４５】
上述したアプリケーションプログラム１３３３の第２の部分及び対応するコードモジュールは、ディスプレイ１３１４上にレンダリングされるかあるいは表される１つ以上のグラフィカルユーザインタフェース（ＧＵＩ）を実現するように実行される。一般にキーボード１３０２及びマウス１３０３を操作することにより、コンピュータシステム１３００及びアプリケーションのユーザは、ＧＵＩと関連付けられたアプリケーションに制御コマンド及び／又は入力を提供するように機能的に適応可能な方法でインタフェースを操作する。他の形式の機能的に適応可能なユーザインタフェース、例えばスピーカ１３１７を介して出力された音声プロンプト及びマイク１３８０を介して入力されたユーザボイスコマンドを利用するオーディオインタフェースが更に実現されてもよい。
【００４６】
図１３Ｂは、プロセッサ１３０５及び「メモリ」１３３４を示す詳細な概略ブロック図である。メモリ１３３４は、図１３Ａのコンピュータモジュール１３０１がアクセスする全てのメモリモジュール（ＨＤＤ１３０９及び半導体メモリ１３０６を含む）の論理的な集合を示す。
【００４７】
コンピュータモジュール１３０１の電源が最初に投入される場合、ｐｏｗｅｒ−ｏｎ  ｓｅｌｆ−ｔｅｓｔ（ＰＯＳＴ）プログラム１３５０が実行する。一般にＰＯＳＴプログラム１３５０は、図１３Ａの半導体メモリ１３０６のＲＯＭ１３４９に格納される。ソフトウェアを格納するＲＯＭ１３４９等のハードウェアデバイスは、ファームウェアと呼ばれる場合もある。ＰＯＳＴプログラム１３５０は、コンピュータモジュール１３０１内のハードウェアを調査して適切に機能することを保証し、一般に、正しく動作するために、プロセッサ１３０５、メモリ１３３４（１３０９、１３０６）及び一般にＲＯＭ１３４９に更に格納された基本入出力システムソフトウェア（ＢＩＯＳ）モジュール１３５１をチェックする。ＰＯＳＴプログラム１３５０が正常に実行したら、ＢＩＯＳ１３５１は図１３Ａのハードディスクドライブ１３１０を起動する。ハードディスクドライブ１３１０を起動することにより、ハードディスクドライブ１３１０上に常駐するブートストラップローダプログラム１３５２がプロセッサ１３０５を介して実行する。これにより、オペレーティングシステム１３５３は、ＲＡＭメモリ１３０６にロードされると動作を開始する。オペレーティングシステム１３５３は、プロセッサ１３０５により実行可能なシステムレベルのアプリケーションであり、プロセッサ管理、メモリ管理、デバイス管理、ストレージ管理、ソフトウェアアプリケーションインタフェース及び汎用ユーザインタフェースを含む種々のハイレベルな機能を遂行する。
【００４８】
オペレーティングシステム１３５３は、メモリ１３３４（１３０９、１３０６）を管理し、コンピュータモジュール１３０１上で実行する処理又はアプリケーションの各々が別の処理に割り当てられたメモリと衝突することなく実行する十分なメモリを有することを保証する。また、図１３Ａのシステム１３００で使用可能な種々のメモリは、各処理が効率的に実行できるように適切に使用されなければならない。従って、集約メモリ１３３４は、メモリの特定の部分が割り当てられる方法を示すことを意図するのではなく（特に記載されない限り）、コンピュータシステム１３００によりアクセス可能なメモリの概略図及びそのようなメモリが使用される方法を提供する。
【００４９】
図１３Ｂに示されるように、プロセッサ１３０５は、制御ユニット１３３９、演算論理装置（ＡＬＵ）１３４０及びキャッシュメモリと呼ばれる場合もあるローカルメモリ又は内部メモリ１３４８を含む多数の機能モジュールを含む。一般にキャッシュメモリ１３４８は、レジスタ部に複数の記憶レジスタ１３４４〜１３４６を含む。１つ以上の内部バス１３４１は、これらの機能モジュールを機能的に相互接続する。一般にプロセッサ１３０５は、接続１３１８を使用してシステムバス１３０４を介して外部デバイスと通信する１つ以上のインタフェース１３４２を更に有する。メモリ１３３４は、接続１３１９を使用してバス１３０４に結合される。
【００５０】
アプリケーションプログラム１３３３は、条件付き分岐命令及びループ命令を含む一連の命令１３３１を含む。プログラム１３３３は、プログラム１３３３を実行する場合に使用されるデータ１３３２も含む。命令１３３１及びデータ１３３２は、それぞれ、記憶場所１３２８、１３２９、１３３０及び１３３５、１３３６、１３３７に格納される。命令１３３１及び記憶場所１３２８〜１３３０の相対的なサイズに依存して、特定の命令は、記憶場所１３３０に示された命令により示されたように単一の記憶場所に格納される。あるいは、命令は、記憶場所１３２８及び１３２９に示された命令部分により示されたように、各々が別個の記憶場所に格納される多数の部分にセグメント化される。
【００５１】
一般にプロセッサ１３０５は、そこで実行される命令の集合を与えられる。プロセッサ１１０５は、命令の別の集合を実行することにより自身が反応する後続の入力を待つ。各入力は、入力装置１３０２、１３０３の１つ以上により生成されたデータ、ネットワーク１３２０、１３０２のうちの一方を介して外部ソースから受信したデータ、記憶装置１３０６、１３０９のうちの一方から検索されたデータ又は対応する読み取り装置１３１２に挿入された記憶媒体１３２５から検索されたデータを含む多数のソースのうちの１つ以上から提供され、その全てを図１３Ａに示す。いくつかの例において、命令の集合を実行した結果、データが出力される。実行することは、データ又は変数をメモリ１３３４に格納することも含む。
【００５２】
開示されるハッシュコードの紐付け、格納及び検索の構成は、対応する記憶場所１３５５、１３５６、１３５７においてメモリ１３３４に格納される入力変数１３５４を使用する。ハッシュコードの紐付け、格納及び検索の構成は、対応する記憶場所１３６２、１３６３、１３６４においてメモリ１３３４に格納される出力変数１３６１を生成する。中間変数１３５８は、記憶場所１３５９、１３６０、１３６６及び１３６７に格納される。
【００５３】
図１３Ｂのプロセッサ１３０５を参照すると、レジスタ１３４４、１３４５、１３４６、演算論理装置（ＡＬＵ）１３４０及び制御ユニット１３３９は、プログラム１３３３を構成する命令集合において命令毎に「取り込み、復号化及び実行」サイクルを実行するのに必要なマイクロ動作のシーケンスを実行するように共に動作する。取り込み、復号化及び実行サイクルの各々は、以下を含む。
【００５４】
（ａ）記憶場所１３２８、１３２９、１３３０からの命令１３３１を取り込むかあるいは読み取る取り込み動作
（ｂ）制御ユニット１３３９が取り込まれている命令を判定する復号化動作
（ｃ）制御ユニット１３３９及び／又はＡＬＵ１３４０が命令を実行する実行動作
その後、次の命令に対する更なる取り込み、復号化及び実行サイクルが実行される。同様に、制御ユニット１３３９が値を記憶場所１３３２に格納するかあるいは書き込むことにより、格納サイクルが実行される。
【００５５】
図１〜図１２及び図１４Ａ〜図１４Ｃの処理におけるステップ又はサブ処理の各々は、プログラム１３３３の１つ以上の部分と関連付けられ、プログラム１３３３の示された部分に対して命令集合において命令毎に取り込み、復号化及び実行サイクルを実行するように共に動作するプロセッサ１３０５のレジスタ部１３４４、１３４５、１３４７、ＡＬＵ１３４０及び制御ユニット１３３９により実行される。
【００５６】
あるいは、ハッシュコードを画像の一部に紐付ける方法、並びにハッシュコードの格納及び検索の方法は、格子点を選択し、分布基準に従って格子点を決定し、特徴ベクトルを決定された格子点に割り当て、決定された格子点と関連付けられたハッシュコードと画像の一部との間の紐付けを格納し、登録フェーズを実行し、且つクエリフェーズを実行する機能又はサブ機能を実行する１つ以上の集積回路等の専用ハードウェアで実現されてもよい。そのような専用ハードウェアは、グラフィックプロセッサ、デジタル信号プロセッサ又は１つ以上のマイクロプロセッサ及び連想メモリを備える。
【００５７】
図１及び図６を参照して、画像検索を含む検索システムの一実施形態を説明する。図１は、データベース２８０のハッシュテーブルに格納されるレコード２００と関連付けられる画像１００を示す。レコード２００は画像に関する情報を含む。画像１００は、画像１００と関連付けられた特徴ベクトル２１０が決定される画像１００の領域１１０を識別するように、「ＳＩＦＴ」（Ｓｃａｌｅ  Ｉｎｖａｒｉａｎｔ  Ｆｅａｔｕｒｅ  Ｔｒａｎｓｆｏｒｍ）等の画像特徴抽出器により処理される。その後、特徴ベクトル２１０は、データベース２８０に格納され、画像レコード２００と関連付けられる。
【００５８】
画像レコードは画像に関する情報を含む。例えば画像レコードは、画像にアクセスするためのｊｐｅｇ、あるいはファイル名又はリソースロケータ等の何らかの形式で画像の画素値を記録する。画像レコードは、所有者の詳細又は画像を含む処理に関する情報を含む。例えば画像レコードは、画像を印刷したユーザ又は画像が印刷された場所及び時間に関する情報を含む。画像レコードは、特徴ベクトル又は特徴ベクトルのある圧縮バージョン、あるいは特徴ベクトルを示す何らかの識別子を記録する。図１の特徴ベクトル２１０等の画像から生成された特徴ベクトルは、図２の特徴空間表現に示される。尚、特徴ベクトルは、図２の特徴空間２６０等の空間における点として処理される。そのため、「ベクトル」、「特徴ベクトル」及び「点」という用語は、本発明の実施形態において画像の一部を示す数値の配列を示すために区別なく使用される。ベクトルが点として処理される時、２つのベクトル間の相違の基準が２つの対応する点の間の距離として処理されるため、距離は２つのベクトル間とすることができる。
【００５９】
図２は、２つのレコード２００及び２２０が格納されるデータベース２８０を示す。２つのレコード２００及び２２０は、不図示の第１の画像及び第２の画像と関連付けられる。レコード２００及び２２０は、第１の画像及び第２の画像のそれぞれに関する同一の種類の情報を格納する。一例において、レコード２００は、第１の画像に対する最後の印刷日を格納し、レコード２２０は、第２の画像に対する最後の印刷日を格納する。あるいは、レコード２００及び２２０は、第１の画像及び第２の画像のそれぞれに関する異なる種類の情報を格納してもよい。レコード２００及び２２０は、それぞれ特徴ベクトル２１０及び２３０と関連付けられる。ベクトル２１０及び２３０は、特徴空間２６０における空間的解釈を有する。データベースに格納された何らかの類似画像を探索するために画像が使用される場合、クエリベクトル２４０は、探索のために使用されているクエリ画像から生成された特徴ベクトルである。クエリ画像に類似するデータベースに格納された画像を発見することは、そのクエリ画像から導出されたクエリベクトル２４０の所定の半径内のレコードを検索することで実現される。所定の半径は、クエリ点２４０の周囲の円形のクエリ領域２７０を規定するクエリ半径２５０により図２に示される。ベクトル２１０等のクエリ領域２７０の内側に配置されたベクトルは、クエリ点２４０に一致するものとして規定され、ベクトル２３０等のクエリ領域の外側のベクトルは、クエリ点２４０に一致しない。クエリ半径２５０は、クエリベクトルと特徴ベクトルとの間の最大許容相違の基準であると考えられる。ベクトル２１０がクエリ領域２７０内にある時、ベクトル２１０と関連付けられたレコード２００がクエリベクトル２４０に応答して返送されるのに対し、ベクトル２３０がクエリ領域の外側にあるため、レコード２２０は返送されない。
【００６０】
従って、特徴ベクトル２１０は第１の画像１００から導出され、特徴ベクトル２４０はクエリ画像（不図示）から導出される。特徴ベクトル２１０は、第１の画像１００とクエリ画像との間の類似性の必要とされるレベルを示すクエリベクトル２４０の半径２５０内にある。このように仮定すると、レコード２００は返送される。レコード２００は、画像１００と関連付けられたあらゆる種類の情報を格納してもよい。レコード２００は、画像１００と関連付けられたあらゆる種類の情報を格納してもよい。
【００６１】
一実施形態において、クエリ画像は、クエリ画像における色及び／又はエッジの分布を示す単一の特徴ベクトルと関連付けられる。そのような一実施形態において、一致するレコードは、色及び／又はエッジの同様の分布の画像と関連付けられたレコードである。別の実施形態において、クエリ画像は、各々が画像の一部のテクスチャに関する情報と関連付けられる多くの特徴ベクトルを有する。本実施形態において、一致するレコードを採点する（例えば、投票により）ために集約される多くの一致があるため、高スコアのレコードは、部分的にクエリ画像と同一に見える画像と関連付けられたレコードである。
【００６２】
一致しないレコードが返送される場合、それを偽陽性誤りと呼ぶ。一致するレコードが返送されない場合、それを偽陰性誤りと呼ぶ。多くの適応例において、偽陽性一致と偽陰性一致との影響の間には非対称がある。候補の後続の網羅的チェックにより偽陽性が除去されるため、偽陽性率が適切に低いと仮定すると、偽陽性一致は許容可能である。後続の処理が損失を回復できないため、偽陰性一致に対する影響は大きい。
ハッシュテーブルの更新
図３は、本発明の一実施形態に係る入力画像に対するハッシュコードを決定するハッシュ法３００を示すフローチャートである。ハッシュ法３００は、画像のハッシュテーブルを形成するために多数の入力画像に適用される。図９に関連して更に詳細に説明されるように、画像をハッシュテーブルに格納することにより、ハッシュテーブルから類似画像を発見するためにクエリ画像が使用される際に画像を検索できる。方法３００は、プロセッサユニット１３０５で実行する複数の命令を含むコンピュータプログラムとして実現される。
【００６３】
ハッシュ法３００は、開始ステップ３０５において開始し、入力画像を受信する画像受信ステップ３１０に進む。画像は、カメラ１３２７又はスキャナ１３２６を使用して撮像されても良いし、あるいは場合によっては入出力インタフェースを介してシステムのユーザにより受信及びロードされても良いし、あるいはメモリユニット１３０６又は記憶装置１３０９から検索されても良い。次に、画像は特徴ベクトル計算ステップ３２０へ渡され、画像の一部を示す特徴ベクトルを生成する。一実施形態において、特徴ベクトル計算ステップ３２０は、入力画像の一部を選択して特徴ベクトルを決定するためにＳＩＦＴアルゴリズムを使用する。あるいは、ＳＵＲＦ（Ｓｐｅｅｄｅｄ  Ｕｐ  Ｒｏｂｕｓｔ  Ｆｅａｔｕｒｅｓ）、ＧＩＳＴ（Ｏｌｉｖａ及びＴｏｒｒａｌｂａによる）、エッジヒストグラム特徴又は色ヒストグラム特徴等の特徴ベクトルを生成するために、他の特徴ベクトル計算方法が使用されてもよい。２つの類似画像間の高いマッチング精度を実現するために、画像毎にステップ３２０で計算されるような２つの特徴ベクトルの類似性は高くあるべきである。逆に、２つの非類似画像の場合には、２つの特徴ベクトルの類似性は低くあるべきである。画像毎に多数の特徴を使用する実施形態の場合には、この要求が緩和されるため、均衡を取れる可能性に関しては確かである。
【００６４】
ステップ３２０から格子領域選択ステップ３３０に進み、ステップ３３０において、ステップ３２０から計算された特徴ベクトルを入力とし、特徴ベクトルを取り囲む多次元格子の囲み領域を決定する。一実施形態において、Ａ＊格子は、格子の各点が特徴ベクトルがハッシュされる点を提供する特徴空間に適用される。各特徴ベクトルが格子点の１つに割り当てられるため、特徴ベクトルを格子点の１つにハッシュすることは、量子化の形式であると考えられる。ハッシュのために格子点を選択する最も簡単な方法は、最近接の格子点を選択することであるが、これにより、ハッシュコードを不均衡に使用することになる。図１１を参照して、特徴空間において使用される格子の構成を以下に説明する。ｎ次元特徴空間の場合、格子領域選択ステップ３３０は、特徴ベクトルを含む囲み領域としてドローネ領域を規定するｎ＋１個のＡ＊格子点を決定する。ドローネ領域は、格子点により形成された特徴ベクトルの周囲の最小の囲み領域である。格子領域選択ステップ３３０は、特徴ベクトルを含むＡ＊ドローネ領域のコーナーである格子点を決定する既知の方法のいずれかにより決定される。Ａ＊ドローネ領域は適合しており、原点に触れるいずれかのドローネ領域の座標は、その座標の順列により標準的なドローネ領域から取得される。これは、点を取り囲むドローネ領域を効率的に決定するために利用される。例えば第１のコーナーポイントは、特徴ベクトルの各座標を一番近い整数値に丸めて、座標の合計が０であり、且つ変更される座標が第１のコーナーポイントと入力特徴ベクトルとの間の最小差異の結果得られる座標であるようにいくつかの座標から１を加算又は減算することで決定される。次に、残りのｎ個のコーナーポイントの各々は、ベクトルを第１のコーナーポイントに加算することで決定され、加算されたベクトルの座標がｉ／（ｎ＋１）又はｉ／（ｎ＋１）−１であるため、座標は全ての合計をゼロに落ち着かせる。加算されたベクトルのどの座標がｉ／（ｎ＋１）であるか及びｉ／（ｎ＋１）−１であるかを選択することは、第１のコーナーポイントと特徴ベクトルとの差異の座標のソート順により決定される。ベクトルｖｋは、ｋ／（ｎ＋１）に等しい最初のｎ＋１−ｋ個の座標及びｋ／（ｎ＋１）−１に等しい最後のｋ個の座標を有するベクトルであると規定される。ドローネ領域のｋ番目のコーナーはｃ＋ρ−１（ｖｋ）として計算され、式中、ｃは第１のコーナーであり、ρは差異を増加順序でソートする順列であり、ρ−１（ｖｋ）は、１〜ｎのｋの値毎にρの逆数をｖｋの座標の次数に適用することで得られるベクトルを示す。
【００６５】
次に、２次元特徴空間に配置された特徴ベクトル２１０を示す図４Ａを参照して、格子領域選択ステップ３３０の一例を説明する。Ａ＊格子は、点４１０、４２０及び４３０等の複数の格子点を形成するために特徴空間に適用されている。図４Ａは、格子点４２０の周囲に配置されるボロノイ領域４４０等の格子点の周囲のボロノイ領域も示す。格子点のボロノイ領域は、格子における他のいかなる点より格子点に近接する全ての点から構成される。各ボロノイ領域は、多数の平面又は３次元を超える超曲面に面し、各面は、隣接する２つの格子点の間の境界を規定する。特徴ベクトルのハッシュコードを決定することは、特徴ベクトルが配置されるボロノイ領域を決定することに相当する。ボロノイ領域の各コーナーを「穴」と呼び、それは多数のボロノイ領域が接触する場所である。
【００６６】
上述したようにレコード２００と関連付けられた特徴ベクトル２１０が、３つの格子点４１０、４２０、４３０により形成された三角形のドローネ領域４５０内に配置されることが示される。ドローネ領域は、他のどんな穴からも遠くない穴である全ての点から構成される。ドローネ領域の頂点（すなわち、コーナー）は、穴において接触するボロノイ領域の格子点である。他の格子点はドローネ領域に含まれない。従って、ドローネ領域は、その頂点の格子点により示される。
【００６７】
ドローネ領域４５０が特徴ベクトル２１０を含むため、図４Ａに示される特徴ベクトル２１０に適用される場合、格子領域選択ステップ３３０は、領域４５０を形成する格子点を返送する。ドローネ領域４５０は、特徴ベクトル２１０を取り囲む格子の点から形成された最小の領域である。
【００６８】
図３に戻ると、格子領域選択ステップ３３０で決定された格子点は、格子候補選択ステップ３４０へ渡される。格子候補選択ステップ３４０の目的は、特徴ベクトルに対するハッシュコードとして使用するための候補である格子点を囲み領域から選択することである。特徴ベクトルのクエリ距離内に配置されたあらゆる未来のクエリベクトルに対して、ハッシュ検索関数が特徴ベクトルのハッシュ値を含む囲み領域を返送する場合、囲み領域における格子点は有効な候補であると考えられる。そのため、ハッシュ値をハッシュテーブルに追加する処理には、一致するハッシュ検索処理が必要である。図９を参照してハッシュ検索方法を以下に説明する。格子候補選択ステップ３４０の出力は、特徴ベクトルが割り当てられる候補となる格子点の集合、すなわち候補となるハッシュ値の集合である。格子候補選択ステップ３４０の動作を図６及び図４Ｂに関連して以下に更に詳細に説明する。
【００６９】
次に、図４Ｂを参照して、一例として格子候補選択ステップの動作を説明する。図４Ｂは、図４Ａのドローネ領域４５０を更に詳細に示す。特徴ベクトル２１０が、点４１０及び４２０により規定された平面４６０にまでも及ぶクエリ半径２５０を有する領域４５０内に配置されることが示される。クエリ半径２５０は、あらゆる未来のクエリ点が類似画像の特徴ベクトルとして特徴ベクトル２５０を返送することを予想する領域を規定する。クエリ半径は、一般にハッシュテーブルをクエリするために規定されるが、ハッシュテーブルの構成中にクエリ半径を使用することにより、クエリ半径の影響を考慮してハッシュテーブルを構成できる。クエリ半径２５０が現在のドローネ領域４５０を越えて隣接ドローネ領域４７０にまでも及ぶため、特徴ベクトル２１０は、現在のドローネ領域及び隣接ドローネ領域の双方に対して使用可能な格子点にハッシュされるべきである。点４３０が平面４６０の反対側に配置された隣接ドローネ領域４７０の部分とはなり得ないため、格子候補選択ステップは、候補となる格子点の集合から点４３０を除外すべきである。従って、格子点バリデータは、候補となる格子点の集合から格子点４３０を除外すべきである。
【００７０】
図５Ａ及び図５Ｂは、２次元特徴空間のドローネ領域５００内に配置された特徴ベクトルのより可能な配置を示す。図５Ａは、特徴ベクトル５５０がドローネ領域５００の中心にある状況を示す。特徴ベクトル５５０と関連付けられたクエリ半径５４０は、領域５００のいずれの側も越えて拡張しない。このような状況において、領域５００内に配置された全てのクエリ点が特徴ベクトル５５０を返送すべきであるため、格子点５１０、５２０及び５３０は、格子候補選択ステップにより、特徴ベクトル５５０に対するハッシュコードの生成に使用するために可能な格子点であると考えられる。
【００７１】
図５Ｂは、特徴ベクトル５６０がドローネ領域５００の格子点５１０に近接して配置されるために、特徴ベクトル５６０と関連付けられたクエリ半径５４０が双方の平面５３５及び５１５を横切ることを示す。その結果、特徴ベクトル５６０は、領域５００又は平面５３５及び５１５の反対側に配置された不図示の隣接領域に配置されたクエリベクトルに類似する特徴ベクトルであると考えられる。これらの３つの領域のうちの１つに配置されたいずれかのクエリベクトルは、特徴ベクトル５６０のハッシュを返送すべきである。領域５００及び隣接領域に共通の唯一の格子点は、格子点５１０である。
【００７２】
図３に戻ると、ハッシュ法３００は、格子候補選択ステップ３４０から候補となる格子点を受信するハッシュコード選択ステップ３５０に進む。ハッシュコード選択ステップ３５０の目的は、特徴ベクトルに対するハッシュコードとして候補となる格子点から単一の格子コードを選択することである。好適な実施形態において、ハッシュコード選択ステップ３５０は、事前に各格子点と関連付けられているレコードの数を決定するために格子候補点の各格子点を検査する。次に、ハッシュコード選択ステップ３５０は、関連特徴ベクトルの数が最も少ない格子点に対して特徴ベクトルを量子化し、格子点と関連付けられたハッシュ値を使用する。あるいは、特徴ベクトルは候補となる格子点の１つに無作為に割り当てられてもよく、それにより、事前に各格子点と関連付けられている特徴ベクトルの数を決定する必要がなくなる。ハッシュコードを選択する更に別の方法は、選択される格子点がレコードの重心から最も遠く離れているために格子にわたり関連レコードの分布を拡散する傾向があるように、候補となる格子点から格子点を選択する方法である。
【００７３】
ハッシュ法３００は、ステップ３５０からハッシュ挿入ステップ３６０に進み、ステップ３６０において、選択されたハッシュコードは画像レコードに紐付けられる。これにより、決定された格子点と関連付けられた選択されたハッシュコードと特徴ベクトルにより示された画像の一部との間の紐付けを格納する。その後、この情報は、ハッシュ検索段階で使用するためにハッシュテーブルに記録される。ステップ３６０から終了ステップ３６５に進み、ハッシュ法３００は終了する。
格子候補選択
次に、図３の格子候補選択ステップ３４０で使用されるような格子候補選択方法６００を示す図６を参照して、図３の格子候補選択ステップ３４０を説明する。格子候補選択方法６００の目的は、特徴ベクトルを含む囲み領域のどの格子点が特徴ベクトルに対するハッシュコードとして適しているかを決定することである。方法は、開始ステップ６０５において開始し、候補となる格子点の集合を初期化して空にする初期化ステップ６１０に進む。方法６００の残りのステップは、全ての格子点が処理されるまで囲み領域の各格子点に渡ってループする。ループ制御ステップ６２０は、全ての格子点が処理されているかをテストする。全ての格子点が処理されている、すなわち「ｙｅｓ」の場合、終了ステップ終了６３０に進み、候補選択方法は中断し、候補となる格子点の集合が返送される。ステップ６２０で全ての格子点が処理されているわけではない、すなわち「ｎｏ」の場合、囲み領域から未処理の格子点を選択する選択ステップ６４０に進む。
【００７４】
平面決定ステップ６５０は、囲み領域から超平面を決定する。超平面は、選択された未処理の点を除く囲み領域の全ての格子点を通過する平面である。図４Ｂの例において、選択された点が格子点４３０である場合、超平面は平面４６０である。
【００７５】
図６に戻ると、平面決定ステップ６５０から距離計算ステップ６６０に進む。距離計算ステップ６６０は、特徴ベクトルから超平面までの垂直距離を計算する。超平面の格子点を通過する超平面の単位法線を決定することと、特徴ベクトルと超平面のいずれかの点とが異なる法線のドット積を計算することとにより、垂直距離が計算される。法線は、特異値分解等の方法を使用して計算される。この距離の計算は遅いが、時間は、ハッシュテーブルを更新する時間に影響を及ぼすだけで、システムのリコール速度を決定するハッシュテーブルをクエリする時間には影響を及ぼさない。垂直距離が決定されると、垂直距離をクエリ半径と比較する距離テストステップ６７０に進む。距離テストステップ６７０は、クエリ半径が特徴ベクトルから拡張し、超平面を通過して隣接領域に移るかを判定する。クエリ半径が超平面を介して隣接領域まで拡張する場合、選択された点は、隣接領域に共通ではないため、特徴ベクトルに対するハッシュコードとしては適さない。クエリ半径が超平面を介して隣接領域に拡張しない場合、クエリ半径が拡張する何れの隣接領域も、共通の点において選択された点を有する。垂直距離がクエリ距離以下である、すなわちＮｏであるとステップ６７０が判定すると、ループ制御ステップ６２０に戻り、処理すべき残りの格子点がまだ残っていないかを判定する。しかし、ステップ６７０で垂直距離がクエリ距離より長い、すなわちＹｅｓの場合、ハッシュコード追加ステップ６８０に進む。
【００７６】
ハッシュコード追加ステップ６８０は、選択された点に対するハッシュコードを決定し、そのハッシュコードを候補となる格子点の集合に追加する。上述したように、ハッシュコード及び格子点は、ハッシュコードを有することにより、格子点を決定できるように紐付けられる。ハッシュコード及び格子点が事実上同一であるため、ハッシュコードが格子点からの情報を使用することも可能である。ハッシュコード追加ステップ６８０は、点のハッシュコードを決定する既知の方法を使用する。最も標準的なソフトウェアライブラリは、ＪａｖａにおけるＡｒｒａｙｓ．ｈａｓｈＣｏｄｅ方法等の適切な関数を提供する。あるいは、格子点を整数でラベル付けする既知の方法のいずれかは、特徴ベクトルが格子点として量子化される点として使用されてもよい。例えば格子座標ベクトルで格子点を示すことにより、数値の配列を格子点に対するハッシュコードとして使用することも可能である。格子座標ベクトルは、格子に対する生成器から構成される基礎に関して格子点の座標を使用する格子点に対して構成される。この場合、ツリー構造又は格子座標ベクトルをレコードと関連付ける当該技術分野において知られている他の構造としてハッシュテーブルを示すことが可能である。
第１の別の格子候補選択
次に、図７のハッシュ決定方法７００を参照して、別の格子候補選択方法を説明する。ハッシュ決定方法７００は、囲み領域を形成する全ての格子点を処理することなくハッシュ値を選択できるという利点により、図３の格子候補選択ステップ３４０及びハッシュコード選択ステップ３５０の双方を置換する。方法は、既に格子点と関連付けられているレコードの数に基づく順序で囲み領域の全てのハッシュコードを処理することで作用する。第１の適切な点が特徴点のハッシュコードとして使用される結果、特徴点は、割り当てられた特徴ベクトルの数が最も少ない適切な格子点に割り当てられる。
【００７７】
ハッシュ決定方法７００は、開始ステップ７０５において開始し、クエリベクトルの周囲の囲み領域を規定する全ての点を受信する格子点受信ステップ７１０に進む。次に、数判定ステップ７２０は、既に各点と関連付けられているレコードの数を判定するように、囲み領域の一部を形成する各格子点を処理する。これは、図３のハッシュコード選択ステップ３５０で上述した同一の処理であるが、７２０の数判定ステップは、囲み領域の全ての格子点の数を判定する。格子数は、数が最も少ない未処理の格子点を選択する点選択ステップ７３０で使用される。格子点が選択されると、点は、特徴ベクトルを格子点にハッシュすることが許容されるかを確認される。点選択ステップ７３０は、適切な格子点が発見されるまで継続するループの始点である。
【００７８】
点線の輪郭で示されたオプションの最近接の点のテスト７３５は、選択された格子点が特徴ベクトルに最近接する格子点であるかを判定するために次に実行される。選択された点が最近接の点である、すなわちＹｅｓの場合、ハッシュ決定方法７００は、以下に説明するハッシュステップ７７０に飛び、そうではない場合には、処理は継続する。本発明の別の実施形態において、特徴ベクトルに最近接する格子点は、クエリ点から囲み領域における各点までの距離を計算することで決定される（図３のステップ３３０）で決定されたように）。オプションの最近接の点のテスト７３５が含まれない場合、又はステップ７３５で選択された点が特徴ベクトルに最近接する格子点ではない、すなわちＮｏの場合、ハッシュ決定方法７００は、図６の平面決定ステップ６５０及び距離計算ステップ６６０と同一である２つのステップに継続する。最初に、平面決定ステップ７４０は、選択された格子点を除く囲み領域の全ての格子点に基づいて平面を形成する。次に、距離計算ステップ７５０は、平面から入力特徴ベクトルまでの垂直距離を計算する。その後、計算された距離をクエリ半径と比較する距離ステップ７６０に進む。クエリ半径が特徴ベクトルから平面までの計算された距離より長い、すなわちＹｅｓの場合、選択された点は特徴ベクトルをハッシュするのに適さない。この場合、ハッシュ決定方法７００は、未処理の点が選択される点選択ステップ７３０に戻る。クエリ半径が計算された距離以下である、すなわちＮｏの場合、クエリ半径は平面にまでも及ばず、選択された点は特徴ベクトルをハッシュするのに適する。このような状況は、格子のパラメータが正しく選択されている時にいずれかの囲み領域の少なくとも１つの格子点に対して生じるはずである。格子に対する正確なパラメータを選択することに関するより多くの情報を以下に説明する。この場合、ステップ７６０からステップ７７０に進む。
【００７９】
ハッシュ決定方法７００は、ハッシュコード選択ステップ３５０と同様に実行されるハッシュステップ７７０に進む。ハッシュステップ７７０は、選択された格子点を入力とし、入力特徴ベクトルに対するハッシュ値を出力として生成する。ステップ７７０から終了ステップ７８０に進み、方法７００は終了する。
【００８０】
第２の別の格子候補選択
図６の格子候補選択方法６００は、図８の選択方法８００として代わりに実現されてもよい。選択方法８００は、格子候補選択方法６００と同一の入力及び出力を有し、開始ステップ８０５において開始して、最小の囲み領域を規定する全ての格子点を受信する格子候補受信ステップ８１０に進む。その後、全ての格子点は、リスト形成ステップ８２０で格子点候補リストをポピュレートするために使用される。候補リストは、コンピュータ１３００のメモリ１３０６又は記憶装置１０３９に格納される。
【００８１】
選択方法８００は、囲み領域の全ての面がテストされるループ段階を開始する。ループ段階は、囲み領域の全ての面が処理されているかを判定する面処理テスト８３０において開始する。全ての面が処理されている、すなわちＹｅｓの場合、選択方法８００は、終了ステップ８８０に進んで終了する。しかし、ステップ８３０で全ての面が処理されていない、すなわちＮｏの場合、未処理の面のうちの１つを選択する面選択ステップ８４０に進む。次に、距離計算ステップ８５０は、選択された面から特徴ベクトルまでの垂直距離を計算する。これは、図６の距離計算ステップ６６０のために使用された同一の処理である。計算された距離は、距離テスト８６０でクエリ半径と比較される。距離がクエリ半径以上、すなわちＮｏの場合、選択方法８００は、面処理ステップ８３０に戻り、処理すべき囲み領域の面がこれ以上あるかを確認する。ステップ８６０で距離がクエリ半径より短い、すなわちＹｅｓの場合、改良リストステップ８７０に進み、格子点候補リストを改良する。候補リストは、既存の候補リストと平面を規定する囲み領域の一部であるあらゆる格子点との交点を決定することで改良される。候補リストが囲み領域の全ての格子点である場合、面を形成する格子点との交点は、面の全ての格子点となる。面及び候補リストの双方に共通の点だけが交点により返送される。交点関数の動作により、候補リスト上の点の数が減少する。選択方法８００が完了すると、候補リストは、上述したように、更なる処理のためにハッシュ法３００において使用される。候補リストは、少なくとも１つの格子点及びせいぜい最小の囲み領域を規定する格子点を含む。
ハッシュテーブルのクエリ
次に、図９を参照して、ハッシュテーブルのクエリ方法９００を説明する。ハッシュテーブルのクエリ方法９００は、クエリ画像を受信し、ハッシュテーブルに格納されたレコードを探索することであらゆる類似画像を探索する。画像の類似性は、クエリ半径のサイズにより判定され、クエリ半径が長くなるにつれ、類似すると考えられる画像の数は増加する。ハッシュテーブルのクエリ方法９００は、同一の特徴空間及びハッシュ法３００のために使用された格子を使用する。好適な一実施形態において、使用された格子はＡ＊格子である。
【００８２】
ハッシュテーブルのクエリ方法９００は、開始ステップ９０５において開始し、クエリ画像を受信する画像受信ステップ９１０に進む。クエリ画像からクエリベクトルを計算するクエリベクトル計算ステップ９２０に進む。一実現例において、クエリベクトル計算ステップ９２０は、ハッシュ法３００とハッシュテーブルのクエリ方法９００との間に一貫した結果を提供するために特徴ベクトル計算ステップ３２０で使用された同一の処理を使用する。いくつかの適応例において、ステップ９２０で使用されたクエリベクトル計算処理は、特徴ベクトル計算ステップ３２０で使用された処理と異なってもよい。例えば、可能なクエリ画像の集合に何らかの既知の偏り又は規則性がある場合、クエリベクトル計算ステップはそれを利用するように変更される。一例として、全てのクエリ画像が低品質のウェブカメラから得られるのに対し、データベース画像が高品質のデジタル写真である場合、ベクトル計算ステップは異なる。次に、クエリベクトルは、クエリベクトルを取り囲む領域を決定する格子領域選択ステップ９３０に渡される。一実現例において、格子領域選択ステップ９３０は、ハッシュ法３００の格子領域選択ステップ３３０に関連して上述したのと同一の処理を使用する。
【００８３】
次に、囲み領域１０００内に配置されたクエリベクトル２４０を示す図１０を参照して、格子領域選択ステップ９３０の動作を説明する。囲み領域１０００は、３つの格子点１０１０、１０２０及び１０３０により規定されたドローネ領域である。図１０の図は、例示にすぎず、２次元の例を示す。一般に、本発明の実施形態は、ｎ次元ベクトルに適用可能であり、その場合、格子選択ステップ７３０は、クエリベクトルを含むドローネ領域を規定するｎ＋１個のＡ＊格子点を提供する。
【００８４】
図９に戻ると、囲み領域を規定する選択された格子点は、ステップ９３０からレコード検索ステップ９４０に進む。レコード検索ステップ９４０は、クエリハッシュコードのリストを生成するように各格子点を処理し、囲み領域の各格子点に対するクエリハッシュコードがある。クエリハッシュコードは、候補選択方法６００のハッシュコード追加ステップ６８０でハッシュコードを生成するために適用された同一の方法を使用して生成される。その後、クエリハッシュコードは、ハッシュテーブルからハッシュコードと関連付けられた画像レコードを検索するために使用される。その結果、囲み領域の格子点は、ハッシュ法３００において格子点と関連付けられている画像レコードを検索するために使用される。検索された画像レコードの集合は、単にクエリベクトルの周囲のクエリ半径内に配置された特徴と関連付けられたものより大きい。これは、特徴ベクトルがクエリベクトルからクエリ半径より離れた場合でも、含まれた格子点と関連付けられるようになった特徴ベクトルと関連付けられたいくつかのレコードが存在するためである。しかし、検索された画像の集合は、クエリ半径内に配置された全ての画像及び追加画像を含む。追加画像は、後続の処理段階を使用して除外されるか、あるいは検索された画像の集合は、類似画像の集合として適切に使用するのに十分に小さい。これらの類似画像は、類似性の検査のためにユーザに提示される。ユーザは、検索された画像の各々を検討して、画像を類似画像として受容又は拒絶する。
格子のサイジング
上述したように、本発明の一実施形態は、特徴ベクトルに対するハッシュコードを提供するためにＡ＊格子の点を使用する。Ａ＊格子がどのように構成されるかは、画像検索システムの正確な動作にとって重要である。特徴ベクトル１１８０がドローネ領域１１００の中心に配置される図５Ａに類似した状況を示す図１１の２次元特徴空間を考える。特徴ベクトル１１８０から拡張するクエリ半径１１７０が使用されている。格子点間隔に対するクエリ半径１１７０のサイズのため、クエリ半径１１７０は、囲み領域１１００の全ての３つの平面１１１５、１１２５及び１１３５を越えて隣接ドローネ領域１１４０、１１５０及び１１６０に拡張する。このような状況において、隣接領域１１４０、１１５０及び１１６０のいずれかに配置されたクエリベクトルは、特徴ベクトル１１８０と関連付けられた画像を類似画像として返送すべきである。しかし、４つ全ての領域１１００、１１４０、１１５０及び１１６０に共通の格子点を発見することは不可能である。その結果、検索システムは正確に動作できない。このことから、格子のサイジングとクエリ半径との間に関連があることは明らかである。一実施形態において、クエリ半径に等しい半径を有する球がドローネセルの内部に適合するならば、格子は可能な限り密である。これは、ドローネセルの内半径がクエリ半径ｒに等しいように格子をサイジングすることに相当する。格子点の間の最短距離の半分は、パッキング半径１１９０として知られている。それは、格子点を中心位置とするオーバラップしていない球体の最大半径に対応する。格子の尺度は、パッキング半径に関して規定される。パッキング半径ｒｈｏ及び次元数ｎを有するＡ＊格子の場合、格子は、ｒ＊ｓｑｒｔ（（ｎ＋１）＊（ｎ／２））／ｒｈｏによる乗算を使用してサイズ変更される。同等に、内半径をｒに等しくするために、パッキング半径はｒ＊ｓｑｒｔ（（ｎ＋１）＊（ｎ／２））に設定されるべきである。
【００８５】
本発明の一実施形態はＡ＊格子を使用するが、他の種類の格子が同等に使用されてもよい。しかし、Ｚ、Ａ、Ｄ及びＤ＊等の他の格子系の場合、高い精度を保証するため、ドローネセルが大きいために多くの偽陽性一致が返送されることとなり、クエリ時間が長くなる。Ｚ格子等のいくつかの格子系の場合、ドローネセルが多数の格子点から構成されるために多数のクエリハッシュコードが作成され、クエリ時間が長くなる。リーチ格子等のいくつかの格子は、この問題を回避するが、所定の特徴ベクトルに対する囲みドローネ領域を決定するために時間のかかる方法を必要とするため、同様にクエリ時間が長くなる。
利点
Ａ＊格子を有する２次元特徴空間を示す図１２Ａ及び図１２Ｂにおいて、検索システムの利点が示される。図１２Ａにおいて、８個のレコードが格子点と関連付けられており、そのうちの２つのレコードが各格子点１２２０、１２３０、１２５０及び１２６０と関連付けられる。図１２Ｂは、当該特徴点に依存してハッシュ法３００を使用して生じる別のハッシュ結果を示す。このような状況において、レコードのいくつかは、図１２Ａにおいて使用されなかった格子点と関連付けられている。例えば格子点１２２０は、図１２Ａにおいて２つのレコードを有するが、図１２Ｂでは１つのレコードしか有さない。格子点１２２０と関連付けられた第２のレコードは、代わりに点１２１０と関連付けられる。これは、２つの格子点１２１０と１２２０との間に形成された平面から特徴ベクトルまでの距離がクエリ半径より短かった場合に行われる。図１２Ｂにおいて使用された各格子点は、図１２Ａにおける２つのレコードの平均と比較して１．３個のレコードを平均する。検索システムの利点は、全ての関連画像レコードが配置されることを保証しつつ所定のクエリベクトルに対してより少ない画像レコードが返送される時に現れる。レコードとハッシュコードとの間に１つの関連付けしか格納されないため、格子の使用は、ＬＳＨ等の多数の登録戦略よりもメモリ効率が良い。
別の実施形態
画像用の検索システムが上述されたが、他の種類のデータを検索するためにそのシステムを使用することも可能である。例えば特徴ベクトルは、テキスト又はテキストの一部に対して生成される。テキストに対して特徴ベクトルを生成する１つの方法は、テキストのいわゆるＢａｇ−Ｏｆ−Ｗｏｒｄｓ表現を使用することである。特徴ベクトルは、各単語又は単語列を単語又は列又は単語の頻度に設定された座標値を有する次元とみなすことにより、Ｂａｇ−Ｏｆ−Ｗｏｒｄｓから生成される。その場合、これは主成分分析（ＰＣＡ）等の次元縮小を受ける恐れがあり、テキストに対して特徴ベクトルを生成する。検索システムは、サンプルテキストを含むクエリを使用することにより、テキストと関連付けられたレコードに迅速にアクセスするために使用される。別の適応例において、特徴ベクトルはペーパーフィンガープリントであってもよい。ペーパーフィンガープリントは、繊維構造から紙を識別するために使用される数値の配列である。検索システムは、ペーパーフィンガープリントを含むクエリを使用することにより、個々の紙と関連付けられたレコードに迅速にアクセスするために使用される。
【００８６】
ハッシュ法の別の一実施形態は別の囲み領域を使用する。１つの代替例は、頂点が格子点ではなく穴である囲み領域を規定するためにボロノイセルを使用する。別の実施形態において、格子領域選択方法３３０は、特徴ベクトルの周囲のボロノイ領域を規定する「穴」を決定する。これらの穴は格子点の代わりに使用され、図８に示された候補選択方法は、ボロノイセルの面からの特徴ベクトルの距離に従って候補となる穴を選択するために適用される。ステップ３５０は、候補選択ステップにより選択された穴に対応するハッシュコードを選択する。図９のクエリ処理は変化はなく、クエリベクトルを含む領域は同一の方法を使用して決定され、囲み領域の各点に対するハッシュコードと関連付けられたレコードが検索される。図４Ａの格子を検査することにより、ドローネセルの場合の３個の点と比較して、２次元のボロノイセルが不図示の６個の格子点から形成されることを示す。尚、この別の本実施形態は主な実施形態と機能的に同等である。しかし、囲み領域の特性は各式において異なる。
【００８７】
検索システムの別の一実施形態は、ハッシュコード選択ステップ３５０及びハッシュ挿入ステップ３６０の間に再ハッシュ技術を使用する。別の本実施形態において、ハッシュコードは、別のハッシュコードのリストが維持されている間に特徴ベクトルに対して選択される。レコードがハッシュテーブルに挿入される際、別のハッシュコードもレコードに紐付けられる。別のハッシュコードをハッシュテーブルに含むことにより、レコードを再配分できる。１つのハッシュコードがコードと関連付けられた多数のレコードを有することが分かる場合、ハッシュコードと関連付けられたレコードのいくつかは、別のハッシュコードに再配分される。再ハッシュ技術により、後続のハッシュテーブルの処理中に多数の関連レコードを有するハッシュコードを変更できる。更なる代替例が別のハッシュコードを格納することを省略する代わりに、再配分処理は、レコードに対する別のハッシュコードを決定するためにハッシュ法３００を再度適用する。
産業上の利用可能性
説明した構成は、コンピュータ産業及びデータ処理産業、並びに特に画像処理産業に対して適用可能である。
【００８８】
上記の記述は本発明のいくつかの実施形態のみを説明し、本発明の範囲及び趣旨から逸脱せずに、いくつかの実施形態に対して変形及び／又は変更を行なうことができる。実施形態は、限定するものではなく例示するものである。
【００８９】
本明細書に関して、「備える」という用語は、「主に含むが、単独で必要ではない」、あるいは「有する」又は「含む」ことを意味し、「のみから構成される」ことを意味しない。「備える」の語形変化は、それに対応して意味の変化を示す。
【図１】
0005976115.tif 000002
【図２】
0005976115.tif 000003
【図３】
0005976115.tif 000004
【図４Ａ】
0005976115.tif 000005
【図４Ｂ】
0005976115.tif 000006
【図５Ａ】
0005976115.tif 000007
【図５Ｂ】
0005976115.tif 000008
【図６】
0005976115.tif 000009
【図７】
0005976115.tif 000010
【図８】
0005976115.tif 000011
【図９】
0005976115.tif 000012
【図１０】
0005976115.tif 000013
【図１１】
0005976115.tif 000014
【図１２Ａ】
0005976115.tif 000015
【図１２Ｂ】
0005976115.tif 000016
【図１３Ａ】
0005976115.tif 000017
【図１３Ｂ】
0005976115.tif 000018
【図１４Ａ】
0005976115.tif 000019
【図１４Ｂ】
0005976115.tif 000020
【図１４Ｃ】
0005976115.tif 000021