(57)【特許請求の範囲】
【請求項１】
コンピュータが、サンプル画像の特徴を現す高次元特徴ベクトルによる高次元ベクトル空間において該サンプル画像を索引付けする索引方法であって、該コンピュータが、
前記高次元特徴ベクトルを表現する複数の属性からランダムに選択された所定数の属性を用いて、複数のサンプル画像の該ランダムに選択された属性の属性値に基づいて該所定数を次元とするツリーを生成するツリー生成手順を実行することを特徴とする索引方法。
【請求項２】
前記ツリー生成手順は、
前記所定数の属性のうち前記複数のサンプル画像を均等に分岐させる中間値を有する属性を決定する属性決定手順と、
前記決定した属性で前記複数のサンプル画像を分岐させた２ノードを追加するノード追加手順とを特徴とする請求項１記載の索引方法。
【請求項３】
前記ノード追加手順は、前記属性毎に前記複数のサンプル画像の属性値を所定順にソートし、該所定順を各サンプル画像のサンプル画像ＩＤで示したソート済み索引順を用いて、前記決定した属性で前記複数のサンプル画像を分岐させることを特徴とする請求項２記載の索引方法。
【請求項４】
前記ツリー生成手順は、前記ツリーのノード毎にランダムに選択された所定数の属性を適用することを特徴とする請求項1乃至３のいずれか一項記載の索引方法。
【請求項５】
コンピュータが、請求項１乃至４のいずれか一項記載の索引方法で生成されたツリーを参照して、複数のサンプル画像から質問画像に類似の近傍画像を検索する検索方法であって、該コンピュータが、
前記質問画像の高次元特徴ベクトルの前記ランダムに選択された属性の属性値に基づいて、前記ツリーを探索することによって、該質問画像の近傍画像を特定する近傍画像特定手順と、
前記近傍画像の親ノードから分岐したサンプル画像との距離を算出する距離算出手順と、
前記近傍画像を特定するサンプル画像ＩＤと前記距離とを探索結果として出力する探索結果出力手順と
を実行することを特徴とする検索方法。
【請求項６】
前記近傍画像特定手順は、前記質問画像に対して複数の近傍画像を特定し、
前記距離算出手順は、
前記ランダムに選択された属性毎に前記複数の近傍画像の属性値の第一平均値を算出する第一平均値算出手順と、
前記ランダムに選択された属性毎に前記質問画像の属性値の第二平均値を算出する第二平均値算出手順と、
前記第一平均値と前記第二平均値とを用いて前記距離を算出することを特徴とする請求項５記載の検索方法。
【請求項７】
コンピュータに、サンプル画像の特徴を現す高次元特徴ベクトルによる高次元ベクトル空間において該サンプル画像を索引付けさせるプログラムを記憶したコンピュータ読取可能な記憶媒体であって、該コンピュータに、
前記高次元特徴ベクトルを表現する複数の属性からランダムに選択された所定数の属性を用いて、複数のサンプル画像の該ランダムに選択された属性の属性値に基づいて該所定数を次元とするツリーを生成するツリー生成手順を実行させることを特徴とするコンピュータ読取可能な記憶媒体。
【請求項８】
請求項７記載のコンピュータ読取可能な記憶媒体によって前記コンピュータに生成させたツリーを参照させて、複数のサンプル画像から質問画像に類似の近傍画像を検索せるプログラムを記憶したコンピュータ読取可能な記憶媒体であって、該コンピュータに、
前記質問画像の高次元特徴ベクトルの前記ランダムに選択された属性の属性値に基づいて、前記ツリーを探索することによって、該質問画像の近傍画像を特定する近傍画像特定手順と、
前記近傍画像の親ノードから分岐したサンプル画像との距離を算出する距離算出手順と、
前記近傍画像を特定するサンプル画像ＩＤと前記距離とを探索結果として出力する探索結果出力手順と
を実行させることを特徴とするコンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の特徴ベクトルデータに基づく索引付けにより画像検索を行う技術に関し、特に、高次元を有するベクトル空間において索引付けを効果的に行う技術に関する。
【背景技術】
【０００２】
近年、画像処理技術の発達に伴って、同一又は類似の画像を検索することが行われるようになってきた。画像に含まれる多くの特徴が含まれ、索引付けをする際には高次元の特徴ベクトルデータを扱った最近傍探索（ＮＮＳ：Nearest neighbor search）技術を用いて、質問画像に最も近い画像を検索することが行われている。例えば、ＱＢＩＣ（Query By Image Content）システムでは、ユーザはデジタル画像を選択し、その選択されたデジタル画像を質問画像とする問合せ（クエリー）に対してデータベースから１以上の類似する画像を検索することが知られている。
【０００３】
このシステムでは、Ｋ個の最も類似する画像が問合せに対する結果として返される。"Ｋ"は、ユーザ又は検索エンジン設計者によって設定される整数のちである。Ｋ個の画像は、質問画像に近いｋ個の近隣画像として参照され、問合せの質問画像の特徴を表す複数次元のデータポイント"ｑ"に近い複数次元のデータポイント"ｐ"が、索引及び検索する際に用いられている。
【０００４】
典型的なマルチメディアデータを表現する高次元（例えば、数１０００次元）にもなる特徴ベクトルは、効果的な索引手法を設計する際に大きな問題となっている、それにより、種々の索引構造が提案されてきた。
【０００５】
広く適応されている索引手法の一つとして、非特許文献１で提案されているＡＮＮ（Approximate Nearest Neighbor）及びＬＳＨ（Locality Sensitive Hashing）がある。この技術は、ハッシュを用いて索引付けを行うものである。また、他索引手法として、ｋｄツリーを用いた手法が非特許文献２で提案されている。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１で提案されている手法では、ｋｄツリー（k-dimensional tree）において最も強く集中するポイントに適用されるビンサイズが固定のため、ハッシュテーブルが非効率的となっている。また、ハッシングを用いた探索では、問合せのポイント地点となるビン内の多数のポイントを用いるため、線形探索の処理時間が長くなる。また、最良の近接点を決定する前に、近隣のビンに範囲を広げて探索することが要求され、更には、適切なビンサイズを選択することが難しいと言った問題がある。
【０００７】
また、非特許文献２で提案されている手法では、高次元空間における最近傍の検索が非効率的である。通常のルールでは、次元をＤとすると、データ内のポイント数Ｎは２Ｄより大きく（Ｎ＞＞２Ｄ）なければならない。ｋｄツリーが高次元データで使用された場合、ツリー内のほとんどのポイントを評価するため、探索負荷が大きく効率的に行うことができない。高次元ベクトル空間のため、データセットを左右のサブセットに分ける超平面を分割する計算処理が適切に行われないと言った問題がある。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、本発明は、コンピュータが、サンプル画像の特徴を現す高次元特徴ベクトルによる高次元ベクトル空間において該サンプル画像を索引付けする索引方法であって、該コンピュータが、前記高次元特徴ベクトルを表現する複数の属性からランダムに選択された所定数の属性を用いて、複数のサンプル画像の該ランダムに選択された属性の属性値に基づいて該所定数を次元とするツリーを生成するツリー生成手順を実行する索引方法のように構成される。
【０００９】
上記課題を解決するための手段として、本発明は、上記索引方法での手順をコンピュータ実行させるプログラムを記憶したコンピュータ読取可能な記憶媒体とすることもできる。
【発明の効果】
【００１０】
本発明によれば、ランダムに選択された所定数の属性によって次元数を小さくすることができ、効率的にツリーを作成することができる。
【図面の簡単な説明】
【００１１】
【図１】画像索引付け検索システムの構成例を示す図である。
【図２】情報処理装置のハードウェア構成を示す図である。
【図３】データベースのデータ構成例を示す図である。
【図４】索引構築マスターでの索引構築処理を説明するためのフローチャート図である。
【図５】ＲＫＤツリーのデータ構造例を示す図である。
【図６】スレーブ装置のツリー生成部による処理を説明するためのフローチャート図である。
【図７】ＲＫＤツリーテーブルのデータ例を示す図である。
【図８】図７のＲＫＤツリーテーブルに基づくＲＫＤツリー構造例を示す図である。
【図９】ＲＫＤツリーテーブルの他のデータ例を示す図である。
【図１０】図９のＲＫＤツリーテーブルに基づくＲＫＤツリー構造例を示す図である。
【図１１】リーフノード間の距離の算出方法を説明するための図である。
【図１２】ＤＢ検索部による検索処理を説明するための図である。
【図１３】索引構築マスターによる探索指示処理を説明するための図である。
【図１４】各スレーブ装置の探索部による探索処理を説明するための図である。
【図１５】探索処理例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。質問画像に対して同一又は類似画像の効果的な検索を実現するために、蓄積された画像の特徴ベクトルに基づいて索引付けを行う本発明の実施形態に係る画像索引付け検索システムは、図１に示すようなシステム構成を有する。図１は、画像索引付け検索システムの構成例を示す図である。
【００１３】
図１に示すシステム１０００は、情報処理装置１００と、１以上のスレーブ装置２００と、ユーザ端末３０とを有する。情報処理装置１００は、ＬＡＮ（Local Area Network）等のローカルネットワーク４を介してスレーブ装置２００と接続され、インターネット５を介して１以上のユーザ端末３０と接続される。
【００１４】
情報処理装置１００は、コンピュータ装置であり、ＤＢマネージャー５０と、索引構築マスター５１と、ＤＢ検索部５２とを有し、記憶領域にデータベース４０を有する。情報処理装置１００がプログラムを実行することによって、ＤＢマネージャー５０と、索引構築マスター５１と、ＤＢ検索部５２として機能する。
【００１５】
データベース４０は、サンプル画像を識別するためのＩＤと、ＵＲＩ（Uniform Resource Identifier）などの格納場所を特定するための格納場所情報と、サンプル画像の高次元特徴ベクトル等のデータ構造によってサンプル画像毎の特徴情報を蓄積し管理する。
【００１６】
ＤＢマネージャー５０は、索引構築マスター５１又はＤＢ検索部５２からのアクセスに応じて、サンプル画像の特徴情報を検索する処理部である。
【００１７】
索引構築マスター５１は、複数の属性によって表現される高次元特徴ベクトルからランダムに所定数の属性を選択して次元数を少なくし、各スレーブ装置２００にランダムに選択した属性に基づくｋｄツリー（以下、ＲＫＤツリーと言う）を構築させる。スレーブ装置２００毎に異なる属性の組み合わせとなる。ランダムに選択する方法は、既存のアルゴリズムを適用すればよい。
【００１８】
また、索引構築マスター５１は、ＤＢ検索部５２からの要求に応じて、各スレーブ装置２００に質問画像３ｑと一致又は類似するサンプル画像を探索させ、各スレーブ装置２００からの探索結果をＤＢ検索部５２に返す。
【００１９】
ＤＢ検索部５２は、インターネット５を介してユーザ端末３０からの質問画像３ｑの検索要求を受信すると、索引構築マスター５１に転送することによって、索引構築マスター５１からＲＫＤツリーを用いて探索した探索結果を取得し、探索結果に基づいてランキング付けした後、そのランキング結果を含めた探索結果をインターネット５を介してユーザ端末３０へ提供する。
【００２０】
各スレーブ装置２００は、コンピュータ装置であり、ツリー生成部２１と、探索部２３とを有し、自装置の記憶領域にツリー生成部２１によって生成されたＲＫＤツリー２を有する。各スレーブ装置２００がプログラムを実行することによって、ツリー生成部２１と、探索部２３として機能する。
【００２１】
ツリー生成部２１は、ローカルネットワーク４を介して索引構築マスター５１からツリー生成指示を受信すると、索引構築マスター５１がランダムに選択した属性に従ってＲＫＤツリー（random k-dimensional tree）２を生成し自装置の記憶領域に格納し保持する。索引構築マスター５１がランダムに選択した属性は、スレーブ装置２００毎に異なるため、夫々異なるＲＫＤツリー２を生成する。
【００２２】
探索部２３は、ローカルネットワーク４を介して索引構築マスター５１から質問画像３ｑに基づく探索指示を受信すると、記憶領域に格納されたＲＫＤツリー２を用いて、質問画像３ｑに一致又は類似するサンプル画像を探索し、その探索結果をローカルネットワーク４を介して索引構築マスター５１へ送信する。
【００２３】
ユーザ端末３０は、ＰＣ（Personal Computer）であり、インターネット５対応のブラウザを有し、ブラウザから質問画像３ｑによって情報処理装置１００へ検索要求を行い、情報処理装置１００から受信した検索結果３ｒをブラウザに表示させる。
【００２４】
上述したように、高次元特徴ベクトルからランダムに選択した属性によって特徴ベクトルの次元数を制限して、各スレーブ装置２００にてＲＫＤツリー２を生成するため、高速に効率よくツリー生成処理が行える。また、情報処理装置１００側の処理負荷を軽減できる。
【００２５】
一方で、画像検索する際には、各スレーブ装置２００で異なるＲＫＤツリー２を用いて質問画像に対するサンプル画像を探索させることにより、種々の特徴に関して候補となるサンプル画像を取得でき、更にランク付けすることによって、効率的に画像検索を行うことができる。
【００２６】
図２は、情報処理装置のハードウェア構成を示す図である。図２において、情報処理装置１００は、コンピュータによって制御される装置であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、通信ユニット１６と、記憶装置１７と、ドライバ１８とを有し 、システムバスＢに接続される。
【００２７】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従って情報処理装置１００を制御する。メモリユニット１２には、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００２８】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、ユーザからの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザが情報処理装置１００が処理を行なうための必要な各種情報を入力するために用いられる。通信ユニット１６は、例えばローカルネットワーク４、インターネット５等に接続し、外部装置との間の通信制御をするための装置である。
【００２９】
記憶装置１７には、例えば、ハードディスクユニットが用いられ、各種処理を実行するプログラム等のデータを格納する。データベース４０が記憶装置１７に格納される。
【００３０】
情報処理装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって情報処理装置１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。
【００３１】
尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００３２】
各スレーブ装置２００のハードウェア構成は、図２に示すハードウェア構成と同様であるため、その説明を省略する。各スレーブ装置２００の記憶装置１７には、ＲＫＤツリー２が格納される。
【００３３】
図３は、データベースのデータ構成例を示す図である。図３に示すデータベース４０は、サンプル画像ＩＤと、ＵＲＩと、高次元特徴ベクトルとを有する。
【００３４】
サンプル画像ＩＤは、各サンプル画像を特定する１からｎのユニークな番号を示す。ＵＲＩは、サンプル画像の格納先を特定する。
【００３５】
高次元特徴ベクトルは、サンプル画像の属性Ｂ、Ｃ、・・・Ｑ毎の特徴量を示している。例えば、全サンプル画像に対して各属性Ｂ〜Ｑの値をヒストグラムで表して正規化した値（以下、分散値として参照される）が設定されている。ここでは、１６次元の特徴ベクトルの例として属性Ｂ、Ｃ、・・・Ｑを例示しているが、この例によって次元数を制限するものではない。更に高次元であっても良い。
【００３６】
本発明では、データベース４０で管理されるサンプル画像を属性毎に分散値の昇順にソートし、その昇順をサンプル画像ＩＤで示したソート済み索引順テーブルＴ４２を作成しておく。
【００３７】
図４は、索引構築マスターでの索引構築処理を説明するためのフローチャート図である。図４において、索引構築マスター５１は、データベース４０の高次元特徴ベクトルの属性Ｂ〜Ｑから所定次元数分の属性をランダムに選択して特徴ベクトルセットを作成する（ステップＳ１１）。索引構築マスター５１は、スレーブ装置２００の台数分の所定次元数の特徴ベクトルセットを作成する。
【００３８】
所定次元数"Ｋ"は、ユーザによって与えられるか、又は、索引構築マスター５１が、データベース４０で管理されている高次元特徴ベクトルの次元数"Ｄ"から"Ｄ"の平方根を計算することによって自動的に算出してもよい。例えば、高次元特徴ベクトルの次元数"Ｄ"が「１６」の場合、"１６"の平方根から「４」を得ることにより、「４」つの属性をランダムに選択して特徴ベクトルセットとする。
【００３９】
このステップＳ１１での処理をスレーブ装置２００の台数分行うことによって、各スレーブ装置２００に異なる特徴ベクトルセットでＲＫＤツリー２を作成させることができる。
【００４０】
続けて、索引構築マスター５１は、ステップＳ１１で作成した特徴ベクトルセットを指定したツリー生成指示を各スレーブ装置２００に送信する（ステップＳ１２）。ツリー生成指示には、特徴ベクトルセットに加えて、図５に示すツリーノード構造体が含まれ、各スレーブ装置２００は、与えられたツリーノード構造体を用いて、ＲＫＤツリー２を生成し管理する。
【００４１】
図５は、ＲＫＤツリーのデータ構造例を示す図である。図５（Ａ）に示すツリーノード構造体５ａは、ＲＫＤツリー２の各ノードを管理するための構造体であり、ノードＩＤ、属性、開始、サイズ、左分岐ノード、右分岐ノード、分岐属性、分岐分散値、深さ、ノードタイプ、距離等の項目を有する。
【００４２】
ノードＩＤは、自ノードを識別するノード識別子である。属性は、自ノードに適用される属性を示し、特徴ベクトルセットに含まれる索引構築マスター５１がランダムに選択した属性である。
【００４３】
開始は、ノード内で昇順で属性値をソートした場合の開始のノードを示す。サイズは、ノードのサイズを示す。
【００４４】
左分岐ノードは、自ノードから左に分岐したノードを示す。自ノードがリーフ（末端）の場合は、１以上のサンプル画像ＩＤが示される。右分岐ノードは、自ノードから右に分岐したノードを示す。自ノードがリーフの場合は、１以上のサンプル画像ＩＤが示される。
【００４５】
分岐属性は、分岐に適用された索引構築マスター５１によってランダムに選択された属性を示す。分岐分散値は、サンプル画像の分岐属性における中間値を示す。
【００４６】
深さは、ルートを０階層としたときの自ノードの階層を示す。ノードタイプは、自ノードがルート、ブランチ、又はリーフを示す。距離は、自ノードからの分岐がリーフとなる場合にリーフ間の距離が設定される。
【００４７】
図５（Ｂ）に示すオブジェクト構造５ｂは、スレーブ装置２００のツリー生成部２１での処理を示すオブジェクト構造である。ツリー生成指示に含まれる特徴ベクトルセットから属性数を特定してＲＫＤツリー２で対象となる特徴ベクトルの次元数を設定している。また、サンプル画像ＩＤで特定されるサンプル画像をインスタンスとし、分岐属性毎の分散値からＲＤＫツリー２を生成し管理する処理について示している。
【００４８】
以下、各スレーブ装置２００で実行されるツリー生成部２１での処理について説明する。ここでは、データベース４０は２０のサンプル画像に対して１６次元の特徴ベクトルで管理し、索引構築マスター５１がスレーブ装置２００毎にランダムに選択した４つの属性によって、各スレーブ装置２００が４次元の特徴ベクトルでＲＫＤツリー２を生成するものとして説明する。
【００４９】
図６は、スレーブ装置のツリー生成部による処理を説明するためのフローチャート図である。図７は、ＲＫＤツリーテーブルのデータ例を示す図である。図８は、図７のＲＫＤツリーテーブルに基づくＲＫＤツリー構造例を示す図である。
図６において、ツリー生成部２１は、索引構築マスター５１から受信したツリー生成指示に含まれる特徴ベクトルセットで指定されるランダムに選択された属性毎にデータベース４０をアクセスすることによって、サンプル画像の分散値を取得する（ステップＳ２１１）。ツリー生成部２１は、属性毎にサンプル画像ＩＤに対応付けた分散値を示すデータを取得する。
【００５０】
そして、ツリー生成部２１は、属性毎の分散値から中間値を算出し（ステップＳ２１２）、ステップＳ２１１で取得したデータと算出した中間値とに基づいて、図７に示すようなＲＫＤツリーテーブルＴ２５−１にルートノードのレコードを追加する（ステップＳ２１３）。この時点では、例えば、ノードＩＤ「０」に対応させて、ノードタイプに「ルート」、ランダム選択属性に「Ｂ、Ｄ、Ｇ、Ｌ」、サンプル画像ＩＤに「ＮＵＬＬ」、サンプル画像数に「２０」が設定される。
【００５１】
以下に説明するステップＳ２１４からＳ２１６は、同一の深さのノード全てに対して、ノード毎に行われる処理である。ツリー生成部２１は、処理対象ノードの属性毎にソート済み索引順テーブルＴ４２を参照して、属性の中間値に基づいて、サンプル画像ＩＤを左右に分岐させる仮分岐処理を行う（ステップＳ２１４）。この仮分岐処理の結果に基づいて、ツリー生成部２１は、分岐された左右のサンプル画像数の差が最も小さくなる属性を決定する（ステップＳ２１５）。処理対象ノードのレコードの分岐属性ＩＤに決定した属性の属性ＩＤを設定し、中間値に値を設定する。ノードＩＤ「０」が処理対象ノードの場合、処理対象ノードのレコードの分岐属性ＩＤに「Ｇ」、中間値に「０．４７３７４５」が設定される。
【００５２】
そして、ツリー生成部２１は、決定した属性の中間値でサンプル画像ＩＤを分岐させ、各左右ノードレコードをＲＫＤツリーテーブルＴ２５−１に追加する本分岐処理を行う（ステップＳ２１６）。ノードＩＤ「０」が処理対象ノードの場合、左ノードＩＤに「１」、右ノードＩＤに「２」、サンプル画像ＩＤに「ＮＵＬＬ」が設定され、ノードＩＤ「１」及び右ノードＩＤ「２」の夫々のレコードが追加される。
【００５３】
ソート済み索引順テーブルＴ４２を参照して本分岐処理を行うため、分岐した各ノードに属するサンプル画像ＩＤは昇順に管理される。
【００５４】
同一の深さで分岐処理が終了していないノードがある場合、上記ステップＳ２１４からＳ２１６での処理を繰り返す。後述される図８を参照すると、深さ「０」では、ノードＩＤ「０」が処理対象のノードとなる。深さ「１」では、ノードＩＤ「１」及び「２」が処理対象のノードとなる。深さ「２」では、ノードＩＤ「３」、「４」、「５」、及び「６」が処理対象のノードとなる。
【００５５】
そして、ツリー生成部２１は、分岐後のノードがリーフノードであるか否かを判断する（ステップＳ２１７）。リーフノードでない場合、ツリー生成部２１は、次の特徴ベクトルセットを取得して、データベース４０からランダムに選択された属性毎のサンプル画像の分散値を取得し、中間値を算出する（ステップＳ２１８）。そして、ツリー生成部２１は、上記ステップＳ２１４からＳ２１６を繰り返す。
【００５６】
ツリー生成部２１は、階層が深くなる毎に追加されたノード数分の特徴ベクトルセットを索引構築マスター５１へ要求しても良い。或いは、索引構築マスター５１から送信されるツリー生成指示に階層数に応じたノード数分の特徴ベクトルセットが予め含まれるようにしておいても良い。また、既に、中間値を算出済みの属性の場合、その中間値を用いればよい。
【００５７】
一方、リーフノードである場合、同じ親ノード毎にリーフ間の距離を算出して（ステップＳ２１９）、この処理を終了する。図８の例では、深さ「２」では、ノードＩＤ「３」、「４」、「５」、及び「６」から分岐した、深さ「３」におけるノード「７」、「８」、「９」、「１０」、「１１」、「１２」、「１３」、及び「１４」がリーフノードである。従って、ノードＩＤ「３」から分岐したノード「７」、「８」の距離、ノードＩＤ「４」から分岐したノード「９」、「１０」の距離、ノードＩＤ「５」から分岐したノード「１１」、「１２」の距離、ノードＩＤ「６」から分岐したノード「１３」、「１４」の距離が算出される。
【００５８】
上述したような処理によって、図７及び図８に示すＲＫＤツリー２−１のように、深さ「０」において、ルートノード「０」に適用したランダムに選択された４属性が「Ｂ」、「Ｄ」、「Ｇ」、及び「Ｌ」であった場合、ステップＳ２１５によって決定された属性「Ｇ」の中間値「０．４７３７４５」を用いて、この中間値以下の分散値を有するサンプル画像を左ノード１に分岐させ、この中間値より大きい分散値を有するサンプル画像を右ノード２に分岐させる。よって、次の深さ「１」の処理対象ノードは、ノード１及びノード２となる。
【００５９】
深さ「１」において、ルートノード０から分岐した左ノード１に適用したランダムに選択された４属性が「Ｃ」、「Ｆ」、「Ｋ」、及び「Ｐ」であった場合、ステップＳ２１５によって決定された属性「Ｃ」の中間値「０．５５０７９」を用いて、この中間値以下の分散値を有するサンプル画像を左ノード３に分岐させ、この中間値より大きい分散値を有するサンプル画像を右ノード４に分岐させる。
【００６０】
また、ルートノード０から分岐した左ノード２に適用したランダムに選択された４属性が「Ｊ」、「Ｍ」、「Ｏ」、及び「Ｑ」であった場合、ステップＳ２１５によって決定された属性「Ｏ」の中間値「０．５１７２１７」を用いて、この中間値以下の分散値を有するサンプル画像を左ノード５に分岐させ、この中間値より大きい分散値を有するサンプル画像を右ノード６に分岐させる。よって、次の深さ「２」の処理対象ノードは、ノード３、４、５、及び６となる。
【００６１】
深さ「２」において、ノード３、４、５、及び６の夫々について同様にランダムに選択された４属性に基づいて分岐処理を行うことによって、深さ「３」において、リーフノードとなるノード３から分岐したノード７及びノード８、ノード４から分岐したノード９及びノード１０、ノード５から分岐したノード１１及びノード１２、そして、ノード６から分岐したノード１３及びノード１４が生成される。
【００６２】
深さ「３」において、ノード７にはサンプル画像ＩＤ「３」、「１４」、及び「１」が属し、ノード８にはサンプル画像ＩＤ「２」、「４」、及び「１７」が属する。ノード９にはサンプル画像ＩＤ「１３」及び「１０」が属し、ノード１０にはサンプル画像ＩＤ「６」、「２０」、及び「１６」が属する。ノード１１にはサンプル画像ＩＤ「８」及び「１１」が属し、ノード１２にはサンプル画像ＩＤ「１２」及び「９」が属する。ノード１３にはサンプル画像ＩＤ「５」及び「７」が属し、ノード１２にはサンプル画像ＩＤ「１９」、「１８」、及び「１５」が属する。
【００６３】
図７及び図８に示すようなツリー生成処理が複数のスレーブ装置２００のうちの１台で行われる。他スレーブ装置２００では、同一のサンプル画像１から２０に対して異なる４属性に基づいてＲＫＤツリー２が生成されるため、ノードに属するサンプル画像が異なる別のＲＫＤツリーとなる。図９及び図１０でＲＫＤツリー２の他の例を示す。
【００６４】
図９は、ＲＫＤツリーテーブルの他のデータ例を示す図である。図１０は、図９のＲＫＤツリーテーブルに基づくＲＫＤツリー構造例を示す図である。図９に示すＲＫＤツリーテーブルＴ２５−２及び図１０に示すＲＫＤツリー２−２に示すように、ルートとなるノード０に対してランダムに選択された４属性「Ｅ」、「Ｉ」、「Ｎ」、及び「Ｑ」が適用され、属性「Ｅ」で分岐することが示されている。
【００６５】
ノード１に対してランダムに選択された４属性「Ｃ」、「Ｆ」、「Ｏ」、及び「Ｐ」が適用され、属性「Ｃ」で分岐することが示されている。ノード２に対してランダムに選択された４属性「Ｂ」、「Ｅ」、「Ｌ」、及び「Ｑ」が適用され、属性「Ｂ」で分岐することが示されている。
【００６６】
ノード３に対してランダムに選択された４属性「Ｄ」、「Ｉ」、「Ｍ」、及び「Ｐ」が適用され、属性「Ｐ」で分岐することが示されている。ノード４に対してランダムに選択された４属性「Ｈ」、「Ｋ」、「Ｎ」、及び「Ｒ」が適用され、属性「Ｈ」で分岐することが示されている。
【００６７】
ノード５に対してランダムに選択された４属性「Ｇ」、「Ｈ」、「Ｋ」、及び「Ｏ」が適用され、属性「Ｈ」で分岐することが示されている。ノード４に対してランダムに選択された４属性「Ｅ」、「Ｊ」、「Ｎ」、及び「Ｒ」が適用され、属性「Ｅ」で分岐することが示されている。
【００６８】
分岐する各ノードでランダムに選択された４属性が適用されるため、図１０に示すＲＫＤツリー２−２が、図８に示すＲＫＤツリー２−１と同じになることはない。
【００６９】
次に、リーフノード間の距離について、図１０のノード７とノード８との間の距離１０ｄを例として図１１で説明する。図１１は、リーフノード間の距離の算出方法を説明するための図である。
【００７０】
図１１において、ツリー生成部２１は、ＲＫＤツリーテーブルＴ２５−２を参照して、ノード７とノード８の分岐元である親ノードを特定する（ステップＳ２３１）。ＲＫＤツリーテーブルＴ２５−２より、左ノードＩＤ「７」と右ノードＩＤ「８」の組み合わせを持つノードＩＤは「３」であることが判る。また、ツリー生成部２１は、ノードＩＤ「３」のレコードからランダムに選択された属性「Ｄ」、「Ｉ」、「Ｍ」、及び「Ｐ」を取得する（ステップＳ２３２）。
【００７１】
続けて、ツリー生成部２１は、左ノードＩＤ「７」に属するサンプル画像「１７」、「２」、及び「８」に関して、属性毎の平均値を算出し、算出した平均値を左ベクトル値ＶＬとする（ステップＳ２３３）。図１１中、Sample(17,D)はサンプル画像「１７」の属性「Ｄ」の分散値を示し、Sample(2,D)はサンプル画像「２」の属性「Ｄ」の分散値を示し、Sample(8,D)はサンプル画像「８」の属性「Ｄ」の分散値を示している。分散値を合計して、左ノードＩＤ「７」に属するサンプル画像数で割る。同様にして、属性「Ｉ」、「Ｍ」、及び「Ｐ」の夫々に関して平均値を算出する。左ベクトル値ＶＬは、各属性の平均値のセットである。
【００７２】
同様にして、ツリー生成部２１は、右ノードＩＤ「８」に属するサンプル画像「１４」及び「１５」に関して、属性毎の平均値を算出し、算出した平均値を右ベクトル値ＶＲとする（ステップＳ２３４）。
【００７３】
ツリー生成部２１は、左ベクトル値ＶＬと右ベクトル値ＶＲとから距離を算出する（ステップＳ２３５）。距離の算出方法は、この例では４次元のユークリッド距離によって算出することができる。又は、コサイン距離など他既存の算出方法を適用して算出してもよい。図１１の例では、距離１０ｄが「０．７４４４９１」となり、親ノード「３」のデータ構造５ａのリーフ間の距離に設定される。
【００７４】
同様にして、ノード９とノード１０間の距離が算出され、親ノード「４」のデータ構造５ａのリーフ間の距離に設定される。ノード１１とノード１２間の距離は親ノード「５」のデータ構造５ａのリーフ間の距離に設定され、ノード１３とノード１４間の距離は親ノード「６」のデータ構造５ａのリーフ間の距離に設定される。
【００７５】
以下に、ユーザ端末３０から送信される質問画像３ｑに基づく検索処理について説明する。図１２は、ＤＢ検索部による検索処理を説明するための図である。図１２において、ＤＢ検索部５２は、ユーザ端末３０からの検索要求に応じて、質問画像３ｑの特徴量を抽出して、質問画像３ｑの高次元特徴ベクトルを作成する（ステップＳ４１）。そして、ＤＢ検索部５２は、作成した質問画像３ｑの高次元特徴ベクトルを索引構築マスター５１に転送する（ステップＳ４２）。
【００７６】
その後、索引構築マスター５１から画像探索結果を受信すると、ＤＢ検索部５２は、画像探索結果に含まれるサンプル画像の類似度を算出する（ステップＳ４３）。画像探索結果には、探索されたサンプル画像のＩＤと、リーフ間の距離とが含まれている。
【００７７】
ＤＢ検索部５２は、ＤＢマネージャー５０を介してデータベース４０から画像探索結果に含まれているサンプル画像のＩＤを用いて高次元特徴ベクトルを取得する。類似度は、質問画像の高次元特徴ベクトルと、各サンプル画像の高次元特徴ベクトルとの距離で示され、数１を用いて算出される。
【００７８】
【数１】
0005552981.tif 000002
ここで、Ｃは距離の値の大きさを調整するためのシステムパラメタを示し、Ｌｋは基準値を示す。類似度が大きいほど、質問画像との差が大きいことを示している。
【００７９】
そして、ＤＢ検索部５２は、算出したサンプル画像の類似度を用いてランキングする（ステップＳ４４）。ＤＢ検索部５２は、リーフ間の距離を考慮して類似度を用いてランキングを算出する。類似度及びランキングの算出例は、後述される。
【００８０】
ＤＢ検索部５２は、ランキングを含む検索結果３ｒをユーザ端末３０へ送信し（ステップＳ４５）、この処理を終了する。
【００８１】
図１３は、索引構築マスターによる探索指示処理を説明するための図である。図１３において、索引構築マスター５１は、ＤＢ検索部５２から画像探索要求を受信すると、転送された質問画像３ｑの高次元特徴ベクトルを各スレーブ装置２００に送信して探索指示を行い、各スレーブ装置２００を用いて並列に探索処理を行う（ステップＳ６１）。
【００８２】
その後、全てのスレーブ装置２００から探索結果を受信すると、索引構築マスター５１は、探索結果に基づいて、サンプル画像ＩＤ毎にリーフ間の距離を対応させた情報と、質問画像３ｑの高次元特徴ベクトルとを含む画像探索結果をＤＢ検索部５２へ送信する（ステップＳ６２）。
【００８３】
図１４は、各スレーブ装置の探索部による探索処理を説明するための図である。図１４において、各スレーブ装置２００の探索部２３は、索引構築マスター５１から探索指示を受信すると、ＲＫＤツリーテーブルＴ５２を参照して、各ノードで適用された属性の中間値と質問画像の同一属性の分散値とを比較することによって分岐して、リーフノードまで辿る（ステップＳ７１）。
【００８４】
探索部２３は、リーフノードからサンプル画像ＩＤのセットを取得し（ステップＳ７２）、また、リーフノードの親ノードからリーフ間の距離を取得する（ステップＳ７３）。そして、探索部２３は、サンプル画像ＩＤのセットとリーフ間の距離とを含む探索結果を索引構築マスター５１へ送信して（ステップＳ７４）、この探索処理を終了する。
【００８５】
図１５は、探索処理例を示す図である。図１５に示す探索処理例では、問合画像３ｑの高次元特徴ベクトル３７ｑが各スレーブ装置２００に与えられるとする。２台のスレーブ装置２００−１及び２００−２によって探索処理が並列に行われ、その結果を用いて、ＤＢ検索５２がランキングを行った場合を例示している。
【００８６】
スレーブ装置２００−１は、図７のＲＫＤツリーテーブルＴ２５−１及び図８のＲＫＤツリー２−１に従って探索処理を行う。また、スレーブ装置２００−２は、図９のＲＫＤツリーテーブルＴ２５−２及び図１０のＲＫＤツリー２−２に従って探索処理を行う。
【００８７】
先ず、スレーブ装置２００−１での探索処理について説明する。深さ「０」において、高次元特徴ベクトル３７ｑの属性Ｇの分散値「０．８５３８８」が、ルートノード０で適用した属性Ｇの中間値「０．４７３７４５」より大きいため、右へ分岐しノード２へと進む。深さ「１」において、高次元特徴ベクトル３７ｑの属性Ｏの分散値「０．３８５１６」が、ノード２で適用した属性Ｏの中間値「０．５１７２１７」より小さいため、左へ分岐しノード５へと進む。
【００８８】
そして、深さ「２」において、高次元特徴ベクトル３７ｑの属性Ｈの分散値「０．３７２４４」が、ノード５で適用した属性Ｈの中間値「０．４９１８４５」より小さいため、左へ分岐しノード１１へと進む。ノード１１はリーフノードであるため、ノード１１に属するサンプル画像ＩＤ「８」及び「１１」を得る。
【００８９】
ノード１１に属するサンプル画像ＩＤ「８」及び「１１」の近傍のノードはノード１２であり、ノード１２に属するサンプル画像ＩＤは「１２」及び「９」である（Neighbor(<8 11>)=<12 9>）。また、サンプル画像ＩＤ「８」及び「１１」の親ノードはノード５であり（Parent(<8 11>)=5）、ノード５に適用した属性は「Ｅ」、「Ｈ」、「Ｎ」、及び「Ｐ」である。そして、図１１に説明したリーフ間の距離の算出方法に従って、距離「０．８１７１２３」を得る。
【００９０】
次に、スレーブ装置２００−２での探索処理について説明する。深さ「０」において、高次元特徴ベクトル３７ｑの属性Ｅの分散値「０．４３２９２」が、ルートノード０で適用した属性Ｅの中間値「０．５１４３７４」より小さいため、左へ分岐しノード１へと進む。深さ「１」において、高次元特徴ベクトル３７ｑの属性Ｃの分散値「０．０８１４５」が、ノード１で適用した属性Ｃの中間値「０．５５４８２６７」より小さいため、左へ分岐しノード３へと進む。
【００９１】
そして、深さ「２」において、高次元特徴ベクトル３７ｑの属性Ｐの分散値「０．１７８５３」が、ノード３で適用した属性Ｐの中間値「０．０３７２６１４」より小さいため、左へ分岐しノード７へと進む。ノード７はリーフノードであるため、ノード７に属するサンプル画像ＩＤ「１７」、「２」、及び「８」を得る。
【００９２】
ノード７に属するサンプル画像ＩＤ「１７」、「２」、及び「８」の近傍のノードはノード８であり、ノード８に属するサンプル画像ＩＤは「１４」及び「１５」である（Neighbor(<17 2 8>)=<14 15>）。また、サンプル画像ＩＤ「１７」、「２」、及び「８」の親ノードはノード３であり（Parent(<17 2 8>)=3）、ノード３に適用した属性は「Ｄ」、「Ｉ」、「Ｍ」、及び「Ｐ」である。そして、図１１に説明したリーフ間の距離の算出方法に従って、距離「０．７４４４９１」を得る。
【００９３】
ＤＢ検索部５２は、全てのスレーブ装置２００からの探索結果から、質問画像３ｑと探索されたサンプル画像ＩＤ「８」、「１１」、「２」、及び「１７」の各々との類似度を数１を用いて算出する。その結果、質問画像３ｑとサンプル画像ＩＤ「８」との類似度「０．５０１７８」、サンプル画像ＩＤ「１１」との類似度「０．３２８３８４」、サンプル画像ＩＤ「２」との類似度「０．４９３３７９」、サンプル画像ＩＤ「１７」との類似度「０．３８１６６７」を得る。
【００９４】
そして、ＤＢ検索部５２は、各スレーブ装置２００で算出したリーフ間の距離と、類似度の算出結果とからランク付けする。
【００９５】
サンプル画像ＩＤ「８」に対するランクは、
rankscore(8) = λ × (0.817123 ＋ 0.74491) ＋ β × 0.50178、
サンプル画像ＩＤ「１１」に対するランクは、
rankscore(11) = λ × (0.817123)            ＋ β × 0.328384、
サンプル画像ＩＤ「２」に対するランクは、
rankscore(2) = λ × (0.817123)            ＋ β × 0.493379、
サンプル画像ＩＤ「１７」に対するランクは、
rankscore(17) = λ × (0.817123)            ＋ β × 0.381667、
によって算出される。λ及びβは重み付け係数である。
【００９６】
上述の計算式を見て分かるように、サンプル画像ＩＤ「８」に対しては、複数のスレーブ装置２００で抽出されているため、夫々のスレーブ装置２００で算出された距離を合算するようにしている。ランクは値が大きいほど、より質問画像３ｑに近いことを示す。
【００９７】
上述したように、本発明に係るシステムでは、サンプル画像の高次元特徴ベクトルを用いてｋｄツリーを作成するのではなく、高次元特徴ベクトルからランダムに選択した複数の画像の属性を用いてｋｄツリーを作成することにより、ｋｄツリーの作成の負荷処理を小さくすることができる。
【００９８】
また、複数のスレーブ装置２００の夫々に高次元特徴ベクトルからランダムに選択した複数の画像の属性を用いてＲＫＤツリー２を作成させておき、質問画像３ｑの近傍画像となるサンプル画像を探索させることによって、探索処理を並列に行え、高速処理を実現することができる。
【００９９】
高次元特徴ベクトルからランダムに選択した複数の画像の属性を用いたｋｄツリーであることから、各スレーブ装置２００で作成されるＲＫＤツリー２は全て異なっており、各ＲＫＤツリー２で探索した結果は、高次元特徴ベクトルで作成したｋｄツリーによる探索結果を十分に網羅していると言える。
【０１００】
更に、ＲＫＤツリー２を作成する際には、各ノードで適用され異なる組み合わせの属性において、最もバランスよく左右に分岐する属性を選択する仕組みにより、近傍画像の抽出精度を改善することができる。
【０１０１】
また、本発明に係るシステムでは、全てのＲＫＤツリー２の探索結果に対して、異なるＲＫＤツリー２から同一の近傍画像が重複して抽出された場合には、各ＲＫＤツリー２内でのその近傍画像の親ノードから分岐したサンプル画像との距離を考慮しつつ、質問画像３ｑと近傍画像との類似度を用いて、近傍画像のランク付けを行う。従って、質問画像３ｑとの比較精度の高い探索結果をユーザに提供することができる。
【符号の説明】
【０１０２】
３ｑ          質問画像
３ｒ          検索結果
４            ローカルネットワーク
５            インターネット
２１          ツリー生成部
２３          探索部
３０          ユーザ端末
４０          データベース
５０          ＤＢマネージャー
５１          索引構築マスター
５２          ＤＢ検索部
１００        情報処理装置
２００        スレーブ装置
１０００      システム
Ｔ４２        ソート済み索引順テーブル
Ｔ５２、Ｔ５２−１、Ｔ５２−２    ＲＫＤツリーテーブル
【先行技術文献】
【特許文献】
【０１０３】
【特許文献１】特開２００３−２７１６０１号公報
【非特許文献】
【０１０４】
【非特許文献１】Alexandr Andoni and Piotr Indyk,  Near-Optimal Hashing Algorithms for Approximate Nearest Neighbor in High dimensions , In Proceedings of the Symposium on Foundations of Computer Science , 2006
【非特許文献２】S. Arya, D. M. Mount, N. S. Netanyahu, R. Silverman and A. Wu, An optimal algorithm for approximate nearest neighbor searching, Journal of the ACM, 45(6):891-923, 1998
【非特許文献３】S. Arya, D. M. Mount, N. S. Netanyahu, R. Silverman and A. Wu, An optimal algorithm for approximate nearest neighbor searching, and  SODA, 1994
【図１】
0005552981.tif 000003
【図２】
0005552981.tif 000004
【図３】
0005552981.tif 000005
【図４】
0005552981.tif 000006
【図５】
0005552981.tif 000007
【図６】
0005552981.tif 000008
【図７】
0005552981.tif 000009
【図８】
0005552981.tif 000010
【図９】
0005552981.tif 000011
【図１０】
0005552981.tif 000012
【図１１】
0005552981.tif 000013
【図１２】
0005552981.tif 000014
【図１３】
0005552981.tif 000015
【図１４】
0005552981.tif 000016
【図１５】
0005552981.tif 000017