(57)【要約】【課題】画像処理部における処理負荷が一部の画像処理モジュールに偏っている場合にも処理負荷の平準化を可能とする。【解決手段】処理構築部は、１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方にバッファモジュールを連結し、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結した画像処理部((A)参照)を構築した後に、各グループの処理負荷がなるべく均等になるように画像処理部を複数のグループに分割し((B)参照)、処理負荷最大のグループを更に分割可能か否か判定し、分割可能であれば、処理負荷最大のグループを、画像データから互いに異なる領域のデータを切り出す画像切出モジュール39及び画像処理モジュールを各々含む複数の部分画像処理部に分割すると共に、その後段に画像合成モジュール41を設け((C)参照)、個々の部分画像処理部のプログラムを実行するスレッドを各々生成する。【選択図】図５
2009054001.tif 000002
【特許請求の範囲】
【請求項１】
自モジュールの前段から取得した画像データに対して互いに異なる画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する複数種の画像処理モジュール、前段のモジュールから出力される画像データをバッファに書き込ませると共に前記バッファに記憶されている画像データを後段のモジュールによって読み出させるバッファモジュール、前段のモジュールから出力される画像データを当該画像データが表す画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給する分配供給部、及び、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部のプログラムを各々記憶する記憶手段と、
前記記憶手段に記憶されているプログラムにより、前記複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方に前記バッファモジュールを連結し、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結すると共に、そのうちの少なくとも一部分を多重に設け、多重に設けた個々の処理部を、前記分配供給部を介して多重化部分の前段と各々連結しかつ前記画像合成部を介して前記多重化部分の後段と各々連結した画像処理部を構築する構築手段と、
前記構築手段によって構築された画像処理部によって画像処理を行わせる制御手段と、
を含む画像処理装置。
【請求項２】
前記構築手段は、前記画像処理部を構成する画像処理モジュールのうち、多重化対象であることを表す情報が付加されているか、又は、所定のテーブルに多重化対象として登録されている画像処理モジュールを含む部分を、多重化対象の部分として選択することを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記構築手段は、前記画像処理部によって画像処理が行われる画像のサイズが閾値以上の場合にのみ、前記画像処理部のうちの少なくとも一部分の多重化を行うことを特徴とする請求項１又は請求項２記載の画像処理装置。
【請求項４】
前記構築手段は、前記各モジュールをパイプライン形態又は有向非循環グラフ形態で連結した仮の画像処理部を複数の部分に分けたときの個々の部分毎に処理負荷を演算し、演算した前記個々の部分毎の処理負荷に基づいて前記複数の部分の中から多重化対象の部分を選択することを特徴とする請求項１記載の画像処理装置。
【請求項５】
前記構築手段は、前記仮の画像処理部の個々の部分毎に演算した処理負荷に基づき、前記複数の部分のうちの前記多重化部分に対応する個々の処理部及び前記複数の部分のうちの個々の非多重化部分の各々の処理負荷が均一の状態に近づくように、前記個々の部分毎に多重化の有無及び多重化の数を設定し、前記複数の部分のうち多重化有りに設定した部分に、設定した多重化の数と同数の処理部を設けることを特徴とする請求項４記載の画像処理装置。
【請求項６】
前記制御手段は、前記構築手段によって構築された画像処理部のうち、少なくとも前記多重化部分に対応する個々の処理部のプログラムをコンピュータによって各々並列に実行させることを特徴とする請求項１〜請求項５の何れか１項記載の画像処理装置。
【請求項７】
前記制御手段は、前記複数の部分のうちの前記多重化部分に対応する個々の処理部のプログラム及び前記複数の部分のうちの個々の非多重化部分のプログラムをコンピュータによって各々並列に実行させることを特徴とする請求項５又は請求項６記載の画像処理装置。
【請求項８】
前記記憶手段には、前記バッファモジュールのプログラムとして、前記バッファへのアクセスに対する排他制御を行う第１のバッファモジュール及び前記バッファへのアクセスに対する排他制御を行わない第２のバッファモジュールのプログラムが各々記憶されており、
前記構築手段は、前記画像処理部の構築にあたり、少なくとも前記分配供給部の一部として機能するバッファモジュール及び前記画像合成部の一部として機能するバッファモジュールとして前記第１のバッファモジュールを各々選択し、それ以外のバッファモジュールとして前記第２のバッファモジュールを選択することを特徴とする請求項６又は請求項７記載の画像処理装置。
【請求項９】
自モジュールの前段から取得した画像データに対して互いに異なる画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する複数種の画像処理モジュール、前段のモジュールから出力される画像データをバッファに書き込ませると共に前記バッファに記憶されている画像データを後段のモジュールによって読み出させるバッファモジュール、前段のモジュールから出力される画像データを当該画像データが表す画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給する分配供給部、及び、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部のプログラムを各々記憶する記憶手段と接続されたコンピュータを、
前記記憶手段に記憶されている各種モジュールのプログラムに基づき、前記複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方に前記バッファモジュールが連結され、各モジュールがパイプライン形態又は有向非循環グラフ形態で連結されると共に、そのうちの少なくとも一部分のモジュールが多重化され、当該多重化部分の前段に前記分配モジュール、後段に前記合成モジュールが各々挿入された画像処理部を構築する構築手段、
及び、前記構築手段によって構築された画像処理部によって画像処理を行わせる制御手段
として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置及びプログラムに係り、特に、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されるように、個々のモジュールをパイプライン形態又は有向非循環グラフ形態で連結して成る画像処理部を構築して画像処理を行う画像処理装置、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
【背景技術】
【０００２】
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なＤＴＰ（デスクトップ・パブリッシング）システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、例えば色空間や１画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理を柔軟に変更可能な構成が必要となる。このような要求を満たすために、特許文献１には、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されるように、個々のモジュールをパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結して成る画像処理部を構築して画像処理を行う技術が提案されている。
【０００３】
また、上記に関連して特許文献２には、直前に実行された処理集合に含まれる各単位処理（例えば各色毎のハーフトーン処理等）の実行結果に基づいて、次の処理集合の単位処理の見積り負荷を見積り、見積り負荷に基づいて、所定の種類の単位処理を、第１の処理グループと、第１の処理グループよりも見積り負荷が小さい第２の処理グループに分類し、第１の処理グループに含まれる単位処理を処理部に割り当て、第１の処理グループに含まれる単位処理の割り当てを完了した後、第２の処理グループに含まれる単位処理を処理部に割り当てると共に、第２の処理グループの単位処理を割り当てる際に、既に割り当てられた単位処理の見積り負荷の合計が最も少ない最小負荷処理部に、まだ処理部に割り当てられていない単位処理のうちの一つを割り当てることで、画像処理を並列処理で実行する際の各処理部間の負荷のばらつきを少なくする技術が提案されている。
【特許文献１】特開２００６−３３８４９８号公報
【特許文献２】特開２００５−２５０５６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の技術により画像処理部を構築して画像処理を行う場合、実現すべき画像処理の内容や入力される画像データのサイズ等によっては、画像処理部を構成する個々の画像処理モジュール毎の処理負荷（処理コストともいう）が大きくばらつくことがある。この画像処理モジュール毎の処理負荷のばらつきは、特に、個々の画像処理モジュールにおける画像処理を並列に行わせる並列処理方式で画像処理部を動作させる場合に、処理効率の大幅な低下、ひいては処理時間の増大を招くという問題がある。
【０００５】
上記の問題に対し、各処理部間の負荷のばらつきを少なくすることを目的として特許文献２に記載の技術を適用することが考えられるが、この技術は、或る色についての画像処理の実行結果から別の色についての同一の画像処理における処理負荷を見積るために、画像データに対する画像処理の実行タイミングを各色単位でずらす（各色毎の画像処理を逐次実行する）必要があり、全ての色についての処理結果が揃うまでに時間が掛るという問題がある。特許文献１に記載の技術のように各モジュールをパイプライン形態や有向非循環グラフ形態で連結して画像処理を行う場合、画像の一部分であってもよいが全色分の画像データが前段側から出力されないと後段側で画像処理を行うことができないことも多く（例えば後段側で色変換を行う等の場合）、画像処理部における個々の画像処理モジュールの処理負荷が偏っている場合に特許文献２に記載の技術を適用したとしても、処理効率の向上・処理時間の短縮が望めない状況は頻繁に生じ得る。
【０００６】
なお、画像処理部における処理負荷の偏りが処理効率や処理時間に悪影響を及ぼすことは、個々の画像処理モジュールにおける画像処理を並列に行わせる並列処理方式で画像処理部を動作させる場合に限られるものではなく、常に単一の画像処理モジュールで画像処理を行わせると共に、画像処理を行わせる画像処理モジュールを逐次切り替える逐次処理方式で画像処理部を動作させる場合にも、処理負荷が大きい画像処理モジュールにおける画像処理時間が長時間化することで、同様に、処理負荷の偏りが処理時間に悪影響を及ぼすことになる。
【０００７】
本発明は上記事実を考慮して成されたもので、画像処理部における処理負荷が一部の画像処理モジュールに偏っている場合にも、処理負荷の平準化が可能な画像処理装置及び画像処理プログラムを得ることが目的である。
【課題を解決するための手段】
【０００８】
上記目的を達成するために請求項１記載の発明に係る画像処理装置は、自モジュールの前段から取得した画像データに対して互いに異なる画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する複数種の画像処理モジュール、前段のモジュールから出力される画像データをバッファに書き込ませると共に前記バッファに記憶されている画像データを後段のモジュールによって読み出させるバッファモジュール、前段のモジュールから出力される画像データを当該画像データが表す画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給する分配供給部、及び、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部のプログラムを各々記憶する記憶手段と、前記記憶手段に記憶されているプログラムにより、前記複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方に前記バッファモジュールを連結し、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結すると共に、そのうちの少なくとも一部分を多重に設け、多重に設けた個々の処理部を、前記分配供給部を介して多重化部分の前段と各々連結しかつ前記画像合成部を介して前記多重化部分の後段と各々連結した画像処理部を構築する構築手段と、前記構築手段によって構築された画像処理部によって画像処理を行わせる制御手段と、を含んで構成されている。
【０００９】
請求項１記載の発明では、自モジュールの前段から取得した画像データに対して互いに異なる画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する複数種の画像処理モジュール、前段のモジュールから出力される画像データをバッファに書き込ませると共に前記バッファに記憶されている画像データを後段のモジュールによって読み出させるバッファモジュール、前段のモジュールから出力される画像データを当該画像データが表す画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給する分配供給部、及び、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部のプログラムが記憶手段に各々記憶されている。
【００１０】
また、請求項１記載の発明に係る構築手段は、記憶手段に記憶されているプログラムにより、複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方にバッファモジュールを連結し、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結すると共に、そのうちの少なくとも一部分を多重に設け、多重に設けた個々の処理部を、分配供給部を介して多重化部分の前段と各々連結しかつ画像合成部を介して前記多重化部分の後段と各々連結した画像処理部を構築する。そして、請求項１記載の発明に係る制御手段は、構築手段によって構築された画像処理部によって画像処理を行わせる。
【００１１】
上記のように、請求項１記載の発明では、構築手段によって構築される画像処理部が、画像処理部の少なくとも一部分が多重に設けられ、多重に設けられた個々の処理部が、分配供給部を介して多重化部分の前段と各々連結され、かつ画像合成部を介して多重化部分の後段と各々連結された構成とされているので、多重化部分に対応する個々の処理部には、各々の前段に設けられた分配供給部により、画像データを分割することで得られる、画像上の互いに異なる領域に対応する複数個のデータのうちの互いに異なるデータが供給され、供給されたデータに対して個々の処理部で同一の画像処理が行われた後に、個々の処理部における画像処理を経て個々の処理部から出力されたデータが、画像合成部によって単一の画像の画像データとして合成される。
【００１２】
このように、請求項１記載の発明では、多重化部分に対応する個々の処理部の処理負荷が、多重化部分に対応する処理部の数をＮとすると、多重化を行わない場合（処理部を多重に設けない、すなわちＮ＝１の場合）の１／Ｎになる。また、特許文献２に記載の技術では画像処理を各色毎に分けて行うので、上記のＮに相当する値が一定で変更不可であるが、請求項１記載の発明では画像上の互いに異なる領域に対応するデータへ画像データを分割するので、処理部の数Ｎを任意に設定可能である。従って、請求項１記載の発明によれば、画像処理部における処理負荷が一部の画像処理モジュールに偏っている場合にも、例えば画像処理部のうち、処理負荷が他の画像処理モジュールよりも大きい特定の画像処理モジュールを含む部分を多重化対象とする等により、処理負荷を平準化することが可能となる。
【００１３】
また請求項１記載の発明は、画像データを画像上の互いに異なる領域に対応する複数個のデータに分割し、分割した複数個のデータを互いに異なる処理部へ供給するものであり、特許文献２に記載の技術のように、分割した個々のデータに対する画像処理の実行タイミングをずらす必要がないので、例えば請求項６に記載したように、構築手段によって構築された画像処理部のうち、少なくとも多重化部分に対応する個々の処理部のプログラムをコンピュータによって各々並列に実行させるように制御手段を構成することで、多重化部分に対応する個々の処理部で並列に画像処理を行わせることも可能であり、個々の処理部における画像処理を並列に実行することで、処理効率の向上・処理時間の短縮を実現することができる。
【００１４】
なお、請求項１記載の発明において、画像処理モジュールにおける画像処理の内容によっては多重化が困難な場合がある（例えばアフィン変換や画像の回転等の幾何変換処理は、画像合成部における合成処理が非常に複雑となるため多重化に適していない）ことを考慮すると、構築手段は、例えば請求項２に記載したように、画像処理部を構成する画像処理モジュールのうち、多重化対象であることを表す情報が付加されているか、又は、所定のテーブルに多重化対象として登録されている画像処理モジュールを含む部分を、多重化対象の部分として選択するように構成することが好ましい。これにより、記憶手段にプログラムが記憶されている複数種の画像処理モジュールのうち、多重化に適した画像処理モジュール（例えば処理負荷が比較的大きくかつ多重化に適した画像処理を行う画像処理モジュール）が多重化対象となるように、上記情報の付加や所定のテーブルへの登録を行っておくことで、画像処理部のうち多重化対象の部分を構築手段が選択することを、上記情報の付加の有無や所定のテーブルへの登録の有無に基づいて、高精度かつ簡易な処理によって実現することができる。
【００１５】
また、画像処理モジュールにおける処理負荷は、画像処理を行う画像のサイズ（画像データのデータ量）によって大きく左右されることを考慮すると、請求項１又は請求項２記載の発明において、構築手段は、例えば請求項３に記載したように、画像処理部によって画像処理が行われる画像のサイズが閾値以上の場合にのみ、画像処理部のうちの少なくとも一部分の多重化を行うように構成してもよい。画像処理を行う画像のサイズが閾値未満の場合、画像処理部の処理負荷が比較的小さいので、分配供給部や画像合成部を設ける分だけ処理効率が低下することになるが、請求項３記載の発明では、上記のような場合に多重化を行わないので、多重化を行うか否かが画像処理部の処理負荷に応じて切り替わることになり、画像処理部の処理負荷が比較的小さい場合に処理効率が低下することを防止することができる。
【００１６】
なお、請求項３記載の発明において、画像処理が行われる画像処理のサイズの変化に対し、多重化部分に対応する処理部の数（多重化の数）を段階的に変化させる処理も併せて行うようにしてもよい。この場合、多重化部分に対応する処理部の数（多重化の数）を画像処理部の処理負荷に応じて最適化することが可能となる。
【００１７】
また、請求項１記載の発明において、構築手段は、例えば請求項４に記載したように、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結した仮の画像処理部を複数の部分に分けたときの個々の部分毎に処理負荷を演算し、演算した個々の部分毎の処理負荷に基づいて複数の部分の中から多重化対象の部分を選択するように構成してもよい。上記のように、個々の部分毎に処理負荷を演算して多重化対象の部分を選択することで、多重化対象の部分を高精度に選択することができる。
【００１８】
また、請求項４記載の発明において、構築手段は、例えば請求項５に記載したように、仮の画像処理部の個々の部分毎に演算した処理負荷に基づき、複数の部分のうちの多重化部分に対応する個々の処理部及び前記複数の部分のうちの個々の非多重化部分の各々の処理負荷が均一の状態に近づくように、個々の部分毎に多重化の有無及び多重化の数を設定し、複数の部分のうち多重化有りに設定した部分に、設定した多重化の数と同数の処理部を設けるように構成することが好ましい。これにより、多重化部分に対応する個々の処理部及び個々の非多重化部分の各々の処理負荷を精度良く均一の状態に近づけることができる。
【００１９】
また、請求項１〜請求項５の何れかに記載の発明において、制御手段は、例えば請求項６に記載したように、構築手段によって構築された画像処理部のうち、少なくとも多重化部分に対応する個々の処理部のプログラムをコンピュータによって各々並列に実行させるように構成してもよい。また、請求項５又は請求項６記載の発明において、制御手段は、例えば請求項７に記載したように、複数の部分のうちの多重化部分に対応する個々の処理部のプログラム及び複数の部分のうちの個々の非多重化部分のプログラムをコンピュータによって各々並列に実行させるように構成してもよい。
【００２０】
ところで、分配供給部は、画像データを複数個のデータに分割し、分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給するので、例えば供給対象の画像データをバッファに記憶しておき、後段のモジュールによってバッファからデータを読み出させることで後段のモジュールへデータを供給するように分配供給部を構成した場合、後段の複数のモジュールによるバッファへのアクセスが競合する可能性がある。また、画像合成部についても、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成するので、前段のモジュールによってバッファにデータを書き込ませることでデータを取得するように画像合成部を構成した場合、前段の複数のモジュールによるバッファへのアクセスが競合する可能性がある。
【００２１】
上記を考慮すると、請求項６又は請求項７記載の発明において、例えば請求項８に記載したように、バッファモジュールのプログラムとして、バッファへのアクセスに対する排他制御を行う第１のバッファモジュール及びバッファへのアクセスに対する排他制御を行わない第２のバッファモジュールのプログラムを記憶手段に各々記憶し、構築手段を、画像処理部の構築にあたり、少なくとも分配供給部の一部として機能するバッファモジュール及び画像合成部の一部として機能するバッファモジュールとして第１のバッファモジュールを各々選択し、それ以外のバッファモジュールとして第２のバッファモジュールを選択するように構成してもよい。これにより、上述したバッファへのアクセスの競合によって処理がロックする等の不都合が生ずることを防止することができる。
【００２２】
また、第１のバッファモジュールにおける排他制御は、バッファモジュールのプログラムを実行するコンピュータにオーバヘッド（余分な処理負荷）として加わるが、請求項８記載の発明では、第１のバッファモジュールを選択したバッファモジュール以外のバッファモジュールとしては、バッファへのアクセスに対する排他制御を行わない第２のバッファモジュールを選択するので、画像処理部を構成するバッファモジュールのうち第１のバッファモジュールが選択されるバッファモジュールの数が抑制され、第１のバッファモジュールにおける排他制御によるオーバヘッドが累積し多大な処理負荷としてコンピュータに加わることを防止することができる。なお、前述した請求項７のように、多重化部分に対応する個々の処理部のプログラム及び個々の非多重化部分のプログラムをコンピュータによって各々並列に実行させる場合には、複数の部分の各々の境界に相当する位置に位置しているバッファモジュールについても、バッファへのアクセスの競合が発生する可能性があるので、第１のバッファモジュールを用いることが望ましい。
【００２３】
請求項９記載の発明に係る画像処理プログラムは、自モジュールの前段から取得した画像データに対して互いに異なる画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する複数種の画像処理モジュール、前段のモジュールから出力される画像データをバッファに書き込ませると共に前記バッファに記憶されている画像データを後段のモジュールによって読み出させるバッファモジュール、前段のモジュールから出力される画像データを当該画像データが表す画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の複数のモジュールのうちの互いに異なるモジュールへ供給する分配供給部、及び、前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部のプログラムを各々記憶する記憶手段と接続されたコンピュータを、前記記憶手段に記憶されている各種モジュールのプログラムに基づき、前記複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方に前記バッファモジュールが連結され、各モジュールがパイプライン形態又は有向非循環グラフ形態で連結されると共に、そのうちの少なくとも一部分のモジュールが多重化され、当該多重化部分の前段に前記分配モジュール、後段に前記合成モジュールが各々挿入された画像処理部を構築する構築手段、及び、前記構築手段によって構築された画像処理部によって画像処理を行わせる制御手段として機能させる。
【００２４】
請求項９記載の発明に係る画像処理プログラムは、上記の記憶手段と接続されたコンピュータを、上記の構築手段及び制御手段として機能させるためのプログラムであるので、コンピュータが請求項９記載の発明に係る画像処理プログラムを実行することで、コンピュータが請求項１に記載の画像処理装置として機能することになり、請求項１記載の発明と同様に、画像処理部における処理負荷が一部の画像処理モジュールに偏っている場合にも、処理負荷の平準化が可能となる。
【発明の効果】
【００２５】
以上説明したように本発明は、複数種の画像処理モジュールの中から選択した１つ以上の画像処理モジュールの各々の前段及び後段の少なくとも一方にバッファモジュールを連結し、各モジュールをパイプライン形態又は有向非循環グラフ形態で連結すると共に、そのうちの少なくとも一部分を多重に設け、多重に設けた個々の処理部を、前段のモジュールからの画像データを画像上の互いに異なる領域に対応する複数個のデータに分割し分割した個々のデータを後段の互いに異なるモジュールへ供給する分配供給部を介して多重化部分の前段と各々連結し、かつ前段の複数のモジュールから各々取得したデータを単一の画像の画像データとして合成する画像合成部を介して多重化部分の後段と各々連結した画像処理部を構築するようにしたので、画像処理部における処理負荷が一部の画像処理モジュールに偏っている場合にも、処理負荷の平準化が可能となる、という優れた効果を有する。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図１には、本発明に係る画像処理装置として機能することが可能なコンピュータ１０が示されている。なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００２７】
コンピュータ１０はＣＰＵ１２、ＤＲＡＭ又はＳＲＡＭ等から成るメモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２及び画像出力部２４を備えており、これらはバス２６を介して互いに接続されている。コンピュータ１０が上述したような画像取扱機器に組み込まれている場合、表示部１６や操作部１８としては、画像取扱機器に設けられたＬＣＤ等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ１０が独立したコンピュータである場合、表示部１６や操作部１８としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【００２８】
また、画像データ供給部２２は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）等を適用することができる。また、画像出力部２４は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部２４は画像処理を経た画像データを単に記憶する画像記憶部（メモリ１４又は記憶部２０）であっても構わない。
【００２９】
図１に示すように、記憶部２０には、ＣＰＵ１２によって実行される各種のプログラムとして、メモリ１４等のリソースの管理やＣＰＵ１２によるプログラムの実行の管理、コンピュータ１０と外部との通信等を司るオペレーティングシステム３０のプログラム、コンピュータ１０を本発明に係る画像処理装置として機能させるための画像処理プログラム群３４、ＣＰＵ１２が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション３２のプログラム（図１ではアプリケーションプログラム群３２と表記）が各々記憶されている。
【００３０】
画像処理プログラム群３４は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、ＰＣ等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、ＰＣ等の各種機器（プラットフォーム）で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、アプリケーション３２からの実行指示に従い、前記画像処理部によって画像処理を行うが（詳細は後述）、画像処理プログラム群３４は、所望の画像処理を行う画像処理部（所望の構成の画像処理部）の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション３２に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【００３１】
また、画像処理プログラム群３４によって実現される画像処理装置は、前述のように、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や１画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション３２が画像処理部の再構築を指示することで、画像処理装置（画像処理部）によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【００３２】
以下、画像処理プログラム群３４について説明する。図１に示すように、画像処理プログラム群３４はモジュールライブラリ３６と、処理構築部４２のプログラムと、処理管理部４６のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部４２は、アプリケーションからの指示により、例として図２に示すように、予め定められた画像処理を行う１つ以上の画像処理モジュール３８と、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成る画像処理部５０を構築する。画像処理部５０を構成する個々の画像処理モジュールの実体はＣＰＵ１２によって実行されＣＰＵ１２で所定の画像処理を行わせるための第１プログラム、又は、ＣＰＵ１２によって実行されＣＰＵ１２により図１に図示されていない外部の画像処理装置（例えば専用画像処理ボード等）に対する処理の実行を指示するための第２プログラムであり、上述したモジュールライブラリ３６には、予め定められた互いに異なる画像処理（例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等）を行う複数種の画像処理モジュール３８のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部５０を構成する個々の画像処理モジュールの実体が上記の第１プログラムであるものとして説明する。
【００３３】
個々の画像処理モジュール３８は、例として図３(Ａ)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン３８Ａと、画像処理モジュール３８の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン３８Ａの制御を行う制御部３８Ｂから構成されている。個々の画像処理モジュール３８における単位処理データ量は、画像の１ライン分、画像の複数ライン分、画像の１画素分、画像１面分等を含む任意のバイト数の中から、画像処理エンジン３８Ａが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール３８では単位処理データ量が１画素分とされ、拡大・縮小処理を行う画像処理モジュール３８では単位処理データ量が画像の１ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール３８では単位処理データ量が画像１面分とされ、画像圧縮伸長処理を行う画像処理モジュール３８では単位処理データ量が実行環境に依存するＮバイトとされている。
【００３４】
また、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている（図１では、この種の画像処理モジュールを「モジュール１」「モジュール２」と表記して示している）。例えば拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等の複数の画像処理モジュール３８が各々用意されている。また、例えば色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間をＣＭＹ色空間へ変換する画像処理モジュール３８やその逆へ変換する画像処理モジュール３８、Ｌ*ａ*ｂ*色空間等の他の色空間変換を行う画像処理モジュール３８が各々用意されている。
【００３５】
また、画像処理モジュール３８の制御部３８Ｂは、画像処理エンジン３８Ａが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール（例えばバッファモジュール４０）から画像データを単位読出データ量ずつ取得し、画像処理エンジン３８Ａから出力される画像データを単位書込データ量ずつ後段のモジュール（例えばバッファモジュール４０）へ出力する（画像処理エンジン３８Ａで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量＝単位処理データ量となる）か、画像処理エンジン３８Ａによる画像処理の結果を自モジュールの外部へ出力する（例えば画像処理エンジン３８Ａがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある）処理を行うが、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール３８も登録されている。例えば画像回転処理を行う画像処理モジュール３８における単位処理データ量についても、前述した画像１面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる（例えば画像の１ライン分や複数ライン分等の）複数の画像処理モジュール３８がモジュールライブラリ３６に含まれていても良い。
【００３６】
また、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８のプログラムは、画像処理エンジン３８Ａに相当するプログラムと制御部３８Ｂに相当するプログラムから構成されているが、制御部３８Ｂに相当するプログラムは部品化されており、個々の画像処理モジュール３８のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール３８は、画像処理エンジン３８Ａで実行される画像処理の種類や内容に拘わらず、制御部３８Ｂに相当するプログラムが共通化されている（制御部３８Ｂに相当するプログラムとして同一のプログラムが用いられている）。これにより、画像処理モジュール３８のプログラムの開発にあたっての開発負荷が軽減される。
【００３７】
なお、画像処理モジュール３８の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール３８については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール３８について、制御部３８Ｂに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群３４は、前述のように各種機器に実装可能であるが、画像処理プログラム群３４のうちモジュールライブラリ３６に登録する画像処理モジュール３８の数や種類等については、画像処理プログラム群３４を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【００３８】
また、画像処理部５０を構成する個々のバッファモジュール４０は、例として図３(Ｂ)にも示すように、バッファ４０Ａと、バッファモジュール４０の前段及び後段のモジュールとの画像データの入出力及びバッファ４０Ａの管理を行うバッファ制御部４０Ｂから構成されている。なお、バッファ４０Ａはコンピュータ１０に設けられたメモリ１４からオペレーティングシステム３０及びリソース管理部４６Ｂを通じて確保されたメモリ領域で構成される。個々のバッファモジュール４０のバッファ制御部４０Ｂもその実体はＣＰＵ１２によって実行されるプログラムであり、モジュールライブラリ３６にはバッファ制御部４０Ｂのプログラムも登録されている（図１ではバッファ制御部４０Ｂのプログラムを「バッファモジュール」と表記して示している）。
【００３９】
また本実施形態では、バッファモジュール４０のバッファ４０Ａに対して複数の画像処理モジュール３８が同時にアクセスする可能性があることを考慮し、バッファ４０Ａへのアクセスに対して排他制御を行う、排他制御機能付きのバッファモジュール４０（請求項８に記載の第１のバッファモジュールに相当）と、排他制御機能無しのバッファモジュール４０（請求項８に記載の第２のバッファモジュールに相当）が各々用意され、モジュールライブラリ３６にはそれぞれのバッファモジュール４０のプログラムが各々登録されている。
【００４０】
更に、本実施形態では画像処理部５０のうち処理負荷が最大のグループ（ホットスポット）を更に分割（多重化）する場合（詳細は後述）に備えて、前段のモジュールに保持されている画像データから予め設定された画像領域のデータを切り出して出力する画像切出モジュールと、前段の複数のモジュールから各々データを取得し、取得したデータを単一の画像の画像データとして合成する画像合成モジュールのプログラムも各々記憶されている。
【００４１】
また、アプリケーション３２からの指示に従って画像処理部５０を構築する処理構築部４２は、図１に示すように複数種のモジュール生成部４４から構成されている。複数種のモジュール生成部４４は互いに異なる画像処理に対応しており、アプリケーション３２によって起動されることで、対応する画像処理を実現するための画像処理モジュール３８及びバッファモジュール４０から成るモジュール群を生成する処理を行う。なお、図１ではモジュール生成部４４の一例として、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８が実行する画像処理の種類に対応するモジュール生成部４４を示しているが、個々のモジュール生成部４４に対応する画像処理は、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理）であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は複数種の画像処理の何れかに対応するモジュール生成部４４を順次起動する。これにより、アプリケーション３２によって順次起動されたモジュール生成部４４により、必要とされる画像処理を行う画像処理部５０が構築されることになる。
【００４２】
また図１に示すように、処理管理部４６は、画像処理部５０における画像処理の実行を制御するワークフロー管理部４６Ａ、画像処理部５０の各モジュールによるメモリ１４や各種のファイル等のコンピュータ１０のリソースの使用を管理するリソース管理部４６Ｂ、及び、画像処理部５０で発生したエラーを管理するエラー管理部４６Ｃを含んで構成されている。エラー管理部４６Ｃは、画像処理部５０が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群３４がインストールされたコンピュータ１０が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部２０等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。
【００４３】
次に本実施形態の作用を説明する。画像処理プログラム群３４が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション３２によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部２２としての画像読取部によって画像を読み取り、画像出力部２４としての画像記録部により記録材料に画像として記録するか、画像出力部２４としての表示部に画像として表示させるか、画像出力部２４としての書込装置により画像データを記録メディアに書き込むか、画像出力部２４としての送信部により画像データを送信するか、画像出力部２４としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部２２としての受信部によって受信されるか、画像データ供給部２２としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション３２が実行可能な処理の名称等を表示部１６に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
【００４４】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション３２は、まず画像処理対象の画像データを供給する画像データ供給部２２の種別を認識し、認識した種別がバッファ領域（メモリ１４の一部領域）であった場合には、画像データ供給部２２として指定されたバッファ領域を既に確保されたバッファ４０Ａとしてバッファ制御部４０Ｂに認識させるパラメータを設定し、バッファ制御部４０Ｂのプログラムを実行するスレッド（プロセス又はオブジェクトでもよい：以下同様）を生成する（バッファ制御部４０Ｂを生成する）ことで、指定されたバッファ領域を含むバッファモジュール４０（画像データ供給部２２として機能するバッファモジュール４０）を生成する。
【００４５】
続いてアプリケーション３２は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部２４の種別を認識し、認識した種別がバッファ領域（メモリ１４の一部領域）であった場合は、画像出力部２４として指定されたバッファ領域を含むバッファモジュール４０を上記と同様にして生成する。ここで生成されたバッファモジュール４０は画像出力部２４として機能する。また、アプリケーション３２は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部４４に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション３２は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
【００４６】
そしてアプリケーション３２は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部４４を起動（モジュール生成部４４のプログラムを実行するスレッドを生成）した後に、起動したモジュール生成部４４に対し、当該モジュール生成部４４によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータを通知して対応するモジュール群の生成を指示する。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は、指示したモジュール生成部４４からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部４４を起動してモジュール群の生成に必要な情報を通知する処理を個々の画像処理の実行順序の昇順に繰り返す。
【００４７】
なお、上記の入力モジュールは、実行順序が１番目のモジュール群については画像データ供給部２２が入力モジュールとなり、実行順序が２番目以降のモジュール群については前段のモジュール群の最終モジュール（通常はバッファモジュール４０）が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部２４が出力モジュールとなるので、画像出力部２４が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション３２による指定は行われず、必要な場合はモジュール生成部４４によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション３２が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
【００４８】
一方、モジュール生成部４４は、アプリケーション３２によって起動されるとモジュール生成処理を行う。モジュール生成処理では、まず生成対象の画像処理モジュール３８に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール３８の前段にバッファモジュール４０が存在している場合、当該バッファモジュール４０に画像データの書き込みを行う更に前段の画像処理モジュール３８から出力画像データの属性を取得することによって実現できる。
【００４９】
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール３８の生成が必要か否か判定する。例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてＣＭＹ色空間がアプリケーション３２から指定された場合、取得した入力画像属性情報に基づいて入力画像データがＲＧＢ色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール３８としてＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８を生成する必要があるが、入力画像データがＣＭＹ色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール３８は生成不要と判断する。
【００５０】
生成対象の画像処理モジュール３８の生成が必要と判断した場合には、生成対象の画像処理モジュール３８の後段にバッファモジュール４０が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール（画像出力部２４）である場合（例えば図２(Ａ)〜(Ｃ)に示す画像処理部５０における最後段の画像処理モジュール３８を参照）や、例として図２(Ｂ)に示す画像処理部５０においてスキュー角検知処理を行う画像処理モジュール３８のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール３８へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定されてバッファ制御部４０Ｂを起動する（バッファ制御部４０Ｂのプログラムを実行するスレッドを各々生成する）ことで、画像処理モジュール３８の後段に連結するバッファモジュール４０を生成する。
【００５１】
続いて、前段のモジュール（例えばバッファモジュール４０）の情報、後段のバッファモジュール４０の情報（後段にバッファモジュール４０を生成した画像処理モジュール３８のみ）、画像処理モジュール３８に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ３６に登録されており、画像処理モジュール３８として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール３８で実行すべき処理パラメータに合致する画像処理モジュール３８を選択・生成（画像処理エンジン３８Ａ及び制御部３８Ｂのプログラムを実行するスレッドを生成）する。
【００５２】
例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてＣＭＹ色空間が指定され、更に入力画像データがＲＧＢ色空間のデータであった場合には、モジュールライブラリ３６に登録されている各種の色空間処理を行う複数種の画像処理モジュール３８の中から、ＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール３８であり、指定された拡大縮小率が50％以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８が選択・生成され、指定された拡大縮小率が50％であれば、拡大縮小率50％に特化した拡大縮小処理、すなわち入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８が選択・生成される。
【００５３】
なお、画像処理モジュール３８の選択は上記に限られるものではなく、例えば画像処理エンジン３８Ａによる画像処理における単位処理データ量が異なる画像処理モジュール３８をモジュールライブラリ３６に複数登録しておき、画像処理部５０へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール３８を選択する（例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール３８を選択する等）ようにしてもよいし、アプリケーション３２或いはユーザに選択させるようにしてもよい。
【００５４】
画像処理モジュール３８の生成が完了すると、後段のバッファモジュール４０のＩＤと生成した画像処理モジュール３８のＩＤの組をワークフロー管理部４６Ａに通知する。このＩＤは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール４０や画像処理モジュール３８のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部４４が、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理を行う画像処理モジュール３８と画像回転処理を行う画像処理モジュール３８によって実現されるスキュー補正処理）を行うモジュール群を生成する場合には、上記処理が繰り返されて２個以上の画像処理モジュール３８を含むモジュール群が生成される。アプリケーション３２によって順次起動された個々のモジュール生成部４４により、以上のモジュール生成処理が順次行われることで、例として図２(Ａ)〜(Ｃ)に示すように、必要とされる画像処理を行う画像処理部５０が構築される。なお、上記処理によって構築された画像処理部５０は請求項４，５に記載の「仮の画像処理部」に対応している。
【００５５】
処理構築部４２は本発明に係る構築手段（より詳しくは請求項２〜請求項４に記載の構築手段）に対応しており、上記のようにして画像処理部５０を構築すると、構築した画像処理部５０に対して図４に示す画像処理部分割処理を行う。この画像処理部分割処理では、まずステップ１００において、画像処理部５０を何個のグループに分割するかを表すグループ数Ｎを決定する。グループ数Ｎとしては、例えばコンピュータ１０に設けられている演算リソース（例えばＣＰＵコアやＤＳＰ(Digital Signal Processor)等のように演算を並列に実行可能なリソース)の数を適用することができる。演算リソースの数はＯＳが提供する関数等を用いて取得することができる。また、グループ数Ｎとして、コンピュータ１０に設けられている演算リソースの数を単に用いることに代えて、演算リソースの数を取得した後に、個々の演算リソースにおける使用率を更に取得し、使用率が閾値以下の演算リソースの数をグループ数Ｎとして用いるようにしてもよい。また、グループ数Ｎ＝１であった場合には、次のステップ１０２以降の処理をスキップし画像処理部分割処理を終了することが望ましい。
【００５６】
次のステップ１０２では、ステップ１００で決定したグループ数Ｎに基づき、先に構築した画像処理部５０をＮ個のグループへ分割する。画像処理部５０の分割には幾つかの方法がある。第１の分割方法は、画像処理部５０における画像処理モジュールの数Ｍとして画像処理部５０における画像処理モジュール３８の総数を用い、上記の画像処理モジュールの数Ｍをグループ数Ｎで除算し、剰余が生ずる場合は商に対して切り捨て等の端数処理を行うことで、１グループ当りの画像処理モジュール３８の数Ｌを求め、画像処理部５０を先頭から順にスキャンし、画像処理モジュール３８がＬ個出現する毎にＬ個目の画像処理モジュール３８までを１個のグループとしてグループ化すると共に、画像処理モジュール３８の数の計数値を０に戻すことで、画像処理部５０をＮ個のグループに分割する方法である。なお、画像処理部５０を構成する画像処理モジュール３８のうち、１面分の画像データが揃わないと画像処理を開始できない画像処理モジュール３８（画像の回転等の画像処理を行う画像処理モジュール３８）の数を認識し、画像処理モジュールの数Ｍとして、画像処理部５０における画像処理モジュール３８の総数から上記で認識した画像処理モジュール３８の数を減算した値を用いてもよい。第１の分割方法は処理が簡単になるという利点を有する。
【００５７】
また、第２の分割方法は、各グループの処理負荷（ここでは処理負荷の一例としてＣＰＵ処理時間を用いる）が均等となるように分割する方法である。すなわち、まず画像処理部５０を構成する個々の画像処理モジュール３８の処理負荷（ＣＰＵ処理時間）を各々予測する。ここで、各種の画像処理モジュール３８のうち、画像サイズや処理パラメータの変化に拘わらずＣＰＵ処理時間が大きく変化しない画像処理を行う画像処理モジュール３８については、予め固定的に設定したＣＰＵ処理時間を取得することで、ＣＰＵ処理時間を予測することができる。また、画像サイズや処理パラメータの変化に対してＣＰＵ処理時間が大きく変化する画像処理を行う画像処理モジュール３８については、画像サイズや処理パラメータの変化とＣＰＵ処理時間との関係を予測式等の形態で予め設定しておき、当該予測式を取得し画像サイズや処理パラメータに応じたＣＰＵ処理時間を演算することで、ＣＰＵ処理時間の予測を行うことができる。
【００５８】
次に、画像処理部５０を構成する個々の画像処理モジュール３８のＣＰＵ処理時間の総和を演算し、演算したＣＰＵ処理時間の総和をグループ数Ｎで除算し、演算結果（１グループ当りのＣＰＵ処理時間の平均値）を閾値Ｔｈに設定する。そして、画像処理モジュール３８のＣＰＵ処理時間を画像処理部５０の先頭から順に積算しながらＣＰＵ処理時間の積算値を閾値Ｔｈと比較し、ＣＰＵ処理時間の積算値が閾値Ｔｈ以上となる毎に、積算値が閾値Ｔｈ以上となった画像処理モジュール３８までを１個のグループとしてグループ化すると共に、ＣＰＵ処理時間の積算値を０に戻すことで、画像処理部５０をＮ個のグループに分割する。第２の分割方法は、第１の分割方法と比較して処理は若干複雑になるものの、各グループの処理負荷をなるべく均等にすることができるので、より好ましい。
【００５９】
なお、画像処理部５０をＮ個のグループに分割する際の分割方法は上記方法に限られるものではなく、他の分割方法（例えば第２の分割方法において、ｊ個目の画像処理モジュールのＣＰＵ処理時間を積算値に加算した段階で積算値が閾値Ｔｈ以上となった場合に、当該積算値と閾値Ｔｈの偏差Ａを、ｊ個目の画像処理モジュールのＣＰＵ処理時間を加算する前の積算値と閾値Ｔｈの偏差Ｂと比較し、偏差Ａが小さければｊ個目の画像処理モジュールの後段をグループの境界とし、偏差Ｂが小さければｊ個目の画像処理モジュールの前段をグループの境界とする等の分割方法）を用いてもよい。
【００６０】
以上のようにして画像処理部５０をＮ個のグループに分割すると、次のステップ１０４では、各グループの境界に位置しているバッファモジュール４０を排他制御機能付きのバッファモジュール４０に置き換える。これにより、当初構築された画像処理部５０が、例として図５(Ａ)に示すように画像処理モジュールＭ1〜Ｍ4及びバッファモジュールＢ1〜Ｂ3が交互に連結された構成であり、当該構成の画像処理部５０が、上述した画像処理部５０の分割により、画像処理モジュールＭ1〜Ｍ3から成るグループＡと、画像処理モジュールＭ4から成るグループＢに分割された場合には、図５(Ｂ)に示すように、グループＡとグループＢの境界に位置しているバッファモジュールＢ3が排他制御機能付きのバッファモジュールに置き換わることになる。
【００６１】
次のステップ１０６では、画像処理部５０の各グループの処理負荷として、画像処理モジュール３８のＣＰＵ処理時間を各グループ毎に積算した値を取得する。またステップ１０８では、ステップ１０６で取得した各グループの処理負荷に基づいて、処理負荷が最大のグループ（本実施形態ではこれを「ホットスポット」という）を判定する。そしてステップ１１０では、ステップ１０８で判定したホットスポットを複数の部分画像処理部に分割（多重化）することが適当か否か判定する。
【００６２】
図５(Ｂ)には、画像処理部５０の個々の画像処理モジュール３８におけるＣＰＵ処理時間の一例を示す。この例ではＣＰＵ処理時間が画像処理モジュールＭ4に大きく偏っている（画像処理モジュールＭ4のＣＰＵ処理時間が他の画像処理モジュールＭ1〜Ｍ3のＣＰＵ処理時間の積算値よりも大幅に大きい）ため、画像処理部５０を画像処理モジュールＭ1〜Ｍ3から成るグループＡと画像処理モジュールＭ4から成るグループＢに分割しても、グループ毎の処理負荷（ＣＰＵ処理時間）は大きく相違している。このような場合、本実施形態では処理負荷が大きいグループ（ホットスポット）に対し、画像中の互いに異なる領域のデータを画像データから切り出し、切り出したデータに対して同一の画像処理を行う複数の部分画像処理部に分割（多重化）する処理を行う。
【００６３】
但し、複数の部分画像処理部へのホットスポットの分割（多重化）を行った場合、個々の部分画像処理部での処理を経たデータは画像合成モジュールによって単一の画像として合成されることになるが、ホットスポットで行われる画像処理の内容によっては画像合成モジュールにおける画像合成処理が非常に複雑となるため、複数の部分画像処理部へ分割（多重化）することが望ましくない場合がある（例えばホットスポットの画像処理モジュール３８でアフィン変換や画像の回転等の幾何変換処理が行われる等の場合）。また、画像サイズが比較的小さい場合には、グループ毎の処理負荷に偏りがあったとしてもホットスポットの処理負荷自体が小さく（ＣＰＵ処理時間がさほど長くはなく）、複数の部分画像処理部への分割（多重化）を行うことで、却って処理効率が低下する可能性もある。このため本実施形態では、ステップ１１０の判定（ホットスポットを複数の部分画像処理部に分割（多重化）することが適当か否かの判定）を、以下の判定を順に行うことで実現している。
【００６４】
すなわち、本実施形態では、画像処理プログラム群３４のモジュールライブラリ３６に登録されている個々の画像処理モジュール３８のプログラムに、分割（多重化）の可否を表す分割可否フラグが各々付加されている。この分割可否フラグは、複数の部分画像処理部への分割に適していない画像処理モジュール３８には０が、その他の画像処理モジュール３８には１が設定されている。ステップ１１０では、まずホットスポットの画像処理モジュール３８に付加されている分割可否フラグが１か否か判定する（第１の判定）。第１の判定が否定された場合はホットスポットを分割することは適当でないと判断できるので、ステップ１１０の判定が否定される。これにより、分割に適していない画像処理を行う画像処理モジュール３８が複数の部分画像処理部へ分割されることを防止できる。
【００６５】
なお、上記の分割可否フラグを付加しておくことに代えて、複数の部分画像処理部への分割に適していない画像処理モジュール３８の情報を所定のテーブルに登録しておき、上記の第１の判定を、ホットスポットの画像処理モジュール３８の情報が所定のテーブルに未登録か否かを判定することで行うようにしてもよい。また、分割可否フラグと所定のテーブルを併用し、分割可否フラグは固定的に設定しておく一方で所定のテーブルはユーザが更新可能としておき、ホットスポットの画像処理モジュール３８に付加されている分割可否フラグが１か否か判定し、この判定が肯定された場合は、ホットスポットの画像処理モジュール３８の情報が所定のテーブルに未登録か否かを判定するようにしてもよい。この態様では、複数の部分画像処理部への分割が禁止される画像処理モジュール３８をユーザが任意に設定することが可能となる。上述した第１の判定は請求項２記載の発明に対応している。
【００６６】
また、前述の第１の判定が肯定された場合、ホットスポットに入力される画像(データ)のサイズが閾値以上か否か判定する（第２の判定）。第２の判定が否定された場合もホットスポットを分割することは適当でないと判断できるので、ステップ１１０の判定が否定される。これにより、ホットスポットの画像処理モジュール３８を複数の部分画像処理部へ分割することで、却って処理効率が低下してしまうことを防止できる。この第２の判定は請求項３記載の発明に対応している。
【００６７】
また、第２の判定も肯定された場合は、ホットスポットの処理負荷（ＣＰＵ処理時間）が閾値以上か否か判定する（第３の判定）。第３の判定が否定された場合も、ホットスポットの画像処理モジュール３８を複数の部分画像処理部へ分割することで却って処理効率が低下してしまう可能性が高く、ホットスポットを分割することは適当でないと判断できるので、ステップ１１０の判定が否定される。この第３の判定は請求項４記載の発明と関連している。
【００６８】
上述した第１の判定〜第３の判定の何れかが否定されることでステップ１１０の判定が否定された場合は、ホットスポットの分割（多重化）を行うことなくステップ１１６へ移行し、各グループをスレッドとして各々割り付け（各グループのプログラムを実行するスレッドを各々生成し）、画像処理部分割処理を終了する。
【００６９】
一方、上述した第１の判定〜第３の判定が各々肯定された場合は、ホットスポットは複数の部分画像処理部に分割（多重化）することが適当と判断できるので、ステップ１１２へ移行してホットスポットの分割数ｎを決定する。この分割数ｎは、分割後の個々の部分画像処理部の処理負荷（ＣＰＵ処理時間）が、ホットスポット以外のグループの処理負荷（ＣＰＵ処理時間）となるべく等しくなるように決定することができ、具体的には、例えばホットスポットのＣＰＵ処理時間を、ホットスポット以外のグループのＣＰＵ処理時間（該当するグループが複数存在している場合はその平均値）で除算し、剰余が生ずる場合は商に対して四捨五入等の端数処理を行った結果を分割数ｎとして用いることができる。次のステップ１１４では、分割数ｎが１よりも大きいか否か判定する。この判定が否定された場合（分割数ｎ＝１の場合）はホットスポットの分割は不要であるので、前述のステップ１１６へ移行する。
【００７０】
また、ステップ１１４の判定が肯定された場合は、次のステップ１１８以降でホットスポットを分割数ｎと同数の部分画像処理部に分割する。すなわち、ステップ１１８では、ホットスポットに入力される画像データが表す画像の幅（ｘ方向(ホットスポットへの画像データの入力順(ラスタ順)に沿った方向)の画素数）を分割数ｎで除算し、剰余が生ずる場合は商に対して四捨五入等の端数処理を行った結果をｘ方向切り出し量ｄｘとして設定する。また、ｘ方向切り出し開始位置ｘｓとして０を、ｘ方向切り出し終了位置ｘｅとしてｘ方向切り出し量ｄｘを、ｙ方向切り出し開始位置ｙｓとして０を、ｙ方向切り出し終了位置ｙｅとして、ホットスポットに入力される画像データが表す画像の高さ（ｙ方向(ｘ方向に直交する方向)の画素数）を、変数ｉとして分割数ｎを各々設定する。
【００７１】
次のステップ１２０では変数ｉが０よりも大きいか否か判定する。判定が肯定された場合はステップ１２２へ移行して画像切出モジュール３９を生成し、生成した画像切出モジュール３９を、ホットスポットの直前に存在しているバッファモジュール４０（排他制御機能付きのバッファモジュール４０）と連結し、更に、生成した画像切出モジュール３９に対し、前段のバッファモジュール４０より取得した画像データから、座標(ｘｓ,ｙｓ)及び座標(ｘｅ,ｙｅ)を対向する２頂点とする矩形領域（図６も参照）のデータが切り出されるように処理パラメータを設定する。また、ステップ１２４では排他制御機能無しのバッファモジュール４０を生成し、生成したバッファモジュール４０をステップ１２２で生成した画像切出モジュール３９の後段に連結する。次のステップ１２６では、ホットスポットの画像処理モジュール３８を生成し、生成した画像処理モジュール３８をステップ１２４で生成したバッファモジュール４０の後段に連結する。また、ステップ１２８では排他制御機能付きのバッファモジュール４０を生成し、生成したバッファモジュール４０をステップ１２６で生成した画像処理モジュールの後段に連結する。
【００７２】
そしてステップ１３０では、ステップ１２２〜ステップ１２８で生成したモジュール群（画像切出モジュール３９、排他制御機能無しのバッファモジュール４０、画像処理モジュール３８及び排他制御機能付きのバッファモジュール４０）から成る単一の部分画像処理部を、単一のスレッドとして割り付ける（各モジュールのプログラムを実行する単一のスレッドを生成する）。次のステップ１３２では、新たなｘ方向切り出し開始位置ｘｓとして現在のｘ方向切り出し終了位置ｘｅを、新たなｘ方向切り出し終了位置ｘｅとして、現在のｘ方向切り出し終了位置ｘｅにｘ方向切り出し量ｄｘを加算した値を各々設定すると共に、変数ｉを１だけデクリメントしてステップ１２０へ戻る。
【００７３】
これにより、ステップ１２０の判定が肯定される迄、ステップ１２２〜ステップ１３２がｎ回繰り返されることで、例として図５(Ｃ)にも示すように、各々画像切出モジュール３９、排他制御機能無しのバッファモジュール４０、画像処理モジュール３８及び排他制御機能付きのバッファモジュール４０が直列に連結されて成るｎ個の部分画像処理部が、互いに別々のスレッドとして各々生成される。また、個々の部分画像処理部の画像切出モジュール３９に設定されているｘ方向切り出し開始位置ｘｓ及びｘ方向切り出し終了位置ｘｅはｘ方向切り出し量ｄｘずつずれているので、画像処理の実行時には、個々の部分画像処理部の画像切出モジュール３９により、前段の排他制御機能付きのバッファモジュール４０に保持されている画像データから、例として図６にも示すようにｘ方向切り出し量ｄｘずつｘ方向にずれた画像領域のデータが切り出され、個々の部分画像処理部の画像処理モジュール３８では、同一の部分画像処理部の画像切出モジュール３９によって切り出された画像領域のデータに対してのみ画像処理が行われることになる。
【００７４】
また、ｎ個の部分画像処理部が生成されると、ステップ１２０の判定が否定されてステップ１３４へ移行する。ステップ１３４では画像合成モジュール４１を生成し、生成した画像合成モジュール４１をｎ個の部分画像処理部の最後段に各々位置している排他制御機能付きのバッファモジュール４０の後段に各々連結する。そしてステップ１３６では、ホットスポット以外の各グループをスレッドとして各々割り付け（ホットスポット以外の各グループのプログラムを実行するスレッドを各々生成し）、画像処理部分割処理を終了する。
【００７５】
なお、個々の部分画像処理部の画像切出モジュール３９は、ホットスポットの前段に位置している排他制御機能付きのバッファモジュール４０（図５(Ｃ)の例では「Ｂ３」と表記したバッファモジュール４０）と共に本発明に係る分配供給部を構成しており、上記の排他制御機能付きのバッファモジュール４０は請求項８に記載の「分配供給部の一部として機能するバッファモジュール」に対応している。また、個々の部分画像処理部の排他制御機能付きのバッファモジュール４０（図５(Ｃ)の例では「Ｂ５」と表記したバッファモジュール４０）は、ホットスポットの後段に位置している画像合成モジュール４１と共に本発明に係る画像合成部を構成しており、個々の部分画像処理部の排他制御機能付きのバッファモジュール４０は請求項８に記載の「画像合成部の一部として機能するバッファモジュール」に対応している。
【００７６】
以上の処理によって画像処理部５０の構築が完了すると、処理管理部４６のワークフロー管理部４６Ａは、処理構築部４２によって生成された、画像処理部５０のプログラムを実行する複数のスレッドをＣＰＵ１２（やその他の演算リソース）によって並列に実行させると共に、画像処理部５０の最後段に位置している画像処理モジュール３８に処理要求を入力する。また、任意のバッファモジュール４０からデータ要求が入力される毎に、要求元のバッファモジュール４０の前段の画像処理モジュール３８に処理要求を入力し、任意の画像処理モジュールから処理完了通知が入力される毎に、通知元の画像処理モジュールに処理要求を入力することを、最後段の画像処理モジュールから全体処理の終了（１面分の画像データに対する画像処理の終了）が通知される迄繰り返す。これにより、個々の画像処理モジュール３８における画像処理を並列に行わせる並列処理方式で画像処理部５０が動作することになる。なお、処理管理部４６のワークフロー管理部４６Ａは、本発明に係る制御手段（より詳しくは請求項６，７に記載の制御手段）に対応している。
【００７７】
処理構築部４２によって当初構築された画像処理部５０のモジュール単位の処理負荷（ＣＰＵ処理時間）が、特定の画像処理モジュール３８に大きく偏っていた場合、モジュールを単位として複数のグループへの分割を行ったとしても、例えば図５(Ｂ)に示すように、個々のグループの処理負荷を平準化することは困難であり、各グループのプログラムを並列に実行した際の処理効率は大幅に低下する。これに対し、本実施形態では、先に説明した画像処理部分割処理において、画像処理部５０の各グループのうち処理負荷が最大のグループ（ホットスポット）を複数の部分画像処理部に分割（多重化）することが適当か否か判定し、複数の部分画像処理部への分割（多重化）が適当と判断した場合には、ホットスポット以外のグループの処理負荷（ＣＰＵ処理時間）となるべく等しくなるようにホットスポットの分割数ｎを決定してｎ個の部分画像処理部へ分割し、ｎ個の部分画像処理部のプログラムを互いに別のスレッドとして並列に実行するので、画像処理部５０のモジュール単位の処理負荷が特定の画像処理モジュール３８に大きく偏っている場合にも、画像処理部５０のプログラムの実行単位（スレッド）毎の処理負荷を均一又は均一に近づけることができ、各スレッドを並列に実行した際の処理効率の向上、ひいては処理時間の短縮を実現することができる。
【００７８】
また、複数の部分画像処理部を互いに別のスレッドとして並列に実行することで、ホットスポットの前段に位置しているバッファモジュール４０に対しては、個々の部分画像処理部の画像切出モジュール３９によってバッファ４０Ａが互いに非同期でアクセスされることになるが、本実施形態では上記のバッファモジュール４０として排他制御機能付きのバッファモジュールを用いているので、個々の画像切出モジュール３９によるバッファ４０Ａへのアクセスが競合することで処理がロックする等の不都合が生ずることを防止することができる。また、個々の部分画像処理部と画像合成モジュール４１も並列に動作するので、個々の部分画像処理部の最後段に設けられたバッファモジュール４０に対しては、前段の画像処理モジュール３８によるバッファ４０Ａのアクセスと、後段の画像合成モジュール４１によるバッファ４０Ａのアクセスが競合する可能性があるが、本実施形態ではこのバッファモジュール４０としても排他制御機能付きのバッファモジュールを用いているので、前段の画像処理モジュール３８及び後段の画像合成モジュール４１によるバッファ４０Ａへのアクセスが競合することで処理がロックする等の不都合が生ずることも防止することができる。
【００７９】
また、排他制御機能付きのバッファモジュールは、排他制御を行う分だけＣＰＵ１２等の演算リソースのオーバヘッドが増大することになるが、本実施形態では、排他制御機能付きのバッファモジュールを必要箇所（ホットスポットの前段を含む各グループの境界及び個々の部分画像処理部の最後段）にのみ設け、その他の箇所に設けられるバッファモジュールとしては排他制御機能無しのバッファモジュールを用いているので、バッファモジュールで排他制御を行うことに伴うＣＰＵ１２等の演算リソースのオーバヘッドの増大を必要最小限に抑制することができる。
【００８０】
なお、上記では単一の画像処理モジュール３８から成るグループ（ホットスポット）を複数の部分画像処理部へ分割（多重化）する態様を説明したが、これに限定されるものではなく、複数の部分画像処理部への分割（多重化）を行うグループは、複数の画像処理モジュール３８から成るグループであってもよい。
【００８１】
また、上記では画像処理部５０の複数のグループのうち、処理負荷が最大の単一のグループ（ホットスポット）についてのみ複数の部分画像処理部への分割（多重化）を行う態様を説明したが、これに限定されるものではなく、処理負荷の降順に所定数（複数）のグループを選択し、選択したのグループを各々ホットスポットとして複数の部分画像処理部への分割（多重化）を行うようにしてもよいし、分割（多重化）を行うグループの数を固定せずに不定数のグループを対象として複数の部分画像処理部への分割（多重化）を行うようにしてもよい。具体的には、例えば画像処理部５０のプログラムの実行と並行して、他のアプリケーション・プログラムもコンピュータ１０で実行されており、かつ他のアプリケーション・プログラムに対応する個々のスレッドのＣＰＵ処理時間が、画像処理部５０に対応する個々のスレッドのＣＰＵ処理時間と大きく相違している場合に、画像処理部５０に対応する個々のスレッドのＣＰＵ処理時間を他のアプリケーション・プログラムに対応する個々のスレッドのＣＰＵ処理時間に近づける等の目的で、画像処理部５０の全てのグループについて、分割（多重化）の有無及び分割数ｎ（多重化の数）を各々設定し、全グループのうち多重化有りに設定したグループを、当該グループに設定した分割数ｎと同数の部分画像処理部に分割するようにしてもよい。この態様は請求項５記載の発明に対応している。
【００８２】
また、上記では分割(多重化)対象の特定のグループを複数の部分画像処理部に分割(多重化)した後に、個々の部分画像処理部において、入力画像データが表す画像のうち互いに異なる画像領域のデータに対して画像処理を行わせる態様を説明したが、本発明はこれに限定されるものではなく、例えば分割数ｎがより多数である等の場合に、画像データに対し複数の画像領域への分割に加えて色毎の分割も行い、分割後のデータを個々の部分画像処理部に入力して画像処理を行わせるようにしてもよい。具体的には、例えば分割数ｎが９で、入力画像データがＲ,Ｇ,Ｂ３色のデータから構成されている場合、入力画像データが表す画像を３個の画像領域に分割すると共に、分割した個々の画像領域のデータを更にＲ,Ｇ,Ｂ各色毎に各々分割することで、入力画像データを９個のデータに分割し、各データを互いに異なる部分画像処理部に入力して画像処理を行わせるようにしてもよい。本発明は上記態様も権利範囲に含むものである。
【００８３】
更に、上記では画像処理部５０のホットスポットを複数の部分画像処理部に分割した後に、画像処理部５０のプログラムを実行する複数のスレッドをＣＰＵ１２（やその他の演算リソース）によって並列に実行させることで、画像処理部５０を並列処理方式で動作させる態様を説明したが、本発明は、常に単一の画像処理モジュール３８で画像処理を行わせると共に、画像処理を行わせる画像処理モジュール３８を逐次切り替える逐次処理方式で画像処理部５０を動作させる場合にも適用可能である。すなわち、画像処理部５０を逐次処理方式で動作させる場合であっても、画像処理部５０の処理負荷が特定の画像処理モジュールに偏っていると、当該特定の画像処理モジュールのみが画像処理を行っている期間の長さがネックとなって処理時間が増大する。ここで、演算リソースが複数存在している場合には、特定の画像処理モジュールを複数の部分画像処理部に分割し、複数の演算リソースによって複数の部分画像処理部を並列に動作させれば、処理時間を大幅に短縮することが可能となる。
【００８４】
また、上記では本発明に係る画像処理プログラムに対応する画像処理プログラム群３４が記憶部２０に予め記憶（インストール）されている態様を説明したが、本発明に係る画像処理プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【図面の簡単な説明】
【００８５】
【図１】本実施形態に係るコンピュータ（画像処理装置）の概略構成を示すブロック図である。
【図２】画像処理部の構成例を示すブロック図である。
【図３】(Ａ)は画像処理モジュール、(Ｂ)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。
【図４】処理構築部によって行われる画像処理部分割処理の内容を示すフローチャートである。
【図５】画像処理部分割処理による画像処理部の分割を説明するための画像処理部の一例を示すブロック図である。
【図６】ホットスポットを複数の部分画像処理部へ分割したときの、個々の部分画像処理部が処理対象とする画像領域を説明するためのイメージ図である。
【符号の説明】
【００８６】
１０  コンピュータ
１２  ＣＰＵ
２０  記憶部
３８  画像処理モジュール
３９  画像切出モジュール
４０ バッファモジュール
４１  画像合成モジュール
４２  処理構築部
４６  処理管理部
５０  画像処理部
【図１】
2009054001.tif 000003
【図２】
2009054001.tif 000004
【図３】
2009054001.tif 000005
【図４】
2009054001.tif 000006
【図５】
2009054001.tif 000007
【図６】
2009054001.tif 000008