(57)【特許請求の範囲】
【請求項１】
画像を格納する画像格納部と、
前記画像を文字認識処理し、一文字ごとの領域情報を抽出する文字認識部と、
一文字ごとの前記領域情報を前記画像のメタデータとして格納するメタデータ格納部と、
画像を検索するための文字列を入力する入力部と、
前記文字列の各文字に基づいて前記メタデータ格納部に格納されている一文字ごとの前記領域情報を検索する検索部と、
検索された前記領域情報から前記文字列の各文字に対応する中心座標をそれぞれ求め、複数の前記中心座標を用いて折れ線を生成する折れ線生成部と、
前記折れ線の連結スコアを求めるスコア算出部とを備える画像検索装置。
【請求項２】
前記連結スコアに基づいて前記折れ線を順位付けし、前記折れ線上の文字領域を前記画像に重畳し提示する検索結果提示部をさらに備えることを特徴とする請求項１記載の画像検索装置。
【請求項３】
文字認識部が、画像格納部に格納された画像を文字認識処理し、一文字ごとの領域情報を抽出するステップと、
メタデータ格納部が、一文字ごとの前記領域情報を前記画像のメタデータとして格納するステップと、
入力部が、画像を検索するための文字列を入力するステップと、
検索部が、前記文字列の各文字に基づいて前記メタデータ格納部に格納されている一文字ごとの前記領域情報を検索するステップと、
折れ線生成部が、検索された前記領域情報から前記文字列の各文字に対応する中心座標をそれぞれ求め、複数の前記中心座標を用いて折れ線を生成するステップと、
スコア算出部が、前記折れ線の連結スコアを求めるステップとを備える画像検索方法。
【請求項４】
コンピュータを、
画像を格納する手段と、
前記画像を文字認識処理し、一文字ごとの領域情報を抽出する手段と、
一文字ごとの前記領域情報を前記画像のメタデータとして格納するメタデータ格納手段と、
画像を検索するための文字列を入力する入力部と、
前記文字列の各文字に基づいて前記メタデータ格納手段に格納されている一文字ごとの前記領域情報を検索する手段と、
検索された前記領域情報から前記文字列の各文字に対応する中心座標をそれぞれ求め、複数の前記中心座標を用いて折れ線を生成する折れ線生成部と、
前記折れ線の連結スコアを求める手段と、
として実行させるための画像検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、画像検索装置に関する。
【背景技術】
【０００２】
利用者がカメラで撮影したビットマップ画像などに含まれる文字を認識することによって、画像検索することが検討されている。
【０００３】
フォーマットがきっちり決まっている書類などと異なり、ビットマップ画像は文字認識がうまく働かないことが多く、文字列の抽出精度が低い。したがって、利用者が文字列によってビットマップ画像を検索する場合の再現性が低下するという問題がある。
【０００４】
例えば、電車・バスなどの中吊り広告や看板に含まれる文字に至っては縦横に規則正しく並んでいるとはかぎらない。さらには１つの画像中でさえいろいろな方向に文字が並んでいることがあるため、レイアウトを正しく解析することが難しい。
【０００５】
また、ビットマップ画像においては明るさの変化が大きく、かつ文字のサイズと比較して文字同士の間隔が広いことが多いため、本来は１つであるべき領域が細かく複数の領域に分割されてしまうなど、単語としての塊を抽出することが困難である。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】辻  智彦、他２名、“リアルタイム単語認識技術を利用したカメラベース情報取得システム”、平成２１年０２月１８日、信学技報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
いろいろな方向に文字が並んでいる場合でも、文字列の抽出を行なうことのできる画像検索装置を提供する。
【課題を解決するための手段】
【０００８】
本実施形態の画像検索装置は、画像を格納する画像格納部と、前記画像を文字認識処理し、一文字ごとの領域情報を抽出する文字認識部と、一文字ごとの前記領域情報を前記画像のメタデータとして格納するメタデータ格納部と、画像を検索するための文字列を入力する入力部と、前記文字列の各文字に基づいて前記メタデータ格納部に格納されている一文字ごとの前記領域情報を検索する検索部と、検索された前記領域情報から前記文字列の各文字に対応する中心座標をそれぞれ求め、複数の前記中心座標を用いて折れ線を生成する折れ線生成部と、前記折れ線の連結スコアを求めるスコア算出部とを備える。
【図面の簡単な説明】
【０００９】
【図１】本実施形態に係る画像検索装置１００の構成を示す図。
【図２】画像領域分割部１２０と文字認識部１３０における処理の流れを示す図。
【図３】文字認識部１３０による処理結果を示す図。
【図４】メタデータ格納部１５０に格納された、一文字ごとの領域情報の例を示す図。
【図５】曖昧性を含んだクエリがクエリ入力部１６０に入力された場合の説明図。
【図６】折れ線生成部１８０における処理の流れを示す図。
【図７】折れ線生成部１８０によって生成された折れ線の例を示す図。
【図８】スコア算出部１９０での連結スコア付け戦略の例（１）を示す図。
【図９】スコア算出部１９０での連結スコア付け戦略の例（２）を示す図。
【図１０】スコア算出部１９０での連結スコア付け戦略の例（３）を示す図。
【図１１】スコア算出部１９０での連結スコア付け戦略の例（４）を示す図。
【図１２】図７の折れ線に対する連結スコアの例を示す図。
【図１３】検索結果提示部２００における検索結果の表示例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について図面を参照しながら説明する。
【００１１】
図１は、本実施形態に係る画像検索装置１００の構成を示す図である。画像検索装置１００は、利用者から画像の入力を受け付ける画像入力部１１０と、入力した画像を区分的な大きさの領域に分割する画像領域分割部１２０と、分割した領域ごとに文字認識処理を行なって１文字ごとの領域情報を抽出する文字認識部１３０と、入力した画像データそのものを格納する画像格納部１４０と、抽出した１文字ごとの領域情報を当該画像のメタデータとして格納するメタデータ格納部１５０を備えている。
【００１２】
そして、利用者が画像を検索するためにクエリ文字列をクエリ入力部１６０に与えるたびに、クエリ文字列に含まれている各文字に対応する１文字ごとの領域情報をメタデータ格納部１５０から検索する領域情報検索部１７０と、検索された領域情報に基づいてクエリ文字列の各文字に対応する中心座標をそれぞれ求め、これらの中心座標を用いて折れ線を生成する折れ線生成部１８０と、生成されたそれぞれの折れ線の連結スコアを求めるスコア算出部１９０と、算出した連結スコアに基づいてそれぞれの折れ線のランキングを行ない、画像格納部１４０に格納された画像と折れ線上の文字領域を検索結果として重畳させて提示する検索結果提示部２００を備えている。
【００１３】
画像領域分割部１２０は、画像入力部１１０で利用者から受け取った画像を区分的な大きさの領域に分割する。これは、本実施形態が主として対象とするビットマップ画像においては既存の文字認識がうまく働かないことが多く、文字列としての抽出精度が低いためである。言い換えれば、１文字ごとの認識精度は比較的高いが、縦横のつながりが複雑なために正しい単語として認識できないためである。例えば、電車・バスなどの中吊り広告や看板に含まれる文字は縦横に規則正しく並んでいるとはかぎらないため、レイアウトを正しく解析することが難しい。
【００１４】
ところで、画像の一領域が、雑誌や展示会のパネルのように既存のレイアウト解析装置でレイアウトが正しく解析できる場合、正しく解析できた領域については認識結果の文字列を用いて既存技術で画像を検索することができる。したがって、画像領域分割部１２０は、既存技術で正しく解析できなかった領域のみを区分的な大きさの領域へ分割してもよい。
【００１５】
図２は、画像領域分割部１２０と文字認識部１３０における処理の流れを示すフローチャートである。画像領域分割処理及び文字認識処理でははじめに最小領域サイズＳを決定する（Ｓ２００）。この最小領域サイズＳは、画像のサイズと関係なくあらかじめ画素数で設定しておいてもよいし、処理の対象となる画像の縦または横の長さに対する割合で決定してもよい。どの画像に対しても同じ最小領域サイズを用いる場合は画像サイズが大きくなると処理量が非常に多くなる可能性があり、画像の縦または横の長さに対する割合で決定する場合は画像サイズが小さくなると粗くなりすぎる可能性があるので、両者を組み合わせてＳを決定しても良い。Ｓを決定した後、文字認識を行なう対象領域のサイズをＳを元にして少しずつ広げ、広げた対象領域をＸ軸Ｙ軸ともに少しずつずらして行き、その対象領域に含まれる文字が何であるかを抽出する、ということを繰り返すことになる。
【００１６】
具体的には、まずＸ軸方向の区分数ＣＸ＝画像の横の長さ／Ｓと、Ｙ軸方向の区分数ＣＹ＝画像の縦の長さ／Ｓを求める（Ｓ２１０）。図３に示す画像の例ではＣＸ＝２１、ＣＹ＝１５となっている。続いてＮ＝１とおく。このＮは最小領域サイズのいくつ分まで文字認識を行なう対象領域のサイズを広げたかを表す数値である（Ｓ２２０）。
【００１７】
Ｎを１ずつ増やしつつＮ×Ｓが閾値より大きくなるまで以下のようにして対象領域に含まれる文字が何であるかの抽出を繰り返す（Ｓ２３０、Ｓ３１０）。
【００１８】
まず対象領域のＸ軸方向の位置をＩ、Ｙ軸方向の位置Ｊとすると、対象領域のサイズはＮなので０≦Ｉ≦ＣＸ−Ｎ、０≦Ｊ≦ＣＹ−Ｎである。従ってＩ＝０、Ｊ＝０とおき（Ｓ２４０、Ｓ２６０）、それぞれを１ずつ増やしながら（Ｓ３２０、Ｓ３００）文字認識を行ない（Ｓ２８０）、文字が認識された場合は認識結果をＤＢに格納する（Ｓ２９０）。
【００１９】
例えばＮ＝１のときは、図３に示す一番小さな升目２１×１５個のすべてに対して文字認識を行なう。図３の場合はこの大きさの升目に相当する文字が存在しないため、抽出されていない。続いてＮ＝２のときは、図３に示す一番小さな升目が縦横に２個ずつならんだ升目２０×１４個のすべてに対して文字認識処理を実行する。図３の場合はＲ３、Ｒ４、Ｒ５がこの大きさの升目に相当する文字のため、「タ」、「ナ」、「カ」が抽出されている。さらにＮ＝３のときは、図３に示す一番小さな升目が縦横に３個ずつならんだ升目１９×１３個のすべてに対して文字認識処理を実行する。図３の場合はＲ１、Ｒ２、Ｒ６がこの大きさの升目に相当する文字のため、「カ」、「メ」、「ラ」が抽出されている。
【００２０】
図４は、メタデータ格納部１５０が図３に示す画像から抽出された１文字ごとの領域情報を格納した例である。この図では、画像格納部１４０に格納された画像ＩＤがＰ１である画像から、領域ＩＤがＲ１からＲ６までの６つの領域が抽出されていることを表している。例えば領域Ｒ１の中心座標は（Ｘ１、Ｙ１）であり、文字は「カ」、サイズは３２ピクセル、フォントはゴシック、色は黒であることを示している。同様に、領域Ｒ３の中心座標は（Ｘ３、Ｙ３）であり、文字は「ナ」、サイズは２０ピクセル、フォントはゴシック、色は赤であることを示している。図４に示すように本実施形態では簡単のために文字認識結果が一意になるように領域情報をＤＢに格納しているが、文字認識の結果に曖昧性がある場合は、同じ領域に対しても文字を一意にせず、確信度も持たせて別々の文字として格納してもよい。また図４の場合は抽出された領域がどれも重なっていないが、漢字などの場合は構成要素を他の文字と認識する可能性もあるため、抽出された領域同士は重なっていてもよい。あるいはサイズ・フォント・色のほかに文字認識装置を用いて抽出できる情報があれば、それらも１文字ごとの領域情報としてメタデータ格納部１５０に格納してもよい。
【００２１】
次に、このように抽出・格納された画像のメタデータとしての１文字ごとの領域情報を用いて、画像を検索する処理について説明する。クエリ入力部１６０は利用者から画像検索のためのクエリ文字列を受け取り、１文字ごとに分割する。例えば「カメラ」というクエリ文字列が与えられた場合は「カ」、「メ」、「ラ」と分割する。本実施形態では簡単のために各文字が確定しているクエリ文字列を入力として受け取るものとしているが、画像を文字認識処理にかけた結果のように曖昧性を含んだ文字列を入力としてもよい。
【００２２】
図５は、曖昧性を含んだクエリがクエリ入力部１６０に入力された場合を説明するための図である。例えば図５に示すような画像を文字認識処理にかけた場合、１文字目と３文字目は「カ」、「ラ」と確定しているが、２文字目が「メ」なのか「ナ」なのか曖昧性を含んでいる。しかしこの場合も、「カメラ」というクエリ文字列の連結スコアを0.7、「カナラ」というクエリ文字列の連結スコアを0.3といったように、各文字の確信度を連結スコアに乗じた複数のクエリ文字列を与えたものとみなすことができるため、以下では曖昧性を含んだ文字列については説明を省略する。
【００２３】
分割されたクエリ文字列は領域情報検索部１７０に送られる。領域情報検索部１７０は、メタデータ格納部１５０に格納されている画像のメタデータ、すなわち、当該画像の一文字ごとの領域情報を検索し、クエリ文字列のすべての文字を含んでいる画像ＩＤをすべて列挙する。このとき「アルバニア」のように同じ文字が複数回出現しているクエリ文字列の場合は「ア」が画像に２個以上含まれていないと最終的な検索結果としては適合しないが、後述する折れ線の連結スコア付けで検索結果として適合しないという処理を施すことができるので、この時点では画像に含まれている個数は無視してすべての文字を含んでいるかどうかだけに基づいて検索を行なえばよい。
【００２４】
続いて、上記のようにして得られたクエリ文字列のすべての文字を含んでいる画像から、折れ線生成部１８０が折れ線を生成する処理について説明する。図６は、折れ線生成部１８０における処理の流れを示すフローチャートである。この図は、再帰的な処理を含むためわかりづらくなっている。そのため以下では擬似コードを用いて概要を説明する。下記の２つの関数のうちGetSsが折れ線生成処理のメイン関数であり、GetSsSubが再帰的な処理を担当するサブ関数である。
【００２５】
GetSs(クエリ文字列Q, クエリ文字列のすべての文字を含んでいる画像群Ps) {
折れ線集合Ss = {}  // S600
foreach (画像P : Ps) {  // S610
I = 0
S = []
GetSsSub(P, Q, I, S, Ss) // S620
}
return Ss // S680
}
GetSsSub(画像P, クエリ文字列Q, インデクスI, 折れ線バッファS, 折れ線集合Ss) {
if (Iがクエリ文字列Qの長さに等しい) { // S630
折れ線集合Ssに折れ線バッファSを追加 // S660
return
}
foreach (領域R : 画像Pに含まれるクエリ文字列QのI番目の文字Q[I]の領域情報) { // S640, S650
GetSsSub(P, Q, I + 1, S + Rの中心座標, Ss) // S670
}
}
メインのGetSs関数は、生成される折れ線の集合Ssを初期化（Ｓ６００）した上ですべての画像に対してGetSsSub関数を呼ぶ（Ｓ６１０）。GetSsSub関数を呼ぶときには折れ線バッファSを初期化し、Ｉ＝０とする（Ｓ６２０）。GetSsSub関数は、Ｉを１ずつ増やしながら（Ｓ６７０）、Ｉがクエリ文字列の長さより小さい間は（Ｓ６３０）クエリ文字列の各文字に対応する領域をすべて列挙し（Ｓ６４０）、すべての組合せの生成を行なう（Ｓ６５０）。したがって全体では網羅的な折れ線の生成が行なわれることになる。ちなみにフローチャートにおいてＩを１増やす処理（Ｓ６７０）はGetSsSubを呼んで再帰を１段下がることに相当し、Ｉを１減らす処理（Ｓ７１０）はGetSsSubから抜けて再帰を１段上がることに相当する。なお折れ線バッファＳは処理途中のデータを格納しているだけなので、再帰を１段あがるとＳから最後の中心座標を削除する必要がある（Ｓ６８０）。そのためクエリ文字列に対して生成された折れ線は、折れ線集合Ｓｓに追加してやる必要がある（Ｓ６６０）。
【００２６】
図７は、折れ線生成部１８０によって生成された折れ線の例を示す図である。画像P1には「カ」が２つ含まれているため「カメラ」というクエリ文字列に対して２×１×１＝２つの折れ線集合が生成されている。画像P2には「カ」も「メ」も２つずつ含まれているため、２×２×１＝４つの折れ線集合が生成されている。画像P3には１つずつしか含まれていないため１つの折れ線のみ生成されている。ここで、「×」はGetSsSub関数の繰り返し計算を意味する。
【００２７】
次に、スコア算出部１９０が、生成された折れ線集合に対して連結スコアを算出する処理について説明する。連結スコアの算出方法としてはさまざまなものが考えられる。一番単純な連結スコア付け戦略は、折れ線集合を構成する線分があらかじめ設定してある図形の上にすべて存在するかどうかで１又は０の連結スコアを与えるというものである。ビットマップ画像であっても、人間が読める文字列であれば視線の流れが急激に変化することはないと考えられるため、図形としては例えば直線や円弧などが考えられる。
【００２８】
ただし直線や円弧などの上に有るか無いかだけでは少し外れただけの折れ線の連結スコアも０になってしまう。そこで、図８の連結スコア付け戦略の例（１）に示すように、折れ線を構成するすべての線分を含む２本の平行線や同心円を求めてその間隔Ｄを真の直線や円弧からの誤差とみなして連結スコアを計算するようにしてもよい。
【００２９】
逆に、視線の流れが不自然な折れ線について連結スコアを下げるという戦略が考えられる。例えば線分同士が交差している、あるいはループしているということは視線が文字の間を行ったり来たりしているということであり、自然な視線の流れではない。そのため図９の連結スコア付け戦略の例（２）に示すように、線分同士が交差するあるいはループする折れ線は連結スコアとして−∞を与え、検索結果から除外するようにしてもよい。
【００３０】
あるいは線分の向きに応じてあらかじめ連結スコアの関数を設定しておき、折れ線を構成する一つ一つの線分ごとに連結スコアを求め、すべての線分の連結スコアの合計や最大値を用いるという連結スコア付け戦略も考えられる。図１０に示す連結スコア付け戦略の例（３）は、線分の向き（角度）と連結スコアの対応を定義した関数の例である。人間の視線の流れという観点からは、文字列は典型的には左から右（０度）や上から下（２７０度）に向かうためこれらの角度で大きな値をとり、右から左（１８０度）下から上（９０度）に向かうことはほとんどありえないためこれらの角度で小さな値をとる関数となっている。
【００３１】
そのほか、一つ手前の線分との角度の差分、長さの差分、長さの比などに応じてあらかじめ連結スコアの関数を設定しておき、折れ線を構成する線分間の連結スコアを求め、すべての線分間の連結スコアの合計や最大値を用いるという連結スコア付け戦略も考えられる。図１１に示す連結スコア付け戦略の例（４）は、角度の差分、長さの差分、長さの比と連結スコアの対応を定義した関数の例である。視線の流れという観点からは、文字列は典型的には等間隔で並んでいると考えられるため、角度の差分や長さの差分は０に近いほど、長さの比は１に近いほど大きな値をとる関数となっている。ただし、ビットマップ画像においては射影ひずみが生じることが多く、このような場合は長さは等間隔ではなく、一定比率で小さくなっていく。そのため長さの比に関しては、１より小さな値で大きな値をとる関数であってもよい。
【００３２】
以上の説明では折れ線を構成する線分の上または周囲に他の文字領域が存在しないことを前提としてきたが、一般的には他の文字領域が存在する場合も考えられる。しかしながら線分が周囲のほかの文字領域を横断するということは、視線がほかの文字領域を横断しているということであり、自然な視線の流れではない。そのためこのような場合にはスコアを低くするようにしてもよい。
【００３３】
いくつか連結スコア付け戦略を説明してきたが、本実施形態におけるスコア算出部１９０においてはこれらのどれか１つを選択して連結スコアを算出してもよいし、複数のスコア付け戦略によって算出された連結スコアの合計や最大値などを用いてもよい。また折れ線を構成する線分の頂点に対応する領域情報について、文字の属性（サイズ・フォント・色など）の類似度に応じて連結スコアを調整してもよい。
【００３４】
図１２は、図７に示す折れ線の例に対しての連結スコアの例を示す図である。ここで、スコア算出部１９０の連結スコア付け戦略はクエリ文字列を与えるたびに変更してもよいが、通常は固定的である。したがって同一の折れ線に対する連結スコアは固定的である。すなわち一度折れ線に対して算出した連結スコアを保存しておき、次回以降同じクエリ文字列が与えられたときは保存しておいた値を読み出すようにすれば、次回以降の検索においては折れ線の生成処理を省略して高速化することができる。
【００３５】
最後に、検索結果提示部２００は、スコア算出部１９０によって算出された連結スコアを元に折れ線のランキングを行ない、上位のものについて対応する画像を画像格納部１４０から取得し、折れ線に対応する文字領域を画像に重畳させて表示する。
【００３６】
図１３は、検索結果提示部２００における検索結果の表示例を示す図である。重畳表示の方法としてはさまざまな方法が考えられるが、本実施形態では折れ線に対して文字のサイズの幅を持たせた領域を枠線で囲んで表示する。このとき図１２の例ではランキング上位の折れ線S2-1とS2-3が一つの画像P2に関連しているが、いくつもの折れ線を重畳表示させると見づらくなるため一つの画像に対しては最も連結スコアが高い折れ線のみを表示するようにしている。画像に対して対応する領域を明示的に重畳表示することによって、どのような並びでクエリ文字列が出現しているかを確認できるため利用者にとってわかりやすい検索結果の提示を実現することができるようになる。
【００３７】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００３８】
１００  画像検索装置
１１０  画像入力部
１２０  画像領域分割部
１３０  文字認識部
１４０  画像格納部
１５０  メタデータ格納部
１６０  クエリ入力部
１７０  領域情報検索部
１８０  折れ線生成部
１９０  スコア算出部
２００  検索結果提示部
【図１】
0005395770.tif 000002
【図２】
0005395770.tif 000003
【図３】
0005395770.tif 000004
【図４】
0005395770.tif 000005
【図５】
0005395770.tif 000006
【図６】
0005395770.tif 000007
【図７】
0005395770.tif 000008
【図８】
0005395770.tif 000009
【図９】
0005395770.tif 000010
【図１０】
0005395770.tif 000011
【図１１】
0005395770.tif 000012
【図１２】
0005395770.tif 000013
【図１３】
0005395770.tif 000014