(57)【要約】【課題】パイプライン形態等で連結された複数の画像処理モジュール及びバッファモジュールを並列に動作させる場合にも、メモリの不足に拘わらず画像処理全体を継続させることを可能とする。【解決手段】画像処理部を構成するバッファモジュールから記憶リソースの取得が要求されたものの、メモリの残量が記憶リソースの要求サイズよりも小さい場合(600,606が否定）には、ＨＤＤ又はフラッシュメモリ等から成る記憶部の記憶領域を要求サイズ分確保し(614)、テーブルに情報を登録した上で要求元へ引き渡す(616,618)。また、他のバッファモジュールに割り当てていたメモリ領域が解放された場合に、テーブルに登録した情報に基づき、メモリ領域を割り当てし直すことが可能か確認し、可能であれば既に割り当てた記憶領域からデータを複写したメモリ領域を前記記憶領域に代えて割り当てる。【選択図】図１２
2008009696.tif 000002
【特許請求の範囲】
【請求項１】
自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する機能を備えた複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部と、
前記画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合はメモリを確保し、前記記憶リソースの割当を必要としているモジュールに前記確保したメモリを前記記憶リソースとして割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記記憶リソースの割当を必要としているモジュールに前記確保した前記外部記憶装置の記憶領域を前記記憶リソースとして割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを前記確保した外部記憶装置の記憶領域に書き込み、前記別のモジュールに前記データを書き込んだ外部記憶装置の記憶領域を前記データが書き込まれていたメモリに代えて割り当てると共に、前記別のモジュールに割り当てていたメモリを、前記記憶リソースの割当を必要としているモジュールに前記記憶リソースとして割り当てる記憶リソース管理手段と、
を含む画像処理装置。
【請求項２】
前記記憶リソース管理手段は、前記画像処理部を構成する個々の画像処理モジュールに対しては、個々の画像処理モジュールが必要とする記憶リソースとしてメモリを予め固定的に割り当てておくか、又は、前記個々の画像処理モジュール用のメモリを予め確保しておき、画像処理モジュールが記憶リソースを必要としている場合に、前記記憶リソースとしてメモリを割り当てることを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記画像処理部の個々のバッファモジュールには、予め一定量のメモリが割り当てられており、
前記記憶リソース管理手段は、バッファモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が前記記憶リソースの割当を必要としているバッファモジュールに予め割り当てられたメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合は、前記予め割り当てられたメモリを前記記憶リソースとして前記バッファモジュールに割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記確保した前記外部記憶装置の記憶領域を前記記憶リソースとして前記バッファモジュールに割り当てることを特徴とする請求項２記載の画像処理装置。
【請求項４】
前記記憶リソース管理手段は、記憶リソースとしてメモリを割り当てていた第１のバッファモジュールによる前記メモリの解放を監視し、前記メモリの解放を検知した場合に、記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールに対し、当該第２のバッファモジュールに記憶リソースとして既に割り当てた前記外部記憶装置の記憶領域に書き込まれているデータを前記解放されたメモリに書き込み、前記データを書き込んだメモリを前記データが書き込まれていた前記外部記憶装置の記憶領域に代えて割り当てることを特徴とする請求項２記載の画像処理装置。
【請求項５】
前記記憶リソース管理手段は、前記記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールが複数存在している場合に、前記外部記憶装置の記憶領域に代えてメモリを割り当てる第２のバッファモジュールを、前記記憶リソースとして外部記憶装置の記憶領域を割り当てた時期の古い順に選択することを特徴とする請求項４記載の画像処理装置。
【請求項６】
前記画像処理部の個々のバッファモジュールには優先度が設定されており、
前記記憶リソース管理手段は、前記記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールが複数存在している場合に、前記外部記憶装置の記憶領域に代えてメモリを割り当てる第２のバッファモジュールを前記優先度の降順に選択することを特徴とする請求項４記載の画像処理装置。
【請求項７】
前記画像処理部は、前記画像処理部を構成する個々のモジュールに対応するプログラムがプログラム実行リソースによって互いに並列に実行されることで動作し、
前記画像処理部を構成する個々の画像処理モジュールの前記パイプライン形態又は有向非循環グラフ形態の連結形態における位置に応じて、前記個々の画像処理モジュールに対応する個々のプログラムの実行優先度の初期設定を行うと共に、前記画像処理部における画像処理の進行度合に応じて前記個々の画像処理モジュールに対応する個々のプログラムの実行優先度を変更し、かつ個々のバッファモジュールの優先度を、個々のバッファモジュールと直接連結された画像処理モジュールに対応するプログラムの実行優先度に応じて設定及び変更する実行優先度制御手段を更に備えたことを特徴とする請求項６記載の画像処理装置。
【請求項８】
前記記憶リソース管理手段は、前記個々のバッファモジュールに各々設けられ、自モジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合はメモリを確保し、前記確保したメモリを前記記憶リソースとして自モジュールに割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記確保した外部記憶装置の記憶領域を前記記憶リソースとして自モジュールに割り当てることを特徴とする請求項１記載の画像処理装置。
【請求項９】
前記画像処理部を構成する個々のモジュールが互いに並列に動作することを特徴とする請求項１乃至請求項８の何れか１項記載の画像処理装置。
【請求項１０】
メモリ及び外部記憶装置を備えたコンピュータを、
自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する機能を備えた複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部、
及び、前記画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合はメモリを確保し、前記記憶リソースの割当を必要としているモジュールに前記確保したメモリを前記記憶リソースとして割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記記憶リソースの割当を必要としているモジュールに前記確保した前記外部記憶装置の記憶領域を前記記憶リソースとして割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを前記確保した外部記憶装置の記憶領域に書き込み、前記別のモジュールに前記データを書き込んだ外部記憶装置の記憶領域を前記データが書き込まれていたメモリに代えて割り当てると共に、前記別のモジュールに割り当てていたメモリを、前記記憶リソースの割当を必要としているモジュールに前記記憶リソースとして割り当てる記憶リソース管理手段
として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置及びプログラムに係り、特に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を備えた画像処理装置、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
【背景技術】
【０００２】
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なＤＴＰ（デスクトップ・パブリッシング）システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わせる場合もあるが、例えば色空間や１画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
【０００３】
このような要求を満たすために、例えば特許文献１には、プログラマブルな処理モジュールをパイプライン形態やＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態に接続して、所望の画像処理を行うことを可能とする技術が提案されている。特許文献１に記載の技術では、複数のプログラマブル演算処理部の各々における演算処理の内容と、ネットワーク部による各プログラマブル演算処理部の接続形態を、ホストコントロール手段を通じて外部から自在に設定できるように構成することで、高速かつ高度な演算処理が可能で、機能変更や系統変更に対する自由度が高いデジタル映像信号処理装置を実現している。
【０００４】
また、上記に関連して以下の技術が知られている。すなわち、特許文献２には、複数の記憶手段と、時分割された処理の一つである実行単位について、複数の記憶手段のうちの入力用の単一の記憶手段から入力データを受け取り、出力用の単一の記憶手段に処理結果を記憶するデータ処理手段と、記憶手段のデータ記憶量の情報から実行単位の実行状況を求め、実行単位の起動優先度を決定する起動優先度決定手段を備えたプロセッサが開示されている。
【０００５】
また、特許文献３には、マルチプロセッサシステムにおいて、単体処理ユニットの優先度や処理結果の依存性に基づいてストール時間（次の処理が開始可能となる条件が満たされるまで処理を行わずに停止している時間）が生じないようにスケジューリングを行う技術が開示されている。
【０００６】
更に、特許文献４には、並列動作する複数の画像処理プロセスで必要とする最低限の画像メモリ量を予め算出し、システム起動時に算出した必要量の画像メモリをリザーブすると共に、リザーブされていないメモリのメモリ使用量が動的に変化した場合に各画像処理プロセスに通知することで、各画像処理プロセスの中断を防止しメモリ割り当ての効率化を実現する技術が開示されている。
【特許文献１】特開平５−２６０３７３号公報
【特許文献２】特開２００４−２８７８８３号公報
【特許文献３】特開平１０−２３２８５６号公報
【特許文献４】特開２００３−０９１４２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の技術のように、複数種の画像処理モジュールを任意に組み合わせて所望の画像処理を行う画像処理装置を構成する場合、以下に述べるような問題がある。すなわち、各画像処理モジュールには、実行する画像処理の種類や内容に応じて処理し易い単位（例えば画素単位、１ライン単位、複数ライン単位、面単位等）がある。しかし、各画像処理モジュールを任意の順番で連結し協調して処理することを可能とするためには、全ての画像処理モジュールの出力単位を揃えるか、或いは各画像処理モジュールが任意の入力単位に対応可能に構成する必要があり、各画像処理モジュールの構成が複雑になる。また、各画像処理モジュールは他の画像処理モジュールと連携して動作するため、各画像処理モジュールには、入力された画像データに対して実際に画像処理を行う部分以外に、自モジュールと連結された他の画像処理モジュールとの間で画像データを受け渡す処理を制御する部分も必要となり、各画像処理モジュールの構成は一層複雑になる。
【０００８】
上記の問題は、特許文献２に記載の技術のようにデータ処理手段の前後に記憶手段を設けた構成を用い、個々のデータ処理手段で各種の画像処理を行わせると共に、個々のデータ処理手段を、実行する画像処理の種類や内容に応じた処理し易い単位ずつ記憶手段から画像データを取得するように構成することで解決可能である。しかし、複数の画像処理モジュール及びバッファモジュールをパイプライン形態又は有向非循環グラフ形態で連結して構築した画像処理部において、各モジュールを並列に動作させて所望の画像処理を行わせる場合、個々の画像処理モジュールやバッファモジュールは、処理の実行に必要なメモリの取得・解放を繰り返しながら処理を行うことになるが、或るモジュールでメモリを取得できない状況が発生すると、当該モジュールで処理を継続できないために、結果として画像処理部で行っている画像処理全体も失敗に終わってしまうという問題があった。
【０００９】
また、特許文献４に記載の技術は、個々の画像処理プロセスが必要とする最低限の画像メモリ量をシステム起動時にリザーブするので、個々の画像処理プロセスが最低限の画像メモリ量で動作している間は、特定の画像処理プロセスがメモリを取得できないことで画像処理全体が失敗に終わってしまうことを回避できる。しかしながら、特許文献４に記載の技術では、或る画像処理プロセスが高解像度の画像を扱うために、通常の画像を扱う場合よりも大量のメモリを必要としている状況で、必要量のメモリが取得できなかった場合はメモリ不足エラー処理が行われるので、ユーザが高解像度の画像に対する画像処理の実行を所望していたとしても、メモリ不足が生じているとユーザが所望する画像処理が行われないことになる。
【００１０】
本発明は上記事実を考慮して成されたもので、パイプライン形態又は有向非循環グラフ形態で連結された複数の画像処理モジュール及びバッファモジュールを並列に動作させる場合にも、メモリの不足に拘わらず画像処理全体を継続させることが可能な画像処理装置及び画像処理プログラムを得ることが目的である。
【課題を解決するための手段】
【００１１】
上記目的を達成するために請求項１記載の発明に係る画像処理装置は、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する機能を備えた複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部と、前記画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合はメモリを確保し、前記記憶リソースの割当を必要としているモジュールに前記確保したメモリを前記記憶リソースとして割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記記憶リソースの割当を必要としているモジュールに前記確保した前記外部記憶装置の記憶領域を前記記憶リソースとして割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを前記確保した外部記憶装置の記憶領域に書き込み、前記別のモジュールに前記データを書き込んだ外部記憶装置の記憶領域を前記データが書き込まれていたメモリに代えて割り当てると共に、前記別のモジュールに割り当てていたメモリを、前記記憶リソースの割当を必要としているモジュールに前記記憶リソースとして割り当てる記憶リソース管理手段と、を含んで構成されている。
【００１２】
請求項１記載の発明に係る画像処理部は、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力する機能を備えた複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成されている。
【００１３】
また、請求項１記載の発明に係る記憶リソース管理手段は、画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリ（例えばＲＡＭ）の残量以下か否か判定し、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下の場合はメモリを確保し、記憶リソースの割当を必要としているモジュールに確保したメモリを記憶リソースとして割り当てる。また、割当が必要な記憶リソースの容量が確保可能なメモリの残量よりも大きい場合、記憶リソース管理手段は、外部記憶装置（例えばＨＤＤ(Hard Disk Drive)やフラッシュメモリ等）の記憶領域を確保し、記憶リソースの割当を必要としているモジュールに確保した外部記憶装置の記憶領域を記憶リソースとして割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを確保した外部記憶装置の記憶領域に書き込み、別のモジュールにデータを書き込んだ外部記憶装置の記憶領域をデータが書き込まれていたメモリに代えて割り当てると共に、別のモジュールに割り当てていたメモリを、記憶リソースの割当を必要としているモジュールに記憶リソースとして割り当てる。
【００１４】
このように、請求項１記載の発明では、画像処理部を構成する任意のモジュールが記憶リソースの割当を必要しているにも拘わらず、割当が必要な記憶リソースの容量が確保可能なメモリの残量よりも大きい場合に、記憶リソースの割当を必要しているモジュールに対し、外部記憶装置の記憶領域を確保して記憶リソースとして割り当てるか、別のモジュールに割り当てていたメモリを記憶リソースとして割り当てる（別のモジュールに対してはメモリに代えて外部記憶装置の記憶領域を割り当てる）ので、アクセス速度が低速な外部記憶装置の記憶領域を記憶リソースとして割り当てたモジュールで処理速度が低下する可能性はあるものの、記憶リソースの割当を必要しているモジュールに記憶リソースを割り当てできないことで、当該モジュールでエラーが発生して画像処理部における画像処理全体が失敗に終わってしまうことを回避することができる。従って、請求項１記載の発明によれば、パイプライン形態又は有向非循環グラフ形態で連結された複数の画像処理モジュール及びバッファモジュールを並列に動作させる場合にも、メモリの不足に拘わらず画像処理全体を継続させることが可能となる。
【００１５】
なお本発明は、例えば請求項９に記載したように、画像処理部を構成する個々のモジュールが互いに並列に動作する態様に好適であるが、個々のモジュールが逐次動作する態様にも適用可能である。
【００１６】
また本発明において、記憶リソースは、バッファモジュールでは主に画像データの一時保管に用いられるのに対し、画像処理モジュールでは主に画像処理時のワークメモリとして用いられ頻繁にアクセスされるので、アクセス速度が低速な外部記憶装置の記憶領域が記憶リソースとして割り当てられた場合に処理速度に与える影響（処理速度の低下度合）は、バッファモジュールよりも画像処理モジュールの方が大きい。これを考慮すると、請求項１記載の発明において、記憶リソース管理手段は、例えば請求項２に記載したように、画像処理部を構成する個々の画像処理モジュールに対しては、個々の画像処理モジュールが必要とする記憶リソースとしてメモリを予め固定的に割り当てておくか、又は、個々の画像処理モジュール用のメモリを予め確保しておき、画像処理モジュールが記憶リソースを必要としている場合に、記憶リソースとしてメモリを割り当てるように構成することが好ましい。これにより、画像処理モジュールに対しては記憶リソースとして常にメモリが割り当てられ、外部記憶装置の記憶領域はバッファモジュールに対してのみ記憶リソースとして割り当てられることになり、外部記憶装置の記憶領域を記憶リソースとして割り当てることに伴う処理速度の低下を抑制することができる。
【００１７】
また、請求項２記載の発明において、画像処理部の個々のバッファモジュールには予め一定量のメモリが割り当てられていてもよく、この場合、記憶リソース管理手段は、例えば請求項３に記載したように、バッファモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が記憶リソースの割当を必要としているバッファモジュールに予め割り当てられたメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が予め割り当てられたメモリの残量以下の場合は、予め割り当てられたメモリを記憶リソースとして前記バッファモジュールに割り当て、割当が必要な記憶リソースの容量が予め割り当てられたメモリの残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、確保した外部記憶装置の記憶領域を記憶リソースとしてバッファモジュールに割り当てるように構成してもよい。請求項３記載の発明では、予め割り当てられた一定量のメモリを越えるメモリがバッファモジュールに割り当てられることがないので、バッファモジュールを含む画像処理部の各モジュールに記憶リソースとして大量のメモリが割り当てられることで、メモリを必要としている他のスレッド、プロセス、オブジェクトの実行に支障が生ずることを防止することができる。
【００１８】
また、請求項２記載の発明において、記憶リソース管理手段は、例えば請求項４に記載したように、記憶リソースとしてメモリを割り当てていた第１のバッファモジュールによるメモリの解放を監視し、メモリの解放を検知した場合に、記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールに対し、当該第２のバッファモジュールに記憶リソースとして既に割り当てた外部記憶装置の記憶領域に書き込まれているデータを解放されたメモリに書き込み、データを書き込んだメモリをデータが書き込まれていた外部記憶装置の記憶領域に代えて割り当てるように構成することが好ましい。これにより、メモリの一時的な不足により記憶リソースとして外部記憶装置の記憶領域が割り当てられたバッファモジュールが存在していた場合に、メモリの不足が解消したにも拘わらず前記バッファモジュールが記憶リソースとして外部記憶装置の記憶領域を継続使用することで、画像処理部における画像処理全体の処理速度が低下している状態が無駄に続くことを防止することができる。
【００１９】
なお、請求項４記載の発明において、記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールが複数存在している場合、記憶リソース管理手段は、例えば請求項５に記載したように、外部記憶装置の記憶領域に代えてメモリを割り当てる第２のバッファモジュールを、記憶リソースとして外部記憶装置の記憶領域を割り当てた時期の古い順に選択することができる。この場合、記憶リソースとして外部記憶装置の記憶領域が割り当てられた個々のバッファモジュールが、記憶リソースとして外部記憶装置の記憶領域が割り当てられてから当該外部記憶装置の記憶領域に代えてメモリが割り当てられる迄の待ち時間のばらつきを小さくすることができる。
【００２０】
また、例えば請求項６に記載したように、画像処理部の個々のバッファモジュールに優先度を設定しておき、記憶リソース管理手段は、記憶リソースとして既に外部記憶装置の記憶領域を割り当てた第２のバッファモジュールが複数存在している場合に、外部記憶装置の記憶領域に代えてメモリを割り当てる第２のバッファモジュールを優先度の降順に選択するようにしてもよい。この場合、記憶リソースとして外部記憶装置の記憶領域が割り当てられた複数のバッファモジュールのうち、設定された優先度の高いバッファモジュールから優先的に記憶リソースの再割り当て（外部記憶装置の記憶領域に代わるメモリの割り当て）が行われることになる。
【００２１】
また、請求項６記載の発明において、画像処理部が、画像処理部を構成する個々のモジュールに対応するプログラムがプログラム実行リソース（例えばＣＰＵ、ＭＭＸ(MultiMedia eXtention)用の演算器やＳＳＥ (Streaming SIMD Extension)用の演算器、ＣＰＵと別に設けられたＤＳＰ(Digital Signal Processor)等の高速演算器等）によって互いに並列に実行されることで動作する場合、例えば請求項７に記載したように、画像処理部を構成する個々の画像処理モジュールのパイプライン形態又は有向非循環グラフ形態の連結形態における位置に応じて、個々の画像処理モジュールに対応する個々のプログラムの実行優先度の初期設定を行うと共に、画像処理部における画像処理の進行度合に応じて個々の画像処理モジュールに対応する個々のプログラムの実行優先度を変更し、かつ個々のバッファモジュールの優先度を、個々のバッファモジュールと直接連結された画像処理モジュールに対応するプログラムの実行優先度に応じて設定及び変更する実行優先度制御手段を設けてもよい。
【００２２】
なお、個々のバッファモジュールの優先度を、個々のバッファモジュールと直接連結された画像処理モジュールに対応するプログラムの実行優先度に応じて設定及び変更することは、具体的には、例えば個々のバッファモジュールの優先度を、個々のバッファモジュールと直接連結されている画像処理モジュールに対応するプログラムの実行優先度に一致させるか、複数の画像処理モジュールと直接接続されている場合は、複数の画像処理モジュールに対応するプログラムの実行優先度の平均、最大、最小の何れかに相当する優先度を設定することで行うことができる。個々の画像処理モジュールに対応する個々のプログラムの実行優先度を上記のように初期設定及び変更することで、画像処理部における画像処理の処理効率を向上させることができる。また、個々のバッファモジュールの優先度を、個々のバッファモジュールと直接連結された画像処理モジュールに対応するプログラムの実行優先度に応じて設定及び変更することで、対応するプログラムの実行優先度の高い画像処理モジュールと直接接続されたバッファモジュールに、記憶リソースとしてメモリが割り当てられる可能性が高くなり、画像処理部における画像処理の処理効率を更に向上させることが可能となる。
【００２３】
なお、請求項６に記載した個々のバッファモジュールの優先度は、記憶リソースの再割り当てを行うバッファモジュールの選択にのみ適用することに限られるものではなく、例えば記憶リソースの割当を必要としているバッファモジュールが存在しており、かつ割当が必要な記憶リソースの容量が確保可能なメモリの残量よりも大きい場合に、記憶リソースとして既にメモリを割り当てたバッファモジュールの中に、記憶リソースの割当を必要としているバッファモジュールよりも優先度の低いバッファモジュールが存在しているか否か判定し、該当するバッファモジュールが存在しているときに、外部記憶装置の記憶領域を確保し、優先度の低いバッファモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを確保した外部記憶装置の記憶領域に書き込み、優先度の低いバッファモジュールに、データを書き込んだ外部記憶装置の記憶領域を前記データが書き込まれていたメモリに代えて割り当てると共に、優先度の低いバッファモジュールに割り当てていたメモリを、記憶リソースの割当を必要としているバッファモジュール（優先度がより高いバッファモジュール）に記憶リソースとして割り当てるようにしてもよい。
【００２４】
また、請求項１記載の発明において、記憶リソース管理手段は個々のバッファモジュールに各々設けられていてもよく、この場合、記憶リソース管理手段は、例えば請求項８に記載したように、個々のバッファモジュールに各々設けられ、自モジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下の場合はメモリを確保し、確保したメモリを記憶リソースとして自モジュールに割り当て、割当が必要な記憶リソースの容量が確保可能なメモリの残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、確保した外部記憶装置の記憶領域を記憶リソースとして自モジュールに割り当てるように構成することができる。
【００２５】
請求項１０記載の発明に係る画像処理プログラムは、メモリ及び外部記憶装置を備えたコンピュータを、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する機能を備えた複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部、及び、前記画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、割当が必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が前記残量以下の場合はメモリを確保し、前記記憶リソースの割当を必要としているモジュールに前記確保したメモリを前記記憶リソースとして割り当て、割当が必要な記憶リソースの容量が前記残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、前記記憶リソースの割当を必要としているモジュールに前記確保した前記外部記憶装置の記憶領域を前記記憶リソースとして割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに記憶リソースとして既に割り当てたメモリに書き込まれているデータを前記確保した外部記憶装置の記憶領域に書き込み、前記別のモジュールに前記データを書き込んだ外部記憶装置の記憶領域を前記データが書き込まれていたメモリに代えて割り当てると共に、前記別のモジュールに割り当てていたメモリを、前記記憶リソースの割当を必要としているモジュールに前記記憶リソースとして割り当てる記憶リソース管理手段として機能させる。
【００２６】
請求項１０記載の発明に係る画像処理プログラムは、メモリ及び外部記憶装置を備えたコンピュータを、上記の画像処理部及び記憶リソース管理手段として機能させるためのプログラムであるので、上記コンピュータが請求項１０記載の発明に係る画像処理プログラムを実行することにより、上記コンピュータが請求項１に記載の画像処理装置として機能することになり、請求項１記載の発明と同様に、パイプライン形態又は有向非循環グラフ形態で連結された複数の画像処理モジュール及びバッファモジュールを並列に動作させる場合にも、メモリの不足に拘わらず画像処理全体を継続させることが可能となる。
【発明の効果】
【００２７】
以上説明したように本発明は、画像処理部を構成するモジュールが記憶リソースの割当を必要としている場合に、必要な記憶リソースの容量が確保可能なメモリの残量以下か否か判定し、割当が必要な記憶リソースの容量が残量以下の場合はメモリを確保し、確保したメモリを割り当て、割当が必要な記憶リソースの容量が残量よりも大きい場合は、外部記憶装置の記憶領域を確保し、確保した外部記憶装置の記憶領域を割り当てるか、又は、外部記憶装置の記憶領域を確保し、別のモジュールに既に割り当てたメモリに書き込まれているデータを確保した外部記憶装置の記憶領域に書き込み、データを書き込んだ外部記憶装置の記憶領域をデータが書き込まれていたメモリに代えて前記別のモジュールに割り当てると共に、前記別のモジュールに割り当てていたメモリを、記憶リソースの割当を必要としているモジュールに割り当てるようにしたので、パイプライン形態又は有向非循環グラフ形態で連結された複数の画像処理モジュール及びバッファモジュールを並列に動作させる場合にも、メモリの不足に拘わらず画像処理全体を継続させることが可能となる、という優れた効果を有する。
【発明を実施するための最良の形態】
【００２８】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。
【００２９】
〔第１実施形態〕
図１には、本発明に係る画像処理装置として機能することが可能なコンピュータ１０が示されている。なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００３０】
コンピュータ１０はＣＰＵ１２、ＤＲＡＭ又はＳＲＡＭ等から成るメモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２及び画像出力部２４を備えており、これらはバス２６を介して互いに接続されている。コンピュータ１０が上述したような画像取扱機器に組み込まれている場合、表示部１６や操作部１８としては、画像取扱機器に設けられたＬＣＤ等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ１０が独立したコンピュータである場合、表示部１６や操作部１８としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【００３１】
また、画像データ供給部２２は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）等を適用することができる。また、画像出力部２４は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部２４は画像処理を経た画像データを単に記憶する画像記憶部（メモリ１４又は記憶部２０）であっても構わない。
【００３２】
図１に示すように、記憶部２０には、ＣＰＵ１２によって実行される各種のプログラムとして、メモリ１４等のリソースの管理やＣＰＵ１２によるプログラムの実行の管理、コンピュータ１０と外部との通信等を司るオペレーティングシステム３０のプログラム、コンピュータ１０を本発明に係る画像処理装置として機能させるための画像処理プログラム群３４、ＣＰＵ１２が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション３２のプログラム（図１ではアプリケーションプログラム群３２と表記）が各々記憶されている。
【００３３】
画像処理プログラム群３４は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、ＰＣ等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、ＰＣ等の各種機器（プラットフォーム）で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、アプリケーション３２からの実行指示に従い、前記画像処理部によって画像処理を行うが（詳細は後述）、画像処理プログラム群３４は、所望の画像処理を行う画像処理部（所望の構成の画像処理部）の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション３２に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【００３４】
また、画像処理プログラム群３４によって実現される画像処理装置は、前述のように、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や１画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション３２が画像処理部の再構築を指示することで、画像処理装置（画像処理部）によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【００３５】
以下、画像処理プログラム群３４について説明する。図１に示すように、画像処理プログラム群３４はモジュールライブラリ３６と、処理構築部４２のプログラムと、処理管理部４６のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部４２は、アプリケーションからの指示により、例として図２に示すように、予め定められた画像処理を行う１つ以上の画像処理モジュール３８と、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成る画像処理部５０を構築する。画像処理部５０を構成する個々の画像処理モジュールの実体はＣＰＵ１２によって実行されＣＰＵ１２で所定の画像処理を行わせるための第１プログラム、又は、ＣＰＵ１２によって実行されＣＰＵ１２により図１に図示されていない外部の画像処理装置（例えば専用画像処理ボード等）に対する処理の実行を指示するための第２プログラムであり、上述したモジュールライブラリ３６には、予め定められた互いに異なる画像処理（例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等）を行う複数種の画像処理モジュール３８のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部５０を構成する個々の画像処理モジュールの実体が上記の第１プログラムであるものとして説明する。
【００３６】
個々の画像処理モジュール３８は、例として図３(Ａ)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン３８Ａと、画像処理モジュール３８の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン３８Ａの制御を行う制御部３８Ｂから構成されている。個々の画像処理モジュール３８における単位処理データ量は、画像の１ライン分、画像の複数ライン分、画像の１画素分、画像１面分等を含む任意のバイト数の中から、画像処理エンジン３８Ａが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール３８では単位処理データ量が１画素分とされ、拡大・縮小処理を行う画像処理モジュール３８では単位処理データ量が画像の１ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール３８では単位処理データ量が画像１面分とされ、画像圧縮伸長処理を行う画像処理モジュール３８では単位処理データ量が実行環境に依存するＮバイトとされている。
【００３７】
また、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている（図１では、この種の画像処理モジュールを「モジュール１」「モジュール２」と表記して示している）。例えば拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等の複数の画像処理モジュール３８が各々用意されている。また、例えば色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間をＣＭＹ色空間へ変換する画像処理モジュール３８やその逆へ変換する画像処理モジュール３８、Ｌ*ａ*ｂ*色空間等の他の色空間変換を行う画像処理モジュール３８が各々用意されている。
【００３８】
また、画像処理モジュール３８の制御部３８Ｂは、画像処理エンジン３８Ａが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール（例えばバッファモジュール４０）から画像データを単位読出データ量ずつ取得し、画像処理エンジン３８Ａから出力される画像データを単位書込データずつ後段のモジュール（例えばバッファモジュール４０）へ出力する（画像処理エンジン３８Ａで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量＝単位処理データ量となる）か、画像処理エンジン３８Ａによる画像処理の結果を自モジュールの外部へ出力する（例えば画像処理エンジン３８Ａがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある）処理を行うが、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール３８も登録されている。例えば画像回転処理を行う画像処理モジュール３８における単位処理データ量についても、前述した画像１面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる（例えば画像の１ライン分や複数ライン分等の）複数の画像処理モジュール３８がモジュールライブラリ３６に含まれていても良い。
【００３９】
また、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８のプログラムは、画像処理エンジン３８Ａに相当するプログラムと制御部３８Ｂに相当するプログラムから構成されているが、制御部３８Ｂに相当するプログラムは部品化されており、個々の画像処理モジュール３８のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール３８は、画像処理エンジン３８Ａで実行される画像処理の種類や内容に拘わらず、制御部３８Ｂに相当するプログラムが共通化されている（制御部３８Ｂに相当するプログラムとして同一のプログラムが用いられている）。これにより、画像処理モジュール３８のプログラムの開発にあたっての開発負荷が軽減される。
【００４０】
なお、画像処理モジュール３８の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール３８については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール３８について、制御部３８Ｂに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群３４は、前述のように各種機器に実装可能であるが、画像処理プログラム群３４のうちモジュールライブラリ３６に登録する画像処理モジュール３８の数や種類等については、画像処理プログラム群３４を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【００４１】
また、画像処理部５０を構成する個々のバッファモジュール４０は、例として図３(Ｂ)にも示すように、バッファ４０Ａと、バッファモジュール４０の前段及び後段のモジュールとの画像データの入出力及びバッファ４０Ａの管理を行うバッファ制御部４０Ｂから構成されている。なお、バッファ４０Ａはコンピュータ１０に設けられたメモリ１４からオペレーティングシステム３０及びリソース管理部４６Ｂを通じて確保されたメモリ領域で構成されるが、バッファモジュール４０の生成時にメモリ１４が不足していた場合は、リソース管理部４６Ｂによって代わりに記憶部２０の記憶領域が確保され、確保された記憶部２０の記憶領域で代替される（リソース管理部４６Ｂによる処理の詳細は後述する）。個々のバッファモジュール４０のバッファ制御部４０Ｂもその実体はＣＰＵ１２によって実行されるプログラムであり、モジュールライブラリ３６にはバッファ制御部４０Ｂのプログラムも登録されている（図１ではバッファ制御部４０Ｂのプログラムを「バッファモジュール」と表記して示している）。
【００４２】
また、アプリケーション３２からの指示に従って画像処理部５０を構築する処理構築部４２は、図１に示すように複数種のモジュール生成部４４から構成されている。複数種のモジュール生成部４４は互いに異なる画像処理に対応しており、アプリケーション３２によって起動されることで、対応する画像処理を実現するための画像処理モジュール３８及びバッファモジュール４０から成るモジュール群を生成する処理を行う。なお、図１ではモジュール生成部４４の一例として、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８が実行する画像処理の種類に対応するモジュール生成部４４を示しているが、個々のモジュール生成部４４に対応する画像処理は、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理）であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は複数種の画像処理の何れかに対応するモジュール生成部４４を順次起動する。これにより、アプリケーション３２によって順次起動されたモジュール生成部４４により、必要とされる画像処理を行う画像処理部５０が構築されることになる。
【００４３】
また図１に示すように、処理管理部４６は、画像処理部５０における画像処理の実行を制御するワークフロー管理部４６Ａ、画像処理部５０の各モジュールによるメモリ１４や各種のファイル等のコンピュータ１０のリソースの使用を管理するリソース管理部４６Ｂ、及び、画像処理部５０で発生したエラーを管理するエラー管理部４６Ｃを含んで構成されている。なお、本実施形態において、処理構築部４２によって構築される画像処理部５０は、画像処理部５０を構成する個々の画像処理モジュール３８が、画像１面分よりも小さいデータ量を単位として後段へ画像データを引き渡しながら並列に画像処理を行うように動作する。
【００４４】
なお、エラー管理部４６Ｃは、画像処理部５０が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群３４がインストールされたコンピュータ１０が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部２０等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。
【００４５】
次に本実施形態の作用を説明する。画像処理プログラム群３４が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション３２によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部２２としての画像読取部によって画像を読み取り、画像出力部２４としての画像記録部により記録材料に画像として記録するか、画像出力部２４としての表示部に画像として表示させるか、画像出力部２４としての書込装置により画像データを記録メディアに書き込むか、画像出力部２４としての送信部により画像データを送信するか、画像出力部２４としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部２２としての受信部によって受信されるか、画像データ供給部２２としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション３２が実行可能な処理の名称等を表示部１６に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
【００４６】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション３２は、まず画像処理対象の画像データを供給する画像データ供給部２２の種別を認識し、認識した種別がバッファ領域（メモリ１４又は記憶部２０の一部領域）であった場合には、画像データ供給部２２として指定されたバッファ領域を既に確保されたバッファ４０Ａとしてバッファ制御部４０Ｂに認識させるパラメータを設定し、バッファ制御部４０Ｂのプログラムを実行するスレッドを生成する（バッファ制御部４０Ｂを生成する）ことで、指定されたバッファ領域を含むバッファモジュール４０（画像データ供給部２２として機能するバッファモジュール４０）を生成する。また、スレッドに代えてプロセス又はオブジェクトとしてバッファモジュール４０を生成するようにしてもよい。
【００４７】
続いてアプリケーション３２は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部２４の種別を認識し、認識した種別がバッファ領域（メモリ１４又は記憶部２０の一部領域）であった場合は、画像出力部２４として指定されたバッファ領域を含むバッファモジュール４０を上記と同様にして生成する。ここで生成されたバッファモジュール４０は画像出力部２４として機能する。また、アプリケーション３２は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部４４に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション３２が、実行が指示されたジョブの種類に対応する情報を読み出す処理を行うことによって実現することができる。
【００４８】
そしてアプリケーション３２は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部４４を起動（モジュール生成部４４のプログラムを実行するプロセス、スレッド又はオブジェクトを生成）した後に、起動したモジュール生成部４４に対し、当該モジュール生成部４４によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータを通知して対応するモジュール群の生成を指示する。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は、指示したモジュール生成部４４からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部４４を起動してモジュール群の生成に必要な情報を通知する処理を個々の画像処理の実行順序の昇順に繰り返す。
【００４９】
なお、上記の入力モジュールは、実行順序が１番目のモジュール群については画像データ供給部２２が入力モジュールとなり、実行順序が２番目以降のモジュール群については前段のモジュール群の最終モジュール（通常はバッファモジュール４０）が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部２４が出力モジュールとなるので、画像出力部２４が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション３２による指定は行われず、必要な場合はモジュール生成部４４によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション３２が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
【００５０】
一方、モジュール生成部４４は、アプリケーション３２によって起動されるとモジュール生成処理を行う。モジュール生成処理では、まず生成対象の画像処理モジュール３８に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール３８の前段にバッファモジュール４０が存在している場合、当該バッファモジュール４０に画像データの書き込みを行う更に前段の画像処理モジュール３８から出力画像データの属性を取得することによって実現できる。
【００５１】
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール３８の生成が必要か否か判定する。例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてＣＭＹ色空間がアプリケーション３２から指定された場合、取得した入力画像属性情報に基づいて入力画像データがＲＧＢ色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール３８としてＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８を生成する必要があるが、入力画像データがＣＭＹ色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール３８は生成不要と判断する。
【００５２】
生成対象の画像処理モジュール３８の生成が必要と判断した場合には、生成対象の画像処理モジュール３８の後段にバッファモジュール４０が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール（画像出力部２４）である場合（例えば図２(Ａ)〜(Ｃ)に示す画像処理部５０における最後段の画像処理モジュール３８を参照）や、例として図２(Ｂ)に示す画像処理部５０においてスキュー角検知処理を行う画像処理モジュール３８のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール３８へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定されてバッファ制御部４０Ｂを起動する（バッファ制御部４０Ｂのプログラムを実行するスレッドを各々生成する）ことで、画像処理モジュール３８の後段に連結するバッファモジュール４０を生成する。なお、スレッドに代えてプロセス又はオブジェクトとしてバッファモジュール４０を生成するようにしてもよい。
【００５３】
続いて、前段のモジュール（例えばバッファモジュール４０）の情報、後段のバッファモジュール４０の情報（後段にバッファモジュール４０を生成した画像処理モジュール３８のみ）、画像処理モジュール３８に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ３６に登録されており、画像処理モジュール３８として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール３８で実行すべき処理パラメータに合致する画像処理モジュール３８を選択・生成（画像処理エンジン３８Ａ及び制御部３８Ｂのプログラムを実行するスレッドを生成）する。なお、スレッドに代えてプロセス又はオブジェクトとして画像処理モジュール３８を生成するようにしてもよい。
【００５４】
例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてＣＭＹ色空間が指定され、更に入力画像データがＲＧＢ色空間のデータであった場合には、モジュールライブラリ３６に登録されている各種の色空間処理を行う複数種の画像処理モジュール３８の中から、ＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール３８であり、指定された拡大縮小率が50％以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８が選択・生成され、指定された拡大縮小率が50％であれば、拡大縮小率50％に特化した拡大縮小処理、すなわち入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８が選択・生成される。
【００５５】
なお、画像処理モジュール３８の選択は上記に限られるものではなく、例えば画像処理エンジン３８Ａによる画像処理における単位処理データ量が異なる画像処理モジュール３８をモジュールライブラリ３６に複数登録しておき、画像処理部５０へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール３８を選択する（例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール３８を選択する等）ようにしてもよいし、アプリケーション３２或いはユーザに選択させるようにしてもよい。
【００５６】
画像処理モジュール３８の生成が完了すると、後段のバッファモジュール４０のＩＤと生成した画像処理モジュール３８のＩＤの組をワークフロー管理部４６Ａに通知する。このＩＤは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール４０や画像処理モジュール３８のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部４４が、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理を行う画像処理モジュール３８と画像回転処理を行う画像処理モジュール３８によって実現されるスキュー補正処理）を行うモジュール群を生成する場合には、上記処理が繰り返されて２個以上の画像処理モジュール３８を含むモジュール群が生成される。アプリケーション３２によって順次起動された個々のモジュール生成部４４により、以上のモジュール生成処理が順次行われることで、例として図２(Ａ)〜(Ｃ)に示すように、必要とされる画像処理を行う画像処理部５０が構築される。
【００５７】
なお、本実施形態では、特定の画像処理の実行頻度が高い等の場合に、アプリケーション３２が、特定の画像処理を行う画像処理部５０を生成するための複数種のモジュール生成部４４に対し、特定の画像処理を行う画像処理部５０を生成させた後も処理終了を指示しないことでスレッド（プロセス又はオブジェクトでもよい）として残しておき、特定の画像処理を行う必要が生ずる毎に、スレッドとして残しておいた各モジュール生成部４４に対してモジュール群の生成を順次指示することで、特定の画像処理を行う画像処理部５０を再生成させることも可能とされている。これにより、特定の画像処理を行う必要が生ずる毎に対応する各モジュール生成部４４を各々起動する処理が不要となり、特定の画像処理を行う画像処理部５０を再生成するのに要する時間を短縮することができる。
【００５８】
ところで、画像処理モジュール３８の制御部３８Ｂは、モジュール生成部４４によって起動されると画像処理モジュール３８の初期化を行う。この初期化では、まずモジュール生成部４４から与えられた自モジュールの前段及び後段のモジュールの情報を記憶する。続いて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール４０以外、例えば画像データ供給部２２や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール４０が存在している場合には、前段のバッファモジュール４０からの１回の画像データの読み出しによって取得する画像データのデータ量（単位読出データ量）を認識する。この単位読出データ量は、自モジュールの前段のバッファモジュール４０の数が１個であれば１個だけであるが、例えば図２(Ｃ)に示す画像処理部５０において画像合成処理を行う画像処理モジュール３８のように、前段のバッファモジュール４０の数が複数で、複数のバッファモジュール４０から各々取得した画像データを用いて画像処理エンジン３８Ａが画像処理を行う等の場合、前段の個々のバッファモジュール４０に対応する単位読出データ量は、自モジュールの画像処理エンジン３８Ａが行う画像処理の種類や内容、前段のバッファモジュール４０の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール４０へ通知することで、前段に存在している全てのバッファモジュール４０に単位読出データ量を設定する（図３(Ａ)の(1)も参照）。
【００５９】
次に、自モジュールの後段のモジュールを判定する。自モジュールの後段のモジュールがバッファモジュール４０以外、例えば画像出力部２４や特定のファイル等の場合には、必要に応じてその初期化処理（例えば後段のモジュールが画像出力部２４であれば、単位書込データ量に相当するデータ量ずつ画像データを出力することを通知する処理等）を行う。また、後段のモジュールがバッファモジュール４０であれば、１回の画像データの書き込みにおける画像データのデータ量（単位書込データ量）を認識し、後段のバッファモジュールに当該単位書込データ量を設定（図３(Ａ)の(2)も参照）する。そして、当該画像処理モジュール３８の初期化の完了をモジュール生成部４４に通知して処理を終了する。
【００６０】
一方、画像処理部５０を構成する個々のバッファモジュール４０のバッファ制御部４０Ｂは、モジュール生成部４４又はアプリケーション３２によって起動されるとバッファモジュール４０の初期化を行う。バッファモジュール４０の初期化では、まず自モジュールの前段の画像処理モジュール３８から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール３８から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する（図３(Ｂ)の(1),(2)も参照）。
【００６１】
自モジュールと連結されている全ての画像処理モジュール３８から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール３８によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ４０Ａの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量（自モジュールの後段に複数の画像処理モジュール３８が連結されている場合は、個々の画像処理モジュール３８によって各々設定された単位読出データ量の最大値）を設定してもよいし、単位書込データ量と単位読出データ量（の最大値）の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値（例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量（の最大値）の何れか）を設定するようにしてもよい。
【００６２】
また、自モジュールがアプリケーション３２によって生成され、画像データ供給部２２又は画像出力部２４として機能するバッファモジュール４０であった場合には、自モジュールのバッファ４０Ａとして用いるメモリ１４又は記憶部２０上の領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ４０Ａとして用いる既設の領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール３８に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ４０Ａに書き込まれた画像データのうち、対応する後段の画像処理モジュール３８によって読み出されていない画像データ（有効データ）の先頭位置（次の読出開始位置）と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが自モジュールがアプリケーション３２によって生成され、画像データ供給部２２として機能するバッファモジュール４０であれば、自モジュールのバッファ４０Ａとして用いるメモリ１４又は記憶部２０上の領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール３８に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール４０の初期化が完了し、バッファ制御部４０Ｂは初期化の完了をワークフロー管理部４６Ａへ通知する。
【００６３】
一方、アプリケーション３２は、順次起動したモジュール生成部４４によって前述のモジュール生成処理が順次行われることで、必要とされる画像処理を行う画像処理部５０の構築が完了すると、ワークフロー管理部４６Ａのプログラムを実行するスレッド（又はプロセス又はオブジェクト）を起動することで、ワークフロー管理部４６Ａに対して画像処理部５０による画像処理の実行を指示する。
【００６４】
処理管理部４６のワークフロー管理部４６Ａは、プログラムが起動されることで図９に示す並列制御処理を行う。ワークフロー管理部４６Ａは並列制御処理において、画像処理部５０を構成する個々の画像処理モジュール３８に処理要求を入力することで、画像処理部５０による画像処理を個々の画像処理モジュール３８単位で並列に行わせるが、以下では画像処理部５０全体の動作説明に先立ち、個々のバッファモジュール４０のバッファ制御部４０Ｂによって行われる初期化処理完了以降の処理、個々の画像処理モジュール３８の制御部３８Ｂによって行われる画像処理モジュール制御処理について順に説明する。
【００６５】
本実施形態では、画像処理モジュール３８が後段のバッファモジュール４０に画像データを書き込む場合には、画像処理モジュール３８からバッファモジュール４０へ書込要求が入力され、画像処理モジュール３８が前段のバッファモジュール４０から画像データを読み出す場合には、画像処理モジュール３８からバッファモジュール４０へ読出要求が入力される。前段の画像処理モジュール３８からの書込要求を含む何らかの情報がバッファモジュール４０に入力された場合（及び、後述するタイマがタイムアウトした場合）は、図４に示すデータ書込処理がバッファ制御部４０Ｂによって実行される。なお、以下で説明するデータ書込処理は、関数やメソッドの呼び出しで処理が始まるようにしてもよい。
【００６６】
データ書込処理では、まずステップ１００において、今回のデータ書込処理の起動要因が、タイマがタイムアウトしたことによる起動か否か判定する。判定が否定された場合はステップ１０４へ移行するが、上記判定が肯定された場合はステップ１０２へ移行し、過去に入力されてワークメモリ等に保管している書込要求情報をワークメモリ等から取り出す。ステップ１０６では自モジュールのバッファ４０Ａがアクセス中か否か判定する。バッファ４０Ａに対してはデータの読み出しも行われるので、当該判定が肯定された場合はステップ１０８へ移行して今回の処理対象の書込要求情報をワークメモリ等に保管し、次のステップ１１０でタイマをスタートさせてデータ書込処理を一旦終了する。
【００６７】
一方、ステップ１０６の判定が否定された場合にはステップ１１２へ移行し、確保すべき記憶リソースのサイズとして単位書込データ量をリソース管理部４６Ｂに通知して、書込用に用いる記憶リソース領域（書込用バッファ領域：図５(Ｂ)も参照）をリソース管理部４６Ｂによって確保させる。なお、このときメモリ１４の残量があれば、記憶リソース領域としてメモリ１４が確保されるが、メモリ１４の残量が不足している場合は記憶リソース領域として記憶部２０の記憶領域が確保される。次のステップ１１４では、自モジュールのバッファ４０Ａを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域（単位書込データ量の画像データを書き込み可能な単位バッファ領域）が存在しているか否か判定する。
【００６８】
モジュール生成部４４によって生成されたバッファモジュール４０は、当初はバッファ４０Ａとして用いる記憶リソース領域（単位バッファ領域）が確保されておらず、記憶リソース領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール４０に最初に書込要求が入力されたときにはバッファ４０Ａとして用いる記憶リソース領域（単位バッファ領域）が存在しておらず、この判定は否定される。また、後述する処理を経てバッファ４０Ａとして用いる単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合にも上記判定は否定される。
【００６９】
ステップ１１４の判定が否定された場合はステップ１１６へ移行し、確保すべき記憶リソースのサイズ（単位バッファ領域のサイズ）をリソース管理部４６Ｂに通知して、自モジュールのバッファ４０Ａとして用いる記憶リソース領域（画像データの保管に用いる単位バッファ領域）をリソース管理部４６Ｂによって確保させた後にステップ１１８へ移行する。なお、このときもメモリ１４の残量があれば記憶リソース領域としてメモリ１４が確保されるが、メモリ１４の残量が不足している場合は記憶リソース領域として記憶部２０の記憶領域が確保される。また、ステップ１１４の判定が肯定された場合はステップ１１６をスキップしてステップ１１８へ移行する。そしてステップ１１８では、先のステップ１１２で確保した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール３８へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール３８は、先頭アドレスが通知された書込領域（単位バッファ領域又は書込用バッファ領域）に画像データを書き込む（図５(Ｂ)も参照）。
【００７０】
例えば単位バッファ領域のサイズが単位書込データ量の整数倍でない場合、バッファ４０Ａ（単位バッファ領域）への単位書込データ量の画像データの書込が繰り返されることで、例として図５(Ａ)にも示すように、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい状態が生ずる。この場合、単位書込データ量の画像データが書き込まれる領域が複数の単位バッファ領域に跨ることになるが、本実施形態では、バッファ４０Ａとして用いるメモリ領域を単位バッファ領域を単位として確保するので、異なるタイミングで確保した単位バッファ領域が実際の記憶リソース上で連続する領域であることは保証されない。これに対して本実施形態では、画像処理モジュール３８による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、図５(Ｃ)に示すように、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写するので、画像データが書き込まれる領域が複数の単位バッファ領域に跨るか否かに拘わらず、書込要求元の画像処理モジュール３８への書込領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール３８とのインタフェースが簡単になる。
【００７１】
なお、自モジュールがアプリケーション３２によって生成されたバッファモジュール４０である場合、すなわちバッファ４０Ａとして用いる記憶リソース領域が既に確保されている場合には、先に説明したステップ１１２〜ステップ１１６をスキップしてステップ１１８へ移行し、既に確保されている記憶リソース領域のアドレスを画像処理モジュール３８に書込領域のアドレスとして通知し、書込領域への画像データの書き込みを行わせる。
【００７２】
前段の画像処理モジュール３８による書込領域への画像データの書き込みが完了するとステップ１２０へ移行し、書込用バッファ領域に書き込まれた画像データを保管用バッファ領域に書き込む。なお、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい場合、書込用バッファ領域に書き込まれた画像データは、図５(Ｃ)に示すように、保管用の複数の単位バッファ領域へ分けて書き込まれる。次のステップ１２２では、自モジュールの後段の個々の画像処理モジュール３８に対応する有効データポインタのうち有効データの末尾位置を表すポインタを、該ポインタが指し示す有効データの末尾位置が単位書込データ量分だけ後へ移動するように更新する（図５(Ｃ)も参照）。そして、次のステップ１２４では、先に書込用バッファ領域として確保した記憶リソース領域をリソース管理部４６Ｂによって解放させ、データ書込処理を終了する。なお、書込用バッファ領域はバッファモジュール４０の初期化時に確保し、バッファモジュール４０の消去時に解放するように構成してもよい。
【００７３】
続いて、後段の画像処理モジュール３８から読出要求がバッファモジュール４０に入力された場合（及び、後述するタイマがタイムアウトした場合）に、バッファモジュール４０の読出制御部４０Ｄによって実行されるデータ読出処理について、図６を参照して説明する。なお、以下で説明するデータ読出処理についても、関数やメソッドの呼び出しで処理が始まるようにしてもよい。
【００７４】
データ読出処理では、まずステップ１７０において、今回のデータ読出処理の起動要因が、後段の画像処理モジュールから読出要求を受信したことによる起動か否か判定する。判定が否定された場合はステップ１７４へ移行するが、上記判定が肯定された場合はステップ１７２へ移行し、後段の画像処理モジュールから今回受信した読出要求情報を読出用の待ち行列の末尾に登録する。ステップ１７４では、自モジュールのバッファ４０Ａがアクセス中か否か判定する。バッファ４０Ａに対してはデータの書き込みも行われるので、当該判定が肯定された場合はステップ２０８へ移行し、読出用の待ち行列に読出要求情報が登録されているか否か判定する。判定が否定された場合はデータ読出処理を終了するが、判定が肯定された場合はステップ２１０でタイマをスタートさせてデータ読出処理を一旦終了する。タイマをスタートさせた場合には、タイマがタイムアウトするとデータ読出処理が再度起動され、読出用の待ち行列に登録されている未処理の読出要求（情報）が再度取り出され、当該読出要求に応じた処理が行われる。
【００７５】
一方、ステップ１７４の判定が否定された場合にはステップ１７６へ移行し、読出用の待ち行列から先頭に登録されている読出要求情報を取り出す。次のステップ１７８では、読出用の待ち行列から取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール３８を認識し、読出要求元の画像処理モジュール３８によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール３８に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール３８に対応する有効データのバッファ４０Ａ上での先頭位置及び末尾位置を認識する。次のステップ１８０では、ステップ１７８で認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール３８に対応する有効データ（読出要求元の画像処理モジュール３８が読出可能な画像データ）が単位読出データ量以上有るか否か判定する。
【００７６】
ステップ１８０の判定が否定された場合はステップ１８２へ移行し、バッファ４０Ａに記憶されており読出要求元の画像処理モジュール３８が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール３８に対応する有効データがバッファ４０Ａに単位読出データ量以上記憶されているか、又は、バッファ４０Ａに記憶されている読出要求元の画像処理モジュール３８に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、ステップ１８０又はステップ１８２の判定が肯定されてステップ１８４へ移行する。ステップ１８４では、確保すべき記憶リソース領域のサイズとして読出要求元の画像処理モジュール３８に対応する単位読出データ量をリソース管理部４６Ｂに通知すると共に、読出に用いる記憶リソース領域（読出用バッファ領域：図８(Ｂ)も参照）の確保をリソース管理部４６Ｂに要求する。なお、このときメモリ１４の残量があれば、記憶リソース領域としてメモリ１４が確保されるが、メモリ１４の残量が不足している場合は記憶リソース領域として記憶部２０の記憶領域が確保される。
【００７７】
読出用バッファ領域を確保すると、次のステップ１８６では、読出対象の有効データをバッファ４０Ａから単位読出データ量分だけ読み出し、読み出した有効データを読出用バッファ領域に書き込む。次のステップ１８８では、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール３８へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール３８は、先頭アドレスが通知された読出領域（読出用バッファ領域）からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール３８に通知する。また、自モジュールがアプリケーション３２によって生成されたバッファモジュール４０である場合は、バッファ４０Ａとして用いている記憶リソース領域（単位バッファ領域の集合体）は連続領域であるので、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール３８が単位バッファ領域から直接画像データを読み出すようにしてもよい。
【００７８】
例として図８(Ａ)に示すように、有効データの先頭部分の画像データを記憶している単位バッファ領域に記憶されている有効データのデータ量が単位読出データ量未満であり、読出対象の有効データが複数の単位バッファ領域に跨っている場合には、今回の読出対象の有効データが実際の記憶リソース上で連続する領域に記憶されているとは限らないが、上記のデータ読出処理では、図８(Ｂ),(Ｃ)に示すように、このような場合にも読出対象の画像データを読出用バッファ領域に一旦書き込んだ後に該読出用バッファ領域から画像データを読み出させるので、読出対象の画像データが複数の単位バッファ領域に跨って記憶されているか否かに拘わらず、読出要求元の画像処理モジュール３８への読出領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール３８とのインタフェースが簡単になる。
【００７９】
次のステップ１９０では、読出要求元の画像処理モジュール３８による読出領域からの画像データの読み出しが完了したか否か判定し、判定が肯定される迄ステップ１９０を繰り返す。読出要求元の画像処理モジュール３８から読出完了が通知されると、ステップ１９０の判定が肯定されてステップ１９２へ移行し、読出用バッファ領域として確保した記憶リソース領域の先頭アドレス及びサイズをリソース管理部４６Ｂへ通知して、当該記憶リソース領域をリソース管理部４６Ｂによって解放させる。この読出用バッファ領域についても、バッファモジュール４０の初期化時に確保しておき、バッファモジュール４０が消去される時に解放するよう構成してもよい。またステップ１９４では、読出要求元の画像処理モジュール３８に対応する有効データポインタのうち有効データの先頭位置を表すポインタを、該ポインタが指し示す有効データの先頭位置を単位読出データ量分だけ後へ移動させることで更新する（図８(Ｃ)も参照）。
【００８０】
ステップ１９６では、後段の個々の画像処理モジュール３８に対応する有効データポインタを各々参照し、ステップ１９４のポインタ更新により、バッファ４０Ａを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール３８による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合はステップ２０８へ移行し、前述のステップ２０８，２１０を経てデータ読出処理を終了するが、判定が肯定された場合はステップ１９８へ移行し、有効データを記憶していない単位バッファ領域をリソース管理部４６Ｂによって解放させた後にステップ２０８へ移行し、ステップ２０８，２１０を経てデータ読出処理を終了する。
【００８１】
一方、バッファ４０Ａに記憶されており読出要求元の画像処理モジュール３８が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合（図１０(Ｂ)の(4)で読出可能な有効データ無が検知された場合）には、ステップ１８０，１８２の判定が各々否定されてステップ２００へ移行し、新たな画像データを要求するデータ要求をワークフロー管理部４６Ａへ出力する（図３(Ｂ)の(5)も参照）。この場合、ワークフロー管理部４６Ａにより、自モジュールの前段の画像処理モジュール３８に処理要求が入力されることになる。またステップ２０２では、読出用の待ち行列から取り出した読出要求情報を元の待ち行列（の先頭又は末尾）に再度登録し、ステップ２０８，２１０を経てデータ読出処理を終了する。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄（ステップ１８０又はステップ１８２の判定が肯定される迄）の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
【００８２】
詳細は後述するが、ワークフロー管理部４６Ａはバッファモジュール４０からデータ要求が入力されると、データ要求元のバッファモジュール４０の前段の画像処理モジュール３８に処理要求を入力する（図３(Ｂ)の(6)も参照）。この処理要求の入力をトリガとして前段の画像処理モジュール３８の制御部３８Ｂで行われる処理により、前段の画像処理モジュール３８がバッファモジュール４０へ画像データを書込可能な状態になると、前段の画像処理モジュール３８から書込要求が入力されることで前述したデータ書込処理（図４）が行われ、前段の画像処理モジュール３８からバッファモジュール４０のバッファ４０Ａに画像データが書き込まれる（図３(Ｂ)の(7),(8)も参照）。これにより、後段の画像処理モジュール３８によるバッファ４０Ａからの画像データの読出が行われることになる（図３(Ｂ)の(9)も参照）。
【００８３】
上述したデータ書込処理及びデータ読出処理では、一方が自モジュールのバッファ４０Ａにアクセスしている間、他方がバッファ４０Ａへのアクセスを停止する排他制御が行われる。これにより、コンピュータ１０のＣＰＵ１２が画像処理部５０を構成する個々のモジュールに対応するプロセス又はスレッドを並列に実行しても、単一のバッファモジュール４０に複数の要求が同時又は略同時に入力されることによる不都合の発生を回避できるので、コンピュータ１０のＣＰＵ１２が個々のモジュールに対応するプロセス又はスレッドを並列に実行することができる。もちろん、バッファモジュールを通常のプログラムまたはオブジェクトとして実現しても良い。
【００８４】
続いて、画像処理部５０を構成する個々の画像処理モジュール３８に対してワークフロー管理部４６Ａから処理要求が入力される毎に、個々の画像処理モジュール３８の制御部３８Ｂによって各々行われる画像処理モジュール制御処理（図８）を説明する。
【００８５】
画像処理モジュール制御処理では、まずステップ２１９において、自モジュールの画像処理エンジン３８Ａが行う画像処理の種類や内容等に基づき、自モジュールが使用する記憶リソース領域（メモリ）のサイズ及び自モジュールが使用する他のリソースの有無を認識する。なお、画像処理モジュール３８が使用する記憶リソースは、画像処理エンジン３８Ａが画像処理を行うために必要な記憶リソースが主であるが、前段のモジュールが画像データ供給部２２である場合や後段のモジュールが画像出力部２４である場合には、前段又は後段のモジュールとの画像データの送受に際して画像データを一時記憶するためのバッファ用の記憶リソースが必要となることもある。また、処理パラメータにテーブル等の情報が含まれている場合には、それを保持するための記憶リソース領域が必要となることもある。そして、認識したサイズの記憶リソース領域の確保をリソース管理部４６Ｂへ要求し、リソース管理部４６Ｂによって確保された記憶リソース領域をリソース管理部４６Ｂから取得する。また、自モジュール（の画像処理エンジン３８Ａ）が記憶リソース以外の他のリソースを必要としていると認識した場合には、上記他のリソースの確保をリソース管理部４６Ｂへ要求し、上記他のリソースをリソース管理部４６Ｂから取得する。
【００８６】
次のステップ２２０では、自モジュールの前段にモジュール（バッファモジュール４０や画像データ供給部２２、画像処理モジュール３８等）が存在している場合に、当該前段のモジュールに対してデータ（画像データ又は解析等の画像処理の処理結果）を要求する。次のステップ２２２では前段のモジュールからデータが取得可能であるかを判定し、ステップ２２２の判定が否定された場合はステップ２２４で全体処理終了が通知されたか否かを判定する。ステップ２２４の判定が否定された場合はステップ２２２に戻り、前段のモジュールからデータを取得可能となる迄ステップ２２２，２２４を繰り返す。ステップ２２２の判定が肯定された場合には、ステップ２２６で前段のモジュールからデータを取得し、取得したデータをステップ２１９で取得した記憶リソース領域のうちデータの一時保管用の記憶リソース領域に書き込むデータ取得処理を行う。
【００８７】
ここで、自モジュールの前段のモジュールがバッファモジュール４０である場合には、先のステップ２２０でデータを要求すると（読出要求）、読出可能な有効データがバッファモジュール４０のバッファ４０Ａに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール４０の前段の画像処理モジュール３８が当該バッファモジュール４０のバッファ４０Ａに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール４０から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段のバッファモジュール４０より先頭アドレスが通知された読出領域から単位読出データ量（又はそれ未満のデータ量）の画像データを読み出し、一時保管用の記憶リソース領域に書き込むデータ取得処理を行う（図３(Ａ)の(3)も参照）。
【００８８】
また、自モジュールの前段のモジュールが画像データ供給部２２であれば、先のステップ２２０でデータ要求を出力すると画像データを取得可能な状態であることが前段の画像データ供給部２２から直ちに通知されることで、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段の画像データ供給部２２から単位読出データ量の画像データを取得し、一時保管用の記憶リソース領域に書き込む画像データ取得処理を行う。また、自モジュールの前段のモジュールが画像処理モジュール３８であれば、先のステップ２２０でデータ要求（処理要求）を出力すると、前段の画像処理モジュール３８が画像処理を実行可能な状態であれば書込要求が入力されることでデータ（画像処理結果）を取得可能な状態であることが通知されるので、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段の画像処理モジュール３８によってデータを書き込ませる一時保管用の記憶リソース領域のアドレスを通知して書き込みを要請することで、前段の画像処理モジュール３８から出力されるデータを一時保管用の記憶リソース領域に書き込ませるデータ取得処理を行う。
【００８９】
次のステップ２２８では、自モジュールの前段に複数のモジュールが連結されているか否か判定する。判定が否定された場合には何ら処理を行うことなくステップ２３２へ移行するが、判定が肯定された場合はステップ２３０へ移行し、前段に連結されている全てのモジュールからデータを取得したか否か判定する。ステップ２３０の判定が否定された場合はステップ２２０に戻り、ステップ２３０の判定が肯定される迄ステップ２２０〜ステップ２３０を繰り返す。前段のモジュールから取得すべきデータが全て揃うと、ステップ２２８の判定が否定されるかステップ２３０の判定が肯定されてステップ２３２へ移行する。
【００９０】
次のステップ２３２では自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、ステップ２３２でデータ出力領域が取得できる迄（データ出力領域の先頭アドレスが通知される迄）繰り返し判定を行う。なお、後段のモジュールがバッファモジュール４０であれば、上記のデータ出力用領域の要求は当該バッファモジュール４０に対して書込要求を出力することによって成される。データ出力領域（後段のモジュールがバッファモジュール４０であれば当該バッファモジュール４０から先頭アドレスが通知された書込領域）が取得できたら（図３(Ａ)の(4)も参照）、次のステップ２３６において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域（の先頭アドレス）、先のステップ２１９で取得した記憶リソース領域のうち画像処理エンジンによる画像処理用の記憶リソース領域（の先頭アドレス及びサイズ）を画像処理エンジン３８Ａに入力し、入力したデータに対し画像処理用の記憶リソース領域を使用して所定の画像処理を行わせる（図３(Ａ)の(5)も参照）と共に、処理後のデータをデータ出力領域に書き込ませる（図３(Ａ)の(6)も参照）。画像処理エンジン３８Ａへの単位読出データ量のデータの入力が完了し、画像処理エンジン３８Ａから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ２３８で出力が完了したことを後段のモジュールに通知する。
【００９１】
上記のステップ２２０〜ステップ２３８により画像処理モジュール３８における単位処理データ量のデータに対する処理（単位処理）が完了するが、ワークフロー管理部４６Ａから画像処理モジュール３８に入力される処理要求では、ワークフロー管理部４６Ａによって単位処理の実行回数が指定されることがある。このためステップ２４０では、単位処理の実行回数が、入力された処理要求によって指示された実行回数に達したか否か判定する。指示された単位処理の実行回数が１回の場合、この判定は無条件に肯定されるが、指示された単位処理の実行回数が２回以上の場合はステップ２２０に戻り、ステップ２４０の判定が肯定される迄ステップ２２０〜ステップ２４０を繰り返す。ステップ２４０の判定が肯定されるとステップ２４２へ移行し、ワークフロー管理部４６Ａへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことをワークフロー管理部４６Ａへ通知し、画像処理モジュール制御処理を終了する。
【００９２】
また、ワークフロー管理部４６Ａから処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ２２４の判定が肯定されてステップ２４４へ移行し、処理対象の画像データ（なお、処理対象の画像データは１頁分の画像データであることが多いが、複数頁分の画像データであってもよい）に対する処理が終了したことを意味する全体処理終了通知をワークフロー管理部４６Ａ及び後段のモジュールへ各々出力する。また、次のステップ２４６では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
【００９３】
一方、ワークフロー管理部４６Ａは、アプリケーション３２によって画像処理の実行が指示されると、図９(Ａ)に示す並列制御処理１を行う。先にも述べたように、ワークフロー管理部４６Ａによる画像処理部５０の個々の画像処理モジュール３８への処理要求の入力では、単位処理の実行回数を指定可能とされているが、並列制御処理１のステップ５００では、１回の処理要求で指定する単位処理の実行回数を個々の画像処理モジュール３８毎に決定する。この処理要求１回当りの単位処理の実行回数は、例えば処理対象の画像データ全体を処理する間の個々の画像処理モジュール３８への処理要求の入力回数が平均化されるように定めることができるが、他の基準に従って定めてもよい。そして次のステップ５０４において、画像処理部５０のうち最後段の画像処理モジュール３８に処理要求を入力し（図９の(1)も参照）、並列制御処理１を終了する。
【００９４】
ここで、図９に示す画像処理部５０において、ワークフロー管理部４６Ａから最後段の画像処理モジュール３８4に処理要求が入力されると、画像処理モジュール３８4の制御部３８Ｂは前段のバッファモジュール４０3に読出要求を入力する（図９の(2)参照）。このとき、バッファモジュール４０3のバッファ４０Ａには画像処理モジュール３８4が読出可能な有効データ（画像データ）が記憶されていないので、バッファモジュール４０3のバッファ制御部４０Ｂはワークフロー管理部４６Ａにデータ要求を入力する（図９の(3)参照）。
【００９５】
ワークフロー管理部４６Ａは、バッファモジュール４０からデータ要求が入力される毎に、図９(Ｂ)に示す並列制御処理２を行う。この並列制御処理２では、ステップ５１０において、データ要求入力元のバッファモジュール４０（ここではバッファモジュール４０3）の前段の画像処理モジュール３８（ここでは画像処理モジュール３８3）を認識し、認識した前段の画像処理モジュール３８に処理要求を入力（図９の(4)参照）して処理を終了する。
【００９６】
画像処理モジュール３８3の制御部３８Ｂは、処理要求が入力されると前段のバッファモジュール４０2に読出要求を入力し（図９の(5)参照）、バッファモジュール４０2のバッファ４０Ａにも読出可能な画像データが記憶されていないので、バッファモジュール４０2のバッファ制御部４０Ｂはワークフロー管理部４６Ａにデータ要求を入力する（図９の(6)参照）。ワークフロー管理部４６Ａは、バッファモジュール４０2からデータ要求が入力された場合も、前述の並列制御処理２を再度行うことで、その前段の画像処理モジュール３８2に処理要求を入力し（図９の(7)参照）、画像処理モジュール３８3の制御部３８Ｂは前段のバッファモジュール４０1に読出要求を入力する（図９の(8)参照）。また、バッファモジュール４０1のバッファ４０Ａにも読出可能な画像データが記憶されていないので、バッファモジュール４０1のバッファ制御部４０Ｂもワークフロー管理部４６Ａにデータ要求を入力し（図９の(9)参照）。ワークフロー管理部４６Ａは、バッファモジュール４０1からデータ要求が入力された場合も、前述の並列制御処理２を再度行うことで、その前段の画像処理モジュール３８1に処理要求を入力する（図９の(10)参照）。
【００９７】
ここで、画像処理モジュール３８1の前段のモジュールは画像データ供給部２２であるので、画像処理モジュール３８1の制御部３８Ｂは、画像データ供給部２２にデータ要求を入力することで画像データ供給部２２から単位読出データ量の画像データを取得し（図９の(11)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０1のバッファ４０Ａに書き込む（図９の(12)参照）。
【００９８】
また、バッファモジュール４０1のバッファ制御部４０Ｂは、後段の画像処理モジュール３８2が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８2に対して読出を要請し、これに伴い画像処理モジュール３８2の制御部３８Ｂは、バッファモジュール４０1のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(13)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０2のバッファ４０Ａに書き込む（図９の(14)参照）。バッファモジュール４０2のバッファ制御部４０Ｂは、後段の画像処理モジュール３８3が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８3へ読出を要請し、画像処理モジュール３８3の制御部３８Ｂは、バッファモジュール４０2のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(15)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０3のバッファ４０Ａに書き込む（図９の(16)参照）。
【００９９】
更に、バッファモジュール４０3のバッファ制御部４０Ｂは、後段の画像処理モジュール３８4が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８4に対して読出を要請し、これに伴い画像処理モジュール３８4の制御部３８Ｂは、バッファモジュール４０3のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(17)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部２４へ出力する（図９の(18)参照）。
【０１００】
また、個々の画像処理モジュール３８の制御部３８Ｂは、後段のバッファモジュール４０のバッファ４０Ａへの画像データの書き込みを完了すると、ワークフロー管理部４６Ａへ処理完了通知を入力する。ワークフロー管理部４６Ａは、画像処理モジュール３８から処理完了通知が入力される毎に、図９(Ｃ)に示す並列制御処理３を行う。この並列制御処理３では、ステップ５２０で処理完了通知元の画像処理モジュール３８に処理要求を再度入力して処理を終了する。
【０１０１】
このように、ワークフロー管理部４６Ａによる並列制御処理では、任意の画像処理モジュール３８から処理完了が通知される毎に、処理完了通知元の画像処理モジュール３８へ処理要求を再度入力することで、処理対象の画像データが前段側のモジュールから後段側のモジュールへ画像１面分よりも小さいサイズ（ブロック）を単位として順に引き渡されると共に、個々の画像処理モジュール３８が互いに並列に画像処理を行う並列処理方式によって処理対象の画像データに対する画像処理が行われる。また、画像データ供給部２２から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール３８からワークフロー管理部４６Ａへの全体処理終了通知の入力が、前段側の画像処理モジュール３８から順次行われる。
【０１０２】
ワークフロー管理部４６Ａは、画像処理モジュール３８から全体処理終了通知が入力される毎に、図９(Ｄ)に示す並列制御処理４を行う。この並列制御処理４では、ステップ５４０において、全体処理終了通知入力元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部２４へ全て出力されることで、最後段の画像処理モジュール３８から全体処理終了通知が入力された場合には、ステップ５４０の判定が肯定されてステップ５４２へ移行し、アプリケーション３２に対して画像処理の完了を通知し、並列制御処理４を終了する。そして、画像処理の完了が通知されたアプリケーション３２は、ユーザに対して画像処理の完了を通知する。
【０１０３】
また、画像処理部５０が画像処理を行っている間、画像処理部５０を構成する個々の画像処理モジュール３８及び個々のバッファモジュール４０（に対応するスレッド）は、先にも説明したようにリソース管理部４６Ｂを介して記憶リソースの取得及び解放を繰り返す。ここで、各モジュールに割り当てる記憶リソースはアクセス速度が高速なメモリ１４であることが望ましいが、或るモジュールに対応するスレッドがリソース管理部４６Ｂに対して記憶リソースの取得を要求したものの、メモリ１４の残量が不足していることでリソース管理部４６Ｂからエラーが返ってきた場合、当該モジュールが以降の処理を正常に行えない状態に陥るので、画像処理部５０における処理全体が失敗に終わってしまうことになる。このため、本実施形態に係るリソース管理部４６Ｂは、メモリ１４の残量不足が直ちに画像処理部５０における処理全体の失敗を引き起こすことを回避するため、以下で説明する処理を行う。
【０１０４】
すなわち、リソース管理部４６Ｂは、任意のモジュール（画像処理モジュール３８又はバッファモジュール４０）に対応する任意のスレッドから記憶リソース取得要求が入力される毎に、図１１に示す記憶リソース取得要求時処理を行う。この記憶リソース取得要求時処理では、まずステップ６００では、記憶リソース取得要求元が画像処理モジュール３８に対応するスレッドか否か判定する。本実施形態に係るリソース管理部４６Ｂは、画像処理モジュール３８に割り当てるためのメモリ領域をオペレーティングシステム３０を通じて予め確保しており、上記判定が肯定された場合はステップ６０２へ移行し、画像処理モジュール３８用に予め確保したメモリ領域から、記憶リソース取得要求元より要求されているサイズのメモリ領域を確保し、次のステップ６０４において、確保したメモリ領域の先頭アドレスを通知することで、確保したメモリ領域を記憶リソース取得要求元の画像処理モジュール３８へ引き渡す。このように、本実施形態では画像処理モジュール３８に対しては記憶リソースとしてアクセス速度が高速なメモリ１４を常に割り当てるので、アクセス速度がより低い記憶リソースを割り当てることで、画像処理モジュール３８の処理速度の低下、ひいては画像処理部５０における画像処理全体の処理速度の低下が生ずることを防止することができる。
【０１０５】
また、記憶リソース取得要求元がバッファモジュール４０に対応するスレッドであった場合には、ステップ６００の判定が否定されてステップ６０６へ移行し、メモリ１４のうち使用されていない領域（画像処理モジュール用として予め確保した領域を除く）のサイズ（オペレーティングシステム３０を通じて確保可能なメモリ１４の残量）をオペレーティングシステム３０に問い合わせることでメモリ１４の残量を検知し、検知したメモリ１４の残量が記憶リソース取得要求元より要求されている記憶リソースのサイズ以上か否か判定する。判定が肯定された場合はステップ６０８へ移行し、オペレーティングシステム３０を通じて要求サイズのメモリ領域を確保する。またステップ６１０では、バッファモジュール４０に割り当てたメモリ領域を管理するためにワークメモリ等に設けたメモリ管理テーブルに、記憶リソース取得要求元のバッファモジュール４０のＩＤ、確保したメモリ領域の先頭アドレス及びサイズ等の情報を登録する。そしてステップ６１２では、確保したメモリ領域の先頭アドレスを記憶リソース取得要求元のバッファモジュール４０に対応するスレッドへ通知することで、確保したメモリ領域を記憶リソース取得要求元のバッファモジュール４０へ引き渡し、記憶リソース取得要求時処理を終了する。
【０１０６】
一方、記憶リソース取得要求元がバッファモジュール４０に対応するスレッドであり、メモリ１４の残量が要求サイズよりも小さい場合には、ステップ６０６の判定が否定されてステップ６１４へ移行し、記憶部２０の記憶領域を要求サイズ分確保する。次のステップ６１６では、バッファモジュール４０に割り当てた記憶部２０の記憶領域を管理するためにワークメモリ等に設けた記憶部管理テーブルに、記憶リソース取得要求元のバッファモジュール４０のＩＤ、確保した記憶部２０の記憶領域の先頭アドレス及びサイズ、テーブルへの登録日時等の情報を登録する。そしてステップ６１８では、確保した記憶部２０の記憶領域の先頭アドレスを記憶リソース取得要求元のバッファモジュール４０に対応するスレッドへ通知することで、確保した記憶部２０の記憶領域を記憶リソース取得要求元のバッファモジュール４０に対応するスレッドへ引き渡し、記憶リソース取得要求時処理を終了する。
【０１０７】
この場合、記憶部２０はメモリ１４に比べるとアクセス速度が低速であるので、バッファモジュール４０へ引き渡された記憶部２０の記憶領域に対するアクセス（画像データの書き込みや読み出し）は低速化することになるが、画像処理モジュール３８が記憶リソースを使って画像処理を行う場合と比較すると記憶リソースへのアクセス頻度は低いので、アクセス速度が低速の記憶リソースが割り当てられたことに伴う処理速度の低下の度合は画像処理モジュール３８よりも小さくて済む。そして、メモリ１４の残量が要求サイズよりも小さいときにも記憶リソース（記憶部２０の記憶領域）が確保されて要求元のバッファモジュール４０に引き渡されるので、メモリ１４の残量不足に拘わらず画像処理部５０における処理全体を継続させることができる。
【０１０８】
また、リソース管理部４６Ｂは、任意のモジュール（画像処理モジュール３８又はバッファモジュール４０）に対応する任意のスレッドから記憶リソース解放要求が入力される毎に、図１２に示す記憶リソース解放要求時処理を行う。この記憶リソース解放要求時処理では、まずステップ６３０において、記憶リソース解放要求元が画像処理モジュール３８に対応するスレッドか否か判定する。判定が肯定された場合、解放対象の記憶リソースは画像処理モジュール３８に割り当てるために予め確保したメモリ領域であるので、ステップ６３２へ移行し、解放が要求されたメモリ領域をオペレーティングシステム３０を通じて解放し処理を終了する。
【０１０９】
また、記憶リソース解放要求元がバッファモジュール４０に対応するスレッドである場合には、ステップ６３０の判定が否定されてステップ６３４へ移行し、解放対象の記憶リソースがメモリ領域か否か判定する。解放対象の記憶リソースが記憶部２０の記憶領域である場合には、判定が否定されてステップ６３６へ移行し、解放が要求された記憶部２０の記憶領域を解放する。またステップ６３８では、記憶部管理テーブルに登録されている情報のうち、今回解放した記憶領域に対応する情報を記憶部管理テーブルから削除し、処理を終了する。
【０１１０】
一方、記憶リソース解放要求元がバッファモジュール４０に対応するスレッドであり、かつ解放対象の記憶リソースがメモリ領域である場合には、ステップ６３４の判定が肯定されてステップ６４０へ移行し、解放が要求されたメモリ領域をオペレーティングシステム３０を通じて解放する。またステップ６４２では、メモリ管理テーブルに登録されている情報のうち、今回解放したメモリ領域に対応する情報をメモリ管理テーブルから削除する。次のステップ６４４では、記憶部管理テーブルに情報が登録されているか否か、すなわち記憶リソースとして記憶部２０の記憶領域が割り当てられているバッファモジュール４０が存在しているか否か判定する。判定が否定された場合は処理を終了するが、判定が肯定された場合はステップ６４６へ移行し、記憶部管理テーブルに登録されている情報のうち、テーブルへの登録日時が最も古い情報を参照することで、記憶リソースとして記憶部２０の記憶領域が割り当てられているバッファモジュール４０のうち、記憶部２０の記憶領域が割り当てられた時期が最も古いバッファモジュール４０を認識する。
【０１１１】
次のステップ６４８では、メモリ１４の残量が、ステップ６４６で認識したバッファモジュール４０による要求サイズ（当該バッファモジュール４０に割り当てている記憶部２０の記憶領域のサイズ）以上か否か判定する。判定が否定された場合は認識したバッファモジュール４０にメモリ領域を割り当てできる状況ではないので処理を終了するが、ステップ６４８の判定が肯定された場合には認識したバッファモジュール４０にメモリ領域を割当可能であるので、次のステップ６５０以降で、認識したバッファモジュール４０に対し、割り当て済みの記憶部２０の記憶領域に代えてメモリ領域を割り当てる処理を行う。
【０１１２】
すなわちステップ６５０では認識したバッファモジュール４０による要求サイズのメモリ領域をオペレーティングシステム３０を通じて確保する。次のステップ６５２では、認識したバッファモジュール４０に割り当て済みの記憶部２０の記憶領域に書き込まれているデータを、ステップ６５０で確保したメモリ領域に複写する。また、ステップ６５４ではメモリ管理テーブルに、認識したバッファモジュール４０のＩＤ、確保したメモリ領域の先頭アドレス及びサイズ等の情報を登録する。次のステップ６５６では、認識したバッファモジュール４０に対し、データを複写したメモリ領域の先頭アドレスを通知することで、割り当てていた記憶部２０の記憶領域に代えてデータを複写したメモリ領域の割り当て（引き渡し）を行う。また、ステップ６５８では、新たにメモリ領域を割り当てたバッファモジュール４０に割り当てていた記憶部２０の記憶領域を解放し、次のステップ６６０では、記憶部管理テーブルに登録されている情報のうち、今回解放した記憶領域に対応する情報を記憶部管理テーブルから削除する。
【０１１３】
そしてステップ６６０の処理を行うとステップ６４４に戻る。従って、記憶リソース解放要求時処理では、バッファモジュール４０に割り当てていたメモリ領域を解放することで、メモリ１４の残量が増大したタイミングで、記憶リソースとして記憶部２０の記憶領域を割り当てていたバッファモジュール４０に対し、記憶リソースとしてメモリ領域を割り当てし直すことが可能か否かが、記憶部２０の記憶領域が割り当てられた時期が古い順に判定され、メモリ領域が割当可能であれば記憶部２０の記憶領域に代えてメモリ領域が割り当てされる。これにより、バッファモジュール４０に記憶リソースとして記憶部２０の記憶領域を割り当てることで、当該バッファモジュール４０の処理速度が低下していたとしても、メモリ１４の残量が増大した際に記憶リソースとしてメモリ領域が割り当てし直されることで、上記バッファモジュール４０の処理速度が低下している状態が長時間継続することを防止することができ、メモリ１４の一時的な残量不足が画像処理部５０における処理全体の処理速度に継続的に悪影響を及ぼすことを防止することができる。
【０１１４】
また、記憶リソースとしてメモリ領域を割り当てし直すことが可能か否かの判定を、記憶部２０の記憶領域が割り当てられた時期が古い順に行うことで、記憶リソースとして記憶部２０の記憶領域が一旦割り当てられてから、記憶リソースとしてメモリ領域が割り当てし直される迄の所要時間を、個々のバッファモジュール４０について平均化することができる。
【０１１５】
〔第２実施形態〕
次に本発明の第２実施形態を説明する。なお、本第２実施形態は第１実施形態と同一構成であるので、各部分に同一の符号を付して構成の説明を省略し、以下、本第２実施形態の作用を説明する。
【０１１６】
第１実施形態で説明したように、画像処理部５０は、画像処理モジュール３８及びバッファモジュール４０がパイプライン形態又は有向非循環グラフ形態で連結されて構築されており、個々の画像処理モジュール３８は、前段に連結されたバッファモジュール４０に単位読出データ量以上の画像データが蓄積されないと自モジュールにおける画像処理を開始できない（但し、画像データ供給部２２に連結された最前段の画像処理モジュール３８を除く）ので、個々の画像処理モジュール３８における画像処理の進行は、より前段に位置している画像処理モジュール３８における画像処理の進行状況に依存し、特に画像処理部における一連の画像処理の実行開始時やその付近の期間には、各画像処理モジュールのうち、パイプライン形態又は有向非循環グラフ形態において前段側に位置している画像処理モジュールにおける画像処理を優先的に実行した方が処理効率が向上する。
【０１１７】
また、画像処理モジュール３８及びバッファモジュール４０がパイプライン形態又は有向非循環グラフ形態で連結された構成では、前段側の画像処理モジュール３８よりも後段側の画像処理モジュール３８の方が画像処理の進行が常に後になり、処理対象の画像データの残量も後段側の画像処理モジュール３８の方が常に多くなるので、画像処理部における一連の画像処理の進行に伴って、後段側に位置している画像処理モジュールにおける画像処理の実行優先度を高くしていった方が処理効率が向上し、特に画像処理部における一連の画像処理の実行終了時やその付近の期間には、全体処理が終了した画像処理モジュール３８が前段側から徐々に増えてくることに伴い、後段側に位置している画像処理モジュールにおける画像処理の実行優先度をより高くすることが処理効率の点から望ましい。
【０１１８】
上記に基づき、本第２実施形態に係るワークフロー管理部４６Ａは、図１３に示す並列制御処理を行う。すなわち、アプリケーション３２によって画像処理の実行が指示された際に実行する並列制御処理１（図９(Ａ)参照）では、ステップ５０１において、個々の画像処理モジュール３８のプログラムを実行する個々のスレッドの実行優先度が、例として図１４(Ａ)に示すように、パイプライン形態又は有向非循環グラフ形態の連結形態における画像処理モジュール３８の位置が前段側になるに従って高くなるように、前記個々のスレッドの実行優先度の初期設定を行う。
【０１１９】
なお、上記の「画像処理モジュール３８の位置」は、例えば画像処理部がパイプライン形態であれば、図１５(Ａ)に示すように先頭（最前段）の画像処理モジュール３８から昇順に付した位置値（或いは最後尾（最後段）の画像処理モジュール３８から降順に付した位置値）に基づいて判断することができ、画像処理部が有向非循環グラフ形態であれば、図１５(Ｂ)に示すように先頭（最前段）の画像処理モジュール３８から昇順に（或いは最後尾（最後段）の画像処理モジュール３８から降順に）位置値を付すと共に、バッファモジュールを介して複数の画像処理モジュールから画像データを取得する画像処理モジュール３８（図１５(Ｂ)の例では画像処理モジュールＥ）については、前段の複数の画像処理モジュールに付した位置値の最大値（又は最小値）に基づいて位置値を付し、この位置値に基づいて判断することができる。
【０１２０】
また、パイプライン形態又は有向非循環グラフ形態の連結形態における画像処理モジュール３８の位置が前段側になるに従って、対応するスレッドの実行優先度を高くすることは、例えば画像処理モジュールに対応するスレッドに設定可能な実行優先度が１〜９の９段階であり、個々の画像処理モジュール３８に対して位置値を前段側から初期値＝１で昇順に付したとすると、個々の画像処理モジュール３８に対応するスレッドに対し、
実行優先度＝１０−（位置値）    但し、実行優先度＜１の場合は実行優先度＝１
に設定してもよいし、位置値が最小値のときには実行優先度が「９」となり、位置値が最大値のときには実行優先度が「１」となるような特定の単調減少関数（例えば位置値の増大に対して実行優先度が線形に減少する関数）を用いて実行優先度を設定するようにしてもよい。これにより、画像処理部で一連の画像処理が開始される時点で、パイプライン形態又は有向非循環グラフ形態の連結形態における対応する画像処理モジュール３８の位置が前段側のスレッド程、高い実行優先度でＣＰＵ１２によって実行されることになり、ＣＰＵ１２を有効に利用して高い処理効率で画像処理を行うことができる。
【０１２１】
また、次のステップ５０２では、画像処理部５０を構成する個々のバッファモジュール４０の優先度を、個々のバッファモジュール４０と直接連結された画像処理モジュール３８に対応するスレッドの実行優先度に応じて設定する。個々のバッファモジュール４０の優先度は、具体的には、例えば個々のバッファモジュール４０の前段側に存在している画像処理モジュール３８に対応するスレッドの実行優先度と一致させてもよいし、個々のバッファモジュール４０の後段側に存在している画像処理モジュール３８に対応するスレッドの実行優先度と一致させてもよいし、個々のバッファモジュール４０の前段側及び後段側に存在している複数の画像処理モジュール３８に対応するスレッドの実行優先度の平均値、最大値、最小値の何れかを用いてもよい。
【０１２２】
なお、上述したバッファモジュール４０の優先度は、後述する記憶リソース取得要求時処理及び記憶リソース解放要求時処理で用いる情報であり、バッファモジュール４０に対応するスレッドの実行優先度とは無関係な情報であるが、これに代えてバッファモジュール４０に対応するスレッドの実行優先度を上記のように設定すると共に、後述する記憶リソース取得要求時処理及び記憶リソース解放要求時処理においても、バッファモジュール４０に対応するスレッドの実行優先度を用いるようにしてもよい。
【０１２３】
また、本第２実施形態に係るワークフロー管理部４６Ａは、画像処理モジュール３８から処理完了通知が入力される毎に実行する並列制御処理３（図９(Ｃ)参照）において、ステップ５２２で画像処理部全体としての画像処理の進行度合を判定する。この判定は、例えば個々の画像処理モジュール３８からワークフロー管理部４６Ａへ処理完了通知が送信される際に、個々の画像処理モジュール３８における画像処理の進行度合を判断可能な進行度合情報も併せて送信されるように個々の画像処理モジュール３８を構成すると共に、ワークフロー管理部４６Ａは、個々の画像処理モジュール３８から処理完了通知を受信する毎に、同時に受信した進行度合情報を保持し（同一の画像処理モジュール３８から以前に受信した進行度合情報を既に保持している場合は、既に保持している進行度合情報を新たに受信した進行度合情報で上書きし）た後に、個々の画像処理モジュール３８に対応する進行度合情報から画像処理部全体としての画像処理の進行度合を集計することによって行うことができる。
【０１２４】
上記の進行度合情報は、導出にあたって画像処理モジュール３８（に対応するスレッドを実行するＣＰＵ１２）に加わる負荷がなるべく小さい情報であることが好ましく、例えば処理対象の画像データ全体に対する個々の画像処理モジュール３８の処理済み画像データの割合（詳しくはデータ量の割合やライン数の割合等）を表す情報を用いることができる。また、個々の画像処理モジュール３８からは進行度合情報として処理済み画像データのデータ量やライン数を表す情報を送信させ、個々の画像処理モジュール３８における画像処理の進行度合（上記の割合等）はワークフロー管理部４６Ａで演算するようにしてもよい。
【０１２５】
次のステップ５２４では、ステップ５２２で判定した画像処理部全体としての画像処理の進行度合が、個々の画像処理モジュール３８に対応するスレッドの実行優先度を変更すべき値になったか否か判定する。なお、スレッドの実行優先度の変更は頻繁に行う必要はなく、実行優先度の変更は頻繁に行うことでＣＰＵ１２に余分な負荷が加わることを回避するために、ステップ５２４の判定における判定条件としては、例えばスレッドの実行優先度の変更（又は初期設定）を前回行ってから画像処理の進行度合が１０％増加する毎に上記判定が肯定される等のように、余分な負荷にならない程度に疎な間隔でスレッドの実行優先度が変更される判定条件を用いればよい。
【０１２６】
上記判定が否定された場合は何ら処理を行うことなく並列制御処理３を終了するが、上記判定が肯定された場合は、ステップ５２６において、初期設定時に各スレッドに設定した実行優先度の中央値（又は平均値）を基準として、初期設定時に高い実行優先度を設定したスレッドについては画像処理の進行に伴って実行優先度が徐々に低下し、初期設定時に低い実行優先度を設定したスレッドについては画像処理の進行に伴って実行優先度が徐々に増大するように、個々の画像処理モジュール３８に対応するスレッドの実行優先度を変更設定する。
【０１２７】
なお、このステップ５２６における実行優先度の変更は、画像処理モジュール３８の位置が最前段又は最後段に近づくに従って対応するスレッドの実行優先度の変更量を多くし、例として図１４(Ｂ),(Ｃ)に示すように、画像処理部全体としての画像処理の終盤には前段側の画像処理モジュール３８に対応するスレッドの実行優先度と後段側の画像処理モジュール３８に対応するスレッドの実行優先度の大小関係が逆転するように行ってもよいし、例として図１４(Ｄ),(Ｅ)に示すように、画像処理部全体としての画像処理の終盤には各画像処理モジュール３８に対応するスレッドの実行優先度が一定となるように行ってもよい。画像処理部における一連の画像処理の進行に伴って、個々の画像処理モジュール３８に対応するスレッドの実行優先度を上記のように変更することで、ＣＰＵ１２を有効に利用して高い処理効率で画像処理を行うことができる。
【０１２８】
また、次のステップ５２８では、変更設定した個々の画像処理モジュール３８に対応するスレッドの実行優先度に応じて、並列制御処理１のステップ５０２と同様に、個々のバッファモジュール４０の優先度を変更設定し、並列制御処理３を終了する。なお、個々の画像処理モジュール３８に対応するスレッドの実行優先度及び個々のバッファモジュール４０の優先度を上記のように初期設定及び変更することは、請求項７に記載の実行優先度制御手段に対応している。個々の画像処理モジュール３８に対応するスレッドの実行優先度を上記のように初期設定及び変更することで、画像処理部５０における画像処理全体の処理効率を向上させることができる。
【０１２９】
次に、本第２実施形態に係る記憶リソース取得要求時処理について、図１６を参照し、第１実施形態で説明した記憶リソース取得要求時処理（図１１）と異なる部分についてのみ説明する。第２実施形態に係る記憶リソース取得要求時処理では、記憶リソース取得要求元がバッファモジュール４０に対応するスレッド（ステップ６００の判定が否定）であり、メモリ１４の残量が要求サイズよりも小さい（ステップ６００の判定が肯定の）場合に、ステップ６２０へ移行し、記憶リソース取得要求元のバッファモジュール４０の優先度をワークフロー管理部４６Ａ等から取得する。
【０１３０】
また、ステップ６２１では、メモリ管理テーブルに情報が登録されている個々のバッファモジュール４０（記憶リソースとしてメモリ領域が割り当てされているバッファモジュール４０）の優先度をワークフロー管理部４６Ａ等から取得し、取得した個々のバッファモジュール４０の優先度をステップ６２０で取得した記憶リソース取得要求元のバッファモジュール４０の優先度と比較する。そしてステップ６２２では、ステップ６２１における優先度の比較結果に基づいて、優先度が記憶リソース取得要求元のバッファモジュール４０よりも低く、かつ割り当てされているメモリ領域のサイズが要求サイズ以上のバッファモジュール４０が有るか否か判定する。判定が否定された場合は記憶リソース取得要求元のバッファモジュール４０にメモリ領域を割り当てできないので、要求サイズ分の記憶部２０の記憶領域の確保（ステップ６１４）、記憶部管理テーブルへの情報の登録（ステップ６１６）、記憶リソース取得要求元のバッファモジュール４０への確保した記憶部２０の記憶領域の引き渡し（ステップ６１８）を順に行う。
【０１３１】
一方、ステップ６２２の条件に該当するバッファモジュール４０が存在している場合には、ステップ６２２からステップ６２３へ移行し、記憶部２０の記憶領域を、上記条件に該当するバッファモジュール４０に割り当てられているメモリ領域と同サイズ分確保し、次のステップ６２４では、上記条件に該当するバッファモジュール４０に割り当てられているメモリ領域から確保した記憶部２０の記憶領域へデータを複写する。またステップ６２５では、上記条件に該当するバッファモジュール４０のＩＤ、確保した記憶部２０の記憶領域の先頭アドレス及びサイズ等の情報を記憶部管理テーブルに登録する。そしてステップ６２６では、上記条件に該当するバッファモジュール４０（記憶リソースとしてメモリ領域が割り当てられていたバッファモジュール４０）に対し、今まで割り当てられていたメモリ領域に代えて、データを複写した記憶部２０の記憶領域の引き渡し（割り当てし直し）を行う。
【０１３２】
また、ステップ６２７では上記のバッファモジュール４０に割り当てられていたメモリ領域をクリアし、次のステップ６２８では、メモリ管理テーブルに登録されている上記メモリ領域の情報を、バッファモジュール４０のＩＤとして記憶リソース取得要求元のバッファモジュールのＩＤに書替えると共に、割当サイズの変動があれば（要求サイズが上記のバッファモジュールに割り当てられていたメモリ領域のサイズよりも小さい場合）サイズも書替えることで更新する。そしてステップ６２９では、記憶リソース取得要求元のバッファモジュール４０に対し、他のバッファモジュール４０に割り当てられていたメモリ領域の先頭アドレスを通知することで、メモリ領域の割り当て（引き渡し）を行う。なお、割当サイズの変動がある場合には、不要となった一部のメモリ領域を解放する処理も行う。
【０１３３】
このように、本第２実施形態に係る記憶リソース取得要求時処理では、バッファモジュール４０から記憶リソースの取得が要求されたものの、メモリ１４の残量が不足している場合に、既にメモリ領域を割り当てたバッファモジュール４０の中に、記憶リソース取得要求元のバッファモジュール４０よりも優先度の低いバッファモジュール４０が存在しており、かつ当該優先度の低いバッファモジュール４０に割り当てられているメモリ領域のサイズが要求サイズ以上であれば、当該優先度の低いバッファモジュール４０に対してはメモリ領域に代えて記憶部２０の記憶領域を割り当てし直すと共に、優先度の低いバッファモジュール４０に割り当てられていたメモリ領域を記憶リソース取得要求元のバッファモジュール４０に割り当てるので、優先度の高いバッファモジュール４０に優先的にメモリ領域が割り当てされることになり、画像処理部５０における画像処理全体の処理効率を更に向上させることができる。
【０１３４】
続いて、本第２実施形態に係る記憶リソース解放要求時処理（図１７）について説明する。第１実施形態で説明した記憶リソース解放要求時処理（図１２）では、ステップ６４６において、記憶リソースとして記憶部２０の記憶領域が割り当てられているバッファモジュール４０のうち、記憶部２０の記憶領域が割り当てられた時期が最も古いバッファモジュール４０を認識することで、記憶リソースとしてメモリ領域を割り当てし直すことが可能か否かの判定を、記憶部２０の記憶領域が割り当てられた時期が古い順に行っていたが、本第２実施形態に係る記憶リソース解放要求時処理では、上記のステップ６４６に代えて、ステップ６４７において、記憶リソースとして記憶部２０の記憶領域が割り当てられているバッファモジュール４０のうち、優先度が最も高いバッファモジュール４０を認識している。これにより、記憶リソースとして記憶部２０の記憶領域を一旦割り当てたバッファモジュール４０に対してメモリ領域を割り当てし直すことが可能か否かの判定が、優先度の降順に行われることになり、画像処理部５０における画像処理全体の処理効率が更に向上する確率を増大させることができる。
【０１３５】
なお、第２実施形態において、個々の画像処理モジュール３８に対応するスレッドの実行優先度を、個々の画像処理モジュールについて、後段のバッファモジュール４０を介して後段に連結された画像処理モジュール３８（位置値＝自モジュールの位置値＋１の画像処理モジュール３８）から前記後段のバッファモジュール４０に読出要求が入力されたものの、前記後段のバッファモジュール４０に記憶されている有効データが単位読出データ量未満であったために、前記後段のバッファモジュール４０からデータ要求が入力されると共に、前記後段の画像処理モジュールに「待ち」（バッファモジュール４０の有効データが単位読出データ量以上となる迄待機する状況）を発生させた回数（待ち発生回数）に応じて変更するようにしてもよい。
【０１３６】
具体的には、待ち発生回数が平均値よりも多い画像処理モジュール３８は、後段のバッファモジュール４０を介して後段に連結された画像処理モジュール３８に比較的多数回の「待ち」を発生させており、当該画像処理モジュール３８における画像処理が画像処理部全体としての画像処理のボトルネックになっていると判断できるが、このような画像処理モジュール３８に対応するスレッドの実行優先度を増大させる。また、待ち発生回数が平均値よりも少ない画像処理モジュール３８は、後段のバッファモジュール４０を介して後段に連結された画像処理モジュール３８における「待ち」の発生回数が比較的少ないので、当該画像処理モジュール３８よりも待ち発生回数が比較的多い他の画像処理モジュール３８における画像処理を優先させた方が画像処理部全体としての画像処理を効率化できるが、このような画像処理モジュール３８に対応するスレッドの実行優先度を低下させる。
【０１３７】
これにより、個々の画像処理モジュール３８に対応するスレッドの実行優先度を、後段の画像処理モジュール３８における待ち発生回数（と待ち発生回数の平均値との偏差）に応じて最適化することができ、ＣＰＵ１２を有効に利用して高い処理効率で画像処理を行うことができる。また、メモリ取得待ち行列に登録される取得要求情報が、上記のようにして設定された実行優先度に従って配列されることで、要求されたメモリ領域を確保できずに複数のスレッドの実行を停止させた後に、確保可能なメモリ領域が増大したことでスレッドの実行停止状態を解除してメモリ領域を割り当てる場合にも、画像処理部５０における以降の処理を高い処理効率で行わせることができる。
【０１３８】
なお、上記態様において、後段のバッファモジュール４０からデータ要求が入力された回数、すなわち後段のバッファモジュール４０を介して後段に連結された画像処理モジュール３８で「待ち」が発生した回数に、個々の画像処理モジュール３８が後段のバッファモジュール４０へ画像データを書き込んだものの後段のバッファモジュール４０の有効データが、後段の画像処理モジュール３８の単位読出データ量に達しなかった回数を加算した回数を待ち発生回数として用いるようにしてもよい。この場合、待ち発生回数が、後段の画像処理モジュール３８における「待ち」の度合いをより正確に反映した値となるので好ましい。
【０１３９】
また、上記態様において、後段のバッファモジュール４０を介して連結された後段の画像処理モジュール３８における「待ち」の発生回数に応じて、個々の画像処理モジュール３８に対応するスレッドの実行優先度を変更することに加え、自モジュールのおける「待ち」の発生回数に応じてスレッドの実行優先度を変更する（詳しくは、待ち発生回数が比較的多い画像処理モジュール３８に対応するスレッドは実行優先度を低下させ、待ち発生回数が比較的少ない画像処理モジュール３８に対応するスレッドは実行優先度を増大させる）ようにしてもよい。
【０１４０】
また、個々の画像処理モジュール３８に対応するスレッドの実行優先度を、個々のバッファモジュール４０の後段の画像処理モジュール３８が、個々のバッファモジュール４０から画像データを取得する際の単位データ量に対する、個々のバッファモジュール４０に蓄積記憶されている画像データのデータ量の比率に応じて変更するようにしてもよい。
【０１４１】
具体的には、蓄積データ量の比率が平均値よりも小さいバッファモジュール４０は、後段の画像処理モジュール３８における単位読出データ量に比して有効データのデータ量が乏しく、後段の画像処理モジュール３８で比較的多数回の「待ち」が発生している可能性が高く、また当該バッファモジュール４０の前段の画像処理モジュール３８における画像処理が画像処理部全体としての画像処理のボトルネックになっている可能性が高いが、このような画像処理モジュール３８に対応するスレッドの実行優先度を増大させる。また、蓄積データ量の比率が平均値よりも大きいバッファモジュール４０には、後段の画像処理モジュール３８における単位読出データ量に比して十分なデータ量の有効データが記憶されているので、当該バッファモジュールの前段の画像処理モジュール３８よりも、蓄積データ量の比率が比較的小さい他のバッファモジュール４０の前段の画像処理モジュール３８における画像処理を優先させた方が画像処理部全体としての画像処理を効率化できるが、このような画像処理モジュール３８に対応するスレッドの実行優先度を低下させる。
【０１４２】
これにより、個々の画像処理モジュール３８に対応するスレッドの実行優先度が、後段のバッファモジュール４０における蓄積データ量の比率（と蓄積データ量の比率の平均値との偏差）に応じて最適化されることになり、ＣＰＵ１２を有効に利用して高い処理効率で画像処理を行うことができる。また、メモリ取得待ち行列に登録される取得要求情報が、上記のようにして設定された実行優先度に従って配列されることで、要求されたメモリ領域を確保できずに複数のスレッドの実行を停止させた後に、確保可能なメモリ領域が増大したことでスレッドの実行停止状態を解除してメモリ領域を割り当てる場合にも、画像処理部５０における以降の処理を高い処理効率で行わせることができる。
【０１４３】
また、第１実施形態及び第２実施形態では、本発明に係る記憶リソース管理手段として機能する処理管理部４６のリソース管理部４６Ｂが、画像処理部５０の各モジュールからの記憶リソース取得／解放要求を一括して処理する態様を説明したが、本発明はこれに限定されるものではなく、本発明に係る記憶リソース管理手段として機能するリソース管理部を個々のバッファモジュール４０内及び個々の画像処理モジュール３８内に各々設け、個々のモジュール内のリソース管理部が、同一モジュール内の制御部（バッファ制御部４０Ｂ又は制御部３８Ｂ）から出力される記憶リソース取得／解放要求を処理するようにしてもよい。この場合、個々のモジュールに所定サイズのメモリ領域を予め割り当てておき、個々のモジュールに設けたリソース管理部は、自モジュールに予め割り当てられたメモリ領域の残量が十分に有る間は、同一モジュール内の制御部からの記憶リソース取得要求に対してメモリ領域を割り当て、自モジュールに予め割り当てられたメモリ領域の残量が不足した場合には、同一モジュール内の制御部からの記憶リソース取得要求に対して記憶部２０の記憶領域を割り当てるように構成することができる。また、この態様において、画像処理モジュール３８でメモリ領域の残量不足が生ずることで、画像処理部５０における画像処理の処理速度が大幅に低下することを回避するために、画像処理モジュール３８に予め割り当てられるメモリ領域を、画像処理の実行中にメモリ領域の残量不足が生じないように十分大きなサイズとする一方で、メモリ１４の節減のために、バッファモジュール４０に予め割り当てられるメモリ領域については、画像処理の実行中にメモリ領域の残量不足が生ずる可能性もある小さなサイズとすることが望ましい。上記態様は請求項３及び請求項８記載の発明に対応している。
【０１４４】
また、上記ではリソース管理部４６Ｂによるメモリ管理の方式として、画像処理部５０の個々のモジュールからの要求の都度、メモリ１４から要求元のモジュールに割り当てるメモリ領域をオペレーティングシステム３０を通じて確保する管理方式を前提に説明したが、これに限定されるものではなく、メモリ１４から一定サイズのメモリ領域をオペレーティングシステム３０を通じて事前に確保し、個々のモジュールからの要求があると、要求されたメモリ領域のサイズが閾値未満であれば事前に確保したメモリ領域のうちの一部領域を要求元のモジュールに割り当て、要求されたメモリ領域のサイズが閾値以上であれば要求元のモジュールに割り当てるメモリ領域をオペレーティングシステム３０を通じて確保する管理方式に本発明を適用することも可能である。
【０１４５】
更に、上記では画像処理部５０を並列処理方式で動作させるに際し、画像処理部５０を構成する個々のモジュール（のプログラム）を各々別のスレッドとして実行させる態様を説明したが、これに限定されるものではなく、画像処理モジュール３８が前段のバッファモジュール４０から画像データを読み出す際及び後段のバッファモジュール４０に画像データ等を書き込む際には、画像処理モジュール３８における画像処理等が一時的に停止している状態であることを考慮すると、個々のバッファモジュール４０のバッファ制御部に相当するプログラムを、データ書込処理（図４）を行う書込制御部のプログラムと、データ読出処理（図６）を行う読出制御部のプログラムに分離し、画像処理モジュール３８のプログラムと、前記画像処理モジュール３８の前段のバッファモジュール４０の読出制御部のプログラムと、前記画像処理モジュール３８の後段のバッファモジュール４０の書込制御部のプログラムを単一のスレッドとして実行させ、画像処理部５０を構成する個々の画像処理モジュール３８について上記のスレッドを生成し、並列に実行させることで画像処理部５０を並列処理方式で動作させるようにしてもよい。
【０１４６】
また、上記では本発明に係る外部記憶装置として、ＨＤＤやフラッシュメモリ等から成る記憶部２０を例に説明したが、これに限定されるものではなく、通信回線を介してコンピュータ１０に接続された各種の外部記憶デバイス等を適用することも可能である。また、上記では本発明に係るメモリとしてＤＲＡＭやＳＲＡＭ等から成るメモリ１４を例に説明したが、本発明に係るメモリは外部記憶装置と比較して相対的にアクセス速度が高速の記憶デバイスであればよく、例えば通信回線を介してコンピュータ１０に接続された各種の外部記憶デバイスを本発明に係る外部記憶装置として用いる場合には、本発明に係るメモリとしてＨＤＤやフラッシュメモリ等を適用することも可能である。
【図面の簡単な説明】
【０１４７】
【図１】本実施形態に係るコンピュータ（画像処理装置）の概略構成を示すブロック図である。
【図２】画像処理部の構成例を示すブロック図である。
【図３】(Ａ)は画像処理モジュール、(Ｂ)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。
【図４】バッファモジュールで実行されるデータ書込処理の内容を示すフローチャートである。
【図５】書込対象の画像データが複数の保管用単位バッファ領域に跨る場合を説明する概略図である。
【図６】バッファモジュールで実行されるデータ読出処理の内容を示すフローチャートである。
【図７】読出対象の画像データが複数の保管用単位バッファ領域に跨っていた場合を説明する概略図である。
【図８】画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。
【図９】ワークフロー管理部によって実行される並列制御処理の内容を示すフローチャートである。
【図１０】画像処理部における画像処理の流れを説明する概略図である。
【図１１】リソース管理部によって実行される記憶リソース取得要求時処理の内容を示すフローチャートである。
【図１２】リソース管理部によって実行される記憶リソース解放要求時処理の内容を示すフローチャートである。
【図１３】第２実施形態に係るワークフロー管理部によって実行される並列制御処理の内容を示すフローチャートである。
【図１４】画像処理部における一連の画像処理の進行に伴う、個々の画像処理モジュールに対応するスレッドの実行優先度の推移の一例を示す概略図である。
【図１５】パイプライン形態又は有向非循環グラフ形態の連結形態における画像処理モジュールの位置の定義を説明するためのブロック図である。
【図１６】第２実施形態に係るリソース管理部によって実行される記憶リソース取得要求時処理の内容を示すフローチャートである。
【図１７】第２実施形態に係るリソース管理部によって実行される記憶リソース解放要求時処理の内容を示すフローチャートである。
【符号の説明】
【０１４８】
１０ コンピュータ
１２  ＣＰＵ
１４ メモリ
２０ 記憶部
３８ 画像処理モジュール
３８Ａ  画像処理エンジン
３８Ｂ  制御部
４０ バッファモジュール
４０Ｂ  バッファ制御部
４６ 処理管理部
４６Ａ  ワークフロー管理部
４６Ｂ  リソース管理部
５０ 画像処理部
【図１】
2008009696.tif 000003
【図２】
2008009696.tif 000004
【図３】
2008009696.tif 000005
【図４】
2008009696.tif 000006
【図５】
2008009696.tif 000007
【図６】
2008009696.tif 000008
【図７】
2008009696.tif 000009
【図８】
2008009696.tif 000010
【図９】
2008009696.tif 000011
【図１０】
2008009696.tif 000012
【図１１】
2008009696.tif 000013
【図１２】
2008009696.tif 000014
【図１３】
2008009696.tif 000015
【図１４】
2008009696.tif 000016
【図１５】
2008009696.tif 000017
【図１６】
2008009696.tif 000018
【図１７】
2008009696.tif 000019