以下、添付図面を参照しながら本発明の実施形態を説明する。
<実施形態1>
図1は、実施形態による画像認識方法の基本的な処理構成を説明する図である。図2は、実施形態による画像認識方法の処理手順を示すフローチャートである。
まず、部分画像サイズ決定部101で、切り出す部分画像のサイズ102を事前に決定する。この部分画像サイズ決定部101の処理内容の詳細は実施形態4で説明する。ここでは、適切な部分画像サイズ102が部分画像サイズ決定部101によって事前に決定されるものとする。
ここで、認識時に比較対象となる画像を登録する場合、第1の抽出手段である登録部分画像集合抽出部104により、部分画像サイズ102に基づいて、登録画像103から登録部分画像集合105が取り出される。取り出された登録部分画像集合105が登録画像毎にM枚、登録画像の数がN枚だとすれば、登録部分画像集合105は全部でN×M枚となる。更に、辞書作成部113により、登録部分画像集合105から認識用の辞書114を作成する。ただし、認識用の辞書114を作成する処理は必須ではなく、登録部分画像集合105をそのまま利用して認識するようにしてもよい。
一方、新規画像を認識する場合、第2の抽出手段である新規部分画像集合抽出部107により、新規画像106から部分画像サイズ102の新規部分画像集合108が抽出される。そして、部分画像属性判定部109で、先に抽出された登録部分画像集合105もしくはそれから作成された辞書114を元に新規部分画像集合108を構成する各新規部分画像の属性が判定される。
最後に、新規部分画像集合108の各要素である新規部分画像の判定結果110を部分画像判定結果集計部111で集計し、最終的な認識結果112が得られる。なお、実施形態1においては、部分画像判定結果110は属性の判定結果だけであるが、実施形態2では、部分画像判定結果110にその部分画像の画像内の位置を表わす位置情報115が含まれる。詳しくは実施形態2の説明で述べる。
部分画像集合抽出部107で抽出される新規部分画像集合108を構成する部分画像がK枚だとする。この時、もしも部分画像属性判定部109で、特許文献1に代表されるような、いわゆるテンプレートマッチングと呼ばれる処理を採用すると、全部でN×M×K回の照合処理をする必要がある。この時、部分画像属性判定部109では登録部分画像集合105が用いられる。
これに対して、本実施形態に示す方法では、いわゆる機械学習を取り入れることでこの処理回数をK回に削減できる。この時、部分画像属性判定部109では辞書114が用いられる。
なお、一般には上記説明した定数Mと定数Kの関係はM≠Kである。しかし、登録画像のサイズと新規画像のサイズが同じ場合、例えばそれぞれの画像に含まれる全部分画像を用いるとM=Kの関係が成り立つ。登録画像のサイズと新規画像のサイズが異なる場合は実施形態3で詳しく説明する。
部分画像判定結果集計部111をより具体的に説明する。部分画像属性判定109における“属性”とは、一般には(p1,p2,・・・,pN)というN次元の確率ベクトルを意味する。ここにPiとは新規部分画像がi番目の登録画像に含まれる確率である。新規部分画像集合108がK枚から構成されている場合、このN次元確率ベクトルがK個存在することとなる。最終的な認識結果112は、これらK個の確率ベクトルを単純に相加平均、または、対数を取った後の相加平均(K個の確率を掛け合わせる相乗平均に対応する)などの処理をして得られる平均確率の中で、最大確率を示す登録画像のインデックスとなる。
図2において、(a)が学習時のフローチャートで、(b)が判定時のフローチャートとなる。
学習時は、登録画像それぞれについてステップS101〜S105のループが実行され、各登録画像において、部分画像のそれぞれについてステップS102〜S104のループが実行され、登録部分画像集合105が作成される。ステップS101〜S105の登録画像のループはN回実行され、ステップS102〜S104の部分画像のループはM回実行され、ステップS103の部分画像抽出は合計でN×M回実行される。
本実施形態の画像認識方法では、望ましくは、ステップS106で、登録部分画像集合105から辞書114を作成する。但し、本実施形態は、このいわゆる機械学習の枠組みを用いる方法に限ったものではなく、登録部分画像集合105をそのまま用いて画像マッチングを行っても良い。
図2の(b)が判定時のフローチャートで、まず、新規画像からそれに含まれる部分画像を抽出しながら部分画像の属性を判定するループ(S106〜S109)が実行される。このループはK回実行される。ステップS107で抽出される部分画像は108の新規部分画像集合108を構成する1枚の新規画像中の部分画像である。
ステップS109では、登録部分画像集合105または辞書114を用いて新規部分画像から部分画像判定結果110を導く。
ステップS110において、部分画像判定結果110を集計して最終的な認識結果112が導かれる。
図3は、本実施形態を含む全ての実施形態に係わる画像認識方法が実行される情報処理装置の構成を示すブロック図である。
画像認識方法は、外部記憶装置201、中央処理装置(CPU)202、メモリ203、入出力装置204を備えた装置に実装される。外部記憶装置201は、本実施形態の処理を実現するプログラムや、カメラで撮影した登録画像、登録画像を用いて作成された辞書114等を保持する。また、本実施形態によって導かれた対象物体の認識結果を保持する機能を持つ。CPU202は、画像認識方法のプログラムを実行したり、装置各部の制御を行ったりする。メモリ203は、CPU202が使用するプログラム、及びサブルーチンやデータを一時的に記憶する。入出力装置204は、カメラからの画像を取り込んだり、ユーザーとのインタラクションを行ったり、画像認識結果を他の情報処理装置へ出力したりする。入力装置としてはカメラが一般的であるが、スキャナーなどの装置も利用できる。また、本実施形態の画像認識方法を実現するプログラム実行のトリガーを、この入出力装置を介してユーザーが出す場合もある。また、ユーザーが結果を見たり、プログラムのパラメータ制御をこの入出力装置を介して行うこともある。また、出力先としてはロボットを制御する装置のような場合も有り得る。
図4を用いて、部分画像属性判定部109の処理を詳しく述べる。本実施形態の画像認識方法では、いわゆる機械学習の手法を想定している。この場合、部分画像属性判定部109の処理は、学習フェーズと認識フェーズの2つのフェーズに分れる。
まず、学習フェーズでは、学習部302において、登録部分画像集合301から判別器303が作成される。判別器303では、ニューラルネット、サポートベクターマシン等の機械学習で一般的に用いられるアルゴリズムを用いることができる。より好ましくは、図6以降で述べる分類木の集合を用いた方法を採用することができる。
判別器303は、部分画像の属性をルールに従って判別するものであり、その実態は、採用したアルゴリズムの学習後の内部パラメータである。具体的には、ニューラルネットであれば全てのコネクションの重みの集合となり、サポートベクターマシンであれば全てのサポートベクトルの集合となる。分類木の場合は、木構造の各インターナルノードでの判定パラメータ集合と各ターミナルノードにおけるクラス存在確率の集合が内部パラメータとなる。ここで、インターナルノードとは、子ノードがあるノードで、ターミナルノードとは子ノードがない末端のノードのことを意味する。
認識フェーズでは、属性判定部305において、新規画像から抽出された新規部分画像を判別器303を用いて判定し、属性判定結果306を得る。なお、新規部分画像304は、図1の新規部分画像集合108を構成する各要素に対応し、属性判定結果306は図1の部分画像判定結果110に対応する。
図3の属性判定部305では、属性判定という表現を用いたが、機械学習の分野では通常は認識と呼ぶ。というのも、属性判定部305では新規部分画像と登録部分画像を1枚1枚照合するわけではなく、学習した全ての登録部分画像群の情報が格納されている判別器303に基づいて新規部分画像がどの登録部分画像とどれだけ似ているかを導くからである。
本実施形態においては、新規部分画像304が複数あり、部分画像判定結果306も複数ある。それを図1の部分画像判定結果集計部111において集計することによって、最終的な認識結果112が求まる。属性判定部305に敢えて認識という表現を用いなかったのは、この最終的な認識結果を得るのではないことを強調したかったためである。
従来のパターンマッチングの方法であれば、この属性判定部305において、登録部分画像集合105と新規部分画像集合108の全ての組み合わせ毎の処理が必要となる。これに対して、本実施形態では、基本的に新規部分画像集合108の要素の数しか処理の回数は必要ない。
次に、図5を用いて登録部分画像集合105の説明をする。1枚の登録画像(学習画像)からM枚の部分画像が抽出される。これを部分画像集合と呼ぶ。この部分画像集合を構成する部分画像同士は重なりがなくても良いが、重なりがあるように網羅的に元の学習画像から抽出されることが望ましい。
例えば学習画像のサイズが100×100ピクセルで、部分画像のサイズが50×50ピクセルだったとする。ピクセルとピクセルの中間の位置(いわゆるサブピクセル)を考慮に入れないとすると、1枚の学習画像から抽出される全部分画像は2601(=51×51)枚となる。なお、重なりのない部分画像を抽出したとすると全部で2×2=4枚の部分画像が得られる。
部分画像集合は2601枚ある全部分画像に含まれる、出来るだけ多く(例えば半分以上)の部分画像からなることが望ましい。最終的な学習(登録)部分画像群としては、同じクラス(=登録画像のインデックスと同義)にタグ付けされた登録部分画像がそれぞれM枚ずつ、全部でM×N枚の学習部分画像が得られる。
次に、学習アルゴリズムの説明をする。図6は学習部302の処理を模式的に表した図である。また、同じ図を使って属性判定部305の処理も説明する。
本実施形態の学習では、分類木と呼ばれる木構造の判別器がL個作られる。Lは1でもよいが、10〜30の数が望ましい。分類木はインターナルノードとターミナルノードから構成されている。インターナルノードでは、どの子ノードへ行くべきかという判定式、判定のルールもしくは判定ルーチンが存在する。ターミナルノードでは、認識対象のクラスの存在確率が保持されている。
学習フェーズでは、図5に示した学習部分画像群を用いて2分木を作成していく。全部でL個分類木が存在するので、この分類木作成はL回行われる。分類木作成の際、各分類木のインターナルノードでは、ランダムに2つのピクセルを選び、そのピクセルの輝度比較をすることにより、学習部分画像群に含まれる部分画像の集合を2つに分けていく。この処理の詳細な説明は図7を用いて後で述べる。
なお、本実施形態においてはランダムに2つのピクセルを選んだが、部分画像中の任意の矩形領域をランダムに2つ選んで、その矩形領域の平均輝度を比較することによって枝分れを行ってもよい。また、矩形ではなく予め用意した複数のマスクパターンを用いて部分画像中の任意の位置にある任意の種類のマスクパターンをランダムに2つ選んで、その領域の平均輝度を比較することによって枝分かれを行っても良い。
新規部分画像をこの分類木の集合を使って処理する属性判定部305では、分類木をたどる処理をL回することになる。新規部分画像を参照しながら分類木を辿った結果、最終的にL回ターミナルノードに行き着く。登録画像がN枚あるとすると、一般的にはそれぞれのターミナルノードではN個の存在確率のベクトル(p1,p2,…,pN)が格納されているので、結局、L個の確率ベクトルが得られる。最終的にはこれらL個の確率ベクトルを単純に相加平均、または、対数を取った後の相加平均(L個の確率を掛け合わせる相乗平均に対応する)などの処理をして得られる平均確率が、本実施形態の属性判定部305の最終出力となる。なお、上記平均確率を先鋭化する方法として、一番確率の高い値以外の確率を0としてもよい。これはいわゆるL個の分類木の認識結果の投票で一番得点の高かったクラスを属性判定部305の結果とすることに相当する。
次に、属性判定部305による計算時間のオーダーを解析してみる。上記の分類木の個数Lは定数なので、計算時間のオーダーには関係ない。計算時間は、分類木の深さに比例し、最大値としては登録する画像の数の対数に比例して増加する。つまり、本実施形態の画像認識方法の場合、どんなに遅くてもlog(登録部分画像の数)のオーダーの計算時間しか必要ないことになる。これに対して例えば特許文献1で開示されたような従来の画像照合方法では、登録部分画像の枚数のオーダーで計算時間が必要になってくる。
図7を用いて学習部302の具体的な処理を説明する。
分類木の作成はサブルーチン601のSplit_a_node(S)を再帰的にコールすることによって実現される。サブルーチンSplit_a_node(S)はサブルーチン602のPick_a_random_split(S)とサブルーチン603のStop_Split(S)をコールする。
分類木のトップのノード(ルートノード)に存在する画像は登録部分画像全部であり、Split_a_node(S)を最初にコールする時のSは登録部分画像の全部となる(全体集合も部分集合の1種)。
再帰的にサブルーチン601が呼び出されるということは、Split_a_node(S)の結果、登録部分画像の集合がS0とS1の2つの集合に分割され、Split_a_node(S0)とSplit_a_node(S1)が実行されることを意味する。
サブルーチン601のSplit_a_nodeの中身は、まずStop_split(S)をコールし、返り値がTRUEの場合、そのノードをターミナルノードとして再帰呼び出しを終了する。ターミナルノードでは、これまで説明してきた通り、クラスの存在確率が格納される。このクラスの存在確率は、サブルーチンSplit_a_nodeの引数であるSから、Sの中の登録画像のクラスの個数を数えることにより求められる。例えば、Sの登録部分画像の集合の中に、ある登録画像の部分画像しか含まれなかったら、そのクラスの確率が1で、他のクラスの確率が0となる。
次に、Stop_split(S)の返り値がFALSEの場合、Z回Pick_a_random_split(S)をコールする。(例えばZ=1000)そして、もしPick_a_random_split(S)の返り値となる分割がOKだったら、ループを終了してその分割を返す。OKかどうかの判定はSOとS1のどちらにも1個以上の登録部分画像が含まれる条件となる。(|S|は集合Sに含まれる要素の数を意味する) Z回Pick_a_random_split(S)を試みてもOKな分割ができない場合は、そのノードをターミナルノードとして再帰処理を終了する。
Pick_a_random_split(S)ルーチンは、図6で説明してきた通り、画像中の2つのピクセルをランダムに選び、それらの輝度比較をする。
サブルーチン603のStop_Split(S)はターミナルノードの条件が満たされるかどうかを判定するルーチンである。entropy(S)とは登録部分画像の集合Sの情報論的エントロピーでクラスの存在確率を(p1,p2,・・・,pN)とすると 式 −Σ(pi*log(pi))で計算される。例えばSがある登録画像に含まれる部分画像しか含まないとするとエントロピーは0となる。
このStop_Split(S)のthresholdの値を変更することで、どれだけノードがピュアになればターミナルノードにするかという基準を変えることができる。
例えばthresholdを0とすると、ターミナルノードには必ずある登録画像の部分画像しか含まないようになる。
なお、本実施形態において、関数Stop_Split(S)が常にTRUEを返すようにすることもできる。すると再帰的なノード作成(展開)は行われず、ルートノードとその子ノードしか存在しない構造が出来上がることになる。
続いて、図8を用いて、サブルーチン601のSplit_a_node(S)の動きを説明する。
登録部分画像の集合の要素が、例えば16個(登録部分画像の数が16枚)だったとする。するとルートノードには図8の左に書いた16枚の画像が存在することになる。
ルートノードでランダムに2つのピクセルを選び、登録部分画像集合に含まれる全部分画像をそれらの輝度比較をすることで2つの集合に分割する。図8の例では、左の子ノードに10枚の部分画像が残り、右の子ノードに6枚の部分画像が残ったことになる。なお、グレーアウトした画像は残らなかった画像を意味する。
次に、右の子ノードにおいて、サブルーチン603のStop_Split(S)の返り値がFALSEだった場合は、さらにその下の子ノードを展開する。その時は、また別の2つのピクセルをランダムに選び、それらの輝度比較をすることによって、集合を分割していく。
図8に示した例では、左の子ノード、右の子ノードとも3つの要素が残ったことになる。
<実施形態2>
図9を用いて実施形態2を説明する。
実施形態1においては、ある登録画像に含まれる部分画像を全て同じクラスとして扱ってきた。実施形態2においては、これを全て異なるクラスとして扱う。
なお、“クラス”とは、機械学習で判別するべき対象の種類のことで、通常、画像認識の場合は登録画像の種類となる。上で述べた「ある登録画像に含まれる部分画像を全て同じクラスとして扱う」ということは、ある登録画像に含まれる色々な部分画像群を、“見え”が異なるが同じ種類の画像群として扱うことを意味する。これに対して、「ある登録画像に含まれる部分画像を全て異なるクラスとして扱う」ということは、違う位置から取り出した部分画像は同じ登録画像由来であっても異なる種類のものだとして扱うことを意味する。具体的には、部分画像に位置情報を持たせることによって、部分画像1つ1つを区別する。
N枚の登録画像があり、1枚の登録画像につきM枚の部分画像があるとすると、実施形態1では登録部分画像が全部でM×N枚、クラスの数はNであった。実施形態2では、これが登録部分画像が全部でM×N枚、クラスの数のM×Nとなる。
図9を用いて、位置情報の具体的な例とその使い方を述べる。
図9では登録画像が登録画像Aと登録画像Bの2枚、1つの登録画像につき部分画像が重なりのない3×3=9枚あるとする。本実施形態では部分画像は好ましくは重なっているが、重ならなくても一般性を失わないので、簡単のために重ならない例を用いて以下、説明する。
図9に描かれている点線の矢印は、図1の部分画像判定結果110、図3の属性判定結果306で、最もマッチした登録部分画像と入力部分画像との組み合わせを示す。新規部分画像は9枚、そのそれぞれに登録部分画像18(=9+9)枚とのマッチング結果がある。一般的には、部分画像属性判定の結果、新規部分画像9枚それぞれに(p1,p2,・・・,p18)の18次元のクラス存在確率が導かれることになるが、簡単のために図に示した最もマッチした部分画像の確率が1でその他が0として、説明する。なお、以下の議論は、確率ベクトル(p1,p2,・・・,p18)による重み付け平均を計算することによって、一般の場合に拡張できる。
部分画像属性判定の結果、新規画像の部分画像9枚は、Aの部分画像6枚とBの部分画像3枚とマッチングしたことになる。正確にマッチした部分画像の枚数をスコアとすると、実施形態1の場合、Aの得点が6で、Bの得点が3となり、新規画像は登録画像Aと認識される。
しかし、“正確にマッチした部分画像”という定義を位置情報も含めて考えると、Aの得点が1で、Bの得点が3となり、新規画像は登録画像Bと認識される。これが実施形態2の一番簡単な例となる。
この場合、結果的に、新規画像の正しい認識結果がBだとすると、実施形態1の場合は間違いで、実施形態2の場合は正解となることになる。
なお、より精密にスコアを計算したい場合、マッチした部分画像の位置と本来マッチすべき位置との距離Dの関数を用いてスコアを算出しても良い。例えばexp(−C*D)、exp(−C*D*D)、1/(1+C*D*D)(Cは任意の正定数、expとは指数関数)などの関数(評価式)を用いても良い。
スコアにexp(−C*D)を用いた場合の計算式を以下に述べる。(簡単のために以下、Dは2次元上のユークリッド距離、C=1とする) 図9にあるように、新規部分画像と登録画像Aの部分画像は、新規部分画像9枚のうち、6枚の登録画像Aの部分画像とのマッチングがとれている。そして、それらの位置から2次元上の距離を計算すると、(左上A(0,1))、(右上A(0,0))、(左中A(0,1))、(左下A(2,2))、(中下A(2,2))、(右下A(0,2))がそれぞれ、
となる(ここで、上記の説明で、左上などの表記は新規画像における部分画像の位置を意味しており、それに続くA(0,1)などの表記はそれに対応するマッチング結果を意味する。)。その結果、Aのトータルスコアは、
一方、新規部分画像と登録画像Bの部分画像は、新規部分画像9枚のうち、3枚の登録画像Bの部分画像とのマッチングがとれている。そして、それらの位置から2次元上の距離を計算すると、(中上B(1,0))、(中中B(1,1))、(右中B(2,1))がそれぞれ、
なお、この例ではそれぞれマッチングが取れた部分画像同士のスコアを加算してトータルスコアを導いたが、乗算することでトータルスコアを導いてもよい。
<実施形態3>
図10、図11を用いて実施形態3を説明する。
実施形態1、実施形態2においては、登録画像は矩形の形をしていた。つまり、矩形の内部を全て登録画像として扱っていた。しかし、一般には、登録画像の矩形の内部は対象物と背景に分離することができる。例えば、図10の(a)に示した対象物は登録画像中の楕円の形をしているとする。本実施形態では、図1の登録部分画像集合抽出部104において、登録画像中の全ての部分画像を抽出するのではなく、対象物が存在する楕円の内部の部分画像のみを抽出する。このことで、背景の画像を抽出せずに、対象物の内部の画像のみを抽出することができるようになる。
また、登録する部分画像が対象物の内部に完全に含まれる、という条件よりもっと緩い条件を設定することもできる。例えば、部分画像中の対象物の占める面積が80%以上となる部分画像を抽出する、ということもできる。
この動作をフローチャートにしたものが図11である。
部分画像評価のループ1101において、その画像に含まれる部分画像全部がチェックされる。そして、上記の例のように例えば、部分画像中の対象物の占める面積が80%以上となる部分画像のみ採用部分画像集合1102に加えられる。
一方、部分画像属性判定部109では、本実施形態でも実施形態1、実施形態2と同様に新規画像から抽出された任意の部分画像とのマッチングを行う。これは新規画像に含まれる対象物体が未知であるために、新規画像のどの位置を見るべきかは予め分かっていないからである。
また、実施形態1、実施形態2においては、登録画像と新規画像のサイズは同一として本実施形態を説明してきた。しかし、一般には新規画像は登録画像より大きい。このことを説明したのが、図10の(b)である。
例えば登録画像のサイズが100×100で、部分画像のサイズが20×20だとする。実施形態1と実施形態2では新規画像の大きさが登録画像と同じ100×100だったので、新規部分画像集合抽出部107で抽出される部分画像の数は6,561(=81×81)枚となる。
これに対して本実施形態では、新規画像のサイズが200×200だとすると、新規部分画像集合抽出部107で抽出される部分画像の数は32,761(=181×181)枚となる。
登録画像全体を新規画像から切り出してマッチングする場合(いわゆるスライディングウィンドウによる登録画像のマッチング)を考える。登録画像のサイズが100×100、新規画像のサイズが200×200だとすると、10,201(=101×101)回マッチングを行うこととなる。これに対し上記の部分画像を用いた場合でも、マッチング回数は3倍強ほどしか増えない。よって、部分画像属性判定部109の処理が高速であれば(より正確には登録画像の枚数に比例して速度が低下しなければ)、本実施形態の登録部分画像を非常に多く用いた画像認識方法は十分実用に耐えうることとなる。
<実施形態4>
図12および図13を用いて実施形態4を説明する。実施形態4では、部分画像サイズ決定部101の具体的実装の例を示す。本実施形態では、いわゆるクロスバリデーションという手法を用いて部分画像のサイズを決定する。
図1の登録画像103を以下に述べる方法でサンプル登録画像群1301とサンプル新規画像群1302とに分ける。通常はランダムに2分割するが、登録画像103がN枚あるとして、その中の1枚をサンプル新規画像(群)とし、それ以外の画像をサンプル登録画像群とすることもできる。(これをleave one out法と呼ぶ。この場合、認識率の評価はサンプル新規画像をN回巡回していった認識率の値の平均で行い、認識率評価のループ1303は、{N×(評価する部分画像のサイズの種類数)}回の実行となる。) まず、部分画像のサイズをあるサイズに仮に決定しておいてサンプル登録画像群1301を登録画像103として学習する。学習は学習部302で行う。次に、サンプル新規画像群1302の1枚1枚を新規画像106とし、画像認識をする。そして、新規画像群、全部から得られた認識結果112を集計することによって、部分画像が所定のサイズであった場合の認識率が求まる。
図13は、サイズをいろいろ変えたときの認識率の違いをプロットしたグラフである。
横軸が部分画像サイズで、縦軸がそのサイズで評価した平均認識率である。
この例でいうと、部分画像サイズが40のところにピークがあるので、最高認識率決定ステップ1304で40が選択され、最適部分画像サイズ1305が40となる。本実施形態で重要なことは、実施形態1〜実施形態3で述べた画像認識方法を用いて部分画像サイズを評価することである。
<実施形態5>
図14および図15を用いて実施形態5を説明する。
実施形態4で述べたクロスバリデーションの方法は、認識性能の高い部分画像サイズを決定できるというメリットがある反面、非常に多くのコンピュータコストを必要とするというデメリットも存在する。本実施形態では、より簡便な部分画像サイズ決定部101の処理の例を述べる。
図14は、図1の登録画像103の中から2枚の異なるクラスに属する登録画像を適当に選び、それらの部分画像群間の構造を解析したグラフである。(以下、クラスとは登録画像の種類を意味し、例えばクラスAの画像がAさんの顔画像、クラスBの画像がBさんの顔画像というようになる。) 図14のグラフにおいて、横軸は部分画像のサイズで、縦軸は(クラス内平均距離/クラス間距離)である。クラス内平均距離とクラス間距離を図15を用いて説明する。
図15では、あたかも特徴空間が3次元のような書き方をしているが、これは便宜的に書いたもので、実際は非常に高次元である。より具体的には、部分画像のピクセルサイズ数の次元となる。また、以下“距離”という言葉で説明しているものは、ユークリッド距離を意味する。なお、本実施形態はユークリッド距離に限定したものではなく、任意の距離尺度を利用できる。
例えば、登録画像103のサイズが100×100であるとする。そして、クラスAとクラスBの2つの画像があるとする。部分画像のサイズをフルサイズである100×100とすると登録部分画像の個数はそれぞれのクラスで1つずつとなり、図15の右の空間配置となる。ここで空間の次元数は10,000(=100×100)である。なお、以下の説明で図15の○は1つの部分画像を意味する。クラスAとクラスBの配置は便宜上、左がAで右がBとして説明する。
“クラス内平均距離”とは、クラスの平均部分画像とそれぞれの部分画像の距離の平均を意味し、この場合、部分画像が1つだけなので、クラスの平均部分画像は“登録画像そのもの”となり、クラス内平均距離は0となる。
そして、“クラス間距離”とは、クラスの平均部分画像間(=2つの登録画像間)の距離を意味し、図15の右の場合、横向きの矢印の長さを指す。
結局、図14の縦軸である(クラス内平均距離/クラス間距離)は分子が0となるので0となる。
なお、“クラス内平均距離”と“クラス間距離”を数式を用いて説明すると以下の通りとなる。
部分画像のベクトルを
(iは部分画像のインデックス、x、yは座標で、Iはその座標のピクセル値(実数))とする。
すると、平均部分画像(ベクトル)
で定義される。(なおNは部分画像の個数)
そして、クラス内平均距離(スカラー)は
(XとYはそれぞれ画像の横サイズと縦サイズ)となる。
クラス間距離(スカラー)は
次に図14のグラフの指数がピークとなる部分画像サイズ30の説明をする。部分画像のサイズが30×30となると、部分画像の個数はA、Bそれぞれ5,041(=71×71)個となり、次元数は900(=30×30)となる。
図15の真ん中にある図がこの900次元の空間で、それぞれの部分画像がどのように分布するかを示した図となる。なお、正確に記述すると、クラスA、クラスB、それぞれに関して○の数が部分画像の数(=5,041)個あるはずであるが、書ききれないのでほとんどは省略してある。
太い2本の矢印1601と1602が“クラス内平均距離”を意味し、具体的には上でも説明したように、“クラスの平均部分画像とそれぞれの部分画像の距離の平均”で定義される。なお指数で用いる“クラス内平均距離”はクラスAのクラス内平均距離1601とクラスBのクラス内平均距離1602の平均をとる。
図15の真ん中にある通り、部分画像の個数がある程度多いと、その分布が広がりクラス内平均距離が大きくなる。なお、図15において、“クラスの広がりぐらい”は○で表される部分画像を囲む大きな楕円で表現している。
そして、“クラス間距離”(横向きの矢印の長さ)は図15の右の100×100の場合より小さくなるが、最終的な指数(クラス内平均距離/クラス間距離)は大きくなる。
更に部分画像のサイズを小さく(5×5)とすると、図15の左のような空間配置となる。ここで次元数は25(=5×5)で、部分画像の個数はクラスA、B、それぞれ9,216(=96×96)個となる。
“クラス間距離”は更に短くなるが、それ以上に“クラス内平均距離”が小さくなり、指数(クラス内平均距離/クラス間距離)は下がる。これは、部分画像の個数は増えるが、その分布範囲は相対的に、小さくなることを意味する。これは部分画像の分布に個性がなくなり、Aの部分画像群もBの部分画像群も区別が付きにくくなることに対応する。
以上説明してきた(クラス内平均距離/クラス間距離)を用いた部分画像サイズ評価法は、いわゆるFisherの分離関数と混同しやすい概念である。しかし、上記の指数は、ちょうどFisherの分離関数とは逆の関係になる。つまり、Fisherの分離関数は、クラス内の分布範囲を出来るだけ小さくし、クラス間の分布範囲を出来るだけ大きくするようにすることになる。これに対して、本実施形態で説明してきた指数(クラス内平均距離/クラス間距離)は、クラス間の分布範囲を出来るだけ小さく、クラス間の分布範囲を出来るだけ大きくするような指数となる。
これではFisherの分離関数と全く逆の性質を見てしまうので、通常の感覚では、この指数が大きいと認識率が低くなるように感じる。しかし、本発明の部分画像を用いた画像認識方法では、この指数が大きいと部分画像の集合の形が十分意味のある構造(分布)を持つことを意味し、結果的に(経験的に)認識率が高くなるという現象が起こる。
<実施形態6>
図16〜図19を用いて実施形態6を説明する。
実施形態6では対象物体をいろいろな方向から撮影した画像を登録画像として学習し、入力された対象物体を含む画像の中から対象物体を検出する技術を実現する。本実施形態の学習ステップ(図4の302)は、基本的に実施形態2と同じである。つまり、図8のN枚の登録画像として、1つの対象物体をN姿勢方向から撮影した画像N枚を採用することになる。例えば、図18(b)に示したような画像となる。ここから複数の部分画像を抽出して登録部分画像とする。
通常、このN姿勢方向はジオディシックドーム上の等間隔に配置された点から物体中心に向かう方向にカメラもしくは画像の面内回転を掛け合わせた姿勢方向となる。このように登録画像を準備することにより、入力画像中に対象物体がどのような姿勢で写っていてもそれを認識、検出することが可能となる。なお、機械学習でN枚の登録画像のマッチングを行うことはN個のクラス判別を行うことと等価となる。以下、N枚の登録画像とN個の姿勢クラスを同一視して説明する。
なお、コンピュータグラフィックスの技術を用いて、例えばCAD画像から人工的に対象物体をいろいろな方向から撮影した画像を作り出してもよい。また、本実施形態の説明では対象物体を1つとしているが、対象物体が複数あっても本質は変わらない。
姿勢クラスの数を増やせば増やすほど詳細に姿勢の判別が可能となる。つまり、姿勢について高い分解能を実現するためには、登録画像の枚数Nを十分多くする必要がある。しかしN=2として説明してもその本質は変わらないので、以下では説明を簡単にするためにN=2とする。対象物体は図18(b)に示すような直方体であり、2つ(=N)の姿勢クラスは同じく図18(b)に示すような正面右向き、正面左向きの姿勢とする。また、高い物体認識、検出能力を実現するためには、部分画像の枚数(M)もある程度の量必要となる。しかし、M=2として説明してもその本質は変わらないので、以下説明を簡単にするためにM=2とする。具体的には、それぞれの姿勢クラスの登録部分画像は図18(b)に示すように、クラス1では1910、1911、クラス2では1913、1914とする。なお、図18(b)では、登録画像における対象物体の中心位置を、クラス1では1912、クラス2では1915で示している。
次に物体を検出する工程を説明する。図16は実施形態6における物体検出ルーチンのフローチャートを示した図である。物体検出工程では、まず新規に入力された画像でウィンドウをスライディングさせながら、ウィンドウ内にある部分画像を処理するルーチンが走る。このループがS1701からS1707までのループとなる。この様子は、実施形態3の説明で用いた図10(b)と同じ動作となる。
例えば登録画像のサイズが100x100で、部分画像のサイズが20x20だとする。そして、新規画像のサイズが200x200だとすると、S1702の部分画像の抽出ステップ(図2(b)の新規部分画像集合抽出ステップS107と同じ)で抽出される部分画像の数は32,761(=181x181)枚となる。なお、ステップS1701からS1707までのループで、この32,761(=181x181)枚全てを処理せずに、その中から適当にサンプリングすることによって高速化を実現してもよい。
このループの中で、まず部分画像の抽出を行い(S1702)、抽出された部分画像を入力としてL本の分類木判別器の判別結果を得る。このループがS1703からS1706までのループとなる。抽出された部分画像をそれぞれの分類木に認識処理させるステップはS1704であり、図17にその詳細のフローチャートを示す。
図17で示したフローチャートは、分類木をルートノードからリーフノード、またはヌルノードへ向かって辿る工程を説明したものである。分類木における現在着目しているノードをカレントノードと定義する。まずルートノードをカレントノードとする(S1801)。次にカレントノードがヌルノードかリーフノードかの判定を行う(S1802)。
そして、カレントノードがヌルノードかリーフノードであった場合は、このサブルーチンは終了する。
なお、リーフノードが格納している情報は、“どの登録画像のどの位置の部分画像”という情報の集合であり、より具体的には“クラス番号と基準位置からのオフセット”群である。(オフセットの詳細な説明は図18を用いて後述する。) もしカレントノードがヌルノードかリーフノードのどちらでもない場合、カレントノードのクエリーに基づいて枝番号を計算する(S1803)。そして、計算された枝番号の子ノードをカレントノードに設定する(S1804)。なお、以上説明した工程は分類木を用いた認識工程に一般的、普遍的なものである。
図16に戻って、i番目の判別器(分類木)の認識結果を用いて投票する(S1705)。この様子を図18と図19を用いて説明する。図18(a)に示したのは投票の様子で、図18(b)に示したのが学習画像の様子である。登録画像、つまり、クラスの数が2であるので、図18(a)に示した投票面(2次元のシート)の枚数は2枚となる。ここでいう投票面の具体的な中身は投票のスコアを加算する2次元のテーブルのことである。このテーブルで値の高い場所はそのクラスの物体が存在する可能性が高い場所を意味する。
図18(a)の図において点線で描かれた2つの直方体(1901)が表示されているが、これは入力された画像に2つの直方体が写っていたことを意味する。図18(a)はあくまで投票面なので、点線で描画をすることで入力画像そのものではないことを表現した。(図18(a)のクラス1、クラス2の2枚の投票面の同じ位置に1901が描かれていることに注意する。) 図18(a)の1902は、部分画像枠をスライディングさせた時、つまり、図16のステップS1701からS1707までのループを回した時の“ある一つ”の切り出された部分画像を意味する。部分画像1902を認識させた結果、クラス1の登録画像の部分画像1910(図18(b))とマッチしたとする。この結果、図18(b)の部分画像1910と部分画像1912のそれぞれの位置関係(中心位置へのオフセット)が読み出される(なお、この情報は図17で説明したリーフノードに格納されている。)。そして、部分画像1902の位置からクラス1の投票面上の点1904の位置へ投票が行われる。
同様に、部分画像1903の認識結果からも投票面上の点1904への投票が行われる。また、部分画像1905の認識結果からはクラス2の投票面上の点1907への投票が行われる。また、部分画像1906の認識結果からも1907への投票が行われる。
以上説明してきたように、ステップS1705の投票面への投票とは“入力画像中の部分画像と似ている登録画像のクラス投票面の物体中心位置へ投票する”ことを意味する。
図18の説明では説明を簡単にするために物体中心の1点へ投票するような説明をしたが、普通は図19に示したように広がった領域に分散して投票してもよい。例えば、図19は底面がx、yの2次元(x、yの2次元は投票面の縦横の2次元と同じ意味)で高さが投票の重みを意味する。式で表現すると、
(dx,dyは中心からの距離)という釣鐘型の関数を用いる。一般に釣鐘型の関数ならこの関数でなくてもよい。また、区間一様分布のような分布関数でもよい。
なお、図18では物体中心へ投票する方法を説明したが、必ずしも物体中心へ投票しなくてもよい。つまり、対象物体の3次元モデルに複数の基準位置を設定しておいて、その基準位置毎に図18(a)で示したような投票面を用意してもよい。
また、図18で示した例は、1つの部分画像について1つの位置または領域への投票だったが、図17で述べたリーフノードに格納された情報が複数クラスの複数位置の部分画像だった場合、それぞれのクラスの投票領域に投票することになる。
図18で説明した投票は、マッチしたクラスの投票面だけへの投票であった。つまり、部分画像1902と1903はクラス1の部分画像とマッチしたのでクラス1の投票面へ投票した。同じく部分画像1905と1906はクラス2の部分画像とマッチしたのでクラス2の投票面へ投票した。しかしながらクラス1とクラス2は全く異なるカテゴリではなく、同じ直方体(対象物体)の異なる姿勢という意味を持つ。よって、部分画像1902、1903の認識結果からクラス2の投票面上の点1909への投票をしても良い。同様に部分画像1905、1906の認識結果からクラス1の投票面上の点1908への投票をしても良い。
このことをより一般的に説明すると、クラスがN個あるとして、その全てのペアの類似度、または、距離を予め計算しておく。そして、例えば距離がある閾値以下の類似するクラスの投票面へ距離に応じた大きさで投票をする。ここで距離に応じた投票とは、例えばクラス間の距離をDとすると、Exp(−D)で示すような係数をかけた投票をする。(同一クラス間の距離は0だとすると、この係数は1となることに注意。)なお、通常は姿勢クラス間の距離はロドリゲスローテーションの回転角で求めるが、特にこれに限定しなくてもよい。
図16のステップS1701からS1707までのループが終了した時点で、図18(a)に示したそれぞれの投票面への投票が終了し、それぞれの投票面の強度分布が求まる。結局、それぞれのクラスつまり姿勢方向における対象物体が存在する分布が求まることになる。この情報から部品の姿勢方向と位置を確定するのであるが、その1つの例を以下に述べる。
S1708からS1710までのループでそれぞれのクラスの投票面においてピークとなる位置を算出する(S1709)。結果、N個の姿勢クラスそれぞれが存在する可能性の最も高い場所とそのスコアが求められることになる。具体的には図18の場合、クラス1の投票面では1904の点がピークとして選ばれ、クラス2の投票面では1907の点がピークとして選ばれる。
そして、N個の姿勢クラスの結果をソートすることによって投票結果の集計を行う(S1711)。この集計結果によって入力画像中で存在可能性が高い姿勢方向の物体とその位置が識別できる。具体的には図18の場合、点1904の値が点1907の値より大きかったとすると、識別結果の第1候補が姿勢クラス1で位置が1904、第2候補が姿勢クラス2で位置が1907となる。
なお、図16で説明した方法は集計方法の1つの例であって、対象物体の姿勢方向、および位置が識別できればどのような処理を行ってもよい。例えば、それぞれのクラスの投票面の局所的なピークを複数算出し、それを集計しても良い。例えば、図18の場合、点1904、点1907の他に、点1908、点1909の点を候補点に含めて集計してもよい。その結果、例えば、得点の高い順に1904、1908、1907、1909となったとする。すると、姿勢クラス1の物体が1904と1908の2つの位置に検出されることになる。
以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
尚、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによって前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図示したフローチャートに対応したコンピュータ読み取り可能なプログラムである。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどとの協働で実施形態の機能が実現されてもよい。この場合、OSなどが、実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。