以下、図面を参照しながら、本発明の実施の形態について説明する。図1は、本発明の実施の形態係る画像処理システム100の概略構成の一例を示す構成図である。図1に示す通り、画像処理システム100は、情報処理装置110と、入力装置120と、ディスプレイ装置130と、カメラ140と、照明装置コントローラ150と、照明装置160と、外部機器コントローラ170と、検査対象181が載置されたステージ180を有して構成されている。
情報処理装置110は、画像処理システム100における動作を統括的に制御する装置である。ここで、本実施形態においては、情報処理装置110は、実際の製造工程に導入される情報処理装置で動作する画像処理プログラムの開発を支援する装置として適用した例を説明するが、本発明においてはこれに限定されるわけではなく、たとえば、実際の製造工程に導入されている情報処理装置として適用する形態も本発明に含まれる。
情報処理装置110は、所定のケーブル等を介して、検査対象181の撮像(撮影)を行うカメラ140と通信可能に構成されている。また、情報処理装置110は、所定のケーブル等を介して、照明装置160の制御を行う照明装置コントローラ150と通信可能に構成されている。また、情報処理装置110は、所定のケーブル等を介して、ステージ180を制御するプログラマブルコントローラ(PCL)などの外部機器コントローラ170と、あらかじめ設定した通信が可能に構成されている。さらに、情報処理装置110は、所定のケーブル等を介して、それぞれ、入力装置120およびディスプレイ装置130と通信可能に構成されている。すなわち、情報処理装置110は、所定のケーブル等を介して接続された、入力装置120、ディスプレイ装置130、カメラ140、照明装置コントローラ150および外部機器コントローラ170を制御することによって、画像処理システム100における動作を統括的に制御する。
入力装置120は、例えばユーザが情報処理装置110に対して各種の指示の入力を行う際にユーザによって操作されるものであり、ユーザからの入力指示操作に従って、当該入力指示を情報処理装置110に対して入力するものである。この入力装置120は、例えば、キーボード(KB)やポインティングデバイス等で構成されている。
ディスプレイ装置130は、情報処理装置110の制御に従って、各種の画像や各種の情報などを表示画面に表示する。
カメラ140は、情報処理装置110の制御に従って、ステージ180上に載置された検査対象181の撮影(撮像)を行い、撮影により得られた画像データ(電子画像データ)を所定のケーブル等を介して情報処理装置110に送信する。
照明装置コントローラ150は、情報処理装置110の制御に従って、照明装置160の照明を制御する。照明装置160は、照明装置コントローラ150の制御に基づき、検査対象181における検査内容に応じて、当該検査対象181に対する照明の点灯/非点灯の切り替えや明るさの調整等を行う。
外部機器コントローラ170は、情報処理装置110の制御に従って、ステージ180を制御する。ステージ180は、外部機器コントローラ170の制御に基づき、載置された検査対象181を目的の位置に移動させたり、検査対象181の搬入や搬出をしたりする。以上が画像処理システムの構成の一例の説明である。
次に、情報処理装置110のハードウェア構成について説明する。図2は、図1に示す情報処理装置110のハードウェア構成の一例を示す構成図である。図2には、情報処理装置110の内部構成に加えて、当該情報処理装置110と接続される各種装置についても記載している。
情報処理装置110は、図2に示すように、CPU111と、RAM112と、ROM113と、システムバス114と、各種のコントローラ115(115a〜115g)と、外部メモリ116と、を備えている。各種のコントローラ115として、入力コントローラ115a、ビデオコントローラ115b、メモリコントローラ115c、通信I/Fコントローラ115d、115e、及び115g、画像入力コントローラ115fが構成されている。CPU111は、ROM113或いは外部メモリ116に記憶されたプログラム等に基づいてシステムバス114に接続された各デバイスを制御して、情報処理装置110における動作を統括的に制御する。RAM112は、CPU111の主メモリ、ワークエリア等として機能する。CPU111は、処理の実行に際して、必要なプログラム等をRAM112にロードして、プログラムを実行することにより、情報処理装置110における各種の動作を実現する。ROM113には、CPU111の制御プログラムであるBIOS(Basic Input
/ Output System)等が記憶されている。
システムバス114は、CPU111、RAM112、ROM113、入力コントローラ115a、ビデオコントローラ115b、メモリコントローラ115c、通信I/Fコントローラ115d及び115e、115g、画像入力コントローラ115fを、相互に通信可能に接続する。
入力コントローラ115aは、キーボード(KB)やポインティングデバイスなどからなる入力装置120からの入力を制御する。ビデオコントローラ115bは、表示装置であるディスプレイ装置130への表示を制御する。メモリコントローラ115cは、外部メモリ116へのアクセスを制御する。ここで、外部メモリ116は、例えばハードディスク(HD)やフレキシブルディスク(FD)等で構成され、ブートプログラムや、各種のアプリケーションプログラム、編集ファイル、各種のデータや各種の情報等を記憶する。また、外部メモリ116は、オペレーティングシステム(以下、「OS」とする)や、CPU111に後述する各種の処理を実行させるためのプログラム、当該プログラムの制御に従った処理を行う際に使用する各種のテーブルや各種の検査結果情報等も記憶する。
通信I/Fコントローラ115dは、外部機器コントローラ170との通信を制御する。また、通信I/Fコントローラ115eは、照明装置コントローラ150との通信を制御する。画像入力コントローラ115fは、カメラ140と通信を行って、カメラ140から画像データの受信が可能に構成されている。ここで、画像入力コントローラ115fは、コントローラ上で演算処理が可能なハードウェアを搭載しているものであってもよい。さらに、通信I/Fコントローラ115gは、ローカルエリアネットワーク(LAN)190等のネットワークに接続され、当該ネットワークに接続されている各種装置との通信を制御する。
次に、図3を用いて、画像入力コントローラ115fのハードウェア構成について説明する。図3に示す通り、画像入力コントローラ115fは、CPU(演算チップ)301、メモリコントローラ302、入力コントローラ303、オンボードメモリ304を備えている。
CPU(演算チップ)301は、後述する各種の画像処理を実行する。メモリコントローラ302はCPU(演算チップ)301の制御に従って、オンボードメモリ304への各種データの入出力を制御する。入力コントローラ303はカメラ140からの画像データの入力を制御する。オンボードメモリ304はCPU(演算チップ)301の主記憶として機能する。以上が、画像入力コントローラ115fのハードウェア構成の説明である。
次に、情報処理装置110の機能構成の一例について説明する。図4は、図1に示す情報処理装置110の機能構成の一例を示す構成図である。
情報処理装置110には、図4に示すように、テーブル記憶部410、フロー作成部420、ソースコード変換部430、コンパイル部440、(検証)実行部450、データ保存部460、及び、データ入力・出力部470の各機能構成が構成される。また、テーブル記憶部410には、モジュール・ソースコードマスタテーブル411、処理フロー・入出力パラメータテーブル412、ソースコードテーブル413、オブジェクトコードテーブル414、プロジェクトファイルテーブル415、条件式テーブル416、ノード処理フラグテーブル417、フラグ設定テーブル418、及び処理履歴テーブル419が記憶されている。
ここで、本実施形態においては、図4のテーブル記憶部410が、例えば図2に示す外部メモリ116に構成される(一旦、RAM112に構成された後に外部メモリ116に構成される場合も含む)。また、図4のフロー作成部420、ソースコード変換部430、コンパイル部440、(検証)実行部450、データ保存部460及びデータ入力・出力部470が、例えば図2に示すCPU111と、ROM113或いは外部メモリ116に記憶されているプログラムと、から構成される。
図5を参照して、図4のテーブル記憶部410に記憶されるモジュール・ソースコードマスタテーブル411について説明する。図5のモジュール・ソースコードマスタテーブルT500は、モジュール・ソースコードマスタテーブル411の構成の一例を示す構成図である。
図5に示すように、モジュール・ソースコードマスタテーブルT500には、インデックス(Index)501ごとに、画像処理に係る処理モジュール502と、各処理モジュールに対応するソースコード503、またその処理モジュールを実現するためのモジュールに対する初期値504と処理主体505が関連付けられている。このソースコードは、ソースコード変換部430で処理対象のモジュールをソースコードに変換する際に用いられるものである。
次に、図6を参照して、図4のテーブル記憶部410に記憶される処理フロー・入出力パラメータテーブル412について説明する。図6に示す処理フロー・入出力パラメータテーブルT600は、図4に示す処理フロー・入出力パラメータテーブル412の構成の一例を示す構成図である。図6に示すように、処理フロー・入出力パラメータテーブルT600は、インデックス(Index)601ごとに、各モジュール(画像処理アイテム)の処理順である順序602と、各モジュールのモジュール名603と、各モジュールにおける入力パラメータ604及び出力パラメータ605と、各モジュールの実行要否を判定するための実行フラグ606(実行済み情報)と、分岐処理や反復処理の場合に参照する処理フロー・入出力パラメータテーブル412を示す参照先テーブル607と、各モジュールにおける画像処理結果の画像データを示すサムネイル608とが関連付けられている。入力パラメータ604は、各モジュールで使用する各種のデータが格納される画像バッファや記憶領域等を示す。出力パラメータ605は、各モジュールが実行された際の結果画像バッファや各種の処理に用いた閾値等を記憶する記憶領域を示す。
なお、図6に示す処理フロー・入出力パラメータテーブルT600におけるインデックス(Index)601と、図5に示すモジュール・ソースコードマスタテーブルT500におけるインデックス(Index)501とは特に対応させていないが、相互に対応させて各テーブルを作成する形態であってもよい。なお、処理フロー・入出力パラメータテーブルT600において、インデックス(Index)601の「2」は反復処理の一例であり、「4」は分岐処理の一例である。
また、処理フロー・入出力パラメータテーブルT610(ループテーブル)は反復処理を行う場合に参照され、処理フロー・入出力パラメータテーブルT620(分岐テーブル)は分岐処理を行う場合に参照される。処理フロー・入出力パラメータテーブルT610及び処理フロー・入出力パラメータテーブルT620の構成は前述した処理フロー・入出力パラメータテーブルT600と同様である。なお、処理フロー・入出力パラメータテーブルT620は、判定が真であった場合に参照される処理フロー・入出力パラメータテーブルT620−1(分岐テーブル(THEN))と、判定が真でなかった場合に参照される処理フロー・入出力パラメータテーブルT620−2(分岐テーブル(ELSE))に分かれている。判定結果によって、参照する処理フロー・入出力パラメータテーブル412を決定する。
ソースコードテーブル413は、処理フロー・入出力パラメータテーブル412に記憶されているモジュールについて、ソースコード変換部430でモジュール・ソースコードマスタテーブル411を用いてソースコードに変換し登録している、全てのモジュール或いは一部のモジュールにおけるソースコードを記憶する。
オブジェクトコードテーブル414は、ソースコードテーブル413に記憶されているソースコードをコンパイル部440で変換した、実行可能なモジュールであるオブジェクトコードを記憶する。プロジェクトファイルテーブル415は、画像処理に係る初期設定パラメータや、処理フローシーケンス、ソースコード、入出力パラメータ等を記憶する。また条件式テーブル416は、「条件分岐処理」モジュールが設定された際の、条件式等を記憶し、ノード処理フラグテーブル417は、「並列分岐処理」モジュールが設定された際の、呼び出し側のノード名等を記憶する。
フラグ設定テーブル418は、図5のフラグ設定テーブルT510に構成の一例を示す。図5に示すように、フラグ設定テーブルT510は、各モジュールの追加、変更、削除、設定変更等が行われる度に処理フロー(画像処理フロー)を自動実行するか否かを示す自動実行フラグ511と、自動実行する場合の実行モードを示す実行モード512と、自動実行された場合にサムネイル画像を表示するか否かを示すサムネイル表示フラグ513から構成される。実行モード512は、「前半実行」か「後半実行」が格納できる。自動実行フラグ511及びサムネイル表示フラグ513は「ON」か「OFF」が格納される。
次に、図7を参照して、図4のテーブル記憶部410に記憶される処理履歴テーブル419について説明する。処理履歴テーブル419は、画像処理が実行された場合のモジュールの実行順を示すテーブルである。図7の処理履歴テーブルT700は、処理履歴テーブル419の構成の一例を示す構成図である。図7に示すように、処理履歴テーブルT700には、インデックス(Index)701ごとに、各モジュールのモジュール名702と、各モジュールにおける画像処理結果の画像データである処理結果画像703が関連付けられている。
続いて、図4のフロー作成部420、ソースコード変換部430、コンパイル部440、実行部450、データ保存部460、及び、データ入力・出力部470について説明する。
フロー作成部420は、モジュール・ソースコードマスタテーブル411に含まれているモジュールの処理シーケンスを管理する処理フロー・入出力パラメータテーブル412の作成等と、処理フロー描画領域(後述する図9の902)へのモジュールの描画を行う機能を有する。
ソースコード変換部430は、フロー作成部420により作成された処理フロー・入出力パラメータテーブル412に記憶されている各モジュールの処理データをモジュール・ソースコードマスタテーブル411と照合して、各モジュールをソースコードに変換し、ソースコードテーブル413に記憶する機能を有する。
なお、図5や図6に示すテーブルのモジュールには、画像に対する処理だけでなく、画像を取得するための事前処理や、処理結果を出力するための事後処理を含む外部機器に対する処理などを含めても勿論構わない。例えば、カメラ140の撮像条件を設定する制御指令や、照明装置160を制御するための照明装置コントローラ150への制御指令、或いは、ステージの移動などを制御するための外部機器コントローラ170への制御指令、LAN上に接続されたPCにデータを送信する等の制御指令を行うものであってもよい。
コンパイル部440は、ソースコードテーブル413に記憶されているソースコードから実行可能なオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコードテーブル414に記憶する機能を有する。
なお、コンパイル部440が行うコンパイルには、デバッグ・コンパイルとリリース・コンパイルの2つのタイプがある。ここで、本実施形態においては、処理フロー作成中には、ソースコードレベルでのステップ実行を可能とするデバッグ・コンパイルを行い、データ保存時には、オンラインで利用可能なファイルを生成するリリース・コンパイルを行う。この際、デバッグ・コンパイル及びリリース・コンパイルの両者は、同じ変換手法で生成されたソースコードを参照するものとする。
(検証)実行部450は、コンパイル部440により作成されたオブジェクトコードテーブル414に記憶されているオブジェクトコードを実行し、処理結果表示領域(後述する図9の906)と処理フロー・入出力パラメータテーブル412を更新する機能を有する。
データ保存部460は、例えば、RAM112にあるソースコードテーブル413、オブジェクトコードテーブル414及びプロジェクトファイルテーブル415を外部メモリ116に出力して、データの保存処理を行う。
データ入力・出力部470は、各モジュールで使用する入出力パラメータを管理する機能を有する。
次に、情報処理装置110によって実行される画像処理プログラム作成のための一連の処理手順について説明する。図8は、情報処理装置110のCPU111によって行われる、一連の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
まず、ステップS101において、情報処理装置110のCPU111は、例えば、入力装置120からの入力指示に基づいて、図9に示す画像処理システムの開発を行うための画像処理プロジェクト開発画面900をディスプレイ装置130に表示する処理を行う。(操作受付手段)
図9は、画像処理プロジェクト開発画面900の一例を示す構成図である。図9に示す画像処理プロジェクト開発画面900には、利用可能な処理ユニット(即ち、「カメラ取込」等の画像処理に係る各モジュール、画像処理アイテム)を表示する処理モジュール一覧901と、画像処理の実行順序(即ち、各モジュールの実行順序)をフローチャート形式で処理フロー(画像処理フロー)を描画する処理フロー描画領域902と、各画像処理(即ち、各モジュールの処理)で実行した結果画像を表示するサムネイル画像表示領域903と、処理フロー全体の結果画像を表示する最終結果画像表示領域912と、メニューバー910には画像処理プログラムの開発を終了する際に操作される保存終了ボタン911等と、ツールバー907には処理フロー全体を実行する実行ボタン908や、処理フロー上でモジュールの追加、移動、削除、設定変更が選択されたときに各モジュールを実行するかどうかを選択する自動実行フラグボタン909等が設けられている。また、図9に示す画像処理プロジェクト開発画面900には、例えば、新規モジュールの登録時もしくはパラメータの編集時等に、処理フロー描画領域902のフローチャートの各ステップ(即ち、各モジュール)で利用するパラメータを設定するパラメータ編集画面904と、そのパラメータの設定で実行された結果画像を表示する調整結果画像表示領域905が表示される。図9に示す例では、パラメータ編集画面904には、「二値化」のモジュールに係るパラメータを設定する画面が示されている。以上が、画像処理プロジェクト開発画面900の構成の一例の説明である。
図8の説明に戻る。ステップS101の処理が終了すると、CPU111は処理をステップS102に進める。ステップS102では、情報処理装置110のCPU111は、入力装置120からの入力指示に基づいて、ステップS101で表示された画像処理プロジェクト開発画面900を用いて新規に画像処理プログラムを開発するか否かを判定する。新規に画像処理プログラムを開発すると判定された場合には、ステップS104に処理を進め、そうでない場合には、ステップS103に処理を進める。
ステップS103に進むと、情報処理装置110のCPU111は、外部メモリ116に保存されているプロジェクトファイルテーブル415を読み出して、これをRAM112に記憶する。つまり、既に作成している処理フローの編集を行うことになる。
ステップS104では、情報処理装置110のCPU111は、ステップS103で読み出した処理フローを実行する処理を行う。起動処理の詳細は、後述する図10に示す。
ステップS105では、情報処理装置110のCPU111は、入力装置120からの入力指示(具体的には、ステップS101で表示された画像処理プロジェクト開発画面900に対する入力指示)があったか否かを判定する。入力指示があったと判定した場合には、ステップS106に処理を進め、そうでない場合には、入力指示があるまで待機する。
ステップS106に進むと、情報処理装置110のCPU111は、入力装置120から受け付けた入力指示に基づいて、選択された処理内容の判定処理を行う。このステップS106で判定される処理内容としては、本例では、「追加処理」、「変更処理」、「移動処理」、「削除処理」、「実行処理」、「動作設定処理」、「保存処理」である。なお、ここで挙げた処理内容は一例を示したものであり、その他の処理内容をステップS106で判定することも勿論可能である。
ここで、ステップS106の判定処理では、CPU111は、例えば、図9に示す画像処理プロジェクト開発画面900において以下の入力がなされることによって、上述した各処理を判定するようにしている。
まず、図9に示す処理モジュール一覧901からいずれかのモジュール(画像処理アイテム)が選択され、処理フロー描画領域902の処理フローシーケンスの任意の位置にドラッグ&ドロップされると、情報処理装置110のCPU111は、モジュールの「追加処理」のイベントであると判定する。また、処理フロー描画領域902に既に登録されているモジュールがユーザからの操作によって指定され、パラメータ編集画面904が表示されると、情報処理装置110のCPU111は、モジュールのパラメータの「変更処理」のイベントであると判定する。また、処理フロー描画領域902に既に登録されているモジュールが他のモジュールの間にドラッグ&ドロップされると、情報処理装置110のCPU111は、モジュールの「移動処理」のイベントであると判定する。また、処理フロー描画領域902に既に登録されているモジュールを選択し、削除キーが押下される、若しくはあるモジュールを指定して不図示のポップアップメニューを表示させ、削除メニュー項目が選択(クリック指示)されると、情報処理装置110のCPU111は、モジュールの「削除処理」のイベントであると判定する。また、画像処理プロジェクト開発画面900の実行ボタン908が選択されると、情報処理装置110のCPU111は、処理フロー描画領域902に設定された処理フローの「実行処理」のイベントであると判定する。また、ツールバー907の「動作設定」が選択されると、情報処理装置110のCPU111は、「動作設定処理」のイベントであると判定する。また、メニューバー910の保存終了ボタン911やツールバー907の「保存」が選択されると、情報処理装置110のCPU111は、処理フロー描画領域902に設定された処理フローの「保存処理」のイベントであると判定する。
なお、本実施形態ではこのようにして処理内容の判定を行うようにしているが、これは一例であり、例えばツールバー907に「新規追加」などの処理内容に応じたアイコン等の機能を設けてもよく、上述した形態に限定されるものではない。
続いて、ステップS107において、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、モジュールの「追加処理」であるか否かを判定する。「追加処理」であると判定した場合には、ステップS108に処理を進め、そうでない場合には、ステップS109に処理を進める。
ステップS108では、情報処理装置110のCPU111は、選択されたモジュールの追加処理を行う(変更受付手段)。追加処理の詳細は、後述する図11に示す。そして、ステップS108の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS109では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、モジュールのパラメータの「変更処理」であるか否かを判定する。「変更処理」であると判定した場合には、ステップS110に処理を進め、そうでない場合には、ステップS111に処理を進める。
ステップS110では、情報処理装置110のCPU111は、選択されたモジュールのパラメータの変更処理を行う(変更受付手段)。変更処理の詳細は、後述する図12に示す。そして、ステップS110の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS111では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、モジュールの「移動処理」であるか否かを判定する。「移動処理」であると判定した場合には、ステップS112に処理を進め、そうでない場合には、ステップS113に処理を進める。
ステップS112では、情報処理装置110のCPU111は、選択されたモジュールの移動処理を行う(変更受付手段)。移動処理の詳細は、後述する図13に示す。そして、ステップS112の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS113では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、モジュールの「削除処理」であるか否かを判定する。「削除処理」であると判定した場合には、ステップS114に処理を進め、そうでない場合には、ステップS115に処理を進める。
ステップS114では、情報処理装置110のCPU111は、選択されたモジュールの削除処理を行う(変更受付手段)。削除処理の詳細は、後述する図14に示す。そして、ステップS114の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS115では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、処理フローの「実行処理」であるか否かを判定する。「実行処理」であると判定された場合には、ステップS116に処理を進め、そうでない場合には、ステップS117に処理を進める。
ステップS116では、情報処理装置110のCPU111は、処理フロー描画領域902に設定された処理フローの実行処理を行う。実行処理の詳細は、後述する図15に示す。そして、ステップS116の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS117では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、処理フローの「動作設定処理」であるか否かを判定する。「動作設定処理」であると判定された場合には、ステップS118に処理を進め、そうでない場合には、ステップS119に処理を進める。
ステップS118では、情報処理装置110のCPU111は、処理フローの動作設定を受け付ける。特に、フラグ設定テーブル418に格納する設定を受け付ける。不図示の設定受付画面を表示して、ユーザから設定内容の入力を受け付けてもよいし、他の方法でもよい。受け付けた内容に基づいて、フラグ設定テーブル418を更新する。そして、ステップS118の処理が終了すると、ステップS105に戻り、入力装置120から次の入力指示があるまで待機する。
ステップS119では、情報処理装置110のCPU111は、ステップS106で判定した処理内容が、処理フローの「保存処理」であるか否かを判定する。「保存処理」であると判定された場合には、ステップS120に処理を進め、そうでない場合には、ステップS105に処理を戻す。
ステップS120では、情報処理装置110のCPU111は、画像処理プロジェクト開発画面900で設定された内容の保存処理を行う。つまり、RAM112に展開されているプロジェクトファイルテーブル415を外部メモリ116に保存する。そして、ステップS120の処理が終了すると、画像処理プロジェクト開発画面900を終了する。
次に、図10を参照して図8のステップS104の「起動処理」の詳細について説明する。図10は、情報処理装置110のCPU111によって行われる、「起動処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS201では、情報処理装置110のCPU111は、マスタ画像があるか否かを判定する。マスタ画像はカメラ140からあらかじめ取り込んだ画像データであり、外部メモリ116に記憶されている。マスタ画像があると判定された場合には、ステップS202に処理を進め、そうでない場合には、ステップS203に処理を進める。
ステップS202では、情報処理装置110のCPU111は、外部メモリ116に記憶されたマスタ画像を取得し、RAM112に展開する。一方、ステップS203では、情報処理装置110のCPU111は、マスタ画像がないので、カメラ140に対して検査対象181の撮影を指示し、撮影された画像データを受信して、RAM203に展開する。
ステップS204では、情報処理装置110のCPU111は、自動実行するか否かを判定する。具体的には、自動実行フラグ511に「ON」が格納されているか否かを判定する。「ON」が格納されていれば自動実行を行い、「OFF」が格納されていれば自動実行を行わない。自動実行をすると判定された場合には、ステップS205に処理を進め、そうでない場合には、起動処理を終了し、呼び出し元に処理を戻す。
ステップS205では、情報処理装置110のCPU111は、処理フロー描画領域902の処理フロー全体を実行する(画像処理アイテム実行手段)。実行処理の詳細は、後述する図15に示す。実行処理を終了したら起動処理を終了し、呼び出し元に処理を戻す。
次に、図11を参照して図8のステップS108の「追加処理」の詳細について説明する。図11は、情報処理装置110のCPU111によって行われる、「追加処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS301では、情報処理装置110のCPU111は、ステップS106において処理モジュール一覧901で選択されたモジュールを特定する。そして、ステップS302では、情報処理装置110のCPU111は、ステップS106において指定された、モジュールの追加先を特定する。なお、ステップS301のモジュールの特定処理とステップS302の追加先の特定処理との処理の順番を、逆にする形態であってもよい。
ステップS303では、情報処理装置110のCPU111は、処理フロー描画領域902に描画(表示)されている処理フローに、特定したモジュールを追加し、処理フロー描画領域902を再描画(再表示)する処理を行う。
ステップS304では、情報処理装置110のCPU111は、ステップS302で特定したモジュールの追加処理に伴って、処理フロー・入出力パラメータテーブル412の更新を行う。例えば、図23に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図24に示すように「二値化」モジュールを新しく追加するとする。このときに、「二値化」モジュールは、「ループ」モジュールと「ラベリング」モジュールの間に挿入する形で追加するので、図25に示す処理フロー・入出力パラメータテーブルT600の通りに更新する。具体的には、モジュール・ソースコードマスタテーブル411で得られた情報を基に、「U00003:二値化」を追加し、INDEX601と順序602を振り直す。入力パラメータ604と出力パラメータ605を設定し直す。そして、「二値化」モジュールのレコードの実行フラグ606に「ON」を格納する。なお、このステップでは、他の実行フラグ606は更新しない。
ステップS305では、情報処理装置110のCPU111は、自動実行するか否かを判定する。具体的には、自動実行フラグ511に「ON」が格納されているか否かを判定する。「ON」が格納されていれば自動実行を行い、「OFF」が格納されていれば自動実行を行わない。自動実行をすると判定された場合には、ステップS306に処理を進め、そうでない場合には、追加処理を終了し、呼び出し元に処理を戻す。
ステップS306では、情報処理装置110のCPU111は、探索実行処理を行う。探索実行処理では、変更があったモジュールまでを再実行、または変更があったモジュールから再実行するための処理を行う(画像処理アイテム実行手段)。つまり、全体を実行せずに一部だけを実行するようにすることで、処理負荷の軽減を図っている。探索実行処理の詳細は、後述する図17に示す。探索実行処理が終了したら、追加処理を終了し、呼び出し元に処理を戻す。
次に、図12を参照して図8のステップS110の「変更処理」の詳細について説明する。図12は、情報処理装置110のCPU111によって行われる、「変更処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS401では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS402では、情報処理装置110のCPU111は、画像処理プロジェクト開発画面900にパラメータ編集画面904を表示する。パラメータ編集画面904では、ステップS401で特定されたモジュールのパラメータ設定を受け付ける。
ステップS403では、情報処理装置110のCPU111は、入力装置120から任意のパラメータが変更されたか否かを判定する。パラメータが変更されたと判定された場合には、ステップS404に処理を進め、そうでない場合には、パラメータが変更されるまで待機する。
ステップS404では、情報処理装置110のCPU111は、変更のあったパラメータを特定し、当該パラメータを設定した処理結果を調整結果画像表示領域905に表示する。そして、ステップS405では、情報処理装置110のCPU111は、変更のあったパラメータを設定するか否かを判定する。具体的には、パラメータ編集画面904に備えられた不図示の確定ボタンが押下されたか否かを判定する。パラメータを設定すると判定された場合には、ステップS406に処理を進め、そうでない場合には、待機する。
ステップS406では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図27に示すように「二値化」モジュールのパラメータを変更するとする。このとき、変更を受け付けたパラメータに従って、図28に示す処理フロー・入出力パラメータテーブルT600の「二値化」モジュールのレコードを更新する。なお、このステップでは、実行フラグ606は更新しない。
ステップS407では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS408に処理を進め、そうでない場合には、変更処理を終了し、呼び出し元に処理を戻す。
ステップS408では、情報処理装置110のCPU111は、探索実行処理を行う(画像処理アイテム実行手段)。探索実行処理の詳細は、後述する図17に示す。探索実行処理が終了したら、変更処理を終了し、呼び出し元に処理を戻す。
次に、図13を参照して図8のステップS112の「移動処理」の詳細について説明する。図13は、情報処理装置110のCPU111によって行われる、「移動処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS501では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS502では、情報処理装置110のCPU111は、ステップS106において指定された、モジュールの移動先を特定する。
ステップS503では、情報処理装置110のCPU111は、処理フロー描画領域902において、ステップS502で特定された移動先に、ステップS501で特定されたモジュールを移動させる。
ステップS504では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図29に示すように「二値化」モジュールを「ラベリング」モジュールの下に移動させるとする。このとき、図30に示す処理フロー・入出力パラメータテーブルT600の通り、モジュール名603「U00003:二値化」を「U00004:ラベリング」の下にレコードを移動する。そして、INDEX601と順序602を振り直す。また、必要があれば入力パラメータ604と出力パラメータ605を設定し直す。なお、このステップでは、実行フラグ606は更新しない。
ステップS505では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS506に処理を進め、そうでない場合には、移動処理を終了し、呼び出し元に処理を戻す。
ステップS506では、情報処理装置110のCPU111は、探索実行処理を行う(画像処理アイテム実行手段)。探索実行処理の詳細は、後述する図17に示す。探索実行処理が終了したら、移動処理を終了し、呼び出し元に処理を戻す。
次に、図14を参照して図8のステップS114の「削除処理」の詳細について説明する。図14は、情報処理装置110のCPU111によって行われる、「削除処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS601では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS502では、情報処理装置110のCPU111は、ステップS601で特定されたモジュールを処理フロー描画領域902から削除する。
ステップS603では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図31に示すように「二値化」モジュールを削除させるとする。このとき、図31に示す処理フロー・入出力パラメータテーブルT600の通り、モジュール名603「U00003:二値化」を削除して、INDEX601と順序602を振り直す。また、必要があれば入力パラメータ604と出力パラメータ605を設定し直す。なお、このステップでは、実行フラグ606は更新しない。
ステップS604では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS605に処理を進め、そうでない場合には、削除処理を終了し、呼び出し元に処理を戻す。
ステップS605では、情報処理装置110のCPU111は、探索実行処理を行う(画像処理アイテム実行手段)。探索実行処理の詳細は、後述する図17に示す。探索実行処理が終了したら、削除処理を終了し、呼び出し元に処理を戻す。
次に、図15を参照して図8のステップS116の「実行処理」の詳細について説明する。図15は、情報処理装置110のCPU111によって行われる、「実行処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS701では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412に格納された情報と、モジュール・ソースコードマスタテーブル411に格納された情報に基づいて、ソースコードに変換し、ソースコードテーブル413に記憶する。
ステップS702では、情報処理装置110のCPU111は、ステップS701で変換されたソースコードに対して、デバッグ・コンパイルを行い、オブジェクトコードを生成し、オブジェクトコードテーブル414に記憶する。そして、オブジェクトコードテーブル414に記憶されたオブジェクトコードを実行して、構築した処理フロー全体を実行する(シミュレーションを行う)。処理フローの実行にあたっては、カメラ140に対して検査対象181の撮影を指示して取得した画像データを使用してもよいし、マスタ画像を使用してもよい。
ステップS703では、情報処理装置110のCPU111は、ステップS702で実行されたモジュールの順序と処理結果の画像データとを処理履歴テーブル419に記憶する。ステップS704では、情報処理装置110のCPU111は、ステップS703で更新された処理履歴テーブル419に基づいて、処理フロー描画領域902に表示する処理フロー上に処理ルートの軌跡を識別可能に表示する。つまり、ステップS702で画像処理を実行した結果、どのような経路を通って画像処理がなされたのかを表示する。こうしておくことで、処理フローのどこが問題なのかを特定しやすい。
ステップS705では、情報処理装置110のCPU111は、処理履歴テーブル419に基づいて、処理フロー描画領域902のサムネイル画像表示領域903に、各モジュールにおける処理結果をサムネイル画像として表示する。こうしておくことで、軌跡の表示と同様に、処理フローの問題点を発見しやすくなる。ステップS704とステップS705における軌跡とサムネイル画像の表示結果は、図16に示すような表示となる。この場合、「ループ」モジュールを通り、「分岐」モジュールで「U00006:文字表示」の方を通った軌跡となっている。また、画像処理がなされた「メディアン」モジュールでは、当該「メディアン」モジュールの処理結果であるサムネイル画像がサムネイル画像表示領域903に表示される。なお、このサムネイル画像を選択すると、拡大された画像が表示できる。また、「ループ」がなされていると、複数回「メディアン」モジュールで処理されることになるので、各回の処理結果をサムネイル画像に対する選択指示に応じて表示するようにしてもよい。
ステップS706では、情報処理装置110のCPU111は、ステップS702で実行された画像処理の最終結果の画像データを最終結果画像表示領域912に表示する。そして、実行処理を終了し、呼び出し元に処理を戻す。
次に、図17を参照して図11のステップS308等の「探索実行処理」の詳細について説明する。図17は、情報処理装置110のCPU111によって行われる、「探索実行処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS801では、情報処理装置110のCPU111は、処理フローの変更箇所に基づいて、画像処理の基点となるモジュールを探索するための処理を行う(基点アイテム特定手段)。未実行探索処理の詳細は、後述する図18に示す。
ステップS802では、情報処理装置110のCPU111は、ステップS801で決定した基点となるモジュール(基点モジュール)よりも後に実行するモジュールの実行フラグ606を「OFF」にする処理を行う(実行済み情報保存手段)。実行フラグOFF処理の詳細は、後述する図19に示す。
ステップS803では、情報処理装置110のCPU111は、実行モードが「前半実行」なのか「後半実行」なのかを判定する。具体的には、図5に示すフラグ設定テーブルT510の実行モード512に格納されている情報に基づいて判定する。「前半実行」であると判定された場合には、ステップS804に処理を進め、「後半実行」であると判定された場合には、ステップS805に処理を進める。
ステップS804では、情報処理装置110のCPU111は、ステップS801で決定された基点モジュールまでの処理フローを実行する処理を行う(画像処理実行手段)。前半実行処理の詳細は、後述する図20に示す。
ステップS805では、情報処理装置110のCPU111は、ステップS801で決定された基点モジュールから処理フローを実行する処理を行う(画像処理実行手段)。後半実行処理の詳細は、後述する図21に示す。
ステップS806では、情報処理装置110のCPU111は、ステップS804またはステップS805で実行された最終的な処理結果の画像データを最終結果画像表示領域912に表示する。表示が完了したら探索実行処理を終了し、呼び出し元に処理を戻す。
次に、図18を参照して図17のステップS801の「未実行探索処理」の詳細について説明する。図18は、情報処理装置110のCPU111によって行われる、「未実行探索処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS901では、情報処理装置110のCPU111は、前述した図13の移動処理で、モジュールが当該モジュールよりも下流に移動されたか否かを判定する。つまり、図29に示すように「二値化」モジュールを「ラベリング」モジュールの下に移動するような場合が該当する。モジュールが当該モジュールよりも下流に移動されたと判定された場合には、ステップS902に処理を進め、そうでない場合には、ステップS903に処理を進める。
ステップS902では、情報処理装置110のCPU111は、下流に移動したモジュールが元々配置されていた場所の1つ下にあるモジュールを参照する。図29を用いて説明すると、元々「二値化」モジュールは「ラベリング」モジュールより1つ上に配置されていた。これを「ラベリング」モジュールの1つ下に移動すると、「二値化」モジュールが元々配置されていた場所の1つ下にあるモジュール、つまり「ラベリング」モジュールが参照される。
ステップS903では、情報処理装置110のCPU111は、前述した図14の削除処理で、モジュールが削除されたか否かを判定する。つまり、図31に示すように「二値化」モジュールが削除された場合が該当する。モジュールが削除されたと判定された場合には、ステップS904に処理を進め、そうでない場合には、ステップS905に処理を進める。
ステップS904では、情報処理装置110のCPU111は、削除されたモジュールが元々配置されていた場所の1つ下にあるモジュールを参照する。図31を用いて説明すると、元々「二値化」モジュールは「ラベリング」モジュールより1つ上に配置されていた。これを削除すると、「二値化」モジュールが元々配置されていた場所の1つ下にあるモジュール、つまり「ラベリング」モジュールが参照される。
ステップS905では、情報処理装置110のCPU111は、ステップS301またはステップS401またはステップS501で特定されたモジュールを参照する。
ステップS906では、情報処理装置110のCPU111は、参照中のモジュールの実行フラグ606が「OFF」であるか否かを判定する。実行フラグ606が「OFF」であると判定された場合には、ステップS907に処理を進め、そうでない場合には、ステップS909に処理を進める。
ステップS907では、情報処理装置110のCPU111は、処理フロー中で最も上流の先頭のモジュール(先頭モジュール)であるか否かを判定する。先頭のモジュールであると判定された場合には、ステップS909に処理を進め、そうでない場合には、ステップS908に処理を進める。
ステップS908では、情報処理装置110のCPU111は、参照中のモジュールの1つ上のモジュールを参照し、ステップS906に処理を進める。こうして繰り返し実行フラグが「OFF」でないモジュールを上流に向かって探索していくことで、どこを基点とすべきなのかを決定する。
ステップS909では、情報処理装置110のCPU111は、参照中のモジュールを基点モジュールとして決定する(画像処理アイテム特定手段)。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600を前提として、図29のように「二値化」モジュールを下に移動したとする。この場合、ステップS902で「ラベリング」モジュールが参照される。次に、ステップS906で参照中の「ラベリング」モジュールの実行フラグ606を確認する。図26に示す通り、「ラベリング」モジュールの実行フラグ606は「ON」であるため、ステップS909に進み、この「ラベリング」モジュールを基点モジュールとして決定する。処理が終了したら、未実行探索処理を終了し、呼び出し元に処理を戻す。
次に、図19を参照して図17のステップS802の「実行フラグOFF処理」の詳細について説明する。図19は、情報処理装置110のCPU111によって行われる、「実行フラグOFF処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1001では、情報処理装置110のCPU111は、図18のステップS909で決定した基点モジュールを参照する。
ステップS1002では、情報処理装置110のCPU111は、参照中のモジュールが分岐モジュールであるか否かを判定する。具合的には、処理フロー・入出力パラメータテーブルT600を参照して、参照中のモジュールが分岐モジュールであるか否かを判定する。分岐モジュールであると判定された場合には、ステップS1003に処理を進め、そうでない場合には、ステップS1008に処理を進める。
ステップS1003では、情報処理装置110のCPU111は、分岐モジュールの参照先テーブル607が示す分岐テーブル(THEN)を参照する。例えば、図6に示す処理フロー・入出力パラメータテーブルT600を用いて説明すると、分岐モジュールである「U00005:分岐」が参照されると、参照先テーブル607に格納された分岐テーブルのうち、分岐テーブル(THEN)を示す処理フロー・入出力パラメータテーブルT620−1を参照する。
ステップS1004では、情報処理装置110のCPU111は、ステップS1003で参照している分岐テーブル(THEN)のすべてのレコードの実行フラグ626を「OFF」に変更する。
ステップS1005では、情報処理装置110のCPU111は、分岐モジュールの参照先テーブル607が示す分岐テーブル(ELSE)を参照する。例えば、図6に示す処理フロー・入出力パラメータテーブルT600を用いて説明すると、分岐モジュールである「U00005:分岐」が参照されると、参照先テーブル607に格納された分岐テーブルのうち、分岐テーブル(ELSE)を示す処理フロー・入出力パラメータテーブルT620−2を参照する。
ステップS1006では、情報処理装置110のCPU111は、ステップS1005で参照している分岐テーブル(ELSE)のすべてのレコードの実行フラグ626を「OFF」に変更する。
ステップS1007では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412のうち、現在参照しているモジュールの1つ下のモジュールを参照し、ステップS1002に処理を戻す。
ステップS1008では、情報処理装置110のCPU111は、参照中のモジュールがループモジュールであるか否かを判定する。具合的には、処理フロー・入出力パラメータテーブルT600を参照して、参照中のモジュールがループモジュールであるか否かを判定する。ループモジュールであると判定された場合には、ステップS1009に処理を進め、そうでない場合には、ステップS1011に処理を進める。
ステップS1009では、情報処理装置110のCPU111は、ループモジュールの参照先テーブル607が示すループテーブルを参照する。例えば、図6に示す処理フロー・入出力パラメータテーブルT600を用いて説明すると、ループモジュールである「U00001:ループ」が参照されると、参照先テーブル607に格納された分岐テーブルのうち、ループテーブルを示す処理フロー・入出力パラメータテーブルT610を参照する。
ステップS1010では、情報処理装置110のCPU111は、ステップS1009で参照しているループテーブルのすべてのレコードの実行フラグ616を「OFF」に変更する。更そして、ステップS1007に処理を進める。
ステップS1011では、情報処理装置110のCPU111は、参照中のモジュールの実行フラグ606を「OFF」に変更する。こちらも、処理フロー描画領域902において、実行フラグ626を「OFF」にしたモジュールのサムネイル表示を未実行状態であることがわかるようなサムネイル画像に変更する。詳細な処理については、ステップS1004で前述した通りである。ステップS1012では、情報処理装置110のCPU111は、基点モジュールよりも下流のモジュールがすべて終了したか否かを判定する。すべて終了していると判定された場合には、実行フラグOFF処理を終了し、呼び出し元に処理を戻し、そうでない場合には、ステップS1007に処理を進める。
このように、基点モジュールよりも下流に配置されたモジュールの実行フラグ606をすべて「OFF」にする。つまり、処理フローを変更することで影響を受けるのは、基点モジュールよりも下流に配置されたモジュールであるので、これらのモジュールの実行フラグ606を「OFF」に変更する。
次に、図20を参照して図17のステップS804の「前半実行処理」の詳細について説明する。図20は、情報処理装置110のCPU111によって行われる、「前半実行処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1101では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412に格納された先頭モジュールを参照する。つまり、処理フローの最初のモジュールを参照することになる。
ステップS1102では、情報処理装置110のCPU111は、参照しているモジュールの実行フラグ606が「OFF」であるか否かを判定する。つまり、参照中のモジュールが実行済みであるか否かを判定する。すでに実行済みであるならば、再実行してしまうと負荷がかかってしまう。なるべく実行済みであるのなら再実行をしないほうがよいので、ステップS1102において実行フラグ606が「OFF」か否かを判定している。実行フラグ606が「OFF」であると判定された場合には、ステップS1104に処理を進め、そうでない場合には、ステップS1103に処理を進める。
ステップS1103では、情報処理装置110のCPU111は、参照中のモジュールの次のモジュールを参照する。つまり、参照中のモジュールの1つ下に配置されたモジュールを参照する。そして、ステップS1102に処理を戻して、再度実行フラグ606が「OFF」であるか否かを判定する。
実行フラグが「OFF」であるモジュールが見つかったので、以降の処理で当該モジュールの実行(シミュレーション)を行う。ステップS1104では、情報処理装置110のCPU111は、参照中のモジュールが分岐モジュールであるか否かを判定する。具合的には、処理フロー・入出力パラメータテーブルT600を参照して、参照中のモジュールが分岐モジュールであるか否かを判定する。分岐モジュールであると判定された場合には、ステップS1105に処理を進め、そうでない場合には、ステップS1113に処理を進める。
ステップS1105では、情報処理装置110のCPU111は、モジュール・ソースコードマスタテーブル411と処理フロー・入出力パラメータテーブル412に基づいて、参照中の分岐モジュールを実行する。実行に際して、画像データが必要である場合には、カメラ140から取得するか、マスタ画像を使用する。ステップS1106では、情報処理装置110のCPU111は、分岐モジュールの判定結果が真か否かを判定する。判定結果が真であると判定された場合には、ステップS1107に処理を進め、そうでない場合には、ステップS1108に処理を進める。
ステップS1107では、情報処理装置110のCPU111は、判定結果が真であったので、分岐テーブル(THEN)の先頭モジュールを参照する。具体的には、処理フロー・入出力パラメータテーブルT620−1の先頭モジュールである、「U00006:文字表示」を参照する。一方、ステップS1108では、情報処理装置110のCPU111は、判定結果が真ではなかったので、分岐テーブル(ELSE)の先頭モジュールを参照する。具体的には、処理フロー・入出力パラメータテーブルT620−2の先頭モジュールである、「U00007:文字表示」を参照する。
ステップS1109では、情報処理装置110のCPU111は、参照しているモジュールの実行を行う。モジュール実行処理の詳細は、後述する図22に示す。
ステップS1110では、情報処理装置110のCPU111は、参照中の分岐テーブルに格納されたモジュールをすべて処理したか否かを判定する。すべて処理したと判定された場合には、ステップS1112に処理を進め、そうでない場合には、ステップS1111に処理を進める。
ステップS1111では、情報処理装置110のCPU111は、参照中のモジュールの次に実行するモジュールを参照する。そして、ステップS1109に処理を進める。
ステップS1112では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412のうち、現在参照しているモジュールの次に実行すべきモジュールを参照する。そして、ステップS1104に処理を進める。
ステップS1113では、情報処理装置110のCPU111は、参照中のモジュールがループモジュールであるか否かを判定する。具合的には、処理フロー・入出力パラメータテーブルT600を参照して、参照中のモジュールがループモジュールであるか否かを判定する。ループモジュールであると判定された場合には、ステップS1114に処理を進め、そうでない場合には、ステップS1122に処理を進める。
ステップS1114では、情報処理装置110のCPU111は、モジュール・ソースコードマスタテーブル411と処理フロー・入出力パラメータテーブル412に基づいて、参照中のループモジュールを実行する。実行に際して、画像データが必要である場合には、カメラ140から取得するか、マスタ画像を使用する。ステップS1115では、情報処理装置110のCPU111は、ループモジュールの判定結果が真か否かを判定する。判定結果が真であると判定された場合には、ループを抜けてステップS1112に処理を進め、そうでない場合には、ステップS1116に処理を進める。
ステップS1116では、情報処理装置110のCPU111は、判定結果が真ではなかったので、ループテーブルの先頭モジュールを参照する。具体的には、図6に示す処理フロー・入出力パラメータテーブルT610の先頭レコードである「U00002:メディアン」を参照する。
ステップS1117では、情報処理装置110のCPU111は、参照しているモジュールの実行を行う。モジュール実行処理の詳細は、後述する図22に示す。
ステップS1120では、情報処理装置110のCPU111は、参照中のループテーブルに格納されたモジュールをすべて処理したか否かを判定する。すべて処理したと判定された場合には、ステップS1114に処理を戻し、そうでない場合には、ステップS1121に処理を進める。
ステップS1121では、情報処理装置110のCPU111は、ループテーブルのうち、参照中のモジュールの次に実行するモジュールを参照する。そして、ステップS1117に処理を進める。
ステップS1122では、情報処理装置110のCPU111は、参照中のモジュールが分岐モジュールでもループモジュールでもなかったため、参照しているモジュールの実行を行う。モジュール実行処理の詳細は、後述する図22に示す。
ステップS1123では、情報処理装置110のCPU111は、参照中のモジュールが図18のステップS909で決定した基点モジュールであるか否かを判定する。基点モジュールであると判定された場合には、ステップS1124に処理を進め、そうでない場合には、ステップS1112に処理を進める。つまり、前半実行処理は、ステップS1101で処理フローの先頭モジュールから処理を開始し、ステップS1123で基点モジュールまで実行して処理を終了する。先頭モジュールから基点モジュールまで実行し、基点モジュール以降のモジュールは実行しないことで、処理負荷の軽減を図っている。後述する後半実行処理とは異なり、基点モジュール以降のサムネイル画像は非表示となるが、その分、処理負荷を大幅に軽減させることができる。
ステップS1124では、情報処理装置110のCPU111は、基点モジュール以降のモジュールは実行しないので、基点モジュール以降のモジュールで表示するサムネイル画像を非表示またはブラックアウトさせる。こうすることで、実行したモジュールと実行していないモジュールをユーザが識別することができる。尚、本実施形態では、画像をブラックアウトさせているが、ユーザに対して当該モジュールの処理が実行されなかったことを認識させることができれば、どんな表示形態でもよい。サムネイル画像を他の異なるサムネイル画像に差し替えてもよいし、サムネイル画像自体を非表示としてもよい。完了したら、前半実行処理を終了し、呼び出し元に処理を戻す。
次に、図21を参照して図17のステップS805の「後半実行処理」の詳細について説明する。図21は、情報処理装置110のCPU111によって行われる、「後半実行処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1201では、情報処理装置110のCPU111は、図18のステップS909で決定された基点モジュールよりも上流のモジュールが実行済み(シミュレーション済み)であるか否かを判定する。後半処理では、基点モジュールから実行を行うので、それよりも上流に配置されたモジュールを実行しなくてもよいか判定するための処理である。基点モジュールよりも上流のモジュールが実行済みであると判定された場合には、ステップS1203に処理を進め、そうでない場合には、処理フローに配置されたすべてのモジュールを実行する必要があるため、ステップS1202に処理を進める。
ステップS1202では、情報処理装置110のCPU111は、前述した実行処理を行う。実行処理の詳細は前述した図15に示す。後半処理では基点モジュールよりも上流に配置されたモジュールが実行済みである必要があるため、実行済みでないとこのように一度実行しておく必要がある。しかし、一度実行してしまえば、その後はステップS1201で実行済みと判定されるので、処理負荷の軽減が可能となる。
ステップS1203では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412のうち、図18のステップS909で決定された基点モジュールを参照する。後半実行処理では、図20で説明した前半実行処理とは異なり、基点モジュールを参照して、それよりも下流に配置されたモジュールを実行する。
ステップS1203が完了すると、図20で前述したステップS1104乃至ステップS1122と同様の処理を行う。ここでは前述の通り、参照しているモジュールが分岐モジュールなのか、ループモジュールなのか、それ以外の通常のモジュールなのかを判定して、それぞれの処理を実行する。各ステップの詳細な説明は、前述の通りであるので省略する。
ステップS1204では、情報処理装置110のCPU111は、ステップS1122が完了すると、処理フローの最後のモジュール(最終モジュール)までの処理がすべて終了したか否かを判定する。すべて終了したと判定された場合には、最終結果の画像データ(最終結果画像データ)を最終結果画像表示領域912に表示した後(表示手段)、後半実行処理を終了して呼び出し元に処理を戻し、そうでない場合には、ステップS1112に処理を戻す。最終結果の画像データは、処理フローの最終モジュールが出力した処理結果の画像データを最終結果画像表示領域912に表示するようにすればよい。
このように、後半実行処理では、ステップS1203で処理フローの基点モジュールから処理を開始し、ステップS1204で処理フローの最終モジュールまで実行して処理を終了する。基点モジュールから最終モジュールまで実行し、基点モジュールまでのモジュールは実行しないことで、処理負荷の軽減を図っている。また、前半実行処理とは異なり、後半実行処理は、最終的にすべてのモジュールが実行済みとなるので、各モジュールのサムネイル画像表示領域903に処理結果のサムネイル画像を表示することも可能である。また、前半実行処理では処理フローの途中までしか実行されないので、最終結果の画像データは表示できないが、後半実行処理では最終結果の画像データを表示させることが可能である。こうすることで、処理負荷の軽減を図りつつも、最終結果を確認しながら作業を進めることができるようになる。
次に、図22を参照して図20のステップS1109等の「モジュール実行処理」の詳細について説明する。図22は、情報処理装置110のCPU111によって行われる、「モジュール実行処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1301では、情報処理装置110のCPU111は、参照中のモジュールで行う処理で、画像データを使用するか否かを判定する。モジュールによっては、画像データを使用せず、設定された文字列を画面に表示するだけのもの等があるため、このような処理を行っている。画像データを使用すると判定された場合には、ステップS1302に処理を進め、そうでない場合には、ステップS1308に処理を進める。
ステップS1302では、情報処理装置110のCPU111は、参照中のモジュールが図18のステップS909で決定された基点モジュールであるか否かを判定する。基点モジュールであると判定された場合には、ステップS1303に処理を進め、そうでない場合には、ステップS1307に処理を進める。
ステップS1303では、情報処理装置110のCPU111は、実行中の処理が図17のステップS805で実行される後半実行処理であるか否かを判定する。後半実行処理では、前述した通り、基点モジュールよりも上流に配置されたモジュールは実行しないので、基点モジュールで使用する画像データを実行済みのモジュールから取得する処理を後述するステップS1304乃至ステップS1306の処理で行う。よって、ステップS1303でこのような判定を行っている。後半実行処理であると判定された場合には、ステップS1304に処理を進め、そうでない場合には、ステップS1307に処理を進める。
ステップS1304では、情報処理装置110のCPU111は、処理履歴テーブル419を参照し、処理フローを実行した場合に基点モジュールが実行される順番を特定する。例えば、図27に示すように、「二値化」モジュールを「ラベリング」モジュールの前に追加した場合を想定する。この場合、図7に示す処理履歴テーブルT700を見ると、「二値化」モジュールはINDEX701が「7」の前に実行されるはずである。よって、INDEX701が「6」と「7」の間を特定しておく。
ステップS1305では、情報処理装置110のCPU111は、ステップS1304で特定された順番より上流に配置されたモジュールのうち、処理結果画像703を持っている最も近いモジュールを特定する。ステップS1304での具体例を基に説明をすると、ステップS1304で特定された位置より上流のモジュールは、INDEX701が「1」から「6」となる。このうち、処理結果画像703があるモジュールはINDEX701が「3」と「5」である。そして、ステップS1304で特定された位置に最も近いのは、INDEX701が「5」の「U00002:メディアン」となる。このようにして、実行済みのモジュールのうち、処理結果画像を出力したモジュールで、最も基点モジュールに近いモジュールを特定する。
ステップS1306では、情報処理装置110のCPU111は、ステップS1305で特定されたモジュールから処理結果画像(処理済みデータ)を取得する。引き続き具体例を基に説明すると、ステップS1305で特定されたINDEX701が「5」の「U00002:メディアン」で出力された処理結果画像703「画像B−2」をRAM112等から取得する。
ステップS1304乃至ステップS1306は、図33のような場合に特に有効である。図33では、「二値化」モジュールを分岐モジュールの下に追加した場合を想定している。このような場合に後半実行処理を行うと、「二値化」モジュールは「U00006:輝度反転」と「U00007:輝度反転」のどちらの処理結果画像を取得すればいいのかわからない。このときに、図33に示す処理履歴テーブルT700を参照して、「二値化」モジュールが実行される順番を特定し、そこから上流のモジュールのうち、処理結果画像703を持つ最も近いモジュールである「U00006:輝度反転」を特定する。そして、特定された「U00006:輝度反転」から処理結果画像703を取得すればよい。このようにして、前回の実行履歴を基に、画像処理に使用する画像データを取得するようにすれば、問題なく後半実行処理が実行できる。
ステップS1307では、情報処理装置110のCPU111は、モジュールに設定された入力パラメータ604に基づいて、処理結果画像を取得する。
ステップS1308では、情報処理装置110のCPU111は、モジュール・ソースコードマスタテーブル411と処理フロー・入出力パラメータテーブル412に基づいて、参照中のモジュールを実行する。画像データを使用する場合には、ステップS1306またはステップS1307で取得した画像データを用いる。
ステップS1309では、情報処理装置110のCPU111は、ステップS1308で実行されたモジュールの順序と処理結果の画像データとを処理履歴テーブル419に記憶する(結果保存手段)。ステップS1310では、情報処理装置110のCPU111は、ステップS1309で更新された処理履歴テーブル419に基づいて、処理フロー描画領域902に表示する処理フロー上に処理ルートの軌跡を表示する。
ステップS1311では、情報処理装置110のCPU111は、ステップS1308で実行された参照中のモジュールの実行フラグ606を「ON」に変更する。こうすることで、実行済みとする。
ステップS1312では、情報処理装置110のCPU111は、ステップS1308で実行された結果、処理結果画像が存在するか否かを判定する。処理結果画像が存在する場合には、ステップS1313に処理を進め、そうでない場合には、モジュール実行処理を終了し、呼び出し元に処理を戻す。
ステップS1313では、情報処理装置110のCPU111は、フラグ設定テーブル418を参照して、処理フロー描画領域902のサムネイル画像表示領域903に処理結果画像のサムネイル画像を表示するか否かを判定する。具体的には、図5のフラグ設定テーブルT510のサムネイル表示フラグ513に「ON」が格納されていれば、サムネイル画像の表示を行う。サムネイル画像を表示すると判定された場合には、ステップS1314に処理を進め、そうでない場合には、モジュール実行処理を終了し、呼び出し元に処理を戻す。
ステップS1314では、情報処理装置110のCPU111は、参照中のモジュールの処理結果画像を縮小し、サムネイル画像を生成する(サムネイル画像生成手段)。そして、ステップS1315では、情報処理装置110のCPU111は、サムネイル画像表示領域903に、参照中のモジュールのサムネイル画像を表示する(サムネイル画像表示手段)。完了したら、モジュール実行処理を終了し、呼び出し元に処理を戻す。
次に、図23乃至図33を参照して、前述したモジュールの追加、変更、移動、削除の前半実行処理と後半実行処理について説明を行う。
まず、図23乃至図25を参照して、モジュールを追加する場合について説明する。前提として、処理フロー描画領域902には図23に示すような処理フローが構築されており、一度すべてのモジュールが実行されている。また、処理フロー・入出力パラメータテーブル412は、図23に示すような処理フロー・入出力パラメータテーブルT600となっている。尚、参照先テーブル607の分岐テーブルやループテーブルは、図6の処理フロー・入出力パラメータテーブルT610と処理フロー・入出力パラメータテーブルT620に示す通りである。
この場合に、図24に示すように、「二値化」モジュールを処理モジュール一覧901から選択して、ドラッグ&ドロップで「ラベリング」モジュールの1つ上に追加されたとする。すると、ステップS801で「二値化」モジュールを基点モジュールとし、ステップS802で「二値化」モジュールよりも下流に配置されているモジュールの実行フラグ606を「OFF」に更新する。これらを行うと、図25の処理フロー・入出力パラメータテーブルT600に示すようなデータに更新される。つまり、「二値化」モジュールのレコードを「ラベリング」モジュールの1つ上に追加し、「二値化」モジュール以降の実行フラグ606を「OFF」に更新する。
そして、前半実行処理(ステップS804)または後半実行処理(ステップS805)を実行する。図25に示す通り、前半実行処理は先頭モジュール(「START」モジュール)から基点モジュール(「二値化」モジュール)までを実行し、それ以降は実行しない。後半実行処理は、基点モジュール(「二値化」モジュール)から最終モジュール(「STOP」モジュール)まで実行し、それ以前は実行しない。このような実行にすることで、処理フローをすべて実行するよりも処理負荷を軽くすることができる。また、基点モジュールは確実に実行されるので、モジュールを追加した場合でも処理結果を確認することができる。
次に、図26乃至図28を参照して、モジュールのパラメータを変更する場合について説明する。前提として、処理フロー描画領域902には図26に示すような処理フローが構築されており、一度すべてのモジュールが実行されている。また、処理フロー・入出力パラメータテーブル412は、図26に示すような処理フロー・入出力パラメータテーブルT600となっている。尚、参照先テーブル607の分岐テーブルやループテーブルは、図6の処理フロー・入出力パラメータテーブルT610と処理フロー・入出力パラメータテーブルT620に示す通りである。
この場合に、図27に示すように、処理フロー描画領域902に表示された処理フローから「二値化」モジュールを選択して、パラメータ編集画面904を開き、パラメータの変更が行われたとする。すると、ステップS801で「二値化」モジュールを基点モジュールとし、ステップS802で「二値化」モジュールよりも下流に配置されているモジュールの実行フラグ606を「OFF」に更新する。これらを行うと、図28の処理フロー・入出力パラメータテーブルT600に示すようなデータに更新される。つまり、「二値化」モジュール以降の実行フラグ606を「OFF」に更新する。
そして、前半実行処理(ステップS804)または後半実行処理(ステップS805)を実行する。図28に示す通り、前半実行処理は先頭モジュール(「START」モジュール)から基点モジュール(「二値化」モジュール)までを実行し、それ以降は実行しない。後半実行処理は、基点モジュール(「二値化」モジュール)から最終モジュール(「STOP」モジュール)まで実行し、それ以前は実行しない。このような実行にすることで、処理フローをすべて実行するよりも処理負荷を軽くすることができる。
次に、図26、図29、図30を参照して、モジュールを下に移動する場合について説明する。前提として、処理フロー描画領域902には図26に示すような処理フローが構築されており、一度すべてのモジュールが実行されている。また、処理フロー・入出力パラメータテーブル412は、図26に示すような処理フロー・入出力パラメータテーブルT600となっている。尚、参照先テーブル607の分岐テーブルやループテーブルは、図6の処理フロー・入出力パラメータテーブルT610と処理フロー・入出力パラメータテーブルT620に示す通りである。
この場合に、図29に示すように、処理フロー描画領域902に表示された処理フローから「二値化」モジュールを選択して、ドラッグ&ドロップで「ラベリング」モジュールの1つ下に移動されたとする。すると、ステップS801で「ラベリング」モジュールを基点モジュールとし、ステップS802で「ラベリング」モジュールよりも下流に配置されているモジュールの実行フラグ606を「OFF」に更新する。これらを行うと、図30の処理フロー・入出力パラメータテーブルT600に示すようなデータに更新される。つまり、「二値化」モジュールのレコードを「ラベリング」モジュールの1つ下に移動させ、「ラベリング」モジュール以降の実行フラグ606を「OFF」に更新する。移動されたのは「二値化」モジュールだが、「ラベリング」モジュールが基点モジュールとなるのは、「二値化」モジュールが元々配置されていた場所からいなくなることで、その場所以降のモジュールの画像処理に影響があるからである。よって、元々「二値化」モジュールがいた場所の1つ下の「ラベリング」モジュールを基点モジュールとしている。
そして、前半実行処理(ステップS804)または後半実行処理(ステップS805)を実行する。図30に示す通り、前半実行処理は先頭モジュール(「START」モジュール)から基点モジュール(「ラベリング」モジュール)までを実行し、それ以降は実行しない。後半実行処理は、基点モジュール(「ラベリング」モジュール)から最終モジュール(「STOP」モジュール)まで実行し、それ以前は実行しない。このような実行にすることで、処理フローをすべて実行するよりも処理負荷を軽くすることができる。
次に、図26、図31、図32を参照して、モジュールを削除する場合について説明する。前提として、処理フロー描画領域902には図26に示すような処理フローが構築されており、一度すべてのモジュールが実行されている。また、処理フロー・入出力パラメータテーブル412は、図26に示すような処理フロー・入出力パラメータテーブルT600となっている。尚、参照先テーブル607の分岐テーブルやループテーブルは、図6の処理フロー・入出力パラメータテーブルT610と処理フロー・入出力パラメータテーブルT620に示す通りである。
この場合に、図31に示すように、処理フロー描画領域902に表示された処理フローから「二値化」モジュールを選択して、削除されたとする。すると、ステップS801で「ラベリング」モジュールを基点モジュールとし、ステップS802で「ラベリング」モジュールよりも下流に配置されているモジュールの実行フラグ606を「OFF」に更新する。これらを行うと、図32の処理フロー・入出力パラメータテーブルT600に示すようなデータに更新される。つまり、「二値化」モジュールのレコードを削除し、「ラベリング」モジュール以降の実行フラグ606を「OFF」に更新する。「ラベリング」モジュールが基点モジュールとなるのは、「二値化」モジュールが元々配置されていた場所からいなくなることで、その場所以降のモジュールの画像処理に影響があるからである。よって、元々「二値化」モジュールがいた場所の1つ下の「ラベリング」モジュールを基点モジュールとしている。
そして、前半実行処理(ステップS804)または後半実行処理(ステップS805)を実行する。図32に示す通り、前半実行処理は先頭モジュール(「START」モジュール)から基点モジュール(「ラベリング」モジュール)までを実行し、それ以降は実行しない。後半実行処理は、基点モジュール(「ラベリング」モジュール)から最終モジュール(「STOP」モジュール)まで実行し、それ以前は実行しない。このような実行にすることで、処理フローをすべて実行するよりも処理負荷を軽くすることができる。
次に、図39を参照して、実行フラグの必要性について説明する。前述した通り、モジュールに対して追加、移動、削除、パラメータ変更等の操作がユーザからなされた場合には、前半実行処理または後半実行処理を行うことで、処理負荷の軽減を図っている。この時、後半実行処理では実行フラグの状態を見ていない。何故なら、基点モジュールよりも下流に配置されたモジュールを再実行すればよいだけだからである。しかしながら、前半実行の場合には、実行フラグのONとOFFを見ている。これは、図39のような場合があるからである。図39では、図24に示すように「二値化」モジュールが処理フローに追加された後に、更に「輝度反転」モジュールを追加する場合である。図39を見ると、「輝度反転」モジュールは、実行フラグが「OFF」になっている「ラベリング」モジュールの下に追加されている。この追加に伴って前半実行処理が行われると、前述したステップS1101乃至ステップS1103において、先頭から実行フラグが「OFF」となっているモジュールを探索していくことになる。「ループ」モジュール、「メディアン」モジュール、「二値化」モジュールは、実行フラグが「ON」だが、「ラベリング」モジュールは、実行フラグが「OFF」である。よって、ここから基点モジュールの「輝度反転」モジュールまでが再実行されることになる。このように、前半実行処理は基点モジュールだけを実行しているかのように見えるが、図39のようなパターンもある。そのため、処理フローに配置されたモジュールごとに実行フラグの管理をしておくことで、図39のようなパターンも適切に処理できるようにしている。
次に、本発明の第2の実施形態について説明を行う。
前述した実施形態では、モジュールが処理フロー上で操作されると、どのようなモジュールであっても図17に示す探索実行処理が行われる。しかしながら、画像処理を再実行する必要のある場合は、最終的な出力結果や途中結果が変更となる場合である。最終的な出力結果や途中結果が変更となるのは、画像処理を行うモジュールが操作された場合である。
画像処理を行うモジュールは、対象の画像データに画像処理を実行し、他のモジュール(当該モジュールよりも下流に配置されたモジュール)にその処理結果である画像データを渡す仕組みになっている。つまり、処理結果の画像データが変われば、その処理結果を受け取ったモジュールの処理結果に影響が出てくる。よって、画像処理を行うモジュールに対して追加、移動、削除、パラメータ変更等の操作がなされた場合には、探索実行処理を実行して、処理負荷の軽減を図る必要がある。
しかしながら、画像処理を行わないモジュールも存在する。例えば、分岐やループといった処理フローの処理順を変更するためのモジュールや、画面に「OK」や「NG」といった文字表示を行うだけのモジュール等である。このようなモジュールが操作されたとしても、画像データに画像処理を実行しないので、最終的な出力結果や途中結果に影響はない。よって、画像処理を行わないモジュールが操作された場合には、図17に示す探索実行処理を実行しないことで、更なる処理負荷の軽減を図る。以下、この仕組みについて説明を行う。
第2の実施形態のシステム構成、ハードウェア構成、モジュール構成は、前述した実施形態のシステム構成(図1)、ハードウェア構成(図2、図3)、モジュール構成(図4)と同様であるので説明を省略する。
また、第2の実施形態で使用する図38に示すモジュール・ソースコードマスタテーブルT800は、図4のモジュール・ソースコードマスタテーブル411である。Index801、処理モジュール802、ソースコード803、初期値804、処理主体805は、それぞれ図5に示すモジュール・ソースコードマスタテーブル411のIndex501、処理モジュール502、ソースコード503、初期値504、処理主体505と同様である。
モジュール・ソースコードマスタテーブルT800は、更に属性806を備える。属性806は、モジュールが画像データを保持するインターフェース(IsetTargetImage)を持っているか否かを示す情報である。画像データを保持するためのインターフェースを持つモジュールというのは、つまり画像処理を行うモジュールである。画像処理を行わないモジュールは、このインターフェースを持っていないので、属性806には空の値が格納されている。
「IsetTargetImage」は、モジュールが画像処理を行う画像データを保持するためのインターフェースである。すなわち、この「IsetTargetImage」は、処理フローの上流のモジュールで画像処理された処理結果の画像データを受け取るインターフェースである。「IsetTargetImage」で受け取った画像データは、画像処理が実行され、また、処理された画像データはサムネイル表示にも利用される。「IsetTargetImage」を持っているモジュールは、粒子解析、二値化、空間フィルタ等がある。一方、「IsetTargetImage」を持っていないモジュールは、分岐、ループ、文字表示モジュール等がある。「IsetTargetImage」を持っていないモジュールは、モジュール内で画像処理を実行しないため、画像データを保持する機能を有していない。
よって、モジュール・ソースコードマスタテーブルT800の属性806に基づいて、「IsetTargetImage」の有無を判定すれば、画像処理を行うモジュールなのか、画像処理を行わないモジュールなのかが判断できる。
その他のテーブルについては前述した実施形態と同様であるので説明を省略する。
次に、第2の実施形態における詳細な処理について説明を行う。尚、第2の実施形態は、前述した実施形態における図8のステップS108(追加処理)、ステップS110(変更処理)、ステップS112(移動処理)、ステップS114(削除処理)の変形例である。よって、これらの処理の変形例について説明を行う。それ以外の処理については、前述した実施形態と同様であるので説明を省略する。
次に、図34を参照して図8のステップS108の「追加処理」の詳細について説明する。図34は、情報処理装置110のCPU111によって行われる、「追加処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1401では、情報処理装置110のCPU111は、ステップS106において処理モジュール一覧901で選択されたモジュールを特定する。そして、ステップS1402では、情報処理装置110のCPU111は、ステップS106において指定された、モジュールの追加先を特定する。なお、ステップS1401のモジュールの特定処理とステップS1402の追加先の特定処理との処理の順番を、逆にする形態であってもよい。
ステップS1403では、情報処理装置110のCPU111は、処理フロー描画領域902に描画(表示)されている処理フローに、特定したモジュールを追加し、処理フロー描画領域902を再描画(再表示)する処理を行う。
ステップS1404では、情報処理装置110のCPU111は、ステップS1402で特定したモジュールの追加処理に伴って、処理フロー・入出力パラメータテーブル412の更新を行う。例えば、図23に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図24に示すように「二値化」モジュールを新しく追加するとする。このときに、「二値化」モジュールは、「ループ」モジュールと「ラベリング」モジュールの間に挿入する形で追加するので、図25に示す処理フロー・入出力パラメータテーブルT600の通りに更新する。具体的には、モジュール・ソースコードマスタテーブル411で得られた情報を基に、「U00003:二値化」を追加し、INDEX601と順序602を振り直す。入力パラメータ604と出力パラメータ605を設定し直す。そして、「二値化」モジュールのレコードの実行フラグ606に「ON」を格納する。なお、このステップでは、他の実行フラグ606は更新しない。
ステップS1405では、情報処理装置110のCPU111は、ステップS1403で追加されたモジュールが、画像処理を行うモジュールなのか否かを判定する。つまり、探索実行処理やサムネイルの更新をするべきモジュールなのか否かを判定する。具体的には、モジュール・ソースコードマスタテーブルT800の属性806に画像を保持するインターフェース「IsetTargetImage」が存在するか否かを判定すればよい。「IsetTargetImage」が存在すれば自動実行を行い、「IsetTargetImage」が存在しなければ自動実行を行わない。自動実行をすると判定された場合には、ステップS1406に処理を進め、そうでない場合には、追加処理を終了し、呼び出し元に処理を戻す。
ステップS1406では、情報処理装置110のCPU111は、自動実行するか否かを判定する。具体的には、自動実行フラグ511に「ON」が格納されているか否かを判定する。「ON」が格納されていれば自動実行を行い、「OFF」が格納されていれば自動実行を行わない。自動実行をすると判定された場合には、ステップS1407に処理を進め、そうでない場合には、追加処理を終了し、呼び出し元に処理を戻す。
ステップS1407では、情報処理装置110のCPU111は、探索実行処理を行う。探索実行処理では、変更があったモジュールまでを再実行、または変更があったモジュールから再実行するための処理を行う。つまり、全体を実行せずに一部だけを実行するようにすることで、処理負荷の軽減を図っている。探索実行処理の詳細は、図17で前述した通りである。探索実行処理が終了したら、追加処理を終了し、呼び出し元に処理を戻す。
追加処理では、処理フローに追加したモジュールが画像処理を行うモジュールなのか否かを判定し、画像処理を行うモジュールなら探索実行処理を実行し、画像処理を行うモジュールでないなら、探索実行処理を実行させない。こうすることで、画像処理を行わないモジュールが処理フローに追加された場合の探索実行処理を実行しないようにすることができる。
次に、図35を参照して図8のステップS110の「変更処理」の詳細について説明する。図35は、情報処理装置110のCPU111によって行われる、「変更処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1501では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS1502では、情報処理装置110のCPU111は、画像処理プロジェクト開発画面900にパラメータ編集画面904を表示する。パラメータ編集画面904では、ステップS1501で特定されたモジュールのパラメータ設定を受け付ける。
ステップS1503では、情報処理装置110のCPU111は、入力装置120から任意のパラメータが変更されたか否かを判定する。パラメータが変更されたと判定された場合には、ステップS1504に処理を進め、そうでない場合には、パラメータが変更されるまで待機する。
ステップS1504では、情報処理装置110のCPU111は、変更のあったパラメータを特定し、当該パラメータを設定した処理結果を調整結果画像表示領域905に表示する。そして、ステップS1505では、情報処理装置110のCPU111は、変更のあったパラメータを設定するか否かを判定する。具体的には、パラメータ編集画面904に備えられた不図示の確定ボタンが押下されたか否かを判定する。パラメータを設定すると判定された場合には、ステップS1506に処理を進め、そうでない場合には、待機する。
ステップS1506では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図27に示すように「二値化」モジュールのパラメータを変更するとする。このとき、変更を受け付けたパラメータに従って、図28に示す処理フロー・入出力パラメータテーブルT600の「二値化」モジュールのレコードを更新する。なお、このステップでは、実行フラグ606は更新しない。
ステップS1507では、情報処理装置110のCPU111は、ステップS1504でパラメータ変更されたモジュールが、画像処理を行うモジュールなのか否かを判定する。つまり、探索実行処理やサムネイルの更新をするべきモジュールなのか否かを判定する。具体的には、モジュール・ソースコードマスタテーブルT800の属性806に画像を保持するインターフェース「IsetTargetImage」が存在するか否かを判定すればよい。「IsetTargetImage」が存在すれば自動実行を行い、「IsetTargetImage」が存在しなければ自動実行を行わない。自動実行をすると判定された場合には、ステップS1508に処理を進め、そうでない場合には、追加処理を終了し、呼び出し元に処理を戻す。
ステップS1508では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS1509に処理を進め、そうでない場合には、変更処理を終了し、呼び出し元に処理を戻す。
ステップS1509では、情報処理装置110のCPU111は、探索実行処理を行う。探索実行処理の詳細は、図17で前述した通りである。探索実行処理が終了したら、変更処理を終了し、呼び出し元に処理を戻す。
変更処理では、パラメータ変更のなされたモジュールが画像処理を行うモジュールなのか否かを判定し、画像処理を行うモジュールなら探索実行処理を実行し、画像処理を行うモジュールでないなら、探索実行処理を実行させない。こうすることで、画像処理を行わないモジュールのパラメータ変更がなされた場合の探索実行処理を実行しないようにすることができる。
次に、図36を参照して図8のステップS112の「移動処理」の詳細について説明する。図36は、情報処理装置110のCPU111によって行われる、「移動処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1601では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS1602では、情報処理装置110のCPU111は、ステップS106において指定された、モジュールの移動先を特定する。
ステップS1603では、情報処理装置110のCPU111は、処理フロー描画領域902において、ステップS1602で特定された移動先に、ステップS1601で特定されたモジュールを移動させる。
ステップS1604では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図29に示すように「二値化」モジュールを「ラベリング」モジュールの下に移動させるとする。このとき、図30に示す処理フロー・入出力パラメータテーブルT600の通り、モジュール名603「U00003:二値化」を「U00004:ラベリング」の下にレコードを移動する。そして、INDEX601と順序602を振り直す。また、必要があれば入力パラメータ604と出力パラメータ605を設定し直す。なお、このステップでは、実行フラグ606は更新しない。
ステップS1605では、情報処理装置110のCPU111は、ステップS1603で移動されたモジュールが、画像処理を行うモジュールなのか否かを判定する。つまり、探索実行処理やサムネイルの更新をするべきモジュールなのか否かを判定する。具体的には、モジュール・ソースコードマスタテーブルT800の属性806に画像を保持するインターフェース「IsetTargetImage」が存在するか否かを判定すればよい。「IsetTargetImage」が存在すれば自動実行を行い、「IsetTargetImage」が存在しなければ自動実行を行わない。自動実行をすると判定された場合には、ステップS1406に処理を進め、そうでない場合には、追加処理を終了し、呼び出し元に処理を戻す。
ステップS1606では、情報処理装置110のCPU111は、分岐モジュールまたはループモジュールであるか否かを判定する。分岐モジュールまたはループモジュールであると判定された場合には、ステップS1607に処理を進め、そうでない場合には、移動処理を終了し、呼び出し元に処理を戻す。
分岐モジュールやループモジュールというのは、条件に応じて処理の流れを変更するためのモジュールである。分岐モジュールやループモジュールは前述した通り、これらのモジュールの分岐先やループ内容として画像処理モジュールが入っている場合がある。分岐モジュールやループモジュールを移動させると、当該画像処理モジュールも一緒に移動するため、他の画像処理モジュールに影響がある。よって、必ず探索実行処理やサムネイルの更新を実行する。一方、分岐モジュールやループモジュールではなく、文字表示モジュールであった場合には、処理の流れに影響がないため、探索実行処理やサムネイルの更新を実行しないことになる。
ステップS1607では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS1608に処理を進め、そうでない場合には、移動処理を終了し、呼び出し元に処理を戻す。
ステップS1608では、情報処理装置110のCPU111は、探索実行処理を行う。探索実行処理の詳細は、図17で前述した通りである。探索実行処理が終了したら、移動処理を終了し、呼び出し元に処理を戻す。
移動処理では、移動されたモジュールが画像処理を行うモジュールなのか否かを判定し、画像処理を行うモジュールなら探索実行処理を実行し、画像処理を行うモジュールでないなら、探索実行処理を実行させない。こうすることで、画像処理を行わないモジュールの移動がなされた場合の探索実行処理を実行しないようにすることができる。
次に、図37を参照して図8のステップS114の「削除処理」の詳細について説明する。図37は、情報処理装置110のCPU111によって行われる、「削除処理」の処理手順の一例を示すフローチャートである。本処理をCPU111に実行させるためのプログラムは外部メモリ116に記憶されており、本処理の実行要求を入力装置120より受け付けた場合に、CPU111は、当該プログラムをRAM112にロードし、ロードしたプログラムによる制御に従って本処理を実行することになる。
ステップS1701では、情報処理装置110のCPU111は、ステップS106において処理フロー描画領域902で選択されたモジュールを特定する。ステップS1702では、情報処理装置110のCPU111は、ステップS1701で特定されたモジュールを処理フロー描画領域902から削除する。
ステップS1703では、情報処理装置110のCPU111は、処理フロー・入出力パラメータテーブル412を更新する。例えば、図26に示す処理フローと処理フロー・入出力パラメータテーブルT600があった場合に、図31に示すように「二値化」モジュールを削除させるとする。このとき、図31に示す処理フロー・入出力パラメータテーブルT600の通り、モジュール名603「U00003:二値化」を削除して、INDEX601と順序602を振り直す。また、必要があれば入力パラメータ604と出力パラメータ605を設定し直す。なお、このステップでは、実行フラグ606は更新しない。
ステップS1704では、情報処理装置110のCPU111は、ステップS1702で削除されたモジュールが、画像処理を行うモジュールであるか否かを判定する。具体的には、モジュール・ソースコードマスタテーブルT800の属性806に画像を保持するインターフェース「IsetTargetImage」が存在するか否かを判定する。「IsetTargetImage」が存在すれば自動実行を行い、「IsetTargetImage」が存在しなければ自動実行を行わない。自動実行をすると判定された場合には、ステップS1705に処理を進め、そうでない場合には、削除処理を終了し、呼び出し元に処理を戻す。
ステップS1705では、情報処理装置110のCPU111は、自動実行するか否かを判定する。自動実行をすると判定された場合には、ステップS1706に処理を進め、そうでない場合には、削除処理を終了し、呼び出し元に処理を戻す。
ステップS1706では、情報処理装置110のCPU111は、探索実行処理を行う。探索実行処理の詳細は、図17で前述した通りである。探索実行処理が終了したら、削除処理を終了し、呼び出し元に処理を戻す。
削除処理では、削除されたモジュールが画像処理を行うモジュールなのか否かを判定し、画像処理を行うモジュールなら探索実行処理を実行し、画像処理を行うモジュールでないなら、探索実行処理を実行させない。こうすることで、画像処理を行わないモジュールの削除がなされた場合の探索実行処理を実行しないようにすることができる。
このように第2の実施形態では、画像処理を行うモジュールに関する操作(追加、移動、削除、パラメータ変更等)がなされた場合には、前述した前半実行または後半実行を行う探索実行処理を実行させ、画像処理を行わないモジュールに関する操作がなされた場合には、探索実行処理を実行しないことで、更なる処理負荷の軽減を図ることができる。
次に、第3の実施形態について説明を行う。第3の実施形態は、第1の実施形態における図20に示す前半実行処理の変形例である。第1の実施形態においては、ステップS1123において基点モジュールまで処理することで、処理負荷の軽減を図っていた。一方、別の実施形態として、ユーザから操作されたモジュールまで処理することで、処理負荷の軽減を図ってもよい。
図40は、第3の実施形態における前半実行処理の詳細な処理手順を示すフローチャートである。このフローチャートは、第1の実施形態における図20の変形例である
図40のステップS1101乃至ステップS1122は、図20のステップS1101乃至ステップS1122と同様であるので、説明を省略する。
ステップS1801では、情報処理装置110のCPU111は、参照中のモジュールが図11のステップS301、図12のステップS401、図13のステップS501のいずれかで特定されたモジュールであるか否かを判定する。モジュールを削除してしまった場合には、図14のステップS601で特定されたモジュールは存在しないので、削除したモジュールより1つ上流に配置されたモジュールであるか否かを判定するようにする。特定されたモジュールであると判定された場合には、ステップS1802に処理を進め、そうでない場合には、ステップS1112に処理を進める。つまり、前半実行処理は、ステップS1101で処理フローの先頭モジュールから処理を開始し、ステップS1801で追加、移動、パラメータ変更されたモジュールまで、または削除されたモジュールの1つ上に配置されたモジュールまで実行して処理を終了する。このようにすることで、処理負荷の軽減を図っている。後述する後半実行処理とは異なり、基点モジュール以降のサムネイル画像は非表示となるが、その分、処理負荷を大幅に軽減させることができる。
ステップS1802では、情報処理装置110のCPU111は、追加、移動、パラメータ変更されたモジュール、または削除されたモジュールの1つ上に配置されたモジュール以降のモジュールは実行しないので、実行しないモジュールのサムネイル画像を非表示またはブラックアウトさせる。完了したら、前半実行処理を終了し、呼び出し元に処理を戻す。
このようにすることで、モジュールの移動と削除を行った場合の前半実行処理の処理範囲が変わる。例えば、図41では図29に示すような移動がなされた場合の処理概要を示している。つまり、図30の変形例である。図40の処理を実行すると、図41に示す通り、「ラベリング」モジュールの上にあった「二値化」モジュールを、「ラベリング」モジュールの下に移動させた場合、前半実行処理は、「二値化」モジュールまで実行されることになる。また、図42では図31に示すような削除がなされた場合の処理概要を示している。つまり、図32の変形例である。図40の処理を実行すると、図42に示す通り、「ラベリング」モジュールの上にあった「二値化」モジュールを削除した場合、前半実行処理は、「ラベリング」モジュールの前の「ループ」モジュールまで実行されることになる。
以上説明したように、処理フローにおいて変更のあった画像処理アイテムまで、または変更のあった画像処理アイテムから画像処理を実行し、それ以外の画像処理アイテムは実行しないので、画像処理プログラムの作成に際して実行される画像処理の負荷を軽減することの可能な効果を奏する。
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。