以下、図面を参照して、本発明の実施形態を詳細に説明する。
図1は、情報処理装置100のハードウェア構成の一例を示す図である。本発明の情報処理装置100は、画像処理を実行可能なプログラム(以下、画像処理プログラム)を生成可能な装置である。情報処理装置100には画像処理プログラムを構築するためのアプリケーション(以下、画像処理プログラム構築アプリケーション)がインストールされており、当該アプリケーションを用いて画像処理プログラムを生成する。
画像処理プログラム構築アプリケーションでは、あらかじめ用意されたモジュールをフローチャート形式で組み合わせることにより、画像処理プログラムを構築する。各モジュールには、画像処理を実行可能なモジュールや、ループや分岐を行うモジュール等が存在する。これらがソースコード形式で用意されているため、ユーザは所望の画像処理プログラムとなるよう、これらのモジュールを組み合わせてフローチャート(以下、処理フロー)にし、当該フローチャートの処理順でモジュールのソースコードを組み合わせることで、画像処理プログラムが生成できる。
CPU101は、システムバス104に接続される各デバイスやコントローラを統括的に制御する。
また、ROM102あるいは外部メモリ111(記憶手段)には、CPU101の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステムプログラム(以下、OS)や、情報処理装置100の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。RAM103は、CPU101の主メモリ、ワークエリア等として機能する。
CPU101は、処理の実行に際して必要なプログラム等をRAM103にロードして、プログラムを実行することで各種動作を実現するものである。
また、入力コントローラ(入力C)105は、キーボードや不図示のマウス等のポインティングデバイス等の入力デバイス109からの入力を制御する。
ビデオコントローラ(VC)106は、ディスプレイ110等の表示器への表示を制御する。表示器の種類はCRTや、液晶ディスプレイを想定するが、これに限らない。
メモリコントローラ(MC)107は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ111へのアクセスを制御する。
通信I/Fコントローラ(通信I/FC)108は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。
尚、CPU101は、例えばRAM103内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ110上での表示を可能としている。また、CPU101は、ディスプレイ110上の不図示のマウスカーソル等でのユーザ指示を可能とする。
本発明の情報処理装置100が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ111に記録されており、必要に応じてRAM103にロードされることによりCPU101によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ111に格納されている。
次に、情報処理装置100の機能構成を示す機能構成図について、図2を用いて説明する。尚、図2の機能構成は一例であり、用途や目的に応じて様々な構成例がある。
情報処理装置100は、テーブル記憶部200、処理フロー作成部210、ソースコード変換部220、コンパイル部230、処理フロー実行部240、処理フロー保存部250、画像バッファ管理部260、フォルダモジュール保存部270、画像バッファ使用領域特定部280を備える。
テーブル記憶部200は、本実施形態で用いる各種テーブルを記憶する機能部である。テーブル記憶部200には、モジュールテーブル300、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700、検索結果テーブル800、画像バッファテーブル900、フォルダモジュールテーブル1000、フォルダモジュール画像バッファテーブル1100が記憶されている。
ここで、本実施形態においては、図2のテーブル記憶部200が、例えば図1に示す外部メモリ111に構成される(一旦、RAM103に構成された後に外部メモリ111に構成される場合も含む)。また、図2の処理フロー作成部210、ソースコード変換部220、コンパイル部230、処理フロー実行部240、処理フロー保存部250、画像バッファ管理部260、フォルダモジュール保存部270、画像バッファ使用領域特定部280が、例えば図1に示すCPU101と、ROM102或いは外部メモリ111に記憶されているプログラムと、から構成される。
モジュールテーブル300は、画像処理ロジック構築プログラムで用いるモジュールに関する情報を格納するテーブルである。モジュールテーブル300のテーブル構成の一例を図3に示す。
モジュールテーブル300は、情報処理装置100の外部メモリ111等に記憶されており、モジュールID301、モジュール名302、ソースコード303、入力パラメータ304、出力パラメータ305、参照先テーブル306から構成される。
モジュールID301は、モジュールテーブル300のレコードごとに割り振られる識別情報である。モジュール名302は、モジュールの名称を示す。ソースコード303は、当該モジュールのソースコードが格納されている。ソースコードの保存先を格納しておいてもよい。入力パラメータ304と出力パラメータ305とは、当該モジュールが当該モジュールの処理を実行する際に設定可能な入力パラメータと出力パラメータを示す。例えば、モジュールID301が「U00007」の二値化モジュールは、入力パラメータとして「入力画像バッファ」と「閾値」とが設定可能であり、出力パラメータとして「出力画像バッファ」が設定可能であることがわかる。入力画像バッファとは、モジュールが処理を実行する際に用いる画像データの入力元である画像バッファを示す。出力画像バッファとは、モジュールが処理を実行した結果の画像データの出力先である画像バッファを示す。参照先テーブル306は、参照先のテーブルの識別番号(テーブルのID)を格納している。参照先のテーブルは、識別番号ごとにフォルダモジュールテーブル1000がある。フォルダモジュールとは、図10に示すテーブルに規定されるように、1つのモジュールの中に、複数のモジュールを格納するものである。この複数のモジュールは、処理フローのように一定の順列をなしていて、一連の処理により画像処理を行うまとまりを示すものである。
フォルダモジュールテーブル1000は、例えば図10に示すフォルダモジュールテーブル1000である。フォルダモジュールテーブル1000は、INDEX1001、モジュールID1002、モジュール名1003、入力パラメータ1004、出力パラメータ1005から構成される。
INDEX1001は処理フローの上流から下流に向けて昇順となるよう割り振られた識別情報である。すなわち、処理フローの最も上流に配置されたモジュールのINDEX1001が「1」となる。その次の位置に配置されたモジュールのINDEX1001が「2」となる。モジュールID1002はモジュールごとに割り振られる識別情報である。モジュール名1003はモジュールの名称を示す情報である。入力パラメータ1004、出力パラメータ1005には当該モジュールに設定された入力パラメータと出力パラメータとが格納される。
次に、処理フローテーブル400の説明を行う。処理フローテーブル400は、処理フローを構成しているモジュールに関する情報を格納するテーブルである。処理フローテーブル400のテーブル構成の一例を図4に示す。
処理フローテーブル400は、情報処理装置100の外部メモリ111等に記憶されており、INDEX401、モジュールID402、モジュール名403、入力パラメータ404、出力パラメータ405、参照先テーブル406から構成される。
INDEX401は、処理フローの上流から下流に向けて昇順となるよう割り振られた識別情報である。すなわち、処理フローの最も上流に配置されたモジュールのINDEX401が「1」となる。その次の位置に配置されたモジュールのINDEX401が「2」となる。モジュールID402は、処理フローに配置されたモジュールに一意に割り振られる識別情報である。モジュール名403は、当該モジュールのモジュール名302に対応するモジュールの名称が格納される。入力パラメータ404と出力パラメータ405とは、当該モジュールに設定された入力パラメータと出力パラメータとが格納される。例えば、図4の処理フローテーブル400のINDEX401が「1」であるカメラモジュールは、入力パラメータのうち、入力画像バッファとして「画像バッファ1」が設定されている。参照先テーブル406は、フォルダモジュール、ループや分岐などのモジュールである場合に参照すべき他のテーブルを示す。例えば、図4の処理フローテーブル400のINDEX401が「3」である分岐モジュールの参照先テーブル406には、分岐先として「TD003−1」と「TD003−2」とが設定されている。つまり、分岐モジュールの判定結果に応じて、この2つのテーブルのいずれかを参照することを示している。参照先テーブル406が示す各種テーブルにも、処理フローテーブル400と同様に処理フローに配置されたモジュールに関する情報が格納されている。
参照先テーブル406が示すテーブルとして、ループテーブル500、分岐テーブル600、スイッチテーブル700、フォルダモジュールテーブル1000がある。
ループテーブル500(図5参照)は、ループモジュールの参照先として用いられるテーブルである。ループテーブル500は、情報処理装置100の外部メモリ111等に記憶され、INDEX501、モジュールID502、モジュール名503、入力パラメータ504、出力パラメータ505、参照先テーブル506から構成される。ループテーブル500を構成する各項目は、前述した処理フローテーブル400を構成する各項目と同様である。
また、分岐テーブル600(図6参照)は、分岐モジュールの参照先として用いられるテーブルであり、分岐THENテーブル610及び分岐ELSEテーブル620から構成される。分岐THENテーブル610は、分岐モジュールの判定結果が真(TRUE)である場合に参照され、分岐ELSEテーブル620は、分岐モジュールの判定結果が偽(FALSE)に参照される。
分岐THENテーブル610は、情報処理装置の外部メモリ111等に記憶され、INDEX611、モジュールID612、モジュール名613、入力パラメータ614、出力パラメータ615、参照先テーブル616から構成される。また、分岐ELSEテーブル620は、情報処理装置の外部メモリ111に記憶され、INDEX621、モジュールID622、モジュール名623、入力パラメータ624、出力パラメータ625、参照先テーブル626から構成される。
分岐THENテーブル610を構成する各項目と、分岐ELSEテーブル620を構成する各項目とを、前述した処理フローテーブル400を構成する各項目と同様である。
更にスイッチテーブル700(図7参照)は、スイッチモジュールの参照先として用いられるテーブルであり、スイッチ条件テーブル710、スイッチELSEテーブル720、スイッチCASEテーブル730、スイッチCASEテーブル740から構成される。スイッチ条件テーブル710は、多方向に分岐するための条件が格納されており、スイッチELSEテーブル720は、どの条件にも当てはまらなかった場合に参照され、スイッチCASEテーブル730、スイッチCASEテーブル740はスイッチ条件テーブル710に格納された条件に応じて参照する。
スイッチ条件テーブル710は、情報処理装置100の外部メモリ111等に記憶され、INDEX711、CASE条件712、参照先テーブル713から構成される。INDEX711は、条件ごとに割り振られる識別情報である。CASE条件712は、分岐のための条件を示す。参照先テーブル713は、当該条件の判定結果が真(TRUE)であった場合に参照するスイッチCASEテーブルを示す。図7に示すスイッチ条件テーブル710の例では、分岐条件が2つあり、その2つの条件のいずれかで真と判定されると、真と判定された条件に設定されたスイッチCASEテーブル730またはスイッチCASEテーブル740を参照することになる。一方、いずれの条件が一致しない場合には、スイッチELSEテーブル720を参照することになる。
スイッチELSEテーブル720は、情報処理装置100の外部メモリ111等に記憶され、INDEX721、モジュールID722、モジュール名723、入力パラメータ724、出力パラメータ725、参照先テーブル726から構成される。また、スイッチCASEテーブル730は、情報処理装置100の外部メモリ111に記憶され、INDEX731、モジュールID732、モジュール名733、入力パラメータ734、出力パラメータ735、参照先テーブル736から構成される。また、スイッチCASEテーブル740は、情報処理装置100の外部メモリ111に記憶され、INDEX741、モジュールID742、モジュール名743、入力パラメータ744、出力パラメータ745、参照先テーブル746から構成される。スイッチELSEテーブル720を構成する各項目と、スイッチCASEテーブル730を構成する各項目と、スイッチCASEテーブル740を構成する各項目とは、前述した処理フローテーブル400を構成する各項目と同様である。
検索結果テーブル800(図8参照)は、後述する画像バッファ検索処理で用いられるテーブルである。処理フローに配置されたモジュールのうち、ユーザから指定されたモジュールが持つ画像バッファを同じ画像バッファを持つ他のモジュールを検索する。その検索した結果、特定したモジュールを格納するテーブルが、検索結果テーブル800である。
検索結果テーブル800は、情報処理装置100の外部メモリ111等に記憶され、INDEX801、モジュールID802、モジュール名803、一致画像バッファ804、上流フラグ805から構成される。INDEX801は、検索結果ごとに割り振られる識別情報である。モジュールID802、モジュール名803は、検索した結果特定されたモジュールのモジュールID802、モジュール名302に対応する情報が格納される。一致画像バッファ804は、同じ画像バッファであると判定された画像バッファが、入力画像バッファと出力画像バッファのいずれに設定されているのかを示す情報である。上流フラグ805は、検索した結果特定されたモジュールが、検索元となるモジュールよりも上流に配置されたもの(検索元となるモジュールよりも前に処理が実行されるもの)であるか否か、つまり検索した結果特定されたモジュールが、検索元となるモジュールよりも処理順が早いか否かを示すフラグである。上流フラグ805に「1」が格納されていれば、検索した結果特定されたモジュールが、検索元となるモジュールよりも上流に配置されたものである。上流フラグ805に「0」が格納されていれば、検索した結果特定されたモジュールが、検索元となるモジュールよりも下流に配置されたものである。
画像バッファテーブル900(図9参照)は、処理フローを構成する各モジュールが使用する画像バッファに関する情報を示す。画像バッファテーブル900は、情報処理装置100の外部メモリ111等に記憶され、INDEX901、画像バッファID902、名称903、画像情報904から構成される。INDEX901は、作成された画像バッファごとに割り振られる識別情報である。また画像バッファID902は、作成された画像バッファのIDを示す。画像バッファの名称は自由に付与することが可能である。名称903は、画像バッファの名称であり、ユーザが自由につけることの可能な名称である。画像情報904は、画像バッファの大きさやビット数を示すものであり、SizeX(横のピクセル数),SizeY(縦のピクセル数),Bit(1ピクセルあたりのビット数)を格納している。これらの情報により、画像バッファのサイズが規定される。
フォルダモジュール画像バッファテーブル1100は、フォルダモジュールごとに作られる、フォルダモジュールに対応する画像バッファのテーブルである。例えば図11に示すテーブルである。フォルダモジュール画像バッファテーブル1100は、INDEX901、画像バッファID902、名称903、画像情報904から構成される。それぞれの項目の説明は、画像バッファテーブル900と同様なので説明を省略する。
テーブル記憶部200は、以上のような各種テーブルを記憶している。
図2に説明を戻す。処理フロー作成部210は、ユーザからの指示に応じて、モジュールテーブル300に格納された各モジュールをフローチャート形式に構築する機能部である。モジュールを処理フローに追加、処理フローに配置されたモジュールを処理フローから削除、処理フローに配置されたモジュールの位置を移動、処理フローに配置されたモジュールのパラメータ変更等を行うことができる。
ソースコード変換部220は、処理フロー作成部210で作成された処理フローが示す画像処理ロジックを、ソースコードに変換する機能部である。処理フローを構成する各モジュールのソースコード303を取得し、処理フローが示す処理順となるよう取得したソースコードを組み合わせる。
コンパイル部230は、ソースコード変換部220で変換されたソースコードをコンパイルし、オブジェクトコードを生成する機能部である。
処理フロー実行部240は、コンパイル部230でコンパイルされたオブジェクトコードを実行する機能部である。
処理フロー保存部250は、処理フロー作成部210で作成された処理フローを保存する機能部である。
画像バッファ管理部260は、処理フロー作成部210で作成された処理フローを構成するモジュールが使用する画像バッファを管理する機能部である。画像バッファは、あらかじめユーザによって作成される。
フォルダモジュール保存部270は、処理フロー作成部210で作成された処理フローをフォルダモジュールとして保存する機能部である。
画像バッファ使用領域特定部280は、追加しようとするフォルダモジュールを実行するために必要とする画像バッファを特定し、必要となる画像バッファの容量を特定する機能部である。
次に、本発明の実施形態における一連の処理の流れについて、図12を用いて説明する。
まず、ステップS1201では、情報処理装置100のCPU101は、ユーザからの指示に応じて画像処理ロジック構築アプリケーションを起動し、処理フロー構築画面1300をディスプレイ110に表示する。
処理フロー構築画面1300の画面構成の一例を図13に示す。処理フロー構築画面1300は、処理フロー描画領域1301、モジュール一覧領域1302、パラメータ一覧領域1303、通知領域1304、実行結果欄1305、テンプレート一覧領域1306を備える。ユーザは、モジュール一覧領域1302に表示された、モジュールテーブル300が示すモジュールの一覧から、所望の画像処理ロジックを構築するために必要なモジュールを選択し、ドラッグアンドドロップで処理フロー描画領域1301に追加していく。処理フロー描画領域1301に表示された処理フローを構成するモジュールのうち、パラメータを閲覧・設定したいモジュールを選択することで、選択されたモジュールのパラメータがパラメータ一覧領域1303に表示される。また、何かユーザに対して通知すべきことがあれば、通知領域1304で通知がなされる。後述する処理フローの実行を行うと、実行結果として、画像バッファがそれぞれ実行結果欄1305で確認可能に表示される。テンプレート一覧領域1306は、モジュールテーブル300が示すフォルダモジュールを表示する領域である。フォルダモジュールか否かは、参照先テーブル306がフォルダモジュールか否かによって判定する。フォルダモジュールの判定方法はフラグなどによって判定してもよい。ユーザは、テンプレート一覧領域1306からフォルダモジュールを選択し、ドラッグアンドドロップで処理フロー描画領域1301に追加していく。
ステップS1202では、情報処理装置100のCPU101は、ユーザから入力デバイス109を通じて入力を受け付けたか否かを判定する。入力を受け付けたと判定した場合には、ステップS1203に処理を進める。入力を受け付けたと判定できなかった、すなわち入力を受け付けていない場合には、ユーザからの入力があるまで待機する。
ステップS1203では、情報処理装置100のCPU101は、ユーザからの入力が画像バッファの設定を行う指示であるか否かを判定する。より具体的には、処理フロー構築画面1300のプロジェクトメニューに備える画像バッファの設定項目(不図示)が選択されたか否かで判定する。ユーザからの入力が画像バッファの設定を行う指示であると判定した場合には、ステップS1204に処理を進める。ユーザからの入力が画像バッファの設定を行う指示でないと判定した場合には、ステップS1205に処理を進める。
ステップS1204では、情報処理装置100のCPU101は、画像バッファ設定画面1400を表示し、ユーザからの指示に応じて画像バッファの設定を行う。図14に画像バッファ設定画面1400の画面構成の一例を示す。画像バッファ設定画面1400では、処理フロー描画領域1301に描画された処理フローで利用する画像バッファの追加や削除を行うことが可能である。追加ボタン1401の押下を受け付けると、新しく画像バッファの記憶領域を確保するための入力項目が追加される。また、削除ボタン1402が押下されると、最下行の画像バッファの入力項目が削除される。画像バッファの追加や削除を行い、OKボタンの押下を受け付けることで、前述した画像バッファテーブル900が更新される。新しくレコードが作成されると画像バッファが追加されメモリ領域に確保される。画像バッファのレコードが削除されると、対象の画像バッファが削除される。このように処理フローに対して事前に画像バッファを確保しておくことで、無駄な画像バッファをRAM103に確保しない。画像バッファ設定画面1400には、名称入力欄1403、横のサイズ1404、縦のサイズ1405、ビット数1406が設けられている。名称入力欄1403は名称903の入力を受け付けることの可能な入力欄である。横のサイズ1404、縦のサイズ1405、ビット数1406は、ユーザから画像バッファに関する情報の指定を受け付けることができる入力欄であり、それぞれ、画像情報904のSizeX、SizeY、Bitに対応するものである。このような画面を通じて、画像バッファテーブル900を編集することが可能であり、あらかじめ必要な数の画像バッファを確保しておく。処理が終わったら(閉じるボタン等が押下されたら)、ステップS1202に処理を戻す。
ステップS1205では、情報処理装置100のCPU101は、ユーザからの入力が処理フローにモジュールの追加を行う指示であるか否かを判定する。より具体的には、モジュール一覧領域1302からいずれかのモジュールが処理フローにドラッグアンドドロップされたか否かに応じて判定する。ユーザからの入力が処理フローにモジュールの追加を行う指示であったと判定した場合には、ステップS1206に処理を進める。ユーザからの入力が処理フローにモジュールの追加を行う指示でないと判定した場合には、ステップS1207に処理を進める。
ステップS1206では、情報処理装置100のCPU101は、処理フローにモジュールを追加する処理を行う(モジュール追加手段)。モジュール追加処理の詳細は、後述する図15に示す。モジュール追加処理が終了したら、ステップS1202に処理を戻す。
ステップS1207では、情報処理装置100のCPU101は、ユーザからの入力が処理フローに配置されたモジュールの選択を行う指示(選択操作)であるか否かを判定する。すなわち、処理フローに配置されたモジュールのいずれかがユーザから選択されたか否かを判定する。ユーザからの入力が処理フローに配置されたモジュールの選択を行う指示であると判定した場合には、ステップS1208に処理を進める。ユーザからの入力が処理フローに配置されたモジュールの選択を行う指示でないと判定した場合には、ステップS1209に処理を進める。
ステップS1208では、情報処理装置100のCPU101は、処理フローに配置されたモジュールを選択する処理を行う。モジュール選択処理の詳細は、後述する図16に示す。モジュール選択処理が終了したら、ステップS1202に処理を戻す。
ステップS1209では、情報処理装置100のCPU101は、ユーザからの入力が処理フローに配置されたモジュールのパラメータを変更する指示であるか否かを判定する。すなわち、ユーザからモジュールが選択されると当該モジュールのパラメータがパラメータ一覧領域1303に表示されるので、このパラメータ一覧領域1303においてパラメータの設定変更を受け付けたか否かを判定する。ユーザからの入力が処理フローに配置されたモジュールのパラメータを変更する指示であると判定した場合には、ステップS1210に処理を進める。ユーザからの入力が処理フローに配置されたモジュールのパラメータを変更する指示でないと判定した場合には、ステップS1211に処理を進める。
ステップS1210では、情報処理装置100のCPU101は、ユーザから選択されたモジュールのパラメータを変更する処理を行う。パラメータ変更処理の詳細は、後述する図18に示す。パラメータ変更処理が終了したら、ステップS1202に処理を戻す。
ステップS1211では、情報処理装置100のCPU101は、ユーザからの入力が処理フローに配置されたモジュールの配置位置を変更する指示であるか否かを判定する。すなわち、処理フローに配置されたモジュールをドラッグアンドドロップにより処理フローのいずれかの位置に移動されたかを判定する。ユーザからの入力が処理フローに配置されたモジュールの配置位置を変更する指示であると判定した場合には、ステップS1212に処理を進める。ユーザからの入力が処理フローに配置されたモジュールの配置位置を変更する指示でないと判定した場合には、ステップS1213に処理を進める。
ステップS1212では、情報処理装置100のCPU101は、ユーザから選択された処理フロー上のモジュールをユーザから指示された処理フロー上の位置に移動する。この移動に伴い処理フローの処理順が変更となるので、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700のいずれかから移動したモジュールのレコードを取得し、これらのテーブルの適切な位置に取得したレコードを挿入する。そして、処理順となるよう、これらのテーブルごとにINDEXを更新する。処理が終了したら、ステップS1202に処理を戻す。
ステップS1213では、情報処理装置100のCPU101は、ユーザからの入力が処理フローに配置されたモジュールを削除する指示であるか否かを判定する。すなわち、処理フローに配置されたモジュールから、削除したいモジュールが選択され、不図示の削除ボタンが選択されたか否かを判定する。ユーザからの入力が処理フローに配置されたモジュールを削除する指示であると判定した場合には、ステップS1214に処理を進める。ユーザからの入力が処理フローに配置されたモジュールを削除する指示でないと判定した場合には、ステップS1215に処理を進める。
ステップS1214では、情報処理装置100のCPU101は、ユーザから選択された処理フロー上のモジュールを処理フロー上から削除する。この削除に伴い、処理フローの処理順が変更となるので、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700のいずれかから対象のモジュールを削除し、INDEXを処理順となるように更新する。処理が終了したら、ステップS1202に処理を戻す。
ステップS1215では、情報処理装置100のCPU101は、ユーザからの入力が処理フローで構築した画像処理ロジックを実行する指示であるか否かを判定する。より具体的には、不図示の実行ボタンが押下されたか否かを判定する。ユーザからの入力が処理フローで構築した画像処理ロジックを実行する指示であると判定した場合には、ステップS1216に処理を進める。ユーザからの入力が処理フローで構築した画像処理ロジックを実行する指示でないと判定した場合には、ステップS1217に処理を進める。
ステップS1216では、情報処理装置100のCPU101は、処理フローに配置された各モジュールを、処理フローが示す処理順に実行する。処理フローに配置された各モジュールのソースコードをモジュールテーブル300のソースコード303から取得し、取得したソースコードを処理順に組み合わせて、コンパイルする。そしてコンパイルした結果得られるオブジェクトコードを実行することで、これを実現する。より具体的には、図20に示す処理フロー実行処理で詳細に説明する。処理が終わったら、ステップS1202に処理を戻す。
ステップS1217では、情報処理装置100のCPU101は、ユーザからの入力が処理フローを保存する指示であるか否かを判定する。より具体的には、不図示の保存ボタンが押下されたか否かを判定する。ユーザからの入力が処理フローを保存する指示であると判定した場合には、ステップS1218に処理を進める。ユーザからの入力が処理フローを保存する指示でないと判定した場合には、ステップS1219に処理を進める。
ステップS1218では、情報処理装置100のCPU101は、処理フロー描画領域1301で構築された処理フローを保存する。より具体的には、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700を外部メモリ111等に保存する。こうしておくことで、あとで作業を再開することができる。
ステップS1219では、情報処理装置100のCPU101は、ユーザからの入力が処理フローをフォルダモジュールとして保存する指示であるか否かを判定する。より具体的には、不図示のフォルダモジュール保存ボタンが押下されたか否かを判定する。ユーザからの入力がフォルダモジュールとして処理フローを保存する指示であると判定した場合には、ステップS1220に処理を進める。ユーザからの入力が処理フローを保存する指示でないと判定した場合には、ステップS1221に処理を進める。
ステップS1220では、情報処理装置100のCPU101は、処理フロー描画領域1301で構築された処理フローをフォルダモジュールとして保存する(フォルダモジュール生成手段)。より具体的には、処理フローテーブル400をコピーし、新しくフォルダモジュールテーブル1000を生成する。更に処理フローの画像バッファテーブル900をコピーすることで新しくフォルダモジュール画像バッファテーブル1100を生成する。生成したフォルダモジュールテーブル1000とフォルダモジュール画像バッファテーブル1100は外部メモリ111等に保存する。
ステップS1221では、情報処理装置100のCPU101は、ユーザからの入力が画像処理ロジック構築アプリケーションの終了指示であるか否かを判定する。より具体的には、不図示の終了ボタンが押下されたか否かを判定する。ユーザからの入力が画像処理ロジック構築アプリケーションの終了指示であると判定した場合には、ステップS1222に処理を進める。ユーザからの入力が画像処理ロジック構築アプリケーションの終了指示でないと判定した場合、すなわち前述した処理以外の処理を実行する、または入力内容が特定できないのでエラーを通知し、ステップS1202に処理を戻す。
ステップS1222では、情報処理装置100のCPU101は、ステップS1201で表示した処理フロー構築画面1300を閉じて、画像処理ロジック構築アプリケーションを終了する。
次に、モジュール追加処理について図15を用いて説明する。
まずステップS1501では、情報処理装置100のCPU101は、処理フローに追加するモジュールを特定する。より具体的には、モジュール一覧領域1302からドラッグされたモジュールを特定する。
ステップS1502では、情報処理装置100のCPU101は、処理フローに追加する位置を特定する。より具体的には、モジュール一覧領域1302からドラッグされたモジュールがドロップされた処理フロー上の位置を特定する。
ステップS1503では、情報処理装置100のCPU101は、ステップS1501で特定したモジュールをステップS1502で特定した位置に追加する。より具体的には、ステップS1502で特定した位置に対応する、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700のいずれかを特定する。そして、ステップS1502で特定した位置に対応するレコードを特定したテーブルに生成する。
ステップS1504では、情報処理装置100のCPU101は、ステップS1503で追加されたモジュールがフォルダモジュールか否かを判定する。より具体的にはステップS1501で特定したモジュールの参照先テーブル306がフォルダモジュールを参照しているか否かを判定する。フォルダモジュールを参照している場合には、モジュールがフォルダモジュールであると判定する。フォルダモジュールであると判定された場合には処理をステップS1505に進める。フォルダモジュールでないと判定された場合には処理をステップS1510に進める。
ステップS1505では、情報処理装置100のCPU101は、ステップS1503で追加されたモジュールの参照先テーブル306のテーブルであるフォルダモジュールテーブル1000を読み込む。
ステップS1506では、情報処理装置100のCPU101は、ステップS1505で読み込んだフォルダモジュールテーブル1000に対応するフォルダモジュール画像バッファテーブル1100を取得する。
ステップS1507では、情報処理装置100のCPU101は、ステップS1505で読み込んだフォルダモジュールテーブル1000の入力パラメータ1004と出力パラメータ1005に格納される画像バッファID1102を抽出することで画像バッファを特定する(特定手段)。重複する画像バッファID1102は抽出せず、フォルダモジュールテーブル1000で使用する画像バッファIDを抽出する。ここでいう特定とは、画像バッファID1102と、画像バッファID1102の数と、画像バッファそれぞれの画像情報1104である。
ステップS1508では、情報処理装置100のCPU101は、ステップS1506で特定した画像バッファID1102に対応する名称1103、画像情報1104を画像バッファテーブル900に追加する。
ステップS1509では、情報処理装置100のCPU101は、画像バッファテーブル900にレコードが追加されると、追加されたレコードの画像情報904が示す情報に基づいて記憶容量を算出し、RAM103上に算出した記憶容量を確保(割り当て)し、これを画像バッファとする(画像バッファ確保手段)。より具体的には、画像情報904のSizeXとSizeYを乗じる。Bitは、「2」を底とする色のビット数を示しており、1ピクセルあたり8ビットの色情報(この場合、256色)を持たせることとなる。SizeXとSizeYを乗じたものに対して、ビット数を乗じると、画像バッファの容量を求めることができる。このようにして求めた画像バッファの容量を用いて、画像バッファテーブル900に追加されたレコードの数(画像バッファの数)の記憶容量をメモリ上に確保(割り当て)する。本実施例では、画像バッファごとにサイズやビット数が可変であるが、サイズやビット数が固定である場合には、レコードの数(画像バッファの数)が特定できれば、レコードの数だけで記憶容量をメモリ上に確保することができる。
このように、追加するモジュールがフォルダモジュールである場合にフォルダモジュール内で必要となる画像バッファのメモリ領域と数を特定し、処理フローに既に設定された画像バッファとは異なる画像バッファとしてRAM103に新たに確保する。これにより、ユーザはフォルダモジュールの追加時に、既に処理フローのモジュールに設定されている画像バッファに影響を与えることなく自動でフォルダモジュールが使用する画像バッファを確保することを可能にする。さらに、フォルダモジュールが必要とする画像バッファを確保するため、無駄な記憶容量を確保しないという効果ももたらす。
更に、フォルダモジュール内の画像バッファは既に設定されているため、追加時に再び設定する必要がなく、作業効率の上昇を見込むことができる。
ステップS1510では、情報処理装置100のCPU101は、追加したモジュールが画像バッファを設定可能なモジュールであるか否かを判定する。より具体的には、追加したモジュールの入力パラメータ304と出力パラメータ305とを参照し、入力画像バッファまたは出力画像バッファが設定可能か否かを判定する。追加したモジュールが画像バッファを設定可能なモジュールであると判定した場合には、ステップS1511に処理を進める。追加したモジュールが画像バッファを設定可能なモジュールでない、すなわち入力画像バッファと出力画像バッファのいずれも設定できないモジュールであると判定した場合には、モジュール追加処理を終了する。
ステップS1511では、情報処理装置100のCPU101は、追加したモジュールに入力画像バッファが設定可能であるか否かを判定する。より具体的には、追加したモジュールの入力パラメータ304を参照し、入力画像バッファが設定可能か否かを判定する。追加したモジュールに入力画像バッファが設定可能であると判定した場合には、ステップS1512に処理を進める。追加したモジュールに入力画像バッファが設定可能でない、すなわち出力画像バッファだけが設定可能であると判定した場合には、ステップS1513に処理を進める。
ステップS1512では、情報処理装置100のCPU101は、ステップS1503で追加されたモジュールの入力画像バッファに設定される画像バッファを示す情報を表示可能な領域(以下、入力画像バッファ表示領域)を、前記処理フローにおいて表示する。
従来は、画像バッファのようなパラメータはパラメータ一覧領域1303に示す箇所でしか確認することができなかった。しかしながら、このように処理フロー上の各モジュールの近傍に画像バッファに関する情報を表示することで、どのモジュールでどの画像バッファを使用しているかが把握しやすくなる。
ステップS1513では、情報処理装置100のCPU101は、追加したモジュールに出力画像バッファが設定可能であるか否かを判定する。より具体的には、追加したモジュールの出力パラメータ305を参照し、出力画像バッファが設定可能か否かを判定する。追加したモジュールに出力画像バッファが設定可能であると判定した場合には、ステップS1514に処理を進める。追加したモジュールに出力画像バッファが設定可能でない、すなわち入力画像バッファだけが設定可能であると判定した場合には、モジュール追加処理を終了する。
ステップS1514では、情報処理装置100のCPU101は、ステップS1503で追加されたモジュールの出力画像バッファに設定される画像バッファを示す情報を表示可能な領域(以下、出力画像バッファ表示領域)を、前記処理フローにおいて表示する。
このようにして、入力画像バッファや出力画像バッファが設定可能なモジュールが処理フローに追加された場合には、入力画像バッファ表示領域や出力画像バッファ表示領域を表示する。
ここで、モジュールによっては、入力画像バッファと出力画像バッファのいずれかだけが設定可能なモジュールもある。すなわち、ステップS1512またはステップS1514のいずれか一方だけが実行される場合である。この場合には、入力画像バッファ表示領域と出力画像バッファ表示領域のいずれか一方のみが表示されることになる。
更には、モジュールによっては、画像バッファを使用しないモジュールが存在する。すなわち、ステップS1510で画像バッファが設定可能でないと判定されたモジュールである。この場合には、入力画像バッファ表示領域及び出力画像バッファ表示領域のいずれも表示されない。
このように、処理フローに追加されるモジュールが、フォルダモジュールである場合にはフォルダモジュールが必要とする画像バッファを自動で追加することにより、ユーザは既に処理フローで使われている画像バッファへの影響を考える必要がなくなるという効果がある。さらに、フォルダモジュールには既に画像バッファの順列が設定されているので、従来のようにモジュール追加時に画像バッファを設定しなおす必要がなくなるという効果がある。
次に、モジュール選択処理について図16を用いて説明する。
まずステップS1601では、情報処理装置100のCPU101は、処理フローを構築するモジュールのうち、ユーザから選択されたモジュールを特定する。
ステップS1602では、情報処理装置100のCPU101は、ステップS1601で特定されたモジュールの入力パラメータと出力パラメータとを取得する。より具体的には、特定されたモジュールに設定されている入力パラメータと出力パラメータとを、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700のいずれかから取得する。どのテーブルから取得するのかは、特定されたモジュールが配置されている位置に応じる。
ステップS1603では、情報処理装置100のCPU101は、ステップS1602で取得した入力パラメータと出力パラメータとを処理フロー構築画面1300のパラメータ一覧領域1303に表示する。こうして表示した各パラメータは、ユーザからの入力によって自由に変更できる。
ステップS1604では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールに入力画像バッファが設定済みであるか否かを判定する。より具体的には、ステップS1602で取得した入力パラメータの入力画像バッファに、あらかじめ作成した画像バッファの画像バッファ名が含まれているか否かを判定する。入力画像バッファが設定済みであると判定した場合には、ステップS1605に処理を進める。入力画像バッファが設定済みでないと判定した場合には、ステップS1610に処理を進める。
ステップS1605では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールの入力画像バッファに設定されている画像バッファを特定する。より具体的には、当該画像バッファの画像バッファID902を特定する。
ステップS1606では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールとは異なるモジュールのうち、ステップS1605で特定した画像バッファを用いて画像処理を行うモジュール(当該画像バッファが入力画像バッファまたは出力画像バッファに設定されているモジュール)を、処理フローに配置されたモジュールから検索する処理を実行する。画像バッファ検索処理の詳細は、後述する図22に示す。
ステップS1607では、情報処理装置100のCPU101は、ステップS1606で検索した結果、ステップS1605で特定した画像バッファを用いて処理を実行するモジュールが特定できたか否かを判定する。より具体的には、ステップS1606で出力される検索結果テーブル800に検索結果が格納されていれば、特定できたと判定する。特定できたと判定した場合には、ステップS1608に処理を進める。特定できなかったと判定した場合には、ステップS1609に処理を進める。
ステップS1608では、情報処理装置100のCPU101は、ステップS1606で検索し特定したモジュールの画像バッファであって、ステップS1605で特定した画像バッファと同じ画像バッファを識別表示する。
次に、ステップS1608では、この検索結果テーブル800を参照して、処理フロー上のモジュール(モジュールID「U00001」のカメラモジュール、モジュールID「00022」のメディアンモジュール、モジュールID「00041」の画像表示モジュール)を特定する。そして、当該特定したモジュールの一致画像バッファ804が示す入力画像バッファまたは出力画像バッファ、もしくは両方に設定された画像バッファに関する情報を識別表示する。
例えば、検索結果テーブル800のINDEX801が「1」のレコードには、モジュールIDが「U00001」であるカメラモジュールを示す情報が格納されている。ステップS1606では、このカメラモジュールの入力画像バッファに設定されている画像バッファが、ステップS1605で特定した画像バッファと同じであると特定されたので、当該レコードの一致画像バッファ804に「入力画像バッファ」と格納されている。つまり、このレコードの情報に基づいて、処理フロー上のカメラモジュールの入力画像バッファ表示領域に表示されている「画像バッファ1」という文字列を識別表示する。こうすることで、ユーザから選択されたモジュールに設定されている画像バッファと同じ画像バッファを使用しているモジュールで、当該画像バッファに関する情報を識別表示することができる。
尚、本実施形態では、入力画像バッファ表示領域に表示された画像バッファに関する情報を識別表示しているが、同じ画像バッファが使われていることをユーザに認識させることができればよい。つまり、ユーザから選択されたモジュールと同じ画像バッファを用いるモジュール自体を処理フロー上で識別表示する形態でもよい。
一方ステップS1609では、情報処理装置100のCPU101は、ステップS1606で検索した結果、ステップS1605で特定した画像バッファを用いて処理を行うモジュールが存在しないので、その旨を通知するために、ユーザから選択されたモジュールの入力画像バッファに設定されている画像バッファを識別表示する。より具体的には、ユーザから選択されたモジュールの入力画像バッファ表示領域に表示されている画像バッファに関する情報を識別表示する。
ステップS1610では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールに出力画像バッファが設定済みであるか否かを判定する。より具体的には、ステップS1602で取得した出力パラメータの出力画像バッファに、あらかじめ作成した画像バッファの画像バッファ名が含まれているか否かを判定する。出力画像バッファが設定済みであると判定した場合には、ステップS1611に処理を進める。出力画像バッファが設定済みでないと判定した場合には、モジュール選択処理を終了する。
ステップS1611では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールの出力画像バッファに設定されている画像バッファを特定する。より具体的には、当該画像バッファの画像バッファID902を特定する。
ステップS1612では、情報処理装置100のCPU101は、ステップS1601で特定したモジュールとは異なるモジュールのうち、ステップS1611で特定した画像バッファを用いて画像処理を行うモジュール(当該画像バッファが入力画像バッファまたは出力画像バッファに設定されているモジュール)を、処理フローに配置されたモジュールから検索する処理を実行する。画像バッファ検索処理の詳細は、後述する図22に示す。
ステップS1613では、情報処理装置100のCPU101は、ステップS1612で検索した結果、ステップS1611で特定した画像バッファを用いて処理を実行するモジュールが特定できたか否かを判定する。より具体的には、ステップS1612で出力される検索結果テーブル800に検索結果が格納されていれば、特定できたと判定する。特定できたと判定した場合には、ステップS1614に処理を進める。特定できなかったと判定した場合には、ステップS1615に処理を進める。
ステップS1614では、情報処理装置100のCPU101は、ステップS1606で検索し特定したモジュールの画像バッファであって、ステップS1605で特定した画像バッファと同じ画像バッファを識別表示する。ステップS1614においても、前述したステップS1608と同様の処理を実行する。ここで、ステップS1608またはステップS1609で識別表示がなされているのであれば、ステップS1614または後述するステップS1615では、ステップS1608またはステップS1609とは異なる識別表示を行う。つまり、ユーザから選択されたモジュールの入力画像バッファに設定されている画像バッファと同一の画像バッファに関する情報の識別表示と、ユーザから選択されたモジュールの出力画像バッファに設定されている画像バッファと同一の画像バッファに関する情報の識別表示とを異なる色や形等で表現する。
ステップS1615では、情報処理装置100のCPU101は、ステップS1612で検索した結果、ステップS1611で特定した画像バッファを用いて処理を行うモジュールが存在しないので、その旨を通知するために、ユーザから選択されたモジュールの出力画像バッファに設定されている画像バッファを識別表示する。
次に、パラメータ変更処理について図18、及び図19を用いて説明を行う。
まず、ステップS1801では、情報処理装置100のCPU101は、現在選択されている処理フロー上のモジュール(例えば、前述したモジュール選択処理で選択されたモジュール)の入力画像バッファの設定がなされたか否かを判定する。より具体的には、選択されたモジュールのパラメータ一覧領域1303において、入力画像バッファとしてあらかじめ作成された画像バッファが選択されたか否かを判定する。入力画像バッファの設定がなされたと判定した場合には、ステップS1802に処理を進める。入力画像バッファの設定がなされていないと判定した場合には、後述する図19のステップS1901に処理を進める。
ステップS1802では、情報処理装置100のCPU101は、パラメータ一覧領域1303で選択された画像バッファを特定する。そして、ステップS1803では、情報処理装置100のCPU101は、ステップS1802で特定した画像バッファを選択されているモジュールの入力画像バッファとして設定する。より具体的には、処理フローテーブル400、ループテーブル500、分岐テーブル600、スイッチテーブル700のいずれかに格納されている、選択中のモジュールのレコードの入力パラメータに、選択された画像バッファを設定する。
ステップS1804では、情報処理装置100のCPU101は、ステップS1803で設定した画像バッファの画像バッファID902をパラメータ一覧領域1303に表示する。
ステップS1805では、情報処理装置100のCPU101は、処理フロー上で選択されているモジュールとは異なるモジュールのうち、ステップS1802で特定した画像バッファを用いて画像処理を行うモジュール(当該画像バッファが入力画像バッファまたは出力画像バッファに設定されているモジュール)を、処理フローに配置されたモジュールから検索する処理を実行する。画像バッファ検索処理の詳細は、後述する図22に示す。
ステップS1806では、情報処理装置100のCPU101は、選択中のモジュールが配置された位置よりも上流に配置されている(選択中のモジュールよりも前に処理が実行される)モジュールのうち、ステップS1802で特定した画像バッファと同じ画像バッファが出力画像バッファに設定されているモジュールが存在するか否かを判定する。より具体的には、ステップS1805で出力された検索結果テーブル800の上流フラグ805に「1」が格納されているモジュールのうち、一致画像バッファ804が「出力画像バッファ」となっているモジュールがあるか否かを判定する。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されていないと判定した場合には、ステップS1807に処理を進める。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されていると判定した場合には、ステップS1808に処理を進める。
ステップS1807では、情報処理装置100のCPU101は、選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されていない旨を通知する。例えば通知領域1304で通知してもよい。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されていない旨をユーザに通知することで、設定の誤りをユーザに認識させる効果がある。入力画像バッファに設定する画像バッファには、画像データが出力されていなければならない。すなわち、入力画像バッファが設定可能なモジュールは、当該入力画像バッファに設定された画像バッファから画像データを取得して所定の処理を実行するのだが、そもそも当該画像バッファに何も画像データが格納されていない状態では、当該所定の処理を実行できない。当該所定の処理を実行するためには、入力画像バッファの設定を行うモジュールよりも処理順が前のモジュール(上流のモジュール)で、前記画像バッファが出力画像バッファとして設定されていなければならない。そこで、ステップS1806において、選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されているか否かを判定し、設定されていなければユーザに通知するようにしている。
ステップS1808では、情報処理装置100のCPU101は、ステップS1805で検索した結果、ステップS1802で特定した画像バッファを用いて処理を実行するモジュールが特定できたか否かを判定する。詳細な処理はステップS1607と同様である。
ステップS1809では、情報処理装置100のCPU101は、ステップS1805で検索し特定したモジュールの画像バッファであって、ステップS1802で特定した画像バッファと同じ画像バッファを識別表示する。詳細な処理はステップS1608と同様である。
ステップS1810では、情報処理装置100のCPU101は、ステップS1805で検索した結果、ステップS1802で特定した画像バッファを用いて処理を行うモジュールが存在しないので、その旨を通知するために、ユーザから選択されたモジュールの入力画像バッファに設定されている画像バッファを識別表示する。詳細な処理はステップS1609と同様である。
ステップS1809、またはステップS1810の処理が終了したら、図19のステップS1901に処理を進める。
続いて図19の説明に移る。ステップS1901では、情報処理装置100のCPU101は、現在選択されている処理フロー上のモジュール(例えば、前述したモジュール選択処理で選択されたモジュール)の出力画像バッファの設定がなされたか否かを判定する。より具体的には、選択されたモジュールのパラメータ一覧領域1303において、出力画像バッファとしてあらかじめ作成された画像バッファが選択されたか否かを判定する。出力画像バッファの設定がなされたと判定した場合には、ステップS1902に処理を進める。出力画像バッファの設定がなされていないと判定した場合には、パラメータ変更処理を終了する。
ステップS1902では、情報処理装置100のCPU101は、パラメータ一覧領域1303で選択された画像バッファを特定する。そして、ステップS1903では、情報処理装置100のCPU101は、ステップS1902で特定した画像バッファを選択されているモジュールの出力画像バッファとして設定する。詳細な処理はステップS1803と同様である。
ステップS1904では、情報処理装置100のCPU101は、ステップS1903で設定した画像バッファの画像バッファID902をパラメータ一覧領域1303に表示する。
ステップS1905では、情報処理装置100のCPU101は、処理フロー上で選択されているモジュールとは異なるモジュールのうち、ステップS1902で特定した画像バッファを用いて画像処理を行うモジュール(当該画像バッファが入力画像バッファまたは出力画像バッファに設定されているモジュール)を、処理フローに配置されたモジュールから検索する処理を実行する。画像バッファ検索処理の詳細は、後述する図22に示す。
ステップS1906では、情報処理装置100のCPU101は、選択中のモジュールが配置された位置よりも上流に配置されている(選択中のモジュールよりも前に処理が実行される)モジュールのうち、ステップS1902で特定した画像バッファと同じ画像バッファが出力画像バッファに設定されているモジュールが存在するか否かを判定する。詳細な処理はステップS1806と同様である。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1902で特定した画像バッファが設定されていると判定した場合には、ステップS1907に処理を進める。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1902で特定した画像バッファが設定されていないと判定した場合には、ステップS1908に処理を進める。
ステップS1907では、情報処理装置100のCPU101は、選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1902で特定した画像バッファが設定されている旨を通知する。通知の方法は特に問わないが、通知領域1304で通知してもよい。選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1802で特定した画像バッファが設定されている旨をユーザに通知することで、設定の誤りをユーザに認識させる効果がある。ユーザによっては、あるモジュールで出力された処理結果の画像データを画像バッファに残しておきたい場合がある。しかしながら、当該画像バッファに他のモジュールが処理結果の画像データを出力してしまうと、当該画像バッファに一時記憶されている画像データが上書きされてしまう。これを防止するために、ステップS1906において、選択中のモジュールよりも上流のモジュールの出力画像バッファにステップS1902で特定した画像バッファが設定されているか否かを判定し、設定されていればユーザに通知するようにしている。
ステップS1908では、情報処理装置100のCPU101は、ステップS1905で検索した結果、ステップS1902で特定した画像バッファを用いて処理を実行するモジュールが特定できたか否かを判定する。詳細な処理はステップS1613と同様である。
ステップS1909では、情報処理装置100のCPU101は、ステップS1905で検索し特定したモジュールの画像バッファであって、ステップS1902で特定した画像バッファと同じ画像バッファを識別表示する。詳細な処理はステップS1614と同様である。
ステップS1910では、情報処理装置100のCPU101は、ステップS1905で検索した結果、ステップS1902で特定した画像バッファを用いて処理を行うモジュールが存在しないので、その旨を通知するために、ユーザから選択されたモジュールの出力画像バッファに設定されている画像バッファを識別表示する。詳細な処理はステップS1615と同様である。
次に処理フロー実行処理について、図20を用いて説明する。
ステップS2001では、情報処理装置100のCPU101は、処理フローテーブル400を参照し、先頭のモジュール(INDEX401が最小のモジュール)を参照する。
ステップS2002では、情報処理装置100のCPU101は、モジュールがフォルダモジュールか否かを判定する。より具体的にはステップS1501で参照したモジュールに対応する参照先テーブル306がフォルダモジュールを参照しているか否かを判定する。フォルダモジュールを参照している場合には、モジュールがフォルダモジュールであると判定する。モジュールがフォルダモジュールであると判定された場合には処理をステップS2003に進め、モジュールがフォルダモジュールでないと判定された場合には処理をステップS2004に進める。
ステップS2003では、情報処理装置100のCPU101は、フォルダモジュール実行処理を行う。フォルダモジュール実行処理の詳細な説明は後の図21で説明する。
ステップS2004では、情報処理装置100のCPU101は、モジュールに設定される画像処理を実行する。モジュールの実行を終えたあと、処理をステップS2005に進める。
ステップS2005では、情報処理装置100のCPU101は、ステップS2004で処理を行ったモジュールのINDEX401の次のINDEX401のモジュールを参照する。
ステップS2006では、情報処理装置100のCPU101は、ステップS2005で参照したモジュールがあるか否かによって、すべてのモジュールの処理が終了したか否かを判定する。すべてのモジュールの処理が終了したと判定された場合には処理を終了する。すべてのモジュールの処理が終了したと判定されない場合には処理をステップS2002に戻す。
処理フロー実行処理を行った結果の処理フロー構築画面1700の一例が図17に示す図である。実行結果欄1705に、それぞれ処理を行った結果を確認することができ、追加されたフォルダモジュールが必要とする画像バッファを、処理フローに追加することにより、画像が上書きすることなく、処理フロー実行後に確認することが可能になる。フォルダモジュールの画像バッファ1709が追加されているため、元々処理フローのために確保されていた画像バッファ1708と重複することなく、実行結果を確認することが可能である。
次にフォルダモジュール実行処理について、図21を用いて説明する。
ステップS2101では、情報処理装置100のCPU101は、ステップS2002で参照した参照先テーブル306が示すフォルダモジュールテーブルの先頭のモジュール(INDEX1001が最小のモジュール)を参照する。
ステップS2102では、情報処理装置100のCPU101は、フォルダモジュールに設定されている入力画像バッファ(モジュールテーブル300の入力パラメータ304)から、ステップS2101で参照したモジュール(フォルダモジュールテーブル1000の入力パラメータ1004:画像処理1.画像バッファ1)に画像をコピーする。画像をコピーすることで、画像を上書きしてしまうことを防ぐ効果がある。
ステップS2103では、情報処理装置100のCPU101は、ステップS2101で参照したモジュールを実行する。
ステップS2104では、情報処理装置100のCPU101は、ステップS2103で実行した次のモジュール(INDEX1001が次に大きいモジュール)を参照する。
ステップS2105では、情報処理装置100のCPU101は、他に未処理のモジュールがあるかないかを判定する。具体的には、ステップS2104で参照したモジュールがある場合には他に未処理のモジュールがあると判定し処理をステップS2103に戻す。ステップS2104で参照することができなかった場合には、他に未処理のモジュールがないと判定し、処理をステップS2106に進める。
ステップS2106では、情報処理装置100のCPU101は、フォルダモジュールテーブル1000の最後のモジュールの出力パラメータ1005から、モジュールテーブル300のフォルダモジュールに対応する出力パラメータ305に画像をコピーする。
次に、画像バッファ検索処理について図22及び図23を用いて説明する。
まず、ステップS2201では、情報処理装置100のCPU101は、処理フロー描画領域1301で構築された処理フローのうち、先頭に配置されたモジュール(処理順が最も早いモジュール)を参照する。処理フローテーブル400のINDEX401が最も小さいレコードを参照すればよい。
ステップS2202では、情報処理装置100のCPU101は、参照中のモジュールが分岐モジュールであるか否かを判定する。参照中のモジュールのモジュール名に応じて判定すればよい。参照中のモジュールが分岐モジュールであると判定した場合には、ステップS2203に処理を進める。参照中のモジュールが分岐モジュールでないと判定した場合には、ステップS2207に処理を進める。
ステップS2203では、情報処理装置100のCPU101は、参照中のモジュールが分岐モジュールであったので、分岐先のモジュールを検索するべく、分岐THENテーブル610を参照する。そして、ステップS2204では、情報処理装置100のCPU101は、参照している分岐THENテーブル610に含まれる各モジュールに対して、対象の画像バッファと同じ画像バッファを入力画像バッファまたは出力画像バッファに設定しているモジュールを検索する(画像バッファ検索処理を実行する)。すなわち、再帰呼び出しを実行する。
ステップS2205では、情報処理装置100のCPU101は、他の分岐先のモジュールを検索するべく、分岐ELSEテーブル620を参照する。そして、ステップS2206では、情報処理装置100のCPU101は、参照している分岐ELSEテーブル620に含まれる各モジュールに対して、対象の画像バッファと同じ画像バッファを入力画像バッファまたは出力画像バッファに設定しているモジュールを検索する(画像バッファ検索処理を実行する)。すなわち、再帰呼び出しを実行する。
ステップS2207では、情報処理装置100のCPU101は、参照中のモジュールがループモジュールであるか否かを判定する。参照中のモジュールのモジュール名に応じて判定すればよい。参照中のモジュールがループモジュールであると判定した場合には、ステップS2208に処理を進める。参照中のモジュールがループモジュールでないと判定した場合には、ステップS2210に処理を進める。
ステップS2208では、情報処理装置100のCPU101は、参照中のモジュールがループモジュールであったので、ループするモジュールを検索するべく、ループテーブル500を参照する。そして、ステップS2209では、情報処理装置100のCPU101は、参照しているループテーブル500に含まれる各モジュールに対して、対象の画像バッファと同じ画像バッファを入力画像バッファまたは出力画像バッファに設定しているモジュールを検索する(画像バッファ検索処理を実行する)。すなわち、再帰呼び出しを実行する。
ステップS2210では、情報処理装置100のCPU101は、参照中のモジュールがスイッチモジュールであるか否かを判定する。参照中のモジュールのモジュール名に応じて判定すればよい。参照中のモジュールがスイッチモジュールであると判定した場合には、ステップS2211に処理を進める。参照中のモジュールがスイッチモジュールでないと判定した場合には、後述する図23のステップS2301に処理を進める。
ステップS2211では、情報処理装置100のCPU101は、参照中のモジュールがスイッチモジュールであったので、分岐先のモジュールを検索するべく、スイッチELSEテーブル720を参照する。そして、ステップS2209では、情報処理装置100のCPU101は、参照しているスイッチELSEテーブル720に含まれる各モジュールに対して、対象の画像バッファと同じ画像バッファを入力画像バッファまたは出力画像バッファに設定しているモジュールを検索する(画像バッファ検索処理を実行する)。すなわち、再帰呼び出しを実行する。
ステップS2213では、情報処理装置100のCPU101は、他の分岐先のモジュールを検索するべく、スイッチCASEテーブル730を参照する。そして、ステップS2214では、情報処理装置100のCPU101は、参照しているスイッチCASEテーブル730に含まれる各モジュールに対して、対象の画像バッファと同じ画像バッファを入力画像バッファまたは出力画像バッファに設定しているモジュールを検索する(画像バッファ検索処理を実行する)。すなわち、再帰呼び出しを実行する。
ステップS2215では、情報処理装置100のCPU101は、ステップS2214を未処理のスイッチCASEテーブルが存在するか否かを判定する。未処理のスイッチCASEテーブルが存在すると判定した場合には、ステップS2216に処理を進める。未処理のスイッチCASEテーブルが存在しないと判定した場合には、後述する図23のステップS2301に処理を進める。
ステップS2216では、情報処理装置100のCPU101は、未処理のスイッチCASEテーブルを参照する。例えば、図7に示すスイッチテーブル700には、スイッチCASEテーブル730とスイッチCASEテーブル740の2つのスイッチCASEテーブルがある。ステップS2213でスイッチCASEテーブル730を参照し、ステップS2214を実行した場合には、残りのスイッチCASEテーブル740を処理しなければならないので、ステップS2216では、このスイッチCASEテーブル740を参照する。
説明を図23に移す。ステップS2301では、情報処理装置100のCPU101は、参照中のモジュールに入力画像バッファが設定可能であるか否かを判定する。参照中のモジュールの入力パラメータを参照して判定する。参照中のモジュールに入力画像バッファが設定可能であると判定した場合には、ステップS2302に処理を進める。参照中のモジュールに入力画像バッファが設定可能でないと判定した場合には、ステップS2306に処理を進める。
ステップS2302では、情報処理装置100のCPU101は、対象の画像バッファと同じ画像バッファが参照中のモジュールの入力画像バッファに設定されているか否かを判定する。より具体的には、参照中のモジュールの入力パラメータのうち、入力画像バッファに設定されている画像バッファの名称が、対象の画像バッファの名称と同じであるか否かを判定する。対象の画像バッファと同じ画像バッファが参照中のモジュールの入力画像バッファに設定されていると判定した場合には、ステップS2303に処理を進める。対象の画像バッファと同じ画像バッファが参照中のモジュールの入力画像バッファに設定されていないと判定した場合には、ステップS2306に処理を進める。
ステップS2303では、情報処理装置100のCPU101は、ステップS2302で選択中のモジュールと同じ画像バッファが入力画像バッファに設定されていると判定されたモジュールが、当該選択中のモジュールよりも上流にあるか(処理順が早いか)否かを判定する。選択中のモジュールよりも上流にあると判定した場合には、ステップS2304に処理を進める。選択中のモジュールより上流にないと判定した場合には、ステップS2305に処理を進める。
ステップS2304では、情報処理装置100のCPU101は、検索結果テーブル800に新しくレコードを追加し、参照中のモジュールのモジュールIDをモジュールID802に格納し、参照中のモジュールのモジュール名をモジュール名803に格納する。そして、一致画像バッファ804に「入力画像バッファ」と格納し、上流フラグ805に「1」を格納する。
一方、ステップS2305では、情報処理装置100のCPU101は、検索結果テーブル800に新しくレコードを追加し、ステップS2304と同様に情報を格納する。ただし、上流フラグ805には「0」を格納する。
ステップS2306では、情報処理装置100のCPU101は、参照中のモジュールに出力画像バッファが設定可能であるか否かを判定する。参照中のモジュールの出力パラメータを参照して判定する。参照中のモジュールに出力画像バッファが設定可能であると判定した場合には、ステップS2307に処理を進める。参照中のモジュールに出力画像バッファが設定可能でないと判定した場合には、ステップS2311に処理を進める。
ステップS2307では、情報処理装置100のCPU101は、対象の画像バッファと同じ画像バッファが参照中のモジュールの出力画像バッファに設定されているか否かを判定する。より具体的には、参照中のモジュールの出力パラメータのうち、出力画像バッファに設定されている画像バッファの名称が、対象の画像バッファの名称と同じであるか否かを判定する。対象の画像バッファと同じ画像バッファが参照中のモジュールの出力画像バッファに設定されていると判定した場合には、ステップS2308に処理を進める。対象の画像バッファと同じ画像バッファが参照中のモジュールの出力画像バッファに設定されていないと判定した場合には、ステップS2311に処理を進める。
ステップS2308では、情報処理装置100のCPU101は、ステップS2307で選択中のモジュールと同じ画像バッファが出力画像バッファに設定されていると判定されたモジュールが、当該選択中のモジュールよりも上流にあるか(処理順が早いか)否かを判定する。選択中のモジュールよりも上流にあると判定した場合には、ステップS2309に処理を進める。選択中のモジュールより上流にないと判定した場合には、ステップS2310に処理を進める。
ステップS2309では、情報処理装置100のCPU101は、検索結果テーブル800に新しくレコードを追加し、参照中のモジュールのモジュールIDをモジュールID802に格納し、参照中のモジュールのモジュール名をモジュール名803に格納する。そして、一致画像バッファ804に「出力画像バッファ」と格納し、上流フラグ805に「1」を格納する。
一方、ステップS2310では、情報処理装置100のCPU101は、検索結果テーブル800に新しくレコードを追加し、ステップS2309と同様に情報を格納する。ただし、上流フラグ805には「0」を格納する。
ステップS2311では、情報処理装置100のCPU101は、参照中のモジュールの処理順が参照中のテーブル(処理フローテーブル400、ループテーブル500、分岐THENテーブル610、分岐ELSEテーブル620、スイッチELSEテーブル720、スイッチCASEテーブル730、スイッチCASEテーブル740のいずれかのテーブル)において最後であるか否かを判定する。すなわち、参照中のテーブルに格納されているすべてのモジュールに対して、ステップS2202乃至ステップS2310の処理を実行したか否かを判定する。処理順が最後であると判定した場合には、ステップS2312に処理を進める。処理順が最後でないと判定した場合には、画像バッファ検索処理を終了する。
ステップS2312では、情報処理装置100のCPU101は、参照中のモジュールの次のモジュールを参照し、ステップS2202に処理を戻す。尚、ユーザから選択されているモジュールは参照しないので、当該モジュールの次のモジュールを参照するようにする。
以上のようにして、処理フローを構成するモジュールをユーザから指示された処理順に参照していき、ユーザから選択されているモジュールに設定された画像バッファと同じ画像バッファが入力画像バッファまたは出力画像バッファに設定されているモジュールを検索していく。該当するモジュールがあれば、その結果を検索結果テーブル800に記録しておくので、前述したモジュール選択処理やパラメータ変更処理において、同じ画像バッファが設定されているモジュールの画像バッファに関する情報を識別表示することができる。
以上説明したように、本実施形態によれば、処理フローにモジュールを追加する際に適切に画像バッファを確保することの可能な効果を奏する。
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。