(57)【要約】【課題】複数の処理モジュールを容易に連結して実行することができるように連結構造を構築でき、かつ柔軟に連結構造を変更することができるコネクタを提供する。【解決手段】コネクタ２０に、他のコネクタ２０と連結するための入力側連結部２４及び出力側連結部２６、自分自身と関連付けられる処理モジュールのＩＤを登録するためのＩＤ領域を備えたメモリ部２８、および他のコネクタ２０との連結状態を判断し、ＩＤ領域に登録され関連付けられた処理モジュール４０を他のコネクタ２０との連結状態に応じて制御する制御部２２を設ける。【選択図】        図３
2006338506.tif 000002
【特許請求の範囲】
【請求項１】
入力側及び出力側において少なくとも１つの他のコネクタと連結可能な連結部と、
予め定められた処理を実行する処理モジュールに関連付けるための関連付け部と、
他のコネクタとの連結状態を判断し、前記関連付け部によって関連付けられた処理モジュールを連結状態に応じて制御する制御部と、
を備えたコネクタ。
【請求項２】
前記制御部は、出力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、前記関連付けられた処理モジュールの処理の実行を制御し、該処理モジュールでの処理結果を連結されている他のコネクタに出力する請求項１記載のコネクタ。
【請求項３】
前記制御部は、入力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を用いて処理するように前記関連付けられた処理モジュールを制御する請求項１記載のコネクタ。
【請求項４】
前記制御部は、入力側及び出力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を用いて処理するように前記関連付けられた処理モジュールを制御し、該処理モジュールでの処理結果を出力側に連結されている他のコネクタに出力する請求項１記載のコネクタ。
【請求項５】
前記制御部は、更に、入力側において複数の他のコネクタと連結されていると判断した場合には、該複数の他のコネクタに関連付けられた処理モジュール全ての処理が終了するまで前記関連付けられた処理モジュールの処理が開始されないように制御する請求項３または請求項４記載のコネクタ。
【請求項６】
前記制御部は、入力側及び出力側において少なくとも１つの他のコネクタと連結されていると判断した場合で、かつ前記関連付け部によって処理モジュールが関連付けられていないと判断した場合または関連付けられた処理モジュールが無効であると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を処理することなく出力側に連結されている他のコネクタに出力する請求項１記載のコネクタ。
【請求項７】
他のコネクタとの連結構造を示した連結情報および処理モジュールとの関連付けを示した関連付け情報を所定の記憶装置に出力する出力部を更に備えた請求項１乃至請求項６のいずれか１項記載のコネクタ。
【請求項８】
他のコネクタとの連結構造を示した連結情報および処理モジュールとの関連付けを示した関連付け情報を記憶した記憶装置から連結情報及び関連付け情報を読み出し、該読み出した連結情報及び関連付け情報に基づいて前記連結部による連結と前記関連付け部による関連付けを再現する再現部を更に備えた請求項１乃至請求項７のいずれか１項記載のコネクタ。
【請求項９】
前記関連付けられた処理モジュールのステータスを記憶するステータス記憶部を更に備えた請求項１乃至請求項８のいずれか１項記載のコネクタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一連の処理系を構成する複数の処理モジュールを順に実行するために接続関係を構築するコネクタに関する。
【背景技術】
【０００２】
従来より、必要な処理モジュールを所望の順番でパイプライン状に連結した後、初期化し、処理を行うことで一連の画像処理を行うパイプライン化画像処理システムが知られている（例えば、特許文献１および特許文献２参照。）。
【特許文献１】特開平７−１０５０２０号公報
【特許文献２】特開２００３−２８１５１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記従来の技術では、各処理モジュールを直接連結しているため、一旦処理モジュールの接続関係（連結構造）を構築した後は、その連結構造を柔軟に変更することが困難である。また、例えば複数の処理を並列に行う場合には、処理フローの分岐や合流など複雑な連結構造を構築する必要があるが、その際、従来の技術では、各処理モジュール毎に「同期」、「競合」、及び「排他」などの制御を考慮する必要があり、連結構造を容易に構築することができない。更にまた、従来の技術では、処理モジュールの連結構造の構築と同時に各処理モジュールの処理用パラメータの設定を行うため、連結構築作業自体が複雑化する、という問題がある。
【０００４】
本発明は上記問題を解決するためになされたものであり、複数の処理モジュールを容易に連結して実行することができるように連結構造を構築でき、かつ柔軟に連結構造を変更することができるコネクタを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明のコネクタは、入力側及び出力側において少なくとも１つの他のコネクタと連結可能な連結部と、予め定められた処理を実行する処理モジュールに関連付けるための関連付け部と、他のコネクタとの連結状態を判断し、前記関連付け部によって関連付けられた処理モジュールを連結状態に応じて制御する制御部と、を備えている。
【０００６】
本発明のコネクタは、ソフトウェアまたはハードウェアで構成することができ、連結部によって他のコネクタと連結され、関連付け部によって処理モジュールに関連付けられる。また、制御部は該関連付けられた処理モジュールを他のコネクタとの連結状態に応じて制御する。
【０００７】
これにより、処理モジュールの連結構造がコネクタの連結により構築されるため、処理モジュール間の接続関係は疎となり、各処理モジュールの差し替えや変更が容易となると共に、複数の処理モジュールが直接的に連結された従来の場合と同様に、処理モジュールを最適な順序で実行することができる。
【０００８】
また、並列処理（複数のフローを並行して実行する処理）のような複雑な連結構造であっても、コネクタ同士が連結することによって容易に構築することができる。また、処理モジュールの実行制御を処理モジュール側ではなくコネクタ側で行うことができるため、例えば並列処理等では同期や競合、排他等の制御を考慮する必要があるが、処理モジュール側でこれを認識する必要がなくなり、同期や競合、排他等の制御が容易となる。
【０００９】
制御部は、出力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、前記関連付けられた処理モジュールの処理の実行を制御し、該処理モジュールでの処理結果を連結されている他のコネクタに出力することができる。
【００１０】
これにより、自己に関連付けられた処理モジュールの処理結果を後段のコネクタに出力することができ、該後段のコネクタに関連付けられた処理モジュールは該処理結果を用いて処理することができる。
【００１１】
制御部は、入力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を用いて処理するように前記関連付けられた処理モジュールを制御することができる。
【００１２】
これにより、コネクタは前段のコネクタに関連付けられた処理モジュールの処理結果を取得することができ、コネクタの制御部は自己に関連付けられた処理モジュールを、該処理結果を用いて処理するように制御することができる。
【００１３】
制御部は、入力側及び出力側において少なくとも１つの他のコネクタと連結されていると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を用いて処理するように前記関連付けられた処理モジュールを制御し、該処理モジュールでの処理結果を出力側に連結されている他のコネクタに出力することができる。
【００１４】
これにより、一連の処理の中間の処理を行う処理モジュールに関連付けられたコネクタは、自己に関連付けられた処理モジュールを前段のコネクタに関連付けられた処理モジュールの処理結果を用いて処理させることができ、更に自己に関連付けられた処理結果を後段のコネクタに出力することができるため、後段のコネクタに関連付けられた処理モジュールは該処理結果を用いて処理することができる。
【００１５】
更に、制御部は、入力側において複数の他のコネクタと連結されていると判断した場合には、該複数の他のコネクタに関連付けられた処理モジュール全ての処理が終了するまで前記関連付けられた処理モジュールの処理が開始されないように制御することができる。
【００１６】
このように処理モジュールの処理を制御することにより、例えば、複数の処理モジュールによる並列処理が行われるように各コネクタが連結された場合であって、並列処理の合流先の処理モジュールが該並列処理の各処理モジュールでの処理結果全てを用いて処理を行う場合に有効である。
【００１７】
制御部は、入力側及び出力側において少なくとも１つの他のコネクタと連結されていると判断した場合で、かつ前記関連付け部によって処理モジュールが関連付けられていないと判断した場合または関連付けられた処理モジュールが無効であると判断した場合には、入力側に連結された他のコネクタから取得した処理結果を処理することなく出力側に連結されている他のコネクタに出力することができる。
【００１８】
処理対象のデータによっては、連結された処理モジュールの一部をスキップしたい（処理をとばしたい）場合もある。その場合には、関連付け部によって処理モジュールを関連付けない、または関連付けられた処理モジュールを無効にしておけば、該コネクタは前段のコネクタから受け取った処理結果を処理モジュールで処理することなくそのまま後段のコネクタに出力することができる。これにより、複数の処理モジュールによる一連の処理を停止させることなく、一部の処理をとばすことができる。
【００１９】
なお、コネクタは、他のコネクタとの連結構造を示した連結情報および処理モジュールとの関連付けを示した関連付け情報を所定の記憶装置に出力する出力部を更に備えていてもよい。
【００２０】
また、他のコネクタとの連結構造を示した連結情報および処理モジュールとの関連付けを示した関連付け情報を記憶した記憶装置から連結情報及び関連付け情報を読み出し、該読み出した連結情報及び関連付け情報に基づいて前記連結部による連結と前記関連付け部による関連付けを再現する再現部を更に備えていてもよい。
【００２１】
これにより、一旦構築された連結構造を再利用、再構築することが容易となる。なお、再現部は、記憶されている連結構造及び処理モジュールの関連付けと同一の連結構造及び関連付けを再現するだけでなく、これを編集して再現するようにしてもよい。
【００２２】
前記関連付けられた処理モジュールのステータスを記憶するステータス記憶部を更に備えていてもよい。
【００２３】
これにより、処理モジュールの実行状態を把握することができ、処理モジュールの制御だけでなく、処理モジュールの処理結果の入出力制御も容易となる。
【発明の効果】
【００２４】
本発明に係るコネクタによれば、複数の処理モジュールを容易に連結して実行することができるように連結構造を構築でき、かつ柔軟に連結構造を変更することができる、という優れた効果を奏する。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照して、本発明の実施の形態について詳細に説明する。
【００２６】
図１は、本発明の実施の形態に係るソフトウェアで構成されたコネクタを用いて一連の処理を行う処理装置１０の構成を機能的に示したブロック図である。この処理装置１０は、処理対象のデータに対して所定の処理を行う処理モジュール４０をコネクタ２０により複数連結して一連の処理を実行する。なお、本実施の形態では、コネクタ２０及び処理モジュール４０の各々がプログラムモジュールで構成された場合を例に挙げて説明するが、コネクタ２０及び処理モジュール４０の一部あるいは全部が専用のハードウェアで構成されていてもよい。また、コネクタ２０や処理モジュール４０はスレッドとして機能するモジュールであってもよいし、プロセスとして機能するモジュールであってもよい。
【００２７】
図１に示すように、処理装置１０は、複数の処理モジュール４０を連結して処理を実行させる連結実行指示を入力するための指示部１２、処理モジュール４０の連結構造の情報やコネクタ２０と処理モジュールとの関連付けの情報を格納した連結構造記述ファイル１４、複数の処理モジュール４０を格納した処理モジュールファイル１６、及びコネクタ２０の基本モデルを格納したコネクタファイル１８を備えている。
【００２８】
指示部１２に入力される連結実行指示には、複数の処理モジュール４０をどのように連結するかを示す連結情報が含まれる。指示部１２に連結実行指示が入力されると、該連結実行指示に含まれる連結情報に基づき、処理モジュールファイル１６の処理モジュール４０及びコネクタファイル１８のコネクタ２０の基本モデルが用いられ、各処理モジュール４０に対応するコネクタ２０の生成や連結構造の構築が行われる。
【００２９】
図２は、コネクタファイル１８に格納されている基本モデルとしてのコネクタ２０の機能的な構成を示したブロック図である。図２に示すように、コネクタ２０は、自己に関連付けられた処理モジュール４０の起動・終了制御及びコネクタ２０全体の動作を制御する制御部２２を備えている。また、コネクタ２０は、入力側連結部２４及び出力側連結部２６を備えている。連結構造の間部のコネクタ２０についてはその初期化処理時に、入力側連結部２４に他のコネクタ２０の出力側連結部２６が接続設定され、出力側連結部２６に他のコネクタ２０の入力側連結部２４が接続設定される。なお、コネクタ２０が連結構造の先頭となるには、初期化処理時に、入力側連結部２４が無効化（他のコネクタと接続関係がない状態、すなわちNULL設定）され、連結構造の終端となるには、初期化処理時に、出力側連結部２６が無効化される。また、入力側連結部２４及び出力側連結部２６は、定義することによって個数を設定することができる。
【００３０】
さらに制御部２２には、メモリ部２８が接続されている。メモリ部２８には、コネクタ２０自身に関連付けられる処理モジュール４０の識別情報であるＩＤを登録するＩＤ領域、および該関連付けられた処理モジュール４０のステータスを保持するステータス領域が確保される。１つのコネクタ２０には１つの処理モジュール４０を関連付けることができる（すなわちメモリ部２８のＩＤ領域には処理モジュール４０のＩＤ１つを登録することができる）。制御部２２は、メモリ部２８に記憶されたＩＤで表された処理モジュール４０をインタフェース（ＩＦ）３０を介して制御する。なお、このＩＦ３０には、コネクタ２０及び処理モジュール４０の全てにおいて共通のインタフェースが使用される。従って、処理モジュール４０の関連付けが容易であり且つ変更も容易な構成となっている。
【００３１】
また、ＩＤ領域にNULLを設定することも可能である。NULLが設定された場合には、コネクタ２０には処理モジュール４０が関連付けられないため、該コネクタ２０では処理モジュール４０は実行されない。このようにＩＤ領域にNULLを設定することにより、必要に応じて、連結された一連の処理の中から不要な処理をスキップすることができる。なお、本実施の形態では、連結構造における先頭コネクタのＩＤ領域及び終端コネクタのＩＤ領域にはNULLは設定されない。
【００３２】
このように、コネクタファイル１８に格納されている基本モデルとしてのコネクタ２０は、入力側連結部２４及び出力側連結部２６が各々１つずつ定義されたコネクタである。本実施の形態では、指示部１２から連結実行指示が入力されると、コネクタファイル１８に格納された基本モデルのコネクタ２０が利用されて、連結させる処理モジュールの個数だけコネクタ２０が生成される。また、生成されたコネクタ２０の入力側連結部２４及び出力側連結部２６の個数は連結構造に応じて定義される。例えば、１つの処理モジュール４０から分岐して複数の処理モジュール４０を並列に実行させる場合には、分岐元の処理モジュール４０に関連付けられたコネクタ２０を生成するときに、そのコネクタ２０の出力側連結部２６の個数が、該並列に実行させる処理モジュール４０の個数に定義される。入力側連結部２４及び出力側連結部２６の個数が定義された後、他のコネクタ２０との連結構造が構築される。
【００３３】
図３は、３つの処理モジュールを直列に連結して一連の処理を行わせる連結実行指示が指示部１２を介して入力された場合に構築される連結構造を例示した図である。
【００３４】
まず、指示部１２を介して、連続して実行したい３つの処理モジュール４０ｘ、４０ｙ、４０ｚに対応するコネクタ２０ａ、２０ｂ、２０ｃの生成を指示する。また、生成したコネクタ２０ａ、２０ｂ、２０ｃには指示部１２から任意の識別名を設定する。続いて指示部１２を介して連結構造を定義する。また、このとき各コネクタ２０ａ、２０ｂ、２０ｃの入力側連結部２４及び出力側連結部２６の個数を定義する。ここでは一連の処理が分岐や合流構造を含まない直列構造であるため、基本モデルのコネクタ２０で定義されている入力側連結部２４及び出力側連結部２６の各々の個数（１個）をそのまま用いることができる。
【００３５】
連結構造の定義後、各コネクタ２０ａ、２０ｂ、２０ｃに対して各処理モジュール４０ｘ、４０ｙ、４０ｚの関連付けが定義される。
【００３６】
なお、コネクタの連結構造の定義、入力側連結部２４及び出力側連結部２６の個数の定義、識別名の設定、及び処理モジュールの関連付けの指示方法は特に限定されないが、例えば指示部１２がＧＵＩ（グラフィカルユーザインタフェース）で構成されている場合には、ＧＵＩの指示エリアにコネクタ２０を表したアイコンや処理モジュール４０を表したアイコンをユーザがドラッグして配置する等の操作によって連結構造の定義や処理モジュールの関連付けを行うようにしてもよい。また、入力側連結部２４及び出力側連結部２６の個数や識別名は、例えば、キーボード等の入力装置から直接入力したり、リストされた識別名の中から選択できるように構成してもよい。
【００３７】
また、指示部１２から、所定の記憶装置に予め記憶されている連結構造の情報等を呼び出して利用することもできる。
【００３８】
このように連結構造及び関連付けの定義がなされた後、実際に処理モジュールの連結構造を構築して処理モジュールを実行させるための連結実行指示が入力されると、３つのコネクタ２０ａ、２０ｂ、２０ｃは連結実行指示に含まれる連結情報（上記で定義した各情報）を判断して連結構造を構築し、処理モジュール４０の処理を最適な順序で実行する。
【００３９】
具体的には、まず、連結実行指示に応じて各コネクタ２０ａ、２０ｂ、２０ｃが連結される。具体的には、コネクタ２０ａの出力側連結部２６とコネクタ２０ｂの入力側連結部２４とが接続され、コネクタ２０ｂの出力側連結部２６とコネクタ２０ｃの入力側連結部２４とが接続される。この接続は、各コネクタに入力側連結部２４及び出力側連結部２６の少なくとも一方の個数を設定した後に、各コネクタ２０ａ、２０ｂ、２０ｃの入力側連結部２４及び出力側連結部２６に、接続される他のコネクタの識別名を設定することにより行われる。なお、コネクタ２０ａは先頭コネクタとなるためその入力側連結部２４にはNULLが設定され、コネクタ２０ｃは終端コネクタとなるため、コネクタ２０ｃの出力側連結部２６にはNULLが設定される。
【００４０】
更に、各コネクタ２０ａ、２０ｂ、２０ｃに処理モジュールＸ４０ｘ、処理モジュールＹ４０ｙ、処理モジュールＺ４０ｚが関連付けられる。具体的には、処理モジュールＸ４０ｘ、処理モジュールＹ４０ｙ、処理モジュールＺ４０ｚの各ＩＤが各コネクタ２０ａ、２０ｂ、２０ｃのメモリ部２８のＩＤ領域に登録されることにより関連付けが行われる。
【００４１】
なお、各処理モジュール４０ｘ、４０ｙ、４０ｚの実行に必要な各処理モジュール独自のパラメータを設定する場合には、上記連結処理及び関連付け処理とは別に、処理モジュール独自のインタフェースを介して行われる。
【００４２】
このように連結処理及び関連付け処理が終了した後、各コネクタ２０ａ、２０ｂ、２０ｃの各々は他のコネクタとの連結状態を判断して、最適な実行順で処理モジュール４０ｘ、４０ｙ、４０ｚを実行する。
【００４３】
前のコネクタから処理モジュールを順に実行し、処理後のデータを後段のコネクタに送って順に処理を行うバケツリレー方式の場合には、まず、先頭コネクタであるコネクタ２０ａの制御部２２は、関連付けされている処理モジュールＸ４０ｘに処理を実行させる。コネクタ２０ａは処理モジュールＸ４０ｘの処理結果をコネクタ２０ｂに送信する。コネクタ２０ｂは、コネクタ２０ａからの処理結果を処理モジュールＹ４０ｙに送出して処理モジュールＹ４０ｙに処理を実行させる。コネクタ２０ｂは処理モジュールＹ４０ｙの処理結果をコネクタ２０ｃに送信する。コネクタ２０ｃは、コネクタ２０ｂからの処理結果を処理モジュールＺ４０ｚに送出して処理モジュールＺ４０ｚに処理を実行させる。このように、コネクタ２０ａ、２０ｂ、２０ｃを介して連結された処理モジュール４０ｘ、４０ｙ、４０ｚは最適な順序で実行される。
【００４４】
また、バケツリレー方式に限らず、終端コネクタ（図３ではコネクタ２０ｃ）から処理モジュールを実行し、処理モジュールから必要に応じて前段のコネクタに処理対象のデータを要求するようなパイプライン方式によって一連の処理を実行するようにしてもよい。パイプライン方式は、連結された処理モジュール４０の各々の処理単位が異なる場合に特に有効である。例えば、画像データを画像処理する処理系では、処理対象の画像データが、処理モジュール４０毎に、「ライン単位」、「面単位」、「バイトブロック単位」など、異なる処理単位で処理されることがある。従って、このような場合には、処理モジュール４０から処理可能なデータ単位毎に必要なデータを要求することができるパイプライン方式を採用することよって、一連の処理の実行制御が容易となる。
【００４５】
処理装置１０において、バケツリレー方式で処理を実行するか、パイプライン方式で処理を実行するかは、予め指示部１２を介して設定しておくことができる。各コネクタ２０は、予め設定された方式に従って動作する。
【００４６】
図４は、連結実行指示に応じて生成されたコネクタ２０の各々で実行される処理の流れを示したフローチャートである。
【００４７】
ステップ１００では、初期化処理のサブルーチンが実行される。初期化処理サブルーチンでは各コネクタ２０の連結構造の構築及び処理モジュール４０の関連付けが行われる。初期化処理のサブルーチンが終了した後、ステップ２００で各処理モジュール４０を実行する処理モジュール実行処理のサブルーチンが実行される。
【００４８】
図５は、バケツリレー方式における初期化処理サブルーチンの流れを示したフローチャートである。ステップ１０２では、初期化処理として、以下の処理を行う。まず、メモリ部２８に、処理モジュール４０のＩＤを登録するＩＤ領域と、ＩＤ領域に登録された処理モジュール４０のステータスを記憶するステータス領域を確保し、ＩＤ領域に自己に関連付けられる処理モジュール４０のＩＤを登録する。このＩＤは連結実行指示の連結情報に含まれている。処理モジュール４０のＩＤをＩＤ領域に登録することにより、処理モジュール４０がコネクタ２０自身に関連付けされる。関連付けと同時に、連結実行指示に含まれる連結情報に基づいて、他のコネクタ２０との連結関係を構築する。具体的には、入力側連結部２４と出力側連結部２６に他のコネクタの識別名を設定する。ただし、コネクタ２０が先頭コネクタとなる場合は、入力側連結部２４にNULLが設定され、終端コネクタとなる場合は、出力側連結部２６にNULLが設定される。連結構造の構築及び処理モジュール４０の関連付けが終了した後は、該連結構造の情報と関連付けの情報を連結構造記述ファイルに書き出す。
【００４９】
ステップ１０４では、入力側連結部２４に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。ここで入力側連結部２４に他のコネクタ２０が連結されていないと判断した場合には、自分が先頭コネクタであると判断でき、ステップ１０６で、後段のコネクタ２０（出力側連結部２６に連結されているコネクタ２０）からの初期化終了通知の受信待ちを行う。ステップ２０６で初期化終了通知を受信した場合には、初期化処理サブルーチンを終了する。
【００５０】
また、ステップ１０４で、入力側連結部２４に他のコネクタ２０が連結されていると判断した場合には、ステップ１０８で、出力側連結部２６に他のコネクタ２０が連結されているか否かを判断する。ここで、出力側連結部２６に他のコネクタ２０が連結されていないと判断した場合には、自分が終端コネクタであると判断でき、ステップ１１０で、前段のコネクタ（入力側連結部２４に連結されているコネクタ２０）に初期化終了通知を送信する。
【００５１】
また、ステップ１０８で、出力側連結部２６に他のコネクタ２０が連結されていると判断した場合には、自分が先頭コネクタでもなければ終端コネクタでもない、すなわち、連結構造の中間に位置するコネクタであると判断できるため、ステップ１１２で、終端コネクタからの初期化終了通知の受信待ちを行い、初期化終了通知を受信した場合には、ステップ１１４で、受信した初期化終了通知を前段のコネクタ２０に転送する。
【００５２】
すなわち、終端コネクタから送信された初期化終了通知は、連結された各コネクタを介して先頭コネクタまで転送される。これにより、先頭コネクタは連結された全てのコネクタで初期化処理が完了したことを把握でき、処理モジュール４０の実行開始が可能となる。
【００５３】
初期化処理サブルーチン終了後は、処理モジュール実行処理サブルーチンが実行される。図６は、バケツリレー方式における処理モジュール実行処理サブルーチンの流れを示したフローチャートである。ステップ２０２では、メモリ部２８のステータス領域をリセットする。前述したように、ステータス領域は、自己に関連付けられた処理モジュール４０のステータスを保持するための領域である。ここでは、ステータス領域に“実行開始前”を示す識別子を格納する。
【００５４】
ステップ２０４では、入力側連結部２４に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。ここで入力側連結部２４に他のコネクタ２０が連結されていないと判断した場合には、自分自身が先頭コネクタであると判断でき、ステップ２０６で、自己に関連付けられた処理モジュール４０に初期化指示を出して初期化した後、処理モジュール４０の処理を開始する。
【００５５】
ステップ２０８では、処理モジュール４０の処理が開始されたため、ステータス領域に保持する識別子を、“実行中”を示す識別子に変更する。
【００５６】
ステップ２１０では、処理モジュール４０の処理が終了したか否かを判断する。処理モジュール４０からの処理結果あるいは処理終了通知を受領した場合に処理が終了したと判断することができる。ステップ２１０で、処理が終了したと判断した場合には、ステップ２１２で、ステータス領域に保持する識別子を、“実行終了”を示す識別子に変更する。
【００５７】
ステップ２１４では、出力側連結部２６に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。ここで出力側連結部２６に他のコネクタ２０が連結されていると判断した場合には、処理モジュール４０の処理結果を後段のコネクタ２０（出力側連結部２６に連結されているコネクタ２０）に送出する。また、ステップ２１４で、出力側連結部２６に他のコネクタ２０が連結されていないと判断した場合には、ステップ２１６の処理は行わずに処理モジュール実行処理ルーチンを終了する。
【００５８】
一方、ステップ２０４で、入力側連結部２４に他のコネクタ２０が連結されていると判断した場合には、自分が先頭コネクタ以外のコネクタであると判断でき、ステップ２１８に移行し、前段のコネクタ（入力側連結部２４に連結されているコネクタ２０）から処理結果の受信待ちを行う。ステップ２１８で、処理結果を受信したと判断した場合には、ステップ２２０で、処理モジュール４０との関連付けがあるか否かを判断する。すなわち、メモリ部２８のＩＤ領域に処理モジュール４０のＩＤが登録されている（関連付けがある）か、NULLが設定されている（関連付けが無い）か、を判断する。
【００５９】
ここで、ＩＤ領域に処理モジュール４０のＩＤが登録されていると判断した場合には、ステップ２２２で、該登録されている（関連付けられている）処理モジュール４０に初期化指示を出して初期化した後、処理モジュール４０に前段のコネクタ２０から受信した処理結果を用いた処理を実行させる。ステップ２２２の後は、ステップ２０８に移行して上記と同様に処理を実行する。
【００６０】
また、ステップ２２０で、ＩＤ領域にNULLが設定されている（処理モジュール４０との関連付けが無い）と判断した場合には、ステップ２２４で、受信した処理結果を後段のコネクタ２０に転送する。
【００６１】
なお、本実施の形態では、先頭コネクタ及び終端コネクタのＩＤ領域にはNULLは設定されないものとしているため、コネクタ２０が先頭コネクタの場合（ステップ２０４で肯定判断された場合）は、処理モジュールとの関連づけの有無の判断は省略している。
【００６２】
また、ここでは、前段のコネクタ２０から処理結果を受信するまで自己に関連付けられた処理モジュール４０を起動しないように制御する場合を例を挙げたが（上記ステップ２１８参照）、本発明はこれに限定されず、例えば、前段のコネクタ２０のステータス領域に“実行終了”の識別子が格納されるまで処理モジュール４０を起動しないように制御してもよい。この場合には、コネクタ２０間で、処理結果とは別に、ステータスの送受信も行われる。
【００６３】
以上、バケツリレー方式で処理を実行する場合を例に挙げて説明したが、パイプライン方式で処理を実行することもできる。パイプライン方式では、出力側連結部２６に他のコネクタ２０が連結されていない終端コネクタから処理モジュール４０を起動するため、以下のように処理することができる。
【００６４】
図７は、パイプライン方式における初期化処理サブルーチンの流れを示したフローチャートである。ステップ１２２では、初期化処理（連結構造の構築及び処理モジュール４０の関連付け）を行う。この処理は、バケツリレー方式の場合と同様（図５のステップ１０２参照）であるため説明を省略する。
【００６５】
ステップ１２４では、出力側連結部２６に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。ここで出力側連結部２６に他のコネクタが連結されていないと判断した場合には、自分が終端コネクタであると判断でき、ステップ１２６で、前段のコネクタ２０（入力側連結部２４に連結されているコネクタ２０）から初期化終了通知の受信待ちを行い、ここで初期化終了通知を受信した場合には初期化処理サブルーチンを終了する。
【００６６】
ステップ１２４で、出力側連結部２６に他のコネクタ２０が連結されていると判断した場合には、ステップ１２８で、入力側連結部２４に他のコネクタ２０が連結されているか否かを判断する。ここで、入力側連結部２４に他のコネクタ２０が連結されていないと判断した場合には、自分が先頭コネクタであると判断でき、ステップ１３０で、後段のコネクタ（出力側連結部２６に連結されているコネクタ２０）に初期化終了通知を送信する。
【００６７】
また、ステップ１２８で、入力側連結部２４に他のコネクタ２０が連結されていると判断した場合には、自分が先頭コネクタでもなければ終端コネクタでもない、すなわち、連結構造の中間に位置するコネクタであると判断できるため、ステップ１３２で、先頭コネクタからの初期化終了通知の受信待ちを行い、初期化終了通知を受信した場合には、ステップ１３４で、受信した初期化終了通知を後段のコネクタ２０に転送する。
【００６８】
すなわち、先頭コネクタから送信された初期化終了通知は、連結された各コネクタ２０を介して終端コネクタまで転送される。これにより、終端コネクタは連結された全てのコネクタ２０で初期化処理が完了したことを把握でき、処理モジュール４０の実行開始が可能となる。
【００６９】
初期化処理サブルーチン終了後は、処理モジュール実行処理サブルーチンが実行される。図８は、パイプライン方式における処理モジュール実行処理サブルーチンの流れを示したフローチャートである。ステップ２４２では、メモリ部２８のステータス領域をリセットする。具体的には、ステータス領域に“実行開始前”を示す識別子を格納する。
【００７０】
ステップ２４４では、出力側連結部２６に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。ここで出力側連結部２６に他のコネクタ２０が連結されていないと判断した場合には、自分が終端コネクタであると判断でき、ステップ２５２で、自己に関連付けられた処理モジュール４０に初期化指示を出して初期化し、処理モジュール４０の処理を開始する。
【００７１】
ステップ２５４では、処理モジュール４０の処理が開始されたため、ステータス領域に保持する識別子を、“実行中”を示す識別子に変更する。
【００７２】
ステップ２５６では、処理モジュール４０の処理が終了したか否かを判断する。ここでは、処理モジュール４０からの処理結果を受領した場合に、処理が終了したと判断することができる。ステップ２５６で、処理モジュール４０の処理はまだ終了していないと判断した場合には、ステップ２５８に移行し、処理モジュール４０から入力データ（前段のコネクタ２０での処理結果または処理結果の一部に相当する）の要求を受信したか否かを判断する。ステップ２５８で入力データ要求を受信していないと判断した場合には、ステップ２５６に戻る。
【００７３】
また、ステップ２５８で入力データ要求を受信したと判断した場合には、ステップ２６０で、前段のコネクタに対して入力データ要求を出す。ステップ２６２では、前段のコネクタからの入力データ待ちを行う。ステップ２６２で入力データを受信したと判断した場合には、ステップ２６４で、入力データを処理モジュール４０に送出する。入力データを受けた処理モジュール４０では、該入力データを用いて処理を実行することができる。その後、ステップ２５６に戻り、処理モジュール４０の処理が終了するまで、ステップ２５６〜２６４の処理が繰り返される。
【００７４】
なお、処理モジュール４０が、一連の処理における処理対象のデータ全てを１度に処理する場合には、ステップ２５６〜２６４の処理は１回ですむが、例えばバイトブロック単位などの細分化した処理単位で処理する場合等では、処理モジュール４０からは該処理単位毎に入力データ要求が出力されるため、ステップ２５６〜２６４の処理は処理対象のデータ全ての処理が完了するまで繰り返し行われることになる。
【００７５】
ステップ２５６で、処理モジュール４０の処理が終了したと判断した場合には、ステップ２６６で、ステータス領域に保持する識別子を、“実行終了”を示す識別子に変更する。
【００７６】
ステップ２６８では、出力側連結部２６に他のコネクタ２０が連結されているか（NULLが設定されているか）否かを判断する。
【００７７】
ステップ２６８で、出力側連結部２６に他のコネクタ２０が連結されていないと判断した場合には、終端コネクタであるため他のコネクタに処理結果を送信する必要が無いため、この処理モジュール実行処理サブルーチンを終了する。
【００７８】
一方、ステップ２６８で、出力側連結部２６に他のコネクタ２０が連結されていると判断した場合には、自分が終端コネクタ以外のコネクタであって、ステップ２４６で後段のコネクタ２０から入力データ要求を受けたことにより処理モジュール４０を実行したと判断でき、ステップ２７０で、入力データ要求で要求された処理単位分の処理結果を入力データとして後段のコネクタ２０に送信する。
【００７９】
ステップ２７２では、処理結果全てを後段のコネクタ２０に送信したか否かを判断する。
【００８０】
ステップ２７２で処理結果全てを後段のコネクタ２０に送信していないと判断した場合、あるいはステップ２４４で出力側連結部２６に他のコネクタ２０が連結されていないと判断した場合には、ステップ２４６に移行して、後段のコネクタ２０から入力データ要求を待つ。ステップ２４６で後段のコネクタ２０から入力データ要求を受信したと判断した場合には、ステップ２４８で、メモリ部２８のステータス領域に“実行終了”を示す識別子が保持されているか否かを判断する。すなわち、ここでは、自己に関連付けられた処理モジュール４０の処理が実行済か否かを判断する。
【００８１】
ステップ２４８で、メモリ部２８のステータス領域には“実行終了”を示す識別子が保持されていないと判断した場合には、ステップ２５０で、自分と処理モジュール４０との関連付けがあるか否かを判断する。すなわち、ＩＤ領域に処理モジュール４０のＩＤが登録されている（関連付けがある）か、NULLが設定されている（関連付けが無い）か、を判断する。
【００８２】
ここで、ＩＤ領域に処理モジュール４０のＩＤが登録されていると判断した場合には、ステップ２５２に移行し、該登録されている（関連付けられている）処理モジュール４０を起動して処理を開始する。これ以降のステップ２５２〜ステップ２７２の処理は前述した通りである。
【００８３】
一方、ステップ２４８で、メモリ部２８のステータス領域に“実行終了”を示す識別子が保持されていると判断した場合には、ステップ２７０に移行し、入力データ要求で要求された処理単位分の処理結果を入力データとして後段のコネクタ２０に送信して、ステップ２７２に移行する。処理結果全てが後段のコネクタ２０に送信されるまで、ステップ２４６、２４８、２７０、２７２の順に処理が繰り返される。前述したように、例えば後段の処理モジュール４０が、処理対象のデータを細分化した処理単位で処理する場合等では、後段の処理モジュール４０からは該処理単位毎に入力データ要求が出力されるため、ステップ２４６、２４８、２７０、２７２の処理は処理対象のデータ全ての処理が完了するまで繰り返し行われることになる。
【００８４】
また、ステップ２５０で、ＩＤ領域にNULLが設定されている（処理モジュール４０との関連付けが無い）と判断した場合には、ステップ２７４で、後段のコネクタ２０から受信した入力データ要求を前段のコネクタ２０に転送する転送処理を行う。
【００８５】
図９は、転送処理サブルーチンの詳細な流れを示すフローチャートである。
【００８６】
ステップ３００では、後段のコネクタ２０から受信した入力データ要求を、前段のコネクタに転送する。ステップ３０２では、前段のコネクタ２０から入力データの受信待ちを行う。ここで入力データを受信したと判断した場合には、ステップ３０４で、該受信した入力データを後段のコネクタ２０に転送する。
【００８７】
ステップ３０６では、転送処理サブルーチンを終了するか否かを判断する。例えば、送受信する入力データにデータの終了を示す識別子を付加しておけば、該識別子を参照することによって終了の判断を行うことができる。例えば、後段のコネクタ２０の処理モジュール４０が、処理対象のデータ全てを１度に処理せずに、細分化した処理単位で処理を繰り返して全データを処理する場合には、全データを転送し終わるまで（データ終了の識別子を確認するまで）該細分化された処理単位での入力データの転送が繰り返される。
【００８８】
ステップ３０６で、処理対象となる全データの転送が完了しておらず、転送処理サブルーチンを終了できないと判断した場合には、ステップ３０８で、後段のコネクタ２０から入力データ要求の受信待ちを行う。ここで、入力データ要求を受信したと判断した場合には、ステップ３００に戻り、上記の処理を繰り返す。
【００８９】
また、ステップ３０６で、処理対象となる全データの転送が完了したため、転送処理サブルーチンを終了すると判断した場合には、本サブルーチンを終了する。
【００９０】
この転送処理が実行されると、コネクタ２０は連結構造においてスキップされることになる。
【００９１】
なお、本実施の形態では、先頭コネクタ及び終端コネクタのＩＤ領域にはNULLは設定されないものとしているため、コネクタ２０が終端コネクタの場合（ステップ２４４で肯定判断された場合）は、処理モジュール４０との関連づけの有無の判断は省略している。
【００９２】
以上、パイプライン方式で処理を実行する場合を例に挙げて説明したが、このように、終端コネクタから処理モジュールが起動する場合であっても、最適な実行順で処理モジュールを実行させることができる。
【００９３】
次に、具体的な事例を挙げて説明する。
【００９４】
画像情報をディスク上のファイルから読み込み、適切な大きさに拡大縮小し、その画像情報に色変換処理をかけたあと、ディスク上のファイルに出力する画像処理系を例に挙げる。図１０は、この画像処理系の構成を模式的に示した図である。
【００９５】
この画像処理系は、図１０に示すように、「入力処理」「拡大縮小処理」「色変換処理」「出力処理」という、４つの処理モジュール４０ｒ、４０ｐ、４０ｑ、４０ｗが直列に連結されて構成される。コネクタ２０を用いてこのような画像処理系の連結構造を構築して実行する場合には、以下のような手順となる。
【００９６】
まず、指示部１２を介して、連続して実行したい４つの処理モジュール４０ｒ、４０ｐ、４０ｑ、４０ｗに対応するコネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ４（図１１（Ａ）参照）の生成を指示する。また、各コネクタ２０には任意の識別名（図１０では“read”、“proc1”、“proc2”、“write”）を設定する。さらに、各コネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ４が、上記一連の画像処理の構造に合わせて直列に連結されるように定義する。連結構造の定義後、各コネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ４に対して各処理モジュール４０ｒ、４０ｐ、４０ｑ、４０ｗの関連付けを定義する。
【００９７】
このように連結構造及び関連付けの定義がなされた後、実際に処理モジュールの連結構造を構築して処理モジュールを実行させるための連結実行指示が入力される。これにより、生成された４つのコネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ４は前述の図４に示すような処理ルーチンを実行して、連結実行指示に含まれる連結情報を判断して連結構造を構築し、処理モジュール４０の処理を最適な順序で実行する。
【００９８】
図１１及び図１２は連結構造の構築手順を模式的に示した図であり、図１３及び図１４は処理モジュールの実行手順を模式的に示した図である。
【００９９】
図１１（Ａ）に示すように、コネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ４が生成され、各コネクタに識別名が設定された後、図１１（Ｂ）に示すように、コネクタ２０ｃ１にコネクタ２０ｃ２が連結され、図１１（Ｃ）に示すように、コネクタ２０ｃ２とコネクタ２０ｃ３、コネクタ２０ｃ３とコネクタ２０ｃ４が連結される。連結は、前述したように、入力側連結部２４と出力側連結部２６に連結されるコネクタ２０の識別名を設定することにより行う。
【０１００】
また、コネクタ２０ｃ１は先頭コネクタであるため、入力側の連結が不要となり、コネクタ２０ｃ４は終端コネクタであるため、出力側の連結が不要となる。従って、図１１（Ｄ）に示すように、コネクタ２０ｃ１の入力側連結部２４、及びコネクタ２０ｃ４の出力側連結部２６は連結関係が無い状態（NULL）に設定される。
【０１０１】
コネクタ２０間の連結構造が構築された後、図１２（Ａ）に示すように、コネクタ２０ｃ１で「入力処理」の処理モジュール４０ｒの関連付けが行われる。関連付けは、前述したように、コネクタ２０Ｃ１のメモリ部２８のＩＤ領域に、「入力処理」の処理モジュール４０ｒのＩＤを登録することにより行われる。同様に、図１２（Ｂ）に示すように、他のコネクタ２０ｃ２、２０ｃ３、２０ｃ４に対して、「拡大縮小処理」「色変換処理」「出力処理」の処理モジュール４０ｐ、４０ｑ、４０ｗの関連付けが行われる。
【０１０２】
続いて、処理モジュール４０ｒ、４０ｐ、４０ｑ、４０ｗの実行が開始される。処理モジュール４０ｒ、４０ｐ、４０ｑ、４０ｗの実行をバケツリレー方式で行う場合には、前述の図６に示すような処理ルーチンが実行される。
【０１０３】
具体的には、まず、図１３（Ａ）に示すように、コネクタ２０ｃ１は、自分自身に関連付けられた入力処理モジュール４０ｒに初期化・実行指示を出す。入力処理モジュール４０ｒは、初期化後、入力画像の画像情報をディスク上のファイルから読み込み、読み込だ入力画像情報を処理結果としてコネクタ２０ｃ１に渡す。コネクタ２０ｃ１は、処理モジュール４０ｒから入力画像情報を取得して、図１３（Ｂ）に示すように後段のコネクタ２０ｃ２に送出する。
【０１０４】
次に、図１３（Ｃ）に示すように、コネクタ２０ｃ２は、自分自身に関連付けられた拡大縮小処理モジュール４０ｐに初期化・実行指示を出すと共に、コネクタ２０ｃ１から受信した入力画像情報を拡大縮小処理モジュール４０ｐに渡す。拡大縮小処理モジュール４０ｐは、初期化後、受け取った入力画像情報に拡大縮小処理を施し、該処理結果（処理後画像情報Ａ）をコネクタ２０ｃ２に送出する。コネクタ２０ｃ２は、拡大縮小処理モジュール４０ｐから処理後画像情報Ａを取得して、後段のコネクタ２０ｃ３に送出する。
【０１０５】
次に、図１３（Ｄ）に示すように、コネクタ２０ｃ３は、自分自身に関連付けられた色変換処理モジュール４０ｑに初期化・実行指示を出すと共に、コネクタ２０ｃ２から受信した処理後画像情報Ａを色変換処理モジュール４０ｑに渡す。色変換処理モジュール４０ｑは、初期化後、処理後画像情報Ａに色変換処理を施して、該処理結果（処理後画像情報Ｂ）をコネクタ２０ｃ３に送出する。コネクタ２０ｃ３は、色変換処理モジュール４０ｑから処理後画像情報Ｂを取得して、後段のコネクタ２０ｃ４に送出する。
【０１０６】
次に、図１３（Ｅ）に示すように、コネクタ２０ｃ４は、自分自身に関連付けられた出力処理モジュール４０ｗに初期化・実行指示を出すと共に、コネクタ２０ｃ３から受信した処理後画像情報Ｂを出力処理モジュール４０ｗに渡す。出力処理モジュール４０ｗは、初期化後、処理後画像情報Ｂをディスク上のファイルに出力する。
【０１０７】
処理モジュールの実行をパイプライン方式で行う場合には、前述の図８に示すような処理ルーチンが実行される。
【０１０８】
具体的には、まず、図１４（Ａ）に示すように、終端コネクタであるコネクタ２０ｃ４は、自分自身に関連付けられた出力処理モジュール４０ｗに初期化・実行指示を出す。出力処理モジュール４０ｗは、初期化後、コネクタ２０ｃ４に対して出力処理を行うために必要な入力データの要求を行う。なお、実装例としては、コールバック関数や入力バッファオブジェクトなどを処理モジュールの４０の初期化指示時に各コネクタ２０から各処理モジュール４０へ渡しておくことなどが考えられる。
【０１０９】
入力データ要求を受けたコネクタ２０ｃ４は、図１４（Ｂ）に示すように、コネクタ２０ｃ３に対して入力データ要求を行う。入力データ要求を受けたコネクタ２０ｃ３は、色変換処理モジュール４０ｑに初期化・実行指示を出す。色変換処理モジュール４０ｑは、コネクタｃ３に対して色変換処理を行うために必要な入力データ要求を行う。同様に、コネクタ２０ｃ２、２０ｃ１の順に入力データ要求がさかのぼり、最終的に、先頭コネクタであるコネクタ２０ｃ１が、コネクタ２０ｃ２からの入力データ要求を受け、図１４（Ｃ）に示すように、入力処理モジュール４０ｗに初期化・実行指示を出す。
【０１１０】
入力処理モジュール４０ｗは入力画像の読み込みを行い、コネクタ２０ｃ１に対し、読み込んだ入力画像のデータを処理結果として渡す。さらに、コネクタ２０ｃ１は、コネクタ２０ｃ２からの入力データ要求に応じて、入力処理モジュール４０ｗから取得した処理結果を入力データとしてコネクタ２０ｃ２に送出する。
【０１１１】
図１４（Ｄ）に示すように、コネクタ２０ｃ２は、拡大縮小処理モジュール４０ｐに対し、コネクタ２０ｃ１から取得した入力データを渡す。拡大縮小処理モジュール４０ｐは、取得した入力データに対して拡大縮小処理を施し、処理後のデータをコネクタ２０ｃ２に返す。さらに、コネクタ２０ｃ２は、コネクタ２０ｃ３からの入力データ要求に応じて、拡大縮小処理モジュール４０ｐから取得した処理後のデータを送出する。
【０１１２】
同様に、コネクタ２０ｃ３はコネクタ２０ｃ２から取得した入力データを用いて色変換処理モジュール４０ｑの処理を実行し、処理後のデータをコネクタ２０ｃ４に送出する。コネクタ２０ｃ４は、図１４（Ｅ）に示すように、コネクタ２０ｃ３から取得した入力データを用いて出力処理モジュール４０ｗの出力画像の書き出し処理を実行する。
【０１１３】
なお、コネクタ２０によって連結構造を構築することにより、いったん構築された連結構造自体は修正せずに、関連付けだけを変更することによって、処理モジュール４０の実行順序や種類を変更したり、処理モジュールを実行せずにスキップする等のカスタマイズを容易に行うことができる。具体的には、コネクタ生成時に、指示部１２から変更指示が入力されたときに実行される処理ルーチンのプログラムを含ませてコネクタ２０を生成し、連結構造の構築後に変更指示が入力されたときは、コネクタ２０が該変更指示に基づいて関連付けを変更する。
【０１１４】
ここで、より具体的な例を挙げて説明する。
【０１１５】
図１０で例示した画像処理系で入力画像データに拡大処理を施す場合、拡大処理する前に色変換処理を行う方が色変換処理の対象となる画像データのサイズが小さくてすむため、処理効率がよい。すなわち、処理対象データによっては、処理モジュール４０の実行順序を入れ替えたほうがよい場合がある。そこで、図１５（Ａ）に示すように拡大縮小処理モジュール４０ｐ及び色変換処理モジュール４０ｑの実行順序を入れ替える場合、まず、すでに構築されている連結構造に対して処理モジュール４０の関連付けを変更する変更指示を指示部１２から入力する。各コネクタ２０は、該変更指示が入力されると、入力された変更指示に従って自己に関連付けられた処理モジュール４０の設定を以下のように変更する。
【０１１６】
図１５（Ｂ）に示すように、コネクタ２０ｃ２が、自己のメモリ部２８のＩＤ領域に、拡大縮小処理モジュール４０ｐのＩＤに代えて色変換処理モジュール４０ｑのＩＤを登録する。また、図１５（Ｃ）に示すように、コネクタ２０ｃ３が、自己のメモリ部２８のＩＤ領域に、色変換処理モジュール４０ｑのＩＤに代えて拡大縮小処理モジュール４０ｐのＩＤを登録する。
【０１１７】
このように、連結構造を再構築することなく、関連付けを変更するだけで容易に処理モジュール４０の実行順序を変更することができる。
【０１１８】
また、図１０で例示した画像処理系において、入力画像がすでに目的とする画像サイズに一致している場合には、「拡大縮小」処理は不要となるので、図１６（Ａ）に示すように、拡大縮小処理を省略（スキップ）することもできる。この場合も、図１６（Ｂ）に示すように、指示部１２からの変更指示に応じてコネクタ２０ｃ２のメモリ部２８のＩＤ領域に無効値(NULL）を設定する。これにより、連結構造を再構築することなく、連結構造から拡大縮小処理モジュール４０ｐの取り外しを行うことができる。
【０１１９】
また、図１０で例示した画像処理系において、図１７（Ａ）に示すように、入力画像に対して拡大縮小処理に代えて９０度回転処理を施したい場合には、図１７（Ｂ）に示すように、コネクタ２０ｃ２のメモリ部２８のＩＤ領域に登録するＩＤを、拡大縮小処理モジュール４０ｐのＩＤから、９０度回転処理モジュール４０ｓのＩＤに変更する。これにより、連結構造を再構築することなく、拡大縮小処理モジュール４０ｐの代わりに９０度回転処理モジュール４０ｓを実行することができる。
【０１２０】
また、コネクタ２０を用いて連結構造を構築することによって、「分岐」や「合流」が含まれるような複雑な処理フローも容易に構築することができる。
【０１２１】
例えば、人物が写った写真画像から人物の顔部分をだけを抽出し、抽出した顔部分だけに明るさ補正処理を施すような画像処理系を構築する場合、図１８に示すような連結構造が考えられる。まず、入力処理モジュール４０ｒを実行して入力画像の画像データを読み込んだ後、該入力画像データを顔検出処理モジュール４０ｆ及び明るさ補正処理モジュール４０ｂの各々に送出する。顔検出処理モジュール４０ｆは入力画像データから人物の顔部分を検出し、マスク画像作成処理モジュール４０ｍは検出された顔部分のマスク画像を生成する。一方、これら処理と並行して、明るさ補正処理モジュール４０ｂは、入力画像データに明るさ補正を施す。マスク画像作成処理モジュール４０ｍの処理結果及び明るさ補正処理モジュール４０ｂの処理結果は、合成処理モジュール４０ｃに送信され、合成処理モジュール４０ｃで各処理結果が合成される。最後段の出力処理モジュール４０ｗでは、合成処理モジュール４０ｃで合成された処理結果（画像データ）が出力される。
【０１２２】
このように分岐や合流等の複雑な連結構造を有する画像処理系は、コネクタ２０を用いて以下のように構築することができる。
【０１２３】
まず、図１９（Ａ）に示すように、指示部１２から指示して各処理モジュール４０に対応するコネクタ２０ｃ１〜２０ｃ６を生成する。各コネクタ２０ｃ１〜２０ｃ６には図示するような識別名を設定する。さらにまた、指示部１２を介して各コネクタ２０ｃ１〜２０ｃ６の入力側連結部２４及び出力側連結部２６の個数を定義し設定する。具体的には、分岐や合流等の連結構造を含むため、分岐元のコネクタ２０ｃ１の出力連結部２６の個数は２個となるように定義し、合流先のコネクタ２０ｃ５の入力側連結部２４の個数は２個となるように定義する。これ以外は各々基本モデルの個数（１個）のまま定義する。
【０１２４】
次に、生成された各コネクタ２０ｃ１〜２０ｃ６は、図１９（Ｂ）に示すように、上側のフローを構築するコネクタ２０ｃ１、２０ｃ２、２０ｃ３、２０ｃ５、２０ｃ６の入力側連結部２４及び出力側連結部２６に、隣り合うコネクタ２０の識別名を設定して互いに連結する。
【０１２５】
さらに、図２０（Ａ）に示すように、分岐元であるコネクタ２０ｃ１は、２個目の（この時点で未設定の）出力側連結部２６にコネクタ２０ｃ４の識別名を設定して、コネクタ２０ｃ４と連結する。
【０１２６】
また、図２０（Ｂ）に示すように、合流先であるコネクタ２０ｃ５は、２個目の（この時点で未設定の）入力側連結部２４にコネクタ２０ｃ４の識別名を設定して、コネクタ２０ｃ４と連結する。
【０１２７】
さらに、コネクタ２０ｃ１〜２０ｃ６は、自分自身に処理モジュール４０を関連付ける。処理モジュール４０の関連付けは、前述と同様、各コネクタ２０ｃ１〜２０ｃ６のメモリ部２８のＩＤ領域に、関連付ける処理モジュール４０ｒ、４０ｆ、４０ｍ、４０ｃ、４０ｂ、４０ｗのＩＤを各々登録することにより行う。
【０１２８】
各コネクタ２０ｃ１〜２０ｃ６に関連付けられた処理モジュール４０ｒ、４０ｆ、４０ｍ、４０ｃ、４０ｂ、４０ｗは、図６や図８で説明したように連結状態に応じて最適な順序で実行される。なお、ここでは連結構造に分岐・合流構造が含まれているため、分岐・合流箇所では、以下のように処理が行われる。分岐元のコネクタ２０ｃ１は後段に連結された複数のコネクタ２０ｃ２、２０ｃ４の双方に入力処理モジュール４０ｒで読み込まれた入力画像データを送出する。分岐後は、コネクタ２０ｃ２、２０ｃの系と、コネクタ２０ｃ４の系とで並列に処理が行われる。合流先であるコネクタ２０ｃ５は、入力側連結部２４に連結された２つのコネクタ２０ｃ３、２０ｃ４からの処理結果を待って（あるいはコネクタ２０ｃ３、２０ｃ４のステータス領域に実行終了の識別子が格納されるのを待って）合流処理モジュール４０ｃを実行させる。これにより各フローの同期をとることができる。
【０１２９】
このように、コネクタを用いて分岐・合流構造を構築することにより、図２１に示すように、コネクタ２０ｃ１の出力側連結部２６に連結されたコネクタ２０ｃ２、２０ｃ４を別スレッドで起動させて、コネクタ２０ｃ２、２０ｃ３のフローと、コネクタ２０ｃ４とを並列に実行させることができるため、一連の処理系を複数のフローに分岐させ各フローを独立したスレッド、あるいは別個のＣＰＵで並列処理として実行させたい場合でも、制御が容易となる。
【０１３０】
なお、分岐した複数スレッドで最も早く終了したスレッドの処理結果を受けて次の処理に進むような分岐フローを構築することもできる。その場合には、上記と同様に連結構造を構築するが、合流先のコネクタ２０自体を、合流先のコネクタ２０は、最初に受信した処理結果のみを用いて自己に関連付けられた処理モジュール４０を実行させるように構成する。さらに、入力側連結部２４に連結された最速スレッド以外の他のスレッドに対応するコネクタ２０に、処理の実行を強制終了するための強制終了指示を出力するように構成してもよい。強制終了指示を受けたコネクタ２０は、これに従い、実行中の処理モジュール４０を強制終了させることができる。
【０１３１】
なお、並列処理においては、前述したような同期制御だけでなく、処理内容によっては競合・排他制御が必要になる場合がある。このような場合においても、コネクタ２０を用いて連結構造を構築すれば、容易に制御することができる。
【０１３２】
図２２は、セマフォモデルを用いた競合回避フローの連結構造の構築例である。コネクタ２０ｃ２、２０ｃ３、２０ｃ４のフロー１とコネクタ２０ｃ５、２０ｃ６のフロー２とが並列に配置されている。フロー１及びフロー２は処理装置１０の共有リソースを使用する。各フローの最終コネクタ２０ｃ４、２０ｃ６の出力側連結部２６コネクタ２０ｃ７の入力側連結部２４に連結されている。また、コネクタ２０ｃ７の出力側連結部２６が、各フローの先頭コネクタ２０ｃ２、２０ｃ５の入力側連結部２４に連結されている。
【０１３３】
コネクタ２０ｃ７はセマフォとして機能し、フロー１、２のうちいずれか一方のフローに処理開始指示を出力し、該一方のフローからコネクタ２０ｃ７に処理結果（あるいは処理終了通知）が出力されると、今度は他方のフローに処理開始指示を出力する。これにより、競合を回避できる。
【０１３４】
このように、コネクタを用いることによって、競合・排他制御を容易に行うことができる。
【０１３５】
また、本実施の形態では、連結され既に実行が終了した連結構造の再利用（再実行）が可能である。再利用する場合には、指示部１２からの再実行指示により、各コネクタ２０に前述の処理モジュール実行処理サブルーチンを再度実行させる。この場合には、連結構造の構築及び処理モジュールの関連付けを行う初期化処理サブルーチンの実行は不要である。これにより、各処理モジュール４０を再初期化して、各処理モジュール４０を最適な実行順序で再度実行することができる。
【０１３６】
なお、各処理モジュール４０の独自のパラメータを変更したい場合には、該当のコネクタ２０に既に関連付けされている処理モジュール４０に対して、その処理モジュール独自のインタフェースを介して直接パラメータを再設定する。例えば、図１０で例示した画像処理系において、拡大縮小処理モジュール４０ｐの拡大縮小の倍率を変更したい場合には、図２３に示すように、指示部１２から、拡大縮小処理モジュール４０ｐの独自のインタフェースを介して倍率変更指示を行う。すなわち、連結構造の構築や処理モジュールの関連付けとは別のインタフェースで変更指示を行う。これにより、各処理モジュールのパラメータの設定を、連結構造の構築や処理モジュールの関連付けと分離して行うことができる。従って、各処理モジュール４０に対するパラメータ変更が容易になると共に、連結構造の再利用も容易となる。
【０１３７】
また、上記実施の形態で説明したように、構築した連結構造の情報や関連付けの情報を連結構造記述ファイル１４に保存しておけば、同一の連結構造の処理をいつでも再現して実行することができる。また、過去に構築した連結構造に類似した連結構造を効率的に構築することもできる。
【０１３８】
例えば、図２４に示すように、処理装置１０あるいはコネクタ２０に連結構造記述ファイル１４に保存したデータを直接編集できる再構築プログラム１５を設ける。この再構築プログラム１５により、連結構造記述ファイル１４に保存した連結構造の情報、関連づけの情報を直接編集して連結構造の構築をプログラミング無しに実現することができる。
【０１３９】
例えば、予めプロトタイプとして作成した連結構造を連結構造記述ファイル１４に保存しておけば、該保存したプロトタイプの連結構造を流用して、類似した連結構造を容易に構築することができる。編集を一切行わない場合には、該保存した連結構造がそのまま再現される。
【０１４０】
このような構成によれば、効率的に連結構造を構築することができ、特に、分岐・合流を繰り返すような複雑なケースでより高い効果が見込まれる。
【０１４１】
なお、上記実施の形態では、初期化処理において、コネクタ２０が連結構造の情報と処理モジュール４０の関連付けの情報を連結構造記述ファイル１４に書き出すようにしているが、これに限定されず、指示部１２で連結構造や関連付けが指示されたときに、指示部１２が該連結構造や関連付けの情報を連結構造記述ファイル１４に書き出すようにしてもよい。
【０１４２】
また、連結構造記述ファイル１４は、上記実施の形態のように処理装置１０内部に設けてもよいし、外部に設けてもよい。外部に設ける場合には、ネットワークを介してデータの授受ができるように構成することができる。
【０１４３】
また、上記実施の形態では、連結構造の構築及び処理モジュールの関連付けを生成されたコネクタ２０自身が行う場合を例に挙げて説明したが、これに限定されず、例えば、処理装置１０が連結構造の構築とコネクタ２０に対する処理モジュールの４０の関連付けを行うようにしてもよい。この場合には、コネクタ２０は、連結構造構築後の処理モジュールの実行制御のみを行う。
【図面の簡単な説明】
【０１４４】
【図１】本発明の実施の形態に係る処理装置の構成を機能的に示したブロック図である。
【図２】コネクタファイルに格納されているコネクタの機能的な構成を示したブロック図である。
【図３】３つの処理モジュールを直列に連結して一連の処理を行わせる連結実行指示が指示部を介して入力された場合に構築される連結構造を例示した図である。
【図４】連結実行指示に応じて生成されたコネクタの各々で実行される処理の流れを示したフローチャートである。
【図５】バケツリレー方式における初期化処理サブルーチンの流れを示したフローチャートである。
【図６】バケツリレー方式における処理モジュール実行処理サブルーチンの流れを示したフローチャートである。
【図７】パイプライン方式における初期化処理サブルーチンの流れを示したフローチャートである。
【図８】パイプライン方式における処理モジュール実行処理サブルーチンの流れを示したフローチャートである。
【図９】転送処理サブルーチンの詳細な流れを示すフローチャートである。
【図１０】複数の処理モジュールを連結して実行する画像処理系の構成を模式的に示した図である。
【図１１】図１０に示した連結構造の構築手順を模式的に示した図である。
【図１２】図１０に示した処理モジュールの関連付け手順を模式的にに示した図である。
【図１３】バケツリレー方式で図１０の処理系の処理モジュールを実行する場合の実行手順を模式的に示した図である。
【図１４】パイプライン方式で図１０の処理系の処理モジュールを実行する場合の実行手順を模式的に示した図である。
【図１５】処理モジュールの実行順序を変更する場合の手順を模式的にに示した図である。
【図１６】コネクタに関連付けられた処理モジュールを無効にする場合の手順を模式的にに示した図である。
【図１７】処理モジュールを変更する場合の手順を模式的にに示した図である。
【図１８】分岐、合流構造が含まれる画像処理系の一例を模式的に示した図である。
【図１９】図１８に示した画像処理系の連結構造の構築手順を模式的に示した図である。
【図２０】図１８に示した画像処理系の連結構造の構築手順を模式的に示した図である。
【図２１】図１８に示した画像処理系の実行手順を模式的に示した図である。
【図２２】セマフォモデルを用いた競合回避フローの連結構造の構築例を示した図である。
【図２３】連結構造を再利用する場合の処理モジュールに対するパラメータ変更を説明する図である。
【図２４】連結構造記述ファイルに保存した連結構造の情報を再利用する場合の一例を説明する図である。
【符号の説明】
【０１４５】
１０  処理装置
１２  指示部
１４  連結構造記述ファイル
１５  再構築プログラム
１６  処理モジュールファイル
１８  コネクタファイル
２０  コネクタ
２２  制御部
２４  入力側連結部
２６  出力側連結部
２８  メモリ部
４０  処理モジュール
【図１】
2006338506.tif 000003
【図２】
2006338506.tif 000004
【図３】
2006338506.tif 000005
【図４】
2006338506.tif 000006
【図５】
2006338506.tif 000007
【図６】
2006338506.tif 000008
【図７】
2006338506.tif 000009
【図８】
2006338506.tif 000010
【図９】
2006338506.tif 000011
【図１０】
2006338506.tif 000012
【図１１】
2006338506.tif 000013
【図１２】
2006338506.tif 000014
【図１３】
2006338506.tif 000015
【図１４】
2006338506.tif 000016
【図１５】
2006338506.tif 000017
【図１６】
2006338506.tif 000018
【図１７】
2006338506.tif 000019
【図１８】
2006338506.tif 000020
【図１９】
2006338506.tif 000021
【図２０】
2006338506.tif 000022
【図２１】
2006338506.tif 000023
【図２２】
2006338506.tif 000024
【図２３】
2006338506.tif 000025
【図２４】
2006338506.tif 000026