(57)【要約】【課題】画像処理部を構成する画像処理モジュールとして使用可能な画像処理プログラムの追加を容易に行うことを可能とする。【解決手段】各種プログラムが組み込まれ、画像処理モジュール及びバッファモジュールがパイプライン形態等で連結した画像処理部を構築して画像処理を行う画像処理アプリケーション32がインストールされている記憶部20には、画像処理プログラム34C、画像処理プログラム34Cを画像処理モジュールとして生成する処理モジュール生成関数34A及び処理生成モジュール34Bが登録された共有ライブラリ34を追加記憶可能とされ、画像処理部の構築時に、必要な画像処理を行うプログラムがアプリケーション32に組み込まれていない場合、処理構築部42は共有ライブラリ34を検索し、処理モジュール生成関数34Aを呼び出して画像処理モジュールを生成させることを、所望の画像処理モジュールの生成に成功する迄繰り返す。【選択図】図１
2008021249.tif 000002
【特許請求の範囲】
【請求項１】
自モジュールの前段から取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する１つ以上の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段から出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段によって読み出させるバッファモジュールが連結され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構築される画像処理部の個々のモジュールのうち、前記バッファモジュールを含む１つ以上のモジュールのプログラムを少なくとも記憶する第１記憶手段と、
画像処理を行う画像処理プログラムと、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成するモジュール生成手段のプログラムが登録された共有ライブラリを追加記憶可能な第２記憶手段と、
前記画像処理部の構築時に、前記画像処理部を構成する任意のモジュールの生成が通知される毎に、生成が通知されたモジュールの情報を構成情報として保持し、保持している構成情報に基づき、構築された前記画像処理部を構成する個々のモジュールのうちの少なくとも１つのモジュールに処理の実行を指示することで、前記画像処理部で画像処理を行わせる制御手段と、
前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラムと予め各々リンク付けされ、構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されているモジュールについては、前記第１記憶手段からプログラムを読み出しコンピュータのメモリにロードして生成すると共に、前記制御手段へモジュールの生成を通知し、前記構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されていない画像処理モジュールについては、前記第２記憶手段に記憶されている前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードし、前記モジュール生成手段に前記モジュール生成パラメータを引き渡すことで前記画像処理モジュールの生成を行わせ、かつ前記制御手段への画像処理モジュールの生成を通知するか又は前記制御手段への画像処理モジュールの生成通知を前記モジュール生成手段に行わせることで、前記構築対象の画像処理部を構築する構築手段と、
を含む画像処理装置。
【請求項２】
前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラム、前記制御手段のプログラム及び前記構築手段のプログラムは、実行形式の単一の処理プログラムとして予めコンパイルされ、前記第１記憶手段に記憶されており、
前記制御手段及び前記構築手段は、対応するプログラムが前記コンピュータのプログラム実行リソースによって実行されることで実現されることを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記モジュール生成手段は、
引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成する第１のモジュール生成手段と、
モジュール生成パラメータが引き渡されると共に生成通知先が指示されて呼び出されると、前記第１のモジュール生成手段を起動し、起動した前記第１のモジュール生成手段にモジュール生成パラメータを引き渡して前記画像処理モジュールを生成させると共に、前記画像処理モジュールが正常に生成された場合に前記指示された生成通知先へ画像処理モジュールの生成を通知し、呼び出し元へ制御を戻す第２のモジュール生成手段と、
を含んで構成され、
前記構築手段は、前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードした後に、ロードした前記共有ライブラリ内の前記第２モジュール生成手段に対し、前記モジュール生成パラメータを引き渡すと共に前記生成通知先として前記制御手段を指定することで、前記画像処理モジュールの生成及び前記制御手段への前記画像処理モジュールの生成通知を行わせることを特徴とする請求項１記載の画像処理装置。
【請求項４】
前記モジュール生成手段は、
引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成する第１のモジュール生成手段と、
呼び出されると、前記第１のモジュール生成手段を起動して呼び出し元へ制御を戻す第２のモジュール生成手段と、
から成り、
前記構築手段は、前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードした後に、ロードした前記共有ライブラリ内の前記第２のモジュール生成手段を呼び出すことで前記第１のモジュール生成手段を起動させ、起動された前記第１のモジュール生成手段にモジュール生成パラメータを引き渡して前記画像処理モジュールを生成させ、前記画像処理モジュールが正常に生成された場合に前記制御手段へ画像処理モジュールの生成を通知することを特徴とする請求項１記載の画像処理装置。
【請求項５】
前記構築手段は、前記第２のモジュール生成手段を呼び出すときに、所定の判別オブジェクトを前記第２のモジュール生成手段に引き渡し、
前記第２のモジュール生成手段は、呼び出し元から引き渡された判別オブジェクトを予め保持している情報と比較することで呼び出し元が妥当か否かを判定し、呼び出し元が妥当と判断した場合に処理を継続することを特徴とする請求項３又は請求項４記載の画像処理装置。
【請求項６】
前記モジュール生成手段は、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成することを試行し、前記画像処理モジュールを正常に生成できた場合には正常応答を返す一方、前記画像処理プログラムによって実現される画像処理が前記モジュール生成パラメータに適合していなかった場合にはエラー応答を返し、
前記構築手段は、モジュール生成手段からエラー応答が返ってきた場合に、前記第２記憶手段に記憶されている別の共有ライブラリの検索を行うことを特徴とする請求項１記載の画像処理装置。
【請求項７】
自モジュールの前段から取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する１つ以上の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段から出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段によって読み出させるバッファモジュールが連結され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構築される画像処理部の個々のモジュールのうち、前記バッファモジュールを含む１つ以上のモジュールのプログラムを少なくとも記憶する第１記憶手段、及び、画像処理を行う画像処理プログラムと、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成するモジュール生成手段のプログラムが登録された共有ライブラリを追加記憶可能な第２記憶手段を備えたコンピュータを、
前記画像処理部の構築時に、前記画像処理部を構成する任意のモジュールの生成が通知される毎に、生成が通知されたモジュールの情報を構成情報として保持し、保持している構成情報に基づき、構築された前記画像処理部を構成する個々のモジュールのうちの少なくとも１つのモジュールに処理の実行を指示することで、前記画像処理部で画像処理を行わせる制御手段、
及び、前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラムと予め各々リンク付けされ、構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されているモジュールについては、前記第１記憶手段からプログラムを読み出しコンピュータのメモリにロードして生成すると共に、前記制御手段へモジュールの生成を通知し、前記構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されていない画像処理モジュールについては、前記第２記憶手段に記憶されている前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードし、前記モジュール生成手段に前記モジュール生成パラメータを引き渡すことで前記画像処理モジュールの生成を行わせ、かつ前記制御手段への画像処理モジュールの生成を通知するか又は前記制御手段への画像処理モジュールの生成通知を前記モジュール生成手段に行わせることで、前記構築対象の画像処理部を構築する構築手段
として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置及び画像処理プログラムに関する。
【背景技術】
【０００２】
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なＤＴＰ（デスクトップ・パブリッシング）システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わせる場合もあるが、例えば色空間や１画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
【０００３】
このような要求を満たすために、例えば特許文献１には、プログラマブルな処理モジュールをパイプライン形態やＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態に接続して、所望の画像処理を行うことを可能とする技術が提案されている。特許文献１に記載の技術では、複数のプログラマブル演算処理部の各々における演算処理の内容と、ネットワーク部による各プログラマブル演算処理部の接続形態を、ホストコントロール手段を通じて外部から自在に設定できるように構成することで、高速かつ高度な演算処理が可能で、機能変更や系統変更に対する自由度が高いデジタル映像信号処理装置を実現している。
【０００４】
一方、特許文献２には、転送に特有の属性及び動作全てを処理する能力に寄与するプラグインを必要に応じて動的にロードすることで、全ての着信メッセージの閲覧を、メッセージタイプに関係なく単一のボックス内で行うことを可能としたメッセージ送信アーキテクチャが開示されている。
【特許文献１】特開平５−２６０３７３号公報
【特許文献２】特表２００２−５３６７６７
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は上記事実を考慮して成されたもので、画像処理部を構成する画像処理モジュールとして使用可能な画像処理プログラムの追加を容易に行うことができる画像処理装置及び画像処理プログラムを得ることが目的である。
【課題を解決するための手段】
【０００６】
上記目的を達成するために請求項１記載の発明に係る画像処理装置は、自モジュールの前段から取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する１つ以上の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段から出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段によって読み出させるバッファモジュールが連結され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構築される画像処理部の個々のモジュールのうち、前記バッファモジュールを含む１つ以上のモジュールのプログラムを少なくとも記憶する第１記憶手段と、画像処理を行う画像処理プログラムと、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成するモジュール生成手段のプログラムが登録された共有ライブラリを追加記憶可能な第２記憶手段と、前記画像処理部の構築時に、前記画像処理部を構成する任意のモジュールの生成が通知される毎に、生成が通知されたモジュールの情報を構成情報として保持し、保持している構成情報に基づき、構築された前記画像処理部を構成する個々のモジュールのうちの少なくとも１つのモジュールに処理の実行を指示することで、前記画像処理部で画像処理を行わせる制御手段と、前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラムと予め各々リンク付けされ、構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されているモジュールについては、前記第１記憶手段からプログラムを読み出しコンピュータのメモリにロードして生成すると共に、前記制御手段へモジュールの生成を通知し、前記構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されていない画像処理モジュールについては、前記第２記憶手段に記憶されている前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードし、前記モジュール生成手段に前記モジュール生成パラメータを引き渡すことで前記画像処理モジュールの生成を行わせ、かつ前記制御手段への画像処理モジュールの生成を通知するか又は前記制御手段への画像処理モジュールの生成通知を前記モジュール生成手段に行わせることで、前記構築対象の画像処理部を構築する構築手段と、を含んで構成されている。
【０００７】
請求項２記載の発明は、請求項１記載の発明において、前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラム、前記制御手段のプログラム及び前記構築手段のプログラムは、実行形式の単一の処理プログラムとして予めコンパイルされ、前記第１記憶手段に記憶されており、前記制御手段及び前記構築手段は、対応するプログラムが前記コンピュータのプログラム実行リソースによって実行されることで実現されることを特徴としている。
【０００８】
請求項３記載の発明は、請求項１記載の発明において、前記モジュール生成手段は、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成する第１のモジュール生成手段と、モジュール生成パラメータが引き渡されると共に生成通知先が指示されて呼び出されると、前記第１のモジュール生成手段を起動し、起動した前記第１のモジュール生成手段にモジュール生成パラメータを引き渡して前記画像処理モジュールを生成させると共に、前記画像処理モジュールが正常に生成された場合に前記指示された生成通知先へ画像処理モジュールの生成を通知し、呼び出し元へ制御を戻す第２のモジュール生成手段と、を含んで構成され、前記構築手段は、前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードした後に、ロードした前記共有ライブラリ内の前記第２モジュール生成手段に対し、前記モジュール生成パラメータを引き渡すと共に前記生成通知先として前記制御手段を指定することで、前記画像処理モジュールの生成及び前記制御手段への前記画像処理モジュールの生成通知を行わせることを特徴としている。
【０００９】
請求項４記載の発明は、請求項１記載の発明において、前記モジュール生成手段は、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成する第１のモジュール生成手段と、呼び出されると、前記第１のモジュール生成手段を起動して呼び出し元へ制御を戻す第２のモジュール生成手段と、から成り、前記構築手段は、前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードした後に、ロードした前記共有ライブラリ内の前記第２のモジュール生成手段を呼び出すことで前記第１のモジュール生成手段を起動させ、起動された前記第１のモジュール生成手段にモジュール生成パラメータを引き渡して前記画像処理モジュールを生成させ、前記画像処理モジュールが正常に生成された場合に前記制御手段へ画像処理モジュールの生成を通知することを特徴としている。
【００１０】
請求項５記載の発明は、請求項３又は請求項４記載の発明において、前記構築手段は、前記第２のモジュール生成手段を呼び出すときに、所定の判別オブジェクトを前記第２のモジュール生成手段に引き渡し、前記第２のモジュール生成手段は、呼び出し元から引き渡された判別オブジェクトを予め保持している情報と比較することで呼び出し元が妥当か否かを判定し、呼び出し元が妥当と判断した場合に処理を継続することを特徴としている。
【００１１】
請求項６記載の発明は、請求項１記載の発明において、前記モジュール生成手段は、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成することを試行し、前記画像処理モジュールを正常に生成できた場合には正常応答を返す一方、前記画像処理プログラムによって実現される画像処理が前記モジュール生成パラメータに適合していなかった場合にはエラー応答を返し、前記構築手段は、モジュール生成手段からエラー応答が返ってきた場合に、前記第２記憶手段に記憶されている別の共有ライブラリの検索を行うことを特徴としている。
【００１２】
請求項７記載の発明に係る画像処理プログラムは、自モジュールの前段から取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する１つ以上の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段から出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段によって読み出させるバッファモジュールが連結され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構築される画像処理部の個々のモジュールのうち、前記バッファモジュールを含む１つ以上のモジュールのプログラムを少なくとも記憶する第１記憶手段、及び、画像処理を行う画像処理プログラムと、引き渡されたモジュール生成パラメータに基づき前記画像処理プログラムを前記画像処理モジュールとして生成するモジュール生成手段のプログラムが登録された共有ライブラリを追加記憶可能な第２記憶手段を備えたコンピュータを、前記画像処理部の構築時に、前記画像処理部を構成する任意のモジュールの生成が通知される毎に、生成が通知されたモジュールの情報を構成情報として保持し、保持している構成情報に基づき、構築された前記画像処理部を構成する個々のモジュールのうちの少なくとも１つのモジュールに処理の実行を指示することで、前記画像処理部で画像処理を行わせる制御手段、及び、前記第１記憶手段に記憶されている前記１つ以上のモジュールのプログラムと予め各々リンク付けされ、構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されているモジュールについては、前記第１記憶手段からプログラムを読み出しコンピュータのメモリにロードして生成すると共に、前記制御手段へモジュールの生成を通知し、前記構築する画像処理部を構成する個々のモジュールのうち前記第１記憶手段にプログラムが記憶されていない画像処理モジュールについては、前記第２記憶手段に記憶されている前記共有ライブラリを検索してコンピュータのメモリ上に動的にロードし、前記モジュール生成手段に前記モジュール生成パラメータを引き渡すことで前記画像処理モジュールの生成を行わせ、かつ前記制御手段への画像処理モジュールの生成を通知するか又は前記制御手段への画像処理モジュールの生成通知を前記モジュール生成手段に行わせることで、前記構築対象の画像処理部を構築する構築手段として機能させる。
【発明の効果】
【００１３】
請求項１及び請求項７記載の発明は、画像処理部を構成する画像処理モジュールとして使用可能な画像処理プログラムの追加を容易に行うことができる、という優れた効果を有する。
【００１４】
請求項２記載の発明は、画像処理部を構成する画像処理モジュールとして使用可能な画像処理プログラムの追加をする際に、実行形式の処理プログラムのコンパイルを再度行う必要がなくなる、という効果を有する。
【００１５】
請求項３記載の発明は、機能別に分離し易い構成となり動作時に必要な機能のみをシステム上に配置することが簡単になり、また構築手段の構成が簡単になる、という効果を有する。
【００１６】
請求項４記載の発明は、モジュール生成パラメータが共通の型を基にした構成である場合にも、生成する処理モジュールの種類及び実際のパラメータの型を意識することなく処理モジュール生成手段にモジュール生成パラメータを渡すことができ、またモジュール生成手段の構成が簡単になる、という効果を有する。
【００１７】
請求項５記載の発明は、共有ライブラリ（に登録されているプログラム）が他のアプリケーション等によって利用されることを制限できる、という効果を有する。
【００１８】
請求項６記載の発明は、第２記憶手段に共有ライブラリが複数記憶されている場合にも、適正な画像処理部を構築することができる、という効果を有する。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図１には、本発明に係る画像処理装置として機能することが可能なコンピュータ１０が示されている。なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００２０】
コンピュータ１０は、請求項２に記載のプログラム実行リソースとしてのＣＰＵ１２、メモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２及び画像出力部２４を備えており、これらはバス２６を介して互いに接続されている。コンピュータ１０が上述したような画像取扱機器に組み込まれている場合、表示部１６や操作部１８としては、画像取扱機器に設けられたＬＣＤ等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ１０が独立したコンピュータである場合、表示部１６や操作部１８としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【００２１】
また、画像データ供給部２２は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）等を適用することができる。また、画像出力部２４は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部２４は画像処理を経た画像データを単に記憶する画像記憶部（メモリ１４又は記憶部２０）であっても構わない。
【００２２】
図１に示すように、記憶部２０には、ＣＰＵ１２によって実行される各種のプログラムとして、メモリ１４等のリソースの管理やＣＰＵ１２によるプログラムの実行の管理、コンピュータ１０と外部との通信等を司るオペレーティングシステム３０のプログラムと、コンピュータ１０を本発明に係る画像処理装置として機能させ、コンピュータ１０に所望の画像処理を行わせるための画像処理アプリケーション３２のプログラムが各々記憶（インストール）されており、更に、後述する画像処理部５０の構築（画像処理モジュール３８の生成）に利用可能なプログラム（処理モジュール生成関数３４Ａのプログラム、処理生成モジュール３４Ｂのプログラム及び画像処理プログラム３４Ｃの各プログラム）が登録された共有ライブラリ３４も記憶されている。このように、記憶部２０は本発明に係る第１記憶手段及び第２記憶手段に対応している。また、画像処理アプリケーション３２のプログラムは本発明に係る画像処理プログラムに対応している。
【００２３】
以下、画像処理アプリケーション３２（のプログラム）について説明する。本実施形態では、画像処理アプリケーション３２を生成するためのライブラリとして、図２に示す画像処理プログラムライブラリ３６が用意されている。画像処理プログラムライブラリ３６に登録されている画像処理プログラム群は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、ＰＣ等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、ＰＣ等の各種機器（プラットフォーム）で共通に使用可能に開発されたプログラムであり、画像処理アプリケーション３２を生成する際に利用される。
【００２４】
画像処理アプリケーション３２によって実現される画像処理装置は、画像処理アプリケーション３２に含まれるアプリケーション本体３２Ａ（図２参照）からの構築指示に従い、アプリケーション本体３２Ａが指示した画像処理を行う画像処理部を構築し、アプリケーション本体３２Ａからの実行指示に従い、前記画像処理部によって画像処理を行うが（詳細は後述）、画像処理プログラムライブラリ３６に登録されている画像処理プログラム群は、所望の画像処理を行う画像処理部（所望の構成の画像処理部）の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション本体３２Ａに対して提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行う画像処理アプリケーション３２の開発に関しては、画像処理プログラム群が提供している上記のインタフェースを利用して、当該機器で必要とされる画像処理を行う画像処理部の構築・画像処理の実行を指示するアプリケーション本体３２Ａを開発するのみで済み、画像処理アプリケーション３２全体を新規に開発する必要が無くなるので、開発負荷を軽減することができる。
【００２５】
図２に示すように、画像処理プログラムライブラリ３６は、画像処理モジュールのプログラムが登録されたモジュールライブラリと、処理構築部４２のプログラムが登録されたライブラリと、処理管理部４６のプログラムが登録されたライブラリに大別される。詳細は後述するが、本実施形態に係る処理構築部４２は、アプリケーション本体３２Ａからの指示により、例として図３に示すように、予め定められた画像処理を行う１つ以上の画像処理モジュール３８と、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成る画像処理部５０を構築する。画像処理部５０を構成する個々の画像処理モジュールの実体はＣＰＵ１２によって実行されＣＰＵ１２で所定の画像処理を行わせるための第１プログラム、又は、ＣＰＵ１２によって実行されＣＰＵ１２により図１に示されていない外部の画像処理装置（例えば専用画像処理ボード等）に対する処理の実行を指示するための第２プログラムであり、上述したモジュールライブラリには、予め定められた互いに異なる画像処理（例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等）を行う複数種の画像処理モジュール３８のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部５０を構成する個々の画像処理モジュールの実体が上記の第１プログラムであるものとして説明する。
【００２６】
個々の画像処理モジュール３８は、例として図４(Ａ)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン３８Ａと、画像処理モジュール３８の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン３８Ａの制御を行う制御部３８Ｂから構成されている。個々の画像処理モジュール３８における単位処理データ量は、画像の１ライン分、画像の複数ライン分、画像の１画素分、画像１面分等を含む任意のバイト数の中から、画像処理エンジン３８Ａが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール３８では単位処理データ量が１画素分とされ、拡大・縮小処理を行う画像処理モジュール３８では単位処理データ量が画像の１ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール３８では単位処理データ量が画像１面分とされ、画像圧縮伸長処理を行う画像処理モジュール３８では単位処理データ量が実行環境に依存するＮバイトとされている。
【００２７】
また、モジュールライブラリには、画像処理エンジン３８Ａが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている（図２では、この種の画像処理モジュールを「モジュール１」「モジュール２」と表記して示している）。例えば拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等の複数の画像処理モジュール３８が各々用意されている。また、例えば色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間をＣＭＹ色空間へ変換する画像処理モジュール３８やその逆へ変換する画像処理モジュール３８、Ｌ*ａ*ｂ*色空間等の他の色空間変換を行う画像処理モジュール３８が各々用意されている。
【００２８】
また、画像処理モジュール３８の制御部３８Ｂは、画像処理エンジン３８Ａが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール（例えばバッファモジュール４０）から画像データを単位読出データ量ずつ取得し、画像処理エンジン３８Ａから出力される画像データを単位書込データずつ後段のモジュール（例えばバッファモジュール４０）へ出力する（画像処理エンジン３８Ａで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量＝単位処理データ量となる）か、画像処理エンジン３８Ａによる画像処理の結果を自モジュールの外部へ出力する（例えば画像処理エンジン３８Ａがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある）処理を行うが、モジュールライブラリには、画像処理エンジン３８Ａが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール３８も登録されている。例えば、画像回転処理を行う画像処理モジュール３８についても、前述のように単位処理データ量が画像１面分の画像処理モジュール３８のプログラム以外に、単位処理データ量が画像の１ライン分や画像の複数ライン分の画像処理モジュール３８のプログラムがモジュールライブラリに登録されていても良い。
【００２９】
また、モジュールライブラリに登録されている個々の画像処理モジュール３８のプログラムは、画像処理エンジン３８Ａに相当するプログラムと制御部３８Ｂに相当するプログラムから構成されているが、制御部３８Ｂに相当するプログラムは部品化されており、個々の画像処理モジュール３８のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール３８は、画像処理エンジン３８Ａで実行される画像処理の種類や内容に拘わらず、制御部３８Ｂに相当するプログラムが共通化されている（制御部３８Ｂに相当するプログラムとして同一のプログラムが用いられている）。これにより、画像処理モジュール３８のプログラムの開発にあたっての開発負荷が軽減される。
【００３０】
なお、画像処理モジュール３８の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール３８については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール３８について、制御部３８Ｂに相当するプログラムを共通化するようにすればよい。
【００３１】
また、画像処理部５０を構成する個々のバッファモジュール４０は、例として図４(Ｂ)にも示すように、コンピュータ１０に設けられたメモリ１４からオペレーティングシステム３０を通じて確保されたメモリ領域で構成されるバッファ４０Ａと、バッファモジュール４０の前段及び後段のモジュールとの画像データの入出力及びバッファ４０Ａの管理を行うバッファ制御部４０Ｂから構成されている。個々のバッファモジュール４０のバッファ制御部４０Ｂもその実体はＣＰＵ１２によって実行されるプログラムであり、モジュールライブラリにはバッファ制御部４０Ｂのプログラムも登録されている（図２ではバッファ制御部４０Ｂのプログラムを「バッファモジュール」と表記して示している）。
【００３２】
また、処理構築部４２のプログラムが登録されたライブラリには、図２に示すように複数種のモジュール生成部４４が各々登録されている。複数種のモジュール生成部４４は互いに異なる画像処理に対応しており、アプリケーション本体３２Ａによって生成されることで、対応する画像処理を実現するための画像処理モジュール３８及びバッファモジュール４０から成るモジュール群を生成する処理を行う。なお、図２ではモジュール生成部４４の一例として、モジュールライブラリに登録されている個々の画像処理モジュール３８が実行する画像処理の種類に対応するモジュール生成部４４を示しているが、個々のモジュール生成部４４に対応する画像処理は、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理）であってもよい。また、処理構築部４２のライブラリには外部モジュール提供部４５のプログラムも登録されている。外部モジュール提供部４５は、共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを利用して画像処理モジュール３８を生成する場合に利用される。なお、外部モジュール提供部４５を含む処理構築部４２は本発明に係る構築手段に対応している。
【００３３】
また図２に示すように、処理管理部４６のプログラムが登録されたライブラリには、処理管理部４６のプログラムとして、画像処理部５０における画像処理の実行を制御するワークフロー管理部４６Ａ、画像処理部５０の各モジュールによるメモリ１４や各種のファイル等のコンピュータ１０のリソースの使用を管理するリソース管理部４６Ｂ、及び、画像処理部５０で発生したエラーを管理するエラー管理部４６Ｃのプログラムが各々登録されている。なお、処理管理部４６は本発明に係る制御手段に対応している。
【００３４】
画像処理プログラムライブラリ３６が静的ライブラリとして提供される場合、画像処理アプリケーション３２のプログラムは、画像処理プログラムライブラリ３６に登録されている画像処理プログラム群が提供しているインタフェースを利用して、必要な画像処理を行う画像処理部の構築・画像処理の実行を指示するアプリケーション本体３２Ａのプログラムが開発された後に、図２に示すように、画像処理プログラムライブラリ３６に登録されている画像処理プログラム群の中から、画像処理部５０の構築時や画像処理部５０による画像処理の実行時に必要となるプログラムが選択され、選択されたプログラム及びアプリケーション本体３２Ａのプログラム（図２に示すコンパイル対象プログラム群）が実行形式の単一のプログラムとしてコンパイルされることによって生成される。なお、画像処理アプリケーション３２のプログラムは、請求項２に記載の「実行形式の単一の処理プログラム」に対応している。
【００３５】
なお、画像処理部５０の構築時や画像処理部５０による画像処理の実行時に必要となるプログラム（コンパイル対象プログラム群）は、アプリケーション本体３２Ａのプログラムによって実現される処理の内容によって大きく相違する。
【００３６】
すなわち、アプリケーション本体３２Ａが、常に一定構成の画像処理部５０を構築させて一定の処理内容の画像処理を行わせる構成である場合には、コンパイル対象プログラム群として、上記一定構成の画像処理部５０を構成する画像処理モジュール３８及びバッファモジュールのプログラムのみがモジュールライブラリから選択されると共に、対応するモジュール生成部４４のプログラムのみが処理構築部４２のライブラリから選択される。また、アプリケーション本体３２Ａが構築させる画像処理部５０の構成や、アプリケーション本体３２Ａが行わせる画像処理の内容が不定である場合（例えば処理対象の画像データのフォーマットが不定であり、アプリケーション本体３２Ａが、処理対象の画像データのフォーマットに応じた画像処理部５０を構築させる構成である場合や、アプリケーション本体３２Ａが、操作部１８を介してユーザから入力された指示に応じて、異なる構成の画像処理部５０を構築させる構成である等の場合）には、コンパイル対象プログラム群として、使用される可能性のある全ての画像処理モジュール３８のプログラム及びバッファモジュールのプログラムがモジュールライブラリから選択されると共に、対応する全てのモジュール生成部４４のプログラムが処理構築部４２のライブラリから選択される。
【００３７】
なお、処理管理部４６のプログラム（ワークフロー管理部４６Ａ、リソース管理部４６Ｂ及びエラー管理部４６Ｃのプログラム）はコンパイル対象プログラム群の１つとして毎回選択されるが、処理管理部４６のプログラムが登録されるライブラリには、複数種の処理管理部４６（例えば画像処理部５０をシングルスレッドとして動作させるための処理管理部４６や画像処理部５０をマルチスレッドとして動作させるための処理管理部４６等）のプログラムが各々登録されることがあり、この場合、複数種の処理管理部４６のうち、構築する画像処理部５０の構成や動作形態に合致する処理管理部４６のプログラムがコンパイル対象プログラム群の１つとして選択される。
【００３８】
また、画像処理部５０で実行させる画像処理の内容等によっては、画像処理アプリケーション３２のプログラムの生成時（コンパイル時）に、モジュールライブラリに対応するプログラムが登録されていない画像処理を行う画像処理モジュール３８を含む画像処理部５０を構築する必要が生ずることがある。具体的には、例えば処理対象の画像データのフォーマットが不定で、かつ処理対象の画像データのフォーマットに応じた処理内容の画像処理部５０を構築させる場合に、画像処理アプリケーション３２のプログラムを生成した後に、画像データのフォーマットとして新たなフォーマットが出現し、出現した新たなフォーマットの画像データを取扱可能な新たな画像処理プログラムが開発された等の状況が挙げられる。
【００３９】
上記のように、画像処理アプリケーション３２のプログラムの生成時に存在していない新たな画像処理プログラムを用いて画像処理部５０を構築する可能性がある場合、本実施形態では、コンパイル対象プログラム群として処理構築部４２のライブラリから外部モジュール提供部４５のプログラムも選択され、画像処理アプリケーション３２のプログラムの生成（コンパイル）が行われる。そして、外部モジュール提供部４５を組み込んだ画像処理アプリケーション３２を記憶部２０にインストールしたコンピュータ１０において、新たな画像処理プログラムが存在しており、当該新たな画像処理プログラムを用いて画像処理部５０を構築する可能性がある場合には、図１にも示すように、使用する可能性のある新たな画像処理プログラム３４Ｃと、処理モジュール生成関数３４Ａのプログラム及び処理生成モジュール３４Ｂのプログラムを登録した共有ライブラリ３４を上記コンピュータ１０の記憶部２０に記憶させる。
【００４０】
なお、コンピュータ１０の記憶部２０には、互いに異なる画像処理プログラム３４Ｃが登録された複数の共有ライブラリ３４が記憶される場合があるが（図１には複数の共有ライブラリ３４が記憶されている状態を示している）、処理モジュール生成関数３４Ａのプログラム及び処理生成モジュール３４Ｂのプログラムは部品化されており、個々の共有ライブラリ３４には、処理モジュール生成関数３４Ａのプログラム及び処理生成モジュール３４Ｂのプログラムとして同一のプログラムが各々登録される。これにより、新たな画像処理プログラム３４Ｃが開発された場合に、この画像処理プログラム３４Ｃを登録した共有ライブラリ３４を記憶部２０に記憶させる際の作業負荷が軽減される。また、処理モジュール生成関数３４Ａ及び処理生成モジュール３４Ｂは本発明に係るモジュール生成手段に対応しており、より詳しくは、図７に示す画像処理モジュール生成処理（詳細は後述）を行う処理モジュール生成関数３４Ａは請求項３に記載の第２のモジュール生成手段に、処理生成モジュール３４Ｂは請求項３に記載の第１のモジュール生成手段に、外部モジュール提供部４５は請求項３に記載の構築手段に各々対応している。
【００４１】
次に本実施形態の作用を説明する。なお、以下では外部モジュール提供部４５のプログラムも組み込まれた画像処理アプリケーション３２のプログラムがコンピュータ１０の記憶部２０にインストールされており、当該コンピュータ１０の記憶部２０には共有ライブラリ３４も記憶されているものとして説明する。
【００４２】
画像処理アプリケーション３２のプログラムがインストールされているコンピュータ１０において、何らかの画像処理を行う必要のある状況になると、この状況が画像処理アプリケーション３２（に組み込まれているアプリケーション本体３２Ａ）によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像処理アプリケーション３２が既に起動されている状態で、画像データ供給部２２としての画像読取部によって画像を読み取り、画像出力部２４としての画像記録部により記録材料に画像として記録するか、画像出力部２４としての表示部に画像として表示させるか、画像出力部２４としての書込装置により画像データを記録メディアに書き込むか、画像出力部２４としての送信部により画像データを送信するか、画像出力部２４としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部２２としての受信部によって受信されるか、画像データ供給部２２としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じて画像処理アプリケーション３２が実行可能な処理の名称等を表示部１６に一覧表示している状態で、実行対象の処理がユーザによって選択された場合や、単に画像処理アプリケーション３２が起動された等の場合であってもよい。
【００４３】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、画像処理アプリケーション３２のアプリケーション本体３２Ａは、画像処理対象の画像データを供給する画像データ供給部２２の種別を認識する（図５のステップ１５０も参照）。また、認識した種別がバッファ領域（メモリ１４の一部領域）であった場合（図５のステップ１５２の判定が肯定の場合）、アプリケーション本体３２Ａは、画像処理アプリケーション３２に組み込まれている処理構築部４２を起動し、画像データ供給部２２として指定されたバッファ領域を含むバッファモジュール４０を処理構築部４２によって生成させる（図２のステップ１５４も参照）。処理構築部４２によるバッファモジュール４０の生成は、バッファモジュール４０（のバッファ制御部４０Ｂ）のプログラムをＣＰＵ１２が実行可能なようにメモリ１４にロードすると共に、指定されたバッファ領域をバッファ４０Ａとして（バッファ制御部４０Ｂに）認識させるパラメータを設定することによって成される。ここで生成されたバッファモジュール４０は画像データ供給部２２として機能する。
【００４４】
続いてアプリケーション本体３２Ａは、画像処理を行った画像データの出力先としての画像出力部２４の種別を認識する（図５のステップ１５６も参照）。また、認識した種別がバッファ領域（メモリ１４の一部領域）であった場合（図５のステップ１５８の判定が肯定の場合）、アプリケーション本体３２Ａは、処理構築部４２を未稼働であれば処理構築部４２を起動した後に、画像出力部２４として指定されたバッファ領域を含むバッファモジュール４０を処理構築部４２によって生成させる（図２のステップ１６０も参照）。ここで生成されたバッファモジュール４０は画像出力部２４として機能する。
【００４５】
次にアプリケーション本体３２Ａは、実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部４４に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する（図５のステップ１６２も参照）。なお、アプリケーション本体３２Ａが、ユーザによって実行が指示されたジョブに対応する構成の画像処理部５０を構築させて画像処理を行わせる構成である場合、上記判定は、例えば画像処理アプリケーション３２に組み込まれたテーブル等に、上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め登録しておき、アプリケーション本体３２Ａは、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。また、アプリケーション本体３２Ａが、常に一定構成の画像処理部５０を構築させて一定の処理内容の画像処理を行わせる構成である場合、上記判定は、例えば画像処理アプリケーション３２に組み込まれたテーブル等に予め登録された情報（上記の画像処理の種類及び個々の画像処理の実行順序）を単に参照することによって成される。
【００４６】
続いてアプリケーション本体３２Ａは、上記で判定した画像処理の種類及び実行順序に基づき、実行順序がｎ番目（ｎの初期値は１）の特定画像処理を行う画像処理モジュール３８のプログラムが画像処理アプリケーション３２に組み込まれているか否か判定し、特定画像処理を行う画像処理モジュール３８のプログラムが画像処理アプリケーション３２に組み込まれている場合は、画像処理アプリケーション３２にプログラムが組み込まれている処理構築部４２の各モジュール生成部４４のうち特定画像処理に対応するモジュール生成部４４を起動し、特定画像処理を行う画像処理モジュール３８のプログラムが画像処理アプリケーション３２に組み込まれていない場合は、画像処理アプリケーション３２にプログラムが組み込まれている処理構築部４２の外部モジュール提供部４５を起動する（図５のステップ１６４も参照）。
【００４７】
なお、モジュール生成部４４を起動するか外部モジュール提供部４５を起動するかの判断はアプリケーション本体３２Ａによって行われるが、モジュール生成部４４を起動し、起動したモジュール生成部４４によってモジュール生成処理（後述）が行われた結果、特定画像処理を行う画像処理モジュール３８のプログラムが画像処理アプリケーション３２に組み込まれていないことがモジュール生成部４４から通知された場合に、外部モジュール提供部４５を起動するようにアプリケーション本体３２Ａを構成してもよい。
【００４８】
次にアプリケーション本体３２Ａは、起動したモジュール生成部４４又は外部モジュール提供部４５に対し、特定画像処理を行うモジュール（群）の生成に必要なパラメータ（モジュール生成処理パラメータ）を通知し、特定画像処理を行うモジュール（群）の生成を指示する（図５のステップ１６６も参照）。なお、モジュール生成処理パラメータとしては、生成対象のモジュール（群）に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、生成対象のモジュール（群）が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、生成対象のモジュール（群）に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータ等が挙げられる。また、特定画像処理が、プログラムが画像処理アプリケーション３２に組み込まれている複数種の画像処理モジュール３８を組み合わせることで実現される処理である場合、アプリケーション本体３２Ａは、指示したモジュール生成部４４からモジュール群の生成完了が通知されると、単一の画像処理に対応するモジュール生成部４４を起動してモジュール（群）の生成に必要な情報を通知する処理を、特定画像処理を実現する複数種の画像処理の実行順序の昇順に繰り返す。
【００４９】
なお、上記の入力モジュールは、実行順序が１番目のモジュール群については画像データ供給部２２が入力モジュールとなり、実行順序が２番目以降のモジュール群については前段のモジュール群の最終モジュール（通常はバッファモジュール４０）が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部２４が出力モジュールとなるので、画像出力部２４が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション本体３２Ａによる指定は行われず、必要な場合はモジュール生成部４４によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション本体３２Ａが認識するようにしてもよいし、ユーザに指定させるようにしてもよい。また、入力画像属性の取得は、例えば生成対象のモジュール（群）の前段にバッファモジュール４０が存在している場合、当該バッファモジュール４０に画像データの書き込みを行う更に前段の画像処理モジュール３８から出力画像データの属性を取得する等によっても実現できる。
【００５０】
特定のモジュール生成部４４が起動されて特定画像処理を行うモジュール（群）の生成が指示された場合、指示されたモジュール生成部４４はモジュール生成処理（図５のステップ１６８も参照）を行う。モジュール生成処理では、まずアプリケーション本体３２Ａから通知されたモジュール生成処理パラメータに含まれる入力画像属性情報に基づいて、生成対象の画像処理モジュール３８の生成が必要か否か判定する。例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてＣＭＹ色空間がアプリケーション本体３２Ａから指定された場合、取得した入力画像属性情報に基づいて入力画像データがＲＧＢ色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール３８としてＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８を生成する必要があるが、入力画像データがＣＭＹ色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール３８は生成不要と判断する。
【００５１】
生成対象の画像処理モジュール３８の生成が必要と判断した場合には、生成対象の画像処理モジュール３８の後段にバッファモジュール４０が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール（画像出力部２４）である場合（例えば図３(Ａ)〜(Ｃ)に示す画像処理部５０における最後段の画像処理モジュール３８を参照）や、例として図３(Ｂ)に示す画像処理部５０においてスキュー角検知処理を行う画像処理モジュール３８のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール３８へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定され、画像処理モジュール３８の後段に連結するバッファモジュール４０を生成する。
【００５２】
続いてモジュール生成部４４は、前段のモジュール（例えばバッファモジュール４０）の情報、後段のバッファモジュール４０の情報（後段にバッファモジュール４０を生成した画像処理モジュール３８のみ）、画像処理モジュール３８に入力される入力画像データの属性、処理パラメータを与えて、画像処理アプリケーション３２にプログラムが組み込まれ、画像処理モジュール３８として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール３８で実行すべき処理パラメータに合致する画像処理モジュール３８を選択し、選択した画像処理モジュール３８のプログラムをＣＰＵ１２が実行可能なようにメモリ１４にロードすると共に、当該画像処理モジュール３８の前段及び後段のモジュールを当該画像処理モジュール３８の制御部３８Ｂに認識させるパラメータを設定することで、画像処理モジュール３８を生成する。
【００５３】
例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてＣＭＹ色空間が指定され、更に入力画像データがＲＧＢ色空間のデータであった場合には、画像処理アプリケーション３２にプログラムが組み込まれている複数種の画像処理モジュール３８の中から、ＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール３８であり、指定された拡大縮小率が50％以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８が選択・生成され、指定された拡大縮小率が50％であれば、拡大縮小率50％に特化した拡大縮小処理、すなわち入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８が選択・生成される。
【００５４】
なお、画像処理モジュール３８の選択は上記に限られるものではなく、例えば画像処理エンジン３８Ａによる画像処理における単位処理データ量が異なる画像処理モジュール３８のプログラムを画像処理アプリケーション３２に各々組み込んでおき、画像処理部５０へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール３８を選択する（例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール３８を選択する等）ようにしてもよいし、アプリケーション本体３２Ａ或いはユーザに選択させるようにしてもよい。
【００５５】
画像処理モジュール３８の生成が完了すると、後段のバッファモジュール４０のＩＤと生成した画像処理モジュール３８のＩＤの組を処理管理部４６に通知する。このＩＤは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール４０や画像処理モジュール３８のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部４４が、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理を行う画像処理モジュール３８と画像回転処理を行う画像処理モジュール３８によって実現されるスキュー補正処理）を行うモジュール群を生成する場合には、上記処理が繰り返されて２個以上の画像処理モジュール３８を含むモジュール群が生成される。
【００５６】
一方、外部モジュール提供部４５が起動されて特定画像処理を行うモジュールの生成が指示された場合、外部モジュール提供部４５は外部モジュール提供処理（図５のステップ１７０も参照）を行う。以下、この外部モジュール提供処理について、図６を参照して説明する。
【００５７】
外部モジュール提供処理では、まずステップ２００において、記憶部２０に記憶されている共有ライブラリを検索する。なお、ステップ２００における検索は、記憶部２０に記憶されている全ての共有ライブラリを検索対象とすることに限られるものではなく、画像処理モジュール３８の生成に利用可能なプログラムを登録する共有ライブラリ３４について名称の付与規則を予め定めておき、付与規則に合致する名称が付与された共有ライブラリのみを検索対象としてもよい。次のステップ２０２では、ステップ２００の検索で共有ライブラリを発見したか否か判定する。判定が否定された場合はステップ２１８へ移行し、特定画像処理を行うモジュールの生成失敗をアプリケーション本体３２Ａへ通知し、外部モジュール提供処理を終了する。また、ステップ２００の検索で共有ライブラリを発見した場合はステップ２０２の判定が肯定されてステップ２０４へ移行し、発見した共有ライブラリをメモリ１４上に動的にロードする。
【００５８】
ステップ２０６では、メモリ１４上に動的にロードした共有ライブラリに登録されている処理モジュール生成関数３４Ａを探索し、次のステップ２０８では、ステップ２０６の探索で処理モジュール生成関数３４Ａを発見したか否か判定する。コンピュータ１０の記憶部２０には、画像処理モジュール３８の生成に利用可能なプログラムが登録された共有ライブラリ３４以外の他の共有ライブラリ（例えば各種のＤＬＬ(Dynamic Link Library)等が登録された共有ライブラリ）が記憶されている可能性があり、ステップ２０８の判定が否定された場合、発見された共有ライブラリは画像処理モジュール３８の生成に利用できない他の共有ライブラリであると判断できるので、ステップ２１０へ移行し、メモリ１４上に動的にロードした共有ライブラリ３４をメモリ１４から消去してステップ２００に戻る。これにより、画像処理モジュール３８の生成に利用可能なプログラムが登録された共有ライブラリ３４が発見される迄ステップ２００〜ステップ２１０が繰り返される。
【００５９】
また、ステップ２０６の探索で処理モジュール生成関数３４Ａを発見した場合、メモリ１４上に動的にロードした共有ライブラリは画像処理モジュール３８の生成に利用可能なプログラムが登録された共有ライブラリ３４であると判断できるので、ステップ２０８の判定が肯定されてステップ２１２へ移行し、発見した処理モジュール生成関数３４Ａを呼び出すと共に、引数として、アプリケーション本体３２Ａから通知されたモジュール生成処理パラメータ、予め定められた判別オブジェクト、及び、処理管理部４６を呼び出すためのパラメータを処理モジュール生成関数３４Ａへ引き渡す。これにより、処理モジュール生成関数３４Ａでは、処理生成モジュール３４Ｂを起動（又は生成又は構築）して画像処理モジュール３８を生成させる画像処理モジュール生成処理（図７）が行われるが、当該処理については後述する。
【００６０】
なお、上記の判別オブジェクトは、呼び出し元が外部モジュール提供部４５であることを処理モジュール生成関数３４Ａが判別可能でかつ秘匿性の高い情報であれば任意の情報を適用可能であり、例えば外部モジュール提供部４５のファイル名に外部モジュール提供部４５のプログラムの実行コードを付加した情報であってもよいし、外部モジュール提供部４５のプログラムの実行コードをハッシュ関数に入力することで得られるハッシュ値であってもよい。
【００６１】
処理モジュール生成関数３４Ａによる画像処理モジュール生成処理が終了し、処理モジュール生成関数３４Ａから応答が返ってくると、次のステップ２１４において、処理モジュール生成関数３４Ａからの応答に基づき、処理モジュール生成関数３４Ａによる画像処理モジュール生成処理で画像処理モジュール３８の生成に成功したか否か判定する。処理モジュール生成関数３４Ａから応答が、画像処理モジュール３８の生成失敗を意味する空情報であった場合には、上記判定が否定されてステップ２００に戻り、ステップ２００以降の処理を再度行う。また、処理モジュール生成関数３４Ａから応答が画像処理モジュール３８の生成成功を意味する情報であった場合には、ステップ２１４の判定が肯定されてステップ２１６へ移行し、アプリケーション本体３２Ａへ画像処理モジュール３８の生成成功を通知して外部モジュール提供処理を終了する。
【００６２】
また、上述した外部モジュール提供処理（図６）のステップ２１２において、外部モジュール提供部４５から呼び出されると共に引数として各種情報が引き渡された処理モジュール生成関数３４Ａ（及び処理生成モジュール３４Ｂ）は、図７に示す画像処理モジュール生成処理（図５のステップ１７２も参照）を行う。
【００６３】
画像処理モジュール生成処理では、まずステップ２４０において、外部モジュール提供部４５から引数として引き渡された判別オブジェクトを所定の情報と比較することで、引き渡された判別オブジェクトの検証を行い、次のステップ２４２では、判別オブジェクトの検証結果に基づいて、処理モジュール生成関数３４Ａの呼び出し元が正規の呼び出し元（すなわち外部モジュール提供部４５）か否か判定する。判定が否定された場合はステップ２５４へ移行し、画像処理モジュール３８の生成に失敗したことを意味する空情報を呼び出し元へ引き渡し、画像処理モジュール生成処理を終了する。これにより、共有ライブラリ３４（に登録されている画像処理プログラム３４Ｃ）が、画像処理アプリケーション３２以外のアプリケーションによって、画像処理部５０の構築及び画像処理部５０による画像処理以外の用途に利用されることを制限できる。なお、判別オブジェクトの検証を省略し、共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを任意のアプリケーションが利用可能に構成してもよい。
【００６４】
また、判別オブジェクトの検証を行った結果、処理モジュール生成関数３４Ａの呼び出し元が外部モジュール提供部４５であると判定された場合は、ステップ２４２の判定が肯定されてステップ２４４へ移行し、同一の共有ライブラリ３４に登録されている処理生成モジュール３４Ｂのプログラムを、オペレーティングシステム３０を通じてスレッドとしてＣＰＵ１２に実行させることで処理生成モジュール３４Ｂを起動（又は生成又は構築）すると共に、外部モジュール提供部４５から引き渡されたモジュール生成処理パラメータを、引数として処理生成モジュール３４Ｂへ引き渡す。
【００６５】
これにより、次のステップ２４６において、起動（又は生成又は構築）された処理生成モジュール３４Ｂにより、同一の共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを画像処理モジュール３８として生成する処理が行われる。すなわち、共有ライブラリ３４には、図示は省略するが画像処理プログラム３４Ｃ以外に、画像処理モジュール３８の制御部３８Ｂ（図４(Ａ)参照）に相当するプログラムも登録されており、当該プログラムを起動することで制御部３８Ｂを生成し、同一の共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを同一の画像処理モジュール３８の画像処理エンジン３８Ａとして認識させる情報を、処理モジュール生成関数３４Ａから引き渡されたモジュール生成処理パラメータと共に制御部３８Ｂに設定することで、画像処理エンジン３８Ａ及び制御部３８Ｂから成る画像処理モジュール３８を生成する。
【００６６】
生成された画像処理モジュール３８の制御部３８Ｂは、モジュール生成処理パラメータが設定されると、自モジュールの画像処理エンジン３８Ａ（すなわち画像処理プログラム３４Ｃ）による画像処理の内容が、引き渡されたモジュール生成処理パラメータに適合しているか否か判定する。この判定は、例えば設定されたモジュール生成処理パラメータの一部である入力画像属性情報や処理パラメータ等を画像処理エンジン３８Ａに与え、入力画像属性情報が表す属性の画像データを処理可能か否かや、画像処理エンジン３８Ａが行う画像処理の内容が処理パラメータが規定する画像処理の内容に合致しているか否か等を画像処理エンジン３８Ａに判断させ、判断結果を画像処理エンジン３８Ａから取得することで実現できる。
【００６７】
制御部３８Ｂによる上記判定の結果は処理生成モジュール３４Ｂに通知される。処理生成モジュール３４Ｂは、生成した画像処理モジュール３８の画像処理エンジン３８Ａによる画像処理の内容がモジュール生成処理パラメータに適合しているとの判定結果が通知された場合には、画像処理モジュール３８の生成成功を処理モジュール生成関数３４Ａへ通知し、生成した画像処理モジュール３８の画像処理エンジン３８Ａによる画像処理の内容がモジュール生成処理パラメータに適合していないとの判定結果が通知された場合には、ＣＰＵ１２による画像処理モジュール３８の制御部３８Ｂのプログラム及び画像処理エンジン３８Ａのプログラム（すなわち同一の共有ライブラリ３４に登録されている画像処理プログラム３４Ｃ）の実行を停止させ、画像処理モジュール３８の生成失敗を処理モジュール生成関数３４Ａへ通知する。
【００６８】
処理生成モジュール３４Ｂから何らかの通知を受信すると、処理モジュール生成関数３４Ａは、次のステップ２４８において、処理生成モジュール３４Ｂから画像処理モジュール３８の生成成功が通知されたか否か判定する。判定が否定された場合はステップ２５４へ移行し、画像処理モジュール３８の生成に失敗したことを意味する空情報を呼び出し元へ引き渡し（請求項６に記載のエラー応答に相当）、画像処理モジュール生成処理を終了する。この場合、処理モジュール生成関数３４Ａの呼び出し元である外部モジュール提供部４５では、外部モジュール提供処理（図６）のステップ２１４の判定が否定されることで、他の共有ライブラリの検索が再開される。
【００６９】
一方、処理生成モジュール３４Ｂから画像処理モジュール３８の生成成功が通知された場合は、ステップ２４８の判定が肯定されてステップ２５０へ移行し、外部モジュール提供部４５から引数として引き渡された、処理管理部４６を呼び出すためのパラメータに基づいて、生成した画像処理モジュール３８のＩＤを処理管理部４６に通知する。これにより、生成した画像処理モジュール３８が、画像処理部５０の一部（画像処理部５０を構成する画像処理モジュール３８の１つ）として処理管理部４６に認識され、画像処理部５０に組み込まれることになる。
【００７０】
そしてステップ２５２では、生成した画像処理モジュール３８の情報を呼び出し元へ引き渡し（請求項６に記載の正常応答に相当）、画像処理モジュール生成処理を終了する。これにより、画像処理アプリケーション３２に組み込まれていない外部のプログラム、すなわち記憶部２０に記憶された共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを用いて画像処理モジュール３８が生成されることになる。従って、画像処理アプリケーション３２の生成（コンパイル）やインストールを完了した後のタイミングであっても、画像処理部５０を構成する画像処理モジュール３８として使用可能な画像処理プログラム３４Ｃの追加を容易に行うことができ、画像処理アプリケーション３２の再生成（再コンパイル）や再インストール等の煩雑な作業を省略することができる。
【００７１】
なお、処理モジュール生成関数３４Ａ及び処理生成モジュール３４Ｂは、上記のように画像処理モジュール３８のみを生成する構成に限られるものではなく、画像処理モジュール３８の生成に成功した場合に、引き続き生成した画像処理モジュール３８の後段のバッファモジュール４０を生成するようにしてもよい。
【００７２】
アプリケーション本体３２Ａによって順次起動されたモジュール生成部４４又は外部モジュール提供部４５により、前述したモジュール生成処理又は外部モジュール提供処理（図６）が順次行われることで、例として図３(Ａ)〜(Ｃ)に示すように、必要とされる画像処理を行う画像処理部５０が構築される。以下、構築された画像処理部５０の動作を説明する。
【００７３】
アプリケーション本体３２Ａは、画像処理部５０の構築が完了すると処理管理部４６に対して画像処理部５０による画像処理の実行を指示する（図５のステップ１７４も参照）。処理管理部４６は、アプリケーション本体３２Ａから画像処理の実行が指示されると、メモリ１４にロードした画像処理部５０の各モジュールのプログラムを、オペレーティングシステム３０を通じてスレッドとしてＣＰＵ１２に実行させる。
【００７４】
ここで、画像処理部５０の個々の画像処理モジュール３８で互いに並列に画像処理を行わせる並列処理方式で画像処理部５０を動作させる場合、処理管理部４６は、画像処理部５０を構成する個々のモジュールのプログラムを互いに独立したスレッドとしてＣＰＵ１２に実行させる。なお、バッファモジュール４０のバッファ制御部４０Ｂのプログラムは、バッファ４０Ａへの画像データの書き込みを制御する書込制御部４０Ｃ（図４(Ｂ)参照）のプログラムと、バッファ４０Ａからの画像データの読み出しを制御する読出制御部４０Ｄ（図４(Ｂ)参照）のプログラムに分離されており、書込制御部４０Ｃのプログラムは自モジュール（バッファモジュール４０）の前段に連結された画像処理モジュール３８のプログラムと同一のスレッドとして実行され、読出制御部４０Ｄのプログラムは自モジュールの後段に連結された画像処理モジュール３８のプログラムと同一のスレッドとして実行される。
【００７５】
また、画像処理部５０の画像処理モジュール３８のうちの常に単一の画像処理モジュール３８で画像処理を行わせると共に、画像処理を行わせる画像処理モジュール３８を逐次切り替える逐次処理方式で画像処理部５０を動作させる場合、処理管理部４６は、画像処理部５０を構成する個々のモジュールのプログラムを単一のスレッドとしてＣＰＵ１２に実行させる。なお、スレッドに代えて、プロセス又はオブジェクトとしてＣＰＵ１２に実行させるようにしてもよい。
【００７６】
画像処理モジュール３８のプログラムがスレッドとして実行されると、個々の画像処理モジュール３８の制御部３８Ｂは自モジュールの初期化を行う。画像処理モジュール３８の初期化では、まずモジュール生成部４４によって設定されたパラメータに基づいて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール４０以外、例えば画像データ供給部２２や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール４０が存在している場合には、前段のバッファモジュール４０からの１回の画像データの読み出しによって取得する画像データのデータ量（単位読出データ量）を認識する。
【００７７】
この単位読出データ量は、自モジュールの前段のバッファモジュール４０の数が１個であれば１個だけであるが、例えば図３(Ｃ)に示す画像処理部５０において画像合成処理を行う画像処理モジュール３８のように、前段のバッファモジュール４０の数が複数で、複数のバッファモジュール４０から各々取得した画像データを用いて画像処理エンジン３８Ａが画像処理を行う等の場合、前段の個々のバッファモジュール４０に対応する単位読出データ量は、自モジュールの画像処理エンジン３８Ａが行う画像処理の種類や内容、前段のバッファモジュール４０の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール４０へ通知することで、前段に存在している全てのバッファモジュール４０に単位読出データ量を設定する（図４(Ａ)の(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)参照）。
【０１１６】
また、個々の画像処理モジュール３８の制御部３８Ｂは、後段のバッファモジュール４０のバッファ４０Ａへの画像データの書き込みを完了すると、ワークフロー管理部４６Ａへ処理完了通知を入力する。ワークフロー管理部４６Ａは、画像処理モジュール３８から処理完了通知が入力される毎に、処理完了通知元の画像処理モジュール３８に処理要求を再度入力する。
【０１１７】
このように、画像処理部５０を並列処理方式で動作させる場合、ワークフロー管理部４６Ａは、任意の画像処理モジュール３８から処理完了が通知される毎に、処理完了通知元の画像処理モジュール３８へ処理要求を再度入力するので、処理対象の画像データが前段側のモジュールから後段側のモジュールへ画像１面分よりも小さいサイズ（ブロック）を単位として順に引き渡されると共に、個々の画像処理モジュール３８が互いに並列に画像処理を行う並列処理方式によって処理対象の画像データに対する画像処理が行われることになる。また、画像データ供給部２２から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール３８からワークフロー管理部４６Ａへの全体処理終了通知の入力が、前段側の画像処理モジュール３８から順次行われる。
【０１１８】
ワークフロー管理部４６Ａは、画像処理モジュール３８から全体処理終了通知が入力される毎に、全体処理終了通知入力元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定し、判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部２４へ全て出力されることで、最後段の画像処理モジュール３８から全体処理終了通知が入力された場合には、アプリケーション本体３２Ａに対して画像処理の完了を通知し（図５のステップ１７８も参照）、処理を終了する。そして、画像処理の完了が通知されたアプリケーション本体３２Ａは、ユーザに対して画像処理の完了を通知する（図５のステップ１８０も参照）。
【０１１９】
また、画像処理部５０を逐次処理方式で動作させる場合、ワークフロー管理部４６Ａは、画像処理の実行が指示されたとき、バッファモジュール４０からデータ要求が入力されたとき、及び、画像処理モジュール３８から全体処理終了通知が入力されたときには、画像処理部５０を並列処理方式で動作させる場合と同一の処理を行う。また、ワークフロー管理部４６Ａは、画像処理モジュール３８から処理完了通知が入力されたときには、まず処理完了通知元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定し、判定が否定された場合は何ら処理を行うことなく処理を終了するが、判定が肯定された場合は処理完了通知元の画像処理モジュール３８に処理要求を再度入力して処理を終了する。
【０１２０】
従って、この場合、画像処理部５０の最後段の画像処理モジュール３８に入力された処理要求がより前段の画像処理モジュール３８へ遡り、最前段の画像処理モジュール３８に到達すると、画像１面分よりも小さいサイズ（ブロック）のデータに対する画像処理が最前段の画像処理モジュール３８から逐次行われ（常に何れか１つの画像処理モジュール３８でのみ画像処理が行われると共に、画像処理を行っている画像処理モジュール３８が逐次切り替わり）、上記データに対する最後段の画像処理モジュール３８による画像処理が終了すると、最後段の画像処理モジュール３８に処理要求が再度入力されることが繰り返される逐次処理方式によって、処理対象の画像データに対する画像処理が行われることになる。
【０１２１】
なお、先に説明した外部モジュール提供処理（図６）及び画像処理モジュール生成処理（図７）では、処理生成モジュール３４Ｂによって画像処理モジュール３８を生成させる処理、及び、生成した画像処理モジュール３８のＩＤを処理管理部４６に通知する処理を処理モジュール生成関数３４Ａが行っていたが、これに限定されるものではなく、外部モジュール提供部４５が図１２に示す外部モジュール提供処理を行い、処理モジュール生成関数３４Ａが図１３に示す画像処理モジュール生成処理を行うようにしてもよい。
【０１２２】
図１２に示す外部モジュール提供処理では、共有ライブラリの検索（ステップ２００）で共有ライブラリを発見し（ステップ２０２の判定が肯定）、発見した共有ライブラリをメモリ１４上に動的にロード（ステップ２０４）した後、動的にロードした共有ライブラリに登録されている処理モジュール生成関数３４Ａを探索（ステップ２０６）した結果、処理モジュール生成関数３４Ａを発見した場合（ステップ２０８の判定が肯定）に、ステップ２２０において、発見した処理モジュール生成関数３４Ａを呼び出すと共に、引数として、予め定められた判別オブジェクトのみを処理モジュール生成関数３４Ａへ引き渡す。
【０１２３】
これにより、処理モジュール生成関数３４Ａでは図１３に示す画像処理モジュール生成処理が行われる。この画像処理モジュール生成処理では、外部モジュール提供部４５から引数として引き渡された判別オブジェクトの検証を行い（ステップ２４０）、判別オブジェクトの検証結果に基づき、処理モジュール生成関数３４Ａの呼び出し元が外部モジュール提供部４５であると判定した場合（ステップ２４２の判定が肯定）に、ステップ２４４において、同一の共有ライブラリ３４に登録されている処理生成モジュール３４Ｂのプログラムをスレッドとして生成することで処理生成モジュール３４Ｂを起動（又は生成又は構築）し（引数としてのモジュール生成処理パラメータの引き渡しは行わない）、スレッドとして生成した処理生成モジュール３４Ｂを識別する情報を呼び出し元（すなわち外部モジュール提供部４５）へ通知して処理を終了する。
【０１２４】
図１２に示す外部モジュール提供処理では、処理モジュール生成関数３４Ａによる画像処理モジュール生成処理が終了して応答が返ってくると、次のステップ２２２において、処理モジュール生成関数３４Ａからの応答に基づき、処理生成モジュール３４Ｂの生成に成功したか否か判定する。判定が否定された場合はステップ２１０へ移行し、メモリ１４上に動的にロードした共有ライブラリ３４をメモリ１４から消去してステップ２００に戻るが、判定が肯定された場合はステップ２２４へ移行し、処理モジュール生成関数３４Ａから通知された情報に基づいて生成された処理生成モジュール３４Ｂを認識し、認識した処理生成モジュール３４Ｂにモジュール生成処理パラメータを引き渡して画像処理モジュール３８の生成を指示する。
【０１２５】
これにより、次のステップ２２４において、処理生成モジュール３４Ｂにより、同一の共有ライブラリ３４に登録されている画像処理プログラム３４Ｃを画像処理モジュール３８として生成する処理が行われる。また、この態様では、生成された画像処理モジュール３８の制御部３８Ｂによって、自モジュールの画像処理エンジン３８Ａ（すなわち画像処理プログラム３４Ｃ）による画像処理の内容が、引き渡されたモジュール生成処理パラメータに適合しているか否かが判定された結果が、処理生成モジュール３４Ｂを経由して画像処理モジュール３８の生成成功／失敗として外部モジュール提供部４５に通知される。次のステップ２２６では、処理生成モジュール３４Ｂからの通知に基づき、画像処理モジュール３８の生成に成功したか否か判定する。
【０１２６】
処理生成モジュール３４Ｂから画像処理モジュール３８の生成失敗が通知された場合には、ステップ２２６の判定が否定されてステップ２１０へ移行し、メモリ１４上に動的にロードした共有ライブラリ３４をメモリ１４から消去してステップ２００に戻るが、処理生成モジュール３４Ｂから画像処理モジュール３８の生成成功が通知された場合は、ステップ２２６の判定が肯定されてステップ２２８へ移行し、生成された画像処理モジュール３８のＩＤを処理管理部４６に通知する。そしてステップ２３０では、アプリケーション本体３２Ａへ画像処理モジュール３８の生成成功を通知して処理を終了する。
【０１２７】
このように、処理生成モジュール３４Ｂによって画像処理モジュール３８を生成させる処理、及び、生成した画像処理モジュール３８のＩＤを処理管理部４６に通知する処理を外部モジュール提供部４５が行うようにしてもよい。なお、上記態様において、処理モジュール生成関数３４Ａは請求項４に記載の第２のモジュール生成手段に、処理生成モジュール３４Ｂは請求項４に記載の第１のモジュール生成手段に、外部モジュール提供部４５は請求項４に記載の構築手段に各々対応している。
【０１２８】
また、上記では本発明に係るモジュール生成手段が処理モジュール生成関数３４Ａ（第２のモジュール生成手段）と処理生成モジュール３４Ｂ（第１のモジュール生成手段）に分離されている態様を説明したが、これに限定されるものではなく、処理モジュール生成関数３４Ａに相当する機能と処理生成モジュール３４Ｂに相当する機能を兼ね備えた単一のプログラムをモジュール生成手段として共有ライブラリ３４に登録するようにしてもよい。
【０１２９】
また、上記では本発明に係る画像処理プログラムに対応する画像処理アプリケーション３２のプログラムが記憶部２０に予め記憶（インストール）されている態様を説明したが、本発明に係る画像処理プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【図面の簡単な説明】
【０１３０】
【図１】本実施形態に係るコンピュータ（画像処理装置）の概略構成を示すブロック図である。
【図２】画像処理アプリケーションの生成手順を示す概略図である。
【図３】画像処理部の構成例を示すブロック図である。
【図４】(Ａ)は画像処理モジュール、(Ｂ)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。
【図５】画像処理部の構築から画像処理の実行に至る一連の処理を説明するためのシーケンス図である。
【図６】外部モジュール提供部によって行われる外部モジュール提供処理の内容を示すフローチャートである。
【図７】処理モジュール生成関数によって行われる画像処理モジュール生成処理の内容を示すフローチャートである。
【図８】書込対象の画像データが複数の保管用単位バッファ領域に跨る場合を説明する概略図である。
【図９】読出対象の画像データが複数の保管用単位バッファ領域に跨っていた場合を説明する概略図である。
【図１０】画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。
【図１１】画像処理部における画像処理の流れを説明する概略図である。
【図１２】外部モジュール提供処理の内容の他の例を示すフローチャートである。
【図１３】画像処理モジュール生成処理の内容の他の例を示すフローチャートである。
【符号の説明】
【０１３１】
１０  コンピュータ
１４  メモリ
２０  記憶部
３２  画像処理アプリケーション
３４  共有ライブラリ
３４Ａ  処理モジュール生成関数
３４Ｂ  処理生成モジュール
３４Ｃ  画像処理プログラム
３８  画像処理モジュール
４０  バッファモジュール
４２  処理構築部
４５  外部モジュール提供部
４６  処理管理部
５０  画像処理部
【図１】
2008021249.tif 000003
【図２】
2008021249.tif 000004
【図３】
2008021249.tif 000005
【図４】
2008021249.tif 000006
【図５】
2008021249.tif 000007
【図６】
2008021249.tif 000008
【図７】
2008021249.tif 000009
【図８】
2008021249.tif 000010
【図９】
2008021249.tif 000011
【図１０】
2008021249.tif 000012
【図１１】
2008021249.tif 000013
【図１２】
2008021249.tif 000014
【図１３】
2008021249.tif 000015