以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
コンピュータ10はCPU12、メモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述した画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
図1に示すように、記憶部20には、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行うが(詳細は後述)、画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなる。
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や1画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション32が画像処理部の再構築を指示することで、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することが可能となる。
以下、画像処理プログラム群34について説明する。図1に示すように、画像処理プログラム群34はモジュールライブラリ36と、処理構築部42のプログラムと、処理管理部46のプログラムに大別される。本実施形態に係る処理構築部42は、アプリケーションからの指示により、例として図2に示すように、予め定められた画像処理を行う1つ以上の画像処理モジュール38と、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール40と、がパイプライン形態又はDAG(Directed Acyclic Graph:有向非循環グラフ)形態で連結されて成る画像処理部50を構築する。画像処理部50を構成する個々の画像処理モジュールの実体はCPU12によって実行されCPU12で画像処理を行わせるための第1プログラム、又は、CPU12によって実行されCPU12により図1に図示されていない外部の画像処理装置(例えば専用画像処理ボード等)に対する処理の実行を指示するための第2プログラムであり、上述したモジュールライブラリ36には、予め定められた互いに異なる画像処理(例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等)を行う複数種の画像処理モジュール38のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部50を構成する個々の画像処理モジュールの実体が上記の第1プログラムであるものとして説明する。
個々の画像処理モジュール38は、例として図3(A)にも示すように、画像データに対する画像処理を予め定めた単位処理データ量ずつ行う画像処理エンジン38Aと、画像処理モジュール38の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン38Aの制御を行う制御部38Bから構成されている。個々の画像処理モジュール38における単位処理データ量は、画像の1ライン分、画像の複数ライン分、画像の1画素分、画像1面分等を含む任意のバイト数の中から、画像処理エンジン38Aが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール38では単位処理データ量が1画素分とされ、拡大・縮小処理を行う画像処理モジュール38では単位処理データ量が画像の1ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール38では単位処理データ量が画像1面分とされ、画像圧縮伸長処理を行う画像処理モジュール38では単位処理データ量が実行環境に依存するNバイトとされている。
また、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている(図1では、この種の画像処理モジュールを「モジュール1」「モジュール2」と表記して示している)。例えば拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、例えば色変換処理を行う画像処理モジュール38については、RGB色空間をCMY色空間へ変換する画像処理モジュール38やその逆へ変換する画像処理モジュール38、L*a*b*色空間等の他の色空間変換を行う画像処理モジュール38が各々用意されている。
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データ量ずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば画像回転処理を行う画像処理モジュール38における単位処理データ量についても、前述した画像1面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる(例えば画像の1ライン分や複数ライン分等の)複数の画像処理モジュール38がモジュールライブラリ36に含まれていても良い。
また、モジュールライブラリ36に登録されている個々の画像処理モジュール38のプログラムは、画像処理エンジン38Aに相当するプログラムと制御部38Bに相当するプログラムから構成されているが、制御部38Bに相当するプログラムは部品化されており、個々の画像処理モジュール38のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール38は、画像処理エンジン38Aで実行される画像処理の種類や内容に拘わらず、制御部38Bに相当するプログラムが共通化されている(制御部38Bに相当するプログラムとして同一のプログラムが用いられている)。これにより、画像処理モジュール38のプログラムの開発にあたっての開発負荷が軽減される。
なお、画像処理モジュール38の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を予め定めた演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール38については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール38について、制御部38Bに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群34は、前述のように各種機器に実装可能であるが、画像処理プログラム群34のうちモジュールライブラリ36に登録する画像処理モジュール38の数や種類等については、画像処理プログラム群34を実装する各種機器で必要とされる画像処理に応じて、追加・削除・入替等が可能であることは言うまでもない。
また、画像処理部50を構成する個々のバッファモジュール40は、例として図3(B)にも示すように、バッファ40Aと、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行うバッファ制御部40Bから構成されている。なお、バッファ40Aはコンピュータ10に設けられたメモリ14(或いはストレージ、例えばHDD等から成る記憶部20等))からオペレーティングシステム30及びリソース管理部46Cを通じてバッファ制御部40Bが確保した記憶領域で構成される。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。
また図1に示すように、処理管理部46は、画像処理部50における画像処理の実行を制御する処理フロー管理部46A、画像処理部50で発生したエラーを管理するエラー管理部46B、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10のリソースの使用を管理するリソース管理部46C、及び、画像処理部50の個々のバッファモジュール40におけるバッファ40Aのサイズを管理するバッファサイズ管理部46Dを含んで構成されている。なお、エラー管理部46Bは、画像処理部50が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群34がインストールされたコンピュータ10が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部20等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。
次に本実施形態の作用を説明する。画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション32は、画像処理対象の画像データを供給する画像データ供給部22の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合には、画像データ供給部22として指定されたバッファ領域を既に確保されたバッファ40Aとしてバッファ制御部40Bに認識させるパラメータを設定し、バッファ制御部40Bのプログラムを実行するスレッド(プロセス又はオブジェクトでもよい:以下同様)を生成する(バッファ制御部40Bを生成する)ことで、指定されたバッファ領域を含むバッファモジュール40(画像データ供給部22として機能するバッファモジュール40)を生成する。
続いてアプリケーション32は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する。ここで生成されたバッファモジュール40は画像出力部24として機能する。また、アプリケーション32は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
そしてアプリケーション32は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部44を起動(モジュール生成部44のプログラムを実行するスレッドを生成)した後に、起動したモジュール生成部44に対し、当該モジュール生成部44によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータ等を通知して、対応するモジュール群の生成を指示する。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は、指示したモジュール生成部44からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部44を起動してモジュール群の生成に必要な情報を通知する処理を個々の画像処理の実行順序の昇順に繰り返す。
なお、上記の入力モジュールは、実行順序が1番目のモジュール群については画像データ供給部22が入力モジュールとなり、実行順序が2番目以降のモジュール群については前段のモジュール群の最終モジュール(通常はバッファモジュール40)が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部24が出力モジュールとなるので、画像出力部24が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション32による指定は行われず、必要な場合はモジュール生成部44によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション32が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
一方、モジュール生成部44は、アプリケーション32によって起動されるとモジュール生成処理を行う。モジュール生成処理では、まず生成対象の画像処理モジュール38に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール38の前段にバッファモジュール40が存在している場合、当該バッファモジュール40に画像データの書き込みを行う更に前段の画像処理モジュール38から出力画像データの属性を取得することによって実現できる。
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール38の生成が必要か否か判定する。例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定された場合、取得した入力画像属性情報に基づいて入力画像データがRGB色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール38としてRGB→CMYの色空間変換を行う画像処理モジュール38を生成する必要があるが、入力画像データがCMY色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール38は生成不要と判断する。
生成対象の画像処理モジュール38の生成が必要と判断した場合には、生成対象の画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図2(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図2(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定されてバッファ制御部40Bを起動することで、画像処理モジュール38の後段に連結するバッファモジュール40を生成する。
続いて、前段のモジュール(例えばバッファモジュール40)の情報、後段のバッファモジュール40の情報(後段にバッファモジュール40を生成した画像処理モジュール38のみ)、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択・生成する。
例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間が指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択・生成され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択・生成される。
なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いはユーザに選択させるようにしてもよい。
またモジュール生成部44が、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38によって実現されるスキュー補正処理)を行うモジュール群を生成する場合には、上記処理が繰り返されて2個以上の画像処理モジュール38を含むモジュール群が生成される。アプリケーション32によって順次起動された個々のモジュール生成部44により、以上のモジュール生成処理が順次行われることで、例として図2(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築される。
更に、モジュール生成部44が生成する画像処理モジュール38が、別の画像処理モジュール38による画像処理の結果(例えばヒストグラム等の画像解析処理結果)を用いて画像処理を行うモジュールであり、前記別の画像処理モジュール38が未生成の場合には、モジュール生成部44によって前記別の画像処理モジュール38(或いは前記別の画像処理モジュール38を含むモジュール群)の生成も行われる。
一方、処理構築部42は、アプリケーション32からの指示に従い、画像処理部50を構成する個々のモジュールを順次生成する上述した処理と並行して、処理管理部46のプログラムを実行するスレッドを生成することで、コンピュータ10上で動作する処理管理部46の処理フロー管理部46A、、エラー管理部46Bリソース管理部46C及びバッファサイズ管理部46Dを各々生成する処理も行う。また、処理フロー管理部46Aは管理対象のモジュールの識別情報を登録するための管理テーブルを備えており、処理構築部42は、アプリケーション32からの指示に従って新たな画像処理モジュール38が生成される毎に、新たに生成された画像処理モジュール38の識別情報(ID)を、当該画像処理モジュール38の後段に連結されたバッファモジュール40の識別情報(ID)と対応付け、処理フロー管理部46Aの管理テーブルに登録する。なお、上記の識別情報(ID)は個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。
次に、上記の処理で構築された画像処理部50で画像処理が行われる際の個々の画像処理モジュール38及びバッファモジュール40の動作を順に説明する。
画像処理が実行される際には、対応する処理フロー管理部46Aから個々の画像処理モジュール38に処理要求が入力される(図3(A)の(1)も参照)。画像処理モジュール38は、処理要求が入力されると、予め設定された識別情報で規定されている自モジュールの前段のモジュール(通常はバッファモジュール40)に対して画像データを要求する(図3(A)の(2)も参照)。ここで、前段のバッファモジュール40にバッファ40Aが存在しており、当該バッファ40Aに読出可能な有効データが自モジュールの単位読出データ量以上記憶されている場合には、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、画像処理モジュール38は先頭アドレスが通知された前段のモジュールの読出領域から単位読出データ量の画像データを読み出す(図3(A)の(3)も参照)。
次に、画像処理モジュール38は自モジュールの後段のモジュールに対し、自モジュールの単位書込データ量と同サイズのデータ出力用の領域を要求し、データ出力領域(後段のモジュールがバッファモジュール40であれば当該バッファモジュール40から先頭アドレスが通知された書込領域)が取得できたら(図3(A)の(4)も参照)、先に前段のモジュールから取得した画像データ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)を画像処理エンジン38Aに入力し、入力したデータに対して予め定めた画像処理を行わせる(図3(A)の(5)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図3(A)の(6)も参照)。そして、画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力された単位書込データ量のデータがデータ出力領域に全て書き込まれると、出力完了を後段のモジュールに通知すると共に、先に入力された処理要求に対応する処理を完了したことを処理要求元(対応する処理フロー管理部46A)へ通知する(図3(A)の(7)も参照)。個々の画像処理モジュール38で上記処理が繰り返されることで、画像処理部50における画像処理が実現される。
また、バッファモジュール40のバッファ制御部40Bは、予め設定された識別情報で規定されている自モジュールの後段のモジュール(通常は画像処理モジュール38)から画像データが要求されると(図3(B)の(1)も参照)、バッファ40Aが存在しているか否かをチェックし、更に、要求された画像データがバッファ40Aに記憶されているか否かをチェックする(図3(B)の(2)も参照)。ここで、バッファ40Aが存在しない場合、バッファ制御部40Bはリソース管理部46Cを通じてバッファ40Aを確保する。本実施形態では、バッファ確保サイズの初期値が、バッファモジュール40の後段の画像処理モジュール38から通知された単位読出データ量と、バッファモジュール40の前段の画像処理モジュール38から通知された単位書込データ量と、のうちの大きい方と同サイズとされており、当該サイズのバッファ40Aがリソース管理部46Cを通じて確保される。
また、バッファ40Aを新たに確保した場合、或いは、バッファ40Aは存在しているものの、当該バッファ40Aに後段の画像処理モジュール38が読出可能な有効データが後段の画像処理モジュール38の単位読出データ量以上記憶されていない場合は、処理フロー管理部46Aに対して画像データを要求する(図3(B)の(3)も参照)。ここで、処理フロー管理部46Aは、画像データ要求元のバッファモジュール40の識別情報(ID)をキーにして管理テーブルを検索し、画像データ要求元のバッファモジュール40の識別情報(ID)と対応付けて管理テーブルに識別情報(ID)が登録されている画像処理モジュール38を、画像データ要求元のバッファモジュール40の前段に位置している画像処理モジュール38と認識し、認識した画像処理モジュール38に処理要求を入力する(図3(B)の(4)も参照)。
そして、図3(A)に示したシーケンスを経て、前段の画像処理モジュール38によってバッファ40Aに画像データが書き込まれ(図3(B)の(5),(6)も参照)、バッファ40Aから読出可能な有効データが後段の画像処理モジュール38の単位読出データ量以上になると、バッファモジュール40から後段の画像処理モジュール38に対して読出領域の先頭アドレスが通知され、後段の画像処理モジュール38によってバッファモジュール40のバッファ40Aから画像データが読み出されることになる(図3(B)の(7)も参照)。
なお、図3では図示を省略するが、画像処理モジュール38は、前段のバッファモジュール40のバッファ40Aから単位読出データ量の画像データの読み出しが完了する毎に、前段のバッファモジュール40に対して画像データの読み出しが完了したバッファ40Aの解放を指示する。また、バッファモジュール40は、後段の画像処理モジュール38からバッファ40Aの解放が指示されると、通常、解放が指示されたバッファ40Aをリソース管理部46Cを通じて解放する。但し、後段に複数の画像処理モジュール38が連結されているバッファモジュール40(例えば図2(B)に示す画像処理部50において、スキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38と後段に各々連結されたバッファモジュール40等)については、後段の何れかの画像処理モジュール38からバッファ40Aの解放が指示された場合であっても、解放が指示されたバッファ40Aに記憶されている画像データが後段の全ての画像処理モジュール38によって読み出される迄はバッファ40Aの解放を保留する。
一方、先の処理管理部生成処理によって生成された個々の処理管理部46の処理フロー管理部46Aは、画像処理部50の構築完了を検知したアプリケーション32から画像処理の実行が指示されると、画像処理部50の最後段に位置している画像処理モジュール38に処理要求を入力し、任意のバッファモジュール40からデータ要求が入力される毎に、前述のように管理テーブルの検索を行うことで、データ要求入力元のバッファモジュール40の前段の画像処理モジュール38を認識し、認識した画像処理モジュール38に処理要求を入力する。また、画像処理部50の最後段に位置している画像処理モジュール38から処理完了通知が入力される毎に、前記最後段に位置している画像処理モジュール38に処理要求を再度入力することを、前記最後段に位置している画像処理モジュール38から全体処理の終了(処理対象の画像データ(例えば1フレーム分の画像データ)に対する画像処理の終了)が通知される迄繰り返す。そして、前記最後段に位置している画像処理モジュール38から全体処理の終了が通知されると、画像処理の実行を指示したアプリケーション32に対して管理対象のモジュール群における画像処理の実行終了を通知する。
また、画像処理部50で画像処理が開始されると、バッファサイズ管理部46Dは、処理フロー管理部46Aにおける処理と並行して、図4に示すバッファサイズ管理処理を行う。本実施形態に係るバッファサイズ管理処理では、画像処理部50のバッファモジュール40のうち、画像データ供給部22や画像出力部24として機能するバッファモジュール40を除いた個々のバッファモジュール40を管理対象としており、まずステップ50では、管理対象の個々のバッファモジュール40について、データ要求回数を計数するための記憶領域及び設定フラグの記憶領域をメモリ14に設け、設けた各記憶領域に各々0を設定する。なお、上記処理では管理対象の個々のバッファモジュール40について、後段に連結されている画像処理モジュール38の数も確認され、データ要求回数の記憶領域が、後段に連結されている画像処理モジュール38の数と同数だけ設けられる。
次のステップ52では、管理対象の何れかのバッファモジュール40から処理フロー管理部46Aにデータ要求が入力されたか否か判定する。判定が否定された場合はステップ66へ移行し、管理対象の何れかのバッファモジュール40でバッファ40Aが解放されたか否か判定する。この判定も否定された場合はステップ80へ移行し、画像処理部50における画像処理(全体処理)が終了したか否か判定する。この判定も否定された場合はステップ52に戻り、ステップ52,66,80の何れかの判定が肯定される迄ステップ52,66,80を繰り返す。
また、管理対象の何れかのバッファモジュール40から処理フロー管理部46Aにデータ要求が入力され、これに伴い、データ要求が入力されたことがデータ要求入力元のバッファモジュール40の識別情報(ID)と共に処理フロー管理部46Aから通知されると、ステップ52の判定が肯定されてステップ56へ移行し、通知された識別情報(ID)に基づいて認識したデータ要求入力元のバッファモジュール40に対応する設定フラグが0か否か判定する。個々のバッファモジュール40に対応する設定フラグは先のステップ50で各々0が設定されているので、当初はこの判定が肯定されてステップ58へ移行し、認識したデータ要求入力元のバッファモジュール40の後段に複数の画像処理モジュール38が存在しているか否か判定する。
ステップ58の判定が否定された場合はステップ60へ移行し、データ要求入力元のバッファモジュール40に対応するデータ要求回数を1だけインクリメントした後にステップ66へ移行する。また、ステップ58の判定が肯定された場合はステップ62へ移行し、データ要求入力元のバッファモジュール40から今回入力されたデータ要求が、データ要求入力元のバッファモジュール40の後段に存在する複数の画像処理モジュール38のうち何れの画像処理モジュール38からバッファモジュール40に入力されたデータ要求であるかを判断することで、今回のデータ要求の出力元の画像処理モジュール38を認識する。そしてステップ64では、データ要求入力元のバッファモジュール40に対応する複数のデータ要求回数のうち、ステップ62で認識したデータ要求の出力元の画像処理モジュール38に対応するデータ要求回数を1だけインクリメントした後にステップ66へ移行する。
このように、本実施形態に係るバッファサイズ管理処理では、管理対象の何れかのバッファモジュール40から処理フロー管理部46Aへデータ要求が入力される毎に、データ要求入力元のバッファモジュール40(及びデータ要求の出力元の画像処理モジュール38)に対応するデータ要求回数を1ずつインクリメントすることで、後段の個々の画像処理モジュール38からバッファモジュール40にデータ要求が入力された回数が、管理対象の個々のバッファモジュール40について各々計数される。なお、上述したステップ50〜ステップ64は本発明に係る制御手段のうち、請求項4に記載の「画像処理部の各バッファモジュールについて、データ要求のパターンを各々検出」するステップに対応している。
また、管理対象の何れかのバッファモジュール40でバッファ40Aが解放された場合には、前述のステップ66の判定が肯定されてステップ68へ移行し、バッファ40Aが今回解放されたバッファモジュール40の後段に複数の画像処理モジュール38が存在しているか否か判定する。判定が否定された場合はステップ72へ移行し、バッファ40Aが今回解放されたバッファモジュール40に対応するデータ要求回数(の計数結果)を参照する。そしてステップ74では、バッファ40Aが今回解放されたバッファモジュール40におけるバッファ確保サイズを、ステップ72で参照したデータ要求回数に応じて決定する。具体的には、例えばデータ要求回数(の計数結果)がNである場合、バッファ確保サイズは、バッファ40Aが今回解放されたバッファモジュール40の後段の画像処理モジュール38における単位読出データ量のN倍、又は、バッファ40Aが今回解放されたバッファモジュール40におけるバッファ確保サイズの初期値のN倍に相当するサイズ、或いはそれ以上のサイズに決定することができる。
また、ステップ68の判定が肯定された場合はステップ70へ移行し、バッファ40Aが今回解放されたバッファモジュール40において確保されていたバッファ40Aが全て解放された否か判定する。判定が否定された場合はステップ80へ移行し、バッファ40Aが今回解放されたバッファモジュール40において、確保されていたバッファ40Aが全て解放される迄バッファ確保サイズの決定を保留する。そして、後段に複数の画像処理モジュール38が存在しているバッファモジュール40で確保されていたバッファ40Aが全て解放されると、ステップ70の判定が肯定されてステップ72へ移行し、データ要求回数(の計数結果)が参照され、次のステップ74でバッファ確保サイズが決定される。この場合のバッファ確保サイズとしては、例えば後段の複数の画像処理モジュール38のうちの特定の画像処理モジュール38に対応するデータ要求回数(の計数結果)がM1であるとすると、バッファ確保サイズは、前記特定の画像処理モジュール38における単位読出データ量のM1倍に相当するサイズとしてもよいし、複数の画像処理モジュール38の各々に対応するデータ要求回数(の計数結果)の最大値がMmaxであるとすると、バッファ40Aが今回解放されたバッファモジュール40におけるバッファ確保サイズの初期値のMmax倍に相当するサイズとしてもよいし、それ以上のサイズとしてもよい。
次のステップ76では、ステップ74で決定したバッファ確保サイズを、バッファ40Aが今回解放されたバッファモジュール40に設定する。これにより、バッファモジュール40が次回以降にバッファ40Aの確保を行う際には、今回設定したバッファ確保サイズのバッファ40Aが確保されることになる。続いてステップ78では、ステップ76でバッファ確保サイズを設定したバッファモジュール40の設定フラグに設定完了を意味する「1」を設定し、ステップ80へ移行する。これにより、ステップ74で決定したバッファ確保サイズが設定されたバッファモジュール40に対しては、以後、ステップ56の判定が否定されることで、データ要求回数の計数やその結果に基づくバッファ確保サイズの決定・設定(更新)は行われない。なお、上述したステップ66〜ステップ78は本発明に係る制御手段に対応している。
上述したバッファサイズ管理処理について、一例を挙げて更に説明する。画像処理部50で画像処理が開始された場合、バッファモジュール40は、後段の画像処理モジュール38からデータ要求が入力される毎に、前述のように、バッファ確保サイズの初期値と同サイズのバッファ40Aを確保した後に、処理管理部46(の処理フロー管理部46A)へデータ要求を出力する(図3(B)及び図5(A)の(1)〜(3)も参照)処理を行い、。これに伴い、処理管理部46(の処理フロー管理部46A)からバッファモジュール40の前段の画像処理モジュール38へ処理要求が入力され、前段の画像処理モジュール38によってバッファ40Aに画像データが書き込まれ、バッファ40Aに書き込まれた画像データが後段の画像処理モジュール38によって読み出される (図3(B)の(4)〜(7)及び図5(A)の(4)〜(6)も参照)。またバッファモジュール40は、後段の画像処理モジュール38からバッファ40Aの解放が指示される毎に、後段の画像処理モジュール38による画像データの読み出しが完了したバッファ40Aをバッファ確保サイズの初期値と同サイズずつ解放する。
ここで、個々の画像処理モジュール38から前段のバッファモジュール40へのデータ要求及びバッファ解放の出力パターンは、画像処理部50の構築を指示するアプリケーション32による処理の内容に依存し、図5に示すようにバッファモジュール40の後段に単一の画像処理モジュール38(図5では「画像処理B」と表記)が連結された構成において、例えば図5(A)〜(C)に示すように、後段の画像処理モジュール38からデータ要求が複数(N)回連続して前段のバッファモジュール40へ出力された後に、後段の画像処理モジュール38から前段のバッファモジュール40へバッファ解放が指示される(図5(D)参照)ことがある。
これに対して本実施形態に係るバッファサイズ管理処理では、上記の場合、後段の画像処理モジュール38から前段のバッファモジュール40へのデータ要求の連続入力の回数がデータ要求回数として計数され、データ要求回数の計数結果に従ってバッファ確保サイズが決定されて設定(変更)されるので、後段の画像処理モジュール38から前段のバッファモジュール40へのデータ要求の入力が以降にN回連続した場合、データ要求が最初に入力された際により大サイズ(例えばバッファ確保サイズの初期値のN倍のサイズ)のバッファ40Aが確保される(図5(E)参照)一方、2回目以降にデータ要求が入力された際にはバッファ40Aを新たに確保する必要が無くなるのでバッファ40Aの確保が省略され(図5(F)参照)、バッファ40Aを確保する処理が行われる回数が削減される。同様にバッファ40Aの解放についても、設定変更後のバッファ確保サイズのバッファ40Aを単位としてバッファ40Aの解放が行われるので、バッファ40Aを解放する処理が行われる回数が削減される。
また、図6に示すようにバッファモジュール40の後段に複数の画像処理モジュール38(図6では「画像処理B」と表記した画像処理モジュール38と「画像処理C」と表記した画像処理モジュール38の2個)が連結された構成においても、例えば図6(A)〜(D)に示すように、何れかの画像処理モジュール38からデータ要求及びバッファ解放指示が複数(M)回連続して前段のバッファモジュール40へ出力された後に、他の画像処理モジュール38からデータ要求及びバッファ解放指示が複数(M)回連続して前段のバッファモジュール40へ出力されることがある。
これに対して本実施形態に係るバッファサイズ管理処理では、上記の場合にも、後段の個々の画像処理モジュール38から前段のバッファモジュール40へのデータ要求の連続入力の回数がデータ要求回数として計数され、データ要求回数の計数結果に従ってバッファ確保サイズが決定されて設定(変更)されるので、後段の複数の画像処理モジュール38から前段のバッファモジュール40へのデータ要求及びバッファ解放指示の入力が同じパターンで繰り返された場合、データ要求が最初に入力された際により大サイズ(例えばバッファ確保サイズの初期値のM倍のサイズ)のバッファ40Aが確保される(図6(E)参照)一方、2回目以降にデータ要求が入力された際にはバッファ40Aを新たに確保する必要が無くなるのでバッファ40Aの確保が省略され、バッファ40Aを確保する処理が行われる回数が削減される。バッファ40Aの解放についても、設定変更後のバッファ確保サイズのバッファ40Aを単位としてバッファ40Aの解放が行われるので、バッファ40Aを解放する処理が行われる回数が削減される。
なお、図4に示すバッファサイズ管理処理では、後段に複数の画像処理モジュール38が連結されたバッファモジュール40に対し、確保していた全てのバッファ40Aが解放されるのを待ってバッファ確保サイズの決定及び設定を行っていたが、本発明はこれに限定されるものではなく、例えば、後段の何れかの画像処理モジュール38からバッファ40Aの解放が指示されたこと、或いはデータ要求出力元の画像処理モジュール38が切り替わったことをトリガとして、確保していた全てのバッファ40Aが解放される前にバッファ確保サイズの決定及び設定を行うようにしてもよい。
また、上記では前段の画像処理モジュール38から後段のバッファモジュール40に対し画像データが単位書込データ量ずつバッファ40Aに書き込まれる態様を説明したが、例えば前段の画像処理モジュール38が圧縮された画像データをバッファ40Aに書き込む構成である場合には、前段の画像処理モジュール38から後段のバッファモジュール40のバッファ40Aに書き込まれる画像データのデータ量が不定となる。このため、この場合、バッファモジュール40のバッファ制御部40Bにより、バッファ40Aとして可変長のデータを記憶可能なストレージ(例えばHDD等)が確保されるように制御することが好ましい。なお、上記態様は請求項5記載の発明に対応している。
また、上記では処理管理部46にバッファサイズ管理部46Dを設け、本発明に係る制御手段に相当する処理を処理管理部46で行う態様を説明したが、本発明はこれに限定されるものではなく、バッファサイズ管理部46Dに相当する機能を個々のバッファモジュール40に設け、本発明に係る制御手段に相当する処理個々のバッファモジュール40で行うようにしてもよい。
更に、上記では本発明に係る画像処理プログラムに対応するプログラム(処理管理部46のプログラムのうちバッファサイズ管理部46Dとして機能するプログラム)が記憶部20に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。