以下、図面を参照しながら、本発明の実施の形態について説明する。
<第1の実施例>
図1は、本発明の実施の形態に係る画像処理システム100の概略構成の一例を示す模式図である。
画像処理システム100は、図1に示すように、パーソナルコンピュータ(以下、「PC」と称する)110と、操作入力装置120と、CRTディスプレイ(以下、「CRT」と称する)130と、カメラ140と、照明装置コントローラ150と、照明装置160と、外部機器コントローラ170と、検査対象181が載置されたステージ180を有して構成されている。
PC110は、画像処理システム100における動作を統括的に制御する情報処理装置である。ここで、本実施形態においては、PC110は、実際の製造工程等に導入される画像処理装置の画像処理プログラムの開発を支援する装置として適用した例を説明するが、本発明においてはこれに限定されるわけではなく、例えば、実際の製造工程等に導入される画像処理装置として適用する形態も本発明に含まれる。
PC110は、所定のケーブル等を介して、検査対象181の撮像(撮影)を行うカメラ140と通信可能に構成されている。また、PC110は、所定のケーブル等を介して、照明装置160の制御を行う照明装置コントローラ150と通信可能に構成されている。また、PC110は、所定のケーブル等を介して、ステージ180を制御するプログラムマブルコントローラ(PLC)などの外部機器コントローラ170と予め設定した通信が可能に構成されている。さらに、PC110は、所定のケーブル等を介して、それぞれ、操作入力装置120及びCRT130と通信可能に構成されている。即ち、PC110は、所定のケーブル等を介して接続された、操作入力装置120、CRT130、カメラ140、照明装置コントローラ150及び外部機器コントローラ170を制御することによって、画像処理システム100における動作を統括的に制御する。
操作入力装置120は、例えばユーザがPC110に対して入力指示を行う際にユーザによって操作されるものであり、ユーザから入力指示があった場合に、当該入力指示をPC110に対して入力するものである。この操作入力装置120は、例えば、キーボード(KB)やマウス等で構成されている。
CRT130は、PC110の制御にしたがって、各種の画像や各種の情報などを表示画面に表示する。
カメラ140は、PC110の制御にしたがって、ステージ180上に載置された検査対象181の撮影(撮像)を行い、撮影により得られた画像データを所定のケーブル等を介してPC110に送信する。
照明装置コントローラ150は、PC110の制御にしたがって、照明装置160における照明を制御する。照明装置160は、照明装置コントローラ150の制御に基づき、検査対象181における検査内容に応じて、当該検査対象181に対する照明の点灯/非点灯を切り替え等する。
外部機器コントローラ170は、PC110の制御にしたがって、ステージ180を制御する。ステージ180は、外部機器コントローラ170の制御に基づき、載置された検査対象181を目的の位置に移動させたり、検査対象181の搬入や搬出をしたりする。
次に、PC110の内部のハードウェア構成について説明する。図2は、図1に示すPC110の内部のハードウェア構成の一例を示す模式図である。ここで、図2には、PC110の内部構成に加えて、当該PC110と接続される装置についても記載している。
PC110は、図2に示すように、CPU111と、RAM112と、ROM113と、システムバス114と、各種のコントローラ115(115a〜115f)と、外部メモリ116のハードウェア構成を有して構成されている。具体的に、各種のコントローラ115として、入力コントローラ115a、ビデオコントローラ115b、メモリコントローラ115c、通信I/Fコントローラ115d及び115e、画像入力コントローラ115fが構成されている。CPU111は、ROM113或いは外部メモリ116に記憶されたプログラム等に基づいてシステムバス114に接続された各デバイスを制御して、PC110における動作を統括的に制御する。RAM112は、CPU111の主メモリ、ワークエリア等として機能する。CPU111は、処理の実行に際して、必要なプログラム等をRAM112にロードして、プログラムを実行することにより、PC110における各種の動作を実現する。ROM113には、CPU111の制御プログラムであるBIOS(Basic Input
/ Output System)やオペレーティングシステムプログラム(以下、「OS」と称する)、CPU111がPC110の機能を実現するために必要な各種のプログラム等が記憶されている。なお、これらのプログラムは、外部メモリ116に記憶されている形態であってもよい。
システムバス114は、CPU111、RAM112、ROM113、入力コントローラ115a、ビデオコントローラ115b、メモリコントローラ115c、通信I/Fコントローラ115d及び115e、画像入力コントローラ115fを、相互に通信可能に接続する。
入力コントローラ115aは、キーボード(KB)やマウスなどからなる操作入力装置120からの入力を制御する。ビデオコントローラ115bは、表示装置であるCRT130への表示を制御する。メモリコントローラ115cは、外部メモリ116へのアクセスを制御する。ここで、外部メモリ116は、例えばハードディスク(HD)やフレキシブルディスク(FD)等で構成され、ブートプログラムや、各種のアプリケーションプログラム、編集ファイル、各種のデータや各種の情報等を記憶する。また、外部メモリ116は、CPU111がプログラムを用いた処理を行う際に使用する各種のテーブルや各種の検査結果情報等も記憶する。通信I/Fコントローラ115dは、外部機器コントローラ170との通信を制御する。また、通信I/Fコントローラ115eは、照明装置コントローラ150との通信を制御する。画像入力コントローラ115fは、カメラ140と通信を行って、カメラ140から画像データの受信が可能に構成されている。なお、本実施形態では、カメラ140からの画像データの入力を前提に説明を行うが、画像ファイルを読み込んで入力する形態であってもよい。
次に、PC110の機能構成について説明する。図3は、図1に示すPC110の機能構成の一例を示す模式図である。
PC110には、図3に示すように、テーブル記憶部310、フロー作成部320、ソースコード変換部330、コンパイル部340、(検証)実行部350、データ保存部360、及び、データ入力・出力部370の各機能構成が構成される。また、テーブル記憶部310には、モジュール・ソースコードマスタテーブル311、処理フロー・入出力パラメータテーブル312、ソースコードテーブル313、オブジェクトコードテーブル314、及び、プロジェクトファイルテーブル315が保持されている。さらに、図示はしていないが、条件式テーブルやノード処理フラグテーブルも保持されている。
ここで、本実施形態においては、図3のテーブル記憶部310が、例えば図2に示す外部メモリ116に構成される(一旦RAM112に構成された後に外部メモリ116に構成される場合も含む)。また、図3のフロー作成部320、ソースコード変換部330、コンパイル部340、(検証)実行部350、データ保存部360及びデータ入力・出力部370が、例えば図2に示すCPU111とROM113或いは外部メモリ116に記憶されているプログラムとから構成される。
まず、図3のテーブル記憶部310に保持される各種のテーブルについて説明する。図4は、図3に示すモジュール・ソースコードマスタテーブル311の一例を示す模式図である。
モジュール・ソースコードマスタテーブル311には、図4に示すように、インデックス(Index)ごとに、画像処理に係るモジュール(画像処理モジュール)と、各モジュールに対応するソースコードが関連付けられている。このソースコードは、ソースコード変換部330で処理対象のモジュールをソースコードに変換する際に用いられるものである。
図5は、図3に示す処理フロー・入出力パラメータテーブル312の一例を示す模式図である。処理フロー・入出力パラメータテーブル312は、図5に示すように、インデックス(Index)501ごとに、画像処理に係るモジュール503と、各モジュール503の順序502と、各モジュール503のフロー登録名504と、各モジュール503における入力パラメータ505及び出力パラメータ506が関連付けられている。入力パラメータ505は、各モジュールで使用する画像バッファや処理領域等を示す。出力パラメータ506は、各モジュールが実行された際の結果画像バッファや閾値等を示す。次ステップ507は、次に処理されるべきステップのインデックス(Index)501を示す。なお、この項目は、複数のインデックス(Index)を持つこともある。また、分岐参照508は、モジュール503に「反復処理」モジュール、「条件分岐処理」モジュールを設定した際に、各条件(ノード)が次にどのステップを処理するかを指定する条件式テーブルを示す。
なお、図5に示す処理フロー・入出力パラメータテーブル312におけるインデックス(Index)501と、図4に示すモジュール・ソースコードマスタテーブル311におけるインデックス(Index)とは特に対応させていないが、相互に対応させて各テーブルを作成する形態であってもよい。
ソースコードテーブル313は、処理フロー・入出力パラメータテーブル312に記憶されているモジュール503について、ソースコード変換部330でモジュール・ソースコードマスタテーブル311を用いてソースコードに変換し登録している、全てのモジュール或いは一部のモジュールにおけるソースコードを記憶する。
オブジェクトコードテーブル314は、ソースコードテーブル313に記憶されているソースコードについてコンパイル部340で変換した実行可能なモジュールのオブジェクトコードを記憶する。プロジェクトファイルテーブル315は、画像処理に係る初期設定パラメータや、処理フローシーケンス、ソースコード、入出力パラメータ等を記憶する。
続いて、図3のフロー作成部320、ソースコード変換部330、コンパイル部340、(検証)実行部350、データ保存部360、及び、データ入力・出力部370について説明する。
フロー作成部320は、モジュール・ソースコードマスタテーブル311に含まれているモジュールの処理シーケンスを管理する処理フロー・入出力パラメータテーブル312の作成等と、処理フロー描画領域(後述する図7の702)へのモジュールの描画を行う機能を有する。
ソースコード変換部330は、フロー作成部320により作成された処理フロー・入出力パラメータテーブル312に記憶されている各モジュールの処理データをモジュール・ソースコードマスタテーブル311と照合して、各モジュールをソースコードに変換し、ソースコードテーブル313に記憶する機能を有する。
なお、図4及び図5に示すテーブルのモジュールとしては、画像に対する処理だけでなく、画像を取得するための事前処理や、処理結果を出力するための事後処理を含む外部機器に対する処理など画像の処理に関する処理であればよい。例えば、カメラ140の撮像条件を設定する制御指令や、照明装置160を制御するための照明装置コントローラ150への制御指令、或いは、ステージの移動などを制御するための外部機器コントローラ170への制御指令を行うものであってもよい。
コンパイル部340は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する機能を有する。
なお、コンパイル部340が行うコンパイルには、デバッグ・コンパイルとリリース・コンパイルの2つのタイプがある。ここで、本実施形態においては、処理フロー作成中には、ソースコードレベルでのステップ実行を可能とするデバッグ・コンパイルを行い、データ保存時には、オンラインで利用可能なファイルを生成するリリース・コンパイルを行う。この際、デバッグ・コンパイル及びリリース・コンパイルの両者は、同じ変換手法で生成されたソースコードを参照するものとする。
(検証)実行部350は、コンパイル部340により作成されたオブジェクトコードテーブル314に記憶されているオブジェクトコードを実行し、結果画像表示領域(後述する図7の703)と処理フロー・入出力パラメータテーブル312を更新する機能を有する。
データ保存部360は、例えば、RAM112にあるソースコードテーブル313、オブジェクトコードテーブル314及びプロジェクトファイルテーブル315を外部メモリ116に出力して、データの保存処理を行う。
データ入力・出力部370は、各モジュールで使用する入出力パラメータを管理する機能を有する。
次に、PC110による制御方法の処理手順について説明する。図6は、図1に示すPC110による制御方法の処理手順の一例を示すフローチャートである。
まず、図6のステップS101において、PC110のCPU111は、例えば、操作入力装置120からの入力指示に基づいて、画像処理プログラムの開発を行うための画像処理プログラム開発画面をCRT130に表示する処理を行う。
図7は、本発明の実施形態を示し、画像処理プログラム開発画面700の一例を示す模式図である。この画像処理プログラム開発画面700は、例えばGUIで構成されている。
図7に示す画像処理プログラム開発画面700には、利用可能な処理ユニット(即ち、「カメラ取込」等の画像処理に係る各モジュール)を表示するツールボックス701と、画像処理の実行順序(即ち、各モジュールの実行順序)をフローチャートで描画する処理フロー描画領域702と、各画像処理(即ち、各モジュールの処理)で実行した結果画像を表示する結果画像表示領域703と、メニューバー706及びツールバー707と、画像処理プログラムの開発を終了する際に操作される閉じるボタン708等が設けられている。また、図7に示す画像処理プログラム開発画面700には、例えば、新規モジュールの登録時もしくはパラメータの編集時等に、処理フロー描画領域702のフローチャートの各ステップ(即ち、各モジュール)で利用するパラメータを設定するパラメータ編集画面704と、そのパラメータの設定で実行された結果画像を表示する結果画像表示ウィンドウ705が表示される。図7に示す例では、パラメータ編集画面704には、「二値化」のモジュールに係るパラメータを設定する画面が示されている。ここで、再び、図6の説明に戻る。
ステップS101の処理が終了すると、ステップS102に進む。ステップS102に進むと、PC110のCPU111は、操作入力装置120からの入力指示に基づいて、ステップS101で表示された画像処理プログラム開発画面700を用いて新規に画像処理プログラムを開発するか否かを判断する。具体的に、本例では、画像処理プログラム開発画面700のツールバー707における新規作成ボタン707aの選択の有無に応じて、新規に画像処理プログラムを開発するか否かを判断する。即ち、本例では、新規作成ボタン707aが選択された場合に、新規に画像処理プログラムを開発すると判断される。
ステップS102の判断の結果、新規に画像処理プログラムを開発しない場合には(ステップS102/NO)、ステップS103に進む。
ステップS103に進むと、PC110のCPU111は、外部メモリ116に保存されているプロジェクトファイルテーブル315を読み出して、これをRAM112に記憶する。
ステップS103の処理が終了した場合、或いは、ステップS102で新規に画像処理プログラムを開発すると判断された場合には(ステップS102/YES)、ステップS104に進む。
ステップS104に進むと、PC110のCPU111は、操作入力装置120からの入力指示(具体的には、ステップS101で表示された画像処理プログラム開発画面700に対する入力指示)があったか否かを判断する。
ステップS104の判断の結果、操作入力装置120からの入力指示がなかった場合には(ステップS104/NO)、操作入力装置120からの入力指示があるまで、ステップS104で待機する。一方、ステップS104の判断の結果、操作入力装置120からの入力指示があった場合には(ステップS104/YES)、ステップS105に進む。
ステップS105に進むと、PC110のCPU111は、操作入力装置120からの入力指示に基づいて、選択された処理内容の判定処理を行う。このステップS105で判定される処理内容としては、本例では、「新規追加処理」、「変更処理」、「移動処理」、「挿入処理」、「全体実行処理」、「保存処理」及び「開発終了処理」である。なお、ここで挙げた処理内容は一例を示したものであり、その他の処理内容をステップS105で判定することも可能である。
ここで、ステップS105の判定処理では、例えば、図7に示す画像処理プログラム開発画面700において以下の入力がなされることによって、上述した各処理を判定するようにしている。
まず、図7に示すツールボックス701からモジュールが選択され、処理フロー描画領域702の処理フローシーケンスの最後尾にドラッグ&ドロップ、またはツールボックス701のモジュールがダブルクリックされると、PC110のCPU111は、モジュールの「新規追加処理」のイベントであると判定する。また、処理フロー描画領域702に既に登録されているモジュールがダブルクリックされると、PC110のCPU111は、モジュールのパラメータの「変更処理」のイベントであると判定する。また、処理フロー描画領域702に既に登録されているモジュールが他のモジュールの間にドラッグ&ドロップされると、PC110のCPU111は、モジュールの「移動処理」のイベントであると判定する。また、図7に示すツールボックス701からモジュールが選択され、処理フロー描画領域702に既に登録されているモジュールの間にドラッグ&ドロップされると、PC110のCPU111は、モジュールの「挿入処理」のイベントであると判定する。また、メニューバー706もしくはツールバー707の実行が選択されると、PC110のCPU111は、処理フロー描画領域702に設定された処理フローの「全体実行処理」のイベントであると判定する。また、メニューバー706もしくはツールバー707の保存が選択されると、PC110のCPU111は、処理フロー描画領域702に設定された処理フローの「保存処理」のイベントであると判定する。また、例えば閉じるボタン708もしくはメニューバー706の終了が選択されると、PC110のCPU111は、画像処理プログラムの「開発終了処理」のイベントであると判定する。
なお、本実施形態ではこのようにして処理内容の判定を行うようにしているが、これは一例であり、例えばメニューバー706もしくはツールバー707に「新規追加」などの処理内容に応じたアイコン等の機能を設けてもよく、上述した形態に限定されるものではない。
続いて、ステップS106において、PC110のCPU111は、ステップS105で判定した処理内容が、モジュールの「新規追加処理」であるか否かを判断する。
ステップS106の判断の結果、ステップS105で判定した処理内容が、モジュールの「新規追加処理」である場合には(ステップS106/YES)、ステップS107に進む。
ステップS107に進むと、PC110のCPU111は、選択されたモジュールの「新規追加処理」を行う。このステップS107の詳細については、図8を用いて後述する。そして、ステップS107の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。
一方、ステップS106の判断の結果、ステップS105で判定した処理内容が、モジュールの「新規追加処理」でない場合には(ステップS106/NO)、ステップS108に進む。
ステップS108に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、モジュールのパラメータの「変更処理」であるか否かを判断する。
ステップS108の判断の結果、ステップS105で判定した処理内容が、モジュールのパラメータの「変更処理」である場合には(ステップS108/YES)、ステップS109に進む。
ステップS109に進むと、PC110のCPU111は、選択されたモジュールのパラメータの「変更処理」を行う。このステップS109の詳細については、図9を用いて後述する。そして、ステップS109の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。
一方、ステップS108の判断の結果、ステップS105で判定した処理内容が、モジュールのパラメータの「変更処理」でない場合には(ステップS108/NO)、ステップS110に進む。ステップS110に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、モジュールの「移動処理」であるか否かを判断する。
ステップS110の判断の結果、ステップS105で判定した処理内容が、モジュールの「移動処理」である場合には(ステップS110/YES)、ステップS111に進む。
ステップS111に進むと、PC110のCPU111は、選択されたモジュールの「移動処理」を行う。このステップS111の詳細については、図11を用いて後述する。そして、ステップS111の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。
一方、ステップS110の判断の結果、ステップS105で判定した処理内容が、モジュールの「移動処理」でない場合には(ステップS110/NO)、ステップS112に進む。ステップS112に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、モジュールの「挿入処理」であるか否かを判断する。
ステップS112の判断の結果、ステップS105で判定した処理内容が、モジュールの「挿入処理」である場合には(ステップS112/YES)、ステップS113に進む。
ステップS113に進むと、PC110のCPU111は、選択されたモジュールの「挿入処理」を行う。このステップS113の詳細については、図12を用いて後述する。そして、ステップS113の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。
一方、ステップS112の判断の結果、ステップS105で判定した処理内容が、モジュールの「挿入処理」でない場合には(ステップS112/NO)、ステップS114に進む。ステップS114に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、処理フローの「全体実行処理」であるか否かを判断する。
ステップS114の判断の結果、ステップS105で判定した処理内容が、処理フローの「全体実行処理」である場合には(ステップS114/YES)、ステップS115に進む。
ステップS115に進むと、PC110のCPU111は、処理フロー描画領域702に設定された処理フローの「全体実行処理」を行う。このステップS115の詳細については、図13を用いて後述する。そして、ステップS115の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。一方、ステップS114の判断の結果、ステップS105で判定した処理内容が、処理フローの「全体実行処理」でない場合には(ステップS114/NO)、ステップS116に進む。
ステップS116に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、処理フローの「保存処理」であるか否かを判断する。
ステップS116の判断の結果、ステップS105で判定した処理内容が、処理フローの「保存処理」である場合には(ステップS116/YES)、ステップS117に進む。
ステップS117に進むと、PC110のCPU111は、処理フロー描画領域702に設定された処理フローの全体をソース変換する処理を行う。具体的に、ステップS117では、PC110のCPU111(例えばソースコード変換部330)は、RAM112に記憶されている処理フロー・入出力パラメータテーブル312をソースコードに変換して、RAM112に記憶されているソースコードテーブル313を更新する処理を行う。また、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをリリース・コンパイルしてリリース版のオブジェクトコードに変換して、RAM112に記憶されているオブジェクトコードテーブル314を更新する処理を行う。
続いて、ステップS118において、PC110のCPU111(例えばデータ保存部360)は、RAM112上にある、ソースコードテーブル313をソースファイルとして、オブジェクトコードテーブル314をEXEファイルまたはDLLファイルとして、また、プロジェクトファイルテーブル315を外部メモリ116に保存する処理を行う。そして、ステップS118の処理が終了すると、ステップS104に戻り、操作入力装置120から次の入力指示があるまで待機する。
一方、ステップS116の判断の結果、ステップS105で判定した処理内容が、処理フローの「保存処理」でない場合には(ステップS116/NO)、ステップS119に進む。
ステップS119に進むと、PC110のCPU111は、ステップS105で判定した処理内容が、画像処理プログラムの「開発終了処理」であるか否かを判断する。
ステップS119の判断の結果、ステップS105で判定した処理内容が、画像処理プログラムの「開発終了処理」でない場合には(ステップS119/NO)、ステップS104に戻り、操作入力装置120から入力指示があるまで待機する。
一方、ステップS119の判断の結果、ステップS105で判定した処理内容が、画像処理プログラムの「開発終了処理」である場合には(ステップS119/YES)、図6の示すフローチャートの処理を終了する。
次に、図6のステップS107、S109、S111、S113及びS115の詳細について説明を行うが、具体的に、「カメラ取込」→「二値化」→「粒子解析」のモジュールの順序で処理フローを登録し、また、その後の処理を行う例について説明を行う。まず、図6のステップS107の詳細な処理について説明する。図8は、図6のステップS107におけるモジュールの「新規追加処理」の詳細な処理手順の一例を示すフローチャートである。
図6のステップS107の処理では、まず、図8のステップS201において、PC110のCPU111(例えばフロー作成部320)は、ステップS104の入力において選択されたモジュールを特定する処理を行う。ここで、本例では、まず、最初の「カメラ取込」のモジュールが特定される。
続いて、ステップS210では、ステップS201で特定されたモジュールが反復処理か条件分岐処理かのモジュールであるかを判断する。この場合、反復処理か条件分岐処理かのモジュールの場合、ステップS211に進むが、今回は「カメラ取込」のモジュールであるのでNO、つまり、ステップS202に進む。
ステップS202において、PC110のCPU111(例えばフロー作成部320)は、CRT130に、ステップS201で特定されたモジュールのパラメータ編集画面704を表示する処理を行う。そして、PC110のCPU111(例えばフロー作成部320)は、パラメータ編集画面704に関して、操作入力装置120による編集を受け付ける。なお、ステップS201で「カメラ取込」のモジュールが特定された場合には、図7に示す画像処理プログラム開発画面700には、「カメラ取込」のモジュールに係るパラメータ編集画面704が表示されることになる。
また、パラメータ編集画面704では、各モジュールに関するパラメータ、及び、処理領域などの入力パラメータ(図5に示す入力パラメータ505)や処理結果を記憶する出力パラメータ(図5に示す出力パラメータ506)の設定が可能に構成されている。
続いて、ステップS203において、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、パラメータ編集画面704で編集されたパラメータを登録するか否かを判断する。具体的に、ここでは、図7に示すパラメータ編集画面704のOKボタン7041が選択された際に当該パラメータ編集画面704で編集されたパラメータを登録すると判断し、また、図8に示すパラメータ編集画面704の中止ボタン7042等が選択された際に当該パラメータ編集画面704で編集されたパラメータを登録しないと判断する。
ステップS203の判断の結果、パラメータ編集画面704で編集されたパラメータを登録する場合には(ステップS203/YES)、ステップS204に進む。
ステップS204に進むと、PC110のCPU111(例えばフロー作成部320)は、ステップS201及びS202の処理で得られた情報を、処理フロー・入出力パラメータテーブル312に1レコードとして追加する処理を行う。
例えば、図5に示す処理フロー・入出力パラメータテーブル312に、最初に「カメラ取込」のモジュールに関するレコードを追加する場合について説明する。
この場合、モジュール503として「カメラ取込」が設定され、インデックス(Index)501として「1」が設定され、順序502として「1」が設定され、フロー登録名504として「U00001」が設定される。また、例えば、出力パラメータ506として、結果画像の格納先である「画像バッファA」の情報(アドレス等)が設定される。ここで「カメラ取込」処理は、処理フローの第1番目のモジュールであるため、入力パラメータ505には、画像バッファの情報(アドレス等)は格納されない。ここで、再び、図8の説明に戻る。
ステップS204の処理が終了すると、続いて、ステップS205において、PC110のCPU111(例えばフロー作成部320)は、ステップS201で特定したモジュールを処理フロー描画領域702に追加して描画(表示)する。なお、本実施形態においては、ステップS204の処理フロー・入出力パラメータテーブル312に関する処理とステップS205の処理フロー描画領域702の描画処理との処理の順番を、逆にする形態であってもよい。
続いて、ステップS214では、ステップS201で特定されたモジュールが並列分岐処理のモジュールであるかを判断する。この場合、並列分岐処理のモジュールの場合、YESに進み処理は終了となるが、今回は「カメラ取込」のモジュールであるのでNO、つまり、ステップS206に進む。
ステップS206において、PC110のCPU111(例えばソースコード変換部330)は、ステップS205で処理フロー描画領域702に追加したモジュールを、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶する。この際、PC110のCPU111(例えばソースコード変換部330)は、モジュール・ソースコードマスタテーブル311から読み出したソースコードに対して、必要に応じて、ステップS202で編集されたパラメータを反映させる等の修正を行って、得られたソースコードをソースコードテーブル313に記憶する。
その後、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する。この際、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、デバッグ版のオブジェクトコードとしてオブジェクトコードテーブル314に記憶する。
続いて、ステップS207において、PC110のCPU111(例えば(検証)実行部350)は、必要に応じて、処理フロー・入出力パラメータテーブル312の入力パラメータ505として記憶されている、前ステップの結果画像バッファに格納されている画像データを用いて、ステップS206で生成されたオブジェクトコードを実行する処理を行う。これにより、カメラ140からの画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファの情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定する。
ただし、「カメラ取込」のモジュールの場合には、最初のステップであるため、入力パラメータ505に画像バッファの情報(アドレス等)が格納されていない。このため、最初の「カメラ取込」の場合には、単に、カメラ140からの画像データを取り込むことになる。したがって、ステップS207の実行処理に際しては、ステップS202で設定された入力パラメータや出力パラメータを参照して処理を実行し、結果画像表示ウィンドウ705に結果画像(カメラ140から取り込んだ画像データ)を表示することになる。
続いて、ステップS208において、PC110のCPU111(例えば(検証)実行部350)は、ステップS204で追加したレコードの出力パラメータ506における画像バッファAのアドレスに格納されている結果画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。なお、結果画像表示領域703には、モジュールごとの処理結果画像を表示することになるが、これにより、開発者は、どこの処理に問題があるのか、どのモジュールに対して修正処理するべきかの判断をすることが可能となる。
ステップS208の処理が終了した場合、或いは、ステップS203においてパラメータ編集画面704で編集されたパラメータを登録しないと判断された場合には(ステップS203/NO)、操作入力装置120から「新規追加処理」の終了が指示されたときは図8のフローチャートの処理を終了し、また、操作入力装置120から「新規追加処理」の継続が指示されたときはステップS201に戻って、ステップS201以降の処理を再度行うことになる。
ここで、本例では、上述したように、「カメラ取込」→「二値化」→「粒子解析」のモジュールの順序で処理フローを登録するものであるため、以下に、同様の手順で、処理フローに「二値化」及び「粒子解析」のモジュールを追加する場合について説明する。なお、以下の説明では、上述した「カメラ取込」のモジュールにおける処理と異なる点を中心に説明を行う。
「二値化」のモジュールを処理フローに追加する場合も、上述した「カメラ取込」の場合と基本的に同様の処理となるが、ステップS204では、新たに、図5に示すインデックス(Index)501の「2」に、モジュール503として「二値化」が設定され、順序502として「2」が設定され、フロー登録名504として「U00002」が設定される。また、入力パラメータ505としては、前ステップ(即ち、「カメラ取込」)の結果画像を格納する画像バッファAの情報(アドレス等)が格納される。即ち、「二値化」のモジュールの入力パラメータ505には、前ステップである「カメラ取込」の入力パラメータ505に格納されている画像バッファの情報が格納される。
続いて、ステップS205では、ステップS201で特定したモジュール(「二値化」)を処理フロー描画領域702に追加して描画(表示)する。そして、ステップS206では、ステップS205で追加登録したモジュールを、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。また、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、これをオブジェクトコードテーブル314に記憶して更新する。
続いて、ステップS207では、オブジェクトコードテーブル314に記憶されているオブジェクトコードを実行して、「二値化」のモジュールの入力パラメータ505を用いた二値化処理を行う。これにより、二値化処理がなされた画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファBの情報及びその際の閾値(例えば数値=98)の情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定する。
その後、ステップS208では、ステップS204で追加したレコードの出力パラメータ506における画像バッファBのアドレスに格納されている画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。
また、「粒子解析」のモジュールを処理フローに追加する場合も、上述したモジュールの場合と基本的に同様の処理となるが、ステップS204では、インデックス(Index)501の「3」に、モジュール503として「粒子解析」が設定され、順序502としてここでは「3」が設定され、フロー登録名504としてここでは「U00003」が設定される。また、入力パラメータ505としては、前ステップ(ここでは、「二値化」)の結果画像を格納する画像バッファBの情報(アドレス等)が格納される。
続いて、ステップS205では、ステップS201で特定したモジュール(「粒子解析」)を処理フロー描画領域702に描画(表示)する。そして、ステップS206では、ステップS205で追加登録したモジュールを、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。また、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、これをオブジェクトコードテーブル314に記憶して更新する。
続いて、ステップS207では、オブジェクトコードテーブル314に記憶されているオブジェクトコードを実行して、「粒子解析」のモジュールの入力パラメータ505を用いた粒子解析処理を行う。これにより、粒子解析がなされた画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファCの情報及びその際の粒子数(ここでは、例えば粒子数=51)の情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定する。
その後、ステップS208では、ステップS204で追加したレコードの出力パラメータ506における画像バッファCのアドレスに格納されている画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。ここで、本例では、結果画像表示領域703には、例えば、図7に示すように、その左側から順番に、処理フロー描画領域702に設定された処理フローの順序(即ち、「カメラ取込」→「二値化」→「粒子解析」のモジュールの順序)に応じて、その処理結果画像が表示される。以上のようにして、図6のステップS107におけるモジュールの「新規追加処理」が行われる。
次に、図6のステップS109の詳細な処理について説明する。
図9は、図6のステップS109におけるモジュールのパラメータの「変更処理」の詳細な処理手順の一例を示すフローチャートである。ここでは、図8に示す処理により処理フロー描画領域702の処理フローに既に登録されている「二値化」のモジュールのパラメータを変更する例について説明する。
図6のステップS109の処理では、まず、図9のステップS301において、PC110のCPU111(例えばフロー作成部320)は、ステップS104の入力において選択された、既に処理フローとして登録されているモジュールを特定する処理を行う。ここで、本例では、「二値化」のモジュールが特定される。
続いて、ステップS302において、PC110のCPU111(例えばフロー作成部320)は、CRT130に、ステップS301で特定されたモジュールのパラメータ編集画面704を表示する処理を行う。本例では、「二値化」のモジュールに係るパラメータ編集画面704が表示される。
図10は、本発明の実施形態を示し、パラメータ編集画面704の一例を示す模式図である。この図10に示すパラメータ編集画面704は、「二値化」のモジュールのパラメータの編集を行うための画面であり、二値化のタイプを設定する二値化タイプ設定部1001や、二値化の閾値を設定する閾値設定部1002、OKボタン7041及び中止ボタン7042等が設けられている。
そして、PC110のCPU111(例えばフロー作成部320)は、パラメータ編集画面704に関して、操作入力装置120による編集を受け付ける。ここで、図10に示す閾値設定部1002の閾値が変更されると、当該閾値の変更に応じて、結果画像表示ウィンドウ705に表示している画像が随時更新されて表示される。
続いて、ステップS303において、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、ステップS301で特定したモジュールのパラメータをパラメータ編集画面704で編集されたパラメータに変更するか否かを判断する。具体的に、ここでは、パラメータ編集画面704でパラメータが変更されて、図10に示すパラメータ編集画面704のOKボタン7041が選択された際に、ステップS301で特定したモジュールのパラメータを変更すると判断する。
ステップS303の判断の結果、ステップS301で特定したモジュールのパラメータをパラメータ編集画面704で編集されたパラメータに変更する場合には(ステップS303/YES)、ステップS304に進む。
ステップS304に進むと、PC110のCPU111(例えばソースコード変換部330)は、ステップS303でパラメータを変更すると判断されたモジュール以降のモジュールについて、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。具体的に、本例では、「二値化」のモジュールのパラメータを変更するものであるため、図8の処理で登録された処理フロー、即ち、「カメラ取込」→「二値化」→「粒子解析」のモジュールのうち、「二値化」及び「粒子解析」のモジュールについてソースコード変換が行われる。この際、PC110のCPU111(例えばソースコード変換部330)は、モジュール・ソースコードマスタテーブル311から読み出したソースコードに対して、必要に応じて、ステップS302で編集されたパラメータを反映させる等の修正を行って、得られたソースコードをソースコードテーブル313に記憶する。このように、変更すると判断されたモジュール以降のモジュールについてのみソースコード変換処理することで、この後説明するコンパイル処理と合わせて、開発時間の短縮が可能となり、効率のよい画像処理のロジック(処理フロー)の構築を実現することができる。
その後、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する。この際、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、デバッグ版のオブジェクトコードとしてオブジェクトコードテーブル314に記憶して更新する。
続いて、ステップS305において、PC110のCPU111(例えば(検証)実行部350)は、必要に応じて、処理フロー・入出力パラメータテーブル312の入力パラメータ505として示されている画像バッファに格納されている画像データを用いて、ステップS304で生成されたオブジェクトコードを実行する処理を行う。具体的に、本例では、処理対象が「二値化」のモジュールであるため、図5に示す処理フロー・入出力パラメータテーブル312の入力パラメータ505として記憶されている画像バッファAに格納されている画像データを用いて、ステップS304で生成されたオブジェクトコードを実行して二値化処理を行う。これにより、二値化処理がなされた画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファBの情報及びその際の閾値の情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定する。
続いて、ステップS306において、PC110のCPU111(例えば(検証)実行部350)は、処理フロー・入出力パラメータテーブル312の出力パラメータ506における画像バッファのアドレスに格納されている結果画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。本例では、結果画像表示領域703には、例えば、その左側から順番に、処理フロー描画領域702に設定された処理フローの順序(即ち、「カメラ取込」→「二値化」→「粒子解析」のモジュールの順序)に応じて、その処理結果画像が表示されるが、例えば図8のステップS208の表示に対して、「二値化」のモジュール以降の処理結果画像が変更されて表示されることになる。
ステップS306の処理が終了した場合、或いは、ステップS303において該当モジュールのパラメータをパラメータ編集画面704で編集されたパラメータに変更しないと判断された場合には(ステップS303/NO)、操作入力装置120から「変更処理」の終了が指示されたときは図9のフローチャートの処理を終了し、また、操作入力装置120から「変更処理」の継続が指示されたときはステップS301に戻って、ステップS301以降の処理を再度行うことになる。以上のようにして、図6のステップS109におけるモジュールのパラメータの「変更処理」が行われる。
次に、図6のステップS111の詳細な処理について説明する。
図11は、図6のステップS111におけるモジュールの「移動処理」の詳細な処理手順の一例を示すフローチャートである。このモジュールの移動処理により、処理フローの順序が変更されることになる。
図6のステップS111の処理では、まず、図11のステップS401において、PC110のCPU111(例えばフロー作成部320)は、ステップS104の入力において選択された、既に処理フローとして登録されているモジュールを特定する処理を行う。
続いて、ステップS402において、PC110のCPU111(例えばフロー作成部320)は、処理フロー描画領域702に描画(表示)されている処理フローについて、ステップS401で特定したモジュールを、ステップS104でドロップされたモジュールの間へ移動し、処理フロー描画領域702を再描画(再表示)する処理を行う。
この際、PC110のCPU111(例えばフロー作成部320)は、ステップS401で特定したモジュールの移動処理に伴って、処理フロー・入出力パラメータテーブル312の変更処理も行う。ここでは、具体例を示さないが、まず、ステップS402で再描画された処理フロー描画領域702の処理フローにおけるモジュールの順序に従って、処理フロー・入出力パラメータテーブル312の順序502(更にはフロー登録名504)を変更する。次に、ステップS402で再描画された処理フロー描画領域702の処理フローにおけるモジュールの順序に従って、当該順序の変更に伴うモジュールの入力パラメータ505及び出力パラメータ506を変更する。例えば、移動対象のモジュールの入力パラメータ505には、1つ前の順序のモジュールにおける出力パラメータ506の画像バッファの情報を格納する。この際、移動対象のモジュールの出力パラメータ506は変更しないようにすることもできる。ただし、1つ後の順序のモジュールにおける入力パラメータ505は、移動対象のモジュールの出力パラメータ506の画像バッファの情報を格納する。
続いて、ステップS403において、PC110のCPU111(例えばソースコード変換部330)は、処理フロー・入出力パラメータテーブル312において、順序502が変更されたモジュール以降のモジュールについて、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。この際、PC110のCPU111(例えばソースコード変換部330)は、ソースコードテーブル313において、順序の変更が行われたモジュールに対応するソースコードをいったん消去し、再度、ソースコードへの変
換を行ってソースコードテーブル313を更新する。
その後、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する。この際、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、デバッグ版のオブジェクトコードとしてオブジェクトコードテーブル314に記憶して更新する。
続いて、ステップS404において、PC110のCPU111(例えば(検証)実行部350)は、必要に応じて、処理フロー・入出力パラメータテーブル312の入力パラメータ505として示されている画像バッファに格納されている画像データを用いて、ステップS403で生成されたオブジェクトコードを実行する処理を行う。
続いて、ステップS405において、PC110のCPU111(例えば(検証)実行部350)は、処理フロー・入出力パラメータテーブル312の出力パラメータ506における画像バッファのアドレスに格納されている結果画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。本例では、結果画像表示領域703には、例えば、その左側から順番に、処理フロー描画領域702に設定された処理フローの順序に応じて、その処理結果画像が表示されることになる。
ステップS405の処理が終了した場合には、操作入力装置120から「移動処理」の終了が指示されたときは図11のフローチャートの処理を終了し、また、操作入力装置120から「移動処理」の継続が指示されたときはステップS401に戻って、ステップS401以降の処理を再度行うことになる。以上のようにして、図6のステップS111におけるモジュールの「移動処理」が行われる。
次に、図6のステップS113の詳細な処理について説明する。
図12は、図6のステップS113におけるモジュールの「挿入処理」の詳細な処理手順の一例を示すフローチャートである。ここでは、図8に示す処理により処理フロー描画領域702に登録された処理フロー(「カメラ取込」→「二値化」→「粒子解析」)に対して、「粒子解析」のモジュールに前に、「モフォロジ」のモジュールを追加する「挿入処理」について説明する。即ち、ここでは、図7に示す処理フロー描画領域702のように、「カメラ取込」→「二値化」→「モフォロジ」→「粒子解析」とする例について説明する。
図6のステップS113の処理では、まず、図12のステップS501において、PC110のCPU111(例えばフロー作成部320)は、ステップS104の入力においてドロップされた、新規にモジュールを挿入する挿入先を特定する処理を行う。ここで、本例では、「二値化」と「粒子解析」との間が挿入先として特定される。
続いて、ステップS502において、PC110のCPU111(例えばフロー作成部320)は、ステップS104の入力において選択されたモジュールを特定する処理を行う。ここで、本例では、「モフォロジ」のモジュールが特定される。なお、本実施形態においては、ステップS501の挿入先の特定処理とステップS502のモジュールの特定処理との処理の順番を、逆にする形態であってもよい。
続いて、ステップS503において、PC110のCPU111(例えばフロー作成部320)は、CRT130に、ステップS502で特定されたモジュールのパラメータ編集画面704を表示する処理を行う。そして、PC110のCPU111(例えばフロー作成部320)は、パラメータ編集画面704に関して、操作入力装置120による編集を受け付ける。なお、本例では、図7に示す画像処理プログラム開発画面700には、「モフォロジ」のモジュールに係るパラメータ編集画面704が表示されることになる。
続いて、ステップS504において、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、パラメータ編集画面704で編集されたパラメータを登録するか否かを判断する。このステップS504における具体的な判断方法については、図8のステップS203と同様の方法を用いる。
ステップS504の判断の結果、パラメータ編集画面704で編集されたパラメータを登録する場合には(ステップS504/YES)、ステップS505に進む。
ステップS505に進むと、PC110のCPU111(例えばフロー作成部320)は、ステップS502及びS503の処理で得られた情報を、処理フロー・入出力パラメータテーブル312に1レコードとして追加する処理を行うとともに、ステップS501で特定された挿入先の情報に基づいて、処理フロー・入出力パラメータテーブル312の情報を変更して更新する。
本例では、まず、図5に示すように、処理フロー・入出力パラメータテーブル312のインデックス(Index)501の「4」に、挿入対象のモジュールである「モフォロジ」のモジュールの情報を追加する。具体的に、モジュール503として「モフォロジ」が設定され、順序502として「3」が設定され、フロー登録名504として「U00003」が設定され、さらに、入力パラメータ505の画像バッファの情報(アドレス等)として前ステップ(「二値化」)の出力パラメータ506に示す画像バッファBの情報(アドレス等)が設定され、出力パラメータ506の画像バッファの情報(アドレス等)として画像バッファCの情報(アドレス等)が設定される。この際、処理フロー・入出力パラメータテーブル312にインデックス(Index)501が「3」として登録されている「粒子解析」のモジュールの情報については、順序502が「3」から「4」に変更され、例えば、入力パラメータ505の画像バッファの情報(アドレス等)として画像バッファCが設定され、出力パラメータ506の画像バッファの情報(アドレス等)として画像バッファDが設定される。
続いて、ステップS506において、PC110のCPU111(例えばフロー作成部320)は、処理フロー描画領域702において、ステップS501で特定した挿入先に、ステップS502で特定したモジュールを追加して描画(表示)する。なお、本実施形態においては、ステップS505の処理フロー・入出力パラメータテーブル312に関する処理とステップS506の処理フロー描画領域702の描画処理との処理の順番を、逆にする形態であってもよい。
続いて、ステップS507において、PC110のCPU111(例えばソースコード変換部330)は、処理フロー・入出力パラメータテーブル312において、順序502が変更されたモジュール以降(即ち、ステップS506で挿入されたモジュール以降)のモジュールについて、モジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。
その後、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する。この際、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、デバッグ版のオブジェクトコードとしてオブジェクトコードテーブル314に記憶して更新する。
続いて、ステップS508において、PC110のCPU111(例えば(検証)実行部350)は、必要に応じて、処理フロー・入出力パラメータテーブル312の入力パラメータ505として示されている画像バッファに格納されている画像データを用いて、ステップS403で生成されたオブジェクトコードを実行する処理を行う。具体的に、例えば、今回の処理で挿入された「モフォロジ」のモジュールについては、1つ前の処理のモジュール(本例では「二値化」のモジュール)の結果画像データ(画像バッファBに格納されている結果画像データ)を用いて、ステップS507で生成されたオブジェクトコードを実行することになる。本例の場合、モフォロジ処理がなされた画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファの情報及びその際の粒子数(ここでは、例えば粒子数=46)の情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定することになる。
続いて、ステップS509において、PC110のCPU111(例えば(検証)実行部350)は、処理フロー・入出力パラメータテーブル312の出力パラメータ506における画像バッファのアドレスに格納されている結果画像データに基づく結果画像を結果画像表示領域703に描画(表示)する。本例では、結果画像表示領域703には、例えば、その左側から順番に、処理フロー描画領域702に設定された処理フローの順序(即ち、「カメラ取込」→「二値化」→「モフォロジ」→「粒子解析」のモジュールの順序)に応じて、その処理結果画像が表示されることになる。以上のようにして、図6のステップS113におけるモジュールの「挿入処理」が行われる。
次に、図6のステップS115の詳細な処理について説明する。
図13は、図6のステップS115における処理フローの「全体実行処理」の詳細な処理手順の一例を示すフローチャートである。
図6のステップS115の処理では、まず、図13のステップS601において、PC110のCPU111(例えばソースコード変換部330)は、処理フロー・入出力パラメータテーブル312に設定されている一連の処理フローに係るモジュールをソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶する。その後、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル314に記憶する。この際、PC110のCPU111(例えばコンパイル部340)は、ソースコードテーブル313のソースコードをリリース・コンパイルして、リリース版のオブジェクトコードとしてオブジェクトコードテーブル314に記憶する。
続いて、ステップS602において、PC110のCPU111(例えば(検証)実行部350)は、処理フロー・入出力パラメータテーブル312の入力パラメータ505として記憶されている結果画像バッファに格納されている画像データを用いて、ステップS601で生成されたオブジェクトコードを実行する処理を行う。これにより、画像処理等が施された複数の画像データが処理結果画像として取得され、例えば、フロー作成部320は、当該処理結果画像を格納するバッファの情報及びその際の数値の情報を処理フロー・入出力パラメータテーブル312の出力パラメータ506に設定する。
続いて、ステップS603において、PC110のCPU111(例えば(検証)実行部350)は、処理フロー描画領域702に設定された処理フローの順序に応じて、各種の結果画像を結果画像表示領域703に描画(表示)する。
ステップS603の処理が終了すると、図13のフローチャートの処理を終了する。
以上のようにして、図6のステップS115における処理フローの「全体実行処理」が行われる。
以上説明したように、本実施形態に係る画像処理システム100のPC110(情報処理装置)では、以下に示す処理を行うようにしている。
具体的に、PC110では、画像の処理に関する処理を示すモジュールと、各モジュールに対応するソースコードとが関連付けられているモジュール・ソースコードマスタテーブル311(図4)と、モジュールを複数組み合わせた処理フローの各モジュールと、当該各モジュールの実行の順序を示す情報、当該各モジュールの処理に係る入力情報及び出力情報とを含む処理フロー・入出力情報テーブル(図5の処理フロー・入出力パラメータテーブル312)を外部メモリ116(或いはRAM112)に記憶するようにしている(記憶ステップ)。
そして、処理フローに対してモジュールに関する変更の指示がされた際に(例えば図6のS104/YES)、当該変更の指示に応じて、処理フロー・入出力パラメータテーブル312の情報を変更するようにしている(例えば、図8のS204、図11のS402、図12のS505等:変更ステップ)。
そして、変更ステップにより変更された処理フロー・入出力パラメータテーブル312の情報及びモジュール・ソースコードマスタテーブル311の情報を用いて、モジュールごとにソースコードを生成するようにしている(例えば、図8のS206、図9のS304、図11のS403、図12のS507等:ソースコード生成ステップ)。その後、ソースコード生成ステップにより生成されたソースコードに基づいてオブジェクトコードを生成するようにしている(オブジェクトコード生成ステップ)。
そして、生成されたオブジェクトコードを用いて、変更ステップにより変更された処理フロー・入出力パラメータテーブル312のモジュールごとに処理を実行するようにしている(例えば、図8のS207、図9のS305、図11のS404、図12のS508等:処理実行ステップ)。その後、処理実行ステップによる処理の実行により得られたモジュールごとの結果画像を表示装置であるCRT130の結果画像表示領域703に表示するようにしている(例えば、図8のS208、図9のS306、図11のS405、図12のS509等:結果画像表示ステップ)。
かかる構成によれば、モジュールを複数組み合わせた処理フローの各モジュールごとに、その処理の結果画像を表示装置に表示するようにしたので、モジュールに関する変更の指示がされた際においても、変更対象のモジュールを特定することができ、画像処理に係るロジック(即ち、画像処理に係る処理フロー)の開発の負荷を軽減することができる。これにより、効率のよい画像処理のロジック(処理フロー)を構築することが可能となる。
さらに、PC110では、処理フロー・入出力パラメータテーブル312に設定されている処理フローをCRT130の処理フロー描画領域702に表示し(処理フロー表示ステップ)、さらに、変更ステップにより変更された処理フロー・入出力パラメータテーブル312の処理フローをCRT130の処理フロー描画領域702に変更表示するようにしている(例えば、図8のS205、図11のS402、図12のS506等:処理フロー変更表示ステップ)。
さらに、PC110では、処理フロー描画領域702の処理フローに対してモジュールに関する変更の指示がされた際に、当該モジュールのパラメータを編集するためのパラメータ編集画面704をCRT130に更に表示し(例えば、図8のS202、図9のS302、図12のS503等:パラメータ編集画面表示ステップ)、前記ソースコード生成ステップでは、更に、パラメータ編集画面704により編集された当該モジュールのパラメータを用いて、ソースコードを生成するようにしている。
次に、反復処理、条件分岐処理、並列分岐処理をはじめとする分岐処理モジュールを含む処理フローを登録し、また、その後の処理を行う例について説明する。
具体的には、「二値化」処理をし、「モフォロジ」処理を3 回行い、その後、「位置決め」処理を実施し、位置決めのマッチング個数「条件分岐」処理を行う。「条件分岐」処理内では、条件を満たす場合(YES)は、「回転補正」処理を、条件を満たさない場合(NO)は、「ミラー」処理を行う。続いて、「メディアン」処理を行い、その後「コード認識」処理と「欠陥検査」処理を並列して行い、最後に「IO
出力」処理を行う例を使い説明する。
図14は、本発明の実施形態を示し、画像処理プログラム開発画面1400の一例を示す模式図である。この画像処理プログラム開発画面1400は、例えばGUIで構成されている。
図14に示す画像処理プログラム開発画面1400には、利用可能な処理ユニット(即ち、「二値化」等の画像処理に係る各モジュール)を表示するツールボックス1404と、画像処理の実行順序(即ち、各モジュールの実行順序)をフローチャートで描画する処理フロー描画領域1401と、各画像処理(即ち、各モジュールの処理)で実行した結果画像を表示する結果画像表示領域1402と、メニューバー(不図示)及びツールバー1407と、画像処理プログラムの開発を終了する際に操作される閉じるボタン1408等が設けられている。また、図14に示す画像処理プログラム開発画面1400には、例えば、新規モジュールの登録時もしくはパラメータの編集時等に、処理フロー描画領域1401のフローチャートの各ステップ(即ち、各モジュール)で利用するパラメータを設定するパラメータ編集画面(不図示)と、そのパラメータの設定で実行された結果画像を表示する結果画像1403が表示される。
なお、ツールボックス1404に「条件分岐処理」「反復処理」「並列分岐処理」など、分岐処理によるフローを制御するモジュールも含んでいる。これらを使った処理フローの例が、1410aの「反復処理」、1411aの「条件分岐処理」、1412aの「並列分岐処理」である。ここで、結果画像表示領域1402は、フロー描画領域1401の各モジュールの結果画像である。これは、プレビュー画像や縮小画像であってもよい。たとえば、反復処理であれば、1410bのように表示し、反復処理を行った際の最終の結果画像を表示する。条件分岐処理であれば、1411bのように条件を満たしたノード(枝)の画像を表示し、条件を満たさないノードについては処理が行われないのでブラックアウトした画像を表示する。また、並列分岐処理であれば、1412bのように表示し、すべてのノードの結果画像を表示する。このとき、すべての処理フローの結果が結果画像表示領域1402に収まらない場合は、水平・垂直方向のスクロールバーを用いて表示領域を変更することとしてもよい。
次に、分岐処理モジュールを含む場合の処理フロー・入出力パラメータテーブル312について図18を用いて説明する。
図18は、「分岐処理」モジュールを含む場合の図3に示す処理フロー・入出力パラメータテーブル312の一例を示す模式図T1800である。
処理フロー・入出力パラメータテーブルT1800は、図18に示すように、インデックス(Index)1801ごとに、画像処理に係るモジュール1803と、各モジュール1803の順序1802と、各モジュール1803のフロー登録名1804と、各モジュール1803における入力パラメータ1805及び出力パラメータ1806が関連付けられている。入力パラメータ1805は、各モジュールで使用する画像バッファや処理領域等を示す。出力パラメータ1806は、各モジュールが実行された際の結果画像バッファや閾値等を示す。次ステップ1807は、次に処理されるべきステップのインデックス(Index)1801を示す。なお、この項目は、複数のインデックス(Index)を持つこともある。また、分岐参照1808は、モジュール1803に「反復処理」モジュール、「条件分岐処理」モジュールを指定した際に、各条件(ノード)が次にどのステップを処理するかを指定する条件式テーブルを示す。
なお、処理フロー・入出力パラメータテーブルT1800において、インデックス(Index)1801の2および3は反復処理、インデックス(Index)1801の5から7は条件分岐処理、インデックス(Index)1801の9および10は並列分岐処理の一例である。
「分岐処理」における詳細な処理条件などを登録する条件式テーブルT1900について図19を用いて説明する。
図19は条件式テーブルT1900の一例であり、インデックス(Index)1901、条件式1904、閾値1(1905)及び閾値2(1906)、次ステップ1907を登録する。なお、この条件式テーブルT1900は、「分岐処理」モジュール1つに対してテーブルを1つ作成する。
特徴量1903は、結果を比較する際に用いる特徴量、例えば、マッチングの検出個数や粒子解析の粒子数などを登録する。また条件式列1904には、Greater
/ GreaterOrEqual /Equal
/ LessOrEqual / Less / InRange / OutRangeなどが、閾値1列1905及び閾値2列1906には、特徴量と比較する値を登録する。次ステップ列1907には、条件ごとに次に行うステップ(処理フロー・入出力パラメータテーブルのインデックス(Index)1801)を設定する。複数の条件がある場合には、条件式テーブルT1900の行数を追加して対応する。次に、「分岐処理」モジュールを含む場合のPC110による制御方法の処理手順について説明する。
まず、「二値化」と「モフォロジ」のモジュールについて、図8で説明した手順に従い新規追加処理するが、詳細の説明は重複するので省略する。続いて、「モフォロジ」処理を3
回実施する「反復処理」モジュールを、処理フローとして図8の手順に従い、新規追加登録する処理を説明する。ステップS201では、選択されたモジュールを特定する。
ステップS210では、ステップS201で特定されたモジュールが「反復処理」と判断した場合、ステップS211に進み、分岐処理モジュールの登録処理を行う。この分岐処理モジュールの登録処理について図16を用いて説明する。図16は、分岐処理モジュールを含む場合の図1に示すPC110のCPU111による制御方法の処理手順の一例を示すフローチャートである。
ステップS801では、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801の1および2、さらに、登録対象のモジュールに対して出力パラメータ1806を元に、選択可能な特徴量を特定する。すなわち、この場合は、反復処理の「カウンタ」のみであるため、「カウンタ」を選択可能な特徴量としてRAM112に記憶する。
ステップS802では、条件式入力画面を表示する。図15は、条件式入力画面1500の一例であり、特徴量を指定する特徴量リストボックス1501や、判断するための条件を設定するための条件式1502および閾値入力ボックス1503を有する。特徴量リストボックス1501はこの後の判断処理に対してとり得る特徴量を選択可能にリスト表示している。
このとき、RAM112に選択可能な特徴量として「カウンタ」が記憶されているので、図15の特徴量リスト1501には、「カウンタ」−「カウント数」のみを表示するものでもよい。また、条件式1502においても、設定可能な項目のみを表示するものでもよい。
ステップS803では、条件式入力画面1500の所定の項目に対して、入力装置120から値が入力されたか否かを判断する。ステップS803で、入力装置120から入力がない(ステップS803/NO)の場合、入力待ちとする。一方、ステップS803において、入力装置120から入力があった(ステップS803/YES)場合、ステップS804へ進む。本例では、特徴量を「カウンタ数」、条件式を「<」、下限値を「3」として入力されたものとして説明する。
ステップS804では、PC110のCPU111は、ステップS803で入力された値が妥当か否かの判断をする。
ここで判断する項目としては、モジュールごとにあらかじめ設定された条件式入力画面1500の下限値1503、および上限値1504に入力された数値や文字列である。たとえば、上で説明している反復処理の場合、比較する特徴量はカウンターカウント数で数値となり、「0」や「負」の値が入力されると、入力された値が正しくないと判定する。また、二値化処理の閾値と比較する場合は、処理バッファの最大輝度値、つまり8ビットであれば数値で255、を超える値が入力されると正しくない値と判定する。
ステップS805では、ステップS804で特定した値が正しいか否かを判定する。ステップS805にて判定した結果、値が正しくないと判断した(ステップS805/NO)場合は、入力装置120からの入力待ちとする。一方、値が正しいと判断した(ステップS805/YES)場合、ステップS806に進む。
ステップS806では、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、条件式入力画面1500で編集されたパラメータを登録するか否かを判断する。具体的に、ここでは、図15に示す条件式入力画面1500の設定ボタン1505が選択された際に当該条件式入力画面1500で編集されたパラメータを登録すると判断し、また、図15に示す条件式入力画面1500のキャンセルボタン1506等が選択された際に当該条件式入力画面1500で編集されたパラメータを登録しないと判断する。ここでステップS806/YESはステップS203/YESに対応し、ステップS806/NOはS203/NOに対応する。つまり、ステップS806/YES の場合は、ステップS807へ進み、S806/NOの場合は、反復処理モジュールを登録せずに終了する。
ステップS807では、PC110のCPU111はRAM112上に条件式テーブルT1900を、新規に作成する。
ステップS808では、ステップS807で作成した条件式テーブルT1900に、レコードを追加する。このとき、まず、インデックス(Index)1901を「1」として1 コード追加し、条件を満たす場合の設定値を書き込む。つまり、特徴量1903に、反復処理のカウント数
である「U00003−Count」、条件式1904に「Less」、閾値1の1905には「3」を登録する。なお、条件式1904で「Less」、が設定されているので閾値2の1906には、「NULL」を設定する。次ステップ1907には、反復処理を行う最初の処理モジュールを指定することになり、ここでは、「U00002」の「モフォロジ」モジュールを示す、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801である「3」を登録する。さらに、条件式テーブルT1900のインデックス(Index)1901を「2」として、1レコード追加し、特徴量1903に「U00003-Count」、条件式1904「Else」とする。次ステップには、反復処理を終えて次に実行するステップを設定することになるが、現段階ではまだ次にステップが登録されていないため、次ステップ1907は一時的に「NULL」とする。
図8の説明に戻る。S212では、処理フロー・入出力パラメータテーブルT1800の更新も行うが、インデックス(Index)1801が「3」の行の次ステップ805に条件式テーブルT1900の次ステップ1906の値「2」を、また参照する条件式テーブルであるT1900を分岐参照1808に登録する。
ステップS213では、処理フロー描画領域1401へ反復処理モジュールを描画し、「反復処理」モジュールの登録処理が一旦終了することになる。なお、ここでは、反復処理を行う最初の処理モジュールである「モフォロジ」モジュールの入力側に矢印を指すことになる。次に、「反復処理」モジュールの後に「位置決め」モジュールを処理フローとして図8の手順に従い、新規追加登録する処理を説明する。ここで、ステップS201からステップS203は同様の処理である。
ステップS204では、反復処理モジュールに続くモジュールの登録に該当するので、条件式テーブルT1900のインデックス(Index)1901が「2」の次ステップ1907に、処理フロー・入出力パラメータテーブルT1800において「位置決め」処理を表すインデックス(Index)1801の「4」を登録する。あわせて、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「3」の次ステップ1807に「4」を登録する。しかし、インデックス(Index)1801が「3」の次ステップ1807には、すでに「2」が登録されているので、カンマ「,」等を用いて接続し、登録することとする。つまり、インデックス(Index)1801が「3」の次ステップ1807には、「2,4」と登録する。
ステップS205以降の処理は図8の先の説明と同様であるが、ステップS206のソース変換の処理は「反復処理」及び「位置決め」のモジュールについてモジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。また、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、これをオブジェクトコードテーブル314に記憶して更新する。
なお、結果画像表示領域1402に表示される結果画像は、反復処理の最終の結果画像を表示する。また結果画像表示領域1402において、反復処理モジュールをダブルクリック、もしくはコンテキストメニューを選択されると、反復処理経過画像ウィンドウを表示する。図20で反復処理経過画像ウィンドウの一例を示す。本ウィンドウの一番左の画像が、反復処理の全ての回数の処理結果をRAM112に記憶したうえで、最初(1
回目)の結果画像を表し、右に移るに従い、反復処理の回数をインクリメントした結果画像となる。また、パラメータ変更処理がなされると、変更処理前の反復処理結果をRAM112に記憶したまま、新たに、全ての回数の処理結果をRAM112に記憶する。そのうえで、上段にパラメータ変更前、下段にパラメータ変更後の画像を表示する。なお本ウィンドウは、スクロールバーの移動指示を受け付け、表示する画像を切り替えるようにしてもよい。以上で、「反復処理」モジュールの登録およびプログラムの作成が終了することになる。
次に、「条件分岐処理」モジュールを含む場合のPC110による制御方法の処理手順について説明する。具体的には、先の位置決め処理で行われた結果を用いて、条件を満たす場合(YES)は、「回転補正」処理を、条件を満たさない場合(NO)は、「ミラー」処理を行う場合を例にして説明する。ステップS201では、選択されたモジュールを特定する。
ステップS210では、ステップS201で特定されたモジュールが「条件分岐処理」と判断し、ステップS211にて「条件分岐処理」モジュールの登録処理を行う。この「条件分岐処理」モジュールの登録処理について図16を用いて説明するが、「反復処理」モジュールの登録処理と重複する説明は省略する。なお、「条件分岐処理」で使用する条件式テーブルについては、図19のT1910で一例を示す。
ステップS801では、処理フロー・入出力パラメータテーブルT1800の出力パラメータ1806を元に、現在のステップまでで選択可能な特徴量を特定する。ここでは、PC110のCPU111は、出力パラメータ1806を参照するが、本例では、選択できる特徴量としては、二値化の閾値「U00001−Thresh」,反復処理の回「U00003−Count」、位置決めの個数「U00004−Num」である。
ステップS802では、ステップS801で特定した特徴量をもとに条件式入力画面1500を表示し、入力を受け付ける。ここでは、特徴量1913を前ステップの位置決めの個数「U00004−Num」、条件式1914を「==」、閾値1の1914を「1」の入力があったものとする。
ステップS803からステップS805は先の説明と同様である。
ステップS806では、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、条件式入力画面1500で編集されたパラメータを登録するか否かを判断する。具体的に、ここでは、図15に示す条件式入力画面1500の設定ボタン1505が選択された際に当該条件式入力画面1500で編集されたパラメータを登録すると判断し(ステップS806/YES)次のステップに進む。一方、キャンセルボタン1506が選択された際には、当該条件式入力画面1500で編集されたパラメータを登録しないと判断し(ステップS806/NO)、終了する。
ステップS807では、PC110のCPU111は、RAM112上に条件式テーブルT1910を、新規に作成する。
ステップS808では、ステップS807で作成した条件式テーブルT1910に、レコードを追加する。このとき、まず、インデックス(Index)1911を「1」として1 コード追加し、条件を満たす場合の設定値を書き込む。特徴量1913に、位置決め処理の個数である「U00004−Num」を、条件式1914に「Equal」、閾値1の1915には「1」を登録する。なお、条件式1914で「Less」が設定されているので閾値2の1916には、「NULL」を設定する。次ステップ1917には、「条件分岐処理」を行った際の分岐先の処理モジュールを指定することになるが、ここではまだ次ステップが登録されていないため、一時的に「NULL」とする。
さらに、条件式テーブルT1910にインデックス(Index)1901を「2」として、1 レコード追加し、特徴量1913に「U00004−Num」、条件式1914を「Else」とする。同様に次ステップには、「条件分岐処理」を終えて次に実行するステップを設定することになるが、現段階ではまだ次にステップが登録されていないため、次ステップ1917は一時的に「NULL」とする。
図8の説明に戻る。ステップS212では、処理フロー・入出力パラメータテーブルT1800の更新も行うが、インデックス(Index)1801が「4」の行に参照する条件式テーブルT1910を分岐参照1808に登録する。本モジュールでは、画像に対して処理を行わないので、入力パラメータ1805と出力パラメータ1806の画像バッファを同じポインタを指定する。
ステップS213では、処理フロー描画領域1401へ条件分岐モジュールを描画し、「条件分岐処理」モジュールの登録が一旦終了することになる。
次に、「条件分岐」モジュールの後に、条件分岐内のノードの処理を追加登録する処理を 説明する。ここでは、位置決めの個数が「1」の場合には回転補正、「1」以外の場合にはミラー変換を行うものとし、「回転補正」処理のモジュールと「ミラー変換」処理のモジュールをそれぞれのノードに追加登録する処理について説明する。なお、ステップS201からステップS204は同様の処理であるので説明は省略する。
ステップS204では、条件分岐モジュールに続くモジュールの登録に該当するので、条件式テーブルT1910で条件を満たす場合の次ステップ、つまりインデックス(Index)1911が「1」の次ステップ1917には、「6」を登録する。一方、条件を満たさない場合、つまりインデックス(Index)1911が「2」の次ステップ1917には「7」を登録する。あわせて、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「5」の次ステップ1807には、「6,7」が登録されることになる。
なお、ここで、処理フロー・入出力パラメータテーブルT1800においては、インデックス(Index)1801の「6」の「回転補正」、および「7」の「ミラー変換」の入力パラメータ1805の画像バッファは、インデックス(Index)1801の「5」の「条件分岐処理」の出力パラメータ1806の画像バッファのポインタを使用することになる。つまり「条件分岐処理」の前ステップであるインデックス(Index)1801の「4」の位置決めの出力画像1807を使用することになる。
ステップS205以降の処理は図8の先の説明と同様である。が、ステップS206のソース変換の処理は「条件分岐処理」、「回転処理」、「ミラー処理」のモジュールについてモジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。また、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、これをオブジェクトコードテーブル314に記憶して更新する。以上で、「条件分岐処理」モジュールの登録およびプログラムの作成が終了することになる。
次に、「並列分岐処理」を含む場合のPC110による制御方法の処理手順について説明する。具体的には、「メディアン」処理に続いて、「コード認識」処理と「欠陥検査」処理を並列して行い、最後に「IO 出力」処理を行う例を使い説明する。まず、「メディアン」のモジュールの登録について図8で説明した手順に従い新規追加処理するが、詳細の説明は重複するので省略する。引き続き、「並列分岐処理」のモジュールの登録について図8で説明した手順に従い新規追加処理する。
ステップS201では、選択されたモジュールを特定する。
ステップS210では、ステップS201で特定されたモジュールが並列分岐と判断し、ステップS202のパラメータ編集画面表示へと進む。
ステップS202では並列分岐処理のためのパラメータ編集画面を開く。図23にパラメータ編集画面の一例であり、分岐設定2301で並列して処理を行うノード(枝)数を指定する並列分岐ウィンドウ2300を示す。ここでは、「2」を入力する。
ステップS203において、PC110のCPU111(例えばフロー作成部320)は、操作入力装置120からの入力指示に基づいて、並列分岐ウィンドウ2300で編集されたパラメータを登録するか否かを判断する。具体的に、ここでは、図23に示す並列分岐ウィンドウ2300の設定ボタン2302が選択された際に当該並列分岐ウィンドウ2300で編集されたパラメータを登録すると判断し、また、図23に示す並列分岐ウィンドウ2300のキャンセルボタン2303等が選択された際に当該並列分岐ウィンドウ2300で編集されたパラメータを登録しないと判断する。
ステップS204では、並列分岐ウィンドウ2300で指定した分岐の数だけ、処理フロー・入出力パラメータテーブルT1800にレコードを追加する。ここでは、ノード数は2であるので、インデックス(Index)1801に、「9」と「10」を追加し、それぞれの次ステップ1806は「NULL」を設定する。
ステップS205では、処理フロー描画領域702に並列分岐モジュールを描画するが、ここではまだ各ノード(枝)内に処理を含んでいない接続線のみを描画する。なお、このとき、ステップS204で処理フロー・入出力パラメータテーブルT1800に追加したインデックス(Index)の小さい数字を、分岐モジュールの左に割り当て、インデックス(Index)が大きくなるに従い、右のノード(枝)を示すものとする。ステップS214では、ステップS201で特定されたモジュールが並列分岐と判断しているので、処理を抜ける。
次に、「並列分岐処理」モジュールの後に、並列処理の各ノードの処理を追加登録する処理を説明する。ここでは、例として「コード認識」と「欠陥検査」のモジュールを追加登録する処理について説明する。なお、ステップS201からステップS203は同様の処理であるので説明は省略する。
ステップS204では、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「9」にコード認識を、インデックス(Index)1801が「10」に欠陥検査を登録されるものとする。このとき、各ノードで使用される画像は前ステップのメディアン処理後の画像、つまり処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「8」の出力パラメータ1806で指定されている画像バッファとなり、インデックス(Index)1801が「9」および「10」の入力パラメータ1805の画像バッファに指定する。この時点では、次ステップが登録されていないため、次ステップ1807には「NULL」を設定する。また、分岐参照も使用しないため、「NULL」と設定する。さらに、前ステップのインデックス(Index)1801が「8」の次ステップ1807には、分岐先が2つとなり、「9,10」と設定されることになる。
ステップS205以降の処理は図8の先の説明と同様である。が、ステップS206のソース変換の処理は「並列分岐処理」、「コード認識」と「欠陥検査」のモジュールについてモジュール・ソースコードマスタテーブル311を用いてソースコードに変換し、変換により得られたソースコードをソースコードテーブル313に記憶して更新する。また、ソースコードテーブル313のソースコードをデバッグ・コンパイルして、これをオブジェクトコードテーブル314に記憶して更新する。図21に並列処理を実行する際の、処理手順の詳細について説明する。ここで、ステップS1402a及びステップS1402bは、並列分岐処理1412aで示すように「コード認識」処理と「欠陥検査」処理を示す。
ステップS1401では、前ステップの結果を各ノードの次ステップへ割り振るための前処理やノード処理フラグテーブルの作成などを行う。図22は、ノード処理フラグテーブルT2200の一例である。
ノード処理フラグテーブルT2200をRAM112上に新規に作成する。あわせて並列で処理するノード数のコードを追加する。その後、各インデックス(Index)1801のノード名に「NODEx」、終了フラグに「0」を登録する。また、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「9」および「10」の分岐参照1808には、ノード処理フラグテーブルT2200を指定する。なお、終了フラグに登録する値の一例として、完了を「1」とし、未完了を「0」とする。図22にノード処理フラグの一例を示す。
ステップS1402aでは、処理フロー・入出力パラメータテーブルにインデックス(Index)が「9」として登録されている処理モジュール(コード認識処理)を実行する。
続いて、ステップS1403aでは、PC110のCPU111は、RAM112上のノード処理フラグテーブルT2200の終了フラグを「1」と設定する。
同様に、ステップS1402aが開始されると同時に、ノード(枝)2において、ステップS1402b(欠陥検査処理)からS1403bの処理を順次実行し、ノード処理フラグテーブルT2200に終了フラグを更新する。ノード(枝)が3つ以上となる場合も、同様の手順で処理を行う。
次に、ステップS1404では、PC110のCPU111は、ノード処理フラグテーブルT2200の終了フラグを調べ、すべてのノードの処理が完了しているかの判定処理を行う。
ステップS1404の判断の結果、ステップS1405で判定した処理内容が、「完了」である場合には(ステップS1405/YES)、並列分岐処理を終了し、処理フローのステップに戻る。一方、「完了」でない場合には(ステップS1405/NO)、ステップS1404に戻り、実行中のすべてのノードが完了するのを待機する。つまりこの処理により各ノードの処理を同期することになり、その後の処理タイミングを揃えることが可能となる。最後に、ステップS107の手順に従い、「I/O
出力」処理のモジュールを追加登録する。
ここで、並列分岐処理の次のステップを登録したので、ステップS204において、条件式テーブルT1900のインデックス(Index)1901が「9」および「10」の次ステップ1907に、処理フロー・入出力パラメータテーブルT1800において「I/O
出力」処理を表すインデックス(Index)1901の「11」を登録する。
本ステップが、処理フローの最終ステップとなるため、処理フロー・入出力パラメータテーブルT1800のインデックス(Index)1801が「11」の次ステップ1807は「NULL」となる。なお、次ステップ1807が「NULL」となるステップが最終ステップとなる。
図17に、すべてのモジュールにおいて、パラメータを変更した際に、前回のパラメータでの処理結果画像と今回の処理結果画像の画像比較ウィンドウを示す。結果画像表示領域の各モジュールの結果画像をダブルクリック、もしくはコンテキストメニューを選択することで、画像比較ウィンドウを表示する。
たとえば、図17では、ステップS109の手順に従い、処理フロー中の「二値化」処理モジュールのパラメータ(閾値)を「128」から「64」に変更した場合の一例を示す。
前回結果画像5001は、前回のパラメータ(閾値=182)の処理結果画像を表わし、今回結果画像5002は今回の設定パラメータ(閾値=64)での処理結果画像を表わす。なお、結果画像はRAM112、もしくは外部メモリ116のどちらかに保持しておくものとする。
以上説明では新規追加処理を例に説明をしたが、モジュールの移動処理や挿入処理、及び、パラメータの変更処理等についても、以上説明および図9等を用いて説明したときと重複するため説明は省略する。
<第2の実施例>
以下、本願発明の第2の実施例の説明をする。この実施例では、前処理のうち、一部又は全部の処理を図2の画像入力コントローラが備えるCPU(近傍演算処理チップやFPGAなどのハードウェアを含む)に行わせることにより、すなわち、一連の前処理を情報処理装置のCPUと画像入力装置のCPUとに処理分担をさせることで、処理の高速化を図るためのプログラムを作成するためのフローチャートの作成処理について説明する。
図24は、第2の実施例におけるモジュールの新規追加処理の詳細な手順の一例を示すフローチャートである。尚、第1の実施例におけるモジュールの新規追加処理(図8)と同様の処理を行うステップには、図8と同じステップ番号を付与し、処理の詳細な説明は割愛する。
図24のステップS202において表示されるパラメータ表示画面には、前処理を行う処理主体が、プログラムを実行する情報処理装置のCPUであるかそれとも画像入力コントローラのCPUであるかを指定するために用いられる入力フィールド(処理主体入力フィールド)が設けられており、この処理主体入力フィールドに設定された入力内容に従い、CPU111は処理主体がCPUであるか、それとも画像入力コントローラであるかを判定する(ステップS2401)。
ステップS2401でCPU111がYESと判定した(情報処理装置のCPUにより処理する)場合には、処理フロー・入出力パラメータテーブル(図25)の当該処理を示すレコードの処理主体フィールドに「0」を設定する。一方、NOと判定した(画像入力装置のCPUにより処理する)場合には、「1」を設定する。その他の処理ステップについては図8と同様であるので詳細な説明は割愛する。
図25は第2の実施例における処理フロー・入出力パラメータテーブルの一例を示す模式図である。図5に示す処理フロー・入出力パラメータテーブルに加えて、処理主体フィールド2501を備えている。この数値が「0」の場合には、情報処理装置のCPUが、「1」の場合には、画像入力コントローラのCPUが処理主体となるプログラムを作成することになる。この例では、カメラ取込、二値化、メディアンの実行を画像入力コントローラのCPUが、モフォロジ、回転の実行を情報処理装置のCPUが行うためのプログラムが作成されることになる。なお、情報処理装置のCPUと画像入力コントローラのCPUとが作業メモリを共有することにより、データのやり取りを行うよう、プログラムは作成される。
以上が、第2の実施例である一連の前処理を情報処理装置のCPUと画像入力装置のCPUとに処理分担をさせることで、処理の高速化を図るためのプログラムを作成するためのフローチャートの作成処理の説明である。
<第3の実施例>
次に、本願発明の第3の実施例について説明する。第3の実施例では、他のプログラムとのによる処理と同期処理を行うためのプログラムの作成について説明する。
図26は、第3の実施例におけるモジュールの新規追加処理の詳細な手順の一例を示すフローチャートである。尚、第1の実施例におけるモジュールの新規追加処理(図8)や第2の実施例におけるモジュールの新規追加処理(図24)と同様の処理を行うステップには、それぞれの図と同じステップ番号を付与し、処理の詳細な説明は割愛する。
第3の実施例においては、イベントセットモジュール、及びイベント待機モジュールが用意されている。イベントセットモジュールは、特定のイベントを発生させるために用いられるモジュールである。イベント待機モジュールは、イベントセットモジュールにより発生されるイベントを待機するために用いられるモジュールである。これらモジュールは、図7に示す画像処理プログラム開発画面のツールボックス701に処理ユニットとして用意されている。
図26のステップS2601において、CPU111は、指定されたモジュールがイベントセット処理であるかを判定する。イベントセット処理であると判定した場合には(ステップS2601でYES)、処理フロー・入出力パラメータテーブル(図27)中の当該処理を示すレコードのイベント参照フィールド2701に、当該イベントセット処理で発行するイベント情報を設定する(ステップS2602)。尚、イベント情報についてはステップS202で表示されるパラメータ編集画面に設けられたイベント入力フィールドに入力された値をCPU111はイベント情報として取得し、その値をイベント情報に設定することになる。
次に、CPU111は、指定されたモジュールがイベント待機処理であるかを判定する。イベント待機処理であると判定した場合には(ステップS2601でYES)、処理フロー・入出力パラメータテーブル(図27)中の当該処理を示すレコードのイベント参照フィールド2701に、当該イベント待機処理で待機するイベント情報を設定する(ステップS2602)。尚、イベント情報についてはステップS202で表示されるパラメータ編集画面に設けられたイベント入力フィールドに入力された値をCPU111はイベント情報として取得し、その値をイベント情報に設定することになる。
そして、その後、待機イベント情報として設定されたイベントを発行するためのイベントセット処理が設定されている処理フロー・入出力パラメータテーブル(図27)が示す処理フロー(関連処理フロー)が既に表示済みであるかを判定し、表示されていないと判断した場合には(ステップS2605でNO)、当該関連処理フローを画面表示する(ステップS2606)。なお、待機すると設定されたイベントを発行するイベントセット処理が他の何れの処理フローに設定されていない場合(すなわち、そのフローの処理を示す処理フロー・入出力パラメータテーブルがない場合)には、関連処理フローの表示は行わない。
図26のその他のステップについては、第1の実施例における新規追加処理(図8)及び第2の実施例における新規追加処理(図24)と略同様の処理であるため、詳細な説明は割愛する。
次に、図27を参照して、第3の実施例における処理フロー・入出力パラメータテーブルについて説明する。第3の実施例における処理フロー・入出力パラメータテーブルは第2の実施例における処理フロー・入出力パラメータテーブルが備えるフィールドに加えて、イベント参照フィールド2701が追加されている。モジュール503にイベントセットが設定されているレコードの場合には、イベント参照フィールド2701には当該処理で発行するイベントの情報が、モジュール503にイベント待機が設定されているレコードの場合には、イベント参照フィールド2701には当該処理で待機するイベントの情報が設定されることになる。
ここで、図27を例にして、これらの処理フロー・入出力パラメータテーブルが示す処理について説明する。尚、図27の(1)と(2)は異なる処理を示す処理フロー・入出力パラメータテーブルを示す。
図27の(1)の処理では、カメラ取込→モフォロジ→イベント待機→タイリングという処理が設定されており、(2)の処理ではカメラ取込→イベントセットが設定されている。そして、(1)の処理のイベント待機では、(2)の処理のイベントセットで設定されるイベントを待機するものとして設定されている(イベント参照がともにT9999)。
つまりは、図27の(1)の処理では、カメラ取込とモフォロジの処理が終了後、(2)の処理でのカメラ取込とイベントセット処理が終了するまで待機し、それら処理が終了後に、タイリング処理を行うことを示している。
以上が、第3の実施例である他のプログラムとのによる処理と同期処理を行うためのプログラムの作成について説明する。
(作成したプログラムを実行するための画面の作成)
次に、上記第1乃至第3の実施例で作成されたプログラムを実行させるための画面作成処理について説明する。
図28は、画面作成処理の一例を示すフローチャートである。本処理を、CPU111に実行させるためのプログラムは外部メモリ116に記憶されており、CPUは本処理を行う際に、当該プログラムをRAM112にロードし、当該プログラムの制御に従って、本処理を行うことになる。
まず、CPU111は、図29に示すレイアウト画面を、ビデオコントローラ115bを介して、CRT130に表示させる(ステップS2801)。レイアウト画面の詳細については、図29を参照して説明する。
次に、図29の画面に対する操作入力装置を介してのユーザによる操作に基づき、コントロールの入力指示を受け付けたか(入力あり?)を判定する(ステップS2802)。入力指示を受け付けた場合(ステップS2802でYES)と判定して場合には、入力指示の処理内容を判定する(ステップS2803)。
ステップS2803での入力内容の判定結果、その入力内容が、新規ボタン追加処理であると判定した場合には(ステップS2804でYES)、処理をステップS2805に移行させ、新規ボタン追加処理を行うことになる。新規ボタン追加処理の詳細については、図30を参照して説明する。
ステップS2804での入力内容の判定結果、その入力内容が、新規画面追加処理であると判定した場合には(ステップS2806でYES)、処理をステップS2807に移行させ、新規画面追加処理を行うことになる。新規画面追加処理の詳細については、図31を参照して説明する。
ステップS2804での入力内容の判定結果、その入力内容が、新規ボックス追加処理であると判定した場合には(ステップS2808でYES)、処理をステップS2809に移行させ、新規ボックス追加処理を行うことになる。新規ボックス追加処理の詳細については、図32を参照して説明する。
ステップS2804での入力内容の判定結果、その入力内容が、変更・移動処理であると判定した場合には(ステップS2810でYES)、処理をステップS2811に移行させ、変更・移動処理を行うことになる。変更・移動処理の詳細については、図33を参照して説明する。
ステップS2804での入力内容の判定結果、その入力内容が、保存処理であると判定した場合には(ステップS2812でYES)、処理をステップS2813に移行させ、保存処理を行うことになる。保存処理の詳細については、図34を参照して説明する。
そして、以上の処理をステップS2814で開発終了指示を受け付けたと判断するまで繰り返すことになる。以上が、画面作成処理の大まかな説明である。
次に、図29を参照して、図28のステップS2801でCRTに表示されるレイアウト画面の一例について説明する。レイアウト画面2900には、利用可能な処理コントロール(即ち、数値結果を表示するテキストボックスなどオンラインGUIの構成に係るコントロール)を表示するツールボックス2901と、画面構成(即ち、テキストボックスやボタンなど)を表示するデザイン領域2902と、各コントロールに係るプロパティを表示するプロパティ表示領域2903等が設けられている。
ユーザは、ツールボックス2901に表示されている処理コントロールをデザイン領域にドラッグアンドドロップ処理をすることにより、希望の位置に配置し、その後、当該処理コントロールのサイズの変更や、プロパティ表示欄に表示されているプロパティを変更することで、画面の作成が可能となっている。以上が、レイアウト画面2900の説明である。
次に、図30を参照して、図28のステップS2805の新規ボタン追加処理について説明する。まず、CPU111は、新規ボタンの追加処理の指示を受け付けると、当該ボタンを配置する画面レイアウトテーブルが既に作成されているかを判定する(ステップS3001)。そして、ステップS3001の判定処理の結果、テーブルがまだ作成されていない(テーブルありでNO)と判定された場合(ステップS3002でNO)、画面レイアウトテーブルを作成する。画面レイアウトテーブルの一例については、図35を参照して説明する。
図35は、画面レイアウトテーブルの一例を示す模式図である。図35の画面レイアウトテーブル3500には、Index3501、コントロール種別3502、デザイン登録名3503、プロパティテーブル3504が設定されている。
コントロール種別3502には、画面に設定されている各コントロールの種別が、デザイン登録名にはコントロールのIDが、プロパティテーブル3504には、当該コントロールの詳細を管理するプロパティテーブルのIDが登録されることになる。以上が、画面レイアウトテーブルの説明である。
図30の説明に戻る。そして、その後、追加されたボタンコントロールの種類を特定する(ステップS3004)。ボタンコントロールの種類としては、「単発検査」「連続検査」「検査停止」「検査設定」及び「終了」などが用意されている。
その後、ボタンコントロールの詳細を示すボタンコントロールテーブル(図36)に、当該追加されたボタンコントロールの詳細を登録するためのレコードを追加し(ステップS3005)、ボタンの基本プロパティを外部メモリ116から読み出し、当該レコードに設定する(ステップS3006)。そして、ステップS3006で読み出したプロパティを図29のプロパティ表示領域2903に表示するとともに、追加されたコントロールをデザイン領域2902に描画する。以上が、図28のステップS2805の新規ボタン追加処理の詳細である。
図36を参照して、ボタンコントロールテーブルの一例について説明する。図36に示すボタンコントロールテーブルT3600には、Index(3601)、基本プロパティ(3602)、実行内容(3603)、カスタム1(3604)、カスタム2(3605)・・・が設定されている。
Index(3601)には、当該コントロールのIndex情報が、基本プロパティ(3602)にはボタンコントロールの基本プロパティ情報が、実行内容(3603)には、当該ボタンが押下指示された場合に実行する実行内容が、カスタム1(3604)、カスタム2(3605)・・・には、ボタンコントロールの位置情報、ボタンのサイズ、形状等の情報が登録されることになる。以上が図36のボタンコントロールテーブルの説明である。
次に、図31を参照して、図28のステップS2807の新規画面追加処理の詳細について説明する。この処理は、図30で説明した新規ボタン追加処理と略同等である。
まず、CPU111は、画像処理結果を表示するための新規画面追加処理の指示を受け付けると、処理の結果を表示するための画面を配置する画面レイアウトテーブルが既に作成されているかを判定する(ステップS3101)。そして、ステップS3101の判定処理の結果、テーブルがまだ作成されていない(テーブルありでNO)と判定された場合(ステップS3102でNO)、画面レイアウトテーブルを作成する(ステップS3103)。
その後、追加された画面に表示するデータを設定する(ステップS3104)。ここで設定するデータは、例えば、当該画面に設定されている画面コントロールにより実行される処理フローでの処理結果であり、具体的には当該処理フローを示す処理フロー・入出力パラメータテーブル中の入力パラメータ若しくは出力パラメータとして設定されている変数が指定される。
その後、画面コントロールの詳細を示す画面コントロールテーブル(図37)に、当該追加されたボタンコントロールの詳細を登録するためのレコードを追加し(ステップS3105)、画面の基本プロパティを外部メモリ116から読み出し、当該レコードに設定する(ステップS3106)。そして、ステップS3106で読み出したプロパティを図29のプロパティ表示領域2903に表示するとともに、追加されたコントロールをデザイン領域2902に描画する。以上が、図28のステップS2807の新規画面追加処理の詳細である。
図37を参照して、画面コントロールテーブルの一例について説明する。画面コントロールテーブルT3700には、Index(3701)、基本プロパティ(3702)、リソース(3703)、カスタム1(3704)、カスタム2(3705)・・・等が設定されている。
Index(3701)には、当該コントロールのIndex情報が、基本プロパティ(3702)には画面コントロールの基本プロパティ情報が、リソースには、当該画面に表示されるデータを保持する変数が、カスタム1(3604)、カスタム2(3605)・・・には、画面コントロールの位置情報、画面コントロールのサイズ、等の情報が登録されることになる。以上が図37の画面コントロールテーブルの説明である。
次に、図32を参照して、図28のステップS2809の新規ボックス追加処理の詳細について説明する。この処理は、図30で説明した新規ボタン追加処理と略同等である。
まず、CPU111は、画像処理結果を表示するための新規ボックス追加処理の指示を受け付けると、処理の結果を表示するためのボックスを配置する画面レイアウトテーブルが既に作成されているかを判定する(ステップS3201)。そして、ステップS3201の判定処理の結果、テーブルがまだ作成されていない(テーブルありでNO)と判定された場合(ステップS3102でNO)、画面レイアウトテーブルを作成する(ステップS3203)。
その後、追加された画面に表示するデータを設定する(ステップS3204)。ここで設定するデータは、例えば、当該画面に設定されているボタンコントロールにより実行される処理フローでの処理結果であり、具体的には当該処理フローを示す処理フロー・入出力パラメータテーブル中の入力パラメータ若しくは出力パラメータとして設定されている変数が指定される。
その後、ボックスコントロールの詳細を示すボックスコントロールテーブル(図38)に、当該追加されたボックスコントロールの詳細を登録するためのレコードを追加し(ステップS3205)、画面の基本プロパティを外部メモリ116から読み出し、当該レコードに設定する(ステップS3206)。そして、ステップS3206で読み出したプロパティを図29のプロパティ表示領域2903に表示するとともに、追加されたコントロールをデザイン領域2902に描画する。以上が、図28のステップS2809の新規ボックス追加処理の詳細である。
図38を参照して、ボックスコントロールテーブルの一例について説明する。ボックスコントロールテーブル3800には、Index(3801)、基本プロパティ(3802)、表示変数(3803)、カスタム1(3804)、カスタム2(3805)・・・等が設定されている。
Index(3801)には、当該コントロールのIndex情報が、基本プロパティ(3802)には画面コントロールの基本プロパティ情報が、表示変数(3803)には、当該画面に表示されるデータを保持する変数が、カスタム1(3804)、カスタム2(3805)・・・には、ボックスコントロールの位置情報、ボックスコントロールのサイズ、等の情報が登録されることになる。以上が図38の画面コントロールテーブルの説明である。
次に、図33を参照して、図28のステップS2811に示す、変更・移動処理の詳細について説明する。CPU111は、変更若しくは移動指示を受け付けた場合に、まず変更対象となるコントロールを特定する(ステップS3301)。その後、当該変更要求を受け付けた種別コントロールの詳細を管理するコントロールテーブルから変更対象のコントロールのレコードを取得する(ステップS3302)。
そしてステップS3302で取得したレコードに対して、ユーザから受け付けた変更内容に従った変更処理を行う(ステップS3303)。例えば、コントロールの移動の場合には、コントロールの座標値を示す情報に対する変更処理が行われることになる。
そして、変更されたプロパティ情報を図29のプロパティ表示領域2903に表示するとともに、変更されたコントロールの再描画処理を行う。以上が、図33ステップS2811の変更・移動処理の詳細である。
図34を参照して、図28のステップS2813の保存処理の詳細について説明する。まず、CPU111は、外部メモリ116に記憶されているソースプログラムに従って、図28〜図33の処理により作成された画面に対する操作指示等により発生するイベントに応じて、設定された処理を実行するためのソースプログラムを作成する(ステップS3401)。そして、そのソースプログラムを外部メモリ116に保存する(ステップS3402)。この処理を行う際に、実際にソースプログラムのコンパイル処理、リンク処理を実行し、その後、デバッグ処理を行わせるようにしても勿論かまわない。
<本発明の他の実施形態>
前述した本発明の実施形態に係るPC110(情報処理装置)を構成する図3の各構成部、並びに、PC110の制御方法を示す図6、図8、図9、図11〜図13の各ステップは、コンピュータのCPU(111)がROM(113)や外部メモリ(116)などに記憶されたプログラムを実行することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
また、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム(実施形態では図6、図8、図9、図11〜図13、図16、図21、図24、図26、図28、図30〜34に示すフローチャートに対応したプログラム)を、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。