以下、本発明の実施の形態に係る画像処理装置について、図面に基づいて具体的に説明する。
[概略]
図1は、本発明の実施の形態に係る画像処理装置1の概略構成例を示す図である。図1に示すように、画像処理装置1は、エッジ検出や面積計算などの計測処理を実行するコントローラ10と、検査対象物を撮像する3台のカメラ30a,30b,30cと、液晶パネル等のモニタ40と、ユーザがモニタ40上で各種操作するためのコンソール50と、を有している。カメラ30a,30b,30c、モニタ40、及びコンソール50は、コントローラ10と着脱可能に接続される。コントローラ10は、カメラ30a,30b,30cから得られた画像データを用いて画像処理を実行し、外部接続されたPLC60に対し、ワークの良否などの判定結果を示す信号として判定信号を出力する。
3台のカメラ30a,30b,30cは、PLC60から入力される制御信号、例えばカメラ30a,30b,30cから画像データを取り込むタイミングを規定する撮像トリガ信号に基づいて、検査対象物の撮像を行う。モニタ40は、検査対象物を撮像して得られた画像データや、その画像データを用いた計測処理の結果を表示するための表示装置である。一般に、ユーザはモニタ40を視認することによって、画像処理装置1が運転中である場合のコントローラ10の動作状態を確認することができる。コンソール50は、モニタ40上でフォーカス位置を移動させたり、メニュー項目を選択したりするための入力装置である。特に、後述するように、本実施形態では、コンソール50は検査対象物の品種に応じた識別情報を入力するための入力装置にもなる。
また、画像処理装置1のコントローラ10には、画像処理装置1の画像処理プログラム(制御プログラム)を生成するためのPC70が接続されており、このPC70上で動作するソフトウェアによって、画像処理ユニットの処理順序を規定する画像処理プログラムが生成される(詳細については後述する)。画像処理装置1では、その処理順序に沿って各画像処理ユニットが順次実行される。PC70とコントローラ10とは、通信ネットワークを介して接続されており、PC70上で生成された画像処理プログラムは、モニタ40の表示態様を規定するレイアウト情報などとともにコントローラ10に転送される。また逆に、コントローラ10から画像処理プログラムやレイアウト情報などを取り込んで、PC70上で編集することもできる。
図2は、本発明の実施の形態に係る画像処理装置1におけるメンテナンス方法の概略を説明するための説明図である。メンテナンスの流れとしては、まずユーザが画像処理装置1で実行される画像処理プログラムを作成し、その画像処理プログラムを画像処理装置1に転送して運用を開始した後、一部の画像処理ユニットの追加/削除やパラメータ値の設定し直しなどのメンテナンスを行う、という流れである。図2(a)は、画像処理装置1で実行される画像処理プログラムの作成について示しており、図2(b)は、傷ユニットとパターンサーチユニットを削除し、傷iiユニットとパターンサーチiiユニットを追加するとともに、必要に応じてパラメータ値を設定し直す、というメンテナンスについて示している。なお、ここでは、図2(a)に示す画像処理プログラムの作成と、図2(a)から図2(b)へのメンテナンスは、画像処理装置1に接続されたPC70において行うものとする。
図2(a)に示すフローチャートは、「撮像」、「傷」、「サーチ」(図2では、「パターンサーチ」を「サーチ」と略す)の3個の画像処理ユニットから構成されており、ユーザがPC70或いはモニタ40の画面上で(モニタ40の画面上の場合はコンソール50を使用して)作成し得るものである。また、図2(a)においては、傷ユニットのパラメータの一部として、検出方向,傷レベル,セグメントサイズの各パラメータを有しており(各パラメータの詳細は後述)、パターンサーチユニットのパラメータの一部として、検出個数,サーチ感度,サーチ精度の各パラメータを有している(各パラメータの詳細は後述)。撮像ユニットも、いくつかのパラメータを有しているが、ここでは説明の便宜上、省略する。なお、撮像ユニットは、カメラ30a,30b,30cから傷ユニット及びパターンサーチユニットの計測処理で用いる画像データを取り込む処理を実行するためのユニットであり、傷ユニットは、検査対象物の傷や汚れの位置を検知する処理を実行するためのユニットであり、サーチユニットは、特定のパターンとして予め登録しておいた基準画像に最も似ている部分を入力画像の中から検出する処理を実行するためのユニットである。
まず、図2(a)に示すように、ユーザは、PC70の表示画面において、検査対象物(ワーク)の品種が複数ある場合であっても、品種ごとに別々のフローチャートを作成する必要はない。ユーザは、まず撮像ユニット、傷ユニット、パターンサーチユニットからなるフローチャートを1つ作成する。また、フローチャートの作成過程において、各画像処理ユニットのパラメータに対し、画像処理装置1において画像処理が実行される際に割り付けられるパラメータ値の設定を行う。
本実施形態では、傷ユニットとパターンサーチユニットについて、検査対象となるワークの品種ごとにパラメータ値が変わらない共通パラメータ(傷ユニットの検出方向及びパターンサーチユニットの検出個数)と、検査対象となるワークの品種ごとにパラメータ値が異なる個別パラメータ(傷ユニットの傷レベルとセグメントサイズ、パターンサーチユニットのサーチ感度とサーチ精度)とが混在している。
共通パラメータについては、検査対象となるワークの品種ごとにパラメータ値が変わらないため、ユーザは、一のパラメータ値を設定する。図2(a)では、傷ユニットの検出方向及びパターンサーチユニットの検出個数について、それぞれ円周及び1が設定されている。
一方で、個別パラメータについては、検査対象となるワークの品種ごとにパラメータ値が異なるように、ユーザは、品種に応じてパラメータ値が切り換わるような設定を行う。図2(a)に示すように、例えば個別パラメータに予め定義した変数を関連付け、その変数には、品種に応じて異なる値が代入されるようにする。図2(a)では、傷レベルに変数#kizuを関連付け、セグメントサイズに変数#sizeを関連付け、サーチ感度に変数#kandoを関連付け、サーチ精度に変数#seidoを関連付けている。また、変数#kizuについては、品種0のワークを検査する際には50が代入され、品種1のワークを検査する際には60が代入され、品種2のワークを検査する際には70が代入されるようにしている(品種3以降についても同様)。また、変数#size,#kando,#seidoについても同様に、それぞれ、品種0のワークを検査する際には20,0,0が代入され、品種1のワークを検査する際には30,1,1が代入され、品種2のワークを検査する際には40,2,2が代入されるようにしている(品種3以降については省略)。このような設定を行うことにより、変数に代入される値は、例えば図2(a)に示すような品種ごとのファイル(レシピファイル)に纏めることができる。
ユーザは、以上の設定が完了すると、図2(a)に示す設定内容をPC70から画像処理装置1に転送し、複数の品種を有するワークについて画像処理を実行する。このとき、画像処理装置1のコントローラ10において、共通パラメータについては、ユーザが設定した一のパラメータ値が割り付けられ、個別パラメータについては、品種に応じて変数に代入された値が割り付けられる。なお、コントローラ10は、コンソール50を用いたユーザの指示により、或いは、PLC60からのコマンドにより、どの品種のワークを検査するかを認識する。
画像処理装置1の運転中に、外部からワークの品種切り換えを示す指示又はコマンドが送られてくると、コントローラ10は、パラメータ値の割り付けをし直す。具体的には、共通パラメータについては、ユーザが設定した一のパラメータ値が割り付けられ、個別パラメータについては、品種に応じて変数に代入された値が割り付けられる。このようにして、画像処理装置1は、共通パラメータについては、品種によらない共通のパラメータ値を割り付け、個別パラメータについては、品種に対応したパラメータ値を割り付けることによって、複数の品種のワークに対応することができるようになっている。
ここで、図2(a)→図2(b)に示すように、画像処理ユニットの一部を入れ替えてメンテナンスを行う必要性が生じたとする。このときユーザは、例えばコンソール50を操作して、画像処理装置1の運転を停止する。その後、図2(a)に示すフローチャートやレシピファイルなどをコントローラ10からPC70に転送し、PC70の表示画面に、図2(a)に示すフローチャートを表示させる。そして、傷ユニットとパターンサーチユニットを削除した後、傷iiユニット、パターンサーチiiユニットを追加する。また、フローチャートの編集過程において、各画像処理ユニットのパラメータに対し、次に画像処理装置1において画像処理が実行される際に割り付けられるパラメータ値の設定を行う。
図2(b)に示すフローチャートでも、図2(a)に示すフローチャートと同様に、傷iiユニットとパターンサーチiiユニットについて共通パラメータと個別パラメータとを混在させており、傷iiユニットの検出方向及び新規なパラメータ「間引き方法」、パターンサーチiiユニットの検出個数及び新規なパラメータ「サーチ高速化」を、それぞれ共通パラメータとして規定し、傷iiユニットの傷レベルとセグメントサイズ、パターンサーチiiユニットのサーチ感度とサーチ精度を、それぞれ個別パラメータとして規定している。なお、「間引き方法」は欠陥を検出する際の精度を調整するためのパラメータであり、「サーチ高速化」は処理速度を調整するためのパラメータである。
共通パラメータについては、上述同様、一のパラメータ値を設定する。図2(b)に示すように、傷iiユニットの検出方向及びパターンサーチiiユニットの検出個数については、図2(a)と同じくそれぞれ円周及び1が設定されている。また、傷iiユニットの新規なパラメータ「間引き方法」及びパターンサーチiiユニットの新規なパラメータ「サーチ高速化」については、それぞれオート及びOFFが設定されている。一方、個別パラメータについては、品種に応じてパラメータ値が切り換わるような設定を行う。ここでは図2(b)に示すように、傷iiユニットの傷レベル及びセグメントサイズ、パターンサーチiiユニットのサーチ感度及びサーチ精度について、それぞれ、例えば個別パラメータに図2(a)で定義した変数#kizu,#size,#kando,#seidoを関連付ける。そうすると、図2(a)を用いて説明したように、変数#kizu,#size,#kando,#seidoには、品種に応じて異なる値が代入されるように構成されているため、個別パラメータに変数を関連付けるだけで、個別パラメータについて検査対象となるワークの品種ごとにパラメータ値を切り換えることができる。以上のメンテナンスが終了すると、ユーザは、図2(b)に示すフローチャートやレシピファイルなどをPC70から画像処理装置1へ転送し、画像処理装置1の運転を再開する。このとき、画像処理装置1のコントローラ10において、共通パラメータについては、ユーザが設定した一のパラメータ値が割り付けられ、個別パラメータについては、品種に応じて変数に代入された値が割り付けられる。
このように、本実施形態に係る画像処理装置1は、傷ユニット及び傷iiユニット並びにパターンサーチユニット及びパターンサーチiiユニットを個別処理ユニット(個別画像処理の一例に相当)として規定し、これらの個別処理ユニットについて、共通パラメータと個別パラメータとを混在させている。そして、共通パラメータについては、検査対象となるワークの品種ごとにパラメータ値が変わらないように構成し、個別パラメータについては、品種に応じてパラメータ値が切り換わるような構成にしている。したがって、画像処理ユニットの一部を追加・削除するような編集を行った場合であっても、図2(b)を用いて説明したように、一のフローチャートについてのみ編集を行うだけでよいので、少ない工数でメンテナンスすることができ、使い勝手を向上させることができる。
以上説明したように、画像処理装置1には、予め処理内容が規定され、ユーザにより設定可能な一又は複数のパラメータからなるパラメータセットに従って処理内容を実行する複数の画像処理ユニットが記憶されている。また、画像処理ユニットが共通処理ユニット又は個別処理ユニットとして規定されており、個別処理ユニットとして規定された画像処理ユニットについて複数の異なるパラメータ値をもつ個別パラメータが少なくとも一つ含まれるように規定されており、個別パラメータの各々のパラメータ値に対し個別処理ユニット間で共通の識別情報を関連付けて規定された画像処理プログラムが、設定され又は受け付けられる。そして、外部からワークの品種切り換えを示す指示又はコマンドが送られて、識別情報が指定されると、個別パラメータに対して識別情報に対応したパラメータ値が割り付けられ、共通パラメータに対して識別情報によらないパラメータ値が割り付けられて、画像処理プログラムで規定された画像処理ユニットの処理順序及び割り付けられたパラメータ値により画像処理ユニットの処理内容と協働して画像処理が実行される。
以下、本発明の実施の形態に係る画像処理装置1及びプログラム作成支援装置の一例となるPC70について、詳細に説明する。
[ハードウェア構成]
図3は、本実施形態に係る画像処理装置1におけるコントローラ10のハードウェア構成例を示すブロック図である。図3に示すように、画像処理装置1におけるコントローラ10は、各種プログラムに基づき数値計算や情報処理を行うとともに、ハードウェア各部の制御を行うCPUなどの主制御部11と、起動プログラムや初期化プログラムなどが格納されたROM,フラッシュROM,EEPROMなどのプログラムメモリ12と、CPU11が各種プログラムを実行する際のワークエリアとして機能するRAMなどのメインメモリ13と、外部のPLC60やPC70などと通信可能に接続される通信部14と、コンソール50からの操作信号が入力される操作入力部15と、を有している。
また、画像処理装置1は、カメラ30a〜カメラ30cでの撮像により得られた画像データを取り込むASICなどの画像入力部16と、画像データをバッファリングする画像メモリ(フレームバッファ)17aと、エッジ検出や面積計算などの計測処理を実行するDSPなどの画像処理部18と、計測処理用に画像データを記憶する画像メモリ(ワークメモリ)17bと、液晶パネル等のモニタ40に対して画像を表示させるDSPなどの画像表示部19と、画像を表示させる際に画像データを一時記憶するVRAMなどのビデオメモリ20と、を有している。そして、これらの各ハードウェアは、バス等の電気配線を介して通信可能に接続されている。
プログラムメモリ12には、画像入力部16、画像処理部18、及び画像表示部19、並びに、通信部14及び操作入力部15の各部を、主制御部11により制御するための装置制御プログラムが格納されている。また、本実施形態では、PC70において生成され、PC70から転送されてきた画像処理プログラムは、プログラムメモリ12に格納されるようにしている。勿論、メインメモリ13に格納されるようにすることもできる。
メインメモリ13、画像メモリ17a,17b、ビデオメモリ20は、SRAMやSDRAM等の揮発性メモリで構成されており、コントローラ10で別個独立したメモリとして設けられている。なお、不揮発性メモリを用いることもできるし、一個のメモリの記憶領域を切り分けて各メモリを構成することもできる。
通信部14は、外部のPLC60に接続されたセンサ(光電センサ等)でトリガ入力があったときに、PLC60から撮像トリガ信号を受信するインターフェース(I/F)として機能する。また、PC70から転送されてくる画像処理装置1の画像処理プログラムやモニタ40の表示態様を規定するレイアウト情報などを受信するインターフェース(I/F)としても機能する。
主制御部11は、通信部14を介してPLC60から撮像トリガ信号を受信すると、画像入力部16に対して撮像指令を送る。なお、撮像トリガ信号は、カメラ30a〜カメラ30cのいずれか一のカメラに対する撮像トリガになる場合もあるし、カメラ30a〜カメラ30cの全部のカメラに対する撮像トリガになる場合もある。したがって、主制御部11から画像入力部16へ送られる撮像指令も、カメラ30a〜カメラ30cのいずれか一の撮像指令になる場合もあるし、カメラ30a〜カメラ30cの全部の撮像指令になる場合もある。なお、撮像トリガ信号を生成する装置として、PLC60ではなく、光電センサなどのトリガ入力用のセンサを通信部14に直接接続することもできる。
操作入力部15は、コンソール50からの操作信号を受信するインターフェース(I/F)として機能する。なお、コンソール50には、モニタ40上に表示されるカーソルを上下左右に移動させる十字キー、決定ボタン、又はキャンセルボタンなどの各部品が配置されている。これらの各部品を操作することによって、ユーザはモニタ40上でフローチャートを作成したり、レシピファイルをコピーしたり、所望のレシピを指定したりすることができる。なお、コンソール50は、キーボードやマウスで代用することもできる。また、コンソール50の機能とモニタ40の機能を一体化させたタッチパネルを用いることもできる。
カメラ30a〜カメラ30cは、可視光線や赤外線を利用して検査対象物を撮像する撮像手段の一例であり、例えばCCDやCMOSを用いることができる。画像入力部16に接続された3台のカメラ30a〜30cは、内部にA/D変換器を有しており、撮像して得られた画像データをデジタルデータで出力する。また、画像入力部16(或いは主制御部11)からの画像データ取り込み信号に基づき動作する。例えば、カメラ30a〜カメラ30cのいずれか一のみで検査対象物を撮像することもできるし、カメラ30a〜カメラ30cの全部で検査対象物を撮像することもできる。
画像入力部16は、上述した画像入力プログラムに従って、画像データの取り込みを行う。具体的には、例えば主制御部11からカメラ30aの撮像指令を受信すると、カメラ30aに対して画像データ取り込み信号を送信する。そして、カメラ30aで撮像が行われた後、撮像して得られた画像データを取り込む。取り込んだ画像データは、一旦画像メモリ17aにバッファリング(キャッシュ)され、予め用意しておいた画像変数に代入される。この画像変数は、数値を扱う通常の変数と異なり、対応する画像処理ユニットの入力画像として割り付けることで、計測処理や画像表示の参照先となる変数である。
画像処理部18は、画像データに対する計測処理を実行する。具体的には、まず画像入力部16が上述した画像変数を参照しつつ、画像メモリ17aから画像データを読み出して、画像処理部18を通じて画像メモリ17bへ内部転送を行う。そして、画像処理部18は、画像メモリ17bに記憶された画像データを読み出して、計測処理を実行する。
画像表示部19は、主制御部11から送られてきた表示指令に基づいて、モニタ40に所定画像を表示させる。例えば、画像メモリ17bに記憶されている計測処理前又は計測処理後の画像データを読み出して、ビデオメモリ20に一時記憶し(展開し)、モニタ40に対して画像データ表示信号を送信する。
[機能構成]
図4は、本実施形態に係る画像処理装置1におけるコントローラ10の機能構成例を示すブロック図である。主制御部11がプログラムメモリ12に格納されている装置制御プログラムを実行することによって、コントローラ10は図5に示す各機能を発揮するように動作する。
図4に示すように、コントローラ10は、図2を用いて説明したレシピファイルのうち、どの品種用のレシピファイルを用いるかを示す識別情報、すなわち検査対象物の品種を識別するための識別情報を受信する識別情報受信部101と、PC70から転送された検査用データ(画像処理ユニットの処理順序を示すフローチャート、各画像処理ユニットに対応するパラメータセットのパラメータ値や基準画像などを含む)を記憶する検査用データ記憶部102と、識別情報受信部101から転送される識別情報と検査用データ記憶部102から読み出される検査用データとを用いて、フローチャートの中で、個別処理ユニットとして規定された画像処理ユニットのパラメータのうち個別パラメータ(詳細は後述)に対して、識別情報に対応した(識別情報が示すレシピファイルに保存された)パラメータ値や基準画像を割り付け、個別処理ユニットとして規定された画像処理ユニットのパラメータのうち共通パラメータ(詳細は後述)及び共通処理ユニット(共通画像処理の一例に相当)として規定された画像処理ユニットのパラメータに対して識別情報によらないパラメータ値や基準画像を割り付けるパラメータセット/基準画像割り付け部103と、予め処理内容が規定され、ユーザにより設定可能な一又は複数のパラメータからなるパラメータセットに従って処理内容を実行する複数の画像処理ユニットを記憶する処理ユニット記憶部104と、検査用データに含まれるフローチャート、パラメータセット/基準画像割り付け部103で割り付けられたパラメータ値により、処理ユニット記憶部104に記憶された画像処理ユニットの処理内容と協働して画像処理を実行する画像処理実行部105と、を有している。画像処理実行部105は、検査用データに含まれる画像処理プログラムに従って、画像処理を実行する。
なお、識別情報受信部101は、例えば上述した通信部14や操作入力部15などによって具現化することができ、検査用データ記憶部102及び処理ユニット記憶部104は、例えばプログラムメモリ12などによって具現化することができ、パラメータセット/基準画像割り付け部103は、例えば主制御部11などによって具現化することができ、画像処理実行部105は、例えば主制御部11,画像入力部16,画像処理部18,画像メモリ17a及び17b,プログラムメモリ12,メインメモリ13などによって具現化することができる。
図5は、本実施形態に係るプログラム作成支援装置としてのPC70の機能構成例を示すブロック図である。PC70は、例えばCPU,ROM,RAM,及びハードディスク等から構成される汎用のパーソナルコンピュータを用いることができる。また、図6に示す各機能は、PC70にインストールされたプログラム作成支援ソフトウェアが実行されることによって発揮される。
PC70は、フローチャート生成部7011及びプログラム生成部7012として機能する制御部701と、処理ユニット記憶部7021及び検査用データ記憶部7022として機能するメモリ702と、画像処理装置1のコントローラ10と通信可能に接続される通信部703と、マウスやキーボード等から構成される入力部704と、液晶モニタ等で構成される表示部705と、を有している。
フローチャート生成部7011は、スタートシンボルにおいて開始し、エンドシンボルにおいて終了するフローチャートを生成する機能を有する。ユーザは、入力部704を用いて、所望の画像処理ユニットを所望の順序に配置することによって、表示部705上でフローチャートを作成する。これにより、フローチャートが生成される。
プログラム生成部7012は、生成されたフローチャートをコントローラ10で解釈できる設定データに直して、検査用データを生成する機能を有する。ユーザは、入力部704を用いて、表示部705において所定のボタン等をクリックすることによって、画像処理プログラムを含む検査用データを生成することができる。生成された検査用データ(画像処理プログラム)は、メモリ702の検査用データ記憶部7022に記憶される。制御部701は、検査用データ記憶部7022から検査用データ(画像処理プログラム)を読み出して、通信部703を介してコントローラ10へ転送する。
また、PC70では、検査用データ(画像処理プログラム)をコントローラ10へ転送するに先立って、画像処理シミュレーションを行うこともできる。具体的には、制御部701が、フローチャート生成部7011によって生成されたフローチャートをPC70上で実行可能な形式に変換し、処理ユニット記憶部7021に記憶された画像処理ユニットの中からフローチャートに配置された画像処理ユニットを参照しながら画像処理シミュレーションを行う。
以下、PC70における画像処理プログラム作成の流れについて説明し、その後、作成された画像処理プログラムにより画像処理装置1を運用している際に、メンテナンスの必要性が生じたときのメンテナンス方法について説明する。
[画像処理プログラム作成の流れ]
図6は、PC70の表示部705に表示されるエディタ画面(主要部)の一例を示す図である。このエディタ画面は、PC70においてプログラム作成支援ソフトウェアが実行されると、自動的にPC70の表示部705に表示される。
図6において、まずユーザは、入力部704の操作によって、所望の画像処理ユニットを、パーツリスト1003からフロービュー1002へ所望の順序で配置されるように、ドラッグアンドドロップを繰り返す。すなわち、スタートシンボルにおいて開始し、エンドシンボルにおいて終了する実行フロー上に、画像処理ユニットを配置することによって、簡易に所望のフローチャートを作成することができる。すなわち、コントローラ10に行わせる一連の画像処理は、画像処理ユニットとしてブロック化されていて、ユーザが画像処理ユニットを実行フロー上に配置するだけで、その画像処理ユニットが、それより前の画像処理ユニットの処理結果に基づいて所定の処理を行うフローシーケンスを作成することができる。
パーツリスト1003内では、複数の画像処理ユニットが、「画像入力」「計測」「制御」「演算」「タイミング」「表示」「出力」「コマンド出力」のカテゴリーに区分されている。各カテゴリーに属する画像処理ユニットをパーツリスト1003内に実際に表示させるには、各カテゴリー左端の+ボタンをクリックすればよい。
「画像入力」は、撮像に関する画像処理ユニットが属するカテゴリーであり、撮像ユニットが属している。この撮像ユニットには、シャッタースピード、カメラ感度、フラッシュオン時間、フラッシュ遅延時間、撮像対象カメラ、トリガ端子を指定するためのパラメータからなるパラメータセットが、撮像ユニットのプロパティとして関連付けられている。図6に示すフロービュー1002では、フローチャートの1番目のユニット(ユニット番号U0001)として、撮像ユニットが配置されている。
「計測」は、計測に関する画像処理ユニットが属するカテゴリーであり、撮像ユニットによって得られた画像データから計測結果を抽出し、この計測結果に基づいて検査対象物の良否を判定する計測ユニットが属している。例えば、エリアユニットやエッジ位置ユニット、傷ユニットやパターンサーチが属している。図6に示すフロービュー1002では、フローチャートの2番目及び3番目のユニット(それぞれユニット番号U0002及びU0003)として、それぞれ傷ユニット及びパターンサーチユニットが配置されている。傷ユニットは、小面積の検出領域(セグメント)を移動して平均濃度を算出し、しきい値以上の濃度差がある箇所を傷として検出するユニットである。パターンサーチは、特定の画像パターンを基準画像として予め登録しておき、入力画像の中から基準画像に最も似ている部分を検出し、その部分の位置や角度、相関値を計測するユニットである。また、本実施形態では、図2を用いて説明したように、傷ユニットを改良した画像処理ユニットとして傷iiユニットや、パターンサーチユニットを改良した画像処理ユニットとしてパターンサーチiiユニットなども、「計測」のカテゴリーに属している。
その他、「制御」は、制御に関する画像処理ユニットが属するカテゴリーであり、バイパスユニットやエンドシンボルなどの制御ユニットが属している。バイパスユニットは、実行フローを2以上の枝フローに分岐させる分岐ユニットと、分岐された枝フローを合流させる合流ユニットからなる画像処理ユニットであり、所定条件で実行フローを分岐させるユニットである。エンドシンボルは、1回のフローシーケンスを終了させるためのシンボルである。「演算」は、数値演算ユニットなど、演算に関する画像処理ユニットが属するカテゴリーであり、「タイミング」は、タイマ待ちユニットなど、フロー遷移のタイミング制御に関する画像処理ユニットが属するカテゴリーであり、「表示」は、表示に関する画像処理ユニットが属するカテゴリーであり、「出力」及び「コマンド出力」は、それぞれ出力及びコマンド出力に関する画像処理ユニットが属するカテゴリーである。
このようにして、例えば3個の画像処理ユニットを配置してフローチャートの作成が終わると、次にユーザは、各画像処理ユニットに対応するパラメータ値を設定する。具体的には、フロービュー1002内の撮像ユニット、傷ユニット、パターンサーチユニットそれぞれの上にカーソルを合わせ、右クリックしてプロパティ設定画面を表示部705に表示させる。ここでは、傷ユニットとパターンサーチユニットのプロパティ設定について詳しく説明する。
図7は、傷ユニットのプロパティ設定画面の一例を示す図である。図8は、パターンサーチユニットのプロパティ設定画面の一例を示す図である。
図7において、傷ユニットのプロパティは、例えば「全般」「検出条件」「表示設定」「詳細設定」などの各タブに区分されており、図7では「検出条件」が表示されている。検出条件のパラメータの一例としては、例えば、傷の検出方向を選ぶ「検出方向」、傷と判定する平均濃度の差(公差)を指定する「傷レベル」、計測領域内で移動するセグメントの大きさを指定する「セグメントサイズ」、セグメントにより平均濃度算出を行う際の移動量を指定する「移動量」などが挙げられる(他のパラメータについては説明の便宜上、省略する)。図7では、検出方向はプルダウンメニューの中から円周が選択され、傷レベルは50が選択され、セグメントサイズは20が選択され、移動量は8が選択されている。このように、ユーザはパラメータ値として数値を入力するのではなく、予め定められた数値リストの中から入力部704のマウス操作により選択することができるようになっている。これにより、ユーザは整数型(int型)や倍精度浮動小数型(double型)などの属性を気にすることなく、パラメータ値の設定を行うことができる。これらの各パラメータが一つのパラメータセットになって、画像処理プログラムにおいて傷ユニットに対応するパラメータセットとして規定される。
なお、このときユーザはデフォルト値を使用することもできる。デフォルト値は、ユーザがパラメータ値の設定を省略したときに、画像処理ユニットのパラメータに対する割り付けに使用されるように予め設定されたパラメータ値であって、コントローラ10に組み込まれている。また、図7に示すプロパティ設定画面を表示部705上で開いたときには、そのプロパティ設定画面に予め設定されたパラメータ値として、最初にデフォルト値が表示されるようになっている。図7では、検出方向のデフォルト値として円周が設定されており、傷レベルのデフォルト値として50が設定されており、セグメントサイズのデフォルト値として20が設定されており、移動量のデフォルト値として8が設定されている。したがって、ユーザは、図7に示すプロパティ設定画面に表示される各パラメータのデフォルト値を確認し、そのままデフォルト値をパラメータに対する割り付けに使用する場合(デフォルト値を変更しない場合)には、パラメータ値の設定を省略することができる。
一方、図8において、パターンサーチユニットのプロパティは、例えば「全般」「検出条件」「表示設定」「詳細設定」などの各タブに区分されており、図8では「検出条件」が表示されている。検出条件のパラメータの一例としては、例えば、入力画像中の特定の画像パターンが回転している場合に、計測する角度の範囲を指定する「角度範囲」、パターンサーチ計測で検出する特定の画像パターンの最大個数を指定する「検出個数」、検出の安定度と処理時間との優先付けを調整するサーチ感度を指定する「サーチ感度」、検出の精度と処理時間との優先付けを調整するサーチ精度を指定する「サーチ精度」などが挙げられる。図8では、「角度範囲」は+方向にも−方向にも0度が選択され、「検出個数」は1個が選択され、「サーチ感度」は0が選択され、「サーチ精度」は0が選択されている。なお、図7と同様に、ユーザは、入力部704のマウス操作により所望のパラメータ値を選択することができる。また、図8では、角度範囲のデフォルト値として+方向にも−方向にも0が設定されており、検出個数のデフォルト値として1が設定されており、サーチ感度のデフォルト値として0が設定されており、サーチ精度のデフォルト値として0が設定されているため、ユーザは、そのままデフォルト値をパラメータに対する割り付けに使用する場合(デフォルト値を変更しない場合)には、パラメータ値の設定を省略することができる。これらの各パラメータが一つのパラメータセットになって、パターンサーチユニットに対応するパラメータセットとして規定されている。
なお、上述した画像処理ユニットの処理順序の一例となるフローチャートの設定、及び画像処理ユニットに対応するパラメータセットの各パラメータ値の設定は、入力部704を通じたユーザの操作に基づいて、フローチャート生成部7011が行う。したがって、本実施形態では、フローチャート生成部7011は、複数の画像処理の処理順序及びパラメータ値を設定する「第1設定手段」の一例として機能する。
次に、ユーザは、レシピ切り換えに対応したローカル変数を宣言(定義)し、そのローカル変数を、レシピ切り換えを行いたいパラメータと対応付ける(関連付ける)。これにより、そのパラメータを含む画像処理ユニットが個別処理ユニットとして規定される。具体的に説明すると、図6に示すエディタ画面に戻って、「設定」をクリックし、図示しないプルダウンメニューから変数設定をクリックし、ポップアップウィンドウで変数設定画面を表示部705に表示させる。
図9は、変数設定画面の一例を示す図である。図9に示す変数設定画面では、「ローカル変数」、「グローバル変数」、「画像変数」の3個の変数タブが含まれている。「ローカル変数」は、一時的に数字や文字等を記憶しておくとともに、一の検査設定内で参照可能な変数であり、画像処理ユニットの一の処理順序(フローチャート)において参照し得る変数である。ローカル変数は、コントローラ10の電源起動時や検査設定切換時に、ユーザによって予め定義された初期値で初期化される。また、特定の画像処理ユニットの実行結果(例えばエッジ位置など)が一時的に記憶された後、その画像処理ユニット以下に配置された画像処理ユニットの実行(例えばエッジ位置とエッジ位置との間の距離など)において参照され得る。「グローバル変数」は、一時的に数字や文字等を記憶しておくとともに、複数の検査設定を跨いで(全検査設定に共通して)参照可能な変数である。すなわち、画像処理ユニットの処理順序(フローチャート)が複数ある場合に、それら複数の処理順序において共通で参照し得る変数である。「画像変数」は、上述のとおりである。
図9に示すように、ユーザは、追加ボタン1015をクリックして、例えば「ローカル変数」として“#kizu”“#size”“#kando”“#seido”を宣言するとともに、レシピ対応欄1016の各チェックボックスをクリックし、これらのローカル変数をレシピ対応にする。これにより、4個のレシピ対応ローカル変数が定義される。このようにして宣言されたレシピ対応ローカル変数は、通常のローカル変数とは意義が異なる。一時的に数字や文字等を記憶しておくとともに、一の検査設定内で参照可能である、という意味においてはローカル変数の範疇に包含される変数であるが、これに加えて、レシピ(品種)に応じて異なる値が代入されるようになっている。なお、変数名の頭についた#は、ローカル変数を意味する接頭子であり、レシピ対応ローカル変数の接頭子も#になっている。
そして、これら4個のレシピ対応ローカル変数を、レシピ切り換えを行いたいパラメータと対応付ける(関連付ける)。具体的には、ユーザは、図7に戻って、傷レベルの変数入力欄1011の左側のチェックボックスにチェックを入れると、変数入力欄1011が入力不可能な状態(グレーアウト状態)から入力可能な状態になるので、レシピ対応ローカル変数“#kizu”を入力する。なお、チェックボックスにおけるチェックの有無により変数入力欄1011の入力可否状態をコントロールすることによって、ユーザが誤って変数を入力してしまうミスを防ぐことができる。また、セグメントサイズの変数入力欄1012の左側のチェックボックスにチェックを入れ、レシピ対応ローカル変数“#size”を入力する。そうすると、図10に示すように、レシピ対応ローカル変数“#kizu”及び“#size”が、それぞれパラメータ「傷レベル」及び「セグメントサイズ」と関連付けられる。同様にして、ユーザは、図8に戻って、サーチ感度の変数入力欄1013の左側のチェックボックスにチェックを入れ、レシピ対応ローカル変数“#kando”を入力する。また、サーチ精度の変数入力欄1014の左側のチェックボックスにチェックを入れ、レシピ対応ローカル変数“#seido”を入力する。そうすると、図11に示すように、レシピ対応ローカル変数“#kando”及び“#seido”が、それぞれパラメータ「サーチ感度」及び「サーチ精度」と関連付けられる。このようにして、4個のレシピ対応ローカル変数が、レシピ切り換えを行いたいパラメータと関連付けられる。なお、図10及び図11において、レシピ対応ローカル変数と通常のローカル変数とを混在させてもよい。通常のローカル変数は、一の処理順序(フローチャート)において画像処理ユニット間で受け渡しを行う値が格納される変数であり、レシピ対応ローカル変数は、一の処理順序(フローチャート)において識別情報(レシピ)に応じて異なる値が代入される変数である。このように、画像処理装置1で実行される画像処理プログラムでは、レシピ対応ローカル変数と通常のローカル変数が混在可能となっている。これにより、通常のローカル変数がもつ画像処理ユニットの間での値の受け渡し機能とともに、レシピ対応ローカル変数がもつレシピに応じたパラメータ値の切り換え機能の双方を発揮することができる。
次に、ユーザは図6に戻って、「ファイル」の中にある「レシピ保存」ボタン(図示せず)をクリックし、レシピの保存を行う。そうすると、図10及び図11で設定した内容、すなわち#kizu=50、#size=20、#seido=0、#kando=0が格納されたレシピファイル(recipe0000.dat)が生成される。レシピファイルの内容を変更したい場合、すなわちレシピに応じてレシピ対応ローカル変数に代入される値を変更したい場合には、図10又は図11に示すプロパティ設定画面を開き、そのプロパティ設定画面上で所望のパラメータ値を選択し、上述した「レシピ保存」ボタン(図示せず)をクリックしてレシピの保存を行う。これにより、最初にパラメータ値を設定する場合と同様(図7及び図8)、ユーザは整数型(int型)や倍精度浮動小数型(double型)などの属性を気にすることなく、パラメータ値の再設定(修正)を行うことができる。
なお、recipe0000.datのファイル名は、システムによって自動的に命名されるファイル名であり、レシピファイルを追加するときには、0000の部分はレシピ番号としてユーザが指定することができる。また、レシピの保存を行う際に、レシピファイルの名称(レシピ名称)を設定することができる。recipe0000.datといったファイル名よりもレシピ名称の方が、ユーザにとって検査対象物の品種を認識しやすい。例えば、画像処理プログラムを最初に作成するユーザと、メンテナンスするユーザが異なる可能性がある場合には、レシピ名称を設定しておき、検査対象物の品種を認識しやすくしておくことができる。具体的には、ユーザは図6に示す「ファイル」の中にある「レシピ名称設定」ボタン(図示せず)をクリックし、図示しないダイアログボックスを開いて、レシピ名称の入力を行う。ここでは、品種0のワークを検査するときにレシピ対応ローカル変数に代入される値が保存されているレシピファイル、という意味で、「ワーク0」という名称を設定する。
図12は、PC70の表示部705に表示されるエディタ画面(主要部)の一例であって、生成されたレシピファイル(recipe0000.dat)が表示されている様子を示す図である。図12に示すように、システムビュー1019のタブをクリックすると、ワークスペース内に各種ファイルが表示される。具体的には、図12に示すように、システムビュー1019のワークスペースには、「0000:Oリング外観検査」と「0001:液晶アライメント」の2個の検査設定が表示され、そのうち「0000:Oリング外観検査」については下位層まで表示されている。そのうち、検査設定ファイル“inspect.dat”には、図6に示すフローチャート、フローチャートを構成する各画像処理ユニット(撮像ユニット、傷ユニット、パターンサーチユニット)のパラメータのデフォルト値、図9に示すレシピ対応有無の属性などが保存される。また、「0000:Oリング外観検査」の下位層には、レシピファイル(recipe0000.dat)が生成されている様子が表示され、このレシピファイルには、品種0のワークを検査するときにレシピ対応ローカル変数に代入される値が保存される。また、図12では、レシピファイル(recipe0000.dat)が点線枠で囲まれているが、これは、現在アクティブになっているレシピファイルであることを示している。つまり、この状態で上述したレシピの保存を行うと、現在レシピ対応ローカル変数が関連付けられたパラメータにおいて設定されているパラメータ値(図10及び図11参照)が、品種0のワークを検査するときにレシピ対応ローカル変数に代入される値として保存される。
なお、図12に示すエディタ画面は、図6と異なり、最上部に「0000−0000:Oリング外観検査 ワーク0」と表示されているが、ハイフンより前の0000は検査設定フォルダ番号、ハイフンより後ろの0000はレシピ番号、ワーク0はレシピ名称を示している。このように、「ワーク0」というレシピ名称を最上部に表示することによって、メンテナンスを行う際にユーザが品種を認識しやすくなる。なお、ユーザが品種を認識しやすくする観点から、レシピ名称をワークスペース内に表示するようにすることもできる(例えば、「recipe0000.dat」を「recipe0000.dat:ワーク0」等と表示することも可能である)。
次に、品種1に対応するパラメータ値として、品種1のワークを検査するときにレシピ対応ローカル変数に代入される値の保存方法について説明する。図13は、レシピ設定のコピー画面例である。ユーザは、図12に示すエディタ画面において、「ファイル」をクリックし、図示しないプルダウンメニューから「レシピ設定のコピー」をクリックし、ポップアップウィンドウでレシピ設定のコピー画面(図13)を表示部705に表示させる。
まず、コピー元のレシピ番号1021を選択し、コピー対象となるレシピファイルをプルダウン等により選択する。ここでは、コピー元レシピ番号として、既にパラメータ値を設定しているレシピ番号0を用いる。また、コピー対象となる対象データ1022を、チェックボックスにチェックを入れて選択する。対象データ1022としては、例えばレシピ名称、ロット番号などのレシピ文字列0〜4、登録画像(登録された基準画像)、ワークの位置補正情報となる位置補正基準値、画面表示や演算などに使用する結果データ等を実寸など任意の単位に変換するスケーリング補正設定などが挙げられる。そして、コピー先レシピ番号1023として、開始(終了)レシピ番号或いはコピー回数などを指定した後(ここでは開始(終了)レシピ番号としてレシピ番号1を指定する)、実行ボタン1024をクリックすると、レシピファイル(recipe0000.dat)がコピーされ、レシピファイル(recipe0001.dat)が生成される。
図14及び図15は、レシピファイル(recipe0001.dat)が生成され、このレシピファイルがアクティブになっている様子を示す図である。図14は、フロービュー1018のタブがクリックされた状態であり、図15は、システムビュー1019のタブがクリックされた状態である。なお、レシピ名称として今度は「ワーク1」を設定しているため、図14及び図15に示すエディタ画面の最上部には、「0000−0001:Oリング外観検査 ワーク1」と表示されている。また、図14及び図15では、レシピファイル(recipe0001.dat)が点線枠で囲まれているため、このレシピファイルがアクティブになっていることが一目で分かるようになっている。
次に、ユーザは、傷ユニット及びパターンサーチユニットのプロパティ設定画面を開き、パラメータ値を変更する。具体的には、ユーザは、傷ユニット及びパターンサーチユニットのプロパティ設定画面を開くと、図10及び図11に示すプロパティ設定画面が表示される。これは、現在アクティブになっているレシピファイル(recipe0001.dat)は、レシピファイル(recipe0000.dat)からコピーしたものだからである。図10に示す傷ユニットについては、検出方向と移動量のパラメータ値としてデフォルト値が表示され、レシピ対応ローカル変数が関連付けられた傷レベル及びセグメントサイズのパラメータ値として、レシピファイル(recipe0000.dat)に保存されている値が読み出され、表示される(#kizu=50、#size=20、#seido=0、#kando=0が表示される)。図11に示すパターンサーチユニットについても同様である。
次に、ユーザは、図16及び図17に示すように、#kizu=60、#size=30、#seido=1、#kando=1となるようにパラメータ値を選択することによって、品種1に対応するパラメータ値を設定する。その後、ユーザは、OKボタンをクリックしてプロパティ設定画面を閉じ、図14又は図15に示す「ファイル」の中にある「レシピ保存」ボタン(図示せず)をクリックし、レシピを保存する。これにより、レシピファイル(recipe0001.dat)の内容が更新される。すなわち、#kizu、#size、#seido、#kandoの各レシピ対応ローカル変数に代入される値が、上記の値によって上書きされる。
以下同様にして、レシピファイルのコピー、品種に対応するパラメータ値の選択、レシピの保存、という一連の作業を繰り返す。図18は、レシピ0からレシピ3までのレシピファイルに保存された内容のイメージを示す図である。図18に示すように、レシピファイル“recipe0000.dat”には、品種0のワークを検査するときに、レシピ対応ローカル変数“#kizu”に代入される値として50が規定され、レシピ対応ローカル変数“#size”に代入される値として20が規定され、レシピ対応ローカル変数“#kando”に代入される値として0が規定され、レシピ対応ローカル変数“#seido”に代入される値として0が規定されている。他のレシピファイルについても同様である。
図19は、品種3に対応するパラメータ値を設定した後、レシピ3のレシピファイルがアクティブになっている様子を示す図である。システムビュー1019のワークスペースでは、レシピファイル“recipe0003.dat”が点線枠で囲まれており、最上部には、「0000−0003:Oリング外観検査 ワーク3」と表示されている。なお、レシピ番号1001を変更することによって、アクティブなレシピファイルを切り換えることもできる。図19ではレシピ番号3がアクティブとなっているが、これを0〜2に切り換えることも可能である。本実施形態では、レシピ番号は0〜3の4種類を切り換えることができるようになっている。
次に、パターンサーチユニットの処理内容を実行する際に用いる基準画像について説明する。ユーザは、図19に示すエディタ画面に戻って、「設定」をクリックし、図示しないプルダウンメニューから「画像登録」をクリックし、ポップアップウィンドウで登録画像一覧を表示部705に表示させる。
図20は、基準画像として登録された画像一覧を示す図である。図20に示すように、ユーザは、パターンサーチユニットの品種に応じた4個の基準画像(ファイル名は、それぞれ“ref1_000_0000.jpg”“ref1_000_0001.jpg”“ref1_000_0002.jpg”“ref1_000_0003.jpg”)を登録しておき、最右欄のレシピ対応欄1017の各チェックボックスをクリックし、これらの画像をレシピ対応の基準画像にする。
そして、基準画像を品種に応じて切り換えたいパターンサーチユニットのプロパティの基準画像設定画面(図示せず)で、パターンサーチの際に用いる基準画像として、下3桁の数字とファイル拡張子を除く“ref1_000”を指定する。そうすると、アクティブとなっているレシピ番号(下3桁で表わされるレシピ番号)に対応した基準画像がパターンサーチに用いられる。具体的に説明すると、レシピ番号0が指定されているときには“ref1_000_0000.jpg”が用いられ、レシピ番号1が指定されているときには“ref1_000_0001.jpg”が用いられ、レシピ番号2が指定されているときには“ref1_000_0002.jpg”が用いられ、レシピ番号3が指定されているときには“ref1_000_0003.jpg”が用いられる。なお、パラメータも基準画像も、レシピ対応有無(つまり、レシピ対応か否か)の属性自体は検査設定ファイル“inspect.dat”内に保存される。
図21は、図19に示す状態から更に、4個の基準画像を登録し、レシピ3のレシピファイル(“recipe0003.dat”)及び基準画像(“ref1_000_0003.jpg”)がアクティブになっている様子を示す図である。
最後に、PC70上で生成された画像処理プログラム、具体的には、図21のワークスペースに示す検査設定ファイル“inspect.dat”、レシピファイル“recipe0000.dat”〜“recipe0003.dat”、基準画像“ref1_000_0000.jpg”〜“ref1_000_0003.jpg”が、画像処理装置1のコントローラ10に転送された後、画像処理装置1において画像処理プログラムが実行される。
以上、図6〜図21を用いて説明したように、ユーザは、PC70において画像処理プログラムを作成する際に、レシピ対応ローカル変数を定義し(図9)、それを傷ユニット及びパターンサーチユニットのパラメータに関連付けることによって(図10、図11)、これらの画像処理ユニットを個別処理ユニットとして指定することができる。同時に、レシピ対応ローカル変数と関連付けられたパラメータは、個別処理ユニットとして指定された傷ユニット及びパターンサーチユニットについて複数の異なるパラメータ値をもつ個別パラメータとして設定されるとともに、個別パラメータの各々のパラメータ値に対し個別処理ユニット間で共通のレシピ番号を関連付けて設定される(図18)。これらの各処理は、ユーザによる入力部704の操作を通じて、フローチャート生成部7011が行う。したがって、フローチャート生成部7011は、パラメータについて、複数の異なるパラメータ値を設定可能な個別パラメータか、或いは、一のパラメータ値を設定可能な共通パラメータかを指定する手段の一例として機能するとともに、個別パラメータの各々のパラメータ値に対し複数の画像処理間で共通の識別情報を関連付けて設定する「第2設定手段」の一例として機能する。
[画像処理装置の動作]
図22は、画像処理装置1における画像処理の流れを示すフローチャートである。
図22に示すように、まず、画像処理装置1のコントローラ10は、検査用データを受信する(ステップS1)。具体的には、PC70から送られてきた検査用データとして、画像処理ユニットの処理手順を示すフローチャートや各画像処理ユニットの各パラメータのデフォルト値、レシピ対応有無の属性などを含む検査設定ファイル(inspect.dat)、上述したレシピファイル、必要に応じて基準画像などを受信する。受信した検査用データは、検査用データ記憶部102(図4)に記憶される。
次に、デフォルトでアクティブになっているレシピ番号(例えばレシピ0)に基づいて、割り付けが行われる(ステップS2)。具体的には、コントローラ10のパラメータセット/基準画像割り付け部103(図4)は、検査用データ記憶部102の中からパラメータ値やレシピ番号などを読み出して、レシピ番号が示すレシピファイルを参照し、そのレシピ番号に応じた値をレシピ対応ローカル変数に代入する。そして、個別処理ユニットとして規定された傷ユニット及びパターンサーチユニットの個別パラメータに対して、レシピ番号に対応したパラメータ値(レシピ対応ローカル変数に代入された値)が割り付けられる。また、傷ユニット及びパターンサーチユニットの個別パラメータ以外のパラメータ(共通パラメータ)に対しては、検査設定ファイルを参照し、レシピ番号によらないパラメータ値(ユーザが設定した一のパラメータ値)が割り付けられる。また、共通処理ユニットとして規定される撮像ユニットのパラメータに対しても同様に、検査設定ファイルを参照し、レシピ番号によらないパラメータ値(ユーザが設定した一のパラメータ値)が割り付けられる。
次に、割り付けが成功したか否かが判断される(ステップS3)。パラメータ値の割り付けは通常は成功する可能性が高いが、ユーザのミス等によって失敗することがある。例えば、ユーザが、レシピファイルの一つをPC70からコントローラ10にアップロードし忘れた場合には、参照すべきレシピファイルが存在しないため、レシピ番号に応じた値をレシピ対応ローカル変数に代入することができない。したがって、この場合は、パラメータセット/基準画像割り付け部103において、パラメータ値の割り付け失敗として判断され(ステップS3:NO)、エラー処理が実行される(ステップS5)。エラー処理としては、ユーザに「参照すべきレシピファイルが存在しません。」などの表示をモニタ40上に行うようにしてもよい。
一方で、パラメータ値の割り付けが成功した場合には(ステップS3:YES)、画像処理が実行される(ステップS4)。具体的には、画像処理実行部105は、検査用データに含まれるフローチャート、ステップS2で割り付けられたパラメータ値により、処理ユニット記憶部104に記憶された画像処理ユニットの処理内容と協働して、品種0のワークに対する画像処理を実行する。
ここで、今まで品種0のワークが流れていたが、連続して、次に品種1のワークが流れてくると仮定する。このとき、外部のPLC60からレシピ切り換えコマンドが送られてくる。図23は、画像処理装置1においてレシピ番号が切り換えられる例を説明するためのフローチャートである。コントローラ10の識別情報受信部101(図4)は、ユーザによって指定された、レシピ切り換えコマンドが示すレシピ番号を受信する(ステップS11)。レシピ番号は、識別情報受信部101によってパラメータセット/基準画像割り付け部103(図4)へ転送される。
パラメータセット/基準画像割り付け部103は、識別情報受信部101から転送されるレシピ番号(例えばレシピ0001)を参照し、そのレシピ番号に応じた値をレシピ対応ローカル変数に代入する。そして、個別処理ユニットとして規定された傷ユニット及びパターンサーチユニットの個別パラメータに対して、レシピ番号に対応したパラメータ値(レシピ対応ローカル変数に代入された値)が割り付けられる(ステップS12)。また、傷ユニット及びパターンサーチユニットの個別パラメータ以外のパラメータ(共通パラメータ)に対しては、検査設定ファイルを参照し、レシピ番号によらないパラメータ値(ユーザが設定した一のパラメータ値)が割り付けられる。また、共通処理ユニットとして規定される撮像ユニットのパラメータに対しても同様に、検査設定ファイルを参照し、レシピ番号によらないパラメータ値(ユーザが設定した一のパラメータ値)が割り付けられる。
その後、上述したように、割り付けが成功したか否かが判断され(ステップS13)、成功した場合には(ステップS13:YES)、画像処理が実行され(ステップS14)、失敗した場合には(ステップS13:NO)、エラー処理が実行される(ステップS15)。
このように、ユーザ又は外部のPLC60などからレシピ切り換えの要求を受けたとき(図23のステップS11)、個別処理ユニットの個別パラメータについて、切り換えたいレシピ番号に対応したパラメータ値が割り付けられた上で(図23のステップS12)、画像処理が実行されるので(図23のステップS14)、フローチャートを1つ作成するだけで、複数の品種に対応することができる。その結果、切換コマンドを画像処理装置1に送るだけの簡易な操作により、ワークの品種に応じたパラメータ値を用いて検査を行うことができ、ひいては使い勝手を向上させることができる。
また、画像処理装置1は、複数のフローチャートを入れ換えて品種対応を可能にする画像処理装置と比べて、切り換えの内部処理に掛かる時間を短縮することができる。詳述すると、フローチャートを入れ換えた場合には、フローチャートの初期化に多少の時間が掛かる。例えば初期化処理では、画像処理に用いる基準画像をフラッシュメモリからRAMに予め展開しておいたり、頻繁に使うパラメータをフラッシュメモリからRAMに予め展開しておいたりする。レシピファイルを入れ換えて品種対応を可能にする画像処理装置1では、このような初期化処理をワークの品種が変わる度に行う必要はないため、切り換えの内部処理に掛かる時間を短縮することができる。
また、上述した本実施形態では、エディタ画面(UI)上でパラメータ値を設定するようにしたが、これによりユーザの設定ミスを防ぐことができる。仮に、図18に示すファイル群をテキストエディタで別途作成した場合には、“0”(ゼロ)と“O”(オー)の記述ミスなどが発生し、レシピ対応ローカル変数に代入される値を読み込めないエラーが生ずる虞がある。また、変数値の属性にはdouble(倍精度浮動小数型)やint(整数型)などがあるが、属性指定を勘違いした場合には、ユーザが思っていた値と異なる値が入力される虞がある(double型にも拘わらず単に0.1と入力すると、コントローラ10は0.1の近似値が入力されたものとして扱う場合がある)。そこで、エディタ画面(UI)上でパラメータ値を設定するようにすることで、このような設定ミスを防ぐことができる。
なお、図23は、PLC60から送られてきたレシピ切り換えコマンドによって、レシピ番号を自動的に切り換えることとしたが、例えばコンソール50を用いて手動でレシピ番号を切り換えることもできる。具体的には、例えば今まで品種0のワークが流れていたが、一旦中断して、次に品種1のワークが流れてくると仮定する。ワークの流れが中断しているときに、ユーザは、レシピ番号を手動で切り換えることができる。
図24は、画像処理装置1のモニタ40において、コンソール50を用いてレシピ設定に関する操作を行う画面例を示す図である。ユーザは、コンソール50を操作して、モニタ40上でレシピ切り換えを行う。例えば、ファンクションキーなどから図24(a)に示すレシピ切換画面をモニタ40上に表示させる。そして、切換先となるレシピ番号(例えばレシピ0001)、レシピ名称(例えばワーク1)を指定し、実行ボタンをクリックする。そうすると、コントローラ10の識別情報受信部101(図4)は、ユーザによって指定された、コンソール50の操作信号に基づくレシピ番号を受信する(図23のステップS11)。レシピ番号は、識別情報受信部101によってパラメータセット/基準画像割り付け部103(図4)へ転送される。その後、図23のステップS12〜ステップS15の各処理が実行される。なお、図24(b),図24(c)の詳細については、後述する[メンテナンス方法]で説明する。
[メンテナンス方法]
次に、メンテナンス方法について説明する。図25は、メンテナンス内容を示すフローチャートである。図25において、メンテナンス前とメンテナンス後とでは、一部の画像処理ユニットが入れ替わっている(網掛けで示す)。図2を用いて説明したのと同様に、傷ユニットが傷iiユニットに代わり、パターンサーチユニットがパターンサーチiiユニットに代わっている。以下では、このようなメンテナンスをPC70において行う場合について説明する。すなわち、コントローラ10から検査用データをPC70へダウンロードし、PC70のソフトウェアを用いて編集作業(メンテナンス)を行った後、再びコントローラ10へ検査用データをアップロードする。なお、一般に、PC70にはコントローラ10に保存されている検査設定と同期して、同じ検査設定が保存されているため、検査用データをダウンロードしなくても、メンテナンスを行うことは可能である。
PC70でプログラム作成支援ソフトウェアを起動した後、コントローラ10から検査用データをPC70へダウンロードした直後のエディタ画面は、例えば図6に示すような画面になる。そして、図25に示すようなメンテナンスを行うため、まず画像処理ユニットの削除・追加を行う。その結果、図26に示すエディタ画面が表示される。そして、フロービュー1018の傷iiユニット上で右クリックをして、プロパティ設定画面を開くと、図27に示すような画面が表示される。このとき、パラメータ「傷レベル」のパラメータ値は50、パラメータ「セグメントサイズ」のパラメータ値は20、パラメータ「移動量」のパラメータ値は8と表示されているが、これは、傷iiユニットのデフォルト値として予め検査設定ファイルに保存されているパラメータ値である。
ここで、ユーザは、個別パラメータとして、「傷レベル」にレシピ対応ローカル変数#kizuを入力し、「セグメントサイズ」にレシピ対応ローカル変数#sizeを入力して(図28参照)、パラメータにレシピ対応ローカル変数を関連付ける。他のパラメータ、すなわち検出方向や移動量については、予め定められた数値リストの中から所望の数値を選択することによって、一のパラメータ値を設定する。デフォルト値をそのまま使用する際には、パラメータ値の設定を省略することができる。パターンサーチiiユニットについても同様である。すなわち、図29及び図30に示すように、ユーザは、パターンサーチiiユニットのプロパティ設定画面(図29)において、個別パラメータとして「サーチ感度」にレシピ対応ローカル変数#kandoを関連付け、個別パラメータとして「サーチ精度」にレシピ対応ローカル変数#seidoを関連付ける(図30)。また、他のパラメータについても一のパラメータ値を設定する。
このように、ユーザは、PC70においてフローチャートの入れ替えを行った後(図26)、画像処理ユニットのパラメータ値の設定を行うことによって(図27〜図30)、メンテナンスを完了させることができる。メンテナンスが完了すると、検査用データがPC70からコントローラ10へ転送され、画像処理装置1に保存されている検査用データが上書きされ、画像処理装置1の運転が再開される。
なお、図27〜図30を用いて説明したメンテナンス方法では、画像処理ユニットの入れ替えと、画像処理ユニットのパラメータ修正、という編集を行うこととしたが、例えば画像処理ユニットのパラメータ修正、特にレシピファイルのみの編集を行うこともできる。この場合、ユーザは、PC70において、レシピファイルの編集を行う。例えば図16に示すレシピファイルのうち、recipe0001.datにおける#kizuの値(現在値60)を65に変更する場合を考える。
ユーザは、PC70において、レシピ番号1001を操作してレシピファイルrecipe0001.datをアクティブにするとともに、傷ユニットのプロパティ設定画面を表示させる(図16参照)。そして、傷レベルのパラメータ値として65を選択することによって、パラメータ値を60から65へ変更する。その後、ユーザは、プロパティ設定画面を閉じ、図14に示す「ファイル」の中にある「レシピ保存」ボタン(図示せず)をクリックし、レシピを保存する。そうすると、recipe0001.datにおける#kizuの値が65になり、品種1のワークを検査するときに、レシピ対応ローカル変数#kizuに代入される値として65が規定される。レシピの保存が終わると、PC70と画像処理装置1を接続し、レシピファイルrecipe0001.datのみの転送を行う。その結果、コントローラ10に保存されているレシピファイルrecipe0001.datが、新たにPC70から転送されたレシピファイルrecipe0001.datによって上書きされ、品種1のワークを検査する際には、傷レベルのパラメータ値として65が割り付けられた上で、画像処理が行われる。
なお、以上はPC70においてフローチャートのメンテナンスを行う場合の説明であるが、画像処理装置1のモニタ40上でメンテナンスを行うこともできる。具体的には、モニタ40にフローチャートや画像処理ユニットのプロパティ設定画面を表示させ、コンソール50を用いてメンテナンスを行う。
図31は、画像処理装置1のモニタ40においてメンテナンスを行った際の処理の流れを示すフローチャートである。図31において、ユーザは、画像処理装置1の運転を停止させるとともに、コンソール50を操作してモニタ40上にフローチャートや画像処理ユニットのプロパティ設定画面を表示させる。そして、PC70でメンテナンスを行った場合と同様に、ユニットの追加・削除を行い(ステップS21)、パラメータ値の設定(ステップS22)を行う。このとき例えば、扱う品種が増えるような場合には、レシピ設定のコピーを行うことができる。例えば、ユーザはモニタ40上に図24(b)に示す画面を表示させ、コピー元のレシピ番号とコピー先のレシピ番号を指定し、実行ボタンをクリックする。そうすると、図13を用いて説明したときと同様に、コピー先のレシピ番号に対応するレシピファイルが新たに生成される。また、図24(c)に示すように、レシピ名称の変更を行うこともできる。モニタ40においてメンテナンスを行う場合であっても、図27〜図30を用いて説明したのと同様に、一のフローチャート上で必要な編集を行えばよいので、少ない工数でメンテナンスすることができる。なお、図31において、パラメータの設定(ステップS22)が終わると、あとは図22で説明した処理(ステップS2〜ステップS5)と同様である(ステップS23〜ステップS26)。
このように、本実施形態に係る画像処理装置1によれば、フローチャートを1つ作成するだけで複数の品種に対応することができるとともに、画像処理ユニットの一部を入れ替えたときであっても、1つのフローチャートについてのみ編集を行うだけでよいので、少ない工数でメンテナンスすることができ、ひいては画像処理装置の使い勝手を向上させることができる。
[変形例]
図32及び図33は、本発明の他の実施の形態に係る画像処理装置におけるメンテナンス方法の概略を説明するための説明図である。上述した本実施形態では、レシピ対応ローカル変数を別途定義した上で、個別処理ユニットの個別パラメータを規定することとしたが(図9参照)、本発明は、必ずしもレシピ対応ローカル変数を別途定義しなくてもよい。具体的には、例えば図32及び図33に示すように、個別処理ユニットのパラメータ設定画面においてレシピ対応にするためのチェックボックスを設けてもよい。これにより、図32及び図33に示す#kizu、#size、#kando、#seidoは、レシピ対応ローカル変数と同様の機能を発揮する変数にすることができる。
また、上述した本実施形態では、外部PLC60からレシピ番号を切り換えるレシピ切り換えコマンドが送られてくる場合について説明したが、例えば、検査設定切り換えコマンドが送られてくる場合が混在していてもよい。検査設定切り換えコマンドは、複数ある検査設定の中から、所定の検査設定に切り換えるコマンドである。これにより、画像処理が実行される際に用いられるフローチャート自体が切り換わる。
図34は、レシピ切り換えコマンドと検査設定切り換えコマンドとが混在する場合を説明するためのフローチャートである。
図34に示すように、コントローラ10の識別情報受信部101(図4)は、外部のPLC60などからコマンドを受信すると(ステップS31)、それがレシピ切り換えコマンドか否かを判断する(ステップS32)。それがレシピ切り換えコマンドである場合には(ステップS32:YES)、識別情報受信部101によって、レシピ番号がパラメータセット/基準画像割り付け部103(図4)へ転送される。その後、ステップS33〜ステップS36までの処理は、図23を用いて説明したステップS12〜ステップS15までの処理と同様である。
一方で、コントローラ10の識別情報受信部101(図4)が、受信したコマンドをレシピ切り換えコマンドでないと判断した場合には(ステップS32:NO)、受信したコマンドが検査設定切り換えコマンドか否かを判断する(ステップS37)。検査設定切り換えコマンドである場合には、検査設定の切り換えが行われ(ステップS38)、検査設定切り換えコマンドでない場合には、他のコマンドであると認識して、他の処理が行われる(ステップS39)。
このように、画像処理装置1は、受信したコマンドが、識別情報としてレシピを切り換えるコマンドであるか、或いは、画像処理ユニットの処理順序を切り換えるコマンドであるかを識別して判断する機能を有している。すなわち、外部からコマンドを受信したときに、受信したコマンドが(複数ある識別情報のうち一の)識別情報を指定するコマンドであるか、又は、(複数ある画像処理ユニットの処理順序のうち一の)処理順序を指定するコマンドであるかを識別し、識別情報を指定するコマンドである場合には、パラメータ値の割り付けを行う一方、処理順序を指定するコマンドである場合には、処理順序の切り換えを行うことが可能な構成となっている。これにより、これにより、識別情報を指定するコマンドと処理順序を指定するコマンドの双方が画像処理装置1に送られたときであっても、これらのコマンドを正しく認識して、正常に動作することができる。
また、上述した実施形態では、レシピ対象としてパラメータと基準画像の2つを説明したが、レシピ対象として位置補正基準値も考えられる(図13参照)。位置補正基準値は、基準画像に対して計測した結果を位置補正の基準の値となるものである。この位置補正基準値も、ワークの品種ごとに異なる値が考えられ、レシピ対象に含めておくことで、少ない工数で位置補正基準値のメンテナンスを行うことができる。
以上説明したように、画像処理装置1は、検査対象物の品種に応じたレシピ番号が指定されると、個別パラメータ(傷ユニット及び傷iiユニットの傷レベル及びセグメントサイズ、パターンサーチユニット及びパターンサーチiiユニットのサーチ感度及びサーチ精度)のパラメータ値を、指定されたレシピ番号に対応したパラメータ値に切り換えることができる。したがって、フローチャートを1つ作成するだけで複数の品種に対応することができ、メンテナンスの必要性が生じたときであっても、1つのフローチャートについてのみ編集を行うだけでよく、少ない工数でメンテナンスすることができる。その結果、画像処理装置の使い勝手を向上させることができる。
また、図2に示すように、個別処理ユニットとして規定される画像処理ユニットのパラメータには、個別パラメータだけではなく、共通パラメータ(傷ユニットの検出方向、パターンサーチユニットの検出個数など)が混在している。したがって、品種に応じてパラメータ値を切り換える必要のないパラメータについては、一のパラメータ値を設定するだけで全品種に反映させることができ、少ない工数でメンテナンスを完了させることができる。