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