以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
コンピュータ10はCPU12、DRAM又はSRAM等から成るメモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述したような画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
また、通信制御部25は通信回線を介してコンピュータ・ネットワーク26に接続されており、コンピュータ・ネットワーク26には、サーバ・コンピュータ27を含む複数台のコンピュータが各々接続されている(図1ではサーバ・コンピュータ27以外のコンピュータの図示を省略している)。通信制御部25はコンピュータ・ネットワーク26経由での他のコンピュータとの通信を司る。また、サーバ・コンピュータ27はCPU27A、メモリ27B、HDD27C及び通信制御部27Dを備えており、通信制御部27Dが通信回線を介してコンピュータ・ネットワーク26に接続されている。なお、コンピュータ10は本発明に係る第1コンピュータに、サーバ・コンピュータ27は本発明に係る第2コンピュータに各々対応している。
記憶部20は本発明に係る記憶手段に対応しており、この記憶部20には、図1に示すように、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行うが(詳細は後述)、画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や1画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション32が画像処理部の再構築を指示することで、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
以下、画像処理プログラム群34について説明する。図1に示すように、画像処理プログラム群34はモジュールライブラリ36と、処理構築部42のプログラムと、処理管理部46のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部42は、アプリケーションからの指示により、例として図2に示すように、予め定められた画像処理を行う1つ以上の画像処理モジュール38と、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール40と、がパイプライン形態又はDAG(Directed Acyclic Graph:有向非循環グラフ)形態で連結されて成る画像処理部50を構築する。画像処理部50を構成する個々の画像処理モジュールの実体はCPU12によって実行されCPU12で所定の画像処理を行わせるための第1プログラム、又は、CPU12によって実行されCPU12により図1に図示されていない外部の画像処理装置(例えば専用画像処理ボード等)に対する処理の実行を指示するための第2プログラムであり、上述したモジュールライブラリ36には、予め定められた互いに異なる画像処理(例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等)を行う複数種の画像処理モジュール38のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部50を構成する個々の画像処理モジュールの実体が上記の第1プログラムであるものとして説明する。
個々の画像処理モジュール38は、例として図3(A)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン38Aと、画像処理モジュール38の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン38Aの制御を行う制御部38Bから構成されている。個々の画像処理モジュール38における単位処理データ量は、画像の1ライン分、画像の複数ライン分、画像の1画素分、画像1面分等を含む任意のバイト数の中から、画像処理エンジン38Aが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール38では単位処理データ量が1画素分とされ、拡大・縮小処理を行う画像処理モジュール38では単位処理データ量が画像の1ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール38では単位処理データ量が画像1面分とされ、画像圧縮伸長処理を行う画像処理モジュール38では単位処理データ量が実行環境に依存するNバイトとされている。
また、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている(図1では、この種の画像処理モジュールを「モジュール1」「モジュール2」と表記して示している)。例えば拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、例えば色変換処理を行う画像処理モジュール38については、RGB色空間をCMY色空間へ変換する画像処理モジュール38やその逆へ変換する画像処理モジュール38、L*a*b*色空間等の他の色空間変換を行う画像処理モジュール38が各々用意されている。
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データ量ずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば画像回転処理を行う画像処理モジュール38における単位処理データ量についても、前述した画像1面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる(例えば画像の1ライン分や複数ライン分等の)複数の画像処理モジュール38がモジュールライブラリ36に含まれていても良い。
また、モジュールライブラリ36に登録されている個々の画像処理モジュール38のプログラムは、画像処理エンジン38Aに相当するプログラムと制御部38Bに相当するプログラムから構成されているが、制御部38Bに相当するプログラムは部品化されており、個々の画像処理モジュール38のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール38は、画像処理エンジン38Aで実行される画像処理の種類や内容に拘わらず、制御部38Bに相当するプログラムが共通化されている(制御部38Bに相当するプログラムとして同一のプログラムが用いられている)。これにより、画像処理モジュール38のプログラムの開発にあたっての開発負荷が軽減される。
なお、画像処理モジュール38の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール38については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール38について、制御部38Bに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群34は、前述のように各種機器に実装可能であるが、画像処理プログラム群34のうちモジュールライブラリ36に登録する画像処理モジュール38の数や種類等については、画像処理プログラム群34を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
また、画像処理部50を構成する個々のバッファモジュール40は、例として図3(B)にも示すように、バッファ40Aと、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行うバッファ制御部40Bから構成されている。なお、バッファ40Aはコンピュータ10に設けられたメモリ14からオペレーティングシステム30及びリソース管理部46Bを通じて確保されたメモリ領域で構成される。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
また本実施形態では、バッファモジュール40のバッファ40Aに対して複数の画像処理モジュール38が同時にアクセスする可能性があることを考慮し、バッファ40Aへのアクセスに対して排他制御を行う、排他制御機能付きのバッファモジュール40(請求項8に記載の第1のバッファモジュールに相当)と、排他制御機能無しのバッファモジュール40(請求項8に記載の第2のバッファモジュールに相当)が各々用意され、モジュールライブラリ36にはそれぞれのバッファモジュール40のプログラムが各々登録されている。
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。
また、本実施形態に係る記憶部20には、処理管理部46のプログラムとして、処理管理部46をコンピュータ10(クライアント)上で動作させるためのクライアント用の処理管理部46のプログラムと、処理管理部46をサーバ・コンピュータ27上で動作させるためのサーバ用の処理管理部46のプログラムが各々記憶されている。なお、サーバ用の処理管理部46のプログラムは、後述するように、画像処理部50を分割しその一部をサーバ・コンピュータ27上で動作させる際に、処理管理部46をコンピュータ10上及びサーバ・コンピュータ27上で各々動作させるために用いられる。図1に示すように、個々の処理管理部46は、画像処理部50における画像処理の実行を制御するワークフロー管理部46A、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10又はサーバ・コンピュータ27のリソースの使用を管理するリソース管理部46B、及び、画像処理部50で発生したエラーを管理するエラー管理部46Cを含んで構成されている。
次に本実施形態の作用を説明する。画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション32は、まずクライアント用の処理管理部46のプログラムを実行するスレッド(プロセス又はオブジェクトでもよい:以下同様)を生成することで、コンピュータ10上で動作する処理管理部46のワークフロー管理部46A、リソース管理部46B及びエラー管理部46Cを各々生成する。次に、アプリケーション32は画像処理対象の画像データを供給する画像データ供給部22の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合には、画像データ供給部22として指定されたバッファ領域を既に確保されたバッファ40Aとしてバッファ制御部40Bに認識させるパラメータを設定し、バッファ制御部40Bのプログラムを実行するスレッドを生成する(バッファ制御部40Bを生成する)ことで、指定されたバッファ領域を含むバッファモジュール40(画像データ供給部22として機能するバッファモジュール40)を生成する。
続いてアプリケーション32は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する。ここで生成されたバッファモジュール40は画像出力部24として機能する。また、アプリケーション32は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
そしてアプリケーション32は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部44を起動(モジュール生成部44のプログラムを実行するスレッドを生成)した後に、起動したモジュール生成部44に対し、当該モジュール生成部44によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータを通知して対応するモジュール群の生成を指示する。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は、指示したモジュール生成部44からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部44を起動してモジュール群の生成に必要な情報を通知する処理を個々の画像処理の実行順序の昇順に繰り返す。
なお、上記の入力モジュールは、実行順序が1番目のモジュール群については画像データ供給部22が入力モジュールとなり、実行順序が2番目以降のモジュール群については前段のモジュール群の最終モジュール(通常はバッファモジュール40)が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部24が出力モジュールとなるので、画像出力部24が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション32による指定は行われず、必要な場合はモジュール生成部44によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション32が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
一方、モジュール生成部44は、アプリケーション32によって起動されるとモジュール生成処理を行う。モジュール生成処理では、まず生成対象の画像処理モジュール38に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール38の前段にバッファモジュール40が存在している場合、当該バッファモジュール40に画像データの書き込みを行う更に前段の画像処理モジュール38から出力画像データの属性を取得することによって実現できる。
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール38の生成が必要か否か判定する。例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定された場合、取得した入力画像属性情報に基づいて入力画像データがRGB色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール38としてRGB→CMYの色空間変換を行う画像処理モジュール38を生成する必要があるが、入力画像データがCMY色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール38は生成不要と判断する。
生成対象の画像処理モジュール38の生成が必要と判断した場合には、生成対象の画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図2(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図2(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定されてバッファ制御部40Bを起動することで、画像処理モジュール38の後段に連結するバッファモジュール40を生成する。
続いて、前段のモジュール(例えばバッファモジュール40)の情報、後段のバッファモジュール40の情報(後段にバッファモジュール40を生成した画像処理モジュール38のみ)、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択・生成する。
例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間が指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択・生成され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択・生成される。
なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いはユーザに選択させるようにしてもよい。また、生成された画像処理モジュール38及びバッファモジュール40には、自モジュールの前段及び後段が何れのモジュールかを識別する識別情報が設定される。
画像処理モジュール38の生成が完了すると、後段のバッファモジュール40のIDと生成した画像処理モジュール38のIDの組をワークフロー管理部46Aに通知する。このIDは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部44が、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38によって実現されるスキュー補正処理)を行うモジュール群を生成する場合には、上記処理が繰り返されて2個以上の画像処理モジュール38を含むモジュール群が生成される。アプリケーション32によって順次起動された個々のモジュール生成部44により、以上のモジュール生成処理が順次行われることで、例として図2(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築される。なお、上記処理は本発明に係る構築手段に対応している。
次に、画像処理部50を構築した後に処理構築部42で行われる画像処理部分割処理の説明に先立ち、上記の処理で構築された画像処理部50で画像処理が行われる際の個々の画像処理モジュール38及びバッファモジュール40の動作を順に説明する。
画像処理の実行時には、ワークフロー管理部46Aから個々の画像処理モジュール38に処理要求が入力される(図3(A)の(1)も参照)。画像処理モジュール38は、処理要求が入力されると、予め設定された識別情報で規定されている自モジュールの前段のモジュール(通常はバッファモジュール40)に対して画像データを要求する(図3(A)の(2)も参照)。読出可能な有効データがバッファモジュール40のバッファ40Aに単位読出データ量以上記憶されていれば、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、画像処理モジュール38は先頭アドレスが通知された前段のモジュールの読出領域から単位読出データ量の画像データを読み出す(図3(A)の(3)も参照)。
次に、画像処理モジュール38は自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、データ出力領域(後段のモジュールがバッファモジュール40であれば当該バッファモジュール40から先頭アドレスが通知された書込領域)が取得できたら(図3(A)の(4)も参照)、先に前段のモジュールから取得した画像データ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)を画像処理エンジン38Aに入力し、入力したデータに対して所定の画像処理を行わせる(図3(A)の(5)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図3(A)の(6)も参照)。そして、画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力されたデータがデータ出力領域に全て書き込まれると、出力完了を後段のモジュールに通知すると共に、先に入力された処理要求に対応する処理を完了したことをワークフロー管理部46Aへ通知する(図3(A)の(7)も参照)。個々の画像処理モジュール38で上記処理が繰り返されることで、画像処理部50における画像処理が実現される。
また、バッファモジュール40のバッファ制御部40Bは、予め設定された識別情報で規定されている自モジュールの後段のモジュール(通常は画像処理モジュール38)から画像データが要求されると(図3(B)の(1)も参照)、要求された画像データがバッファ40Aに記憶されているか否かチェックする(図3(B)の(2)も参照)が、読出可能な有効データがバッファ40Aに単位読出データ量以上記憶されていない場合は、ワークフロー管理部46Aに対して画像データを要求する(図3(B)の(3)も参照)。この場合、ワークフロー管理部46Aは、画像データ要求元のバッファモジュール40の前段に位置しているモジュール(通常は画像処理モジュール38)を認識し、認識したモジュールに処理要求を入力する(図3(B)の(4)も参照)。
そして、図3(A)に示したシーケンスを経て、前段の画像処理モジュール38によってバッファ40Aに画像データが書き込まれ(図3(B)の(5),(6)も参照)、バッファ40Aから読出可能な有効データが単位読出データ量以上になると、バッファモジュール40から後段の画像処理モジュール38に対して読出領域の先頭アドレスが通知され、後段の画像処理モジュール38によってバッファモジュール40のバッファ40Aから画像データが読み出されることになる(図3(B)の(7)も参照)。
一方、処理構築部42は、前述のようにして画像処理部50を構築すると、構築した画像処理部50に対して図4に示す画像処理部分割処理を行う。この画像処理部分割処理は本発明に係る分割手段に対応しており、まずステップ100では、画像処理部50を何個のグループに分割するかを表すグループ数Nを決定する。グループ数Nとしては、例えばコンピュータ10に設けられている演算リソース(例えばCPUコアやDSP(Digital Signal Processor)等のように演算を並列に実行可能なリソース)の数を適用することができる。演算リソースの数はOSが提供する関数等を用いて取得することができる。また、グループ数Nとして、コンピュータ10に設けられている演算リソースの数を単に用いることに代えて、演算リソースの数を取得した後に、個々の演算リソースにおける使用率を更に取得し、使用率が閾値以下の演算リソースの数をグループ数Nとして用いるようにしてもよい。また、グループ数N=1であった場合には、次のステップ102以降の処理をスキップし画像処理部分割処理を終了することが望ましい。
次のステップ102では、ステップ100で決定したグループ数Nに基づき、先に構築した画像処理部50をN個のグループへ分割する。画像処理部50の分割には幾つかの方法がある。第1の分割方法は、画像処理部50における画像処理モジュールの数Mとして画像処理部50における画像処理モジュール38の総数を用い、上記の画像処理モジュールの数Mをグループ数Nで除算し、剰余が生ずる場合は商に対して切り捨て等の端数処理を行うことで、1グループ当りの画像処理モジュール38の数Lを求め、画像処理部50を先頭から順にスキャンし、画像処理モジュール38がL個出現する毎にL個目の画像処理モジュール38までを1個のグループとしてグループ化すると共に、画像処理モジュール38の数の計数値を0に戻すことで、画像処理部50をN個のグループに分割する方法である。なお、画像処理部50を構成する画像処理モジュール38のうち、1面分の画像データが揃わないと画像処理を開始できない画像処理モジュール38(画像の回転等の画像処理を行う画像処理モジュール38)の数を認識し、画像処理モジュールの数Mとして、画像処理部50における画像処理モジュール38の総数から上記で認識した画像処理モジュール38の数を減算した値を用いてもよい。第1の分割方法は処理が簡単になるという利点を有する。
また、第2の分割方法は、各グループの処理負荷(ここでは処理負荷の一例としてCPU処理時間を用いる)が均等となるように分割する方法である。すなわち、まず画像処理部50を構成する個々の画像処理モジュール38の処理負荷(CPU処理時間)を各々予測する。ここで、各種の画像処理モジュール38のうち、画像サイズや処理パラメータの変化に拘わらずCPU処理時間が大きく変化しない画像処理を行う画像処理モジュール38については、予め固定的に設定したCPU処理時間を取得することで、CPU処理時間を予測することができる。また、画像サイズや処理パラメータの変化に対してCPU処理時間が大きく変化する画像処理を行う画像処理モジュール38については、画像サイズや処理パラメータの変化とCPU処理時間との関係を予測式等の形態で予め設定しておき、当該予測式を取得し画像サイズや処理パラメータに応じたCPU処理時間を演算することで、CPU処理時間の予測を行うことができる。
次に、画像処理部50を構成する個々の画像処理モジュール38のCPU処理時間の総和を演算し、演算したCPU処理時間の総和をグループ数Nで除算し、演算結果(1グループ当りのCPU処理時間の平均値)を閾値Thに設定する。そして、画像処理モジュール38のCPU処理時間を画像処理部50の先頭から順に積算しながらCPU処理時間の積算値を閾値Thと比較し、CPU処理時間の積算値が閾値Th以上となる毎に、積算値が閾値Th以上となった画像処理モジュール38までを1個のグループとしてグループ化すると共に、CPU処理時間の積算値を0に戻すことで、画像処理部50をN個のグループに分割する。第2の分割方法は、第1の分割方法と比較して処理は若干複雑になるものの、各グループの処理負荷をなるべく均等にすることができるので、より好ましい。
なお、画像処理部50をN個のグループに分割する際の分割方法は上記方法に限られるものではなく、他の分割方法(例えば第2の分割方法において、j個目の画像処理モジュールのCPU処理時間を積算値に加算した段階で積算値が閾値Th以上となった場合に、当該積算値と閾値Thの偏差Aを、j個目の画像処理モジュールのCPU処理時間を加算する前の積算値と閾値Thの偏差Bと比較し、偏差Aが小さければj個目の画像処理モジュールの後段をグループの境界とし、偏差Bが小さければj個目の画像処理モジュールの前段をグループの境界とする等の分割方法)を用いてもよい。
以上のようにして画像処理部50をN個のグループに分割すると、次のステップ104では、各グループの境界に位置しているバッファモジュール40を排他制御機能付きのバッファモジュール40に置き換える。これにより、当初構築された画像処理部50が、例として図5(A)に示すように、画像処理モジュールM1,M2,M3,M6とバッファモジュールB1,B2,B3が交互かつ直列に連結されると共に、バッファモジュールB1と画像処理モジュールM6の間に、画像処理モジュールM4,M5とバッファモジュールB4,B5が交互かつ直列に連結された部分画像処理部が連結された構成であり、当該構成の画像処理部50が、上述した画像処理部50の分割により、図5(B)に示すように、モジュールM1,B1から成るグループAと、モジュールM2,B2,M3,B3から成るグループBと、モジュールM4,B4,M5,B5から成るグループCと、モジュールM6から成るグループDに分割された場合には、グループAとグループB,Cの境界に位置しているバッファモジュールB1、グループBとグループDの境界に位置しているバッファモジュールB3、及び、グループCとグループDの境界に位置しているバッファモジュールB5が排他制御機能付きのバッファモジュールに各々置き換わることになる。
次のステップ106では、画像処理部50の一部(本発明に係る第2の画像処理部に相当)を分離してサーバ・コンピュータ27で動作させる、所謂画像処理部50の分割が必要か否か判定する。この判定は請求項1に記載の「所定の条件」を満たしたか否かの判定に対応している。ステップ106の判定は、具体的には、例えば操作部18(請求項3に記載の指示手段に相当)を介して事前に画像処理部50の分割が指示されているか否かを判断することで行うことができる。ステップ106で当該判断を行う場合、例えばコンピュータ10の処理能力が低い、コンピュータ10に設けられた演算リソースの数が少ない等の理由で、画像処理部50をコンピュータ10上のみで動作させると(画像処理部50に相当する処理をコンピュータ10のみに行わせると)画像処理に長い時間が掛ることが予測できる場合に、事前に画像処理部50の分割を指示しておくことで、画像処理に要する時間を短縮することができる。なお、分離した画像処理部50の一部を動作させることが可能なコンピュータが複数存在している場合(前記コンピュータがネットワーク26に複数台接続されている場合)には、分離した画像処理部50の一部を動作させるコンピュータも併せて指定しておくことが望ましい。
また、ステップ106の判定は自動的に行うことも可能である。すなわち、例えば画像処理部50を構成する個々の画像処理モジュール38のCPU処理時間の総和が第1の閾値以上か否かを判定することで上記判定を行うようにしてもよいし、コンピュータ10に設けられ画像処理部50の動作に利用可能な演算リソースの数(この演算リソースの数は、コンピュータ10に設けられた演算リソースの総数でもよいし、コンピュータ10に設けられた演算リソースのうち現在の使用率が所定値以下の演算リソースの総数でもよい)が第2の閾値以下か否かを判定することで上記判定を行うようにしてもよいし、個々の画像処理モジュール38のCPU処理時間の総和を個々のグループ毎に演算し、CPU処理時間の総和が第2の閾値以上のグループが存在しているか否かを判定することで上記判定を行うようにしてもよい。
また、例えば図5(A)に示す画像処理部50では、グループBにおける画像処理の結果とグループCにおける画像処理の結果が揃わないと、グループDで画像処理を行えない構成であるので、処理時間の長時間化を回避するためには、グループBにおける画像処理とグループCにおける画像処理を並列に行うことが望ましい。このため、画像処理部50の構成に基づき並列に実行することが望ましいパスの最大数を判断し(例えば図5(A)に示す構成では上記のパスの最大数は「2」となる)、当該パスの最大数が、コンピュータ10に設けられ画像処理部50の動作に利用可能な演算リソースの数よりも大きいか否かを判定することで、ステップ106の判定を行うようにしてもよい。
ステップ106の判定が否定された場合、すなわち画像処理部50の分割が不要と判断した場合はステップ108へ移行し、画像処理部50の各グループをコンピュータ10によって実行されるスレッドとして各々割り付け(各グループのプログラムを実行するスレッドをコンピュータ10上に各々生成し)、画像処理部分割処理を終了する。この場合、画像処理部50はコンピュータ10上のみで動作する(画像処理部50に相当する処理がコンピュータ10のみによって行われる)ことになる。
一方、ステップ106の判定が肯定された場合、すなわち画像処理部50の分割が必要と判断した場合はステップ110へ移行し、画像処理部50の各グループの中から分割対象のグループを選択する。この分割対象のグループとしては、例えば処理負荷が最大のグループ(個々のグループ毎に演算した画像処理モジュール38のCPU処理時間の総和が最大のグループ)を適用することができる。これは、サーバ・コンピュータ27がコンピュータ10よりも処理能力が高い場合に特に有効である。また、図5(A)に示す画像処理部50におけるグループB,Cのように、画像処理を並列に行うことが望ましいグループが画像処理部50に複数存在している等の場合には、画像処理を並列に行うことが望ましい複数のグループのうちの何れか(例えば、サーバ・コンピュータ27がコンピュータ10よりも処理能力が高い場合はそのうちの処理負荷最大のグループ、コンピュータ10がサーバ・コンピュータ27よりも処理能力が高い場合はそのうちの処理負荷最大のグループ)を分割対象のグループとして適用してもよい。
ステップ112では、分割対象のグループを構成する各モジュールのプログラムを、通信制御部25によってネットワーク26経由でサーバ・コンピュータ27へ転送し、次のステップ114では、記憶部20に記憶されているサーバ用の処理管理部46のプログラムを、通信制御部25によってネットワーク26経由でサーバ・コンピュータ27へ転送する。そしてステップ116では、ステップ112,114で転送した各プログラムの実行をサーバ・コンピュータ27に依頼する。これにより、分割対象のグループ及びサーバ用の処理管理部46が、サーバ・コンピュータ27によって実行されるスレッドとして各々割り付され(分割対象のグループのプログラムを実行するスレッド及びサーバ用の処理管理部46のプログラムを実行するスレッドがサーバ・コンピュータ27上に各々生成され)、各スレッドがサーバ・コンピュータ27によって各々実行される。
これにより、例えば図5(A),(B)に示す画像処理部50のうち、モジュールM4,B4,M5,B5から成るグループCが分割対象のグループとして選択された場合には、例として図5(C)に示すように、画像処理部50がグループCとそれ以外の部分(本発明に係る第1の画像処理部に相当)とに分割され、グループCがサーバ・コンピュータ27によって実行される(サーバ・コンピュータ27上で動作する)スレッドとしてサーバ・コンピュータ27上に生成されると共に、サーバ・コンピュータ27上で動作する処理管理部46(ワークフロー管理部46A、リソース管理部46B及びエラー管理部46C)が新たに生成される。なお、サーバ・コンピュータ27上で動作する処理管理部46は本発明に係る第2の処理管理部に対応しており、コンピュータ10上で動作する処理管理部46は本発明に係る第1の処理管理部に対応している。
そして、サーバ・コンピュータ27上に生成されたグループCのバッファモジュールB4,B5のバッファ制御部40Bからサーバ・コンピュータ27上で動作するリソース管理部46Bに対してメモリ領域の確保が要求されると、当該リソース管理部46Bにより、サーバ・コンピュータ27上で動作するオペレーティングシステムを通じてサーバ・コンピュータ27に設けられたメモリ27Bからメモリ領域が確保され、確保されたメモリ領域がリソース管理部46BからバッファモジュールB4,B5のバッファ制御部40Bへ引き渡されることで、バッファモジュールB4,B5を含むグループCが画像処理を実行可能な状態となる。なお、サーバ・コンピュータ27上で動作するリソース管理部46Bによる上記のメモリ確保処理は、本発明に係る第2の処理管理部による「第2の画像処理部を動作させるための管理処理」に対応している。また、この処理と並行してコンピュータ10では、コンピュータ10上で動作するバッファモジュールB4,B5用として一旦確保されたメモリ領域を解放する処理が行われる。
また、次のステップ118では、サーバ・コンピュータ27上で動作する処理管理部46に対し、サーバ・コンピュータ27上で動作するグループの構成を規定する構成情報及び当該グループがコンピュータ10上で動作する他のグループとどのように接続されているかを規定する接続情報を送信することで、送信した情報をサーバ・コンピュータ27上で動作する処理管理部46に設定させる。同様にステップ120では、コンピュータ10で動作する処理管理部46に対し、当該処理管理部46に設定されている構成情報及び接続情報を修正する。これにより、図5(C)に示す例では、サーバ・コンピュータ27上で動作する処理管理部46には、管理対象の画像処理部(グループC)がモジュールM4,B4,M5,B5が直列に接続された構成であること、画像処理モジュールM4の前段はコンピュータ10上で動作するバッファモジュールB1であること、バッファモジュールB5の後段はコンピュータ10上で動作する画像処理モジュールM6であること、を表す情報が各々設定される。また、コンピュータ10上で動作する処理管理部46に設定されている情報は、管理対象の画像処理部(グループA,B,D)がモジュールM1,B1,M2,B2,M3,B3,M6が直列に接続された構成であること、バッファ理モジュールB1の後段に、サーバ・コンピュータ27上で動作する画像モジュールM4も存在していること、画像処理モジュールM6の前段にサーバ・コンピュータ27上で動作するバッファモジュールB5も存在していること、を表す情報へ修正される。
また、本実施形態では、画像処理部50の分割を行うか否かに拘わらず個々のモジュールのプログラムを共通に用いることを可能とするため、情報を送受する一対のモジュールが互いに異なるコンピュータ上で動作している場合に、当該一対のモジュールの間に処理管理部46が介在して情報の送受が行われる(詳細は後述)。このため、個々の処理管理部46は、画像処理部50の分割位置の前後に存在しているモジュールに対し、前段(又は後段)のモジュールが同一のコンピュータ上で動作する処理管理部46であることを表す情報を設定する。例えば図5(C)に示す例において、サーバ・コンピュータ27上で動作する処理管理部46は、画像処理モジュールM4に対しては前段のモジュール、バッファモジュールB5に対しては後段のモジュールが、サーバ・コンピュータ27上で動作する処理管理部46であることを表す情報を各々設定し、コンピュータ10上で動作する処理管理部46は、画像処理モジュールM6に対しては前段のモジュール、バッファモジュールB1に対しては後段のモジュールに、コンピュータ10上で動作する処理管理部46も含まれることを表す情報を各々設定する。
そしてステップ122では、分割対象のグループ(サーバ・コンピュータ27上で動作するスレッドとしてサーバ・コンピュータ27上に生成されたグループ)以外の各グループを、コンピュータ10によって実行される(コンピュータ10上で動作する)スレッドとしてコンピュータ10上に生成し、画像処理部分割処理を終了する。
以上の処理によって画像処理部50の構築が完了すると、コンピュータ10上で動作する処理管理部46のワークフロー管理部46Aは、処理構築部42によってコンピュータ10上に生成された複数のスレッドをコンピュータ10のCPU12(やその他の演算リソース)によって並列に実行させると共に、画像処理部50の最後段に位置している画像処理モジュール38に処理要求を入力する。また、サーバ・コンピュータ27上で動作する処理管理部46のワークフロー管理部46Aも同様に、処理構築部42によってサーバ・コンピュータ27上に生成されたスレッドをサーバ・コンピュータ27のCPU27A(やその他の演算リソース)によって実行させる。
また、個々のワークフロー管理部46Aは、同一コンピュータ上で動作する任意のバッファモジュール40又は画像処理モジュール38からデータ要求が入力される毎に、入力されたデータ要求におけるデータ要求先が他のコンピュータ上で動作しているモジュールか否か判定し、判定が肯定された場合は他のコンピュータ上で動作しているワークフロー管理部46Aとの間で通信を行うことで、入力されたデータ要求に対応するデータを取得し、取得したデータをデータ要求入力元のモジュールに提供する。以下、この処理について図6を参照して説明する。
図6において、画像処理モジュール38は或るコンピュータ(例えばサーバ)上で動作している一方、図6に「前段のバッファモジュール」と表記して示すバッファモジュール40は、画像処理部50の分割により別のコンピュータ(例えばクライアント)上で動作している。本実施形態では、このような場合、上記の画像処理モジュール38に対しては、前段のモジュールが同一のコンピュータ上で動作するワークフロー管理部46A(図6に示す「サーバ側ワークフロー管理部」)であることを表す情報を設定し、上記のバッファモジュール40に対しては、後段のモジュールが同一のコンピュータ上で動作するワークフロー管理部46A(図6に示す「クライアント側ワークフロー管理部」)であることを表す情報を設定している。
このため、上記の画像処理モジュール38からのデータ要求はサーバ側ワークフロー管理部に入力され(図6の(2)も参照)、サーバ側ワークフロー管理部はクライアント側ワークフロー管理部に対し、サーバ上で動作している画像処理モジュール38が画像データを要求していることを通知する(図6の(3)も参照)。これにより、クライアント側ワークフロー管理部は、サーバ上で動作しかつ画像データを要求している画像処理モジュール38の前段のバッファモジュール40を認識し、認識したバッファモジュール40に対して画像データを要求し(図6の(4)も参照)、当該バッファモジュール40のバッファ40Aから画像データを読み出し(図6の(5)も参照)、読み出した画像データをサーバ側ワークフロー管理部へ転送する(図6の(6)も参照)。そしてサーバ側ワークフロー管理部は、クライアント側ワークフロー管理部から画像データを受信すると、受信した画像データを一旦メモリに記憶させた後に、当該メモリの先頭アドレスをデータ要求入力元の画像処理モジュール38へ通知することで、クライアント側ワークフロー管理部から受信した画像データを画像処理モジュール38によって読み出させる。これにより、異なるコンピュータ上で動作するバッファモジュール40から画像処理モジュールへの画像データの送受が実現され、個々のモジュールにおいて、自モジュールの前段や後段のモジュールが自モジュールと同一のコンピュータ上で動作しているか否かを意識することなく(自モジュールと同一のコンピュータ上で動作しているか否かに応じて処理を切り替えることなく)処理を行うことができる。
なお、上記のシーケンスはクライアント(コンピュータ10)からサーバ(サーバ・コンピュータ27)へ画像データを転送するシーケンスであるが、サーバ・コンピュータ27からコンピュータ10への画像データの転送も同様のシーケンスで実現される。また、上記のシーケンスは画像処理モジュール38が前段のバッファモジュール40から画像データを読み出す際のシーケンスであるが、画像処理モジュール38が後段のバッファモジュール40に画像データを書き込む際も同様のシーケンスで実現される。
また、個々のワークフロー管理部46Aは、同一コンピュータ上で動作する任意のモジュールからデータ要求が入力され、入力されたデータ要求におけるデータ要求先が同一コンピュータ上で動作しているモジュールであると判定した場合は、判定したモジュールにデータ要求を入力し、同一コンピュータ上で動作する任意の画像処理モジュールから処理完了通知が入力される毎に、通知元の画像処理モジュールに処理要求を入力することを、最後段の画像処理モジュールから全体処理の終了(1面分の画像データに対する画像処理の終了)が通知される迄繰り返す。また、サーバ・コンピュータ27上で動作するワークフロー管理部46Aは、サーバ・コンピュータ27上で動作する各モジュールによる画像処理が完了すると、コンピュータ10上で動作するワークフロー管理部46Aに対して画像処理の完了を通知する。なお、個々のワークフロー管理部46Aによる上述した処理も、本発明に係る第1の処理管理部又は第2の処理管理部による管理処理に対応している。そして、個々のワークフロー管理部46Aが上述した処理を行うことで、画像処理部50のうちの分割対象のグループを除く部分がコンピュータ10上で動作すると共に、当該動作と並列に分割対象のグループがサーバ・コンピュータ27上で動作することになり、画像処理部50をコンピュータ10上でのみ動作させる場合よりも処理時間を短縮することができる。
また、画像処理の実行中に何れかのモジュールでエラーが発生した場合、エラーが発生したモジュールがコンピュータ10で動作しているモジュールであれば、同一のコンピュータ(コンピュータ10)上で動作する処理管理部46のエラー管理部46Cにエラーの発生が通知され、エラーが発生したモジュールがサーバ・コンピュータ27で動作しているモジュールであれば、同一のコンピュータ(サーバ・コンピュータ27)上で動作する処理管理部46のエラー管理部46Cにエラーの発生が通知される。
個々のエラー管理部46Cは、エラーの発生が通知されると、発生したエラーの種別・発生箇所等のエラー情報を取得し、動作しているコンピュータ(コンピュータ10又はサーバ・コンピュータ27)の種別や構成等を表す装置環境情報を記憶部20又はHDD27Cから取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断する。そして、コンピュータ10上で動作するエラー管理部46Cは、判断したエラー通知方法でエラーの発生を通知し、サーバ・コンピュータ27上で動作するエラー管理部46Cは、判断したエラー通知方法でのエラー発生の通知をコンピュータ10上で動作するエラー管理部46Cへ依頼することで、コンピュータ10上で動作するエラー管理部46Cによってエラー発生の通知を行わせる。なお、個々のエラー管理部46Cによる上述した処理も、本発明に係る第1の処理管理部又は第2の処理管理部による管理処理に対応している。
また、サーバ・コンピュータ27における画像処理が完了すると、サーバ・コンピュータ27上で動作するリソース管理部46Bによって確保されたメモリ領域等のリソースは、同リソース管理部46Bを通じて全て解放され、コンピュータ10における画像処理が完了すると、コンピュータ10上で動作するリソース管理部46Bによって確保されたメモリ領域等のリソースも、同リソース管理部46Bを通じて全て解放される。これらのリソース管理部46Bによるリソース解放処理も本発明に係る第1の処理管理部又は第2の処理管理部による管理処理に対応している。
画像処理部50の一部を分割してサーバ・コンピュータ27上で動作させる際に、処理管理部46をコンピュータ10上にのみ設けた場合、サーバ・コンピュータ27上で動作する個々のモジュールは、リソースの確保時や解放時、エラー発生時、画像処理の実行時に、コンピュータ10上で動作する処理管理部46と通信を行う必要があり、コンピュータ10とサーバ・コンピュータ27の間のトラフィックが大幅に増大すると共に、通信に要する時間分だけ処理が遅延することで、処理効率が大幅に低下する。
これに対して本実施形態では、画像処理部50の一部を分割してサーバ・コンピュータ27上で動作させる際に、コンピュータ10上で動作する処理管理部46に加えて、サーバ・コンピュータ27上で動作する処理管理部46も設けているので、コンピュータ10とサーバ・コンピュータ27の間の通信は、画像処理部50の分割位置の前後に存在しているモジュール間(図5(C)の例では、バッファモジュールB1と画像処理モジュールM4の間、及び、バッファモジュールB5と画像処理モジュールM6の間)の画像データの受け渡しのための通信が大部分となる。これにより、コンピュータ10とサーバ・コンピュータ27の間のトラフィックの増大を抑制できると共に、サーバ・コンピュータ27上で動作する個々のモジュールと処理管理部46との間の通信に要する時間も短くすることができるので、処理効率を向上させることができ、コンピュータ10及びサーバ・コンピュータ27で並列に画像処理が行われることで処理時間を短縮することができる。
なお、上記では画像処理モジュールの数や処理負荷等に基づいて画像処理部50を複数のグループに分割した後に、複数のグループの中からサーバ・コンピュータ27上で動作させるグループを選択することで、画像処理部を、サーバ・コンピュータ27上で動作させる部分(第2の画像処理部)とそれ以外の部分(第1の画像処理部)に分割する態様を説明したが、本発明はこれに限定されるものではなく、例えば画像処理部50を事前に複数のグループに分割することなく、画像処理部50のうち並列に実行することが望ましい部分を直接判断し、判断結果に基づいて画像処理部50を第1の画像処理部と第2の画像処理部に分割するようにしてもよい。
また、上記では本発明に係る第2コンピュータが予め設定されている(第2コンピュータがサーバ・コンピュータ27に固定されている)態様を説明したが、これに限定されるものではなく、第2の画像処理部を動作させるコンピュータを複数台のコンピュータの中から都度選択するようにしてもよい。第2の画像処理部を動作させるコンピュータの選択は、例えば複数台のコンピュータの各々の処理能力や構成等の情報を予め記憶しておき、当該情報に基づいて選択するようにしてもよいし、第2の画像処理部を動作させるコンピュータの選択時に複数台のコンピュータの各々に加わっている処理負荷を取得し、取得した処理負荷に基づいて選択するようにしてもよい。
また、上記では本発明に係る第2コンピュータが1台の場合を説明したが、本発明において第2コンピュータは複数台であってもよく、この場合、画像処理部を、1個の第1の画像処理部と、第2コンピュータと同数個の第2の画像処理部に分割すればよい。また、第2コンピュータの数を可変とし、画像処理部の構成(例えば画像処理部のうち並列に実行することが望ましい部分における並列実行数の望ましい値)に基づいて画像処理部の分割数を決定し、決定した分割数から1を減算した値と同数台の第2コンピュータを選択するようにしてもよい。
更に、上記では第2コンピュータ上で動作する第2の処理管理部として、ワークフロー管理部46A、リソース管理部46B及びエラー管理部46Cを含む処理管理部46を第2コンピュータ(サーバ・コンピュータ27)上で動作させる態様を説明したが、本発明はこれに限定されるものではなく、第2コンピュータ上で動作させる第2の処理管理部はワークフロー管理部46A、リソース管理部46B及びエラー管理部46Cの少なくとも1つに相当する機能を備えた構成であればよい。第1コンピュータと第2コンピュータの間のトラフィックの増大を抑制するためには、第2の処理管理部がワークフロー管理部に相当する機能を備えていることが特に有効であり、第2の処理管理部が少なくともワークフロー管理部に相当する機能を備えていることが望ましい。
また、上記では本発明に係る画像処理プログラムに対応する画像処理プログラム群34が記憶部20に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。