本発明は、電子部品の位置を検出あるいは認識するために、その電子部品を撮像し撮像した電子部品の画像に画像処理を施す画像処理装置に関する。
従来、電子部品を基板上に搭載する電子部品実装装置が知られている。この電子部品実装装置では、電子部品を精度よく基板上の所定位置に搭載するために、電子部品実装機の吸着ヘッドにより吸着された電子部品を撮像し、電子部品の画像を処理して電子部品の位置検出(部品中心並びに部品傾きの検出)、いわゆる部品認識を行い、その認識結果に基づいて搭載位置を補正し部品搭載を行っている。
図21は、従来の画像処理装置の画像入力部の構成を示すブロック図であって、(a)はひとつのCPUを用いた構成を示す図であり、(b)は2つのCPUを用いた構成を示す図である。
画像入力部は、標準カメラ4や高解像度カメラ5によって撮像された電子部品の画像をデジタル画像に変換する入力回路7と、デジタル画像に変換された画像を格納する画像メモリ8と、画像メモリ8の画像データを演算処理するCPU(演算装置)10、11とを有して構成される。
従来、画像処理演算をひとつのCPU10で処理する構成(図21(a))が一般的であり、この場合、例えば並列処理可能な処理Aおよび処理Bという2つの処理があるときでも、この処理Aと処理BはひとつのCPU10によって逐次処理されていた。
ところが、電子部品を撮影した画像の高解像度化や電子部品の電極数の増大、位置決め結果の高精度化のために、その画像処理は重くなる一方である。例えば、電極がボール形状の電子部品であるボール部品では、ボール状の電極数がついには1万個を越えるものもあり、現行CPUの処理速度では装置の要求時間を満たせなくなってしまうこともある。
図21(a)に示す従来の画像入力部の構成では、非常に高性能なCPUが必要となり、対応できるCPUが存在しない、もしくは高価なものとなってしまうという問題があった。
そこで、画像処理を高速化するために、画像処理の並列化が検討されており、図21(b)に示すように、CPU10のほかにCPU17を設けてCPUを複数化して並列処理を実現する構成が提案されている(画像処理の分散処理に関しては特許文献1、特許文献2を参照)。
特開平8−44678号公報
特許第3646420号公報
ところが、CPUを複数設ける構成の場合、画像メモリが各CPUからのアクセスに耐えられるように、バンド幅の広い高価な画像メモリを使用した構成を用いる必要がある。すなわち、各両CPUから頻繁にアクセスされることを考え、アクセスが衝突しないように、アクセス時間が早い、動作クロック周波数が高い画像メモリにする必要がある。こうなると、その要求を満たす画像メモリが存在しない、もしくは高価なものとなってしまうという問題があった。
特に、電子部品実装装置で用いる画像処理装置の場合、取り扱う電子部品のすべてが部品認識のための画像処理の負荷が大きなものではなく、このような部品はごく少数の限られた部品である。まれに発生する負荷の高い処理にあわせて、高価なハードウェア資源を用意するのでは、無駄に高価な装置となってしまうおそれがあった。
本発明は、上記の点にかんがみてなされたもので、安価なCPUや画像メモリで構成した場合であっても画像処理能力を向上させることができる画像処理装置を提供することを目的とする。
本発明(請求項1)は上記の目的を達成するために、
撮像された電子部品の画像を処理して電子部品の認識を行う画像処理装置であって、
撮像された電子部品の画像を格納する第1と第2の画像メモリと、
前記第1の画像メモリに格納された画像を処理する第1のCPUと、
前記第2の画像メモリに格納された画像を処理する第2のCPUとを設け、
前記第1のCPUは、第1の画像メモリの画像のうち設定された画像領域にある画像を処理し、また第2のCPUは、第2の画像メモリの画像で第1の画像メモリで設定されている画像領域とは異なる画像領域にある画像を、第1のCPUによる画像処理と並列して処理することを特徴とする。
第1と第2のCPUはそれぞれ異なるリード端子列を含む画像、あるいは、それぞれ異なる辺あるいはコーナーを含む画像、あるいは、それぞれ異なる領域にあるボール電極の画像を処理し、それぞれリード端子位置、辺あるいはコーナーの外形、あるいはボール電極を認識する。
また、本発明(請求項5)は、
撮像された電子部品の画像を処理して電子部品の認識を行う画像処理装置であって、
撮像された電子部品の画像を格納する第1と第2の画像メモリと、
前記第1の画像メモリに格納された画像を処理する第1のCPUと、
前記第2の画像メモリに格納された画像を処理する第2のCPUとを設け、
前記第1のCPUは、第1の画像メモリに格納された画像を所定の認識パラメータ値で処理し、また第2のCPUは、第2の画像メモリに格納された画像を、第1のCPUによる画像処理と並列して前記所定の認識パラメータ値とは異なる認識パラメータ値で処理することを特徴とする。
又、本発明(請求項6)は、
撮像された電子部品の画像を処理して電子部品の検査を行なう画像処理装置であって、
撮像された電子部品の画像を格納する第1と第2の画像メモリと、
前記第1の画像メモリに格納された画像を処理する第1のCPUと、
前記第2の画像メモリに格納された画像を処理する第2のCPUとを設け、
前記第1のCPUは、第1の画像メモリに格納された画像を所定のアルゴリズムで検査し、また第2のCPUは、第2の画像メモリに格納された画像を、第1のCPUによる画像処理と並列して前記所定のアルゴリズムとは異なるアルゴリズムで検査することを特徴とする。
その際、前記第1のCPU及び前記第2のCPUのいずれか一方により検査結果がNGと判定された場合、他方のCPUがまだ異なるアルゴリズムによる検査を実行中であれば、他方のCPUに対して処理を中断させる割り込みを発行する手段を設けるようにしてもよい。
本発明によれば、異なる画像メモリに電子部品の画像を格納し、各画像メモリに格納された画像の異なる領域にある画像を、それぞれ異なるCPUで分散化して並列処理を行っているので、画像処理を高速化して部品認識時間を短縮することができ、高価なハードウェア資源(CPU、画像メモリ)を用いることなく、安価な構成で高速な部品認識が可能となる。
以下、本発明による実施の形態に基づいて図面を参照して説明する。
図1は、電子部品実装装置における画像処理装置およびその周辺構成の要部の一例を示すブロック図である。
この電子部品実装装置では、電子部品(以下単に部品という)2を吸着し、撮像位置へセットするための吸着ノズル1と、吸着ノズル1の移動や照明装置3の駆動など部品の基板(不図示)上への搭載動作を制御するマシン制御装置15と、部品2を撮像するための撮像装置として機能する標準カメラ4及び高解像度カメラ5と、撮像された画像を処理して部品認識する画像処理装置14とによって構成される。
画像処理装置14は、カメラ4、5によって撮像された部品の画像をデジタル画像に変換する入力回路7、デジタル画像に変換された画像を格納する画像メモリ8、作業用メモリ9、画像メモリ8のデータを演算処理する演算回路(CPU)10、部品データ格納メモリ12、インターフェース13並びに、各装置ないしメモリ間のデータの流れを制御するとともに、部品搭載に必要なデータを演算する制御CPU11から構成される。また、撮像された画像あるいは処理された画像を表示させるモニタ6が設けられる。
マシン制御装置15は、部品データをインターフェース13を介して画像処理装置14へ送信する。画像処理装置14は受信した部品データを部品データ格納メモリ12に格納する。マシン制御装置15は、通常、部品の種類、特に部品の電極サイズによって、標準カメラ4あるいは高解像度カメラ5を選択し、部品2を吸着ノズル1で吸着し、選択したカメラの撮像位置にセットする。このとき、照明装置3を選択したカメラで撮像できるように移動、点灯させ、画像処理装置14にインターフェース13を介して、選択したカメラチャネル情報とともに処理実行を指示する。
画像処理装置14は、指定されたカメラ4もしくは5を制御し、撮像された部品2の画像を、入力回路7でデジタル化し、画像メモリ8に多値画像データとして記憶させる。そして、演算回路10は、画像メモリ8のデータを処理し、リード先端やコーナーなどの位置を検出し、部品中心と吸着中心間のずれ、並びに部品の吸着傾きを算出し、部品の位置決め(部品認識)を行う。
マシン制御装置15は、部品認識結果を受け取り、吸着ノズル1を搭載位置に移動させ、部品認識結果に従って部品の吸着ずれ(部品中心と吸着中心間のずれ並びに吸着角度ずれ)を補正し、部品2を基板上の所定位置に搭載する。
本発明では、高速な画像処理を実現するために、図2(a)、(b)に示したように、画像処理装置14に複数の画像メモリと複数の演算回路(CPU)が設けられる。
図2(a)では、カメラ4、5からの画像データは入力回路7を介して読み取られ、分配器18を介して2つの画像メモリ8、19に分配し、画像メモリ8に分配された画像データは、CPU10によって、また、画像メモリ19に分配された画像データは、CPU17によって処理される。この実施例では、画像メモリ8にはCPU10のみがアクセス可能であり、画像メモリ19にはCPU17のみがアクセス可能であり、ひとつのメモリに対して複数のCPUがアクセスすることがないので、帯域の広い高価な画像メモリを使わなくても、並列処理が可能となる。
ところで、分散可能な処理の並列処理化のためだけにCPU17を実装するのは、CPU17が何ら処理を実行していない時間が存在して有効活用がされないことも考えられる。そこで、図2(b)に示す例では、2ヘッド動作の電子部品実装装置において、各ヘッドごとに画像の入力系を用意し、それぞれでCPUを設けて各ヘッドの処理を並列で行う中で、余ったCPUリソースがあればお互いで有効活用し、処理能力を高めるようにしている。すなわち、カメラ4、5からの画像データは入力回路7を介して画像メモリ8に書き込まれるが、入力回路7と画像メモリ8との間には分配器18を設けて、画像メモリ8と同じデータを同時間で画像メモリ19にも書き込む。
また、他のヘッドの標準カメラ64、高解像度カメラ65からの画像データは、入力回路7と同様な入力回路20を介して画像メモリ22に書き込まれるが、入力回路20と画像メモリ22との間には分配器21を設けて、画像メモリ22と同じデータを同時間で画像メモリ23にも書き込む。
CPU17は、CPU10の副CPUとして画像メモリ19にアクセスして処理を実行し、CPU10は、CPU17の副CPUとして画像メモリ23にアクセスして処理を実行する。画像メモリ8にはCPU10のみがアクセス可能であり、画像メモリ19にはCPU17のみがアクセス可能である。また、画像メモリ22にはCPU17のみがアクセス可能であり、画像メモリ23にはCPU10のみがアクセス可能である。
図2(b)の実施例でも、ひとつのメモリに対して複数のCPUがアクセスすることがないので、帯域の広い高価な画像メモリを使わなくても、同様に分散可能な処理に対して並列処理が可能となる。
図2に示すように、複数のCPUを設ける場合、図3に示したように、一つのCPU10(あるいは17)を主CPU、他のCPU17(あるいは10)を副CPUとし、副CPUに対して補助処理を実行させ、分散処理を行うことができる。図3(a)は主CPUに課せられた処理に支障のない範囲で副CPUが補助処理を行う場合を示す図であり、図3(b)は補助処理のプライオリティによって、補助のレベルを変動させるような場合を示す図である。
図3(a)の例では、主CPUが処理を行うアプリケーションタスク50のうち、プライオリティが最も低いタスク51を、副CPUがアイドルタスクとして実行する。副CPUは、分散処理のリクエストがあると(ステップS1)、最もプライオリティの低いタスクを分散処理し(ステップS2)、その結果(リザルト)を送信する(ステップS3)。作業用メモリ9には、リクエスト処理状態、リクエスト、リザルトが格納される。このように、補助処理をプライオリティが最低のアイドルタスクで処理することによって、2つのCPUのそれぞれが、本来の処理を優先し、お互いが無理がないレベルで分散処理で相互補助し合うことができる。
また、補助処理のプライオリティによって、補助のレベルを変動させるような場合は、図3(b)に示すように、動的にアイドルタスクのプライオリティを制御することによって実現可能である。この場合、必要に応じて補助の度合いを強めることができ、柔軟なスケジューリングを実現することができる。
補助処理のリクエストとしては、例えばアプリケーションタスクに緊急度および負荷のパラメータ50aを追加する。ここで、緊急度とは、処理しなければならない緊急性の度合いを示すパラメータであり、負荷とは、その処理がどれだけのCPUパワーを必要とするかを示すパラメータである。緊急度および負荷のそれぞれは、分散化した各処理について、相対的に設定すればよい。例えば、自身が緊急度の高い処理を行っている場合は、どのような補助処理であっても副CPUとして受け付けないが、あまり緊急度が高くない処理や負荷の軽い処理を行っている場合は、負荷の軽い処理なら副CPUとして受け付けるなどという制御を可能とするパラメータである。
補助処理の受付自体は、最もプライオリティの高いタスク52で行うものとし、主CPUの処理中であっても割り込んで処理することとする。補助処理の受付時には、まず、緊急度および負荷のパラメータ50aを読み出し、リクエストを待つ(ステップS4)。このとき、補助処理と同様に主CPUの処理についてもあらかじめ緊急度および負荷を設定しておく。
補助処理の受付時に主CPUの処理中であったならば、その処理の緊急度および負荷と、依頼処理の緊急度および負荷とを比較して、実行タスク(例えば、アイドルタスク)のプライオリティを決定、一時的に変更し(ステップS5)、受付タスクから実行タスクにリクエストを受け渡す(ステップS6)。副CPUは、ステップS7〜S9でタスクを実行し、処理の終了通知を受付タスクに行い、受付タスクは実行タスクのプライオリティを元に戻す。緊急度や負荷のパラメータとタスクのプライオリティとの関係は、システムにあわせて作り込めばよい。また、共有メモリ9には、図3(a)と同様に、リクエスト処理状態、リクエスト、リザルトが格納される。
図4は、画像処理装置において並列処理する対象の例を示す表図であり、(a)は同一処理を分散し、並列処理する具体的な適用例を示す図であり、(b)は逐次連続処理を並列処理する場合の具体的な適用例を示す図である。
図4(a)のNo.1〜No.3は、部品の端子や部品の特徴などに応じて、画像メモリ8、19に格納された画像データにおいて所定の画像領域を設定し、各領域の画像処理をCPU10、17に割り当てて並列処理させ、高速化を図るというものである。
図4のNo.1では、例えば、図5aに示したように、矩形の部品30の各辺に設けられたリード端子を認識する場合、画像メモリ8に格納された部品30の一つの辺に設けられたリード端子列30aを含む領域8aが設定され、また画像メモリ19に格納された部品30の他の辺に設けられたリード端子列30bを含む領域19aが設定される。CPU10は、画像メモリ8で設定された画像領域8aの画像データを処理してリード端子列30aの各リード端子の位置を検出する。また、この処理と並列して、他のCPU17は、画像メモリ19で設定された画像領域19aの画像データを処理して異なるリード端子列30bの各リード端子の位置を検出する。
図4(a)のNo.2では、矩形の部品の外形を認識する画像処理において、部品の各辺あるいは各コーナーごとに別のCPUで認識処理を行うことによって、分散処理を行う。例えば、図5bに示したように、矩形の部品31の辺あるいはコーナーの外形を認識する場合、画像メモリ8に格納された部品31の一つの辺31aあるいはコーナー31bを含む画像領域8b、8cが設定され、また画像メモリ19に格納された部品31の他の辺31cあるいはコーナー31dを含む領域19b、19cが設定される。CPU10は、画像メモリ8の領域8b、8cの画像データを処理して辺31aあるいはコーナー31bの外形を認識し、また、この処理と並列して、他のCPU17は、画像メモリ19の領域19b、19cの画像データを処理して異なる辺31cあるいはコーナー31dの外形を認識する。
図4(a)のNo.3では、底面にボール形状の電極を有する部品のボールを認識する画像処理において、それぞれ異なる画像領域を設定して、各領域ごとに別のCPUで認識処理を行うことによって、分散処理を行う。例えば、図5cに示したように、多数のボール電極32aを有する部品32の場合、画像メモリ8に格納された部品32の画像においてボール電極を含む一つの画像領域8dが設定され、また画像メモリ19に格納された部品32の画像において他のボール電極を含む領域8dとは異なる領域19dが設定される。CPU10は、画像メモリ8の領域8dの画像データを処理してこの領域の各ボール電極の位置を検出し、また、この処理と並列して、他のCPU17は、画像メモリ19の領域19dの画像データを処理してこの領域19dにある各ボール電極の位置を検出する。
また、図4(a)のNo.4では、部品の撮像データの、予め登録してある部品データとのマッチングをとる画像処理において、撮像データを複数ブロックに分割し、各ブロックごとに異なるCPUで認識処理を行うことによって、分散処理を行うことができる。すなわち、マッチング領域を分割して、マッチングをとる相関演算を分散処理で並列して行うことで高速化を図るというものである。
図4(a)のNo.5では、条件を変動させて、よい処理結果がでたものを採用するような処理への適用で、所定の条件で画像処理し、うまくいかなければ、条件を変えて再処理というリトライ処理で行う場合、両方の処理を同時に行い、結果を比較し、よい処理結果を採用するもので、この並列処理により、処理時間を大幅に短縮できる。
このようなリトライ処理の分散・並列処理は、例えば、部品のリード検出時のエッジ判定しきい値のリトライ処理への適用が考えられる。
従来は、フィルタの種別・サイズごとに予めモデルリードについてフィルタ演算値を取得し、その結果を元に基準のエッジ検出しきい値を決定、ロットの違いなどによるリードの反射具合のばらつきに対応するため、撮像画像にあわせて、リトライ処理により、エッジ判定しきい値を調整していた。撮像画像において部品の端子が暗く、デフォルトのしきい値ではエッジが検出できない場合は、しきい値を下げて、またノイズ成分がある場合は余分なエッジまで検出してしまうので、しきい値を上げて、リトライを行い、正しいリードのみを検出するようにしていた。この例では、エッジ判定しきい値が認識パラメータ値に相当する。
図6は、フィルタ処理(DOGフィルタ処理(Marr&PosioのDifference−Of−Gaussianフィルタ処理)の結果とエッジ判定しきい値の関係について説明する図であり、図6(a)は、部品のリード部分40の撮影画像を示すものであり、図6(b)は図6(a)のスキャンラインLの位置の濃度値を表すグラフであり、図6(c)はフィルタ処理の結果を表すグラフであり、図6(d)は、しきい値を変えたときの図6(c)のゼロクロス点での変化量を表すグラフである。
図6(c)において、フィルタ演算結果のゼロクロス地点がエッジである。DOGフィルタによっては、ちょっとした濃度変化にも反応しやすく、ゼロクロス地点が全てリードエッジとは限らない。リードエッジの場合は、フィルタ反応値が大きくなることから、図6(d)のようにフィルタ結果のゼロクロス点前後の変化量が、ある一定値(=エッジ判定しきい値=フィルタしきい値)以上であるものをリードエッジと判断している。
図7に示すように、写りのよくないリード端子41が存在する場合、リードエッジ部分の変化量に対してフィルタしきい値42が高すぎると検出できるリード本数が少なくなり、図8に示すように、リード端子と同間隔でノイズ43が存在する場合には、リードエッジ部分の変化量に対してエッジ判定しきい値44が低すぎるとリード以外のノイズを誤検出して、検出本数が多くなってしまう。
つまり、検出したリード本数が指定リード本数よりも少ない場合には、エッジ判定しきい値が高すぎたのかもしれないし、また逆に検出リード本数が多かった場合にはエッジ判定しきい値が低すぎたのかもしれない。本当にリード本数に誤りがある場合、しきい値を変動させてもリード本数は変動しない。逆にいえば、正常なリード本数が変動しないレベルでしか、しきい値を変動させてはならない。
本発明を用いると、一つのCPUによりデフォルト値のフィルタしきい値42あるいは44でリード検出を行い、また他のCPUで、少し低めのフィルタしきい値42’、もしくは高めのフィルタしきい値44’でリード検出処理を同時に並列して行うことによって、本来の処理時間で、認識パラメータ値を変化させて行うリトライ処理を済ましておくことができる(最初の1回のリトライ処理を並列に行うことができる)。そして、並列処理で得られた2つの結果については、リード検出本数と指定リード本数とを比較することによって、得られた結果が正しいかどうかの判断ができる。2つの結果のうち、正しいほうの結果を選択する。また、両方とも正しい場合は、デフォルト設定の結果を選択する。
さらに続けて何回かのリトライ処理を行う場合でも、同一の画像処理で認識パラメータ値を変化させ、各認識パラメータ値で異なるCPUを用いて同じ画像データを処理することにより、リトライ処理時間を半減することができる。
次に、図4(a)のNo.1〜No.4に示した処理の流れを、図9を参照しながら説明する。この例では、画像入力部の構成として、図2(a)に示した構成が用いられる。
主CPU(例えば、CPU10)は、図1に示したマシン制御装置15からインタフェース13を介してコマンドを受信する(ステップS11)。
続いて、主CPU10は、図2(a)に示した入力回路7を動作させ、画像撮像を行う。画像データは図2(a)に示した分配器18によって画像メモリ8、19に同時間で同データが書き込まれる(ステップS12)。
次に、主CPU10は分散処理の対象となる画像上の領域を算出する(ステップS13)。さらに、主CPUは、ステップS13で求めた処理領域などの処理に必要なパラメータを設定し、副CPU(例えば図2(a)に示したCPU17)にリクエストを送信する(ステップS14)。
ステップS15では、主CPUは、自身に割り当てられた分散処理(1)を実行する。
一方、副CPUでは主CPUからのリクエストを受信し(ステップS17)、ステップS15と並列して、副CPUによるステップS17〜S19の処理が実行される。
ステップS18では、副CPUは分散処理種別を判定する(ステップS18a)。状況、種別によって、依頼された分散処理(2)を実行するタスクのプライオリティを制御し、柔軟に対応するしくみを組み込むことができる。
ステップS18では、おのおのの実行処理ルーチンを呼び出して分散処理(2)を実行し(ステップS18b〜S18e)、処理が終了したならば、その分散処理(2)の結果を主CPU10へと送信する(ステップS19)。主CPUでは、ステップS16において、ステップS14で副CPUに依頼した分散処理(2)の結果を受信する。
なお、ステップS15で行われる分散処理(1)の内容は、ステップS18で行われる分散処理(2)のステップS18a〜S18eと同様な処理が行われる。
ステップS15、S18でそれぞれ行われるリード列検出処理は、図4(a)のNo.1の処理で、図5aに関連して説明した処理である。また、ステップS15、S18で行われるボール群検出処理は、図4(a)のNo.3の処理で、図5cに関連して説明した処理であり、外形検出処理は、図4(a)のNo.2の処理で、図5bに関連して説明した処理である。また、ステップS15、S18で行われる分割領域マッチング処理は、図4(a)のNo.4の処理である。
なお、更に異なる他の領域にあるリード端子列、辺、コーナー、あるいはボール電極群に対して、上述した分散処理(1)、(2)が必要な場合には、同様な分散処理を必要な回数だけ行い、それぞれの画像処理により認識されたリード端子列、辺、コーナー、あるいはボール電極群に基づいて、部品の中心と部品の傾きを演算し部品認識を終了する。
図10は、図4(a)のNo.5で、図6〜図8で説明したリトライ処理を分散処理する場合の各CPUの動作を示すフローチャートである。
まず、主CPU10は、入力回路1を動作させ、画像撮像を行う(ステップS21)。画像データは分配器18を介し、画像メモリ8、19に対し同時間で同じ画像データが書き込まれる。
主CPU10は自身と同じ画像上の領域のリード列の検出について、認識パラメータ値、つまりエッジ判定しきい値を変えて行うように、分散処理のリクエストを作成する(ステップS22)。
ステップS23では、主CPU10は、副CPU17に対して、ステップS22で作成したリクエストを送信する。
その後、主CPU10は、所定の認識パラメータ値(パラメータ(1))で自身に割り当てられたリード検出処理を実行する(ステップS24)。
一方、副CPU17は、主CPU10と並列に動作しており、主CPU10からのリクエストを受信したならば(ステップS27)、分散処理種別を判定して指定処理モジュールを呼び出し(ステップS28)、パラメータ(1)とは異なる認識パラメータ値(パラメータ(2))で、すなわち、異なるエッジ判定しきい値でリード検出処理を行い(ステップS29)、その処理の結果を主CPU10へ送信する(ステップS30)。
一方、主CPU10は、副CPU17がステップS29で行ったリード検出処理の結果を受信する(ステップS25)。
主CPU10は、ステップS24で自身が実行した処理の結果で得られたリード検出本数と予め設定してある指定リード本数とを比較し、また、ステップS25で副CPU17から受信した結果で得られたリード検出本数と予め設定してある指定リード本数とを比較し、正しい方の結果を選択する(ステップS26)。両方とも正しい場合は、主CPUの処理の結果を優先する。
上述した分散処理は、図2(b)に示した構成でも行うことができる。図2(b)に示した構成は、各ヘッドの処理を各CPUが並列で行う中で、余ったCPUリソースがあればお互いが有効に利用し、処理能力を高めるために本発明の基本動作を展開したものである。
図11は、図2(b)に示した構成による分散処理の相互補助時の主CPUの処理を示すフローチャートである。
図2(b)に示した構成では、カメラ4、5を有するヘッドの側から見れば、CPU10が主CPU、CPU17が副CPUであり、カメラ64、65を有するヘッドの側から見れば、CPU17が主CPU、CPU10が副CPUである。以下の説明は、カメラ4、5を有するヘッドの構成で説明する。
主CPU(CPU10)は、図1に示したマシン制御装置15からインタフェース13を介してコマンドを受信する(ステップS41)。
続いて、主CPUは、図2(b)に示した入力回路7を動作させ、画像撮像を行う。画像データは図2(b)に示した分配器18によって画像メモリ8、19に対して同時間で同データが書き込まれる(ステップS42)。
次に、主CPUは分散処理の対象となる画像上の領域を算出する(ステップS43)。さらに、主CPUは、ステップS43で求めた処理領域などの処理に必要なパラメータを設定し、副CPU(CPU17)に対してリクエストを送信する(ステップS44)。
ステップS45では、主CPUは、自身に割り当てられた分散処理(1)を実行する。一方、副CPUでは、主CPUからのリクエストを受信し、自身のリソースに余裕があれば、主CPUからリクエストされた分散処理(2)を実行する。分散処理(1)、(2)は、図9のステップS15、S18における分散処理(1)、(2)と同じ処理である。
主CPUは、ステップS44で副CPUに依頼した分散処理(2)の結果を受信する(ステップS46)。ただし、この時点で依頼の処理が終わっていれば結果を受信できるが、そうでないこともある。
ステップS47では、依頼した分散処理(2)が完了したかを確認し、完了していれば、ステップS51の次処理(処理(3))へと進み、そうでなければ、ステップS48へと進む。
ステップS48では、処理状況を確認し、分散処理(2)をこのまま副CPUに任せるか、それとも依頼をキャンセルし、自身で処理するかを判定する。分散処理(2)をこのまま副CPUに任せるか、それとも依頼をキャンセルするか、の判断基準は、たとえば、処理依頼からの経過時間が所定時間以上経過したか否かで判断したり、副CPUからの申告によって判断したりすることができる。
副CPUの処理を待つと判断した場合は、ステップS46へと分岐し、分散処理(2)の完了を待つ。ステップS48で、副CPUへの依頼をキャンセルすると判断した場合には、副CPUにリクエストキャンセルの送信を行い(ステップS49)、主CPU自身で分散処理(2)を処理する(ステップS50)。
次に、図12に示した実施例を説明する。図12の画像入力部は、逐次連続処理を並列に動作させ、全体的な処理能力を向上させるためのしくみを実現する構成である。
この構成は、CPUで実行する処理の中に、逐次処理すべき2種類の演算があり、その処理が連続的に発生する場合に効果がある。例えば、図4(b)に示したような処理である。
図12に示した構成において、カメラ4、5で撮像された画像データは分配器18によって、画像メモリ8、19のそれぞれに格納することが可能となる。ただし、この実施例では、2つのルートのそれぞれにスイッチ24、25を設けている。すなわち、スイッチ24、25のON/OFF制御によって、画像メモリ8、19への画像データの格納状態を、図13に示すように制御することができる。
また、図12に示すように、CPU(演算回路)10は、スイッチ26を切り替えることによって画像メモリ8および画像メモリ19の両方にアクセス可能なように設けられ、CPU(演算回路)17も、スイッチ26を切り替えることによって画像メモリ8および画像メモリ19の両方にアクセス可能なように設けられている。
図14は、図12の構成での処理の流れを説明したフローチャートである。図中、処理A、処理Bとあるのは、図4(b)に記した処理A、処理Bに対応している。
また、図15は、図12の各CPUによって実行される処理の遷移を示すタイミングチャートである。この図では、画像メモリ8をA面と呼び、画像メモリ19をB面と呼ぶ。
図14のステップS61では、スイッチ24および25をONとし、両面すなわち画像メモリ8および画像メモリ19の両方に画像データを取り込む。
まず、CPU10は、画像メモリ8(A面)のデータに対して処理Aを実行し、処理Aを終了したならば、CPU17に対して処理Bの開始要求を出す(ステップS62)。
ステップS63では、このステップを通る初回のときには既に画像が取り込まれているのでスキップし、2回目以降は、CPU17の処理と同期させるため、CPU17による処理Bの終了を待つ。
CPU17によるA面の処理Bが終了したことを確認したならば、スイッチ24をON、スイッチ25をOFFにするよう制御し、画像メモリ8(A面)のみに格納できるようにする。
ステップS64では、初回は既に画像が取り込まれているのでスキップし、2回目以降は、画像の撮像を行う。このとき、ステップS63でのスイッチ24およびスイッチ25の制御により、2面あるメモリのうちの片面のみが更新される。
続いて、ステップS65では、ステップS64で新たに取り込まれた画像に対して、CPU10が処理Aを行えるよう、スイッチ26を切り替える。例えば、初回時は、画像メモリ8に対してCPU10がアクセス可能となる。
CPU17は、CPU10によるステップS62〜S65と並列に、ステップS66〜S68の処理を行う。まず、ステップS66では、ステップS62で発せられた要求により、処理Bの実行が開始する。
処理Bが終了したならば、ステップS67では、スイッチ26を切り替えて、CPU17がアクセスするメモリを、次の処理対象の画像メモリへと切り替える。例えば、初回時は、画像メモリ8に対してCPU17がアクセス可能であるところから、ステップS67において画像メモリ19に対してCPU17がアクセス可能となるように、切り替えられる。
CPU17は、処理Bが終了したならば、その旨をCPU10に通知する(ステップS68)。
前記図2(a)に示した構成の画像入力部を適用して部品の吸着状態の異常であるチップ立ちを検出(判定)する請求項6に係る第4実施例を説明する。
これは、前記図4(a)のNo.6にチップ立ち検査として追加したもので、No.1〜No.5の各処理と同様、図2(b)に示した構成の画像入力部を適用することもできる。
ところで、チップ立ち検査(部品吸着状態の判定)を画像処理で行おうとする場合、図16には、(a)の正常吸着(両端の小さい矩形はリード(電極)端子である)の他に、(b)〜(e)に丸で示すノズルとの関係でエラー状態の違いをイメージで示すように、チップの斜め立ちには様々な状況が考えられる。従って、一つの判定アルゴリズムを用いて全ての状況の吸着状態を判定することは不可能である。そこで、斜め立ち等の部品吸着状態を分類し、それぞれの状況別に対応する判定アルゴリズムを複数用意し、順次、判定アルゴリズムを切り替えながら、判定処理を繰り返し行なう必要がある。以下、これを具体的に説明する。
図17に、チップ立ち(吸着状態)の判定アルゴリズムに従って処理する場合のフローチャートを示す。
ステップS71では、撮像画像から例えば判別分析法で2値化のための値を求め、画像の2値化を行ない、得られた2値画像から塊を求めるラベリング処理を行なう(ステップS72)。
次いで、ラベリング画像から塊の数が1つか2つか判定して、1つならば部品全体であるとして面積チェックを行ない、図18(a)のように2つならばリード端子であるとして2つの面積比をチェックする(ステップS73〜75)。
ステップS73〜75の処理結果がOK(面積が正しいか面積比が1)かNGかの判定を行ない、図18(a’)の画像イメージのように斜め立ちで面積比が1でないためNGならばその後の処理をキャンセルしてNG処理を行なう。OKならば、次の処理に移る(ステップS76)。
ステップS77では、次の処理である慣性主軸(ノズル中心)の計算を行ない、主軸の直線式を求める。
通常、斜め立ちの原因は、部品の角部がノズル先端の吸着穴に入って発生する斜め吸着にあるため、ノズル中心から部品中心の位置ずれが起こる。このことを利用して、図18(b)に示すように、ノズル中心(=画像中心)からある一定の距離以上の場所にラベリングで取得した塊の外周位置がある(吸着ずれ大)か否かのチェックを行なう(ステップS78)。
位置チェック結果がOKかNGかの判定を行ない、NGならばその後の処理をキャンセルしてNG処理を行なう。OKならば、次の処理に移る(ステップS79)。
前記図16(a)のような正常吸着の場合、チップ部品の周囲4辺に外接する直線は矩形になる。この原理を利用するために4辺の外接線を求めて、各辺の交角が90°±αの許容範囲内に入っているか否かを判定する(ステップS80)。
外接線形状結果がOKかNGかの判定を行ない、NGならばその後の処理をキャンセルしてNG処理を行なう。OKならば、次の処理に移る(ステップS81)。因みに、図18(c)のように、外接線の交角が90°から大きくずれている場合は、同(c’)のような斜め立ちのNGと判定する。
次いで、チップ部品が正常に吸着されていれば、ウィンドウ内の2値化閾値以上の面積がほぼ100%になる。これを利用するためにステップS77で求めた慣性主軸上の最外側エッジ点を算出して、主軸に対して垂直な矩形ウィンドウ(図18(d)中、2つの小矩形)をかける(ステップS82)。なおウィンドウ(取得する判定用矩形)の大きさは、部品サイズから一般的な端子サイズを求めて、それと同一なサイズにするか、又は、予め教示しておく。
その後、上でかけたウィンドウ内の2値化閾値以上の面積を求め、その面積がウィンドウに対してある一定値以上の割合を占めているか判定する。即ち、ウィンドウ(矩形)に対する端子部の画素数に基づく面積チェック結果がOKかNGかの判定を行なう(ステップS83)。ここで、NGならばNG処理を行ない、OKならば、OK処理を行ない終了する。因みに、図18(d)は、同(d’)に示す斜め立ちであるため、NGということになる。
以上詳述したように、画像処理でチップ立ち検査を行おうとする場合、斜め立ちの状態を分類し、それぞれの状況別に判定アルゴリズムを複数用意し、順次、判定アルゴリズムを切り替えながら、判定処理を繰り返し行なわなければならない。
従って、従来の画像処理装置のように、CPUが1つである場合には、並列処理が可能な処理対象であっても、逐次処理を行なわなければならないために長時間かかることになる。特に、正常であるという判定結果を得るためには用意した全ての判定アルゴリズムを適用し、全ての処理でOKの判定を得る必要があるため、最長処理時間となってしまう。頻度的には正常状態の方が圧倒的に多いので、生産タクトに対する影響の度合は極めて大きい。
そこで、前記図4(a)にNo.6として列記したチップ立ち検査を効率的に実現できるよう、鋭意検討した結果なされた本発明に係る実施例4について、以下に説明する。
図19に本実施例による検査(判定)の処理手順を表したフローチャートを示す。
左側に示す主CPUのフローチャートでは、まず、ステップS91で主CPUは、図2(a)入力回路1を動作させ、画像撮像を行なう。
撮像された画像データは図2(a)の分配器18により、画像メモリ8、19に同時間で同データが書き込まれる。
ステップS92では、チップ立ち検査のアルゴリズムは、ほぼ同等の処理時間になるように組み合わせを考え、図20に示すように2つのパターンに分割し、パラメータ1、2として設定する。
主CPUは、自身と同じ画像上のチップ部品について、アルゴリズムパターン2でチップ立ち検査を行なうよう、分散処理のリクエストを作成し、ステップS93で副CPUにリクエストを送信すると共に、ステップS94で自身に割り当てられたチップ立ち検査(アルゴリズムパターン1)を実行する。
その後、ステップS95で自身の処理が、他方のCPUから割り込み(後述する)により中断させられたかどうか判断し、中断させられていたならば、他方のCPUの検査で既にNG判定が確定したものとみなす。
ステップS96では、中断されることなく正常に検査が終了したのであれば、自身の処理による検査結果の判定を行ない、NGであったならば、他方のCPUの処理を中断させるため、ステップS97で他方のCPUに対して割り込みをかける。
ステップS98では、前記ステップS93で副CPUに依頼していたチップ立ち検査の結果を受信し、ステップS99では、どちらかの検査でNGと判定されていたならばNG、両方ともOKの場合のみOKとする結果選択を行う。
一方、右側に示す副CPUのフローチャートは次のとおりである。これは主CPUによるステップS94の処理と並列で動作する。
ステップS101で、主CPUからの前記ステップS93のリクエストを受信すると、ステップS102では要求された分散処理種別を判定し、指定処理モジュールを呼び出す。
ステップS103では、チップ立ち検査(アルゴリズムパターン2)を実行する。
その後、ステップS104で自身の処理が、他方のCPUにより中断させられたかどうか判断し、中断させられていたならば、他方のCPUの検査で既にNG判定が確定したものとみなす。
ステップS105では、中断されることなく正常に検査が終了したのであれば、自身の処理による検査結果の判定を行ない、NGであったならば、他方のCPUの処理を中断させるため、ステップS106で他方のCPUに対して割り込みをかけると共に、ステップS107では、分散処理の結果を主CPUへ送信する。
前記図17、図18を用いて説明した如く、前記図4(a)のNo.6に記載したチップ立ち検査には、複数の判定アルゴリズムを順次試してOK/NG判定する処理が必要である。従って、通常はあるアルゴリズムで判定し、OKならば次アルゴリズムに変えて再判定を繰り返すという処理を行なうことになるが、本実施例においては、複数の判定処理を並列に効率良く行ない、最長処理時間を大幅に短縮できる。
このようなOK/NG判定処理の場合、頻度が高いOKの判定に最長処理時間を要することになるので、効果は極めて大きい。
以上のように実施例4によれば、以下の効果が得られる。
(1)処理を分散化し、並列処理を行なうことにより、正常時の検査時間を大幅に短縮できる。
(2)割り込みにより処理を中断させる通知手段を設けることによって、エラー時の検査時間も最小限に済ませることができる。
以上説明したいずれの実施例1、2、3、4でも、処理を分散化して並列処理を行い、部品認識時間を短縮することができるし、従来性能のハードウェア資源(CPU、画像メモリ)の使用効率を向上し、処理能力を向上させることができるので、コスト的に有利である。
従来の分散処理では、処理対象のデータを同一メモリで共用していたためそのメモリが高価なものである必要があったり、また、別メモリに格納してそれぞれを処理するとしてもデータのコピーという余分な処理が発生していた。これに対して本発明では、分配器を利用することで、撮像時に2面の別メモリに同一データを格納できるハード構成としている。これにより、従来性能のハードウェア資源でありながら、効率のよい分散処理を構築することができる。
さらに本発明では、2つのCPUのそれぞれが、本来の処理を優先し、お互いが無理がないレベルで分散処理で相互補助し合うスケジューリング方式を採用し、必要に応じて補助の度合いを強めることができる仕組みも組み込んでおり、柔軟なスケジューリングを実現できる。
また本発明では、電子部品実装装置の画像処理装置において、部品認識に関する画像処理であるアプリケーション処理を分散化、並列処理を行うことで、ハードウェアの高速化のみに頼るのではなく、今ある資源の使用効率を最大限に引き出し、無駄をなくし、処理能力を上げることができる。
電子部品実装装置における画像処理装置およびその周辺構成の要部の一例を示すブロック図
(a)は本発明による画像処理装置の画像入力部の一例を示すブロック図、(b)は画像入力部の他の例を示すブロック図
(a)は自CPUに課せられた処理に支障のない範囲で補助処理を行う場合を示す説明図であり、(b)は補助処理のプライオリティによって、補助のレベルを変動させるような場合を示す説明図
(a)は独立処理を分散し、並列処理する具体的な適用処理の例を示す表図であり、(b)は逐次連続処理を並列に動作させる場合の具体的な適用処理の例を示す表図
リード列検出を分散処理するときの例を示した説明図
外形検出を分散処理するときの例を示した説明図
ボール電極の検出を分散処理するときの例を示した説明図
フィルタの結果とエッジ判定しきい値の関係について説明する説明図であり、(a)は撮像画像のリード部分を示すものであり、(b)は(a)のスキャンラインLの位置の濃度値を表すグラフであり、(c)はフィルタの結果を表すグラフであり、(d)は(c)のゼロクロス点での変化量を表すグラフ
フィルタの結果とエッジ判定しきい値の関係について説明する図であって、写りのよくないリード端子が存在する場合の説明図であり、(a)は撮像画像のリード部分を示すものであり、(b)は(a)のスキャンラインLの位置のフィルタの結果を表すグラフであり、(c)は(b)のゼロクロス点での変化量を表すグラフ
フィルタの結果とエッジ判定しきい値の関係について説明する説明図であって、リード端子と同間隔でノイズが存在する場合の図であり、(a)は撮像画像のリード部分を示すものであり、(b)は(a)のスキャンラインLの位置のフィルタの結果を表すグラフであり、(c)は(b)のゼロクロス点での変化量を表すグラフ
図4(a)に示した処理を主CPUと副CPUとで行う場合の各CPUの動作を示すフローチャート
図4(a)に示したリトライ処理を主CPUと副CPUとで行う場合の各CPUの動作を示すフローチャート
図4(a)に示した分散処理を主CPUと副CPUとで行う場合の各CPUの動作を示すフローチャート
本発明による画像処理装置の画像入力部の更に他の構成例を示すブロック図
図12のスイッチの切り換え動作を説明する表図
図12に示す構成での処理の流れを示すフローチャート
図12に示す構成での処理の遷移を示すタイミングチャート
チップの吸着状態の違いを示す説明図
チップ立ち判定のアルゴリズムの一例を示すフローチャート
上記アルゴリズムの適用例の画像イメージを示す説明図
本発明によるチップ立ち検査の判定処理を示すフローチャート
チップ立ち検査のアルゴリズムパターンの分類例を示す図表
従来の画像入力部の構成を示すブロック図であって、(a)はひとつのCPUを用いた構成を示すブロック図であり、(b)は2つのCPUを用いた構成を示すブロック図
符号の説明
1…吸着ノズル
2…電子部品
3…照明装置
4、64…標準カメラ
5、65…高解像度カメラ
6…モニタ
7、20…入力回路
8、19、22、23…画像メモリ
9…作業用メモリ
10、17…CPU
11…制御CPU
12…部品データ格納メモリ
13…インターフェース
14…画像処理装置
15…マシン制御装置
16…画像入力部
18、21…分配回路
24、25、26…スイッチ
30、31、32…電子部品