以下、図面を参照して本発明の実施の形態を詳細に説明する。以下の各実施の形態では、物体のパーツや要素などのアトリビュートを検出対象として検出する画像処理装置について説明する。
<第1の実施の形態>
第1の実施の形態に係る画像処理装置10は、CPUと、RAMと、後述する学習処理ルーチン及び検出処理ルーチンを実行するためのプログラムを記憶したROMとを備えたコンピュータで構成される。また、画像処理装置10は、機能的には、図1に示すように、学習部20と、検出部40とを含んだ構成で表すことができる。また、学習部20は、学習データ入力部21と、特徴抽出部22と、検出器学習部23と、事前分布学習部24とを含む。また、検出部40は、画像入力部41と、特徴抽出部42と、検出処理部43と、事前分布反映部44と、検出結果出力部45とを含む。なお、特徴抽出部42及び検出処理部43は、本発明の検出手段の一例であり、事前分布反映部44は、本発明の特定手段の一例である。
まず、学習部20の各部について詳述する。
学習データ入力部21は、複数の学習データが格納された学習データ・データベース(DB)31から学習データを取得し、特徴抽出部22及び事前分布学習部24の各々に出力する。
ここで、学習データは、検出対象である複数種類のアトリビュートを含む学習画像と、各学習画像中の検出対象の位置情報とのペアで構成される。検出対象の位置情報は、検出対象を示す領域を、例えば画素位置(座標)等で特定した情報である。例えば、検出対象を示す領域を、学習画像内の4点で記述される矩形で表した場合、検出対象の位置情報は、その4点の画素位置で表すことができる。また、検出対象を示す領域以外の領域をマスクしたマスク画像により、検出対象の位置情報を表してもよい。マスク画像は、例えば、マスクされた画素の画素値を0としたものとすることができる。また、学習画像のサイズは全て同一である。なお、サイズが異なる場合は、線形補間やニアレストネイバーなどの方法を用いて、同一サイズにリサイズした画像を学習画像として用いる。
特徴抽出部22は、学習データ入力部21から出力された学習データに含まれる検出対象の位置情報に基づいて、学習データに含まれる学習画像においてアトリビュートが存在する領域を特定する。そして、特徴抽出部22は、特定した領域から特徴量を抽出する。抽出する特徴量は、例えば、非特許文献4に記載のHOG(Histograms of Oriented Gradients)特徴量などの特徴量を抽出することができる。特徴抽出部22は、抽出した特徴量と、特徴量を抽出した領域に存在するアトリビュートの種類と対応付けて、検出器学習部23へ出力する。
検出器学習部23は、特徴抽出部22から出力された特徴量を用いて、アトリビュートの種類毎に検出器を学習する。検出器の学習には、例えば、非特許文献3に記載のExemplar SVM(Support vector machine)などの手法を用いることができる。検出器学習部23は、学習したアトリビュートの種類毎の検出器と、アトリビュートの種類の名称とを対応付けて、検出器DB32に格納する。
事前分布学習部24は、学習データ入力部21から出力された学習データに含まれる検出対象の位置情報に基づいて、学習データに含まれる複数の学習画像の各々におけるアトリビュートの出現位置についての事前分布を、アトリビュートの種類毎に学習する。事前分布学習部24は、学習画像におけるアトリビュート単体の出現位置についての事前分布と、アトリビュート間の相対位置関係についての事前分布、具体的には、他の種類のアトリビュートの出現位置に対する相対的な出現位置についての事前分布とを学習する。事前分布学習部24は、学習したアトリビュートの種類毎の事前分布と、アトリビュートの種類の名称とを対応付けて、事前分布DB33に格納する。
次に、検出部40の各部について詳述する。
画像入力部41は、任意の画像である入力画像36の入力を受け付け、入力画像36のサイズが、学習データの学習画像のサイズと異なる場合には、線形補間やニアレストネイバーなどの方法を用いて、学習画像と同一サイズにリサイズする。画像入力部41は、入力画像36を特徴抽出部42へ出力する。
特徴抽出部42は、画像入力部41から出力された入力画像36に対して、任意の大きさの矩形をずらしながら当てはめ、矩形内の領域から、学習部20の特徴抽出部22で抽出される特徴量と同様の特徴量を抽出する。特徴抽出部42は、抽出した特徴量と、特徴量を抽出した領域の位置、すなわち入力画像36に当てはめた矩形の位置とを対応付けて、検出処理部43へ出力する。
検出処理部43は、特徴抽出部42から出力された特徴量及び矩形の位置を取得する。また、検出処理部43は、検出器DB32から、アトリビュートの種類毎の検出器を取得する。そして、検出処理部43は、特徴抽出部42で各矩形内の領域から抽出された特徴量を、アトリビュートの種類毎の検出器の各々に入力し、検出器の出力として、アトリビュートの各種類に対する検出スコアを得る。検出スコアは、矩形内の画像が検出対象であるアトリビュートであることの尤もらしさが高いほど、高い値となる。
検出処理部43は、検出スコアに基づいて、アトリビュートの種類毎に所定個の検出候補を検出する。例えば、検出処理部43は、検出スコアが予め定めた閾値以上となる矩形内の画像や、検出スコアの上位所定個に対応する矩形内の画像を検出候補とすることができる。検出処理部43は、アトリビュートの種類毎の検出候補と、その検出候補の位置情報(矩形の位置情報)と、検出スコアとを対応付けて、事前分布反映部44へ出力する。
事前分布反映部44は、検出処理部43から出力されたアトリビュートの種類毎の検出候補、検出候補の位置、及び検出スコアを取得する。また、事前分布反映部44は、事前分布DB33から、アトリビュートの種類毎の事前分布を取得する。そして、事前分布反映部44は、検出候補の各々に、その検出候補のアトリビュートの種類に対応した事前分布を反映させ、検出スコアを更新する。事前分布反映部44は、更新した検出スコアに基づいて、アトリビュートの種類毎の検出候補から検出対象を特定し、その検出対象の位置情報(矩形の位置情報)を、検出結果出力部45へ出力する。
検出結果出力部45は、事前分布反映部44から出力されたアトリビュートの種類毎の検出対象の位置情報を入力画像36に紐づけて、検出結果37として出力する。
次に、第1の実施の形態に係る画像処理装置10の作用について説明する。画像処理装置10は、アトリビュートの種類毎の検出器及び事前分布を学習する学習処理と、入力画像36から検出対象であるアトリビュートを検出する検出処理を実行する。以下、各処理について説明する。
まず、検出対象である複数種類のアトリビュートを含む学習画像と、各学習画像中の検出対象の位置情報とのペアで構成される複数の学習データが学習データDB31に格納された状態で、画像処理装置10が、図2に示す学習処理を実行する。
図2に示す学習処理のステップS10で、学習データ入力部21が、学習データDB31から学習データを取得し、特徴抽出部22及び事前分布学習部24の各々に出力する。
次に、ステップS20で、特徴抽出部22が、学習データ入力部21から出力された学習データを取得し、学習データに含まれる検出対象の位置情報に基づいて、学習データに含まれる学習画像においてアトリビュートが存在する領域を特定する。そして、特徴抽出部22は、特定した領域から特徴量を抽出する。特徴抽出部22は、抽出した特徴量と、特徴量を抽出した領域に存在するアトリビュートの種類と対応付けて、検出器学習部23へ出力する。
次に、ステップS30で、検出器学習部23が、特徴抽出部22から出力された特徴量を用いて、アトリビュートの種類毎に検出器を学習する。検出器学習部23は、学習したアトリビュートの種類毎の検出器と、アトリビュートの種類の名称とを対応付けて、検出器DB32に格納する。
次に、ステップS40で、事前分布学習部24が、詳細を図3に示す事前分布学習処理を実行し、アトリビュートの種類毎の事前分布を学習する。事前分布学習部24は、学習したアトリビュートの種類毎の事前分布と、アトリビュートの種類の名称とを対応付けて、事前分布DB33に格納し、学習処理は終了する。
なお、ステップS40の事前分布学習処理は、ステップS20の前に実行してもよいし、ステップS20及びS30の処理と、ステップS40の処理とを、並行して実行してもよい。
ここで、図3を参照して、事前分布学習処理について詳述する。
ステップS41で、事前分布学習部24が、学習データ入力部21から出力された学習データを取得する。ここでは、学習データには、N枚の学習画像、及び各学習画像に含まれるM種類のアトリビュートを示す領域の位置情報が含まれるものとする。また、ここでは、説明の簡易化のため、アトリビュートを示す領域を矩形(長方形)とし、その位置情報を、矩形の対角2点(左上角と右下角)の画素位置で表す場合について説明する。なお、画素位置は、行方向の位置をx、列方向の位置をy、学習画像の左上角の画素を原点([1,1])とし、学習画像の下方向をxのプラス方向、右方向をyのプラス方向とする画像座標系における座標[x,y]で表す。
以下、n枚目の学習画像に含まれる種類mのアトリビュートを示す矩形領域を、「矩形R_nm」と表記する。ここでは、n=[1,2,・・・,N]、及びm=[1,2,・・・,M]である。また、n枚目の学習画像を「学習画像n」、種類mのアトリビュートを「アトリビュートm」と表記する。
次に、ステップS42で、学習画像と同様のサイズの零行列P_i、及び学習画像の倍のサイズの零行列P_ij(i,j=[1,2,・・・,M])を作成する。本実施の形態では、以下で詳述するように、アトリビュートi単体の出現位置についての事前分布を表す行列P_i(i=[1,2,・・・,M])と、アトリビュート間の相対位置関係についての事前分布を表す行列P_ij(i,j=[1,2,…,M],i≠j)とを学習する。零行列P_i及びP_ijは、これらの事前分布を表す行列P_i及びP_ijを初期化したものである。
なお、学習画像と同様のサイズの行列とは、学習画像の縦及び横の画素数と行数及び列数が同じ行列である。また、学習画像の倍のサイズの行列とは、ここでは、学習画像の重心画素から上、下、右、左の各方向の画素数を倍にしたサイズである。例えば、学習画像が縦5画素×横5画素のサイズの場合、倍のサイズは、上、下、右、左の各方向へ2画素ずつ拡張した9×9画素である。従って、学習画像の倍のサイズの零行列P_ijは、各要素が0の9行9列の行列となる。
次に、ステップS43で、事前分布学習部24が、学習画像nを特定するためのループ変数nを1に初期化する。次に、ステップS44で、事前分布学習部24が、学習画像nに含まれるアトリビュートのうち、処理対象のアトリビュートiを特定するためのループ変数iを1に初期化する。次に、ステップS44で、事前分布学習部24が、学習画像nに含まれるアトリビュートのうち、他のアトリビュートjを特定するためのループ変数jを1に初期化する。
次に、ステップS46で、事前分布学習部24が、iとjとが同値か否かを判定する。同値の場合は、ステップS47へ移行し、同値ではない場合には、ステップS48へ移行する。
ステップS47では、事前分布学習部24が、アトリビュートi単体の出現位置についての事前分布を表す行列P_iを更新する。具体的には、事前分布学習部24は、矩形R_ni内の画素に対応する行列P_iの要素を1インクリメントする。
一方、ステップS48では、事前分布学習部24が、アトリビュート間の相対位置関係についての事前分布を表すP_ijを更新する。具体的には、事前分布学習部24は、アトリビュートiの出現位置を基準とした他の種類のアトリビュートjの相対的な出現位置についての事前分布を表す行列P_ijを求めるために、矩形R_niの重心画素G([x_iG,y_iG])から、学習画像nの中心画素C([x_iC,y_iC])までの移動量Dを算出する。移動量Dは、[(x_iC−x_iG),(y_iC−y_iG)]である。
次に、ステップS49で、事前分布学習部24が、矩形R_nj内の各画素から移動量Dだけ移動した位置の画素に対応する行列P_ijの要素を1インクリメントする。
次に、ステップS50で、事前分布学習部24が、ループ変数jがMと同値であるか否かを判定する。すなわち、学習画像nに含まれるアトリビュートiについて、アトリビュートi単体の出現位置についての事前分布を表す行列P_i、及びアトリビュートjとの相対位置関係についての事前分布を表す行列P_ijの更新が終了したか否かを判定する。jとMとが同値ではない場合には、ステップS51へ移行し、ループ変数jを1インクリメントして、ステップS46に戻り、ステップS46以降の処理を繰り返す。jとMとが同値の場合には、ステップS52へ移行する。
ステップS52では、事前分布学習部24が、ループ変数iがMと同値であるか否かを判定する。すなわち、学習画像nに含まれる全てのアトリビュートについてP_i及びP_ijの更新を終了したか否かを判定する。iとMとが同値ではない場合には、ステップS53へ移行し、ループ変数iを1インクリメントして、ステップS45に戻り、ステップS45以降の処理を繰り返す。iとMとが同値の場合には、ステップS54へ移行する。
ステップS54では、事前分布学習部24が、ループ変数nがNと同値であるか否かを判定する。すなわち、全ての学習画像に対してP_i及びP_ijの更新を終了したか否かを判定する。nとNとが同値ではない場合には、ステップS55へ移行し、ループ変数nを1インクリメントして、ステップS44に戻り、ステップS44以降の処理を繰り返す。nとNとが同値の場合には、ステップS56へ移行する。
上記ステップS43〜S55の処理の具体例を、図4及び図5を参照して説明する。ここでは、n=1,2,3、学習画像のサイズ5×5の場合を例に説明する。まず、アトリビュート単体の出現位置についての事前分布を表す行列P_iの更新について説明する。
図4の左上の図に示すように、学習画像1(n=1)の画素[1,2]と画素[3,4]とを対角2点とする矩形領域が、矩形R_11として与えられたとする。なお、図4では、画像上の矩形内に含まれる画素を「1」、それ以外の画素を「0」として矩形を表している。以下、図5、図11〜図13についても同様である。この場合、n=1、i=1、j=1のループのステップS47において、図4の左下の図に示すように、行列P_1の要素[1,2]と要素[3,4]とを対角2点とする範囲に含まれる要素の各々を、1インクリメントする。
次に、図4の中央上の図に示すように、学習画像2(n=2)の画素[2,3]と画素[4,5]とを対角2点とする矩形領域が、矩形R_21として与えられたとする。この場合、n=2、i=1、j=1のループのステップS47において、行列P_1の要素[2,3]と要素[4,5]とを対角2点とする範囲に含まれる要素の各々を、1インクリメントする。従って、n=1の段階で値が1となっている要素の値は2になる。これにより、行列P_1は、図4の中央下の図に示すように更新される。
次に、図4の右上の図に示すように、学習画像3(n=3)の画素[2,1]と画素[4,3]とを対角2点とする矩形領域が、矩形R_31として与えられたとする。この場合、n=3、i=1、j=1のループのステップS47において、行列P_1の要素[2,1]と要素[4,3]とを対角2点とする範囲に含まれる要素の各々を、1インクリメントする。従って、n=2の段階で値が1となっている要素の値は2、値が2となっている要素の値は3になる。これにより、行列P_1は、図4の右下の図に示すように更新される。
このように、学習画像におけるアトリビュートの出現位置を示す矩形が重なる領域に対応する行列P_1の要素は値が高くなる。
次に、アトリビュート間の相対位置関係についての事前分布を表す行列P_ijの更新について説明する。ここでは、他の種類のアトリビュートが、アトリビュート2(j=2)である場合について説明する。
図5の左上段の図に示すように、学習画像1(n=1)の画素[1,2]と画素[3,4]とを対角2点とする矩形領域が、矩形R_11として与えられ、図5の左中段の図に示すように、学習画像1の画素[3,1]と画素[5,1]とを対角2点とする矩形領域が、矩形R_12として与えられたとする。このとき、n=1、i=1、j=2のループのステップS48において、矩形R_11の重心画素G(図5中に示す学習画像における太枠の画素)の画素位置は[(1+3)/2,(2+4)/2]=[2,3]と求められる。5×5画素の学習画像の中心画素Cの画素位置は[3,3]であるので、移動量Dは、[(3−2),(3−3)]=[+1,0]と求められる。
ここで、P_12は学習画像の倍のサイズ、すなわち、5×5画素のサイズの上、下、右、左方向の各々に2画素ずつ拡張したサイズ(9×9)である。なお、図5に示す行列P_12における太枠の要素は、学習画像の中心画素Cに対応する要素である。従って、矩形R_12内の画素を移動量Dだけ移動させた画素に対応するP_12の要素は、[3,1]+[2,2]+[+1,0]=[6,3]と、[5,1]+[2,2]+[+1,0]=[8,3]とを対角2点とする範囲に含まれる要素となる。そこで、n=1、i=1、j=2のループのステップS49において、これらの要素の値が1インクリメントされる。
同様に、n=2、i=1、j=2のループのステップS48及びS49において、図5の中央上段に示すような矩形R_21と、中央中段に示すような矩形R_22とに基づいて、中央下段に示すように、行列P_12が更新される。また同様に、n=3、i=1、j=2のループのステップS48及びS49において、図5の右上段に示すような矩形R_31と、右中段に示すような矩形R_32とに基づいて、右下段に示すように、行列P_12が更新される。
このように、一方のアトリビュートから見た他のアトリビュートの出現位置を示す矩形が重なる領域に対応する行列P_ijの要素は値が高くなる。
図3に示す事前分布学習処理の説明に戻る。次のステップS56で、事前分布学習部24が、図6に示すように、全てのiについて、行列P_iの全要素の合計値s_iを算出し、行列P_iの各要素を合計値s_iで割ることにより、行列P_iを正規化する。同様に、図7に示すように、全てのi及びjについて、行列P_ijの全要素の合計値s_ijを算出し、行列P_ijの各要素を合計値s_ijで割ることにより、行列P_ijを正規化する。
次に、ステップS57で、事前分布学習部24は、全てのi及びjについて、行列P_i及びP_ijに対してぼかし処理を行う。学習データとして与えられるR_nmは、それが矩形領域として与えられる場合であっても、マスク画像として与えられる場合であっても、実用上アトリビュートの位置を正確に捉えることは困難である。そのため、学習データにおいて特定されるアトリビュートの位置情報にはゆらぎが存在する。すなわち、R_nmが、本来のアトリビュートの位置に対応する画素を含まない場合や、逆にアトリビュート以外に対応する画素を含む場合がある。これらのゆらぎを低減するために、ぼかし処理を行うことで、最終的な検出精度の向上に効果がある。
具体的には、ぼかし処理にガウシアンフィルタ(例えばσ=10、フィルタサイズを10×10等とする)を用いることができる。例えば、フィルタサイズは、アトリビュート毎に学習データの矩形のうち、最小面積を持つ矩形の短辺の1/10程度を基準にすると、経験的に良好な結果が得られる。
次に、ステップS58で、事前分布学習部24は、行列P_iをアトリビュートi単体の出現位置についての事前分布として、行列P_ijをアトリビュート間の相対位置関係についての事前分布として、事前分布DB33に格納して、事前分布学習処理を終了する。
次に、上記の学習処理が実行されて、アトリビュート毎の検出器が検出器DB32に格納され、アトリビュート毎の事前分布が事前分布DB33に格納された状態で、画像処理装置10が、図8に示す検出処理を実行する。
図8に示す検出処理のステップS60で、画像入力部41が、入力画像36の入力を受け付け、入力画像36のサイズが、学習データの学習画像のサイズと異なる場合には、学習画像と同一サイズにリサイズする。そして、画像入力部41は、入力画像36を特徴抽出部42へ出力する。
次に、ステップS70で、特徴抽出部42が、入力画像36に対して、任意の大きさの矩形をずらしながら当てはめ、矩形内の領域から、学習部20の特徴抽出部22で抽出される特徴量と同様の特徴量を抽出する。そして、特徴抽出部42は、抽出した特徴量と、特徴量を抽出した領域の位置、すなわち入力画像36に当てはめた矩形の位置とを対応付けて、検出処理部43へ出力する。
次に、ステップS80で、検出処理部43が、特徴抽出部42から出力された特徴量及び矩形の位置を取得する。また、検出処理部43は、検出器DB32から、アトリビュートの種類毎の検出器を取得する。そして、検出処理部43は、特徴抽出部42で各矩形内の領域から抽出された特徴量を、アトリビュートの種類毎の検出器の各々に入力し、検出器の出力として、アトリビュートの種類毎の検出スコアを得る。
そして、検出処理部43は、検出スコアに基づいて、アトリビュートの種類毎に所定個の検出候補を検出する。ここでは、検出スコアの上位K個に対応する矩形内の画像を検出候補とする場合について説明する。以下では、入力画像36から検出されたアトリビュートiの検出候補を「矩形R_ki(k=[1,2,・・・,K]),i=[1,2,・・・,M]」と表記する。また、矩形R_kiについて得られた検出スコアを「検出スコアS_ki」と表記する。
検出処理部43は、アトリビュートの種類毎の検出候補である矩形R_kiと、その検出候補の位置情報(矩形の位置情報)と、検出スコアS_kiとを対応付けて、事前分布反映部44へ出力する。
次に、ステップS90で、事前分布反映部44が、詳細を図9及び図10に示す事前分布反映処理を実行し、検出候補の各々の検出スコアに事前分布を反映させる。
次に、ステップS120で、検出結果出力部45が、事前分布反映部44から出力されたアトリビュートの種類毎の最終検出結果Rp_iの位置情報を入力画像36に紐づけて、検出結果37として出力し、検出処理は終了する。
ここで、図9及び図10を参照して、事前分布反映処理について詳述する。
ステップS91で、事前分布反映部44が、事前分布DB33から、M種類のアトリビュートの出現位置についての事前分布を表す行列P_i(i=[1,2,・・・,M])、及び行列P_ij(j=[1,2,・・・,M],i≠j)を取得する。次に、ステップS92で、事前分布反映部44が、ループ変数iを1に初期化する。
次に、ステップS93で、事前分布反映部44が、検出処理部43から出力されたアトリビュートiの検出候補であるK個の矩形R_ki、及びその検出スコアS_kiを取得する。次に、ステップS94で、事前分布反映部44が、ループ変数kを1に、最大値スコアSPを0に初期化する。
次に、ステップS95で、事前分布反映部44が、行列P_iのR_kiに対応する要素の値を合計した値Psを算出し、Psに検出候補R_kiの検出スコアS_kiを掛けた値SP’を算出し、S_kiをSP’に更新する。
次に、ステップS96で、事前分布反映部44が、上記ステップS95で算出したSP’と最大スコアSPとを比較し、SPよりSP’の方が大きいか否かを判定する。SP’の方が大きい場合には、ステップS97へ移行し、最大スコアSPをSP’に更新し、アトリビュートiの最終検出結果Rp_iをR_kiに更新し、ステップS98へ移行する。一方、SP’の方が小さい場合には、ステップS27をスキップして、ステップS98へ移行する。
ステップS98では、事前分布反映部44が、ループ変数kがKと同値であるか否かを判定する。すなわち、アトリビュートiについての全ての検出候補に対応する検出スコアS_kiを更新したか否かを判定する。kとKとが同値ではない場合には、ステップS99で、ループ変数kを1インクリメントし、ステップS95に戻り、ステップS95以降の処理を繰り返す。kとKとが同値の場合には、ステップS100へ移行する。
ステップS100では、事前分布反映部44が、ループ変数iがMと同値であるか否かを判定する。すなわち、全てのアトリビュートの種類について、最終検出結果Rpが算出されたか否かを判定する。iとMとが同値ではない場合には、ステップS101へ移行し、ループ変数iを1インクリメントして、ステップS93に戻り、ステップS93以降の処理を繰り返す。iとMとが同値の場合には、ステップS102へ移行する。
上記ステップS92〜S100の処理の具体例を、図11及び図12を参照して説明する。ここでは、k=1,2の場合を例に説明する。
図11の左図に示すように、アトリビュート1(i=1)の1番目(k=1)の検出候補として、入力画像の画素[2,2]と画素[3,4]とを対角2点とする矩形領域が、矩形R_11として与えられたとする。また、この矩形R_11の検出スコアS_11が0.78で与えられているとする。この場合、図11の右図に示すように、行列P_1の要素[2,2]と要素[3,4]とを対角2点とする範囲(図11中の破線内)に含まれる要素の各々の値の合計0.52がPsとして求まる。そして、検出スコアS_11とPsとを掛け合わせた値SP’が0.41と算出される。i=1、k=1のループにおけるステップS95では、この値SP’=0.41が、矩形R_11の検出スコアS_11として更新される。
また、i=1、k=1のループにおけるステップS96では、SP=0、SP’=0.41であるため、肯定判定されて、ステップS97で、SPがSP’=0.41に更新されると共に、アトリビュートiについての最終検出結果Rp_iがR_11に更新される。
次に、図12の左図に示すように、アトリビュート1(i=1)の2番目(k=2)の検出候補として、入力画像の画素[3,3]と画素[4,5]とを対角2点とする矩形領域が、矩形R_21として与えられたとする。また、この矩形R_21の検出スコアS_21が0.85で与えられているとする。この場合、図12の右図に示すように、行列P_1の要素[3,3]と要素[4,5]とを対角2点とする範囲(図12中の破線内)に含まれる要素の各々の値の合計0.37がPsとして求まる。そして、検出スコアS_21とPsとを掛け合わせた値SP’が0.31と算出される。i=1、k=2のループにおけるステップS95では、この値SP’=0.31が、矩形R_21の検出スコアS_21として更新される。
また、i=1、k=2のループにおけるステップS96では、SP=0.41、SP’=0.31であるため、否定判定されて、ステップS97がスキップされる。すなわち、SPは、前のループにける0.41のままであり、アトリビュートiについての最終検出結果Rp_iもR_11のままである。
図9に示す事前分布学習処理の説明に戻る。次のステップS102で、事前分布反映部44が、アトリビュート間の相対位置関係についての事前分布も検出結果に反映するか否かを判定する。この判定は、例えば、予め定めた設定に基づいて判定してもよいし、M>1の場合には反映させると判定するようにしてもよい。反映させる場合は、図10のステップS103へ移行し、反映させない場合には、図10のステップS116へ移行する。
図10のステップS103では、事前分布反映部44が、ループ変数iを1に初期化する。次に、ステップS104で、事前分布反映部44が、ループ変数jを1に初期化する。次に、ステップS105で、事前分布反映部44が、ループ変数jがiと同値であるか否かを判定する。iとjとが同値の場合には、ステップS106へ移行し、ループ変数jを1インクリメントして、ステップS105に戻る。iとjとが同値ではない場合には、ステップS107へ移行し、事前分布反映部44が、ループ変数kを1に初期化する。
次に、ステップS108で、事前分布反映部44が、アトリビュートj単体の事前分布を反映させた結果得られた最終検出結果Rp_jの重心画素Gから、入力画像36の中心画素Cまでの移動量Dを算出する。
次に、ステップS109で、事前分布反映部44が、矩形R_ki内の各画素から移動量Dだけ移動した位置の画素に対応する行列P_ijの要素の値を合計した値Psを算出する。また、事前分布反映部44は、Psに検出候補R_kiの検出スコアS_kiを掛けた値SP’を算出し、S_kiをSP’で更新する。
上記ステップS108及びS109の処理の具体例を、図13を参照して説明する。ここでは、k=1、i=1、j=2の場合を例に説明する。
図13の左上の図に示すように、アトリビュート1(i=1)の1番目(k=1)の検出候補である矩形R_11の現段階での検出スコアS_11が0.41であるとする。ここで、矩形R_11について、アトリビュート2の位置から見たアトリビュート1の検出位置としての妥当性を反映させることを考える。そこで、矩形R_11を、アトリビュート2の出現位置を基準としたアトリビュート1の相対的な出現位置についての事前分布を表す行列P_21へマッピングする。
ここで、P_21は入力画像と同サイズの学習画像の倍のサイズ、すなわち、5×5画素のサイズの上、下、右、左の各方向へ2画素ずつ拡張したサイズ(9×9)である。なお、図13に示す行列P_21に対応する画素位置R’_11、及び行列P_21おける太枠の要素は、入力画像の中心画素Cに対応する要素である。従って、矩形R_11内の画素を移動量Dだけ移動させた画素に対応するP_21の要素は、[2,2]+[2,2]+[−2,+1]=[2,5]と、[3,4]+[2,2]+[−2,+1]=[3,7]とを対角2点とする範囲(図13中の破線内)に含まれる要素となる。そこで、k=1、i=1、j=2のループのステップS109において、これらの要素の値の合計0.42がPsとして求まる。そして、検出スコアS_11とPsとを掛け合わせた値SP’が0.17と算出され、矩形R_11の検出スコアS_11が0.17に更新される。
図10に示す事前分布反映処理の説明に戻る。次のステップS110で、事前分布反映部44が、ループ変数kがKと同値であるか否かを判定する。すなわち、アトリビュートiの全ての検出候補に対応する検出スコアS_kiに対して、アトリビュートjとの相対位置関係についての事前分布を反映させたか否かを判定する。kとKとが同値ではない場合には、ステップS111へ移行し、ループ変数kを1インクリメントして、ステップS108に戻り、ステップS108以降の処理を繰り返す。kとKとが同値の場合には、ステップS112へ移行する。
ステップS112では、事前分布反映部44が、ループ変数jがMと同値であるか判定する。すなわち、アトリビュートiに対して他の全てのアトリビュートとの相対位置関係についての事前分布を反映させたか否かを判定する。jとMとが同値ではない場合には、ステップS106へ移行し、ループ変数jを1インクリメントして、ステップS105に戻り、ステップS105以降の処理を繰り返す。jとMとが同値の場合には、ステップS113へ移行する。
ステップS113では、事前分布反映部44が、検出候補である矩形R_kiのうち、検出スコアS_kiが最大となる矩形R_kiを、アトリビュート間の相対位置関係を反映させたアトリビュートiについての最終検出結果Rp_iとする。なお、検出スコアS_kiが最大となる矩形R_kiを最終検出結果Rp_iとする場合に限らず、検出スコアS_kiが予め定めた閾値以上となる矩形R_kiを最終検出結果Rp_iとしてもよい。
次に、ステップS114で、事前分布反映部44が、ループ変数iがMと同値であるか否かを判定する。すなわち、全ての種類のアトリビュートについて、検出候補の検出スコアにアトリビュート間の相対位置関係を反映させたか否かを判定する。iとMとが同値ではない場合には、ステップS115へ移行し、ループ変数iを1インクリメントして、ステップS104に戻り、ステップS104以降の処理を繰り返す。iとMとが同値の場合には、ステップS116へ移行する。
ステップS116では、事前分布反映部44が、上記ステップS97またはS113で算出した最終検出結果Rp_i(i=[1,2,・・・,M])の位置情報を、検出結果出力部45へ出力し、事前分布反映処理を終了する。
以上説明したように、第1の実施の形態に係る画像処理装置によれば、画像から抽出される特徴量だけでなく、その特徴量が検出された位置に対して、画像上での検出対象の出現位置についての事前分布を反映させた検出結果を得る。これにより、検出対象が物体のパーツや要素のように画像上での領域が小さい場合でも、検出対象を精度良く検出することができる。
また、検出結果に反映させる検出対象の出現位置についての事前分布として、異なる種類の検出対象間の画像上での相対位置関係についての事前分布も用いることで、より高精度に検出対象を検出することができる。
<第2の実施の形態>
次に、第2の実施の形態について説明する。第1の実施の形態に係る画像処理装置10では、入力画像36全体を走査して、特徴量の抽出及び検出候補の検出を行い、検出候補に対して事前分布を反映させて最終的な検出結果を得る場合について説明した。第2の実施の形態では、特徴抽出部の前段の処理として、事前分布を反映させる場合について説明する。なお、第1の実施の形態に係る画像処理装置10と同一の構成については、同一符号を付して、詳細な説明を省略する。
第2の実施の形態に係る画像処理装置210は、CPUと、RAMと、後述する学習処理ルーチン及び検出処理ルーチンを実行するためのプログラムを記憶したROMとを備えたコンピュータで構成される。また、画像処理装置210は、機能的には、図14に示すように、学習部20と、検出部240とを含んだ構成で表すことができる。検出部240は、画像入力部41と、事前分布反映部244と、特徴抽出部242と、検出処理部243と、検出結果出力部45とを含む。なお、事前分布反映部244は、本発明の特定手段の一例であり、特徴抽出部242及び検出処理部243は、本発明の検出手段の一例である。
学習部20については、第1の実施の形態に係る画像処理装置10の学習部20と同様であるため、以下では、検出部240の各部について詳述する。
事前分布反映部244は、事前分布DB33に格納された事前分布を取得し、画像入力部41から出力された入力画像36に、取得した事前分布を反映させて、入力画像36から検出対象を検出するための走査範囲を特定する。例えば、事前分布反映部44は、事前分布を表す行列P_iにおいて、値が0の要素に対応する入力画像36の画素以外の画素を含む領域を走査範囲として特定することができる。また、行列P_iの要素のうち、値が予め定めた閾値以上となる要素に対応する入力画像36の画素を含む領域を走査範囲として特定することができる。閾値は、例えば、行列P_iの要素の最大値の半分の値とすることができる。閾値を高く設定すれば走査範囲をより狭めることができ、閾値を設定しない場合には、第1の実施の形態と同様に、入力画像36全体を走査することになる。
特徴抽出部242は、事前分布反映部244で特定された走査範囲に対して、第1の実施の形態における特徴抽出部42と同様に、任意の大きさの矩形をずらしながら当てはめ、矩形内の領域から特徴量を抽出する。特徴抽出部242は、抽出した特徴量と、特徴量を抽出した領域の位置、すなわち入力画像36に当てはめた矩形の位置とを対応付けて、検出処理部243へ出力する。
検出処理部243は、特徴抽出部242から出力された特徴量と、検出器DB32から取得したアトリビュートの種類毎の検出器とに基づいて、各矩形について、アトリビュートの各種類に対する検出スコアを得る。そして、検出処理部243は、検出スコアが最大の矩形の位置情報を、検出結果出力部45へ出力する。
次に、第2の実施の形態に係る画像処理装置210の作用について説明する。画像処理装置210は、アトリビュートの種類毎の検出器及び事前分布を学習する学習処理と、入力画像から検出対象であるアトリビュートを検出する検出処理を実行する。学習処理については、第1の実施の形態における学習処理と同様であるため、以下では、検出処理について説明する。なお、第1の実施の形態における検出処理と同様の処理については、同一符号を付して、詳細な説明を省略する。
図15に示す検出処理のステップS60で、画像入力部41が、入力画像36の入力を受け付け、事前分布反映部244へ出力する。
次に、ステップS290で、事前分布反映部244が、詳細を図16に示す事前分布反映処理を実行し、事前分布を反映させた走査範囲を特定する。
ここで、図16を参照して、事前分布反映処理について詳述する。
ステップS291で、事前分布反映部244が、N枚の入力画像36を取得する。次に、ステップS292で、事前分布反映部244が、事前分布DB33から、M種類のアトリビュートそれぞれのアトリビュート単体の出現位置についての事前分布を表す行列P_i(i=[1,2,・・・,M])を取得する。
次に、ステップS293で、事前分布反映部244が、走査範囲を特定するための、行列P_iの各要素に対する閾値Tを設定する。次に、ステップS294で、事前分布反映部244が、ループ変数mを1に初期化する。
次に、ステップS295で、事前分布反映部244が、行列P_mの各要素の値と閾値Tとを比較し、値が閾値T以下の要素の集合を、集合R_mとして取得する。
次に、ステップS296で、事前分布反映部244が、ループ変数nを1に初期化する。次に、ステップS297で、事前分布反映部244が、集合R_mに含まれる要素に対応するn枚目の入力画像36の画素をマスクしたマスク画像I_nmを生成する。マスク画像は、例えば、マスクされた画素の値を0、それ以外の画素の値を1にした画像である。
次に、ステップS298で、事前分布反映部244が、ループ変数nがNと同値であるか否かを判定する。nとNとが同値ではない場合には、ステップS299へ移行し、ループ変数nを1インクリメントして、ステップS297に戻り、ステップS297移行の処理を繰り返す。nとNとが同値の場合には、ステップS300へ移行する。
ステップS300では、事前分布反映部244が、ループ変数mがMと同値であるか否かを判定する。mとMとが同値ではない場合には、ステップS301へ移行し、ループ変数mを1インクリメントして、ステップS295に戻り、ステップS295以降の処理を繰り返す。mとMとが同値の場合には、ステップS302へ移行する。
ステップS302では、事前分布反映部244が、上記の処理で得られたn×m枚のマスク画像I_nmを出力し、事前分布反映処理を終了し、図15に示す検出処理に戻る。
次に、図15のステップS270で、特徴抽出部242が、事前分布反映部244で特定された走査範囲に対して、任意の大きさの矩形をずらしながら当てはめ、矩形内の領域から特徴量を抽出する。具体的には、特徴抽出部242は、事前分布反映部244から出力されたマスク画像I_nm(m=[1,2,・・・,M])の各々を適用したn枚目の入力画像36から、特徴量F_nm(m=[1,2,・・・,M])を抽出する。なお、入力画像36にマスク画像I_nmを適用するとは、入力画像36とマスク画像I_nmとを対応させたときに、マスク画像I_nmでマスクされない領域を走査範囲とすることである。
特徴抽出部242は、N枚の入力画像36の全てから、上記のように特徴量F_nmを抽出する。そして、特徴抽出部242は、抽出した特徴量F_nmと、特徴量F_nmを抽出した領域の位置、すなわち入力画像36に当てはめた矩形の位置とを対応付けて、検出処理部243へ出力する。
次に、ステップS280で、検出処理部243が、特徴抽出部242から出力された特徴量と、検出器DB32から取得したアトリビュートの種類毎の検出器とに基づいて、各矩形について、アトリビュートの各種類に対する検出スコアを得る。すなわち、検出処理部243は、アトリビュートmについての検出器に特徴量F_nmを入力し、n枚目の入力画像36に当てはめた各矩形内の領域が、アトリビュートmであることの尤もらしさを示す検出スコアを得る。そして、検出処理部243は、入力画像毎、かつアトリビュートの種類毎に、検出スコアが最大の矩形の位置情報を、検出結果出力部45へ出力する。なお、検出スコアが最大となる矩形に限らず、検出スコアが予め定めた閾値以上となる矩形の位置情報を出力するようにしてもよい。
次に、ステップS120で、検出結果出力部45が、検出処理部243から出力された検出結果が最大の矩形の位置情報を入力画像36に紐づけて、検出結果37として出力し、検出処理は終了する。
以上説明したように、第2の実施の形態に係る画像処理装置によれば、検出対象の出現位置についての事前分布を反映させて、走査範囲を限定することで、誤検出を低減できる。また、検出器に特徴量を入力して検出スコアを得る回数を減らせることで、高速な処理を実現することができる。なお、第2の実施の形態では、元の入力画像に対してマスク画像I_nmの各々を適用したm倍の画像に対して特徴量の抽出処理を行うことになる。しかし、実用上事前分布を表す行列P_iはゼロ要素が多いため、入力画像全体を走査する場合に比べ、走査範囲を少なくすることができるため、高速な検出を行うことができる。
なお、第2の実施の形態では、アトリビュート単体の出現位置についての事前分布を反映して走査範囲を特定する場合につい説明したが、アトリビュート間の相対位置関係についての事前分布も合わせて反映させるようにしてもよい。この場合、他の種類のアトリビュートjからみたアトリビュートiの出現位置についての事前分布P_ji(j=[1,2,・・・,M],i≠j)の各要素に基づいて、アトリビュートiの走査範囲を特定する。例えば、全てのP_jiで値が0になる要素や、全てのP_jiのうちの半数以上で値が0になる要素や、値の平均値が予め定めた閾値以下となる要素に対応する入力画像の画素を除外した範囲を、アトリビュートiの走査範囲として特定することができる。
また、第2の実施の形態においても、第1の実施の形態のように、検出結果に事前分布を反映させて最終的な検出結果を得るようにしてもよい。
また、上記各実施の形態における、学習部20と検出部40とを別々の装置として構成してもよい。また、上記の実施の形態では、学習処理装置内に事前分布DB及び検出器DBを保持する場合について説明したが、検出器DB及び事前分布DBは、外部の記憶装置に記憶しておいてもよい。この場合、検出処理の際に、画像処理装置が、外部装置からアトリビュートの種類毎の検出器及び事前分布を表す行列を読み込めばよい。
また、本願明細書中において、プログラムが予めインストールされている形態として説明したが、当該プログラムを、コンピュータ読み取り可能な記録媒体に格納して提供することも可能である。コンピュータ読み取り可能な記録媒体とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを提供する形態としてもよい。
また、上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、PLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)等のハードウェアを用いて実現されるものであってもよい。
また、上述の画像処理装置は、内部にコンピュータシステムを有しているが、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。
なお、本発明は、上述した各実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。本実施の形態の主要な特徴を満たす範囲内において、任意の用途と構成を取ることができる。