以下、本発明を実施するための形態を、図面を参照しながら詳細に説明する。
[第1実施形態]
図1は、第1実施形態に係る生産装置の概略構成を示す説明図である。図1に示す生産装置100は、ワーク(検出対象の物体)W1をワーク(被組み付け部材)W2に組付けて組立部品Wを製造する製造方法を実行するものである。生産装置100は、ロボット200と、ロボット200に取り付けられた撮像装置としてのカメラ500と、カメラ500と有線又は無線で通信を行うように構成された画像処理装置300と、を備えている。また、生産装置100は、ロボット200及び画像処理装置300にケーブル等で接続されたロボット制御装置400を備えている。
ロボット200は、例えば垂直多関節型のロボットアーム201と、エンドエフェクタであるロボットハンド202と、を有している。ロボットアーム201は、複数のリンクが複数の関節で旋回又は回転可能に連結されて構成されている。ロボットアーム201の基端(基端リンク、ベース部ともいう)が基台B0の上面に固定されている。ロボットアーム201の先端(先端リンク)には、ロボットハンド202が取り付けられている。ロボットハンド202は、複数のフィンガを有し、ワークW1を把持又は把持解放することができる。
カメラ500はデジタルカメラであり、例えばCCD(Charge Coupled Device)イメージセンサやCMOS(Complementary Metal Oxide Semiconductor)イメージセンサ等の撮像素子を有する。
画像処理装置300は、カメラ500の撮像動作(例えば撮像タイミングやシャッタースピード等)を制御し、カメラ500から撮像画像を取得する。また、画像処理装置300は、画像(デジタルデータ)に対して画像処理を施し、その結果をロボット制御装置400に出力する。具体的には、画像処理装置300は、パターンマッチング処理を行い、その結果をロボット制御装置400に出力する。ロボット制御装置400は、画像処理装置300による画像処理の結果に基づき、ロボット200の動作を制御する。
画像処理装置300は、カメラ500の筐体の外部に配置されているが、カメラ500の筐体の内部に配置されていてもよい。これら画像処理装置300及びカメラ500を有して画像処理システム550が構成されている。
図2は、第1実施形態に係る画像処理装置300の構成を示すブロック図である。図2に示すように、画像処理装置300は、画像処理、具体的にはパターンマッチング処理を行うものであり、コンピュータで構成されている。画像処理装置300は、処理部としてのCPU(Central Processing Unit)301を備えている。また、画像処理装置300は、記憶部として、ROM(Read Only Memory)302、RAM(Random Access Memory)303、HDD(Hard Disk Drive)304を備えている。また、画像処理装置300は、記録ディスクドライブ305及び各種のインタフェース311〜315を備えている。
CPU301には、ROM302、RAM303、HDD304、記録ディスクドライブ305及びインタフェース311〜315が、バス310を介して接続されている。ROM302には、BIOS等の起動プログラムが格納されている。RAM303は、CPU301の演算処理結果等、各種データを一時的に記憶する記憶装置である。HDD304には、プログラム321が格納(記録)されている。そして、CPU301がプログラム321を読み出して実行することにより、後述する画像処理方法の各工程を実行する。記録ディスクドライブ305は、記録ディスク322に記録された各種データやプログラム等を読み出すことができる。
インタフェース311には、ロボット制御装置400が接続されている。CPU301は、バス310及びインタフェース311を介して画像処理結果をロボット制御装置400に送信する。
インタフェース312には、カメラ500が接続されている。CPU301は、バス310及びインタフェース311を介して、トリガ信号等の制御信号をカメラ500に送信する。そして、CPU301は、カメラ500からの画像信号をバス310及びインタフェース311を介して取得する。取得した画像データは、CPU301の制御の下、HDD304や外部記憶装置800等の記憶装置に格納する。
インタフェース313には、マウスやキーボード等、作業者が操作して、操作に応じた指令をCPU301に送信する入力装置600が接続されている。インタフェース314には、画像を表示するディスプレイ等の表示装置700が接続されている。インタフェース315には、USBメモリ等の書き換え可能な不揮発性メモリ、或いは外付けHDD等の外部記憶装置800が接続されている。
なお、本実施形態では、コンピュータ読み取り可能な記録媒体がHDD304であり、HDD304にプログラム321が格納されているが、これに限定するものではない。プログラム321は、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラム321を供給するための記録媒体としては、不揮発性のメモリや記録ディスク等を用いてもよい。具体例を挙げて説明すると、記録媒体として、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、ROM、USBメモリ等を用いることができる。
以下、画像処理装置300によるパターンマッチング方法(画像処理方法)について説明する。画像処理装置300のCPU301は、プログラム321をHDD304から読み出して実行することにより、以下に説明する画像処理方法の各工程を実行する。まず、パターンマッチング処理を行うためのモデルピラミッド(形状モデル)の作成処理、つまりモデルピラミッド生成工程について説明する。
図3は、第1実施形態に係る画像処理方法におけるモデルピラミッド生成工程(形状モデルの作成処理)を示すフローチャートである。まず、オペレータ(作業者)は、パターンマッチング用のモデル画像を用意するために理想状態の照明条件及び位置に、参照物(モデル物体)をセットする。CPU301は、カメラ500に参照物の撮像を行わせ、参照物が写り込んだ参照画像である画像データをカメラ500から取得する(S1)。この参照物は、ワークW1またはワークW1と同じ形状の治具である。なお、参照画像は、予めHDD304や外部記憶装置800等の記憶装置に格納されていてもよく、その場合は、CPU301は、HDD304や外部記憶装置800等の記憶装置から、参照画像のデータを取得することとなる。
CPU301は、参照画像を表示装置700に表示させ、オペレータにより指定された、参照物が写り込んだ部分を包含する矩形領域の画像を切り出す(S2)。指定の方法は、例えばマウス等の入力装置600を利用し、表示装置700に表示された参照画像内の参照物が写り込んだ画像を包含する領域の左上と右下の2点をクリックすることにより行う。CPU301は、ステップS2では、クリックされた2点の位置(矩形領域の左上、右下の角の点)を指定し、参照画像から矩形領域の画像のみを切り出す。
次に、CPU301は、ステップS2で切り出した矩形領域の画像を、オペレータが指定したピラミッド段数分、画像縮小する(S3,S4)。
図4は、切り出した矩形領域の画像IC1を縮小して画像IC2を生成する際の説明図である。まず、図4に示すように、画像IC1の左上端から2×2画素の矩形領域R1を設定する。
画像縮小方法は、画像の左上端から2×2画素の領域R1を、縮小画像の1画素とすることにより縮小していく。具体的には、縮小対象となる画像の2×2画素の4画素の輝度値の平均値を縮小画像の1画素の輝度値としていく。CPU301は、この平均化処理を縮小対象画像に対して全画素に行うことにより、画像の幅、高さが2分の1となる縮小画像を形成する(S3)。
次に、CPU301は、指定ピラミッド段数分の画像を作成したか否かを判断する(S4)。CPU301は、ステップS3での縮小処理を所定の回数行っていなければ(S4:No)ステップS3に戻り、前回縮小した画像に対して、同様の縮小方法により再縮小を行う。CPU301は、所定回数の画像縮小を終えていれば(S4:Yes)、画像縮小の処理は終了する。
次に、CPU301は、ステップS3,S4で作成した全ての画像に対して、エッジ抽出処理を行う(S5,S6)。これにより、段階的に縮小されたモデル画像(テンプレート画像)が生成される。CPU301は、複数のモデル画像を下段から上段に向かうに連れて縮小率が高くなるように(解像度が低くなるように)階層化して、これら複数のモデル画像からなるモデルピラミッド(形状モデル)を生成する。
即ち、CPU301は、参照物を撮像して得られた撮像画像と、この撮像画像に対して縮小処理を施して得られた縮小画像とで、解像度の異なる複数の画像を作成する。次いで、CPU301は、解像度の異なる複数の画像に対してエッジ抽出処理を施してモデルピラミッドを構成する複数のモデル画像を生成する。生成されたモデルピラミッドは、HDD304や外部記憶装置800等の記憶装置に記憶される。
ここで、エッジ抽出処理について詳細に説明する。CPU301は、エッジ抽出対象の画像において、画素毎にエッジ強度とエッジ方向を算出する。エッジ強度とは、コントラストの大きさ(輝度の変化の急峻さ)を表し、注目画素に対し隣接する画素のコントラストが大きければエッジ強度も大きくなる。エッジ方向とは、コントラストの方向を表し、注目画素のエッジ強度が最も大きくなる方向(角度)を示す。エッジ強度の算出には、例えばx軸方向(画像の横軸方向)、y軸方向(画像の縦軸方向)のソーベルフィルタを使用する。
図5は、画像に対してエッジ抽出処理を行う動作を説明するための図である。CPU301は、画像IC中の注目画素PIで、まずx軸方向のエッジ強度Exとy軸方向のエッジ強度Eyを算出する。エッジ強度のベクトルは、(Ex,Ey)で表される。
そして、CPU301は、注目画素PIのエッジ強度Eを、各軸の強度Ex,Eyの二乗和の平方根、即ち以下の式(1)で算出する。
また、CPU301は、エッジ方向θを以下の式(2)により算出する。
CPU301は、上記方法により画像ICの全画素のエッジ強度とエッジ方向を算出する。そして、CPU301は、エッジ強度がある一定の閾値以上の画素をエッジ特徴(エッジ点)として抽出し、複数のエッジ点の集合である特徴画像を含むモデル画像(テンプレート画像)ITを生成する。
図6は、モデル画像を説明するための図である。図6では、モデル画像ITにおいて、エッジ特徴(エッジ点)を示す有効画素を黒、それ以外の無効画素を白で表現している。特徴画像のデータ保持方法は、画像の画素毎に2チャンネルのデータ領域を持って置き、図6に示すように、エッジ特徴として抽出された画素P1は有効画素として、1チャンネル目にエッジ強度、2チャンネル目にエッジ方向の情報を入れておく。エッジ特徴ではないと判断された画素P2には無効値(例えば0)を入れておく。これらエッジ点を示す画素P1の集合ΣPが、特徴画像である。
なお、エッジ強度のみを記憶したエッジ強度画像、エッジ方向のみを記憶したエッジ方向画像の2画像を1組とした特徴画像として記憶してもよい。また、本実施形態では、エッジ強度の算出にソーベルフィルタを使用しているが、キャニーフィルタ等の一般的に知られたエッジ抽出フィルタを使用してもよい。
図7は、ピラミッド構造を説明するための図である。図7に示すように、画像縮小処理及びエッジ抽出処理を複数回繰り返し、複数の異なる解像度の特徴画像を含むモデル画像IT1〜IT4を生成する。縮小を行う回数は作業者がモデルピラミッドの段数として、指定することができる。例えば作業者がピラミッド段数を4段で指定していれば、1枚の縮小していない(縮小率が1の)モデル画像IT1と3枚の段階的に縮小されたモデル画像IT2〜IT4が作成される。
以上のステップS1〜S6により、CPU301は、異なる縮小率の複数のモデル画像を、下段から上段に向かうに連れて縮小率が高くなるように階層化したモデルピラミッドを生成する(モデルピラミッド生成工程、モデルピラミッド生成処理)。最下段のモデル画像は、縮小率が1、つまり縮小していない画像ということになる。
以上の説明では、モデルピラミッドを生成するに際し、撮像画像から切り出した画像に対して縮小処理を施してから各画像にエッジ抽出処理を施して複数のモデル画像を生成する場合について説明したが、これに限定するものではない。例えば、撮像画像から切り出した画像に対してエッジ抽出処理を施したモデル画像に対して縮小処理を施し、複数のモデル画像を生成して、モデルピラミッドを生成してもよい。
また、本実施形態では、CPU301がモデルピラミッドを生成する場合について説明したが、これに限定するものではなく、予め作成されたモデルピラミッドを取得する場合であってもよい。
次にステップS1〜S6で作成したモデルピラミッドを使用し、実際に物体の検出を行う探索処理のフローについて説明する。図8は、第1実施形態に係る画像処理装置が実行する画像処理方法の探索処理を示すフローチャートである。
まず、CPU301は、モデルピラミッド(形状モデル)のデータが格納されているHDD304や外部記憶装置800等の記憶装置から、モデルピラミッド(形状モデル)のデータを入力する(S7)。
次に、CPU301は、縮小率の異なる(解像度の異なる)複数の被探索画像を有し、これら被探索画像を下段から上段に向かうに連れて縮小率の高くなるように(解像度が低くなるように)階層化した被探索ピラミッドを生成する(S8〜S12)。本実施形態では、モデルピラミッドと同じ縮小率で同じ段数となるように被探索ピラミッドを生成する。即ち、モデルピラミッドが4段の場合には、被探索ピラミッドも4段とする。そして、モデルピラミッドと被探索ピラミッドにおいて同一階層同士は、同じ解像度(同じ縮小率)に設定されている。例えば、図7に示すように、モデルピラミッドが4段であるので、CPU301は、4枚の被探索画像IS1〜IS4からなる4段の被探索ピラミッドを生成する。
以下、具体的に説明すると、まず、CPU301は、検出対象となる物体をカメラ500により撮像させ、カメラ500の撮像により得られた撮像画像を入力する(S8:撮像工程)。
次に、CPU301は、入力した撮像画像をピラミッド段数分、縮小する(S9,S10)。画像の縮小方法は、図3のステップS3,S4と同様である。この撮像画像の縮小により、段階的に縮小された複数の画像が生成される。
次に、CPU301は、ステップS9,S10で生成した全ての画像に対して、エッジ抽出処理を行う(S11,S12)。エッジ抽出方法は、モデルピラミッド生成工程時のステップS5と同様である。CPU301は、以上のステップS8〜S12により、段階的に縮小された複数のエッジ特徴画像、つまり縮小率の異なる複数の被探索画像からなる被探索ピラミッドを生成する(被探索ピラミッド生成工程、被探索ピラミッド生成処理)。
即ちCPU301は、検出対象の物体を撮像した撮像画像からエッジを抽出したエッジ画像である最下段の被探索画像と、最下段の被探索画像を縮小した途中段及び最上段の被探索画像とからなる被探索ピラミッドを生成する。なお、途中段の被探索画像とは、最下段の被探索画像の縮小率と最上段の被探索画像の縮小率との間の縮小率の被探索画像のことである。
なお、被探索ピラミッドを生成するに際し、撮像画像に対して縮小処理を施してから各画像にエッジ抽出処理を施して複数の被探索画像を生成する場合について説明したが、これに限定するものではない。例えば、撮像画像に対してエッジ抽出処理を施した被探索画像に対して縮小処理を施し、複数の被探索画像を生成して、被探索ピラミッドを生成してもよい。
次に、CPU301は、モデルピラミッド及び被探索ピラミッドを用いて、同解像度の階層においてモデル画像を被探索画像の中から、類似度(一致度ともいう)の判定により探索するパターンマッチング処理を行う(S13)。CPU301は、このパターンマッチング処理を被探索ピラミッドの全ての段(被探索画像)に対して行う(S14)。
具体的に説明すると、最初は、最も縮小率の高い画像同士、即ち最上段の画像同士でパターンマッチングを行い、完了すれば次の縮小率の画像同士、即ち1つ下の階層の画像同士でパターンマッチングを行う。最後に、縮小を行っていない画像同士、即ち最下段の画像同士のパターンマッチングが完了したら終了となる。このように、パターンマッチング処理は、解像度の低い階層(縮小率の高い階層)から解像度の高い階層(縮小率の低い階層)に向かって順に行う。
CPU301は、ステップS13,S14による最下段のモデル画像と被探索画像とのパターンマッチング処理により抽出された候補点のうち、類似度が最も高い候補点を検出対象の物体の位置に決定する(S15:決定工程)。なお、最終的に候補点が1つであったときは、その候補点を検出対象の物体の位置に決定する。
CPU301は、ステップS15の画像処理結果をロボット制御装置400に出力する。ロボット制御装置400は、その画像処理結果に基づき、ロボット200を制御して、検出対象である物体、即ちワークW1をロボット200に把持させ、被組み付け部材であるワークW2に組付ける組付け工程を実行する。これにより、組立部品Wが製造される。
次に、ステップS13のパターンマッチング処理について詳細に説明する。図9及び図10は、第1実施形態に係る画像処理装置が実行する画像処理方法におけるパターンマッチング処理を示すフローチャートである。なお、図9は、ピラミッド最上段でのパターンマッチング処理を、図10は、ピラミッド途中段から最下段までのパターンマッチング処理を示している。図11は、パターンマッチング処理を説明するための図である。
CPU301は、図11に示すように、モデルピラミッドの最上段のモデル画像IT4を、被探索ピラミッドの最上段の被探索画像IS4内でピクセル単位でX,Y軸方向に走査し、画像IS4から画像IT4と同じ大きさの画像IIを抽出する。本実施形態では、モデル画像IT4における左上の点を代表点とし、被探索画像IS4中、代表点の位置をモデル画像IT4の走査位置とする。
CPU301は、画像IIとモデル画像IT4との類似度を求める、スコア計算を行う(S16)。次に、CPU301は、スコア計算の結果、スコア(類似度)が、予め設定された閾値T以上であるか否かを判断する(S17)。閾値Tは固定値であり、予めHDD304等の記憶装置に記憶された値を用いる。類似度は正規化されており、1が最も類似している値であり、0が最も類似していない値である。つまり、類似度の数値が高いほど画像同士が類似しているということになる。
CPU301は、スコア(類似度)が閾値T以上であると判断した場合(S17:Yes)、画像IIを抽出した走査位置(i,j)を候補点とする(S18)。
CPU301は、この候補点を、HDD304や外部記憶装置800等の記憶装置に記憶させる。なお、CPU301は、類似度が閾値Tを下回ると判断した場合(S17:No)、候補点無しとして、そのまま次のステップS19の処理に移行する。
CPU301は、全ての走査位置のスコア計算が完了したか否かを判断する(S19)。CPU301は、全て走査位置でのスコア計算が完了していなければ(S19:No)、次の走査位置にモデル画像IT4を走査(移動)させ(S20)、当該走査位置で画像IIを切り出し、スコア計算を行うステップS16に戻る。そして、画像IS4内の全ての走査位置でのスコア計算が完了したら(S19:Yes)、ピラミッド最上段での処理を終了する。
以上、本実施形態では、CPU301は、ステップS16〜S20により、最上段の被探索画像IS4に対し最上段のモデル画像IT4を走査し、閾値以上のスコア(類似度)となる候補点を抽出する(第1抽出工程、第1抽出処理)。つまり、被探索画像全体に対しモデル画像を走査して候補点を抽出する第1抽出処理は、最下段の被探索画像IS1よりも上段の被探索画像IS2〜IS4のうち、最上段の被探索画像IS4に対して行う。この第1抽出処理では、類似度の計算途中に計算の打ち切りは行わない。
次にピラミッド途中段から最下段までのパターンマッチング処理について、図10を用いて説明する。本実施形態では、最上段の被探索画像IS4よりも下段の被探索画像IS1〜IS3に対しては、それぞれ同じパターンマッチング処理を行う。
図12は、パターンマッチング処理を説明するための被探索ピラミッドを示す模式図である。被探索画像IS4からは、複数の候補点P41,P42が抽出されているものとして説明する。
ここで、既に候補点を抽出した被探索画像IS4に対して下段の被探索画像IS1〜IS3では、候補点が未抽出である。したがって、被探索画像IS4に対して1つ下段の被探索画像IS3から候補点の抽出を行う。
よって、まず、CPU301は、被探索画像IS3において、該被探索画像IS3に対して1つ上段の被探索画像IS4から抽出した候補点P41に対応した位置の点Q31を含む領域R31を設定する(S21:設定工程、設定処理)。つまり、ピラミッドを1段下げると候補点P41の位置(i,j)に対応する点Q31は座標を2倍した位置(2×i,2×j)となる。CPU301は、被探索画像IS3において、この対応点Q31(2×i,2×j)を中心とした周辺5×5画素の領域R31を設定する。このように設定する領域は、5×5画素に限らず、例えば2×2画素から10×10画素の範囲で変更可能である。
次に、CPU301は、ステップS21で設定した領域内、つまり領域R31で限定して用いる領域限定閾値TCの初期値を設定する(S22:設定工程、設定処理)。本実施形態では、領域限定閾値TCの初期値を閾値Tと同じ値に設定する。
次に、CPU301は、ステップS21にて設定した領域R31内でモデル画像IT3(代表点)を走査して、領域限定閾値TC以上の類似度となる候補点を抽出する(S23〜S28:第2抽出工程、第2抽出処理)。
具体的に説明すると、まずCPU301は、領域R31内の1つの点にモデル画像IT3の代表点を走査させたときの画像を被探索画像IS3から切り出す。そして、切り出した画像とモデル画像IT3とのスコア計算(類似度の計算)を行う(S23)。スコア計算方法は、ステップS16と同様である。
CPU301は、ステップS23で算出したスコア(類似度)が領域限定閾値TC以上であるか否かを判断する(S24)。
CPU301は、スコアが領域限定閾値TC以上であれば(S24:Yes)、その走査位置を候補点とする(S25)。その際、CPU301は、この候補点を、HDD304や外部記憶装置800等の記憶装置に記憶させる。このとき、領域R31に対する候補点のデータが記憶装置に既に記憶されている場合には、新たな候補点のデータで上書きする。つまり、1つの領域R31内での走査(探索)で、領域限定閾値TCよりも大きいスコアが複数回算出される場合は、その度に、記憶した候補点を上書きしていく。
計算したスコアが領域限定閾値TCと同じ値となった場合であって、領域R31に対する候補点のデータが記憶装置に既に記憶されている場合、既に記憶されている候補点のデータを消さずに新たに候補点のデータを追加記憶させてもよい。つまり、1つの領域R31に対して同じスコアの候補点が複数抽出されることになる。
CPU301は、算出したスコア(類似度)により領域限定閾値TCを更新する(S26)。これにより、領域限定閾値TCは、更新の度に値が大きくなっていくことになる。即ち、領域限定閾値TCは初期値よりも高い値に更新されていく。なお、ステップS24の判断でスコアが領域限定閾値TCと同じ値のときは、更新しなくてもよい。いずれにしても、CPU301は、計算が完了した類似度が現時点での領域限定閾値TCよりも高い値であれば、次の走査位置において用いる領域限定閾値TCを、現時点の領域限定閾値TCよりも高い値となった類似度で更新する。
CPU301は、算出したスコアが領域限定閾値TCを下回る場合(S24:No)、候補点無しとして次のステップS27の処理に移行する。
次に、CPU301は、領域R31内の走査(探索)が完了したか否かを判断する(S27)。
CPU301は、領域R31内の走査が完了していないと判断した場合(S27:No)、領域R31内の次の走査位置へモデル画像IT3を移動させて(S28)、ステップS23の処理に戻る。
CPU301は、領域R31内の走査が完了したと判断した場合(S27:Yes)、全ての候補点について処理が完了したか否かを判断する(S29)。CPU301は、処理が完了していないと判断した場合(S29:No)、次の候補点、例えば候補点P42を選択し(S30)、ステップS21の処理に戻る。
即ち、CPU301は、次の候補点P42についても同様に、被探索画像IS3において候補点P42に対応する位置の点Q32を含む領域R32を設定し(S21)、領域R32に限定して用いる領域限定閾値TCを設定する(S22)。このときの領域限定閾値TCの初期値は、閾値Tと同じ値に設定(初期化)される。そして、CPU301は、以下のステップS23〜S28の処理を行う。CPU301は、ステップS27において、領域R32内の走査が完了したと判断した場合、全ての候補点について処理が完了したか否かを判断する(S29)。CPU301は、処理が完了したと判断した場合(S29:Yes)、この段、即ち被探索画像IS3でのパターンマッチング処理を終了する。
このようにCPU301は、被探索画像IS3において、被探索画像IS4で抽出した候補点P41,P42に対応した位置の点毎、即ち点Q31,Q32毎に、領域R31,R32とその領域に限定して用いる領域限定閾値TCとを設定する。そして、CPU301は、それぞれの領域R31,R32に対してモデル画像IT3を走査して、領域限定閾値TC以上の類似度となる候補点P31,P32を抽出する。
なお、例えば領域R31と領域R32とが重なる場合であっても、重なる部分は、各領域R31,R32における走査で重複して類似度の計算を行うことになる。
残りの途中段である被探索画像IS2でのパターンマッチング処理及び最下段である被探索画像IS1でのパターンマッチング処理も同様に行う。
即ち、CPU301は、被探索画像IS2において、1つ上段の被探索画像IS3で抽出した候補点P31,P32に対応した位置の点Q21,Q22毎に領域R21,R22と領域限定閾値TCとを設定する。そして、CPU301は、各領域R21,R22内でモデル画像IT2を走査して、領域限定閾値TC以上の類似度となる候補点P21,P22を抽出する。同様に、CPU301は、被探索画像IS1において、1つ上段の被探索画像IS2で抽出した候補点P21,P22に対応した位置の点Q11,Q12毎に領域R11,R12と領域限定閾値TCとを設定する。そして、CPU301は、各領域R11,R12内でモデル画像IT1を走査して、領域限定閾値TC以上の類似度となる候補点P11,P12を抽出する。
以上、図8に示すステップS13〜S14の処理として、ピラミッドの最上段では図9のステップS16〜S20の処理、ピラミッドの途中段から最下段までは図10のステップS21〜S30の処理を行う。
そして、CPU301は、ステップS15において、最下段で抽出した候補点P11,P12のうち、スコア値が最も高い候補点の位置を、被探索画像IS1内の物体の検出位置とする。
次に、図9のステップS16及び図10のステップS23におけるスコア計算(類似度の計算)の処理について詳細に説明する。
図13は、第1実施形態に係る画像処理装置が実行する画像処理方法におけるスコア計算処理(類似度計算処理)を示すフローチャートである。CPU301は、まず、モデル画像中の特徴画像のエッジ点と、被探索画像におけるモデル画像中の特徴画像の点に対応する位置の点との1点の局所的なスコア(局所類似度)を、特徴画像の全ての点についてそれぞれ計算する。そして、CPU301は、全ての局所類似度の総和(スコア総和)Sを算出する(S40)。つまり、モデル画像中の特徴画像の画素と、被探索画像から抽出した抽出画像の画素とを、座標が同じ点同士で、局所スコア(局所類似度)を計算し、すべての局所スコアを総和した値を算出する。
そして、CPU301は、ステップS40にて計算したスコア総和を正規化することにより最終的なスコア(類似度)を計算する(S47)。例えば、モデル画像中の特徴画像のエッジ点数(画素数)をn個とした場合、局所スコアの合計をnで除算することにより正規化する。
以下、ステップS40,S47の動作を概念的に説明する。パターンマッチングで類似度を求める下記の式(3)に示す計算式を用いる。
モデル画像に含まれる特徴画像中の1つのエッジ点と、被探索画像中、特徴画像の1つのエッジ点と同じ座標の点のエッジ方向差分の余弦(コサイン値)を求めることにより、エッジ点1点の局所スコアが算出される。この処理を、モデル画像に含まれる特徴画像中の全てのエッジ点で行うことにより、全エッジ点の局所スコアの総和を算出する。この局所スコアの総和をモデル画像のエッジ点数nで割り算することにより、最終的なスコア(類似度)として0から1の範囲の値に正規化する。類似度1が最も類似性が高いことを表し、類似度0が最も類似性が低いことを表す。上式(3)の画像内の位置(i,j)とは、例えば図11に示す被探索画像IS4からモデル画像IT4に対応する大きさの画像を抽出した被探索画像IS内の位置のことを表し、候補点を表す。
以下、ステップS40におけるスコア総和の演算方法について具体的に説明する。まず、CPU301は、スコア総和値Sを0に初期化する(S41)。モデル画像中の特徴画像における各エッジ点に、1からnの通し番号を付与しておき、通し番号1から通し番号nまで局所スコアを計算(積算)すべく、変数kを1に設定する(S42)。
次に、CPU301は、特徴画像のエッジ点と、被探索画像における特徴画像のエッジ点に対応する位置の点との局所スコアを計算し、スコア総和Sに足し込む(S43)。
ここで、特徴画像の通し番号kのエッジ点(画素)におけるエッジ方向をθTkとする。また、被探索画像中、特徴画像のエッジ点に対応する位置、つまり抽出画像中、通し番号kのエッジ点と同じ座標位置の点(画素)のエッジ方向をθIkとする。
局所スコアは、エッジ方向θTkとエッジ方向θIkとのなす角の角度|θIk−θTk|の余弦を計算することにより求める。即ち、CPU301は、ステップS42において、以下の式(4)を用いて、局所スコアfkを計算し、fkをスコア総和Sに足し込んでいく。
fk=cos|θIk−θTk| (4)
次に、CPU301は、以下の式(5)を用いて、スコア計算が打ち切り可能か否かを判定する(S44)。即ち、CPU301は、類似度の計算途中で、類似度の計算途中結果に基づき、類似度が領域限定閾値TCよりも低い値となるか否かを予測する。
S<n×(TC−1)+k (5)
CPU301は、式(5)が成り立てば(S44:Yes)、即ち類似度が領域限定閾値TCよりも低い値となると予測した場合には、類似度の計算(スコア計算)を途中で打ち切り、終了する。
CPU301は、式(5)が成り立たなければ(S44:No)、即ち類似度が領域限定閾値TCよりも低い値となると予測できなかった場合には、モデル画像中の特徴画像における全てのエッジ点でスコア総和を計算したか判定する(S45)。CPU301は、全てのエッジ点での計算が完了していなければ(S45:No)、エッジ点の通し番号kを一つ進めて(S46)、ステップS43〜S45の処理を行う。即ち、CPU301は、類似度が領域限定閾値TCよりも低い値となると予測できなかった場合には、類似度の計算を続行する。
CPU301は、全てのエッジ点での計算が完了すれば(S45:Yes)、スコア総和をモデル画像中の特徴画像における全エッジ点数で正規化することにより、ある走査位置での最終的なスコア(類似度)を算出する(S47)。なお、CPU301は、計算を途中で打ち切った場合(S44:Yes)は、スコア(類似度)を閾値Tよりも低い値、例えば0とする。これにより、類似度の計算を途中で打ち切った走査位置については、特徴点として抽出されないようになる。
式(5)は、エッジ点の通し番号kまで計算した時点で、残りのエッジ点数(n−k)個の局所スコアfkが全て1.0(最大の局所スコア)だったとしても、最終的なスコアが閾値TCを超えないと判断できた場合に計算を打ち切るための式である。
以上、第1実施形態によれば、ピラミッドの途中段及び最下段においてパターンマッチング処理を行う際に、領域毎にスコア計算の打ち切りに用いる領域限定閾値TCの更新を行う。したがって、類似度の計算の打ち切り、及び計算を打ち切るか否かを判断する領域限定閾値の更新により、パターンマッチングに要する処理時間を短縮することができる。
また、他の領域で算出された類似度の影響を受けることなく、各領域で独立した領域限定閾値TCでスコア計算の打ち切りの判断を行うことができるので、物体の検出の失敗を防ぐことができる。
なお、第1実施形態では、最上段の被探索画像IS4を除く、全ての被探索画像IS1〜IS3に対して、類似度計算の打ち切り及び領域限定閾値の更新を行う場合について説明したが、これに限定するものではない。
例えば、最下段の被探索画像IS1に対してのみ、類似度計算の打ち切り及び領域限定閾値TCの更新を行ってもよいし、途中段の被探索画像IS2又は被探索画像IS3についてのみ、類似度計算の打ち切り及び領域限定閾値TCの更新を行ってもよい。この場合、類似度計算の打ち切り及び領域限定閾値TCの更新を行わない段(階層)の被探索画像に対しては、閾値Tで類似度の判定を行って候補点を抽出すればよい。また、この類似度計算の打ち切り及び領域限定閾値TCの更新を行わない段(階層)の被探索画像に対しては、上段の候補点に対応する点を含む領域を設定し、その領域内だけモデル画像を走査するようにしてもよい。もちろん、被探索ピラミッドにおいて、被探索画像IS4以外の全ての被探索画像IS1〜IS3に対して類似度計算の打ち切り及び領域限定閾値の更新を行った方が、処理時間を効果的に短縮することができる。
また、領域限定閾値TCを更新する場合、つまり類似度が領域限定閾値TCを超える場合には、その領域内の候補点のデータを更新する(データを上書きする)ようにしたが、これに限定するものではなく、先に登録した候補点のデータを残しておいてもよい。もちろん、候補点のデータを更新する方が、データ量が少なくて済み、処理時間を効果的に短縮することができるので好ましい。
また、第1実施形態では類似度(一致度ともいう)を計算する場合について説明したが、相違度(不一致度ともいう)を計算する場合であってもよい。この場合、相違度の値が低いほど類似性が高くなる。
したがって、閾値以上の類似度となる候補点を抽出することは、閾値以下の相違度となる候補点を抽出することと同じである。同様に、領域限定閾値以上の類似度となる候補点を抽出することは、領域限定閾値以下の相違度となる候補点を抽出することと同じである。また、類似度の計算を途中で打ち切るか否かは、類似度が領域限定閾値よりも低い値となるか否かを予測して行うが、これを相違度で表現すれば、相違度が領域限定閾値よりも高い値となるか否かで予測して行うことになる。同様に、次の走査位置において用いる領域限定閾値を、領域限定閾値よりも高い値となった類似度で更新することは、相違度で表現すれば、次の走査位置において用いる領域限定閾値を、領域限定閾値よりも低い値となった相違度で更新するということになる。
このように、相違度(不一致度)で判定することは、類似度(一致度)で判定することと等価であり、相違度で表現されていても、(閾値の大小判定は反対になるが)類似度で判定していることと同じである。
[第2実施形態]
次に、第2実施形態の画像処理方法について説明する。第2実施形態の生産装置の構成及び画像処理装置の構成は、第1実施形態と同様である。以下、画像処理装置300によるパターンマッチング方法(画像処理方法)について説明する。画像処理装置300のCPU301は、プログラム321をHDD304から読み出して実行することにより、以下に説明する画像処理方法の各工程を実行する。まず、パターンマッチング処理を行うためのモデルピラミッド(画像モデル)の作成処理について説明する。
第1実施形態では、撮像画像から切り出した画像を縮小してエッジ抽出を行うことでモデルピラミッドを作成する場合について説明したが、第2実施形態では、撮像画像から切り出した画像を縮小してモデルピラミッドを作成する。即ち、画像を縮小するだけで、エッジ抽出は行わない。
図14は、第2実施形態に係る画像処理装置が実行する画像処理方法におけるモデルピラミッド生成工程(画像モデルの作成処理)を示すフローチャートである。
まず、オペレータ(作業者)は、パターンマッチング用のモデル画像を用意するために理想状態の照明条件及び位置に、参照物(モデル物体)をセットする。CPU301は、カメラ500に参照物の撮像を行わせ、参照物が写り込んだ参照画像である画像データをカメラ500から取得する(S51)。なお、参照画像は、予めHDD304や外部記憶装置800等の記憶装置に格納されていてもよく、その場合は、CPU301は、HDD304や外部記憶装置800等の記憶装置から、参照画像のデータを取得することとなる。
CPU301は、参照画像を表示装置700に表示させ、オペレータにより指定された、参照物が写り込んだ部分を包含する矩形領域の画像を切り出し、縮小を行っていないモデル画像に設定する(S52)。指定の方法は、例えばマウス等の入力装置600を利用し、表示装置700に表示された参照画像内の参照物が写り込んだ画像を包含する領域の左上と右下の2点をクリックすることにより行う。CPU301は、ステップS52では、クリックされた2点の位置(矩形領域の左上、右下の角の点)を指定し、参照画像から矩形領域の画像のみを切り出す。
次に、CPU301は、ステップS52で切り出した矩形領域の画像(モデル画像)を、オペレータが指定したピラミッド段数分、画像縮小する(S53,S54)。画像縮小の方法は、第1実施形態で説明した図3のステップS3と同様である。
即ち、CPU301は、ステップS53において、モデル画像を縮小し、ステップS54において、指定ピラミッド段数分のモデル画像を作成したか否かを判断する。
CPU301は、ステップS53での縮小処理を所定の回数行っていなければ(S54:No)ステップS53に戻り、前回縮小したモデル画像に対して、同様の縮小方法により再縮小を行う。CPU301は、所定回数の画像縮小を終えていれば(S54:Yes)、画像縮小の処理は終了する。
以上のステップS51〜S54により、CPU301は、異なる縮小率の複数のモデル画像を、下段から上段に向かうに連れて縮小率が高くなるように階層化したモデルピラミッドを生成する(モデルピラミッド生成工程、モデルピラミッド生成処理)。最下段のモデル画像は、縮小率が1、つまり縮小していない画像ということになる。生成されたモデルピラミッドは、HDD304や外部記憶装置800等の記憶装置に記憶される。
次にステップS51〜S54で作成したモデルピラミッドを使用し、実際に物体の検出を行う探索処理のフローについて説明する。図15は、第2実施形態に係る画像処理装置が実行する画像処理方法の探索処理を示すフローチャートである。
まず、CPU301は、モデルピラミッド(画像モデル)のデータが格納されているHDD304や外部記憶装置800等の記憶装置から、モデルピラミッド(画像モデル)のデータを入力する(S61)。
次に、CPU301は、縮小率の異なる(解像度の異なる)複数の被探索画像を有し、これら被探索画像を下段から上段に向かうに連れて縮小率が高くなるように(解像度が低くなるように)階層化した被探索ピラミッドを生成する。本実施形態では、モデルピラミッドと同じ縮小率で同じ段数となるように被探索ピラミッドを生成する。
以下、具体的に説明すると、まず、CPU301は、検出対象となる物体をカメラ500により撮像させ、カメラ500の撮像により得られた撮像画像を入力する(S62:撮像工程)。
次に、CPU301は、入力した撮像画像を縮小していない被探索画像とし、この被探索画像をピラミッド段数分、縮小する(S63,S64)。画像の縮小方法は、図3のステップS3,S4と同様である。CPU301は、以上のステップS62〜S64により、撮像画像(縮小していない被探索画像)と段階的に縮小された複数の画像(被探索画像)とで構成されている被探索ピラミッドを生成する(被探索ピラミッド生成工程、被探索ピラミッド生成処理)。
次に、CPU301は、モデルピラミッド及び被探索ピラミッドを用いて、同解像度の階層においてモデル画像を被探索画像の中から、相違度(不一致度ともいう)の判定により探索するパターンマッチング処理を行う(S65)。CPU301は、このパターンマッチング処理を被探索ピラミッドの全ての段(被探索画像)に対して行う(S66)。
具体的に説明すると、最初は、最も縮小率の高い画像同士、即ち最上段の画像同士でパターンマッチングを行い、完了すれば次の縮小率の画像同士、即ち1つ下の階層の画像同士でパターンマッチングを行う。最後に、縮小を行っていない画像同士、即ち最下段の画像同士のパターンマッチングが完了したら終了となる。このように、パターンマッチング処理は、解像度の低い階層(縮小率の高い階層)から解像度の高い階層(縮小率の低い階層)に向かって順に行う。
CPU301は、ステップS65,S66による最下段のモデル画像と被探索画像とのパターンマッチング処理により抽出された候補点のうち、相違度が最も低い候補点を検出対象の物体の位置に決定する(S67:決定工程)。なお、最終的に候補点が1つであったときは、その候補点を検出対象の物体の位置に決定する。
CPU301は、ステップS67の画像処理結果をロボット制御装置400に出力する。ロボット制御装置400は、その画像処理結果に基づき、ロボット200を制御して、検出対象である物体、即ちワークW1をロボット200に把持させ、被組み付け部材であるワークW2に組付ける組付け工程を実行する。これにより、組立部品Wが製造される。
次に、ステップS65のパターンマッチング処理について詳細に説明する。図16及び図17は、第2実施形態に係る画像処理装置が実行する画像処理方法におけるパターンマッチング処理を示すフローチャートである。なお、図16は、ピラミッド最上段でのパターンマッチング処理を、図17は、ピラミッド途中段から最下段までのパターンマッチング処理を示している。
CPU301は、モデルピラミッドの最上段のモデル画像を、被探索ピラミッドの最上段の被探索画像内でピクセル単位でX,Y軸方向に走査し、被探索画像からモデル画像と同じ大きさの画像(抽出画像)を抽出する。
CPU301は、抽出画像とモデル画像との相違度を求める、スコア計算を行う(S71)。次に、CPU301は、スコア計算の結果、スコア(相違度)が、予め設定された閾値T以下であるか否かを判断する(S72)。閾値Tは固定値であり、予めHDD304等の記憶装置に記憶された値を用いる。スコア(相違度)は、0がモデル画像と探索画像が一致していることを表し、値が大きくなるほど一致していないことを表す。つまり、相違度の数値が高いほど画像同士が相違している(類似していない)ということになる。
CPU301は、スコア(相違度)が閾値以下であると判断した場合(S72:Yes)、抽出画像を抽出した走査位置を候補点とする(S73)。
CPU301は、この候補点を、HDD304や外部記憶装置800等の記憶装置に記憶させる。なお、CPU301は、相違度が閾値を上回ると判断した場合(S72:No)、候補点無しとして、そのまま次のステップS74の処理に移行する。
CPU301は、全ての走査位置のスコア計算が完了したか否かを判断する(S74)。CPU301は、全て走査位置でのスコア計算が完了していなければ(S74:No)、次の走査位置にモデル画像を走査(移動)させ(S75)、当該走査位置で画像を切り出し、スコア計算を行うステップS71に戻る。そして、被探索画像内の全ての走査位置でのスコア計算が完了したら(S74:Yes)、ピラミッド最上段での処理を終了する。
以上、本実施形態では、CPU301は、ステップS71〜S75により、最上段の被探索画像に対し最上段のモデル画像を走査し、閾値以下のスコア(相違度)となる候補点を抽出する(第1抽出工程、第1抽出処理)。つまり、被探索画像全体に対しモデル画像を走査して候補点を抽出する第1抽出処理は、最下段の被探索画像よりも上段の被探索画像のうち、最上段の被探索画像に対して行う。この第1抽出処理では、類似度の計算途中に計算の打ち切りは行わない。
次にピラミッド途中段から最下段までのパターンマッチング処理について、図17を用いて説明する。本実施形態では、最上段の被探索画像よりも下段(途中段及び最下段)の被探索画像に対しては、それぞれ同じパターンマッチング処理を行う。
ここで、第1実施形態と同様、図12を参照しながらパターンマッチング処理について説明する。被探索画像IS4からは、複数の候補点P41,P42が抽出されているものとして説明する。
ここで、既に候補点を抽出した被探索画像IS4に対して下段の被探索画像IS1〜IS3では、候補点が未抽出である。したがって、被探索画像IS4に対して1つ下段の被探索画像IS3から候補点の抽出を行う。
よって、まず、CPU301は、被探索画像IS3において、該被探索画像IS3に対して1つ上段の被探索画像IS4から抽出した候補点P41に対応した位置の点Q31を含む領域R31を設定する(S81:設定工程、設定処理)。つまり、ピラミッドを1段下げると候補点P41の位置(i,j)に対応する点Q31は座標を2倍した位置(2×i,2×j)となる。CPU301は、被探索画像IS3において、この対応点Q31(2×i,2×j)を中心とした周辺5×5画素の領域R31を設定する。このように設定する領域は、5×5画素に限らず、例えば2×2画素から10×10画素の範囲で変更可能である。
次に、CPU301は、ステップS81で設定した領域内、つまり領域R31で限定して用いる領域限定閾値TCの初期値を設定する(S82:設定工程、設定処理)。本実施形態では、領域限定閾値TCの初期値を閾値Tと同じ値に設定する。
次に、CPU301は、ステップS81にて設定した領域R31内でモデル画像IT3(代表点)を走査して、領域限定閾値TC以下の相違度となる候補点を抽出する(S83〜S88:第2抽出工程、第2抽出処理)。
具体的に説明すると、まずCPU301は、領域R31内の1つの点にモデル画像IT3の代表点を走査させたときの画像を被探索画像IS3から切り出す。そして、切り出した画像とモデル画像IT3とのスコア計算(相違度の計算)を行う(S83)。スコア計算方法は、ステップS71と同様である。
CPU301は、ステップS83で算出したスコア(相違度)が領域限定閾値TC以下であるか否かを判断する(S84)。
CPU301は、スコアが領域限定閾値TC以下であれば(S84:Yes)、その走査位置を候補点とする(S85)。その際、CPU301は、この候補点を、HDD304や外部記憶装置800等の記憶装置に記憶させる。このとき、領域R31に対する候補点のデータが記憶装置に既に記憶されている場合には、新たな候補点のデータで上書きする。つまり、1つの領域R31内での走査(探索)で、領域限定閾値TCよりも小さいスコアが複数回算出される場合は、その度に、記憶した候補点を上書きしていく。
なお、計算したスコアが領域限定閾値TCと同じ値となった場合であって、領域R31に対する候補点のデータが記憶装置に既に記憶されている場合、既に記憶されている候補点のデータを消さずに新たに候補点のデータを追加記憶させてもよい。つまり、1つの領域R31に対して同じスコアの候補点が複数抽出されることになる。
CPU301は、算出したスコア(相違度)により領域限定閾値TCを更新する(S86)。これにより、領域限定閾値TCは、更新の度に値が小さくなっていくことになる。即ち、領域限定閾値TCは初期値よりも低い値に更新されていく。なお、ステップS84の判断でスコアが領域限定閾値TCと同じ値のときは、更新しなくてもよい。いずれにしても、CPU301は、計算が完了した相違度が現時点での領域限定閾値TCよりも低い値であれば、次の走査位置において用いる領域限定閾値TCを、現時点の領域限定閾値TCよりも低い値となった相違度で更新する。
CPU301は、算出したスコアが領域限定閾値TCを上回る場合(S84:No)、候補点無しとして次のステップS87の処理に移行する。
次に、CPU301は、領域R31内の走査(探索)が完了したか否かを判断する(S87)。
CPU301は、領域R31内の走査が完了していないと判断した場合(S87:No)、領域R31内の次の走査位置へモデル画像を移動させて(S88)、ステップS83の処理に戻る。
CPU301は、領域R31内の走査が完了したと判断した場合(S87:Yes)、全ての候補点について処理が完了したか否かを判断する(S89)。CPU301は、処理が完了していないと判断した場合(S89:No)、次の候補点、例えば候補点P42を選択し(S90)、ステップS81の処理に戻る。
即ち、CPU301は、次の候補点P42についても同様に、被探索画像IS3において候補点P42に対応する位置の点Q32を含む領域R32を設定し(S81)、領域R32に限定して用いる領域限定閾値TCを設定する(S82)。このときの領域限定閾値TCの初期値は、閾値Tと同じ値に設定(初期化)される。そして、CPU301は、以下のステップS83〜S88の処理を行う。CPU301は、ステップS87において、領域R32内の走査が完了したと判断した場合、全ての候補点について処理が完了したか否かを判断する(S89)。CPU301は、処理が完了したと判断した場合(S89:Yes)、この段、即ち被探索画像IS3でのパターンマッチング処理を終了する。
このようにCPU301は、被探索画像IS3において、被探索画像IS4で抽出した候補点P41,P42に対応した位置の点毎、即ち点Q31,Q32毎に、領域R31,R32とその領域に限定して用いる領域限定閾値TCとを設定する。そして、CPU301は、それぞれの領域R31,R32に対してモデル画像を走査して、領域限定閾値TC以下の相違度となる候補点P31,P32を抽出する。
なお、例えば領域R31と領域R32とが重なる場合であっても、重なる部分は、各領域R31,R32における走査で重複して相違度の計算を行うことになる。
残りの途中段である被探索画像IS2でのパターンマッチング処理及び最下段である被探索画像IS1でのパターンマッチング処理も同様に行う。
即ち、CPU301は、被探索画像IS2において、1つ上段の被探索画像IS3で抽出した候補点P31,P32に対応した位置の点Q21,Q22毎に領域R21,R22と領域限定閾値TCとを設定する。そして、CPU301は、各領域R21,R22内でモデル画像を走査して、領域限定閾値TC以下の相違度となる候補点P21,P22を抽出する。同様に、CPU301は、被探索画像IS1において、1つ上段の被探索画像IS2で抽出した候補点P21,P22に対応した位置の点Q11,Q12毎に領域R11,R12と領域限定閾値TCとを設定する。そして、CPU301は、各領域R11,R12内でモデル画像を走査して、領域限定閾値TC以下の相違度となる候補点P11,P12を抽出する。
以上、図15に示すステップS65〜S66の処理として、ピラミッドの最上段では図16のステップS71〜S75の処理、ピラミッドの途中段から最下段までは図17のステップS81〜S90の処理を行う。
そして、CPU301は、ステップS67において、最下段で抽出した候補点P11,P12のうち、スコア値(相違度)が最も低い候補点の位置を、被探索画像IS1内の物体の検出位置とする。
次に、図16のステップS71及び図17のステップS81におけるスコア計算(相違度の計算)の処理について詳細に説明する。図18は、第2実施形態に係る画像処理装置が実行する画像処理方法におけるスコア計算処理(相違度計算処理)を示すフローチャートである。
CPU301は、まず、被探索画像からモデル画像に対応する大きさの画像を抽出した抽出画像とモデル画像との輝度差分を求める。具体的には、CPU301は、まずスコア(相違度S)の値を0に初期化する(S91)。そして、被探索画像から抽出した抽出画像とモデル画像との対応する座標(x,y)の値を0に初期化する(S92,S93)。抽出画像及びモデル画像の画像幅、高さをそれぞれWidth、Heightとした場合、対応する座標x=0、y=0の位置は、画像の左上であり、x=Width−1、y=Height−1は画像の右下である。
CPU301は、被探索画像から抽出した抽出画像の座標(x,y)の輝度値Ixyとモデル画像の座標(x,y)の輝度値Txyとの差を算出し、差の絶対値をスコアSに足し込んでいく(S94)。
CPU301は、領域限定閾値TCにより、スコア計算が打ち切り可能か否かを判定する(S95)。即ち、CPU301は、相違度の計算途中で、相違度の計算途中結果に基づき、相違度が領域限定閾値TCよりも高い値となるか否かを予測する。
CPU301は、スコアSが領域限定閾値TC以下の場合(S95:No)、即ち相違度が領域限定閾値TCよりも高い値となると予測できなかった場合には、スコア計算を継続し、座標xがWidth−1よりも小さいか否かを判断する(S96)。CPU301は、座標xがWidth−1よりも小さいと判断した場合(S96:Yes)、座標xを1つ増加させ(S97)、次の位置の輝度差分を求めるため、ステップS94の処理に戻る。
CPU301は、座標xがWidth−1となった場合(S96:No)、座標yがHeight−1よりも小さいか否かを判断する(S98)。CPU301は、座標yがHeight−1より小さいと判断した場合(S98:Yes)、座標yを1つ増加させ(S99)、次の行の輝度差分を求めるため、ステップS93の処理に戻る。
即ち、CPU301は、相違度が領域限定閾値TCよりも高い値となると予測できなかった場合には、相違度の計算を続行する。CPU301は、座標yがHeight−1となった場合(S98:No)、スコア(相違度)の計算が完了する。このように、被探索画像から抽出した抽出画像とモデル画像との輝度差分の絶対値の総和を算出して、その値をスコア(相違度)とする。
CPU301は、上記計算の途中でスコアSが領域限定閾値TCよりも高い値となると予測した場合(S95:Yes)、スコア計算を打ち切り、スコア計算を終了する。
以上、第2実施形態によれば、ピラミッドの途中段及び最下段においてパターンマッチング処理を行う際に、領域毎にスコア計算の打ち切りに用いる領域限定閾値TCの更新を行う。したがって、相違度の計算の打ち切り、及び計算を打ち切るか否かを判断する領域限定閾値の更新により、パターンマッチングに要する処理時間を短縮することができる。
また、他の領域で算出された相違度の影響を受けることなく、各領域で独立した領域限定閾値TCでスコア計算の打ち切りの判断を行うことができるので、物体の検出の失敗を防ぐことができる。
なお、第2実施形態では、最上段の被探索画像IS4を除く、全ての被探索画像IS1〜IS3に対して、相違度計算の打ち切り及び領域限定閾値の更新を行う場合について説明したが、これに限定するものではない。
例えば、最下段の被探索画像IS1に対してのみ、相違度計算の打ち切り及び領域限定閾値TCの更新を行ってもよいし、途中段の被探索画像IS2又は被探索画像IS3についてのみ、相違度計算の打ち切り及び領域限定閾値TCの更新を行ってもよい。この場合、相違度計算の打ち切り及び領域限定閾値TCの更新を行わない段(階層)の被探索画像に対しては、閾値Tで類似度の判定を行って候補点を抽出すればよい。また、この類似度計算の打ち切り及び領域限定閾値TCの更新を行わない段(階層)の被探索画像に対しては、上段の候補点に対応する点を含む領域を設定し、その領域内だけモデル画像を走査するようにしてもよい。もちろん、被探索ピラミッドにおいて、被探索画像IS4以外の全ての被探索画像IS1〜IS3に対して相違度計算の打ち切り及び領域限定閾値の更新を行った方が、処理時間を効果的に短縮することができる。
また、領域限定閾値TCを更新する場合、つまり相違度が領域限定閾値TCを下回る場合には、その領域内の候補点のデータを更新する(データを上書きする)ようにしたが、これに限定するものではなく、先に登録した候補点のデータを残しておいてもよい。もちろん、候補点のデータを更新する方が、データ量が少なくて済み、処理時間を効果的に短縮することができるので好ましい。
また、第2実施形態では、相違度を、被探索画像とモデル画像との輝度値差分の絶対値の総和により計算しているが、輝度値の差分の二乗和により計算してもよい。
また、第2実施形態では、相違度(不一致度ともいう)として計算する場合について説明したが、類似度(一致度ともいう)として計算してもよい。つまり、相違度(不一致度)で判定することは、類似度(一致度)で判定することと等価であり、相違度で表現されていても、(閾値の大小判定は反対になるが)類似度で判定していることと同じである。
なお、本発明は、以上説明した実施形態に限定されるものではなく、本発明の技術的思想内で多くの変形が可能である。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されない。
[その他の実施形態]
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。