(57)【特許請求の範囲】
【請求項１】
多次元空間を部分空間領域に分割し、その部分空間領域をノードに格納した上で、空間データの登録時には、前記空間データを包含するよう部分空間領域を拡大する多次元インデックス処理を実行する情報処理装置であって、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力手段と、
前記多次元インデックスのノード内の１つ以上の部分空間領域に対し、前記空間データを格納する場合の拡大値をそれぞれ算出する算出手段と、
前記算出手段で拡大値を算出した部分空間領域の中から、前記空間データの格納先候補となる部分空間領域を選択する選択手段と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得手段と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得手段と、
前記選択手段で選択した格納先候補の部分空間領域に対する前記拡大値が閾値以上になり、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域を生成する生成手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記選択手段は、前記算出手段で算出した拡大値が、最小となる部分空間領域を格納先候補とする
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記閾値は、前記多次元インデックス内の部分空間領域の最大値あるいは平均値に基づいて設定される
ことを特徴とする請求項１また２に記載の情報処理装置。
【請求項４】
前記拡大値は、前記空間データを格納後の部分空間領域の面積と前記空間データを格納前の部分空間領域の面積の差あるいは比で表現される
ことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記拡大値は、前記空間データを格納後の部分空間領域の体積と前記空間データを格納前の部分空間領域の体積の差あるいは比で表現される
ことを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項６】
多次元空間を部分空間領域に分割し、その部分空間領域をノードに格納した上で、空間データの登録時には、前記空間データを包含するよう部分空間領域を拡大する多次元インデックス処理を実行する情報処理装置の制御方法であって、
入力手段が、点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力工程と、
算出手段が、前記多次元インデックスのノード内の１つ以上の部分空間領域に対し、前記空間データを格納する場合の拡大値をそれぞれ算出する算出工程と、
選択手段が、前記算出工程で拡大値を算出した部分空間領域の中から、前記空間データの格納先候補となる部分空間領域を選択する選択工程と、
第１の時刻情報取得手段が、前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得工程と、
第２の時刻情報取得手段が、前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得工程と、
生成手段が、前記選択手段で選択した格納先候補の部分空間領域に対する前記拡大値が閾値以上になり、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域を生成する生成工程と
を備えることを特徴とする情報処理装置の制御方法。
【請求項７】
多次元空間を部分空間領域に分割し、その部分空間領域をノードに格納した上で、空間データの登録時には、前記空間データを包含するよう部分空間領域を拡大する多次元インデックス処理を実行する情報処理装置の制御をコンピュータに機能させるためのプログラムであって、
前記コンピュータを、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力手段と、
前記多次元インデックスのノード内の１つ以上の部分空間領域に対し、前記空間データを格納する場合の拡大値をそれぞれ算出する算出手段と、
前記算出手段で拡大値を算出した部分空間領域の中から、前記空間データの格納先候補となる部分空間領域を選択する選択手段と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得手段と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得手段と、
前記選択手段で選択した格納先候補の部分空間領域に対する前記拡大値が閾値以上になり、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域を生成する生成手段と
して機能させることを特徴とするプログラム。
【請求項８】
多次元空間を部分空間領域に分割して、該部分空間領域を多次元インデックスのノードに対応させ、空間データの登録時には、前記空間データを包含するよう前記ノードに対応する部分空間領域の大きさを拡大する多次元インデックス処理を実行する情報処理装置であって、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力手段と、
前記部分空間領域に対応する前記多次元インデックスのノードに前記入力された空間データを登録する場合の、前記部分空間領域の拡大値を取得する取得手段と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得手段と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得手段と、
前記拡大値の大きさが閾値を超え、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域に対応する新規ノードを生成し、前記空間データを前記新規ノードに登録する登録手段と
を備えることを特徴とする情報処理装置。
【請求項９】
前記取得手段で、１つ以上の部分空間領域の拡大値を取得し、前記拡大値が最小となる部分空間領域を登録先候補とする
ことを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記閾値は、前記多次元インデックス内の部分空間領域の最大値あるいは平均値に基づいて設定される
ことを特徴とする請求項８または９に記載の情報処理装置。
【請求項１１】
前記拡大値は、前記空間データを登録後の部分空間領域の面積と前記空間データを登録前の部分空間領域の面積の差あるいは比で表現される
ことを特徴とする請求項８乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記拡大値は、前記空間データを登録後の部分空間領域の体積と前記空間データを登録前の部分空間領域の体積の差あるいは比で表現される
ことを特徴とする請求項８乃至１０のいずれか１項に記載の情報処理装置。
【請求項１３】
空間データの検索領域を指定する指定手段と、
前記検索領域と前記部分空間領域との重複の有無を判定する判定手段と、
前記判定手段で重複すると判定された前記部分空間領域に対応する前記ノードを探索する探索手段と
を更に備えることを特徴とする請求項８乃至１２のいずれか１項に記載の情報処理装置。
【請求項１４】
前記多次元インデックスは階層構造のノードである
ことを特徴とする請求項８乃至１３のいずれか１項に記載の情報処理装置。
【請求項１５】
前記部分空間領域は、他の部分空間領域に包含される場合と他の部分空間領域に包含されない場合とがある
ことを特徴とする請求項８乃至１４のいずれか１項に記載の情報処理装置。
【請求項１６】
前記階層構造は、前記部分空間領域の包含関係に基づいた階層である
ことを特徴とする請求項１４に記載の情報処理装置。
【請求項１７】
前記探索手段では、前記判定手段で重複すると判定された前記部分空間領域に対応する複数階層の前記ノードを探索する
ことを特徴とする請求項１３に記載の情報処理装置。
【請求項１８】
多次元空間を部分空間領域に分割して、該部分空間領域を多次元インデックスのノードに対応させ、空間データの登録時には、前記空間データを包含するよう前記ノードに対応する部分空間領域の大きさを拡大する多次元インデックス処理を実行する情報処理装置の制御方法であって、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力工程と、
前記部分空間領域に対応する前記多次元インデックスのノードに前記入力された空間データを登録する場合の、前記部分空間領域の拡大値を取得する取得工程と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得工程と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得工程と、
前記拡大値の大きさが閾値を超え、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域に対応する新規ノードを生成し、前記空間データを前記新規ノードに登録する登録工程と
を備えることを特徴とする情報処理装置の制御方法。
【請求項１９】
多次元空間を部分空間領域に分割して、該部分空間領域を多次元インデックスのノードに対応させ、空間データの登録時には、前記空間データを包含するよう前記ノードに対応する部分空間領域の大きさを拡大する多次元インデックス処理を実行する情報処理装置の制御をコンピュータに機能させるためのプログラムであって、
前記コンピュータを、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力手段と、
前記部分空間領域に対応する前記多次元インデックスのノードに前記入力された空間データを登録する場合の、前記部分空間領域の拡大値を取得する取得手段と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得手段と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得手段と、
前記拡大値の大きさが閾値を超え、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域に対応する新規ノードを生成し、前記空間データを前記新規ノードに登録する登録手段と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、写真の撮影位置情報等に代表される多次元データの検索を高速化する多次元インデックス技術に関するものである。
【背景技術】
【０００２】
近年、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）機能を搭載したカメラが増加しており、撮影場所の緯度・経度を記録した地理情報を写真データに付与可能になっている。これに伴い、カメラやＰＣ上の写真閲覧アプリケーションでは、写真データの撮影位置の地理情報を利用して、任意の地域内で撮影した写真データを検索し、その撮影位置を地図上に対応付けて表示する機能を備えるものが増えている。
【０００３】
撮影位置の地理情報は緯度・経度・標高等から構成される多次元データである。このため、地理情報の検索に、１次元データ向けのインデックス構造を用いることは適していない。Ｂ−Ｔｒｅｅのような１次元インデックスでは、空間内において位置の近いデータをインデックス上で近くに配置することが出来ないため、検索クエリによっては大幅に性能が劣化するためである。
【０００４】
地理情報等の多次元データの検索に適したインデックス（多次元インデックスあるいは空間インデックスと総称）として、一般的にＲ−Ｔｒｅｅが用いられることが多い。Ｒ−Ｔｒｅｅは、階層的に入れ子になった矩形状の部分空間領域で多次元空間を分割することで、木構造のインデックスを形成する方式である。Ｒ−Ｔｒｅｅでは、空間内で近くに存在する要素が、なるべく同じ部分空間領域（インデックス内のノード）に属するように設計されている。Ｒ−Ｔｒｅｅは多分木であるため、中間ノードのサイズをファイルシステムへの入出力サイズに合わせて変更することができる。このため、二次記憶装置とのやりとりが効率的であり、多くのデータベースシステムで採用されている。
【０００５】
Ｒ−Ｔｒｅｅに類似した多次元インデックス方式の改良に関する先行技術として、特許文献１及び特許文献２が開示されている。
【０００６】
特許文献１では、多次元空間を矩形と球形の論理積の領域に分割する多次元インデックス方式において、球形空間領域の配置を工夫することでノードサイズを削減し、その結果としてインデックスサイズを縮小している。
【０００７】
特許文献２では、多次元空間を球形の領域に分割する多次元インデックス方式において、インデックス内での球形の表現を符号化することでノードサイズを削減し、インデックスサイズを縮小している。
【０００８】
これらの先行技術では、インデックスサイズを縮小することで、検索時のディスクアクセス回数を削減することができ、検索処理を高速化することが可能である。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１１−８１５５４号公報
【特許文献２】特開２０００−３５７１６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
Ｒ−Ｔｒｅｅには、空間データの偏在性や登録順によっては、部分空間領域が適切に生成されないという課題がある。特に、少数の空間データのみが他の空間データ群から離れた位置に存在する場合、空間内での位置が離れたデータ同士が同じ部分空間領域に属してしまう場合がある。この場合には、部分空間領域内に本来必要ではない空き領域が増えることになる。
【００１１】
Ｒ−Ｔｒｅｅを用いて検索を実行する際には、ユーザが指定した検索領域と重複する部分空間内の全データに対して検索条件に合致するか否かをチェックする処理が必要である。このため、各部分空間領域は必要最小限の大きさであることが望ましい。部分空間領域内に空き領域が増加すると、検索領域内にデータが存在しない場合にも、検索領域と部分空間領域が重複してしまう可能性が高く、無駄な探索処理が発生してしまう。このため、部分空間領域内の空き領域の増加は、検索性能を劣化させる要因となる。
【００１２】
上記の先行技術はいずれも多次元インデックスのインデックスサイズを縮小することで、検索の高速化を実現するものであるが、部分空間領域の分割に関する工夫は行われていない。このため上記の先行技術では、少数の空間データのみが他の空間データ群から離れた位置に存在するような場合には、部分空間領域内に空き領域が多く発生してしまい、検索性能が劣化する。
【００１３】
本発明は上記課題に鑑みてなされたものであり、空間内での位置が離れたデータを別の部分空間領域として管理することで、部分空間領域内の空き領域を削減する多次元インデックス技術を提供することにより、検索領域と重複する部分空間領域の数を減らすことを目的とする。
【課題を解決するための手段】
【００１４】
上記の目的を達成するための本発明による情報処理装置は以下の構成を備える。即ち、
多次元空間を部分空間領域に分割し、その部分空間領域をノードに格納した上で、空間データの登録時には、前記空間データを包含するよう部分空間領域を拡大する多次元インデックス処理を実行する情報処理装置であって、
点あるいは空間領域からなる空間データを、記憶装置において構築されている多次元インデックスに入力する入力手段と、
前記多次元インデックスのノード内の１つ以上の部分空間領域に対し、前記空間データを格納する場合の拡大値をそれぞれ算出する算出手段と、
前記算出手段で拡大値を算出した部分空間領域の中から、前記空間データの格納先候補となる部分空間領域を選択する選択手段と、
前記空間データに付随する第１の時刻情報を取得する第１の時刻情報取得手段と、
前記多次元インデックスのノード内の１つ以上の空間データの第２の時刻情報をそれぞれ取得する第２の時刻情報取得手段と、
前記選択手段で選択した格納先候補の部分空間領域に対する前記拡大値が閾値以上になり、かつ前記第１の時刻情報と前記第２の時刻情報の差が、一定値以上になる場合に、少なくとも前記空間データを包含する新規部分空間領域を生成する生成手段と
を備える。
【発明の効果】
【００１５】
本発明によれば、少数の空間データが他の空間データ群から離れた位置に存在する場合にも、部分空間領域内の空き領域を削減することで検索領域と重複する部分空間領域の数を減らすことができ、高速に検索を行うことができる。
【図面の簡単な説明】
【００１６】
【図１】実施形態１の情報処理装置の構成図である。
【図２】実施形態１の画像管理テーブル及び撮影位置インデックスの模式図である。
【図３】実施形態１の空間分割方式の模式図である。
【図４】実施形態１の空間分割方式の模式図である。
【図５】Ｒ−Ｔｒｅｅの空間分割方式の模式図である。
【図６】実施形態１の空間分割方式の模式図である。
【図７】実施形態１の登録処理を示すフローチャートである。
【図８】実施形態１の空間データ入力処理を示すフローチャートである。
【図９】実施形態１の格納先ノード選択処理を示すフローチャートである。
【図１０】実施形態１のエントリ格納処理を示すフローチャートである。
【図１１】実施形態１の木の調整処理を示すフローチャートである。
【図１２】実施形態１の検索処理を示すフローチャートである。
【図１３】実施形態２の格納先ノード選択処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
【００１８】
（実施形態１）
図１（Ａ）は実施形態１の多次元インデックス処理を実現する情報処理装置を示す構成図である。
【００１９】
ＣＰＵ１０１は、ＲＯＭ１０６に格納されている制御プログラムを実行することにより本装置全体の制御を行う。ＲＯＭ１０６は、ＣＰＵ１０１が実行するプログラムを格納する。ＣＰＵ１０１がプログラムを実行することにより、当該装置は後述するフローチャートに示す各処理を実行するための各種構成要素として機能する。例えば、データベースエンジン１０７を格納し、データの登録・検索を行うことができる。ＲＡＭ１０２は、各構成要素からの各種データを一時記憶する。また、プログラムを展開し、ＣＰＵ１０１によって実行する。
【００２０】
外部記憶装置１０８は、処理対象となるデータを格納する装置である。外部記憶装置１０８としては、フラッシュメモリ、ＨＤＤ等を用いることができる。外部記憶装置１０８には、画像データベース１１０が存在し、画像管理テーブル１１１が撮影画像１０９に付与されたメタデータを管理する。画像管理テーブル１１１内に格納されている撮影位置情報に対し、撮影位置インデックス１１２が構築されている。
【００２１】
撮像部１１３は、光学装置及び撮像素子等の部品によって構成され、ＣＰＵ１０１からの指示に応じて、被写体の撮像を行う。撮像部１１３によって得られた撮像結果は、撮影画像１０９として外部記憶装置１０８に格納する。
【００２２】
ＧＰＳ受信機１０３は、ＧＰＳ衛星からの信号を受信し、装置の現在位置を測位する。撮像部１１３が撮像を行う際には、ＧＰＳ受信機１０３の機能により、撮影位置情報を撮影画像１０９と対応付けて記憶することができる。
【００２３】
入力部１０４は、操作ボタン、タッチパネル等の入力装置で構成され、ユーザからの指示を受け付ける。出力部１０５は、液晶パネル等の出力装置で構成され、本発明の処理対象となるデータを表示する。
【００２４】
尚、実施形態１では、後述するフローチャートの各ステップに対応する処理を、ＣＰＵ１０１を用いてソフトウェアで実現するが、その処理の一部又は全部を電子回路等のハードウェアで実現するようにしても良い。
【００２５】
図１（Ｂ）は実施形態１におけるデータ処理部分の構成を示す構成図である。
【００２６】
データ登録部１１４は、撮像部１１３から撮影画像１０９のメタデータを受信し、データベースエンジン１０７を介して、画像データベース１１０へ登録する。検索実行部１１５は、入力部１０４からユーザの指示を受信し、データベースエンジン１０７を介して、画像データベース１１０への検索を実行する。検索実行部１１５が取得した検索結果は、出力部１０５へ表示される。
【００２７】
尚、データ登録部１１４及び検索実行部１１５は、例えば、ＣＰＵ１０１を用いてソフトウェアで実現されても良いが、その処理の一部又は全部を電子回路等のハードウェアで実現するようにしても良い。
【００２８】
図２（Ａ）は画像管理テーブル１１１の構成を示す図である。
【００２９】
画像管理テーブル１１１は、撮影画像１０９を一意に特定する画像ＩＤ２０１、及び撮影時に付与されるメタデータとして撮影時刻２０２、撮影位置情報２０３を格納している。撮影位置情報２０３を空間データとみなし、撮影位置インデックス１１２を構築する。
【００３０】
尚、実施形態１では、撮影位置情報２０３として、緯度・経度を格納しているが、更に標高を加えてもよい。この場合には、高層ビルや山のように高さに変化のある場所で撮影した撮影画像１０９に対し、標高位置を指定して検索を行うことができる。あるいは、標高以外に撮影方角等のパラメータを加えて、より高次元の情報を空間データ（点あるいは空間領域からなる）とみなしてもよい。この場合には、撮影位置のみならず、撮影対象が類似している撮影画像１０９を検索することが可能となる。
【００３１】
また、実施形態１では、画像管理テーブル１１１に画像データを格納しているが、動画データを格納してもよい。動画データの場合の撮影位置情報２０３は、複数の撮影位置が連なった線状のデータでもよい。この場合には、長距離を移動しながら動画の撮影を行う場合でも、移動経路を考慮した検索を行うことができる。
【００３２】
図２（Ｂ）は撮影位置インデックス１１２のデータ構造を示す模式図である。
【００３３】
撮影位置インデックス１１２は、木構造を形成し、ルートノード２０４、中間ノード２０５及び葉ノード２０６を持つ。また、各ノードはエントリ２０７を複数保持する。１ノード内に格納可能なエントリ２０７の上限数はシステムが規定する。実施形態１では、エントリ２０７の上限数は４である。
【００３４】
図３（Ａ）及び図３（Ｂ）は撮影位置インデックス１１２の具体例を示す模式図である。
【００３５】
撮影位置インデックス１１２は、従来のＲ−Ｔｒｅｅと同様に多次元空間を階層化した部分空間領域に分割する。ここで、部分空間領域は、各ノード内のエントリ２０７が含まれる領域であるＭＢＲ（最小外接矩形：Ｍｉｎｉｍｕｍ  Ｂｏｕｎｄｉｎｇ  Ｒｅｃｔａｎｇｌｅ）で表現される。実施形態１では、全空間はＭＢＲ３０１とＭＢＲ３０２で示す部分空間領域で分割され、それぞれの領域の座標情報がルートノード２０４のエントリ２０７として格納される。更に、ＭＢＲ３０１の領域内は、ＭＢＲ３０３〜ＭＢＲ３０６で示す部分領域へ、ＭＢＲ３０２の領域内は、ＭＢＲ３０７〜ＭＢＲ３０９で示す部分領域へ、というように再帰的に分割が行われる。階層化された部分空間領域の内、最下位階層の領域は葉ノード２０６に相当する。
【００３６】
葉ノード２０６のエントリ２０７は、次のデータを保持する。
【００３７】
・空間データへのリンク情報
・空間データのＭＢＲの座標値
中間ノードのエントリ２０７及びルートノードのエントリ２０７は次のデータを保持する。
【００３８】
・子ノードへのリンク情報
・子ノード内の全エントリ２０７を包含するＭＢＲの座標値
尚、図３では、空間データのＭＢＲは図面の簡略化のため図示していない。
【００３９】
図４は、図３の撮影位置インデックス１１２に空間データ４０１を新規に登録する場合を示している。この場合には、追加する空間データ４０１を含むように既存の部分空間領域を拡大する必要がある。ここでの基本的な処理の流れは、従来のＲ−Ｔｒｅｅと同様である。まず、ルートノード２０４から順に、インデックス木を探索する。そして、１ノード内のエントリ２０７の内、空間データ４０１を格納した場合の部分空間領域（＝ＭＢＲ）の拡大が最も小さいエントリ２０７を辿ることで、新規データを格納する葉ノード２０６を選択する。
【００４０】
図４の例では、まず、ルートノード２０４内の２つのエントリに相当するＭＢＲ３０１とＭＢＲ３０２に対して、空間データ４０１を格納した場合の拡大値を算出する。空間データ４０１を格納する場合、ＭＢＲ３０１はＭＢＲ４０２に、ＭＢＲ３０２はＭＢＲ４０３へと拡大する必要がある。実施形態１では、ＭＢＲ３０２の拡大の方が小さいため、引き続きＭＢＲ３０２の子ノードを探索することになる。
【００４１】
図５（Ａ）及び図５（Ｂ）は従来のＲ−Ｔｒｅｅのアルゴリズムに従って、図３の撮影位置インデックス１１２に対し、空間データ５０１を登録した後の状態を示している。特に、図５（Ｂ）では空間データ５０１の格納位置を斜線で示している。
【００４２】
図５に示す従来例では、ＭＢＲ５０２及びＭＢＲ５０３で表現する部分空間領域の拡大量が大きく、部分空間領域内に空き領域が多く発生している。この場合、空き領域に相当する空間に対して検索が発行されると、インデックス内を葉ノード２０６まで辿らない限り、検索結果に該当する空間データが存在しないということを判断できない。このように、空き領域の増加は、インデックス内の不必要な探索を増加させ、検索性能が劣化する一因となる。
【００４３】
図６（Ａ）及び図６（Ｂ）は実施形態１に従って、図３の撮影位置インデックス１１２に対し、空間データ５０１を登録した後の状態を示している。特に、図６（Ｂ）では、空間データ５０１の格納位置を斜線で示している。
【００４４】
実施形態１では、部分空間領域の拡大量が一定以上に大きくなる場合には、空間データ５０１を既存の部分空間領域とは別の部分空間領域として管理する。このため、実施形態１では、既存の部分空間領域を必要以上に拡大することがないため、空き領域の増加を抑えることができ、木の探索を効率的に行うことができる。
【００４５】
実施形態１における処理をフローチャートに従って説明する。
【００４６】
図７は実施形態１におけるデータ登録部１１４の登録処理を示すフローチャートである。
【００４７】
ステップＳ７０１で、新規の空間データを撮影位置インデックス１１２へ入力し、空間データからインデックスのエントリ２０７を生成する（空間データ入力工程）。ステップＳ７０２で、撮影位置インデックス１１２内を探索し、エントリ２０７の格納先となるノードを選択する。続いて、ステップＳ７０３で、エントリ２０７をステップＳ７０２で選択したノード内に格納する。必要に応じて、オーバーフローに伴うノードの分割等の処理も本ステップ内で行う。ステップＳ７０４で、エントリ２０７の追加による木の再構築を、上位階層に伝播する。ステップＳ７０５で、ノードの分割及び木の再構築によって、木の高さを増やす必要がある場合に、その処理を行う。具体的には、ステップＳ７０５では、ルートノード２０４の分割が必要となる場合に、新規のルートノード２０４を生成し、分割された２つのノードを新規のルートノード２０４の子ノードとすることで木の高さを１つ増やす。
【００４８】
図８はステップＳ７０１の処理の詳細を示すフローチャートである。
【００４９】
ステップＳ８０１で、入力された空間データの位置情報を取得する。具体的には、撮影画像１０９に付随する撮影位置情報２０３を取得する。ステップＳ８０２で、ステップＳ８０１で取得した撮影位置情報２０３を多次元インデックス上の直行座標系（ｘ座標、ｙ座標）に変換する。ステップＳ８０３で、ステップＳ８０２で算出した座標値を用い、新規のエントリを生成する。ここで作成するエントリは、葉ノード２０６のエントリとなるため、空間データへのリンク情報及び空間データのＭＢＲの座標値を保持する。このエントリを新規登録エントリＥと表現する。
【００５０】
図９はステップＳ７０２の処理の詳細を示すフローチャートである。
【００５１】
ステップＳ９０１で、探索先のノードＮをルートノード２０４に設定する。ステップＳ９０２で、探索先のノードＮが葉ノード２０６であるか否かを判定する。探索先のノードＮが葉ノード２０６である場合（ステップＳ９０２でＹＥＳ）、ステップＳ９０８へ進む。一方、探索先のノードＮが葉ノード２０６でない場合（ステップＳ９０２でＮＯ）、ステップＳ９０３へ進む。
【００５２】
ステップＳ９０３で、探索先のノードＮ内の各エントリが保持するＭＢＲに対し、新規登録エントリＥを格納した場合の拡大値をそれぞれ算出する（拡大値算出工程）。拡大値には、新規登録エントリＥの格納後のＭＢＲの面積と新規登録エントリＥの格納前のＭＢＲの面積の差あるいは比を用いることができる。新規登録エントリＥの格納前後のＭＢＲの面積差あるいは面積比は、新規登録エントリＥの格納による部分空間領域内の空き領域の増加量あるいは増加率とみなすことができる。
【００５３】
従って、この構成によれば、ステップＳ９０３で算出した拡大値を用いて、各エントリに新規登録エントリＥを追加した際の空き領域の増加量あるいは増加率を相対比較することができる。尚、３次元以上の空間を対象とする場合には、拡大値には、新規登録エントリＥの格納後のＭＢＲの体積と新規登録エントリＥの格納前のＭＢＲの体積の差あるいは比を用いることができる。この構成によれば、ステップＳ９０３で算出した拡大値を用いて、各エントリに新規登録エントリＥを追加した際の多次元空間内における空き領域（空間）の増加量あるいは増加率を相対比較することができる。
【００５４】
ステップＳ９０４で、探索先のノードＮ内のエントリから格納先候補を選択する（格納先候補選択工程）。ステップＳ９０４では、ステップＳ９０３で算出した拡大値が最小となるエントリを格納先候補とする。前述の通り、ステップＳ９０３で算出した拡大値は、新規登録エントリＥの格納による部分空間領域内の空き領域の増加量あるいは増加率を示すものであるため、拡大値が最小となるエントリを選択することで、空き領域の増加を相対的に少なくすることができる。尚、探索先のノードＮ内の全エントリから部分空間領域の拡大値が最小となるエントリを算出する代わりに、探索先のノードＮ内のいくつかのエントリから拡大値が最小であるエントリを算出し、格納先候補とすることで、計算時間を短縮することもできる。
【００５５】
ステップＳ９０５で、ステップＳ９０４で選択した格納先候補のエントリに対する拡大値が閾値以上であるか否かを判定する。拡大値が閾値未満である場合（ステップＳ９０５でＮＯ）、格納先候補のエントリからリンクされる子ノードが格納先として適していると判定し、ステップＳ９０６へ進む。ステップＳ９０６では、格納先候補のエントリからリンクされる子ノードを、次の探索先ノードＮとして設定し、ステップＳ９０２から処理を繰り返す。
【００５６】
一方、ステップＳ９０５で、拡大値が閾値以上である場合（ステップＳ９０５でＹＥＳ）、新規登録エントリＥをどのノードに格納したとしても、空き領域が大幅に増加すると判定し、ステップＳ９０７へ進む。ステップＳ９０７で、新規登録エントリＥを包含するようなＭＢＲを新たに生成する（新規部分空間領域生成工程）。ここでは、図６に示すように、新規登録エントリＥを別ノードとして管理するために、新規のノードＮＮを生成し、新規登録エントリＥを格納する。更に、新規のノードＮＮを、親ノードに格納するために、中間ノードのエントリＥＥを生成する。具体的には、新規のノードＮＮ内の全エントリを包含するＭＢＲを生成し、中間ノードのエントリＥＥ内にＮＮへのリンク情報と生成したＭＢＲの座標情報を格納する。そして、新規登録エントリＥを中間ノードのエントリＥＥで置き換える。ステップＳ９０８で、ノードＮを、新規登録エントリＥを挿入するノードとして返す。
【００５７】
尚、ステップＳ９０５で用いる閾値は、固定の値をシステムが設定する他に、多次元インデックス内の部分空間領域の最大値あるいは平均値に基づいて適宜変更してもよい。この構成によれば、現在の部分空間領域の大きさに応じて閾値を設定できるため、部分空間領域の大きさに対して閾値が小さ過ぎるというような問題を回避することができる。従って、所定の値が小さ過ぎることにより新規部分空間領域の生成が頻発し、ノード数が極端に増加してしまうことを避けることができる。
【００５８】
また、ステップＳ９０５では、部分空間領域の拡大値に基づき新規部分空間領域を生成するか否かを判定しているが、判定基準に地名情報を合わせて利用してもよい。例えば、ユーザが自宅や勤務先等のランドマーク情報をシステムに登録している場合には、その付近に位置する空間データが初めて入力された時に、新規部分空間領域に格納するよう構成することもできる。この構成によれば、この先、空間データが多数生成される可能性の高いユーザ登録ランドマーク付近の空間データを、他の空間データ群とは異なる部分空間領域へ集約するよう補正することができ、部分空間領域の構築をより適正化することができる。
【００５９】
図１０はステップＳ７０３の処理の詳細を示すフローチャートである。
【００６０】
本フローでは、ステップＳ７０２で選択したノードＮに新規登録エントリＥを格納する処理を行う。まず、ステップＳ１００１で、ノードＮ内に空きエントリがあるか否かを判定する。空きがある場合（ステップＳ１００１でＹＥＳ）、ステップＳ１００２へ進み、新規登録エントリＥをノードＮに格納する。一方、ノードＮ内に空きがない場合（ステップＳ１００１でＮＯ）、ステップＳ１００３へ進み、ノードＮを２つのノードに分割する。ノードの分割方法の一例としては、既存のＲ−Ｔｒｅｅと同様に分割後のＭＢＲ同士の重なりが最小となるような分割位置を選択する手法を適用することができる。
【００６１】
図１１はステップＳ７０４の処理の詳細を示すフローチャートである。
【００６２】
ステップＳ１１０１で、ステップＳ７０３で新規登録エントリＥを格納したノードＮを処理対象のノードに設定する。ノードＮが分割された場合には、分割後の２つのノードを処理対象とする。ステップＳ１１０２で、本フローがルートノード２０４まで処理を終えているか否かを判定する。ルートノード２０４まで処理を終えている場合（ステップＳ１１０２でＹＥＳ）、本フローを終了する。一方、ルートノード２０４まで処理を終えていない場合（ステップＳ１１０２でＮＯ）、ステップＳ１１０３へ進む。
【００６３】
ステップＳ１１０３で、ノードＮの親エントリが保持しているＭＢＲの情報を更新する。新規登録エントリＥの格納によるＭＢＲの拡大、あるいはノード分割によるＭＢＲの変更を反映する。ステップＳ１１０４で、分割を上位階層へ伝播する。具体的には、ステップＳ１００３における分割処理で新たに生成したノードを、ノードＮの親ノードに格納する。ここで、親ノードに空きがない場合には、ステップＳ１００３と同様の処理を行い、親ノードを分割する。ステップＳ１１０５で、現在のノードＮの親ノードを新たにノードＮに設定することで上位階層へ移動する。以降は、ステップＳ１１０２から処理を繰り返す。
【００６４】
図１２は実施形態１における検索実行部１１５の検索処理を示すフローチャートである。
【００６５】
本フローでは、ユーザが指定した検索領域Ｓ内に存在する空間データを検索する。初めに、ステップＳ１２０１で、ルートノード２０４を処理対象のノードＴに設定する。ステップＳ１２０２で、ノードＴ内のすべてのエントリのＭＢＲに対して、検索領域Ｓと領域が重複するか否かを判定する。ステップＳ１２０３で、ノードＴが葉ノード２０６であるか否かを判定する。ノードＴが葉ノード２０６である場合（ステップＳ１２０３でＹＥＳ）、ステップＳ１２０５へ進む。ステップＳ１２０５で、ステップＳ１２０２で検索領域Ｓと重複すると判定したエントリからリンクされる空間データを検索結果として返し、処理を終える。一方、ノードＴが葉ノード２０６でない場合（ステップＳ１２０３でＮＯ）、ステップＳ１２０４へ進む。ステップＳ１２０４で、検索領域Ｓと重複すると判定したエントリからリンクされる子ノードをルートノードとする部分木に対して、本フローを再帰的に実行する。
【００６６】
本方式では、前述の登録処理（図７）によって部分空間領域内の空き領域を削減するため、ステップＳ１２０２において検索領域Ｓと重複するエントリ数が、従来のＲ−Ｔｒｅｅより減少する。このため、ステップＳ１２０４での再帰処理の対象となる部分木が従来のＲ−Ｔｒｅｅに比べ減少し、検索時間を短縮することが可能である。
【００６７】
尚、実施形態１では、１つの撮影位置インデックス１１２で全データの撮影位置情報２０３を管理する構成としているが、複数の撮影位置インデックス１１２で撮影位置情報２０３を管理してもよい。この場合には、部分空間領域内における空き領域増加時に、撮影位置インデックス１１２の数を１つ増やし、新規の部分空間領域に相当するノードを、新たなインデックスに格納するよう構成することができる。この構成によれば、各インデックスを平衡木に保つことができ、探索処理を簡易化することができる。また、各インデックスを別ファイルに格納することで、インデックス１つ辺りのファイルサイズを縮小することができる。
【００６８】
また、実施形態１では、ベースとなる多次元インデックス方式としてＲ−Ｔｒｅｅを例に挙げているが、本方式の適用先はＲ−Ｔｒｅｅに限定されるものではない。Ｒ＊−ＴｒｅｅあるいはＳＲ−Ｔｒｅｅ等、多次元空間を部分空間領域に分割する多次元インデックス方法一般に適用が可能である。
【００６９】
以上説明したように、実施形態１によれば、空間データ登録時のインデックスノードに相当する部分空間領域の拡大値が閾値以上になる場合には、空間データを格納する部分空間領域を新規に生成することで、部分空間領域内の空き領域を削減する。この構成によって、少数の空間データが他の空間データ群から離れた位置に存在する場合にも、従来に比べ空き領域を削減することができ、検索時のノードの探索回数を減らすことができる。特に、写真データのような位置分布特徴を持つデータ集合に対して、検索性能を改善することができる。
【００７０】
（実施形態２）
以下、本発明の実施形態２を説明する。尚、実施形態１と同一構成部分についてはその説明を省略する。
【００７１】
実施形態１では、インデックス内のノードに相当する部分空間領域の拡大値が閾値以上となる場合に、新規の部分空間領域を生成することで、ノードの部分空間領域内の空き領域を削減する構成としている。
【００７２】
しかし、空間データとして写真データを用いる場合には、撮影位置のみではなく撮影時刻の情報も考慮する必要がある。例えば、２つの写真データの撮影位置の距離が離れている場合であっても、撮影時刻の差が小さい場合には、２つの撮影地点は短時間で移動可能であり、なおかつユーザは撮影を行いながら移動中であると判断することができる。この場合には、２地点間の中間地点にも、短時間の内にユーザが移動して撮影を行う可能性が高く、２つの撮影地点を別の部分空間領域に格納する必要性は低い。
【００７３】
そこで、実施形態２では、部分空間領域の拡大値に加え、空間データに付随する時刻情報を考慮し、新規の部分空間領域を生成するか否かの判定を行うことで、不必要な新規部分空間領域の生成を抑制する構成について説明する。特に、実施形態２では、実施形態１の図７のステップＳ７０２の格納先ノードの選択処理を、図１３に示すように実行する。
【００７４】
図１３は実施形態２のステップＳ７０２の処理の詳細を示すフローチャートである。
【００７５】
尚、実施形態１の図９と同一の処理については、同一のステップ番号を付加して、その説明は省略する。
【００７６】
ステップＳ９０１〜ステップＳ９０４の処理後、ステップＳ１３０５で、ステップＳ９０４で選択した格納先候補のエントリに対する拡大値が閾値以上であるか否かを判定する。拡大値が閾値未満である場合（ステップＳ１３０５でＮＯ）、格納先候補のエントリからリンクされる子ノードが格納先として適していると判定し、ステップＳ９０６へ進む。ステップＳ９０６では、格納先候補のエントリからリンクされる子ノードを、次の探索先ノードＮとして設定し、ステップＳ９０２から処理を繰り返す。
【００７７】
一方、ステップＳ１３０５で、拡大値が閾値値以上である場合（ステップＳ１３０５でＹＥＳ）、新規登録エントリＥをどのノードに格納したとしても、空き領域が大幅に増加すると判定し、ステップＳ１３０７へ進む。
【００７８】
ステップＳ１３０７で、新規登録エントリＥからリンクされる空間データの撮影時刻２０２（第１の時刻情報）を取得する（第１の時刻情報取得工程）。ステップＳ１３０８で、格納先候補のエントリ２０７から辿ることのできる空間データの撮影時刻２０２（第２の時刻情報）を取得する（第２の時刻情報取得工程）。ここでは、多次元インデックスを葉ノード２０６まで辿り空間データを取得した上で、画像管理テーブル１１１から該当する空間データの撮影時刻２０２を取得することができる。あるいは、中間ノードのエントリ２０７に、当該エントリ２０７より辿ることのできる空間データの撮影時刻２０２をコピーして保持しておく構成にしても良い。この場合には、多次元インデックスを葉ノード２０６まで辿ることなく、空間データの撮影時刻２０２を取得することができる。
【００７９】
尚、格納先候補のエントリ２０７から辿ることのできる空間データが複数存在する場合には、取得した撮影時刻２０２の内、最新の値を用いることが望ましい。通常、新規空間データは、格納先候補のエントリ２０７以下の空間データより後に撮影されたデータであり、部分空間領域間の移動時間を考慮するためには、部分空間領域内の最も新しい空間データとの撮影時刻差が必要であるためである。
【００８０】
ステップＳ１３０９では、ステップＳ１３０７及びステップＳ１３０８で取得した２つの撮影時刻２０２の差が一定値以上であるか否かを判定する。撮影時刻２０２の差が一定値未満である場合（ステップＳ１３０９でＮＯ）、２つの空間データの存在地点間は短時間で移動可能であると判定できる。この場合には、２つの空間データの存在地点間に近い将来新たな空間データが生成される可能性が高いため、これら２つの空間データを別の部分空間領域に格納する必要性は低い。従って、格納先候補のエントリからリンクされる子ノードが格納先として適していると判定して、ステップＳ９０６へ進む。一方、撮影時刻２０２の差が一定値以上である場合（ステップＳ１３０９でＹＥＳ）、ステップＳ９０７へ進む。
【００８１】
以上説明したように、実施形態２によれば、部分空間領域の拡大値に加え、空間データに付随する時刻情報を考慮し、新規の部分空間領域を生成するか否かを判定することが可能である。実施形態１と異なり、部分空間領域の領域拡大が大きい場合でも、領域内を短時間で移動可能と判断した場合には、新規部分空間領域を生成せず、同一ノードに格納する。この構成によって、不必要な新規部分空間領域の生成を抑えることができ、ノード数の増加によるインデックスサイズの肥大化を低減することができる。
【００８２】
尚、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005863494.tif 000002
【図２】
0005863494.tif 000003
【図３】
0005863494.tif 000004
【図４】
0005863494.tif 000005
【図５】
0005863494.tif 000006
【図６】
0005863494.tif 000007
【図７】
0005863494.tif 000008
【図８】
0005863494.tif 000009
【図９】
0005863494.tif 000010
【図１０】
0005863494.tif 000011
【図１１】
0005863494.tif 000012
【図１２】
0005863494.tif 000013
【図１３】
0005863494.tif 000014