(57)【要約】【課題】システムインテグレータが、容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることのできる画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムを提供する。【解決手段】操作入力部７は、ユーザの操作を受け付ける。画像処理モジュール記憶部２９１は、複数個の画像処理モジュールを記憶する。基本フロー開発部９は、操作入力部７を通じたユーザの操作に従って、画像処理モジュール記憶部２９１に記憶されている複数個の画像処理モジュールの実行順序を決定する。画像処理モジュール開発部１０は、操作入力部７を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、画像処理モジュール記憶部２９１に記憶する。【選択図】図１
2009059203.tif 000002
【特許請求の範囲】
【請求項１】
画像処理検査装置の画像処理機能をカスタマイズする装置であって、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第１の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第１の記憶部に記憶する画像処理モジュール作成部とを備えた、画像処理機能のカスタマイズ装置。
【請求項２】
前記画像処理機能のカスタマイズ装置は、
画像処理モジュールのテンプレートを記憶する第２の記憶部を備え、
前記画像処理モジュール作成部は、前記テンプレートを表示して、前記操作入力部を通じたユーザの操作に従って、前記テンプレートを編集することによって、新たな画像処理モジュールを作成する、請求項１記載の画像処理機能のカスタマイズ装置。
【請求項３】
前記画像処理モジュ−ルは、
画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む、請求項２記載の画像処理機能のカスタマイズ装置。
【請求項４】
前記画像処理機能のカスタマイズ装置は、さらに、
テンプレートの画面に貼り付ける部品を記憶する第３の記憶部を備え、
前記画像処理モジュール作成部は、
前記ユーザインタフェース部分の作成時には、前記第２の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、前記操作入力部を通じたユーザの操作に従って、前記ユーザインタフェース画面のテンプレートに前記第３の記憶部に記憶されている部品を貼り付けることによって、前記ユーザインタフェース部分のテンプレートを編集する、請求項３記載の画像処理機能のカスタマイズ装置。
【請求項５】
前記画像処理モジュール作成部は、前記表示部分、前記出力部分、または前記演算部分の作成時には、前記第２の記憶部から前記部分のプログラムのテンプレートを読み出してエディタ上に表示し、前記操作入力部を通じたユーザの操作に従って、前記プログラムのテンプレートを編集する、請求項３記載の画像処理機能のカスタマイズ装置。
【請求項６】
前記画像処理モジュールは、１個または複数個のファイルで構成されており、
、前記ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によって、前記ファイルまたは前記ファイル内の関数が、前記画像処理モジュールの前記表示部分、前記出力部分、および前記演算部分のいずれに対応するかが識別可能とされている、請求項５記載の画像処理機能のカスタマイズ装置。
【請求項７】
前記画像処理機能のカスタマイズ装置は、さらに、
前記第２の記憶部は、さらに前記画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、
前記第２の記憶部から前記運転画面のテンプレートを読み出して表示し、前記操作入力部を通じたユーザの操作に従って、前記運転画面のテンプレートに前記第３の記憶部に記憶されている部品を貼り付けることによって前記運転画面のテンプレートを編集する運転画面作成部とを備えた、請求項２記載の画像処理機能のカスタマイズ装置。
【請求項８】
前記画像処理機能のカスタマイズ装置は、さらに、
前記操作入力部を通じたユーザの操作に従って、前記画像処理検査装置による画像処理実行中にイベントが発生した場合に、前記イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、
基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、前記操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、
前記実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する、請求項７記載の画像処理機能のカスタマイズ装置。
【請求項９】
複数個の画像処理モジュールを記憶する第１の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、
操作入力部が、ユーザの操作を受け付けるステップと、、
基本フロー作成部が、前記操作入力部を通じたユーザの操作に従って、前記第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、
画像処理モジュール作成部が、前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第１の記憶部に記憶するステップとを備えた、画像処理機能のカスタマイズ方法。
【請求項１０】
画像処理検査装置の画像処理機能をカスタマイズするためのプログラムであって、コンピュータを、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第１の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第１の記憶部に記憶する画像処理モジュール作成部として機能させるための、画像処理機能のカスタマイズのためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関し、特に、製品検査などに用いられる画像処理検査装置の画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関する。
【背景技術】
【０００２】
画像処理検査装置は、カメラで撮影された画像を用いて検査を行なうもので、工場の製造ラインなど多方面で用いられている。画像処理検査装置は、どの使用者でも利用できる汎用性を有した装置およびプログラムからなる汎用タイプのものと、個々の使用者のニーズに合致した専用の装置およびプログラムからなる専用タイプのものがある。汎用タイプの画像処理検査装置は、どの使用者でもそれなりに利用することができるが、各使用者のニーズを完全に満たすことができないという問題がある。一方、専用タイプの画像処理検査装置は、使用者ごとに個別に開発しなければならず、メーカ側の開発コストが高いという問題がある。
【０００３】
汎用タイプおよび専用タイプはそれぞれ上述のような問題点があるので、メーカ側が、画像処理検査装置の機能のカスタマイズが可能な装置およびそれを動作させるプログラムを提供し、システムインテグレータ（ＳＩ）が、利用者のニーズに合わせて機能をカスタマイズすることが必要となる。
【０００４】
画像処理検査装置の機能のカスタマイズには、プログラム方式と、メニュー方式と、フロー方式の３つの方法がある。
【０００５】
プログラム方式は、ＳＩが、エディタ上で市販のライブラリ（たとえば、非特許文献１および２を参照）を組み合わせてソースコードを記述することによって、画像処理を行なうプログラムを作成する方式である。
【０００６】
メニュー方式は、画像入力、位置補正、検査・計測、出力といった基本となる処理の流れが決まっており、ＳＩが、個々の処理で具体的にどのような処理を行なうかを、予め用意された画像処理モジュールの中からメニューで選択する方式である。
【０００７】
フロー方式は、ＳＩが、予め用意された画像処理モジュールを選択し、フローチャートを組むようにして処理の流れを作成する方式である。
【非特許文献１】インターネット  <URL : http://im.canon-sol.jp/matrox/mil/mil.html>
【非特許文献２】インターネット  <URL : http://www.cognex.co.jp/products/pc/visionpro/index.asp>
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の従来の方式には以下のような問題がある。
プログラム方式では、ＳＩが、画像処理検査の処理の流れと、個々の処理の内容を記述したソースコードを作成しなければならず、ＳＩの負担が大きい。
【０００９】
メニュー方式では、画像処理検査の処理の流れが固定で決まっているので、各処理の結果に応じて処理の流れを変えたい場合に対応できない。また、予め用意された画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【００１０】
フロー方式では、画像処理検査の処理の流れがＳＩが自由に設計できるメリットはあるものの、予め備えられている画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【００１１】
それゆえに、本発明の目的は、システムインテグレータが、容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることのできる画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムを提供することである。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第１の記憶部と、操作入力部を通じたユーザの操作に従って、第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第１の記憶部に記憶する画像処理モジュール作成部とを備える。
【００１３】
好ましくは、画像処理機能のカスタマイズ装置は、画像処理モジュールのテンプレートを記憶する第２の記憶部を備え、画像処理モジュール作成部は、テンプレートを表示して、操作入力部を通じたユーザの操作に従って、テンプレートを編集することによって、新たな画像処理モジュールを作成する。
【００１４】
好ましくは、画像処理モジュ−ルは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む。
【００１５】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、テンプレートの画面に貼り付ける部品を記憶する第３の記憶部を備え、画像処理モジュール作成部は、ユーザインタフェース部分の作成時には、第２の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、操作入力部を通じたユーザの操作に従って、ユーザインタフェース画面のテンプレートに第３の記憶部に記憶されている部品を貼り付けることによって、ユーザインタフェース部分のテンプレートを編集する。
【００１６】
好ましくは、画像処理モジュール作成部は、表示部分、出力部分、または演算部分の作成時には、第２の記憶部から部分のプログラムのテンプレートを読み出してエディタ上に表示し、操作入力部を通じたユーザの操作に従って、プログラムのテンプレートを編集する。
【００１７】
好ましくは、画像処理モジュールは、１個または複数個のファイルで構成されており、、ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によってファイルまたはファイル内の関数が、画像処理モジュールの表示部分、出力部分、および演算部分のいずれに対応するかが識別可能とされている。
【００１８】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、第２の記憶部は、さらに画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、第２の記憶部から運転画面のテンプレートを読み出して表示し、操作入力部を通じたユーザの操作に従って、運転画面のテンプレートに第３の記憶部に記憶されている部品を貼り付けることによって運転画面のテンプレートを編集する運転画面作成部とを備える。
【００１９】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、操作入力部を通じたユーザの操作に従って、画像処理検査装置による画像処理実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する。
【００２０】
また、本発明は、複数個の画像処理モジュールを記憶する第１の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、操作入力部が、ユーザの操作を受け付けるステップと、、基本フロー作成部が、操作入力部を通じたユーザの操作に従って、第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、画像処理モジュール作成部が、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第１の記憶部に記憶するステップとを備える。
【００２１】
また、本発明の画像処理機能をカスタマイズするプログラムは、コンピュータを、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第１の記憶部と、操作入力部を通じたユーザの操作に従って、第１の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第１の記憶部に記憶する画像処理モジュール作成部として機能させる。
【発明の効果】
【００２２】
本発明によれば、システムインテグレータが、容易かつ十分に画像処理機能をカスタマイズすることができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明に係る実施の形態について図面を参照して説明する。
図１は、本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。この画像処理機能のカスタマイズ装置１は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、画像処理検査装置で動作する実行形式のプログラムを作成する。
【００２４】
図１を参照して、この画像処理機能のカスタマイズ装置１は、コンピュータで実現されており、ディスプレイ２と、ＣＰＵ（Central Processing Unit）およびメモリ４と、操作入力部７と、ハードディスク５と、リムーバブルメディア６を備える。
【００２５】
操作入力部７は、マウス２０とキーボード２１を含み、画像処理機能のカスタマイズ装置１のユーザであるＳＩからの操作入力を受け付ける。
【００２６】
ハードディスク５は、カスタマイズプログラム記憶部１４と、画像処理モジュール記憶部２９１と、基本フロー記憶部２９４と、イベント処理モジュール記憶部２９２と、運転画面記憶部２９３と、テンプレート記憶部１６と、部品記憶部１５と、ＯＳ類記憶部２２と、ライブラリ類記憶部２３と、シミュレーションソフト記憶部１７と、マニュアル類記憶部１８と、実行プログラム記憶部１９とを含む。
【００２７】
カスタマイズプログラム記憶部１４は、カスタマイズプログラム（Application Producer）を記憶する。カスタマイズプログラムは、ＣＰＵに読み込まれて実行され、コンピュータを画像処理機能のカスタマイズ装置１の各構成要素として機能させる。
【００２８】
画像処理モジュール記憶部２９１は、ソースコード形式の画像処理モジュールを記憶する。画像処理モジュールは、色面積の計算、エッジ位置検出などの画像処理の基本単位を実行するためのもので、複数個のファイルからなる。画像処理モジュール記憶部２９１は、出荷時に予め組み込まれている画像処理モジュールと、ＳＩによって新たに作成された画像処理モジュールとを記憶する。画像処理モジュールは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を少なくとも含む。画像処理のパラメータの設定には、サーチなどのモデル画像の領域座標および画像の設定、画像計測などの計測領域の設定、面積計測での穴埋め（輪郭の中を塗りつぶす）機能の実行の有無の設定、計測結果の判定を行なうための上下限値の設定などがある。
【００２９】
基本フロー記憶部２９４は、ＳＩによって作成された画像処理モジュールの実行順序と、そのパラメータからなる基本フローを記憶する。
【００３０】
イベント処理モジュール記憶部２９２は、ＳＩによって新たに作成されたソースコード形式のイベント処理モジュールを記憶する。イベント処理モジュールは、画像処理検査装置による画像処理の実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたものである。イベント処理モジュールは、画像処理モジュールのようなパラメータの設定のためのユーザインタフェース部分を含まない。
【００３１】
運転画面記憶部２９３は、ＳＩによって新たに作成された運転画面を記憶する。運転画面は、画像処理検査装置による画像処理の結果を表示するための画面であり、記憶されている運転画面は、ビジュアルベーシックのファイルからなる。
【００３２】
テンプレート記憶部１６は、画像処理モジュールのテンプレートおよび運転画面のテンプレートを記憶する。運転画面のテンプレートは、ビジュアルベーシック（登録商標）のファイルからなる。テンプレートとは、新たな画像処理モジュールおよび運転画面を作成するときの原型となるものであって、１個以上のファイルで構成され、ファイル内には、実行する典型的な呼び出し関数が記述されているものである。ファイル内の呼び出し関数には、典型的な実行命令が記述されていたり、あるいはリターン値だけが記載されている（スケルトン形式という）。
【００３３】
図２は、画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。画像処理モジュール記憶部２９１に記憶されている画像処理モジュールも、「Sample」が個々の画像処理モジュール特有の名称となっている以外は、図２と同様のファイル構成である。
【００３４】
図２を参照して、「Sample_jpn.msg」は、日本語のメッセージファイルである。「Sample_eng.msg」は、英語のメッセージファイルである。
【００３５】
ＵＩプログラムは、画像処理のパラメータ（各種の閾値など）を設定するためのユーザインタフェースを規定したものであり、２個の必須ファイルがある。「NormalForm.vb」は、通常使用されるユーザインタフェースを記述したビジュアルベーシックのファイルである。「NonstopForm.vb」は、計測中に一時的に上下限値を変更するための簡易ノンストップをするときのユーザインタフェースを記述したビジュアルベーシックのファイルである。
【００３６】
ＭＳプログラムは、画像処理の処理内容である演算（つまり計測）、画像処理結果（つまり計測結果）の表示、画像処理結果（つまり計測結果）の出力などを規定したものであり、９個の必須ファイルと、５個の任意ファイルとがある。ＭＳプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算（計測）部分のいずれに対応するかがファイル名によって識別可能とされている。これにより、ＳＩがテンプレートを編集する際にどのファイルを修正すべきであるかが容易にわかる。また、ＭＳプログラムのテンプレートに記述される関数は、その中身が戻り値（リターン値）だけが記述されているスケルトンの形式である。
【００３７】
「AssignProc.cpp」は、処理ユニット登録時処理関連の処理を記述したテキストファイルである。処理ユニットは、画像処理モジュールと同義である。「Assign」は登録を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、ＳＩがテンプレートの編集の際に、「AssignProc.cpp」が上記処理を記述するものであることを容易に識別できる。
「FigureUpdate.cpp」は、図形データ更新時処理関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Update」は更新を意味するものであるから、ＳＩがテンプレートの編集の際に、「FigureUpdate.cpp」が上記処理を記述するものであることを容易に識別できる。
【００３８】
「ItemDefs.h」は、処理項目の各種定義を記述したテキストファイルである。処理項目は、画像処理モジュールおよび処理ユニットと同義である。「「Item」は項目を意味し、「Def」は定義を意味する「Definition」を略したものであるから、ＳＩがテンプレートの編集の際に、「ItemDefs.h」が上記処理を記述するものであることを容易に識別できる。
【００３９】
「ItemInit.cpp」は、処理項目の初期化処理関連の処理を記述したテキストファイルである。「Item」は項目を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、ＳＩがテンプレートの編集の際に、「ItemInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４０】
「MeasureDisp.cpp」は、計測結果表示処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Disp」は表示を意味する「Display」を略したものであるから、ＳＩがテンプレートの編集の際に、「MeasureDisp.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４１】
「MeasureInit.cpp」は、計測初期化／終了関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、ＳＩがテンプレートの編集の際に、「MeasureInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４２】
「MeasureOut.cpp」は、計測結果出力処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Out」は出力を意味するものであるから、ＳＩがテンプレートの編集の際に、「MeasureOut.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４３】
「MeasureProc.cpp」は、計測処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、ＳＩがテンプレートの編集の際に、「MeasureProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４４】
「UnitData.cpp」は、処理ユニットデータ設定／取得関連の処理を記述したテキストファイルである。「Unit」はユニットを意味し、「Data」はデータを意味するものであるから、ＳＩがテンプレートの編集の際に、「UnitData.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４５】
「FigureData.cpp」、処理ユニットの図形データ操作関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Data」はデータを意味するものであるから、ＳＩがテンプレートの編集の際に、「FigureData.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４６】
「RenumProc.cpp」は、処理ユニットの参照番号更新処理関連の処理を記述したテキストファイルである。「Renum」は番号更新を意味する「Renumber」を略したものであり、「Proc」は処理を意味する「Processing」を略したものであるから、ＳＩがテンプレートの編集の際に、「RenumProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４７】
「SaveLoad.cpp」は、処理ユニットのデータのセーブおよびロード関連の処理を記述したテキストファイルである。「Save」セーブ（保存）を意味し、「Load」はロード（読出し）を意味するものであるから、ＳＩがテンプレートの編集の際に、「SaveLoad.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４８】
「SetupData.cpp」は、設定時の画像処理関連の処理を記述したテキストファイルである。「Setup」は設定を意味し、「Data」はデータを意味するものであるから、ＳＩがテンプレートの編集の際に、「SetupData.cpp」が上記処理を記述するものであることを容易に識別できる。
【００４９】
「ThroughProc.cpp」は、スルー表示のための画像入力および生成処理関連の処理を記述したテキストファイルである。「Through」はスルー（直通）を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、ＳＩがテンプレートの編集の際に、「ThroughProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【００５０】
部品記憶部１５は、画像処理モジュールのユーザインタフェースの画面のテンプレートおよび運転画面のテンプレートに貼り付けることができる部品（ＡｃｔｉｖｅＸコントロール）を記憶する。また、部品記憶部１５は、イベント処理開発で利用する部品を記憶する。部品記憶部１５に記憶されている部品は、表示されている画面に含まれるメニューのうちのツールから選択できる。
【００５１】
図３は、部品記憶部１５に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【００５２】
図３を参照して、タブスイッチボタン(TabSwitchButton)およびタブコントロール(TabControl)は、全体のレイアウトのために用いられる。グループパネル(GroupPanel)は、グルーピングのために用いられる。ボタンには、イメージボタン(ImageButton)と、イメージリスト(Imagelist)がある。イメージリストは、同じ画像を使用するイメージボタンを複数個使用する場合に用いられる。ラベルには、背景透過ラベル(LabelEx)がある。アイテムを選択するために、チェックボックス(CheckBox)、ラジオボタン(RadioButton)、およびコンボボックス(ComboBox)がある。チェックボックスは、１つのアイテムを選択するか否かを指定するために用いられ、ラジオボタンは、３個以下のアイテムの選択のために用いられ、コンボボックスは、５個以上のアイテムの選択のために用いられる。数値を入力するために、数値ボックス(NumericBox)と、上下限設定ボックス(LimitBox)と、スライダーセット(SliderSet)と、値設定コントロール(ValueSetControl)と、点設定コントロール(PointSetControl)とが用いられる。数値ボックスは、通常の数値入力のために用いられ、上下限設定ボックスは、上下限値を設定するために用いられ、スライダーセットおよび値設定コントロールは、入力する数値を連続的に変更する場合に用いられ、点設定コントロールは、座標値を設定する場合に用いられる。ソフトキーボード２１(SoftKeyboard)は、文字を入力するために用いられる。ファイル選択のために、ファイルダイアログ(FileDialog)と、フォルダブラウザ(FolderBloser)が用いられる。図形設定のために、図形設定コントロール(FigureSetControl)が用いられる。画像の表示のために、イメージウインドウ(SetupImageWindow)と、ズームブラウザ(ZoomBlowser)が用いられる。イメージウインドウは、設定画面の画像を表示するために用いられ、ズームブラウザは、イメージパネルのズーム設定用に用いられる。演算式の設定のために、演算式リスト(CalculationList)が用いられる。基準位置の設定のために、基準座標設定コントロール(StandardSetControl)が用いられる。色の抽出のために、色抽出設定コントロール(ColorExtractControl)が用いられる。色の指定のために、色指定設定コントロール(ColorSetControl)が用いられる。座標モードの設定のために、座標モード設定コントロール(CoordinateSetControl)が用いられる。２次元の折れ線グラフを表示するために、グラフ表示コントロール(GraphLineControl)が用いられる。
【００５３】
また、図示しないが、その他に、カスタムコントロールのベースとなるコントロールベース(controlBase）、(CalculationBox)、処理ユニットのリストを表示するユニットリスト(UnitList)、グレイ抽出設定用のコントロール(GrayExtractControl)、詳細結果表示のテキストを表示するテキストパネル(TextPanel)、イメージパネルと組合わせてグラフの表示を行なうドローグラフ(DrawGraph)、数値入力ボックスとカーソルボタンを組み合わせた複合コントロールであるスタンダードセット(StandardSet)、背景イメージを指定できるイメージパネル(ImagePanel)、ユニットリストで使用する処理項目アイテム(UnitListItem)などが用いられる。
【００５４】
図４は、部品記憶部１５に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【００５５】
図４を参照して、「ErrorProc」は、エラー処理用のコントロールである。「MeasureDisp」は、計測結果表示処理用のコントロールである。「MeasureInit」は、計測初期化処理用のコントロールである。「MeasureOut」は、計測結果出力処理用のコントロールである。「MeasureProc」は、計測処理用のコントロールである。「ParallelCommand」パラレルコマンド入力処理用のコントロールである。「SceneChange」は、シーン切替え処理用のコントロールである。「SerialCommand」は、シリアル無手順コマンド入力処理用のコントロールである。
【００５６】
ＯＳ類記憶部２２は、ＷｉｎｄｏｗｓＸＰ（登録商標）およびＶｉｓｕａｌＳｔｕｄｉｏを記憶する。
【００５７】
ライブラリ類記憶部２３は、ライブラリおよびドライバを記憶する。
シミュレーションソフト記憶部１７は、図１の画像処理機能のカスタマイズ装置１で実行可能な実行形式のプログラムを起動するためのシミュレーションソフトを記憶する。
【００５８】
マニュアル類記憶部１８は、マニュアル、チュートリアル、ヘルプおよびサンプルを記憶する。
【００５９】
実行プログラム記憶部１９は、出荷時に予め組み込まれている画像処理モジュールの実行形式のプログラム、およびビルド実行部１３で作成された実行形式のプログラムを記憶する。
【００６０】
カスタマイズプログラム、部品、テンプレート、ＯＳ類、ライブラリ類、シミュレーションソフト、およびマニュアル類は、外部からリムーバブルメディア６を用いてハードディスク５にインストールすることができる。
【００６１】
ＣＰＵおよびメモリ４は、ＯＳ類記憶部２２からＷｉｎｄｏｗｓＸＰおよびＶｉｓｕａｌＳｔｕｄｉｏ（登録商標）を読出し、さらにカスタマイズプログラム記憶部１４からカスタマイズプログラムを読み出して、これらを実行することによって、実行制御部８と、基本フロー開発部９と、画像処理モジュール開発部１０と、運転画面開発部１１と、イベント処理開発部１２と、ビルド実行部１３として機能する。
【００６２】
実行制御部８は、この画像処理機能のカスタマイズ装置１の全体の動作を制御する。
基本フロー開発部９は、操作入力部７を通じたユーザの操作に従って、画像処理モジュール記憶部２９１に記憶されている複数個の画像処理モジュールの実行順序を決定して、決定した実行順序と、そのパラメータからなる基本フローを基本フロー記憶部２９４に記憶する。
【００６３】
画像処理モジュール開発部１０は、テンプレート記憶部１６に記憶されている画像処理モジュールのテンプレートを読み出して表示し、操作入力部７を通じたＳＩの操作に従って、画像処理モジュールのテンプレートを編集して、編集後の画像処理モジュールを画像処理モジュール記憶部２９１に記憶する。
【００６４】
運転画面開発部１１は、テンプレート記憶部１６に記憶されている運転画面のテンプレートを読み出して表示し、操作入力部７を通じたＳＩの操作に従って、運転画面のテンプレートに部品記憶部１５に記憶されている部品を貼り付けて運転画面のテンプレートを編集して、編集後の運転画面を運転画面記憶部２９３に記憶する。
【００６５】
イベント処理開発部１２は、操作入力部７を通じたＳＩの操作に従って、イベントモジュールを作成して、イベント処理モジュール記憶部２９２に記憶する。
【００６６】
ビルド実行部１３は、ソースコードをコンパイルしてオブジェクトコードを生成し、さらにオブジェクトコードとライブラリ類記憶部２３内のライブラリおよびドライバとをリンクすることによって、実行形式のプログラムを作成して実行プログラム記憶部１９に記憶する。ビルド実行部１３は、画像処理検査装置が動作するＯＳであるＷｉｎｄｏｗｓＣＥ（登録商標）用の実行形式のプログラムと、図１の画像処理機能のカスタマイズ装置１が動作するＯＳであるＷｉｎｄｏｗｓＸＰ用の実行形式のプログラムの両方を作成する。ＷｉｎｄｏｗｓＣＥ用の実行形式のプログラムは、リムーバブルメディア６などを用いて、画像処理検査装置にインストールされる。ＷｉｎｄｏｗｓＸＰ用の実行形式のプログラムは、図１の装置で、画像処理検査装置におる画像処理をエミュレート（シミュレーション）するために用いられる。
【００６７】
ＣＰＵおよびメモリ４から出力される画面データは、ディスプレイ２に送られて表示される。
【００６８】
（全体の処理手順）
図５は、画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。図６は、画像処理機能のカスタマイズ装置１が起動後、最初に実行制御部８によって表示される画面の例を表わす図である。
【００６９】
図６の画面では、矢印の向きによって、画像処理機能のカスタマイズの手順として、基本フロー開発、処理項目開発、運転画面開発、イベント処理開発の順番で処理を行なうことを推奨することをガイドしているが、これ以外の順番で処理を行なうことも可能である。
【００７０】
図５および図６を参照して、ＳＩが、マウス２０を操作してボタン５１を選択したときには（ステップＳ１０１でＹＥＳ）、実行制御部８は、基本フロー開発部９に基本フロー開発の処理を指示し、図７に示す画面を表示する（ステップＳ１０２）。
【００７１】
ＳＩが、マウス２０を操作してボタン５２を選択したときには（ステップＳ１０３でＹＥＳ）、実行制御部８は、画像処理モジュール開発部１０に画像処理モジュールの開発の処理を指示し、図８に示す画面を表示する（ステップＳ１０４）。
【００７２】
ＳＩが、マウス２０を操作してボタン５３を選択したときには（ステップＳ１０５でＹＥＳ）、実行制御部８は、運転画面開発部１１に運転画面開発の処理を指示し、図９に示す画面を表示する（ステップＳ１０６）。
【００７３】
ＳＩが、マウス２０を操作してボタン５４を選択したときには（ステップＳ１０７でＹＥＳ）、実行制御部８は、イベント処理開発部１２にイベント処理開発の処理を指示する（ステップＳ１０８）。
【００７４】
ＳＩが、マウス２０を操作して、ボタン５５を選択したときには（ステップＳ１０９でＹＥＳ）、実行制御部８は、マニュアル類記憶部１８からリファレンスを読み出して表示する（ステップＳ１１０）。
【００７５】
ＳＩが、マウス２０を操作して、ボタン５６を選択したときは（ステップＳ１１１でＹＥＳ）、実行制御部８は、マニュアル類記憶部１８からサンプルを読み出して表示する（ステップＳ１１２）。
【００７６】
ＳＩが、マウス２０を操作してボタン５７を選択したときには（ステップＳ１１３でＹＥＳ）、実行制御部８は、マニュアル類記憶部１８から「Application Producer」とは何かを説明したマニュアル１章を読み出して表示する（ステップＳ１１４）。
【００７７】
ＳＩが、マウス２０を操作してボタン５８を選択したときには（ステップＳ１１５でＹＥＳ）、実行制御部８は、マニュアル類記憶部１８から「Application Producer」の使い方を説明したマニュアル１−２章を読み出して表示する（ステップＳ１１６）。
【００７８】
ＳＩが、マウス２０を操作してボタン５９を選択したときには（ステップＳ１１７でＹＥＳ）、実行制御部８は、マニュアル類記憶部１８から「Application Produce」のマニュアルを読み出して表示する（ステップＳ１１８）。
【００７９】
（基本フロー開発）
図１０は、基本フロー開発の処理手順を表わすフローチャートである。
【００８０】
図１０を参照して、ＳＩが、マウス２０を操作してボタン６０を選択したときには（ステップＳ２０１でＹＥＳ）、実行制御部８は、シミュレーションソフト記憶部１７からシミュレーションソフトを読み出して起動する（ステップＳ２０２）。
【００８１】
ＳＩが、マウス２０を操作してボタン６１を選択したときには（ステップＳ２０３でＹＥＳ）、基本フロー開発部９は、マニュアル類記憶部１８からマニュアル３−１章を読み出して表示する（ステップＳ２０４）。
【００８２】
ＳＩが、マウス２０を操作してボタン６２を選択したときには（ステップＳ２０５でＹＥＳ）、基本フロー開発部９は、マニュアル類記憶部１８からチュートリアルを読み出して表示する（ステップＳ２０６）。
【００８３】
ＳＩが、マウス２０を操作してボタン６３を選択したときには（ステップＳ２０７）、基本フロー開発部９は、マニュアル類記憶部１８からサンプルフローを読み出して表示する（ステップＳ２０８）。
【００８４】
ＳＩが、マウス２０を操作してボタン６４を選択したときには（ステップＳ２０９）、基本フロー開発部９は、基本フローの作成処理を選択して、図１１に示す画面を表示する（ステップＳ２１０）。
【００８５】
ＳＩが、マウス２０を操作して、図示しない「戻る」ボタンを選択したときには（ステップＳ２１１でＹＥＳ）、基本フロー開発部９は、基本フローの作成処理を終了する。
【００８６】
図１２は、基本フローの作成処理の手順を表わすフローチャートである。
図１２を参照して、ＳＩが、マウス２０を操作してリスト欄８３の一つの項目を選択すると（ステップＳ３０１でＹＥＳ）、基本フロー開発部９は、リスト欄８３の中の１つの画像処理モジュールを選択する（ステップＳ３０２）。
【００８７】
ＳＩが、マウス２０を操作して追加ボタン８４を選択すると（ステップＳ３０３でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の最下部にリスト欄８３で選択されている画像処理モジュールを追加する（ステップＳ３０４）。
【００８８】
ＳＩが、マウス２０を操作して挿入ボタン８５を選択すると（ステップＳ３０５でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択されている画像処理モジュールの直下にリスト欄８３で選択されている画像処理モジュールを挿入する（ステップＳ３０６）。
【００８９】
ＳＩが、マウス２０を操作して設定ボタン８６を選択すると（ステップＳ３０７でＹＥＳ）、画像処理モジュール開発部１０は、基本フローの中の選択されている画像処理モジュールのパラメータなどを設定するためのＵＩプログラムを画像処理モジュール記憶部２９１から読み出して表示する。ＳＩが、表示されている画面に含まれるメニューのうちのツールから部品を選択し、部品記憶部１５から選択された部品を読み出して配置することによって、ユーザインタフェース画面を編集し、図示しない保存メニューを選択して、編集後のＵＩプログラムを画像処理モジュール記憶部２９１に記憶する（ステップＳ３０８）。
【００９０】
ＳＩが、マウス２０を操作してコピーボタン９０を選択すると（ステップＳ３０９でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択されている画像処理モジュールをコピーする（ステップＳ３１０）。
【００９１】
ＳＩが、マウス２０を操作してペーストボタン９１を選択すると（ステップＳ３１１でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択されている画像処理モジュールの直下に、コピーボタン９０によってコピーした画像処理モジュールを挿入する（ステップＳ３１２）。
【００９２】
ＳＩが、マウス２０を操作して削除ボタン９２を選択すると（ステップＳ３１３でＹＥＳ、基本フロー開発部９は、基本フロー欄９５の中の選択されている画像処理モジュールを削除する（ステップＳ３１４）。
【００９３】
ＳＩが、マウス２０を操作して移動（上へ）ボタン８８を選択すると（ステップＳ３１５でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択される画像処理モジュールを１つ上に移動する（ステップＳ３１６）。
【００９４】
ＳＩが、マウス２０を操作して移動（下へ）ボタン８９を選択すると（ステップＳ３１７でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択される画像処理モジュールを１つ下に移動する（ステップＳ３１８）。
【００９５】
ＳＩが、マウス２０を操作して名前の変更ボタン８７を選択すると（ステップＳ３１９でＹＥＳ）、基本フロー開発部９は、基本フロー欄９５の中の選択されている画像処理モジュールの名前の変更を可能とする。ＳＩが、キーボード２１を操作して画像処理モジュールの名前を変更する（ステップＳ３２０）。
【００９６】
ＳＩが、マウス２０を操作してヘルプ９６を選択すると（ステップＳ３２１でＹＥＳ）、基本フロー開発部９は、マニュアル類記憶部１８からヘルプを読み出して表示するる（ステップＳ３２２）。
【００９７】
ＳＩが、マウス２０を操作して閉じる９７を選択すると（ステップＳ３２３でＹＥＳ）、基本フロー開発部９は、基本フローが作成されている場合に、作成された基本フローを基本フロー記憶部２９４に記憶し、その処理を終了する。
【００９８】
図１３は、基本フローの作成後の画面の例を表わす図である。
図１３を参照して、基本フローは、３つの画像処理モジュール９８、９９、４０からなる。この基本フローでは、まずカメラ画像を入力し、次に入力した画像の面積重心を計算して、その後処理ユニットデータを設定することを定めた基本フローが作成されている。
【００９９】
（画像処理モジュール開発）
図１４は、画像処理モジュール開発の処理手順を表わすフローチャートである。
【０１００】
図１４を参照して、ＳＩが、マウス２０を操作してボタン６５を選択したときには（ステップＳ４０１でＹＥＳ）、画像処理モジュール開発部１０は、ＭＳプログラムの編集処理を選択し、ＭＳプログラムのテンプレート４１をテンプレート記憶部１６から読み出して、図１５に示すようにエディタ上に表示する。ＳＩが、キーボートから文字を入力、削除することによって、ＭＳプログラムのテンプレート４１を編集して、図示しない保存メニューを選択して、編集後のＭＳプログラムを画像処理モジュール記憶部２９１に記憶する（ステップＳ４０２）。
【０１０１】
ＳＩが、マウス２０を操作してボタン６６を選択したときには（ステップＳ４０３でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８からＭＳプログラムの編集を説明したマニュアル３−２−５章を読み出して表示する（ステップＳ４０４）。
【０１０２】
ＳＩが、マウス２０を操作してボタン６７を選択したときには（ステップＳ４０５でＹＥＳ）、画像処理モジュール開発部１０は、ＵＩプログラムの編集処理を選択して、ＵＩプログラムのテンプレートをテンプレート記憶部１６から読み出して図１６に示すようなユーザインタフェース画面のテンプレート４６１を表示する。ＳＩが、表示されている画面に含まれるメニューのうちのツール４６２から部品を選択し、部品記憶部１５から選択された部品を読み出して配置することによって、図１６のユーザインタフェース画面のテンプレート４６１を編集し、図示しない保存メニューを選択して、編集後のＵＩプログラムを画像処理モジュール記憶部２９１に記憶する（ステップＳ４０６）。
【０１０３】
ＳＩが、マウス２０を操作してボタン６８を選択したときには（ステップＳ４０７でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８からＵＩプログラムの編集を説明したマニュアル３−２−６章を読み出して表示する（ステップＳ４０８）。
【０１０４】
ＳＩが、マウス２０を操作してボタン６９を選択したときには（ステップＳ４０９でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８からユーザインタフェース画面のサンプルを読み出して表示する（ステップＳ４１０）。
【０１０５】
ＳＩが、マウス２０を操作してボタン７０を選択したときには（ステップＳ４１１でＹＥＳ）、実行制御部８は、シミュレーションソフト記憶部１７からシミュレーションソフトを読み出して起動する（ステップＳ４１２）。
【０１０６】
ＳＩが、マウス２０を操作してボタン７１を選択したときには（ステップＳ４１３でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８から画像処理モジュール開発のチュートリアルを読み出して表示する（ステップＳ４１４）。
【０１０７】
ＳＩが、マウス２０を操作してボタン７２を選択したときには（ステップＳ４１５でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８から画像処理モジュール開発を説明したマニュアル３−２章を読み出して表示する（ステップＳ４１６）。
【０１０８】
ＳＩが、マウス２０を操作してボタン７３を選択したときには（ステップＳ４１７でＹＥＳ）、画像処理モジュール開発部１０は、マニュアル類記憶部１８から画像処理モジュール開発のためのリファレンスを読み出して表示する（ステップＳ４１８）。
【０１０９】
ＳＩが、マウス２０を操作して図示しないビルドメニューを選択したときには（ステップＳ４１９でＹＥＳ）、ビルド実行部１３は、画像処理モジュール記憶部２９１に記憶されているステップＳ４０２で作成されたＭＳのソースコードおよびステップＳ４０６で作成されたＵＩのソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部２３から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、ＷｉｎｄｏｗｓＣＥとＷｉｎｄｏｗｓＸＰ用のＭＳの実行形式のプログラムおよびＵＩの実行形式のプログラムを作成して実行プログラム記憶部１９に記憶する（ステップＳ４２０）。
【０１１０】
ＳＩが、マウス２０を操作して図示しない「戻る」ボタンを選択したときには（ステップＳ４２１でＹＥＳ）、画像処理モジュール開発部１０は、処理を終了する。
【０１１１】
次に、テンプレートがＳＩの編集によってどのように変更されるかの例を説明する。ここでは、テンプレートを編集して、他の画像処理モジュールのパラメータ設定を一括して行なうための画像処理モジュールを作成する場合について説明する。この画像処理モジュールは、座標の変更や上下限値の変更などのように、複数の数値を変更する場合に用いられる。
【０１１２】
図１７および図１８は、「ItemDefs.h」のテンプレートを表わす図である。
図１９および図２０は、編集後の「ItemDefs.h」を表わす図である。
【０１１３】
図１７〜図２０を参照して、ＳＩの編集によって、テンプレートの定義文１９０が、定義文１９１に変更され、定義文１９２、１９３、１９４が追加されている。
【０１１４】
図１７〜図２０を参照して、「ItemDefs.h」の内容を説明する。SETUPDATA構造体には、処理を実行する際に必要になるパラメータなどの設定データの構造が定義される。MEASUREDATA構造体には、処理（計測）を実行した際の結果のデータの構造が定義される。ItemDef.h中で定義した SETUPDATA構造体に含まれるデータの初期値については、AssignProc.cpp中に記述される。
【０１１５】
図２１は、「AssignProc.cpp」のテンプレートを表わす図である。
図２２および図２３は、編集後の「AssignProc.cpp」を表わす図である。
【０１１６】
図２１〜図２３を参照して、ＳＩの編集によって、日付１５１が記入され、作成者１５２が記入され、関数AssignProcの中身の命令１５３が追加されている。
【０１１７】
図２１〜図２３を参照して、「AssignProc.cpp」の内容を説明する。本ファイル内では以下の関数の処理を定義し、画像処理モジュールが登録される際のチェック処理などを記述する。
【０１１８】
int クラス名::AssignProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。NORMAL以外の値を返した場合は処理ユニット登録不可ということで、処理ユニットの登録が行われない。
【０１１９】
NORMAL（０）：処理ユニット登録可能
!NORMAL（０以外）：処理ユニット登録不可
設定データの初期化は、このメソッドに記述し、図形データの初期化(SetFigureType()）は、このメソッドに記述する。本関数を用いることで、処理ユニットの登録順序などに制約がある場合のチェックを行なうことができる。
【０１２０】
図２４および図２５は、「FigureUpdate.cpp」のテンプレートを表わす図である。
本発明の実施形態では、ＳＩが、テンプレートを編集しなかったため、「FigureUpdate.cpp」は、変更されていない。
【０１２１】
図２４および図２５を参照して、「FigureUpdate.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、図形データが更新されたときの処理を記述する。
【０１２２】
int クラス名::FigureUpdate(*ptrProcUnit, figureNo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int figureNo; 図形データ番号
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１２３】
NORMAL（０）：図形データ更新処理に成功
!NORMAL（０以外）：図形データ更新処理に失敗
モデルの登録処理は本メソッドに記述する。
【０１２４】
図２６および図２７は、「ItemInit.cpp」のテンプレートを表わす図である。
図２８および図２９は、編集後の「ItemInit.cpp」を表わす図である。
【０１２５】
図２６〜図２９を参照して、ＳＩの編集によって、日付１５４が記入され、作成者１５５が記入されている。さらに、ＳＩの編集によって、テンプレートの"Sample"６５８、ITEM_MEASURE６５９、一般計測関連６６０、０（６６１）、"サンプル"６６２が、"SetUnitData4"１５８、ITEM_SUPPORT１５９、計測補助関連１６０、４（１６１）、"処理ユニットデータ設定"１６２に変更されている。
【０１２６】
図２６〜図２９を参照して、「ItemInit.cpp」の内容を説明する。コンストラクタ・デストラクタおよび本クラスのインスタンスを生成する関数、本クラスのインスタンスを削除する関数を記述する。なお、本クラスのインスタンスを生成する関数および本クラスのインスタンスを削除する関数は、DLLのエクスポート関数にする。コンストラクタには画像処理モジュールをシステム（CORERA）に認識させるための情報を記述する。具体的には下記のメソッドに値を設定します。
【０１２７】
this->itemIdent = _T("Sample"); (A) 画像処理モジュール識別名
this->maker = _T("OMRON AST3"); (B) 画像処理モジュール製作者名
this->version = 100; (C) バージョン番号（×100）
this->itemKind = ITEM_MEASURE; (D) 画像処理モジュール種別（＝一般計測関連）
this->setupDataSize = sizeof(SETUPDATA); (E)設定データ構造体サイズ
this->measureDataSize = sizeof(MEASUREDATA); (F) 計測データ構造体サイズ
this->modelDataCount = 0; (G) モデルデータ最大個数
this->imageDataCount = 0; (H) 画像データ最大個数
this->innerUnitCount = 0;(I) 内包処理ユニット最大個数
this->figureDataCount = 0;(J) 図形データ最大個数
this->title = _T("サンプル"); (K) 画像処理モジュールタイトル名
デストラクタには、本クラスのインスタンスが消滅するときに実行する処理を記述する。本関数では、本クラスのインスタンスを生成し戻り値として返す処理を記述する。本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１２８】
ProcItem：インスタンスのポインタ：インスタンス生成成功時
NULL：インスタンス生成失敗時
図３０および図３１は、「MeasureDisp.cpp」のテンプレートを表わす図である。
【０１２９】
図３２〜図３４は、編集後の「MeasureDisp.cpp」を表わす図である。
図３０および図３１および図３２〜図３４を参照して、ＳＩの編集によって、日付１６３および日付１６４が記入され、作成者１６５および作成者１６６が記入され、関数MeasureDispTの中身の命令１６７が追加されている。
【０１３０】
本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を表示する際の表示処理を記述する。
【０１３１】
int クラス名::MeasureDispI(*ptrProcUnit, subNo, *ptrImageWindow);
void クラス名::MeasureDispG(*ptrProcUnit, subNo, *ptrImageWindow);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int subNo; 表示種別の番号
ImageWindow *ptrImageWindow; 画像表示エリア情報へのポインタ
void クラス名::MeasureDispT(*ptrProcUnit, subNo, *ptrTextWindow);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int subNo; 表示種別の番号
TextWindow *ptrTextWindow; 詳細結果表示エリア情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１３２】
NORMAL（０）：計測結果出力処理正常終了
!NORMAL（０以外）：計測結果出力処理異常終了
３つの関数は、以下の記述に対応する。
【０１３３】
MeasureDispI()：画像表示
MeasureDispG()：画像表示エリアへのグラフィック表示
MeasureDispT()：詳細結果表示エリアへの文字表示
引数subNoが-1の場合は、全画像処理モジュール共通で位置一覧表示モード時の表示となる。サーチ系の画像処理モジュールの場合は、モデル領域のみ表示する。処理ユニットの判定結果が”判定なし”の場合（MEASDATA 構造体中のjudge=J_NCの場合）、処理ユニットのMeasureDisp*()はコールされない。
【０１３４】
図３５および図３６は、「MeasureInit.cpp」のテンプレートを表わす図である。
本発明の実施形態では、ＳＩが、テンプレートを編集しなかったため、「MeasureInit.cpp」が変更されていない。
【０１３５】
図３５および図３６を参照して、「MeasureInit.cpp」の内容を説明する。本ファイル内では、以下の関数の処理を定義し、計測画面に入る時点で実行すべき初期化処理および計測終了時に実行すべき処理を記述する。
【０１３６】
int クラス名::MeasureInit(*ptrProcUnit);
int クラス名::MeasureEnd(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１３７】
NORMAL（０）：計測初期化処理正常終了
!NORMAL（０以外）：計測初期化処理異常終了
NORMAL以外の値を返した場合は画面にエラーメッセージが表示され、当該シーン内の全処理ユニットの非セーブＲＯＩモデルがクリアされる。また、NORMAL以外の値を返して画面にエラーメッセージが表示された場合も、メッセージボックスを終了するとそのまま計測が実行可能な状態になる。
【０１３８】
図３７は、「MeasureOut.cpp」のテンプレートを表わす図である。
本発明の実施形態では、ＳＩが、テンプレートを編集しなかったため、「MeasureOut.cpp」が変更されていない。
【０１３９】
図３７を参照して、「MeasureOut.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を出力する際の結果出力処理を記述する。
【０１４０】
int クラス名::MeasureOut(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１４１】
NORMAL（０）：計測結果出力処理正常終了
!NORMAL（０以外）：計測結果出力処理異常終了
図３８は、「MeasureProc.cpp」のテンプレートを表わす図である。
【０１４２】
図３９〜図４１は、編集後の「MeasureProc.cpp」を表わす図である。
図３８および図３９〜図４１を参照して、ＳＩの編集によって、日付１６８が記入され、作成者１６９が記入され、関数MeasureProcの中身の命令１７０が追加されている。
【０１４３】
図３８および図３９〜図４１を参照して、「MeasureProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、計測時に実行する画像処理などの処理を記述する。
【０１４４】
int クラス名::MeasureProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１４５】
NORMAL（０）：計測処理正常終了
!NORMAL（０以外）：計測処理異常終了
図４２および図４３は、「RenumProc.cpp」のテンプレートを表わす図である。
【０１４６】
図４４および図４５は、編集後の「RenumProc.cpp」を表わす図である。
図４２〜図４５を参照して、ＳＩの編集によって、日付１７１が記入され、作成者１７２が記入され、関数RenumProcの中身の命令１７３が追加されている。
【０１４７】
図４２〜図４５を参照して、「RenumProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、ユニット追加・削除・移動時の処理を記述する。
【０１４８】
int クラス名::RenumProc(*ptrProcUnit, *ptrRenumInfo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
RenumInfo *ptrRenumInfo;フロー編集情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１４９】
NORMAL（０）：ユニット追加・削除・移動時処理正常終了
!NORMAL（０以外）：ユニット追加・削除・移動時処理異常終了
図４６〜図４８は、「UnitData.cpp」のテンプレートを表わす図である。
【０１５０】
図４９〜図５７は、編集後の「UnitData.cpp」を表わす図である。
図４６〜図４８および図４９〜図５７を参照して、ＳＩの編集によって、マクロ定義に関する定義文１７４が追加され、静的変数に関する定義文１７５が追加され、関数参照に関する定義文１７６が追加されている。関数SetUnitData(ptrProcUnit, dataNo, data)に関して、日付１７７が記入され、作成者１７８が記入され、中身の命令１７９が追加されている。関数SetUnitData(ptrProcUnit, dataIdent, data)に関して、日付１８０が記入され、作成者１８１が記入され、中身の命令１８２が追加されている。関数GetUnitData(ptrProcUnit, dataNo, data)に関して、日付１８３が記入され、作成者１８４が記入され、中身の命令１８５が追加されている。関数GetUnitData(ptrProcUnit, dataIdent, data)に関して、日付１８６が記入され、作成者１８７が記入され、中身の命令１８８が追加されている。さらに、関数setDataProcおよび関数getDataProcが追加されている。
【０１５１】
図４６〜図４８および図４９〜図５７を参照して、「UnitData.cpp」の内容を説明する。
【０１５２】
本ファイル内では以下のメソッドを記述し、データ設定時およびデータ取得時の処理を記述する。
【０１５３】
int クラス名::SetUnitData(*ptrProcUnit, dataNo, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int datano; 設定するデータのデータ番号
ANYTYPE *data; 設定するデータ
int クラス名::SetUnitData(*ptrProcUnit, dataIdent, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
TCHAR *dataIdent; 設定するデータの識別文字列へのポインタ
ANYTYPE *data; 設定するデータ
int クラス名::GetUnitData(*ptrProcUnit, dataNo, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int datano; 取得するデータのデータ番号
ANYTYPE *data; 取得するデータ
int クラス名::GetUnitData(*ptrProcUnit, dataIdent, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
TCHAR *dataIdent; 取得するデータの識別文字列へのポインタ
ANYTYPE *data; 取得するデータ
ANYTYPE データタイプ構造体定義
typedef struct {
int type;
int ival;
double dval;
TCHAR *string;
struct {
void *addr;
int size;
} variant;
} ANYTYPE;
上記のtypeには以下のようにどういう型のデータを渡すかというデータ種別（を示すコード）が入れるものとする。
【０１５４】
T_INTEGER：整数
T_DOUBLE ：実数
T_STRING ：文字列
T_VARIANT：可変長データ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【０１５５】
NORMAL（０）：データ設定・データ設定成功
!NORMAL（０以外）：データ取得・データ取得成功
図５８および図５９は、ユーザインタフェース画面のテンプレートを表わす図である。
【０１５６】
図６０は、編集後のユーザインタフェース画面を表わす図である。
図５８、図５９および図６０を参照して、ＳＩの編集操作によって、タブ「メニュー１」２５１が「色指定」２５６に変更され、タブ「メニュー２」２５２が「領域指定」２６７に変更されている。さらに、タブ「基準位置」２６８、タブ「計測パラメータ」２６９、およびタブ「出力パラメータ」２７０が追加されている。また、タブ「色指定」２６６の画面には、部品２７１および部品２７２が追加されている。
【０１５７】
（運転画面開発）
図６１は、運転画面開発の処理手順を表わすフローチャートである。
【０１５８】
図６１を参照して、ＳＩが、マウス２０を操作してボタン７４を選択したときには（ステップＳ５０１でＹＥＳ）、運転画面開発部１１は、運転画面の作成処理を行なう（ステップＳ５０２）。
【０１５９】
ＳＩが、マウス２０を操作してボタン７５を選択したときには（ステップＳ５０３でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８からマニュアル３−３−３章を読み出して表示する（ステップＳ５０４）。
【０１６０】
ＳＩが、マウス２０を操作してボタン７６を選択したときには（ステップＳ５０５でＹＥＳ）、運転画面開発部１１は、運転画面の編集処理を選択して、テンプレート記憶部１６から運転画面のテンプレートを読み出して、図６２に示すような画面を表示する。ＳＩが、表示されている画面に含まれるメニューのうちのツール４６２から部品を選択し、部品記憶部１５から選択された部品を読み出して配置することによって、図６２の運転画面のテンプレート４５１を編集して、図示しない保存メニューを選択して、編集後の運転画面を運転画面記憶部２９３に記憶する（ステップＳ５０６）。
【０１６１】
ＳＩが、マウス２０を操作してボタン７７を選択したときには（ステップＳ５０７でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８から運転画面の編集を説明したマニュアル３−３−２章を読み出して表示する（ステップＳ５０８）。
【０１６２】
ＳＩが、マウス２０を操作してボタン７８を選択したときには（ステップＳ５０９でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８から運転画面のサンプルを読み出して表示する（ステップＳ５１０）。
【０１６３】
ＳＩが、マウス２０を操作してボタン７９を選択したときには（ステップＳ５１１でＹＥＳ）、実行制御部８は、シミュレーションソフト記憶部１７からシミュレーションソフトを読み出して起動する（ステップＳ５１２）。
【０１６４】
ＳＩが、マウス２０を操作してボタン８０を選択したときには（ステップＳ５１３でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８から運転画面開発のチュートリアルを読み出して表示する（ステップＳ５１４）。
【０１６５】
ＳＩが、マウス２０を操作してボタン８１を選択したときには（ステップＳ５１５でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８から運転画面開発を説明したマニュアル３−３章を読み出して表示する（ステップＳ５１６）。
【０１６６】
ＳＩが、マウス２０を操作してボタン８２を選択したときには（ステップＳ５１７でＹＥＳ）、運転画面開発部１１は、マニュアル類記憶部１８から運転画面開発のためのリファレンスを読み出して表示する（ステップＳ５１８）。
【０１６７】
ＳＩが、マウス２０を操作して図示しないビルドメニューを選択したときには（ステップＳ５１９でＹＥＳ）、ビルド実行部１３は、運転画面記憶部２９３に記憶されているステップＳ５０２またはＳ５０６で作成された運転画面のソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部２３から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、ＷｉｎｄｏｗｓＣＥとＷｉｎｄｏｗｓＸＰ用の運転画面の実行形式のプログラムを作成して実行プログラム記憶部１９に記憶する（ステップＳ５２０）。
【０１６８】
ＳＩが、マウス２０を操作して図示しない「戻る」ボタンを選択したときには（ステップＳ５２１でＹＥＳ）、運転画面開発部１１は、処理を終了する。
【０１６９】
図６３は、運転画面の別のテンプレートを表わす図である。
図６４は、編集後の運転画面を表わす図である。
【０１７０】
図６３および図６４を参照して、ＳＩの編集操作によって、運転画面に部品３５２、３５３、３５４、３５５、３５６が追加されている。
【０１７１】
（イベント処理開発）
図６５は、イベント処理開発の手順を表わすフローチャートである。
【０１７２】
図６５を参照して、ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールから計測初期化処理用のMeasureInitコントロールを選択したときには（ステップＳ６０１でＹＥＳ）、ＳＩが、キーボード２１を操作して、MeasureInitコントロールのuserFormプロパティ（coreRAからのイベントを受け取るFormオブジェクト）を設定し（ステップＳ６０２）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化初期化処理時に実行する処理を記述する（ステップＳ６０３）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつ計測初期化処理が実行されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６０４）。
【０１７３】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールから計測処理用のMeasureProcコントロールを選択したときには（ステップＳ６０５でＹＥＳ）、ＳＩが、キーボード２１を操作して、MeasureProcコントロールのuserFormプロパティおよびProcNoプロパティ（「ユーザ処理」画像処理モジュールの設定項目として設定した番号）を設定し（ステップＳ６０６）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化処理時に実行する処理を記述する（ステップＳ６０７）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつ計測処理が実行されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６０８）。
【０１７４】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールから計測結果表示処理用のMeasureDispコントロールを選択したときには（ステップＳ６０９でＹＥＳ）、ＳＩが、キーボード２１を操作して、MeasureDispコントロールのuserFormプロパティを設定し（ステップＳ６１０）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果表示処理時に実行する処理を記述する（ステップＳ６１１）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつ計測結果表示処理が実行されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６１２）。
【０１７５】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールから計測結果出力処理用のMeasureOutコントロールを選択したときには（ステップＳ６１３でＹＥＳ）、ＳＩが、キーボード２１を操作して、MeasureOutコントロールのuserFormプロパティを設定し（ステップＳ６１４）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果出力時に実行する処理を記述する（ステップＳ６１５）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつ計測結果出力処理が実行されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６１６）。
【０１７６】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールからシーン切替え処理用のSceneChangeコントロールを選択したときには（ステップＳ６１７でＹＥＳ）、ＳＩが、キーボード２１を操作して、SceneChangeコントロールのuserFormプロパティを設定し（ステップＳ６１８）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラにシーン切替え処理時に実行する処理を記述する（ステップＳ６１９）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつシーン切替え処理が実行されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６２０）。
【０１７７】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールからシリアル無手順コマンド入力処理用のSerialCommandコントロールを選択したときには（ステップＳ６２１でＹＥＳ）、ＳＩが、キーボード２１を操作して、SerialCommandコントロールのuserFormプロパティおよびCommandプロパティ（シリアル無手順コマンドの文字列のうち、イベントハンドラを実行させる文字列）を設定し（ステップＳ６２２）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラにシリアル無手順コマンド入力時に実行する処理を記述する（ステップＳ６２３）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつシリアル無手順コマンドが入力されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６２４）。
【０１７８】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールからパラレルコマンド入力処理用のParallelCommandコントロールを選択したときには（ステップＳ６２５でＹＥＳ）、ＳＩが、キーボード２１を操作して、ParallelCommandコントロールのuserFormプロパティ、bitMaskプロパティ（ＤＩ端子のビットマスク）およびbitCommandプロパティ（ＤＩ端子の入力ビットパターン）を設定し（ステップＳ６２６）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラにパラレルコマンド入力時に実行する処理を記述する（ステップＳ６２７）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつパラレルコマンドが入力されたタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６２８）。
【０１７９】
ＳＩが、マウス２０を操作して表示されている画面に含まれるメニューのうちのツールからエラー処理用のErrorProcコントロールを選択したときには（ステップＳ６２９でＹＥＳ）、ＳＩが、キーボード２１を操作して、ErrorProcコントロールのuserFormプロパティを設定し（ステップＳ６３０）、ＳＩが、さらに、マウス２０を操作してイベントハンドラを追加して、追加したイベントハンドラにエラー発生時に実行する処理を記述する（ステップＳ６３１）。これにより、イベント処理開発部１２は、上記設定されたプロパティを有し、かつエラーが発生したタイミングで上記記述された処理を行なうメソッド（イベント処理モジュール）をイベント処理モジュール記憶部２９２に記憶する（ステップＳ６３２）。
【０１８０】
ＳＩが、マウス２０を操作して図示しないビルドメニューを選択したときには（ステップＳ６３３でＹＥＳ）、ビルド実行部１３は、イベント処理モジュール記憶部２９２に記憶されているイベント処理モジュールをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部２３から必要なライブラリとドライバを読み出して、これらをオブジェクトコードとリンクすることによって、ＷｉｎｄｏｗｓＣＥとＷｉｎｄｏｗｓＸＰ用のイベント処理の実行形式のプログラムを作成して実行プログラム記憶部１９に記憶する（ステップＳ６３４）。
【０１８１】
ＳＩが、マウス２０を操作して図示しない「戻る」ボタンを選択したときには（ステップＳ６３５でＹＥＳ）、イベント処理開発部１２は、処理を終了する。
【０１８２】
以上のように、本発明の実施形態の画像処理機能のカスタマイズ装置によれば、基本フローの開発に加えて、テンプレートや部品を用いて、新たな画像処理モジュール、運転画面およびイベント処理モジュールが作成できるので、ＳＩが容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることができる。
【０１８３】
（参考）
以下、参考のため、本発明の実施形態で説明した設定データ・計測データ・画像データ・モデルデータ・図形データ・ワークエリアの取得方法を説明する。
【０１８４】
（ａ）設定データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetSetupData()」を使用して設定データ格納先のポインタを取得する。
【０１８５】
SETUPDATA *ProcUnit::GetSetupData(void);
戻り値：設定データのポインタ
図６６は、設定データの取得の例を示す図である。
【０１８６】
（ｂ）計測データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetMeasureData()」を使用して計測データ格納先のポインタを取得する。
【０１８７】
MEASUREDATA *ProcUnit::GetMeasureData(void);
戻り値：設定データのポインタ
なお、voidのポインタとして返ってくるので、キャストして使用する必要がある。
【０１８８】
図６７は、計測データの取得の例を示す図である。
（ｃ）モデルデータの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetModelData()」を使用してモデルデータ格納先のポインタを取得する。ただし、モデルデータの格納ポインタを取得するには、事前にモデルの登録処理が完了している必要がある。
【０１８９】
BYTE *ProcUnit::GetModelData(modelNo);
int modelNo; モデル管理番号
戻り値：モデルデータのポインタ
図６８は、モデルデータの取得の例を示す図である。
【０１９０】
（ｄ）モデルデータの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ModelDataAlloc()」を使用してモデルデータの登録を行ない、「ModelDataFree()」を使用してモデルデータの削除をする。
【０１９１】
モデル登録
int ProcUnit::ModelDataAlloc(modelNo, size);
int modelNo; 登録モデル管理番号
int size; 登録モデルサイズ
戻り値：エラーコード
NORMAL(0)：正常終了
ERROR(-1)：異常終了（モデルデータ登録成功）
モデル削除
int ProcUnit::ModelDataFree(modelNo);
int modelNo; 削除モデル管理番号
戻り値：エラーコード
NORMAL(0)：正常終了
ERROR(-1)：異常終了（モデルデータ削除失敗）
図６９は、モデルデータの登録および削除の例を示す図である。
【０１９２】
（ｅ）画像データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetImageData()」「GetMeasureImage()」を使用して画像データ格納先のポインタを取得する。自分自身が画像データ入力や画像データ作成をする場合は、「GetImageData()」を使用する。なお「GetImageData()」を使用する場合、「ImageDataAlloc()」メソッドを使用して画像データを格納する領域を確保しておく必要がある。
【０１９３】
IMAGE*ProcUnit::GetImageData(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値：画像データ構造体のポインタ
画像データ構造体は以下の通りである。
【０１９４】
typedef struct {
unsigned char imageRGB[640 * 480 * 3];    // 画像データ
int xsize;                                  // 画像サイズX
int ysize;                                  // 画像サイズY
} IMAGE;
図７０は、画像データの取得の例を示す図である。
【０１９５】
先行する処理ユニットが入力・変更した画像データを使う場合は「GetMeasureImage()」を使用する。なお「GetMeasureImage()」を使用する場合は、事前に「SetMeasureImage()」メソッドを使用して現在の処理対象画像を設定しておく必要がありる。
【０１９６】
IMAGE *ProcUnit::GetMeasureImage(measureImageNo);
int measureImageNo; 現在の処理対象画像の画像番号
戻り値：画像データ構造体のポインタ
図７１は、画像データの取得の別の例を示す図である。
【０１９７】
（ｆ）画像データの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ImageDataAlloc()」を使用して入力・作成した画像データを格納する領域を確保し、「ImageDataFree()」を使用して画像データの削除する。
【０１９８】
画像データ領域確保
int ProcUnit::ImageDataAlloc(imageNo, size);
int imageNo; 処理ユニット内での画像番号
int size; 画像データサイズ
戻り値：エラーコード
NORMAL(0)：正常終了
ERROR(-1)：異常終了（画像データ領域確保失敗）
画像データ削除
int ProcUnit::ImageDataFree(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値：エラーコード
NORMAL(0)：正常終了
ERROR(-1)：異常終了（画像データ削除失敗）
図７２は、画像データの登録の例を示す図である。
【０１９９】
（ｇ）現在の処理対象画像の登録
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「SetMeasureImage()」を使用して、現在の画像処理モジュール対象画像の登録を行なう。この登録をすることにより「GetMeasureImage()」が使用可能になる。
【０２００】
int ProcUnit::SetMeasureImage(measureImageNo, imageNo);
int measureImageNo; 現在の処理対象画像の画像番号
int imageNo; 登録する処理ユニット内の画像番号
戻り値：エラーコード
NORMAL(0)：正常終了
ERROR(-1)：異常終了（現在の処理対象画像登録失敗）
図７３は、現在の処理対象画像の登録の例を示す図である。
【０２０１】
（ｈ）図形データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetFiugreData()」を使用して図形データ格納先のポインタを取得する。
【０２０２】
FIG_HEADER *ProcUnit::GetFigureData(figureNo);
int figureNo; 
戻り値：図形データ格納先のポインタ
図７４は、図形データの取得の例を示す図である。
【０２０３】
（ｉ）ワーク領域の取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「TmpDataAlloc()」を使用して作業用の一時領域のポインタを取得する。なお「TmpDataAlloc()」で確保した領域は、不必要になった場合に「TmpDataFree()」メソッドを使用して必ず解放する必要がある。
【０２０４】
主に画像処理モジュールの計測処理で、作業用のデータを一時的に格納する必要がある場合にこれを用いてメモリ領域の確保を行なう。
【０２０５】
BYTE *ProcUnit::TmpDataAlloc(size);
int size; 確保するサイズ
戻り値：作業用一時領域のポインタ
void ProcUnit::TmpDataFree(Byte *address);
BYTE *address; 解放する領域のアドレス
図７５は、ワーク領域の取得の例を示す図である。
【０２０６】
（変形例）
本発明は、上記の実施の形態に限定されるものではなく、たとえば以下のような変形例を含む。
【０２０７】
（１）  コメント、関数名
本発明の実施形態では、ＭＳプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算（計測）部分のいずれに対応するかがファイル名によって識別可能とされているものとしたが、これに限定するものではない。ファイル内の関数の名前、またはファイル内のコメント文によって、どのファイルまたはファイル内のどの関数が、画像処理モジュールの表示部分、出力部分、および演算（計測）部分のいずれに対応するかが識別可能とされているものであってもよい。また、ＭＳプログラムが、１個のファイルで構成されていてもよい。
【０２０８】
（２）デバッグ、インストール機能
本発明の実施形態では、デバッグおよびインストールの機能を説明しなかったが、作成された実行形式のプログラムをデバッグする機能、または作成されたＷｉｎｄｏｗｓＣＥの実行形式のプログラムをハードディスクから読み出して、リムーバブルメディアに送るインストール機能を持たせてもよい。また、画像処理機能のカスタマイズ装置と、画像処理検査装置とが通信回線で接続されており、通信回線を通じて作成されたＷｉｎｄｏｗｓＣＥの実行形式のプログラムを転送するものとしてもよい。
【０２０９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０２１０】
【図１】本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。
【図２】画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。
【図３】部品記憶部に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【図４】部品記憶部に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【図５】画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。
【図６】画像処理機能のカスタマイズ装置が起動後、最初に実行制御部８によって表示される画面の例を表わす図である。
【図７】基本フロー開発の処理が選択されたときに表示される画面を表わす図である。
【図８】画像処理モジュール開発の処理が選択されたときに表示される画面の例を表わす図である。
【図９】運転画面開発の処理が選択されたときに表示される画面の例を表わす図である。
【図１０】基本フロー開発の処理手順を表わすフローチャートである。
【図１１】基本フローの作成処理が選択されたときに表示される画面の例を表わす図である。
【図１２】基本フローの作成処理の手順を表わすフローチャートである。
【図１３】基本フローの作成後の画面の例を表わす図である。
【図１４】画像処理モジュール開発の処理手順を表わすフローチャートである。
【図１５】ＭＳプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図１６】ＵＩプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図１７】「ItemDefs.h」のテンプレートを表わす図である。
【図１８】「ItemDefs.h」のテンプレートを表わす図である。
【図１９】編集後の「ItemDefs.h」を表わす図である。
【図２０】編集後の「ItemDefs.h」を表わす図である。
【図２１】「AssignProc.cpp」のテンプレートを表わす図である。
【図２２】編集後の「AssignProc.cpp」を表わす図である。
【図２３】編集後の「AssignProc.cpp」を表わす図である。
【図２４】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図２５】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図２６】「ItemInit.cpp」のテンプレートを表わす図である。
【図２７】「ItemInit.cpp」のテンプレートを表わす図である。
【図２８】編集後の「ItemInit.cpp」を表わす図である。
【図２９】編集後の「ItemInit.cpp」を表わす図である。
【図３０】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図３１】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図３２】編集後の「MeasureDisp.cpp」を表わす図である。
【図３３】編集後の「MeasureDisp.cpp」を表わす図である。
【図３４】編集後の「MeasureDisp.cpp」を表わす図である。
【図３５】「MeasureInit.cpp」のテンプレートを表わす図である。
【図３６】「MeasureInit.cpp」のテンプレートを表わす図である。
【図３７】「MeasureOut.cpp」のテンプレートを表わす図である。
【図３８】「MeasureProc.cpp」のテンプレートを表わす図である。
【図３９】編集後の「MeasureProc.cpp」を表わす図である。
【図４０】編集後の「MeasureProc.cpp」を表わす図である。
【図４１】編集後の「MeasureProc.cpp」を表わす図である。
【図４２】「RenumProc.cpp」のテンプレートを表わす図である。
【図４３】「RenumProc.cpp」のテンプレートを表わす図である。
【図４４】編集後の「RenumProc.cpp」を表わす図である。
【図４５】編集後の「RenumProc.cpp」を表わす図である。
【図４６】「UnitData.cpp」のテンプレートを表わす図である。
【図４７】「UnitData.cpp」のテンプレートを表わす図である。
【図４８】「UnitData.cpp」のテンプレートを表わす図である。
【図４９】編集後の「UnitData.cpp」を表わす図である。
【図５０】編集後の「UnitData.cpp」を表わす図である。
【図５１】編集後の「UnitData.cpp」を表わす図である。
【図５２】編集後の「UnitData.cpp」を表わす図である。
【図５３】編集後の「UnitData.cpp」を表わす図である。
【図５４】編集後の「UnitData.cpp」を表わす図である。
【図５５】編集後の「UnitData.cpp」を表わす図である。
【図５６】編集後の「UnitData.cpp」を表わす図である。
【図５７】編集後の「UnitData.cpp」を表わす図である。
【図５８】ユーザインタフェース画面のテンプレートを表わす図である。
【図５９】ユーザインタフェース画面のテンプレートを表わす図である。
【図６０】編集後のユーザインタフェース画面を表わす図である。
【図６１】運転画面開発の処理手順を表わすフローチャートである。
【図６２】運転画面の編集処理が選択されたときに表示される画面の例を表わす図である。
【図６３】運転画面の別のテンプレートを表わす図である。
【図６４】編集後の運転画面を表わす図である。
【図６５】イベント処理開発の手順を表わすフローチャートである。
【図６６】設定データの取得の例を示す図である。
【図６７】計測データの取得の例を示す図である。
【図６８】モデルデータの取得の例を示す図である。
【図６９】モデルデータの登録および削除の例を示す図である。
【図７０】画像データの取得の例を示す図である。
【図７１】画像データの取得の別の例を示す図である。
【図７２】画像データの登録の例を示す図である。
【図７３】現在の処理対象画像の登録の例を示す図である。
【図７４】図形データの取得の例を示す図である。
【図７５】ワーク領域の取得の例を示す図である。
【符号の説明】
【０２１１】
１  画像処理機能のカスタマイズ装置、２  ディスプレイ、４  ＣＰＵおよびメモリ、５  ハードディスク、６  リムーバブルメディア、７  操作入力部、８  実行制御部、９  基本フロー開発部、１０  画像処理モジュール開発部、１１  運転画面作成部、１２  イベント処理開発部、１３  ビルド実行部、１４  カスタマイズプログラム記憶部、１５  部品記憶部、１６  テンプレート記憶部、１７  シミュレーションソフト記憶部、１８  マニュアル類記憶部、１９  実行プログラム記憶部、２０  マウス、２１  キーボード、２２  ＯＳ類記憶部、２３  ライブラリ類記憶部、２９１  画像処理モジュール記憶部、２９２  イベント処理モジュール記憶部、２９３  運転画面記憶部、２９４  基本フロー記憶部。
【図１】
2009059203.tif 000003
【図２】
2009059203.tif 000004
【図３】
2009059203.tif 000005
【図４】
2009059203.tif 000006
【図５】
2009059203.tif 000007
【図６】
2009059203.tif 000008
【図７】
2009059203.tif 000009
【図８】
2009059203.tif 000010
【図９】
2009059203.tif 000011
【図１０】
2009059203.tif 000012
【図１１】
2009059203.tif 000013
【図１２】
2009059203.tif 000014
【図１３】
2009059203.tif 000015
【図１４】
2009059203.tif 000016
【図１５】
2009059203.tif 000017
【図１６】
2009059203.tif 000018
【図１７】
2009059203.tif 000019
【図１８】
2009059203.tif 000020
【図１９】
2009059203.tif 000021
【図２０】
2009059203.tif 000022
【図２１】
2009059203.tif 000023
【図２２】
2009059203.tif 000024
【図２３】
2009059203.tif 000025
【図２４】
2009059203.tif 000026
【図２５】
2009059203.tif 000027
【図２６】
2009059203.tif 000028
【図２７】
2009059203.tif 000029
【図２８】
2009059203.tif 000030
【図２９】
2009059203.tif 000031
【図３０】
2009059203.tif 000032
【図３１】
2009059203.tif 000033
【図３２】
2009059203.tif 000034
【図３３】
2009059203.tif 000035
【図３４】
2009059203.tif 000036
【図３５】
2009059203.tif 000037
【図３６】
2009059203.tif 000038
【図３７】
2009059203.tif 000039
【図３８】
2009059203.tif 000040
【図３９】
2009059203.tif 000041
【図４０】
2009059203.tif 000042
【図４１】
2009059203.tif 000043
【図４２】
2009059203.tif 000044
【図４３】
2009059203.tif 000045
【図４４】
2009059203.tif 000046
【図４５】
2009059203.tif 000047
【図４６】
2009059203.tif 000048
【図４７】
2009059203.tif 000049
【図４８】
2009059203.tif 000050
【図４９】
2009059203.tif 000051
【図５０】
2009059203.tif 000052
【図５１】
2009059203.tif 000053
【図５２】
2009059203.tif 000054
【図５３】
2009059203.tif 000055
【図５４】
2009059203.tif 000056
【図５５】
2009059203.tif 000057
【図５６】
2009059203.tif 000058
【図５７】
2009059203.tif 000059
【図５８】
2009059203.tif 000060
【図５９】
2009059203.tif 000061
【図６０】
2009059203.tif 000062
【図６１】
2009059203.tif 000063
【図６２】
2009059203.tif 000064
【図６３】
2009059203.tif 000065
【図６４】
2009059203.tif 000066
【図６５】
2009059203.tif 000067
【図６６】
2009059203.tif 000068
【図６７】
2009059203.tif 000069
【図６８】
2009059203.tif 000070
【図６９】
2009059203.tif 000071
【図７０】
2009059203.tif 000072
【図７１】
2009059203.tif 000073
【図７２】
2009059203.tif 000074
【図７３】
2009059203.tif 000075
【図７４】
2009059203.tif 000076
【図７５】
2009059203.tif 000077