画像処理装置及び方法ならびにプログラム
【課題】画像処理モジュール及びバッファモジュールがパイプライン等の形態で連結されて成る画像処理部において、画像処理モジュールの処理時間の計測を、計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現する。
【解決手段】前段から画像データを取得して画像処理を行い、画像処理を経た画像データを後段へ出力する画像処理モジュール38と、前段からの画像データをバッファに書き込ませ、バッファに記憶されている画像データを後段によって読み出させる処理を行うバッファモジュール40をパイプライン形態等で連結した画像処理部50の構築にあたり、動作モードとして計測モードが選択されている場合は、画像処理モジュール38とワークフロー管理部46Aの間に、情報の送受を中継すると共に処理時間の計測を行う処理時間計測モジュール48を設ける。
【解決手段】前段から画像データを取得して画像処理を行い、画像処理を経た画像データを後段へ出力する画像処理モジュール38と、前段からの画像データをバッファに書き込ませ、バッファに記憶されている画像データを後段によって読み出させる処理を行うバッファモジュール40をパイプライン形態等で連結した画像処理部50の構築にあたり、動作モードとして計測モードが選択されている場合は、画像処理モジュール38とワークフロー管理部46Aの間に、情報の送受を中継すると共に処理時間の計測を行う処理時間計測モジュール48を設ける。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は画像処理装置及び方法ならびにプログラムに係り、特に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を備えた画像処理装置、当該画像処理装置に適用可能な画像処理方法、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
【背景技術】
【0002】
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なDTP(デスクトップ・パブリッシング)システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わせる場合もあるが、例えば色空間や1画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
【0003】
このような要求を満たすために、例えば特許文献1には、実行する画像処理の種類や内容等が相違する複数種の画像処理モジュールのプログラムを各々用意しておき、複数種の画像処理モジュール(のプログラム)を任意に組み合わせ、所望の画像処理を行う画像処理部を構築することを可能にする技術が開示されており、更に、画像処理部全体としての画像処理の進行度合を把握するために、画像処理部の画像処理モジュールとバッファモジュールとの間に進行度合検知モジュールを挿入し、この進行度合検知モジュールによって画像処理部における画像処理の進行度合を検知する構成も開示されている。
【0004】
また、特許文献2には、同一の画像のうちの割当部分に対して画像処理を行う複数の画像処理演算部(CPU)が処理時間を各々計時し、処理時間に応じて各演算部への割当部分のサイズ(配分率)を更新する技術が開示されている。
【0005】
また、特許文献3には、複数のPDL処理部に、各処理部における処理の待機時間を計測する待機状態計測部が各々設けられた構成が開示されており、計測された待機時間が所定値になるとデータを供給する処理の優先度を上げることも記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−140042号公報
【特許文献2】特開2006−164000号公報
【特許文献3】特開2006−146339号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のように、複数種の画像処理モジュールを任意に組み合わせて所望の画像処理を行う画像処理装置を構築する技術に対しては、例えば画像処理部で実行される一連の画像処理のボトルネックを検知したり、個々の画像処理モジュールで実行される画像処理のアルゴリズムの改良を検討したり、画像処理部を構成する画像処理モジュールの最適な組み合わせを検討する等を目的として、画像処理部の個々の画像処理モジュール単位で画像処理の処理時間を計測し、個々の画像処理モジュールで実行される画像処理の処理時間や処理速度を正確に把握したい、というニーズが存在する。
【0008】
これに対して特許文献1に記載の技術は、画像処理モジュールによって後段のバッファモジュールに書き込まれた画像データのデータ量に基づいて画像処理の進行度合を検知するものであり、この技術を適用したとしても、個々の画像処理モジュールにおける画像処理の処理時間を把握することは不可能である。
【0009】
また、特許文献2に記載の技術は、複数の画像処理演算部が、画像処理を行うと共に、その画像処理に要した時間を計時することを各々繰り返し、個々の画像処理演算部の計時結果に応じて個々の画像処理演算部に割り当てる部分のサイズ(配分率)を適宜変更する構成であり、特許文献2に記載の技術を利用して画像処理の処理時間の計時結果を得るようにした場合、処理時間の計測結果が不要な場合にも処理時間の計時や配分率の変更等を行うことに伴う負荷が加わり、コンピュータの処理能力を有効に利用することができないという問題が生ずる。また特許文献2には、処理時間を計時するための具体的な構成が開示されていない。
【0010】
また、特許文献3に記載の技術は、PDLコマンド処理部のステートマシーンが動作状態を表す信号を常時入力し、当該信号が表す動作状態が待機状態の間、タイマをインクリメントすることで、待機時間を計測する構成であり、上記に代えて動作状態が画像処理実行中の間、タイマをインクリメントする構成とすれば、画像処理の処理時間を計測することは可能である。しかしながら、その場合、個々の画像処理モジュールに、自モジュールの動作状態を常に出力する機能を付加する必要があり、個々の画像処理モジュールのプログラムを各々変更する必要が生ずる。
【0011】
本発明は上記事実を考慮して成されたもので、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現できる画像処理装置、画像処理方法及び画像処理プログラムを得ることが目的である。
【課題を解決するための手段】
【0012】
上記目的を達成するために請求項1記載の発明に係る画像処理装置は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段と、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段と、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段と、を含んで構成されている。
【0013】
請求項1記載の発明では、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、画像処理モジュールに付加可能で、自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、が記憶手段に各々記憶されている。
【0014】
また構築手段は、記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する。このように、動作モードが通常モードの場合、すなわち処理時間の計測を行わない場合には、処理計測モジュールを含まない画像処理部が構築されるので、処理時間の計測を行わない場合に、画像処理部を実現するプログラムを実行するコンピュータの負荷が増大することが防止される。
【0015】
また構築手段は、指定された動作モードが計測モードの場合には、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、画像処理部を構成する1つ以上の画像処理モジュールに処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、収集手段は、動作モードが計測モードの場合、構築手段によって構築された画像処理部に含まれる処理計測モジュールによって計測された画像処理の処理時間を収集する。
【0016】
ここで、処理計測モジュールは、前述のように自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する構成であるので、画像処理部で画像処理が実行される際には、処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間が処理計測モジュールによって計測される。また、処理計測モジュールが画像処理の処理時間を計測するにあたり、例えば画像処理モジュールが自モジュールの動作状態を表す情報を出力したりする必要はなく、画像処理モジュールを実現するプログラムの変更は不要である。
【0017】
従って、請求項1記載の発明によれば、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【0018】
なお、請求項1記載の発明において、動作モードが計測モードの場合に、構築手段によって構築された画像処理部に含まれ、かつ画像処理モジュールに付加された処理計測モジュールは、例えば請求項2に記載したように、処理開始前に処理時間の積算値を初期化し、自モジュールが付加された前記画像処理モジュールへの処理要求を処理要求の入力元から受け付ける度に、受け付けた処理要求を画像処理モジュールに転送すると共に処理時間の計測を開始し、画像処理モジュールから応答が出力される度に、応答を処理要求の入力元へ転送すると共に、処理時間の計測を終了し、当該計測によって得られた処理時間を積算値に加算し、収集手段に対し、画像処理の処理時間の計測結果として前記積算値を出力するように構成することができる。
【0019】
請求項1記載の発明において、収集手段は、画像処理部が画像処理を行っている間、処理計測モジュールによって処理時間が計測される度に(処理計測モジュールが付加された画像処理モジュールで単位処理量の画像処理が行われる度に)、処理時間の計測結果を収集するように構成することも可能であるが、上記のように、計測した処理時間を積算値として積算するように処理計測モジュールを構成することで、画像処理部が画像処理を行っている間、収集手段が処理時間の計測結果を収集する必要が無くなり、処理時間の計測結果の収集が、画像処理部における画像処理が終了した後の1回のみで済む。これにより、動作モードが計測モードの場合に、画像処理部を実現するプログラムを実行するコンピュータの負荷を軽減することができる。
【0020】
また、請求項1又は請求項2記載の発明において、構築手段によって構築された画像処理部に含まれる画像処理モジュールは、例えば請求項3に記載したように、処理開始前に自モジュールの前段の全モジュールの情報を取得・登録しておき、登録した情報に基づき自モジュールの前段の全モジュールから画像データを各々取得する構成であり、処理計測モジュールは、自モジュールが付加された画像処理モジュールの前段のモジュールの数に拘わらず同一の構成であることが好ましい。これにより、処理計測モジュールを付加する画像処理モジュールの前段に連結されるモジュールの数毎に、構成の異なる処理計測モジュール(のプログラム)を用意する必要が無くなり、記憶手段の記憶領域を節減できると共に、構築手段が画像処理部を構築する処理を簡単にすることができる。
【0021】
また、請求項1〜請求項3の何れかに記載の発明において、例えば請求項4に記載したように、収集手段によって収集された画像処理の処理時間を出力するか、又は、収集手段によって収集された画像処理の処理時間に基づいて、画像処理の処理速度を演算して出力する出力手段を更に設けるようにしてもよい。
【0022】
また、請求項4記載の発明において、例えば請求項5に記載したように、収集手段は、画像処理モジュールに付加された処理計測モジュールが画像処理部に複数存在している場合、複数の処理計測モジュールから画像処理の処理時間の計測結果を各々収集し、出力手段は、第1の処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間として、第1の処理計測モジュールより収集された処理時間から、第1の処理計測モジュールの前段に位置する第2の処理計測モジュールより収集された処理時間を減算することを、複数の処理計測モジュールのうち自モジュールの前段に他の処理計測モジュールが存在する処理計測モジュールついて各々行うことで、処理計測モジュールが付加された個々の画像処理モジュールにおける画像処理の処理時間を各々演算するように構成することが好ましい。これにより、画像処理部に、処理計測モジュールが付加された画像処理モジュールが複数存在している場合にも、個々の画像処理モジュールにおける画像処理の正確な処理時間を各々得ることができる。
【0023】
また、請求項1〜請求項5の何れかに記載の発明において、例えば請求項6に記載したように、画像処理部に含まれる個々のモジュールの情報が登録されたテーブルを参照することで、画像処理部に含まれる個々の画像処理モジュールを認識し、画像処理部に含まれる個々の画像処理モジュールに対し、個々の画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する毎に処理要求を入力する処理管理手段を更に設けることができる。
【0024】
また、請求項6記載の発明において、処理管理手段は、例えば請求項7に記載したように、構築手段によって構築された画像処理部に含まれる各モジュールの情報をテーブルに登録すると共に、動作モードが計測モードの場合に、処理計測モジュールの情報については、当該処理計測モジュールが付加された画像処理モジュールの情報と対応付けてテーブルに登録し、画像処理部に含まれる個々の画像処理モジュールのうち、対応する情報を処理計測モジュールの情報と対応付けてテーブルに登録した画像処理モジュールについては、処理要求を処理計測モジュールに入力するように構成することができる。
【0025】
また、請求項6記載の発明において、例えば請求項8に記載したように、画像処理モジュールは、処理要求が入力されると自モジュールの前段へデータ要求を出力し、バッファモジュールは、自モジュールの後段からデータ要求が入力され、自モジュールのバッファに画像データが記憶されていない場合に処理管理手段へデータ要求を出力し、処理管理手段は、画像処理部に含まれるバッファモジュールからデータ要求が入力された場合に、バッファモジュールの前段に位置する画像処理モジュールにおける画像処理の実行タイミングが到来したと判断するように構成することができる。
【0026】
請求項9記載の発明に係る画像処理方法は、記憶手段は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶し、構築手段は、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、収集手段は、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集するので、請求項1記載の発明と同様に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【0027】
請求項10記載の発明に係る画像処理プログラムは、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段を備えたコンピュータを、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段、及び、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段として機能させる。
【0028】
請求項10記載の発明に係る画像処理プログラムは、上記の記憶手段を備えたコンピュータを、上記の構築手段及び収集手段として機能させるためのプログラムであるので、コンピュータが請求項10記載の発明に係る画像処理プログラムを実行することで、コンピュータが請求項1に記載の画像処理装置として機能することになり、請求項1記載の発明と同様に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【発明の効果】
【0029】
以上説明したように本発明は、画像処理モジュールに付加可能で、自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムを記憶手段に記憶しておき、指定された動作モードが計測モードの場合に、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、画像処理部を構成する1つ以上の画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、処理計測モジュールによって計測された画像処理の処理時間を収集するようにしたので、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現できる、という優れた効果を有する。
【図面の簡単な説明】
【0030】
【図1】本実施形態に係るコンピュータ(画像処理装置)の概略構成を示すブロック図である。
【図2】アプリケーションによる処理を説明するためのシーケンス図である。
【図3】モジュール生成部によって実行されるモジュール生成処理の内容を示すフローチャートである。
【図4】画像処理部の構成例を示すブロック図である。
【図5】処理時間計測モジュールが挿入された画像処理部の例を示すブロック図である。
【図6】(A)は画像処理モジュール単独での動作、(B)は画像処理モジュールに処理時間計測モジュールが付加された構成での画像処理モジュール及び処理時間計測モジュールの動作を各々示すブロック図である。
【図7】バッファモジュールの動作を示すブロック図である。
【図8】画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。
【図9】処理管理部によって実行される画像処理部制御処理の内容を示すフローチャートである。
【図10】処理時間計測モジュールによって実行される、(A)は初期化処理、(B)は処理時間計測処理、(C)は処理時間通知処理を各々示すフローチャートである。
【図11】画像処理部における画像処理の流れを説明する概略図である。
【発明を実施するための形態】
【0031】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【0032】
コンピュータ10はCPU12、DRAM又はSRAM等から成るメモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述したような画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【0033】
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
【0034】
図1に示すように、記憶部20には、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
【0035】
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。なお、画像処理プログラム群34を記憶する記憶部20は本発明に係る記憶手段に対応している。画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行うが(詳細は後述)、画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【0036】
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や1画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション32が画像処理部の再構築を指示することで、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【0037】
以下、画像処理プログラム群34について説明する。図1に示すように、画像処理プログラム群34はモジュールライブラリ36と、処理構築部42のプログラムと、処理管理部46のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部42は、アプリケーションからの指示により、例として図4に示すように、予め定められた画像処理を行う1つ以上の画像処理モジュール38と、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール40と、がパイプライン形態又はDAG(Directed Acyclic Graph:有向非循環グラフ)形態で連結されて成る画像処理部50を構築する。画像処理部50を構成する個々の画像処理モジュールの実体はCPU12によって実行されCPU12で所定の画像処理を行わせるための第1プログラム、又は、CPU12によって実行されCPU12により図1に図示されていない外部の画像処理装置(例えば専用画像処理ボード等)に対する処理の実行を指示するための第2プログラムであり、上述したモジュールライブラリ36には、予め定められた互いに異なる画像処理(例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等)を行う複数種の画像処理モジュール38のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部50を構成する個々の画像処理モジュールの実体が上記の第1プログラムであるものとして説明する。
【0038】
個々の画像処理モジュール38は、例として図6(A)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン38A、画像処理モジュール38の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン38Aの制御を行う制御部38B、初期化処理を行う初期化部38C、及び、終了処理を行う終了部38Dから構成されている。個々の画像処理モジュール38における単位処理データ量は、画像の1ライン分、画像の複数ライン分、画像の1画素分、画像1面分等を含む任意のバイト数の中から、画像処理エンジン38Aが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール38では単位処理データ量が1画素分とされ、拡大・縮小処理を行う画像処理モジュール38では単位処理データ量が画像の1ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール38では単位処理データ量が画像1面分とされ、画像圧縮伸長処理を行う画像処理モジュール38では単位処理データ量が実行環境に依存するNバイトとされている。
【0039】
また、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている(図1では、この種の画像処理モジュールを「モジュール1」「モジュール2」と表記して示している)。例えば拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、例えば色変換処理を行う画像処理モジュール38については、RGB色空間をCMY色空間へ変換する画像処理モジュール38やその逆へ変換する画像処理モジュール38、L*a*b*色空間等の他の色空間変換を行う画像処理モジュール38が各々用意されている。
【0040】
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データ量ずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば画像回転処理を行う画像処理モジュール38における単位処理データ量についても、前述した画像1面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる(例えば画像の1ライン分や複数ライン分等の)複数の画像処理モジュール38がモジュールライブラリ36に含まれていても良い。
【0041】
また、モジュールライブラリ36に登録されている個々の画像処理モジュール38のプログラムは、画像処理エンジン38Aに相当するプログラムと、制御部38B、初期化部38C及び終了部38Dに相当するプログラムから構成されているが、制御部38B、初期化部38C及び終了部38Dに相当するプログラムは部品化されており、個々の画像処理モジュール38のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール38は、画像処理エンジン38Aで実行される画像処理の種類や内容に拘わらず、制御部38B、初期化部38C及び終了部38Dに相当するプログラムが共通化されている(制御部38B、初期化部38C及び終了部38Dに相当するプログラムとして同一のプログラムが用いられている)。これにより、画像処理モジュール38のプログラムの開発にあたっての開発負荷が軽減される。
【0042】
なお、画像処理モジュール38の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール38については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール38について、制御部38B、初期化部38C及び終了部38Dに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群34は、前述のように各種機器に実装可能であるが、画像処理プログラム群34のうちモジュールライブラリ36に登録する画像処理モジュール38の数や種類等については、画像処理プログラム群34を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【0043】
また、画像処理部50を構成する個々のバッファモジュール40は、例として図7にも示すように、バッファ40Aと、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行うバッファ制御部40Bから構成されている。なお、バッファ40Aはコンピュータ10に設けられたメモリ14からオペレーティングシステム30及びリソース管理部46Bを通じて確保されたメモリ領域で構成される。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
【0044】
また本実施形態では、画像処理部50の動作モードとして、画像処理部50で画像処理のみを行う通常モードに加えて、画像処理部50で画像処理と処理時間の計測を行う計測モードが設けられており、画像処理部50の動作モードとして計測モードが指定された場合には、図4(A)〜(C)に示す画像処理部50に代えて、例として図5(A)〜(C)にも示すように、画像処理部50を構成する画像処理モジュール38と処理管理部46のワークフロー管理部46A(後述)との間に処理時間計測モジュール48が設けられた画像処理部50が構築される(詳細は後述)。処理時間計測モジュール48もその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36には、処理時間計測モジュール48のプログラムも登録されている(図1では処理時間計測モジュール48のプログラムを「処理時間計測モジュール」と表記して示している)。
【0045】
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。なお処理構築部42は本発明に係る構築手段に対応している。
【0046】
また図1に示すように、処理管理部46は、画像処理部50における画像処理の実行を制御するワークフロー管理部46A、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10のリソースの使用を管理するリソース管理部46B、及び、画像処理部50で発生したエラーを管理するエラー管理部46Cを含んで構成されている。エラー管理部46Cは、画像処理部50が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群34がインストールされたコンピュータ10が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部20等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。なお、ワークフロー管理部46Aは本発明に係る処理管理手段及び収集手段として機能する。
【0047】
次に本実施形態の作用を説明する。画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行が利用者によって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行が利用者によって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えば利用者からの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理が利用者によって選択された等の場合であってもよい。
【0048】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション32は、まず画像処理対象の画像データを供給する画像データ供給部22の種別を認識し(図2のステップ150も参照)、認識した種別がバッファ領域(メモリ14の一部領域)であった場合(図2のステップ152の判定が肯定された場合)には、画像データ供給部22として指定されたバッファ領域を含むバッファモジュール40を生成する(図2のステップ154も参照)。後述するバッファモジュール40の新規生成では、バッファモジュール40のバッファ制御部40Bのプログラムを実行するスレッド(プロセス又はオブジェクトでもよい:以下同様)を生成することでバッファ制御部40Bを生成し、生成されたバッファ制御部40Bによりバッファ40Aとして使用するメモリ領域が確保されることによって成されるが、このステップ154におけるバッファモジュール40の生成は、指定されたバッファ領域を既に確保されたバッファ40Aとして(バッファ制御部40Bに)認識させるパラメータを設定してバッファ制御部40Bを生成する処理を行うことによって成される。ここで生成されたバッファモジュール40は画像データ供給部22として機能する。
【0049】
続いてアプリケーション32は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し(図2のステップ156も参照)、認識した種別がバッファ領域(メモリ14の一部領域)であった場合(図2のステップ158の判定が肯定された場合)は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する(図2のステップ160も参照)。ここで生成されたバッファモジュール40は画像出力部24として機能する。また、アプリケーション32は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する(図2のステップ162も参照)。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、利用者が実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
【0050】
そしてアプリケーション32は、上記で判定した画像処理の種類及び実行順序に基づいて、まず実行順序が1番の画像処理に対応するモジュール生成部44を起動(モジュール生成部44のプログラムを実行するスレッドを生成)した後に(図2のステップ164も参照)、起動したモジュール生成部44に対し、当該モジュール生成部44によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータ、前述の動作モード(通常モード/計測モード)を通知し、対応するモジュール群の生成を指示する(図2のステップ166も参照)。
【0051】
なお、上記の入力モジュールは、実行順序が1番目のモジュール群については画像データ供給部22が入力モジュールとなり、実行順序が2番目以降のモジュール群については前段のモジュール群の最終モジュール(通常はバッファモジュール40)が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部24が出力モジュールとなるので、画像出力部24が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション32による指定は行われず、必要な場合はモジュール生成部44によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えば利用者が実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション32が認識するようにしてもよいし、利用者に指定させるようにしてもよい。
【0052】
また本実施形態では、画像処理部50の動作モードとして通常モード又は計測モードを利用者が選択可能とされている。利用者による動作モードの選択結果は利用者が操作部18を操作することで予め入力され、メモリ14上の所定の領域に情報として保持されており、モジュール生成部44に対して通知する動作モードは、メモリ14上の前記所定の領域に保持されている情報を参照することで判別される。なお、上記の計測モードは、例えば画像処理部50で実行される一連の画像処理のボトルネックを検知したい場合や、画像処理部50を構成する画像処理モジュール38のうち実行される画像処理のアルゴリズムを改良すべき画像処理モジュール38を特定したい場合、或いは、画像処理部50を構成する画像処理モジュール38の最適な組み合わせや最適な処理パラメータを検討したい等の場合に、画像処理部50の動作モードとして選択される。
【0053】
一方、モジュール生成部44は、アプリケーション32によって起動されると図3に示すモジュール生成処理を行う(図2のステップ168も参照)。モジュール生成処理では、まずステップ200において、このモジュール生成部44で次に生成すべき画像処理モジュール38が有るか否かを判定する。生成すべき画像処理モジュール38が有る場合には、ステップ202で生成すべき画像処理モジュール38に入力される入力画像データの属性を表す入力画像属性情報を取得し、次のステップ204では、ステップ202で取得した情報が表す入力画像データの属性に照らしても先のステップ200で生成すべきと判定した画像処理モジュール38の生成が必要か否かを判定する。
【0054】
具体的には、例えば実行中のモジュール生成処理に対応するモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定された場合、ステップ202で取得した入力画像属性情報に基づいて入力画像データがRGB色空間のデータであることが判明した場合には、色空間処理を行う画像処理モジュール38としてRGB→CMYの色空間変換を行う画像処理モジュール38を生成する必要があるが、入力画像データがCMY色空間のデータであった場合には、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール38は生成不要と判断することができる。不要と判断された場合はステップ200に戻る。
【0055】
なお、入力画像データの属性を取得する処理は、生成する画像処理モジュール38の前段にバッファモジュール40が存在している場合、当該バッファモジュール40に画像データの書き込みを行う更に前段の画像処理モジュール38から出力画像データの属性を取得することによって実現できる。
【0056】
次のステップ206では、生成する画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図4(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図4(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定され、バッファモジュール40の生成を行うことなくステップ210へ移行するが、上記以外の場合は判定が肯定されてステップ208へ移行し、バッファ制御部40Bを起動する(バッファ制御部40Bのプログラムを実行するスレッドを生成する)ことで、画像処理モジュールの後段に連結するバッファモジュール40を生成する。
【0057】
次のステップ210では、前段のモジュール(例えばバッファモジュール40)の情報と後段のバッファモジュール40の情報、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、画像処理モジュール38を生成する。なお、ステップ206で後段のバッファモジュール40が不要と判断された画像処理モジュール38に対しては後段のバッファモジュール40の情報は与えられず、また例えば50%縮小処理のように処理内容が固定的で特別な画像処理パラメータが必要ない場合には処理パラメータは与えられない。
【0058】
モジュール生成処理(ステップ210)では、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、ステップ202で取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択する。例えば実行中のモジュール生成処理に対応するモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択される。
【0059】
また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択される。なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いは利用者に選択させるようにしてもよい。
【0060】
次のステップ212では、後段のバッファモジュール40のIDと生成した画像処理モジュール38のIDの組をワークフロー管理部46Aに通知する。このIDは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。ワークフロー管理部46Aに通知された情報は、ワークフロー管理部46Aの内部で管理している管理テーブルに登録され、後の処理で使われる。なお、各モジュールのIDはテーブル形式に代えてリスト形式や連想配列形式等で保持するようにしてもよい。
【0061】
ステップ212の処理が終了すると、モジュール生成部44は制御をステップ200に戻して次に生成すべき画像処理モジュールがあるか否かを判定する。なお、個々のモジュール生成部44は、対応する一定の画像処理を行うモジュール群を生成するので、この判定は、個々のモジュール生成部44毎にどのような画像処理モジュールをどのような接続関係で生成するかに関する情報を予め登録して読み出すか、またはモジュール生成部44を動作させるプログラム中に記述しておくことでも実現できる。例えば実行中のモジュール生成処理に対応するモジュール生成部44が、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38によって実現されるスキュー補正処理)を行うモジュール群を生成する場合には、2個以上の画像処理モジュール38を含むモジュール群が生成される。
【0062】
また、目的とする画像処理(起動されたモジュール生成部44に対応する画像処理)を実現するモジュール群の生成が完了すると、ステップ200の判定が否定されてステップ214へ移行し、指定された動作モードが計測モードか否か判定する。判定が否定された場合はモジュール生成処理を終了するが、ステップ214の判定が肯定された場合はステップ216へ移行し、処理時間計測モジュール48を起動する(処理時間計測モジュール48のプログラムを実行するスレッドを生成する)ことで、前述のステップ200〜ステップ212で生成した画像処理モジュール38に付加する(画像処理モジュール38と処理管理部46のワークフロー管理部46Aとの間に設ける)処理時間計測モジュール48を生成する。また、次のステップ218では、ステップ216で挿入した処理時間計測モジュール48のIDを、ステップ200〜ステップ212で生成した画像処理モジュール38のIDと対応付けてワークフロー管理部46Aに通知し、モジュール生成処理を終了する。
【0063】
これにより、ワークフロー管理部46Aでは、生成された処理時間計測モジュール48のIDと、当該処理時間計測モジュール48が付加された画像処理モジュール38のIDを認識し、通知された処理時間計測モジュール48のIDを、既に登録されている画像処理モジュール38のIDと対応付けて管理テーブルに追加登録する処理が行われる。
【0064】
アプリケーション32は、モジュール群の生成を指示したモジュール生成部44から、上記のようにしてモジュール群の生成完了が通知されると、図2のステップ162における判定の結果に基づいて、必要とされる画像処理を実現するために他の画像処理を行うモジュール群も生成する必要があるか否か判断する。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は、個々の画像処理に対応する他のモジュール生成部44を起動してモジュール群の生成に必要な情報を通知する処理を順次行う(図2のステップ170,172も参照)。そして、順次起動されたモジュール生成部44によって上述したモジュール生成処理(図3)が順次行われる(図2のステップ174も参照)ことで、例として図4(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築されることになる。また、動作モードとして計測モードが選択されている場合には、例として図5(A)〜(C)にも示すように、画像処理部50を構成する個々の画像処理モジュール38に処理時間計測モジュール48が各々付加された(個々の画像処理モジュール38と処理管理部46のワークフロー管理部46Aとの間に処理時間計測モジュール48が各々設けられた)画像処理部50が構築される。
【0065】
ところで、画像処理モジュール38の制御部38Bは、モジュール生成部44によって起動されると画像処理モジュール38の初期化を行う。この初期化では、まずモジュール生成部44から与えられた自モジュールの前段及び後段のモジュールの情報を記憶する。続いて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール40以外、例えば画像データ供給部22や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール40が存在している場合には、前段のバッファモジュール40からの1回の画像データの読み出しによって取得する画像データのデータ量(単位読出データ量)を認識する。この単位読出データ量は、自モジュールの前段のバッファモジュール40の数が1個であれば1個だけであるが、例えば図4(C)に示す画像処理部50において画像合成処理を行う画像処理モジュール38のように、前段のバッファモジュール40の数が複数で、複数のバッファモジュール40から各々取得した画像データを用いて画像処理エンジン38Aが画像処理を行う等の場合、前段の個々のバッファモジュール40に対応する単位読出データ量は、自モジュールの画像処理エンジン38Aが行う画像処理の種類や内容、前段のバッファモジュール40の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール40へ通知することで、前段に存在している全てのバッファモジュール40に単位読出データ量を設定する(図6(A)の(1)も参照)。
【0066】
次に、自モジュールの後段のモジュールを判定する。自モジュールの後段のモジュールがバッファモジュール40以外、例えば画像出力部24や特定のファイル等の場合には、必要に応じてその初期化処理(例えば後段のモジュールが画像出力部24であれば、単位書込データ量に相当するデータ量ずつ画像データを出力することを通知する処理等)を行う。また、後段のモジュールがバッファモジュール40であれば、1回の画像データの書き込みにおける画像データのデータ量(単位書込データ量)を認識し、後段のバッファモジュールに当該単位書込データ量を設定(図6(A)の(2)も参照)する。そして、当該画像処理モジュール38の初期化の完了をモジュール生成部44に通知して処理を終了する。
【0067】
一方、画像処理部50を構成する個々のバッファモジュール40のバッファ制御部40Bは、モジュール生成部44又はアプリケーション32によって起動されるとバッファモジュール40の初期化を行う。バッファモジュール40の初期化では、まず自モジュールの前段の画像処理モジュール38から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール38から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する(図7の(1),(2)も参照)。
【0068】
自モジュールと連結されている全ての画像処理モジュール38から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール38によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ40Aの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量(自モジュールの後段に複数の画像処理モジュール38が連結されている場合は、個々の画像処理モジュール38によって各々設定された単位読出データ量の最大値)を設定してもよいし、単位書込データ量と単位読出データ量(の最大値)の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値(例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量(の最大値)の何れか)を設定するようにしてもよい。
【0069】
また、自モジュールがアプリケーション32によって生成され、画像データ供給部22又は画像出力部24として機能するバッファモジュール40であった場合には、自モジュールのバッファ40Aとして用いるメモリ領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ40Aとして用いる既設のメモリ領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ40Aに書き込まれた画像データのうち、対応する後段の画像処理モジュール38によって読み出されていない画像データ(有効データ)の先頭位置(次の読出開始位置)と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが自モジュールがアプリケーション32によって生成され、画像データ供給部22として機能するバッファモジュール40であれば、自モジュールのバッファ40Aとして用いるメモリ領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール38に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール40の初期化が完了し、バッファ制御部40Bは初期化の完了をワークフロー管理部46Aへ通知する。
【0070】
また、図6(B)に示すように、個々の処理時間計測モジュール48は、画像処理モジュール38とワークフロー管理部46Aとの間の情報の送受を中継すると共に、画像処理モジュール38で実行される画像処理の処理時間を計測する中継・計測部48Aと、初期化処理を行う初期化部48Bから構成されている。初期化部48Aは、自モジュールが生成されると、図10(A)に示す初期化処理を行う。この初期化処理では、ステップ550において、自モジュールに割り当てられたメモリ14の領域のうち処理時間積算値を記憶するための領域を0に初期化する。また、次のステップ552において、自モジュールが付加された画像処理モジュール38の情報(例えばID等)を、自モジュールに割り当てられたメモリ14の領域のうち、各種の設定情報を記憶するための領域に記憶させ(図6(B)の(4)も参照)、処理を終了する。
【0071】
一方、アプリケーション32は、順次起動したモジュール生成部44によって前述のモジュール生成処理が順次行われることで、必要とされる画像処理を行う画像処理部50の構築が完了すると、動作モード毎に用意されたワークフロー管理部46Aのプログラムのうち、選択された動作モードに対応するワークフロー管理部46Aのプログラムを実行するスレッドを起動することで、ワークフロー管理部46Aに対して画像処理部50による画像処理の実行を指示する(図2のステップ176)。
【0072】
処理管理部46のワークフロー管理部46Aは、プログラムが起動されることで図9に示す画像処理部制御処理を行う。ワークフロー管理部46Aは画像処理部制御処理において、画像処理部50を構成する画像処理モジュール38のうちの所定の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求を入力することで、画像処理部50による画像処理を並列に行わせるが、以下では画像処理部50全体の動作説明に先立ち、個々のバッファモジュール40のバッファ制御部40Bによって行われる初期化処理完了以降の処理、個々の画像処理モジュール38の制御部38Bによって行われる画像処理モジュール制御処理について順に説明する。
【0073】
本実施形態では、画像処理モジュール38が後段のバッファモジュール40に画像データを書き込む場合には、画像処理モジュール38からバッファモジュール40へ書込要求が入力され、画像処理モジュール38が前段のバッファモジュール40から画像データを読み出す場合には、画像処理モジュール38からバッファモジュール40へ読出要求が入力される。前段の画像処理モジュール38からの書込要求がバッファモジュール40に入力された場合は、以下で説明するデータ書込処理がバッファ制御部40Bによって実行される。
【0074】
データ書込処理では、まず自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aに対してデータの書き込みと非同期にデータの読み出しも行われるので、バッファ40Aが使用中の場合は入力された書込要求情報をワークメモリ等に保管し、タイマをスタートさせてデータ書込処理を一旦終了する。なお、上記のタイマがタイムアウトした場合は、過去に入力されてワークメモリ等に保管している書込要求情報をワークメモリ等から取り出し、取り出した書込要求情報を処理対象の情報として以降の処理が行われる。
【0075】
続いてデータ書込処理では、確保すべきメモリ領域のサイズとして単位書込データ量をリソース管理部46Bに通知し、書込用として用いるメモリ領域をリソース管理部46Bを介して取得する。次に、自モジュールのバッファ40Aを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在しているか否か判定する。モジュール生成部44によって生成されたバッファモジュール40は、当初はバッファ40Aとして用いるメモリ領域(単位バッファ領域)が確保されておらず、メモリ領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール40に最初に書込要求が入力されたときにはバッファ40Aとして用いるメモリ領域(単位バッファ領域)が存在しておらず、この判定は否定される。また、単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合は上記判定が否定される。
【0076】
単位書込データ量以上の空き領域が有る単位バッファ領域が存在していないと判定された場合は、確保すべきメモリ領域のサイズ(単位バッファ領域のサイズ)をリソース管理部46Bに通知して、自モジュールのバッファ40Aとして用いるメモリ領域(画像データの保管に用いる単位バッファ領域)をリソース管理部46Bを介して取得する。そして、先に取得した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール38へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール38は、先頭アドレスが通知された書込用バッファ領域に画像データを書き込む。
【0077】
このように、本実施形態では、画像処理モジュール38による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写する。これにより、書込要求元の画像処理モジュール38への書込領域の通知は、その先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。なお、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合、すなわちバッファ40Aとして用いるメモリ領域が既に確保されている場合には、既に確保されたメモリ領域のアドレスを画像処理モジュール38に書込領域のアドレスとして通知し、上記メモリ領域への画像データの書き込みを行わせる。
【0078】
前段の画像処理モジュール38による書込領域への画像データの書き込みが完了すると、書込用バッファ領域に書き込まれている画像データに属性情報を付加した後に、保管用バッファ領域にそのまま書き込む。そして、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタのうち有効データの末尾位置を表すポインタを更新すると共に、先に書込用バッファ領域として確保したメモリ領域をリソース管理部46Bによって解放させ、データ書込処理を一旦終了する。なお、書込用バッファ領域はバッファモジュール40の初期化時に確保し、バッファモジュール40の消去時に解放するように構成してもよい。
【0079】
続いて、後段の画像処理モジュール38から読出要求がバッファモジュール40に入力された場合に、バッファモジュール40のバッファ制御部40Bによって実行されるデータ読出処理について説明する。
【0080】
データ読出処理では、まず今回のデータ読出処理の起動要因が、後段の画像処理モジュールからの読出要求の入力による起動か否か判定し、判定が肯定された場合は、後段の画像処理モジュールから入力された読出要求情報を読出用の待ち行列の末尾に登録する。次に、自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aが使用中であれば、読出用の待ち行列に読出要求情報が登録されているか否か判定し、読出要求情報が未登録であればそのままデータ読出処理を終了し、読出要求情報が登録されていればタイマをスタートさせた後にデータ読出処理を終了する。このタイマがタイムアウトするとデータ読出処理が再度起動され、読出用の待ち行列に登録されている未処理の読出要求(情報)が再度取り出され、当該読出要求に応じた処理が行われる。
【0081】
一方、自モジュールのバッファ40Aが使用中でなければ、読出用の待ち行列から先頭に登録されている読出要求情報を取り出し、取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール38を認識し、読出要求元の画像処理モジュール38によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール38に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール38に対応する有効データのバッファ40A上での先頭位置及び末尾位置を認識する。次に、認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール38に対応する有効データ(読出要求元の画像処理モジュール38が読出可能な画像データ)が単位読出データ量以上有るか否か判定する。
【0082】
読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であれば、読出要求元の画像処理モジュール38が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール38に対応する有効データがバッファ40Aに単位読出データ量以上記憶されているか、又は、バッファ40Aに記憶されている読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、確保すべきメモリ領域のサイズとして読出要求元の画像処理モジュール38に対応する単位読出データ量をリソース管理部46Bに通知すると共に、読出に用いるメモリ領域の確保をリソース管理部46Bに要求し、リソース管理部46Bを介して読出用バッファ領域を取得する。
【0083】
次に、読出対象の有効データをバッファ40Aから単位読出データ量分だけ読み出して読出用バッファ領域に書き込み、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール38へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール38は、先頭アドレスが通知された読出領域(読出用バッファ領域)からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール38に通知する。また、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合は、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール38が単位バッファ領域から直接画像データを読み出すようにしてもよい。
【0084】
読出要求元の画像処理モジュール38による読出領域からの画像データの読み出し完了が通知されると、読出用バッファ領域として確保したメモリ領域の先頭アドレス及びサイズをリソース管理部46Bへ通知して、当該メモリ領域をリソース管理部46Bによって解放させる。この読出用バッファ領域についても、バッファモジュール40の初期化時に確保しておき、バッファモジュール40が消去される時に解放するよう構成してもよい。また、読出要求元の画像処理モジュール38に対応する有効データポインタのうち有効データの先頭位置を表すポインタを更新する。
【0085】
次に、後段の個々の画像処理モジュール38に対応する有効データポインタを各々参照し、先のポインタ更新により、バッファ40Aを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール38による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合は、前述した読出用の待ち行列のチェック処理(読出用の待ち行列に読出要求情報が登録されているか否かの判定)を経てデータ読出処理を終了するが、有効データを記憶していない単位バッファ領域が出現した場合は、当該単位バッファ領域をリソース管理部46Bによって解放させた後に読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。
【0086】
一方、バッファ40Aに記憶されており読出要求元の画像処理モジュール38が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合(図7の(4)で読出可能な有効データ無が検知された場合)には、新たな画像データを要求するデータ要求をワークフロー管理部46Aへ出力し(図7の(5)も参照)、読出用の待ち行列から取り出した読出要求情報を元の待ち行列(の先頭又は末尾)に再度登録した後に、読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。この場合、ワークフロー管理部46Aにより、自モジュールの前段の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求が入力されることになる。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
【0087】
詳細は後述するが、ワークフロー管理部46Aはバッファモジュール40からデータ要求が入力されると、データ要求元のバッファモジュール40の前段の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求を入力する(図7の(6)も参照)。この処理要求の入力をトリガとして前段の画像処理モジュール38の制御部38Bで行われる処理により、前段の画像処理モジュール38がバッファモジュール40へ画像データを書込可能な状態になると、前段の画像処理モジュール38から書込要求が入力されることで前述のデータ書込処理が行われ、前段の画像処理モジュール38からバッファモジュール40のバッファ40Aに画像データが書き込まれる(図7の(7),(8)も参照)。これにより、後段の画像処理モジュール38によるバッファ40Aからの画像データの読出が行われることになる(図7の(9)も参照)。
【0088】
上述したデータ書込処理及びデータ読出処理では、一方が自モジュールのバッファ40Aにアクセスしている間、他方がバッファ40Aへのアクセスを停止する排他制御が行われる。これにより、コンピュータ10のCPU12が画像処理部50を構成する個々のモジュールに対応するスレッドを並列に実行しても、単一のバッファモジュール40に複数の要求が同時又は略同時に入力されることによる不都合の発生を回避できるので、コンピュータ10のCPU12が個々のモジュールに対応するスレッドを並列に実行することができる。
【0089】
続いて、画像処理部50を構成する個々の画像処理モジュール38に対し、ワークフロー管理部46A(又はワークフロー管理部46Aからの処理要求を中継する処理時間計測モジュール48)から処理要求が入力される毎に、個々の画像処理モジュール38の制御部38Bによって各々行われる画像処理モジュール制御処理(図8)を説明する。
【0090】
画像処理モジュール制御処理では、まずステップ220において、自モジュールの前段にモジュール(バッファモジュール40や画像データ供給部22、画像処理モジュール38等)が存在している場合に、当該前段のモジュールに対してデータ(画像データ又は解析等の画像処理の処理結果)を要求する。次のステップ222では前段のモジュールからデータが取得可能であるかを判定し、ステップ222の判定が否定された場合はステップ224で全体処理終了が通知されたか否かを判定する。ステップ224の判定が否定された場合はステップ222に戻り、前段のモジュールからデータを取得可能となる迄ステップ222,224を繰り返す。
【0091】
ここで、自モジュールの前段のモジュールがバッファモジュール40である場合には、先のステップ220でデータを要求すると(読出要求)、読出可能な有効データがバッファモジュール40のバッファ40Aに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール40の前段の画像処理モジュール38が当該バッファモジュール40のバッファ40Aに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ222の判定が肯定されてステップ226へ移行し、前段のバッファモジュール40より先頭アドレスが通知された読出領域から単位読出データ量(又はそれ未満のデータ量)の画像データを読み出し、一時保管用のメモリ領域に書き込むデータ取得処理を行う(図6(A)の(3)も参照)。
【0092】
また、自モジュールの前段のモジュールが画像データ供給部22であれば、先のステップ220でデータ要求を出力すると画像データを取得可能な状態であることが前段の画像データ供給部22から直ちに通知されることで、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像データ供給部22から単位読出データ量の画像データを取得し、一時保管用のメモリ領域に書き込むデータ取得処理を行う。また、自モジュールの前段のモジュールが画像処理モジュール38であれば、先のステップ220でデータ要求(処理要求)を出力すると、前段の画像処理モジュール38が画像処理を実行可能な状態であれば書込要求が入力されることでデータ(画像処理結果)を取得可能な状態であることが通知されるので、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像処理モジュール38によってデータを書き込ませる一時保管用のメモリ領域のアドレスを通知して書込を要請することで、前段の画像処理モジュール38から出力されるデータを一時保管用のメモリ領域に書き込ませるデータ取得処理を行う。
【0093】
次のステップ228では、自モジュールの前段に複数のモジュールが連結されているか否か判定する。判定が否定された場合には何ら処理を行うことなくステップ232へ移行するが、判定が肯定された場合はステップ230へ移行し、前段に連結されている全てのモジュールからデータを取得したか否か判定する。ステップ230の判定が否定された場合はステップ220に戻り、ステップ230の判定が肯定される迄ステップ220〜ステップ230を繰り返す。前段のモジュールから取得すべきデータが全て揃うと、ステップ228の判定が否定されるかステップ230の判定が肯定されてステップ232へ移行する。
【0094】
次のステップ232では自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、ステップ232でデータ出力領域が取得できる迄(データ出力領域の先頭アドレスが通知される迄)繰り返し判定を行う。なお、後段のモジュールがバッファモジュール40であれば、上記のデータ出力用領域の要求は当該バッファモジュール40に対して書込要求を出力することによって成される。データ出力領域(後段のモジュールがバッファモジュール40であれば当該バッファモジュール40から先頭アドレスが通知された書込領域)が取得できたら(図6(A)の(4)も参照)、次のステップ236において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)、画像処理用のメモリ領域(の先頭アドレス及びサイズ)を画像処理エンジン38Aに入力し、入力したデータに対し画像処理用のメモリ領域を使用して所定の画像処理を行わせる(図6(A)の(5)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図6(A)の(6)も参照)。画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ238で出力が完了したことを後段のモジュールに通知する。
【0095】
上記のステップ220〜ステップ238により画像処理モジュール38における単位処理データ量のデータに対する処理(単位処理)が完了し、次のステップ242において、ワークフロー管理部46Aへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことを処理要求の入力元(ワークフロー管理部46A又は処理時間計測モジュール48)へ通知し、画像処理モジュール制御処理を終了する。
【0096】
また、処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ224の判定が肯定されてステップ244へ移行し、処理対象の画像データ(なお、処理対象の画像データは1頁分の画像データであることが多いが、複数頁分の画像データであってもよい)に対する処理が終了したことを意味する全体処理終了通知を処理要求の入力元及び後段のモジュールへ各々出力する。また、次のステップ246では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
【0097】
次に、ワークフロー管理部46Aによる処理を説明する。なお、以下では、まず動作モードとして通常モードが選択されていることで起動された、通常モードに対応するワークフロー管理部46Aによる処理を説明する。ワークフロー管理部46Aは、アプリケーション32によって起動されると図9(A)に示す画像処理部制御処理1を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理1のステップ500において、画像処理部50のうち最後段の画像処理モジュール38に処理要求を入力し(図11(A)の(1)参照)、画像処理部制御処理1を終了する。
【0098】
図11(A)に示す画像処理部50において、ワークフロー管理部46Aから最後段の画像処理モジュール384に処理要求が入力されると、画像処理モジュール384の制御部38Bは前段のバッファモジュール403に読出要求を入力する(図11(A)の(2)参照)。このとき、バッファモジュール403のバッファ40Aには画像処理モジュール384が読出可能な有効データ(画像データ)が記憶されていないので、バッファモジュール403のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図11(A)の(3)参照)。
【0099】
ワークフロー管理部46Aは、バッファモジュール40からデータ要求が入力される毎に、図9(B)に示す画像処理部制御処理2を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理2において、ステップ510でデータ要求入力元のバッファモジュール40(ここではバッファモジュール403)の前段の画像処理モジュール38(ここでは画像処理モジュール383)を認識し、認識した前段の画像処理モジュール38に処理要求を入力(図11(A)の(4)参照)して処理を終了する。
【0100】
画像処理モジュール383の制御部38Bは、処理要求が入力されると前段のバッファモジュール402に読出要求を入力し(図11(A)の(5)参照)、バッファモジュール402のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール402のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図11(A)の(6)参照)。ワークフロー管理部46Aは、バッファモジュール402からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール382に処理要求を入力し(図11(A)の(7)参照)、画像処理モジュール383の制御部38Bは前段のバッファモジュール401に読出要求を入力する(図11(A)の(8)参照)。また、バッファモジュール401のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール401のバッファ制御部40Bもワークフロー管理部46Aにデータ要求を入力し(図11(A)の(9)参照)。ワークフロー管理部46Aは、バッファモジュール401からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール381に処理要求を入力する(図11(A)の(10)参照)。
【0101】
ここで、画像処理モジュール381の前段のモジュールは画像データ供給部22であるので、画像処理モジュール381の制御部38Bは、画像データ供給部22にデータ要求を入力することで画像データ供給部22から単位読出データ量の画像データを取得し(図11(A)の(11)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール401のバッファ40Aに書き込む(図11(A)の(12)参照)。
【0102】
また、バッファモジュール401のバッファ制御部40Bは、後段の画像処理モジュール382が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール382に対して読出を要請し、これに伴い画像処理モジュール382の制御部38Bは、バッファモジュール401のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(13)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール402のバッファ40Aに書き込む(図11(A)の(14)参照)。
【0103】
以下同様に、バッファモジュール402のバッファ制御部40Bは、後段の画像処理モジュール383が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール383へ読出を要請し、画像処理モジュール383の制御部38Bは、バッファモジュール402のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(15)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール403のバッファ40Aに書き込む(図11(A)の(16)参照)。
【0104】
また、バッファモジュール403のバッファ制御部40Bは、後段の画像処理モジュール384が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール384に対して読出を要請し、これに伴い画像処理モジュール384の制御部38Bは、バッファモジュール403のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(17)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部24へ出力する(図11(A)の(18)参照)。
【0105】
また、個々の画像処理モジュール38の制御部38Bは、後段のバッファモジュール40のバッファ40Aへの画像データの書き込みを完了すると、ワークフロー管理部46Aへ処理完了通知を入力する。ワークフロー管理部46Aは、画像処理モジュール38から処理完了通知が入力される毎に、図9(C)に示す画像処理部制御処理3を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理3において、ステップ520で処理完了通知元の画像処理モジュール38に処理要求を再度入力し、処理を終了する。このように、画像処理モジュール38から処理完了通知が入力される毎に、処理完了通知元の画像処理モジュール38へ処理要求を再度入力することで、処理対象の画像データに対する画像処理が、個々の画像処理モジュール38で並列に行われる。
【0106】
また、画像データ供給部22から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール38からワークフロー管理部46Aへの全体処理終了通知の入力が、前段側の画像処理モジュール38から順次行われる。ワークフロー管理部46Aは、画像処理モジュール38から全体処理終了通知が入力される毎に、図9(D)に示す画像処理部制御処理4を行う。
【0107】
この画像処理部制御処理4では、ステップ530において、全体処理終了通知入力元のモジュール(画像処理モジュール38又は処理時間計測モジュール48)が最後段のモジュールか否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部24へ全て出力されることで、最後段のモジュールから全体処理終了通知が入力された場合にはステップ530の判定が肯定され、ステップ532(後述)を経てステップ542へ移行し、アプリケーション32に対して画像処理の完了を通知し(図2のステップ180も参照)、画像処理部制御処理4を終了する。そして、画像処理の完了が通知されたアプリケーション32は、利用者に対して画像処理の完了を通知する(図2のステップ182も参照)。
【0108】
次に、動作モードとして計測モードが選択されている場合の処理を説明する。動作モードとして計測モードが選択されている場合、例として図5や図11(B)に示すように、画像処理部50の個々の画像処理モジュール38とワークフロー管理部46Aとの間に処理時間計測モジュール48が各々設けられており、計測モードに対応するワークフロー管理部46Aが起動されている。
【0109】
ワークフロー管理部46Aは、前述のように、アプリケーション32によって起動されたことをトリガとして、図9(A)に示す画像処理部制御処理1を行うが、計測モードに対応するワークフロー管理部46Aは、この画像処理部制御処理1のステップ500において、管理テーブルを参照し、画像処理部50のうち最後段の画像処理モジュール38に付加されている処理時間計測モジュール48を認識し、認識した処理時間計測モジュール48に処理要求を入力し(図11(B)の(1)も参照)、画像処理部制御処理1を終了する。
【0110】
また、計測モードに対応するワークフロー管理部46Aは、バッファモジュール40からのデータ要求の入力をトリガとして行われる画像処理部制御処理2(図9(B)参照)のステップ510においても、管理テーブルを参照し、データ要求入力元のバッファモジュール40の前段の画像処理モジュール38に付加されている処理時間計測モジュール48を認識し、認識した処理時間計測モジュール48に処理要求を入力し(図11(B)の(1),(4),(7),(10)も参照)、画像処理部制御処理2を終了する。更に、計測モードに対応するワークフロー管理部46Aは、処理完了通知が処理時間計測モジュール48から入力されるが(後述)、この処理完了通知の入力をトリガとして行われる画像処理部制御処理3(図9(C)参照)のステップ520において、処理完了通知入力元の処理時間計測モジュール48に処理要求を入力し、画像処理部制御処理3を終了する。
【0111】
一方、画像処理部50に設けられた個々の処理時間計測モジュール48(の中継・計測部48A)は、ワークフロー管理部46Aから処理要求が入力される度に(図6(B)の(5)も参照)、図10(B)に示す処理時間計測処理を行う。この処理時間計測処理では、まずステップ560において、ワークフロー管理部46Aから入力された処理要求を、自モジュールが付加されている画像処理モジュール38へ転送する(図6(B)の(6)も参照)。これにより、自モジュールが付加されている画像処理モジュール38の制御部38Bでは、前述の画像処理モジュール制御処理(図8)が行われる。また、次のステップ562では、一定時間周期でカウント値を1ずつインクリメントすることで経過時間を計測する計時タイマをスタートさせることで、自モジュールが付加されている画像処理モジュール38による画像処理の処理時間の計測を開始する。
【0112】
次のステップ564では、自モジュールが付加されている画像処理モジュール38から処理完了が通知されたか否か判定し、判定が肯定される迄ステップ564を繰り返す。自モジュールが付加されている画像処理モジュール38から処理完了が通知されると(図6(B)の(11)も参照)、ステップ564の判定が肯定されてステップ566へ移行し、先のステップ562でスタートさせた計時タイマからカウント値、すなわち自モジュールが付加されている画像処理モジュール38による画像処理の処理時間の計測結果を取得する。次のステップ568では、ステップ566で取得した処理時間を、メモリ14に記憶している処理時間の積算値に積算する。そしてステップ570では、画像処理モジュール38からの処理完了通知をワークフロー管理部46Aへ転送し(図6(B)の(12)も参照)、処理時間計測処理を終了する。
【0113】
ワークフロー管理部46Aから処理要求が入力される度に、個々の処理時間計測モジュール48で上記の処理時間計測処理が行われることで、図6(B)の(5),(6)及び図6(B)の(11),(12)に示すように、ワークフロー管理部46Aと画像処理モジュール38との間の処理要求及び処理完了通知の送受が処理時間計測モジュール48によって中継されると共に、ワークフロー管理部46Aから画像処理モジュール38への処理要求の中継を行ってから、画像処理モジュール38からワークフロー管理部46Aへの処理完了通知の中継を行う迄の時間が、画像処理モジュール38における画像処理の処理時間として計測される。このように、画像処理の処理時間を計測するか否かに拘わらず、個々の画像処理モジュール38における処理は同じであるので、個々の画像処理モジュール38における画像処理の処理時間を計測するにあたり、個々の画像処理モジュール38の構成(プログラム)を変更する必要が無くなる。
【0114】
また、計測モードに対応するワークフロー管理部46Aに対し、最後段の処理時間計測モジュール48から全体処理終了通知が入力された場合は、前述の画像処理部制御処理4(図9(D)参照)のステップ530,532が各々肯定されてステップ534へ移行し、画像処理部50を構成する全ての処理時間計測モジュール48に対し、処理時間の計測結果の転送を各々要求する。これにより、個々の処理時間計測モジュール48では、図10(C)に示す処理時間通知処理が行われ、当該処理のステップ580において、メモリ14に記憶されている処理時間の積算値が読み出されてワークフロー管理部46Aへ出力する処理が行われ、個々の処理時間計測モジュール48による処理時間の計測結果がワークフロー管理部46Aに各々取得される。
【0115】
画像処理部制御処理4(図9(D)参照)では、次のステップ536において、i番目の処理時間計測モジュール48から取得した処理時間の計測結果(ti)から、i−1番目の処理時間計測モジュール48から取得した処理時間の計測結果(ti-1)を減算することを、1番目の処理時間計測モジュール48から取得した処理時間の計測結果(t1)を除く全ての処理結果に対して行う。これにより、個々の画像処理モジュール38毎に、個々の画像処理モジュール38における画像処理の処理時間のうち、前段のモジュールの処理終了を待機している待ち時間を除外した、正確な処理時間が算出される。
【0116】
次のステップ538では、ステップ536で個々の画像処理モジュール38毎に得られた処理時間と、一連の画像処理で個々の画像処理モジュール38に入力された画像データ(又は個々の画像処理モジュール38から出力された画像データ)のデータ量に基づいて、画像処理の処理速度を個々の画像処理モジュール38毎に演算する。この処理速度は、処理時間を画像データのデータ量で除すことで単位データ量当りの処理時間として算出するようにしてもよいし、画像データのデータ量を処理時間で除すことで単位時間当りの処理データ量として算出するようにしてもよい。
【0117】
そしてステップ540では、先のステップ536で個々の画像処理モジュール38毎に得られた処理時間と、ステップ538で個々の画像処理モジュール38毎に演算した画像処理の処理速度を、例えば表示部16に表示させる等によって出力し、先に説明したステップ540を経て画像処理部制御処理4(図9(D)参照)を終了する。
【0118】
これにより、利用者が上記処理で出力された処理時間や処理速度を参照することで、画像処理部50で実行される一連の画像処理のボトルネックを検知したり、実行される画像処理のアルゴリズムを改良すべき画像処理モジュール38を特定したり、画像処理部50を構成する画像処理モジュール38の最適な組み合わせや最適な処理パラメータを検討したりすることが可能となる。
【0119】
なお、上記では画像処理部50を構成する全ての画像処理モジュール38に対して処理時間の計測を行う態様を説明したが、本発明はこれに限定されるものではなく、画像処理部50を構成する画像処理モジュール38のうちの一部の画像処理モジュール38(例えば、利用者によって指定された画像処理を行う画像処理モジュール38や、予め設定された画像処理モジュール38等)に対してのみ処理時間の計測を行うようにしてもよい。
【0120】
また、上記では個々の画像処理モジュール38毎に得られた画像処理の処理時間及び処理速度を、表示部16に表示させる等によって出力する態様を説明したが、本発明はこれに限定されるものではなく、個々の画像処理モジュール38毎に得られた画像処理の処理時間及び処理速度に基づき、個々の画像処理モジュール38に相当するプログラム(や個々のバッファモジュール40のバッファ制御部40Bに相当するプログラム)の実行優先度や、個々の画像処理モジュール38への各種リソース(例えばメモリ14等の記憶リソースや、CPU、MMX(MultiMedia eXtention)用の演算器、SSE (Streaming SIMD Extension)用の演算器、CPUと別に設けられたDSP(Digital Signal Processor)等の高速演算器等のプログラム実行リソース)の割当を、個々の画像処理モジュール38毎に得られた画像処理の処理時間や処理速度に応じて変更する(例えば処理速度が比較的低い画像処理モジュール38の実行優先度を高くしたり、各種リソースを優先的に割当てる等)等の制御を行うようにしてもよい。
【0121】
また、上記では画像処理部50の個々の画像処理モジュール38における画像処理を並列に行わせる実行形態に本発明を適用した態様を説明したが、画像処理の実行形態は上記に限定されるものではない。画像処理部50では、例えば、単一の画像処理モジュール38でのみ画像処理(単位処理)を繰り返し行わせ、前記画像処理モジュール38における1面分の画像データに対する画像処理が完了し、前記画像処理モジュール38の後段のバッファモジュール40のバッファ40Aに1面分の画像データが蓄積されると、画像処理(単位処理)を繰り返し行わせる画像処理モジュール38を、バッファ40Aに1面分の画像データが蓄積されたバッファモジュール40の後段の単一の画像処理モジュール38に切り替える制御を、画像処理部50の前段側の画像処理モジュール38から順に適用する実行形態(所謂面単位処理)で画像処理を行わせることも可能であるが、本発明は面単位処理で画像処理を行われるように画像処理部50を制御する場合の処理時間の計測にも適用可能である。
【0122】
更に、上記では本発明に係る画像処理プログラムに相当する画像処理プログラム群34がコンピュータ10に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
【符号の説明】
【0123】
10 コンピュータ
16 表示部
38 画像処理モジュール
40 バッファモジュール
42 処理構築部
44 モジュール生成部
46 処理管理部
46A ワークフロー管理部
48 処理時間計測モジュール
50 画像処理部
【技術分野】
【0001】
本発明は画像処理装置及び方法ならびにプログラムに係り、特に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を備えた画像処理装置、当該画像処理装置に適用可能な画像処理方法、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
【背景技術】
【0002】
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なDTP(デスクトップ・パブリッシング)システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わせる場合もあるが、例えば色空間や1画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
【0003】
このような要求を満たすために、例えば特許文献1には、実行する画像処理の種類や内容等が相違する複数種の画像処理モジュールのプログラムを各々用意しておき、複数種の画像処理モジュール(のプログラム)を任意に組み合わせ、所望の画像処理を行う画像処理部を構築することを可能にする技術が開示されており、更に、画像処理部全体としての画像処理の進行度合を把握するために、画像処理部の画像処理モジュールとバッファモジュールとの間に進行度合検知モジュールを挿入し、この進行度合検知モジュールによって画像処理部における画像処理の進行度合を検知する構成も開示されている。
【0004】
また、特許文献2には、同一の画像のうちの割当部分に対して画像処理を行う複数の画像処理演算部(CPU)が処理時間を各々計時し、処理時間に応じて各演算部への割当部分のサイズ(配分率)を更新する技術が開示されている。
【0005】
また、特許文献3には、複数のPDL処理部に、各処理部における処理の待機時間を計測する待機状態計測部が各々設けられた構成が開示されており、計測された待機時間が所定値になるとデータを供給する処理の優先度を上げることも記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−140042号公報
【特許文献2】特開2006−164000号公報
【特許文献3】特開2006−146339号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のように、複数種の画像処理モジュールを任意に組み合わせて所望の画像処理を行う画像処理装置を構築する技術に対しては、例えば画像処理部で実行される一連の画像処理のボトルネックを検知したり、個々の画像処理モジュールで実行される画像処理のアルゴリズムの改良を検討したり、画像処理部を構成する画像処理モジュールの最適な組み合わせを検討する等を目的として、画像処理部の個々の画像処理モジュール単位で画像処理の処理時間を計測し、個々の画像処理モジュールで実行される画像処理の処理時間や処理速度を正確に把握したい、というニーズが存在する。
【0008】
これに対して特許文献1に記載の技術は、画像処理モジュールによって後段のバッファモジュールに書き込まれた画像データのデータ量に基づいて画像処理の進行度合を検知するものであり、この技術を適用したとしても、個々の画像処理モジュールにおける画像処理の処理時間を把握することは不可能である。
【0009】
また、特許文献2に記載の技術は、複数の画像処理演算部が、画像処理を行うと共に、その画像処理に要した時間を計時することを各々繰り返し、個々の画像処理演算部の計時結果に応じて個々の画像処理演算部に割り当てる部分のサイズ(配分率)を適宜変更する構成であり、特許文献2に記載の技術を利用して画像処理の処理時間の計時結果を得るようにした場合、処理時間の計測結果が不要な場合にも処理時間の計時や配分率の変更等を行うことに伴う負荷が加わり、コンピュータの処理能力を有効に利用することができないという問題が生ずる。また特許文献2には、処理時間を計時するための具体的な構成が開示されていない。
【0010】
また、特許文献3に記載の技術は、PDLコマンド処理部のステートマシーンが動作状態を表す信号を常時入力し、当該信号が表す動作状態が待機状態の間、タイマをインクリメントすることで、待機時間を計測する構成であり、上記に代えて動作状態が画像処理実行中の間、タイマをインクリメントする構成とすれば、画像処理の処理時間を計測することは可能である。しかしながら、その場合、個々の画像処理モジュールに、自モジュールの動作状態を常に出力する機能を付加する必要があり、個々の画像処理モジュールのプログラムを各々変更する必要が生ずる。
【0011】
本発明は上記事実を考慮して成されたもので、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現できる画像処理装置、画像処理方法及び画像処理プログラムを得ることが目的である。
【課題を解決するための手段】
【0012】
上記目的を達成するために請求項1記載の発明に係る画像処理装置は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段と、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段と、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段と、を含んで構成されている。
【0013】
請求項1記載の発明では、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、画像処理モジュールに付加可能で、自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、が記憶手段に各々記憶されている。
【0014】
また構築手段は、記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する。このように、動作モードが通常モードの場合、すなわち処理時間の計測を行わない場合には、処理計測モジュールを含まない画像処理部が構築されるので、処理時間の計測を行わない場合に、画像処理部を実現するプログラムを実行するコンピュータの負荷が増大することが防止される。
【0015】
また構築手段は、指定された動作モードが計測モードの場合には、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、画像処理部を構成する1つ以上の画像処理モジュールに処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、収集手段は、動作モードが計測モードの場合、構築手段によって構築された画像処理部に含まれる処理計測モジュールによって計測された画像処理の処理時間を収集する。
【0016】
ここで、処理計測モジュールは、前述のように自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する構成であるので、画像処理部で画像処理が実行される際には、処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間が処理計測モジュールによって計測される。また、処理計測モジュールが画像処理の処理時間を計測するにあたり、例えば画像処理モジュールが自モジュールの動作状態を表す情報を出力したりする必要はなく、画像処理モジュールを実現するプログラムの変更は不要である。
【0017】
従って、請求項1記載の発明によれば、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【0018】
なお、請求項1記載の発明において、動作モードが計測モードの場合に、構築手段によって構築された画像処理部に含まれ、かつ画像処理モジュールに付加された処理計測モジュールは、例えば請求項2に記載したように、処理開始前に処理時間の積算値を初期化し、自モジュールが付加された前記画像処理モジュールへの処理要求を処理要求の入力元から受け付ける度に、受け付けた処理要求を画像処理モジュールに転送すると共に処理時間の計測を開始し、画像処理モジュールから応答が出力される度に、応答を処理要求の入力元へ転送すると共に、処理時間の計測を終了し、当該計測によって得られた処理時間を積算値に加算し、収集手段に対し、画像処理の処理時間の計測結果として前記積算値を出力するように構成することができる。
【0019】
請求項1記載の発明において、収集手段は、画像処理部が画像処理を行っている間、処理計測モジュールによって処理時間が計測される度に(処理計測モジュールが付加された画像処理モジュールで単位処理量の画像処理が行われる度に)、処理時間の計測結果を収集するように構成することも可能であるが、上記のように、計測した処理時間を積算値として積算するように処理計測モジュールを構成することで、画像処理部が画像処理を行っている間、収集手段が処理時間の計測結果を収集する必要が無くなり、処理時間の計測結果の収集が、画像処理部における画像処理が終了した後の1回のみで済む。これにより、動作モードが計測モードの場合に、画像処理部を実現するプログラムを実行するコンピュータの負荷を軽減することができる。
【0020】
また、請求項1又は請求項2記載の発明において、構築手段によって構築された画像処理部に含まれる画像処理モジュールは、例えば請求項3に記載したように、処理開始前に自モジュールの前段の全モジュールの情報を取得・登録しておき、登録した情報に基づき自モジュールの前段の全モジュールから画像データを各々取得する構成であり、処理計測モジュールは、自モジュールが付加された画像処理モジュールの前段のモジュールの数に拘わらず同一の構成であることが好ましい。これにより、処理計測モジュールを付加する画像処理モジュールの前段に連結されるモジュールの数毎に、構成の異なる処理計測モジュール(のプログラム)を用意する必要が無くなり、記憶手段の記憶領域を節減できると共に、構築手段が画像処理部を構築する処理を簡単にすることができる。
【0021】
また、請求項1〜請求項3の何れかに記載の発明において、例えば請求項4に記載したように、収集手段によって収集された画像処理の処理時間を出力するか、又は、収集手段によって収集された画像処理の処理時間に基づいて、画像処理の処理速度を演算して出力する出力手段を更に設けるようにしてもよい。
【0022】
また、請求項4記載の発明において、例えば請求項5に記載したように、収集手段は、画像処理モジュールに付加された処理計測モジュールが画像処理部に複数存在している場合、複数の処理計測モジュールから画像処理の処理時間の計測結果を各々収集し、出力手段は、第1の処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間として、第1の処理計測モジュールより収集された処理時間から、第1の処理計測モジュールの前段に位置する第2の処理計測モジュールより収集された処理時間を減算することを、複数の処理計測モジュールのうち自モジュールの前段に他の処理計測モジュールが存在する処理計測モジュールついて各々行うことで、処理計測モジュールが付加された個々の画像処理モジュールにおける画像処理の処理時間を各々演算するように構成することが好ましい。これにより、画像処理部に、処理計測モジュールが付加された画像処理モジュールが複数存在している場合にも、個々の画像処理モジュールにおける画像処理の正確な処理時間を各々得ることができる。
【0023】
また、請求項1〜請求項5の何れかに記載の発明において、例えば請求項6に記載したように、画像処理部に含まれる個々のモジュールの情報が登録されたテーブルを参照することで、画像処理部に含まれる個々の画像処理モジュールを認識し、画像処理部に含まれる個々の画像処理モジュールに対し、個々の画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する毎に処理要求を入力する処理管理手段を更に設けることができる。
【0024】
また、請求項6記載の発明において、処理管理手段は、例えば請求項7に記載したように、構築手段によって構築された画像処理部に含まれる各モジュールの情報をテーブルに登録すると共に、動作モードが計測モードの場合に、処理計測モジュールの情報については、当該処理計測モジュールが付加された画像処理モジュールの情報と対応付けてテーブルに登録し、画像処理部に含まれる個々の画像処理モジュールのうち、対応する情報を処理計測モジュールの情報と対応付けてテーブルに登録した画像処理モジュールについては、処理要求を処理計測モジュールに入力するように構成することができる。
【0025】
また、請求項6記載の発明において、例えば請求項8に記載したように、画像処理モジュールは、処理要求が入力されると自モジュールの前段へデータ要求を出力し、バッファモジュールは、自モジュールの後段からデータ要求が入力され、自モジュールのバッファに画像データが記憶されていない場合に処理管理手段へデータ要求を出力し、処理管理手段は、画像処理部に含まれるバッファモジュールからデータ要求が入力された場合に、バッファモジュールの前段に位置する画像処理モジュールにおける画像処理の実行タイミングが到来したと判断するように構成することができる。
【0026】
請求項9記載の発明に係る画像処理方法は、記憶手段は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶し、構築手段は、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、収集手段は、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集するので、請求項1記載の発明と同様に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【0027】
請求項10記載の発明に係る画像処理プログラムは、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段を備えたコンピュータを、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段、及び、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段として機能させる。
【0028】
請求項10記載の発明に係る画像処理プログラムは、上記の記憶手段を備えたコンピュータを、上記の構築手段及び収集手段として機能させるためのプログラムであるので、コンピュータが請求項10記載の発明に係る画像処理プログラムを実行することで、コンピュータが請求項1に記載の画像処理装置として機能することになり、請求項1記載の発明と同様に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現することができる。
【発明の効果】
【0029】
以上説明したように本発明は、画像処理モジュールに付加可能で、自モジュールが付加された画像処理モジュールと処理要求の入力元との間の処理要求及びその応答の送受を中継すると共に、処理要求の中継から応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムを記憶手段に記憶しておき、指定された動作モードが計測モードの場合に、画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが連結されると共に、画像処理部を構成する1つ以上の画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、処理計測モジュールによって計測された画像処理の処理時間を収集するようにしたので、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部において、1つ以上の画像処理モジュールの処理時間をモジュール単位で計測することを、処理時間の計測を行わない場合の負荷が増大したり、画像処理モジュールを実現するプログラムの変更を必要となったりすることなく実現できる、という優れた効果を有する。
【図面の簡単な説明】
【0030】
【図1】本実施形態に係るコンピュータ(画像処理装置)の概略構成を示すブロック図である。
【図2】アプリケーションによる処理を説明するためのシーケンス図である。
【図3】モジュール生成部によって実行されるモジュール生成処理の内容を示すフローチャートである。
【図4】画像処理部の構成例を示すブロック図である。
【図5】処理時間計測モジュールが挿入された画像処理部の例を示すブロック図である。
【図6】(A)は画像処理モジュール単独での動作、(B)は画像処理モジュールに処理時間計測モジュールが付加された構成での画像処理モジュール及び処理時間計測モジュールの動作を各々示すブロック図である。
【図7】バッファモジュールの動作を示すブロック図である。
【図8】画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。
【図9】処理管理部によって実行される画像処理部制御処理の内容を示すフローチャートである。
【図10】処理時間計測モジュールによって実行される、(A)は初期化処理、(B)は処理時間計測処理、(C)は処理時間通知処理を各々示すフローチャートである。
【図11】画像処理部における画像処理の流れを説明する概略図である。
【発明を実施するための形態】
【0031】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【0032】
コンピュータ10はCPU12、DRAM又はSRAM等から成るメモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述したような画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【0033】
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
【0034】
図1に示すように、記憶部20には、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
【0035】
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。なお、画像処理プログラム群34を記憶する記憶部20は本発明に係る記憶手段に対応している。画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行うが(詳細は後述)、画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【0036】
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や1画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション32が画像処理部の再構築を指示することで、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【0037】
以下、画像処理プログラム群34について説明する。図1に示すように、画像処理プログラム群34はモジュールライブラリ36と、処理構築部42のプログラムと、処理管理部46のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部42は、アプリケーションからの指示により、例として図4に示すように、予め定められた画像処理を行う1つ以上の画像処理モジュール38と、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール40と、がパイプライン形態又はDAG(Directed Acyclic Graph:有向非循環グラフ)形態で連結されて成る画像処理部50を構築する。画像処理部50を構成する個々の画像処理モジュールの実体はCPU12によって実行されCPU12で所定の画像処理を行わせるための第1プログラム、又は、CPU12によって実行されCPU12により図1に図示されていない外部の画像処理装置(例えば専用画像処理ボード等)に対する処理の実行を指示するための第2プログラムであり、上述したモジュールライブラリ36には、予め定められた互いに異なる画像処理(例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等)を行う複数種の画像処理モジュール38のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部50を構成する個々の画像処理モジュールの実体が上記の第1プログラムであるものとして説明する。
【0038】
個々の画像処理モジュール38は、例として図6(A)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン38A、画像処理モジュール38の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン38Aの制御を行う制御部38B、初期化処理を行う初期化部38C、及び、終了処理を行う終了部38Dから構成されている。個々の画像処理モジュール38における単位処理データ量は、画像の1ライン分、画像の複数ライン分、画像の1画素分、画像1面分等を含む任意のバイト数の中から、画像処理エンジン38Aが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール38では単位処理データ量が1画素分とされ、拡大・縮小処理を行う画像処理モジュール38では単位処理データ量が画像の1ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール38では単位処理データ量が画像1面分とされ、画像圧縮伸長処理を行う画像処理モジュール38では単位処理データ量が実行環境に依存するNバイトとされている。
【0039】
また、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている(図1では、この種の画像処理モジュールを「モジュール1」「モジュール2」と表記して示している)。例えば拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、例えば色変換処理を行う画像処理モジュール38については、RGB色空間をCMY色空間へ変換する画像処理モジュール38やその逆へ変換する画像処理モジュール38、L*a*b*色空間等の他の色空間変換を行う画像処理モジュール38が各々用意されている。
【0040】
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データ量ずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば画像回転処理を行う画像処理モジュール38における単位処理データ量についても、前述した画像1面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる(例えば画像の1ライン分や複数ライン分等の)複数の画像処理モジュール38がモジュールライブラリ36に含まれていても良い。
【0041】
また、モジュールライブラリ36に登録されている個々の画像処理モジュール38のプログラムは、画像処理エンジン38Aに相当するプログラムと、制御部38B、初期化部38C及び終了部38Dに相当するプログラムから構成されているが、制御部38B、初期化部38C及び終了部38Dに相当するプログラムは部品化されており、個々の画像処理モジュール38のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール38は、画像処理エンジン38Aで実行される画像処理の種類や内容に拘わらず、制御部38B、初期化部38C及び終了部38Dに相当するプログラムが共通化されている(制御部38B、初期化部38C及び終了部38Dに相当するプログラムとして同一のプログラムが用いられている)。これにより、画像処理モジュール38のプログラムの開発にあたっての開発負荷が軽減される。
【0042】
なお、画像処理モジュール38の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール38については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール38について、制御部38B、初期化部38C及び終了部38Dに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群34は、前述のように各種機器に実装可能であるが、画像処理プログラム群34のうちモジュールライブラリ36に登録する画像処理モジュール38の数や種類等については、画像処理プログラム群34を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【0043】
また、画像処理部50を構成する個々のバッファモジュール40は、例として図7にも示すように、バッファ40Aと、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行うバッファ制御部40Bから構成されている。なお、バッファ40Aはコンピュータ10に設けられたメモリ14からオペレーティングシステム30及びリソース管理部46Bを通じて確保されたメモリ領域で構成される。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
【0044】
また本実施形態では、画像処理部50の動作モードとして、画像処理部50で画像処理のみを行う通常モードに加えて、画像処理部50で画像処理と処理時間の計測を行う計測モードが設けられており、画像処理部50の動作モードとして計測モードが指定された場合には、図4(A)〜(C)に示す画像処理部50に代えて、例として図5(A)〜(C)にも示すように、画像処理部50を構成する画像処理モジュール38と処理管理部46のワークフロー管理部46A(後述)との間に処理時間計測モジュール48が設けられた画像処理部50が構築される(詳細は後述)。処理時間計測モジュール48もその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36には、処理時間計測モジュール48のプログラムも登録されている(図1では処理時間計測モジュール48のプログラムを「処理時間計測モジュール」と表記して示している)。
【0045】
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。なお処理構築部42は本発明に係る構築手段に対応している。
【0046】
また図1に示すように、処理管理部46は、画像処理部50における画像処理の実行を制御するワークフロー管理部46A、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10のリソースの使用を管理するリソース管理部46B、及び、画像処理部50で発生したエラーを管理するエラー管理部46Cを含んで構成されている。エラー管理部46Cは、画像処理部50が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群34がインストールされたコンピュータ10が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部20等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。なお、ワークフロー管理部46Aは本発明に係る処理管理手段及び収集手段として機能する。
【0047】
次に本実施形態の作用を説明する。画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行が利用者によって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行が利用者によって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えば利用者からの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理が利用者によって選択された等の場合であってもよい。
【0048】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション32は、まず画像処理対象の画像データを供給する画像データ供給部22の種別を認識し(図2のステップ150も参照)、認識した種別がバッファ領域(メモリ14の一部領域)であった場合(図2のステップ152の判定が肯定された場合)には、画像データ供給部22として指定されたバッファ領域を含むバッファモジュール40を生成する(図2のステップ154も参照)。後述するバッファモジュール40の新規生成では、バッファモジュール40のバッファ制御部40Bのプログラムを実行するスレッド(プロセス又はオブジェクトでもよい:以下同様)を生成することでバッファ制御部40Bを生成し、生成されたバッファ制御部40Bによりバッファ40Aとして使用するメモリ領域が確保されることによって成されるが、このステップ154におけるバッファモジュール40の生成は、指定されたバッファ領域を既に確保されたバッファ40Aとして(バッファ制御部40Bに)認識させるパラメータを設定してバッファ制御部40Bを生成する処理を行うことによって成される。ここで生成されたバッファモジュール40は画像データ供給部22として機能する。
【0049】
続いてアプリケーション32は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し(図2のステップ156も参照)、認識した種別がバッファ領域(メモリ14の一部領域)であった場合(図2のステップ158の判定が肯定された場合)は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する(図2のステップ160も参照)。ここで生成されたバッファモジュール40は画像出力部24として機能する。また、アプリケーション32は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する(図2のステップ162も参照)。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、利用者が実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
【0050】
そしてアプリケーション32は、上記で判定した画像処理の種類及び実行順序に基づいて、まず実行順序が1番の画像処理に対応するモジュール生成部44を起動(モジュール生成部44のプログラムを実行するスレッドを生成)した後に(図2のステップ164も参照)、起動したモジュール生成部44に対し、当該モジュール生成部44によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータ、前述の動作モード(通常モード/計測モード)を通知し、対応するモジュール群の生成を指示する(図2のステップ166も参照)。
【0051】
なお、上記の入力モジュールは、実行順序が1番目のモジュール群については画像データ供給部22が入力モジュールとなり、実行順序が2番目以降のモジュール群については前段のモジュール群の最終モジュール(通常はバッファモジュール40)が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部24が出力モジュールとなるので、画像出力部24が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション32による指定は行われず、必要な場合はモジュール生成部44によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えば利用者が実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション32が認識するようにしてもよいし、利用者に指定させるようにしてもよい。
【0052】
また本実施形態では、画像処理部50の動作モードとして通常モード又は計測モードを利用者が選択可能とされている。利用者による動作モードの選択結果は利用者が操作部18を操作することで予め入力され、メモリ14上の所定の領域に情報として保持されており、モジュール生成部44に対して通知する動作モードは、メモリ14上の前記所定の領域に保持されている情報を参照することで判別される。なお、上記の計測モードは、例えば画像処理部50で実行される一連の画像処理のボトルネックを検知したい場合や、画像処理部50を構成する画像処理モジュール38のうち実行される画像処理のアルゴリズムを改良すべき画像処理モジュール38を特定したい場合、或いは、画像処理部50を構成する画像処理モジュール38の最適な組み合わせや最適な処理パラメータを検討したい等の場合に、画像処理部50の動作モードとして選択される。
【0053】
一方、モジュール生成部44は、アプリケーション32によって起動されると図3に示すモジュール生成処理を行う(図2のステップ168も参照)。モジュール生成処理では、まずステップ200において、このモジュール生成部44で次に生成すべき画像処理モジュール38が有るか否かを判定する。生成すべき画像処理モジュール38が有る場合には、ステップ202で生成すべき画像処理モジュール38に入力される入力画像データの属性を表す入力画像属性情報を取得し、次のステップ204では、ステップ202で取得した情報が表す入力画像データの属性に照らしても先のステップ200で生成すべきと判定した画像処理モジュール38の生成が必要か否かを判定する。
【0054】
具体的には、例えば実行中のモジュール生成処理に対応するモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定された場合、ステップ202で取得した入力画像属性情報に基づいて入力画像データがRGB色空間のデータであることが判明した場合には、色空間処理を行う画像処理モジュール38としてRGB→CMYの色空間変換を行う画像処理モジュール38を生成する必要があるが、入力画像データがCMY色空間のデータであった場合には、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール38は生成不要と判断することができる。不要と判断された場合はステップ200に戻る。
【0055】
なお、入力画像データの属性を取得する処理は、生成する画像処理モジュール38の前段にバッファモジュール40が存在している場合、当該バッファモジュール40に画像データの書き込みを行う更に前段の画像処理モジュール38から出力画像データの属性を取得することによって実現できる。
【0056】
次のステップ206では、生成する画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図4(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図4(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定され、バッファモジュール40の生成を行うことなくステップ210へ移行するが、上記以外の場合は判定が肯定されてステップ208へ移行し、バッファ制御部40Bを起動する(バッファ制御部40Bのプログラムを実行するスレッドを生成する)ことで、画像処理モジュールの後段に連結するバッファモジュール40を生成する。
【0057】
次のステップ210では、前段のモジュール(例えばバッファモジュール40)の情報と後段のバッファモジュール40の情報、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、画像処理モジュール38を生成する。なお、ステップ206で後段のバッファモジュール40が不要と判断された画像処理モジュール38に対しては後段のバッファモジュール40の情報は与えられず、また例えば50%縮小処理のように処理内容が固定的で特別な画像処理パラメータが必要ない場合には処理パラメータは与えられない。
【0058】
モジュール生成処理(ステップ210)では、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、ステップ202で取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択する。例えば実行中のモジュール生成処理に対応するモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択される。
【0059】
また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択される。なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いは利用者に選択させるようにしてもよい。
【0060】
次のステップ212では、後段のバッファモジュール40のIDと生成した画像処理モジュール38のIDの組をワークフロー管理部46Aに通知する。このIDは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。ワークフロー管理部46Aに通知された情報は、ワークフロー管理部46Aの内部で管理している管理テーブルに登録され、後の処理で使われる。なお、各モジュールのIDはテーブル形式に代えてリスト形式や連想配列形式等で保持するようにしてもよい。
【0061】
ステップ212の処理が終了すると、モジュール生成部44は制御をステップ200に戻して次に生成すべき画像処理モジュールがあるか否かを判定する。なお、個々のモジュール生成部44は、対応する一定の画像処理を行うモジュール群を生成するので、この判定は、個々のモジュール生成部44毎にどのような画像処理モジュールをどのような接続関係で生成するかに関する情報を予め登録して読み出すか、またはモジュール生成部44を動作させるプログラム中に記述しておくことでも実現できる。例えば実行中のモジュール生成処理に対応するモジュール生成部44が、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38によって実現されるスキュー補正処理)を行うモジュール群を生成する場合には、2個以上の画像処理モジュール38を含むモジュール群が生成される。
【0062】
また、目的とする画像処理(起動されたモジュール生成部44に対応する画像処理)を実現するモジュール群の生成が完了すると、ステップ200の判定が否定されてステップ214へ移行し、指定された動作モードが計測モードか否か判定する。判定が否定された場合はモジュール生成処理を終了するが、ステップ214の判定が肯定された場合はステップ216へ移行し、処理時間計測モジュール48を起動する(処理時間計測モジュール48のプログラムを実行するスレッドを生成する)ことで、前述のステップ200〜ステップ212で生成した画像処理モジュール38に付加する(画像処理モジュール38と処理管理部46のワークフロー管理部46Aとの間に設ける)処理時間計測モジュール48を生成する。また、次のステップ218では、ステップ216で挿入した処理時間計測モジュール48のIDを、ステップ200〜ステップ212で生成した画像処理モジュール38のIDと対応付けてワークフロー管理部46Aに通知し、モジュール生成処理を終了する。
【0063】
これにより、ワークフロー管理部46Aでは、生成された処理時間計測モジュール48のIDと、当該処理時間計測モジュール48が付加された画像処理モジュール38のIDを認識し、通知された処理時間計測モジュール48のIDを、既に登録されている画像処理モジュール38のIDと対応付けて管理テーブルに追加登録する処理が行われる。
【0064】
アプリケーション32は、モジュール群の生成を指示したモジュール生成部44から、上記のようにしてモジュール群の生成完了が通知されると、図2のステップ162における判定の結果に基づいて、必要とされる画像処理を実現するために他の画像処理を行うモジュール群も生成する必要があるか否か判断する。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は、個々の画像処理に対応する他のモジュール生成部44を起動してモジュール群の生成に必要な情報を通知する処理を順次行う(図2のステップ170,172も参照)。そして、順次起動されたモジュール生成部44によって上述したモジュール生成処理(図3)が順次行われる(図2のステップ174も参照)ことで、例として図4(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築されることになる。また、動作モードとして計測モードが選択されている場合には、例として図5(A)〜(C)にも示すように、画像処理部50を構成する個々の画像処理モジュール38に処理時間計測モジュール48が各々付加された(個々の画像処理モジュール38と処理管理部46のワークフロー管理部46Aとの間に処理時間計測モジュール48が各々設けられた)画像処理部50が構築される。
【0065】
ところで、画像処理モジュール38の制御部38Bは、モジュール生成部44によって起動されると画像処理モジュール38の初期化を行う。この初期化では、まずモジュール生成部44から与えられた自モジュールの前段及び後段のモジュールの情報を記憶する。続いて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール40以外、例えば画像データ供給部22や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール40が存在している場合には、前段のバッファモジュール40からの1回の画像データの読み出しによって取得する画像データのデータ量(単位読出データ量)を認識する。この単位読出データ量は、自モジュールの前段のバッファモジュール40の数が1個であれば1個だけであるが、例えば図4(C)に示す画像処理部50において画像合成処理を行う画像処理モジュール38のように、前段のバッファモジュール40の数が複数で、複数のバッファモジュール40から各々取得した画像データを用いて画像処理エンジン38Aが画像処理を行う等の場合、前段の個々のバッファモジュール40に対応する単位読出データ量は、自モジュールの画像処理エンジン38Aが行う画像処理の種類や内容、前段のバッファモジュール40の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール40へ通知することで、前段に存在している全てのバッファモジュール40に単位読出データ量を設定する(図6(A)の(1)も参照)。
【0066】
次に、自モジュールの後段のモジュールを判定する。自モジュールの後段のモジュールがバッファモジュール40以外、例えば画像出力部24や特定のファイル等の場合には、必要に応じてその初期化処理(例えば後段のモジュールが画像出力部24であれば、単位書込データ量に相当するデータ量ずつ画像データを出力することを通知する処理等)を行う。また、後段のモジュールがバッファモジュール40であれば、1回の画像データの書き込みにおける画像データのデータ量(単位書込データ量)を認識し、後段のバッファモジュールに当該単位書込データ量を設定(図6(A)の(2)も参照)する。そして、当該画像処理モジュール38の初期化の完了をモジュール生成部44に通知して処理を終了する。
【0067】
一方、画像処理部50を構成する個々のバッファモジュール40のバッファ制御部40Bは、モジュール生成部44又はアプリケーション32によって起動されるとバッファモジュール40の初期化を行う。バッファモジュール40の初期化では、まず自モジュールの前段の画像処理モジュール38から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール38から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する(図7の(1),(2)も参照)。
【0068】
自モジュールと連結されている全ての画像処理モジュール38から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール38によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ40Aの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量(自モジュールの後段に複数の画像処理モジュール38が連結されている場合は、個々の画像処理モジュール38によって各々設定された単位読出データ量の最大値)を設定してもよいし、単位書込データ量と単位読出データ量(の最大値)の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値(例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量(の最大値)の何れか)を設定するようにしてもよい。
【0069】
また、自モジュールがアプリケーション32によって生成され、画像データ供給部22又は画像出力部24として機能するバッファモジュール40であった場合には、自モジュールのバッファ40Aとして用いるメモリ領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ40Aとして用いる既設のメモリ領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ40Aに書き込まれた画像データのうち、対応する後段の画像処理モジュール38によって読み出されていない画像データ(有効データ)の先頭位置(次の読出開始位置)と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが自モジュールがアプリケーション32によって生成され、画像データ供給部22として機能するバッファモジュール40であれば、自モジュールのバッファ40Aとして用いるメモリ領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール38に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール40の初期化が完了し、バッファ制御部40Bは初期化の完了をワークフロー管理部46Aへ通知する。
【0070】
また、図6(B)に示すように、個々の処理時間計測モジュール48は、画像処理モジュール38とワークフロー管理部46Aとの間の情報の送受を中継すると共に、画像処理モジュール38で実行される画像処理の処理時間を計測する中継・計測部48Aと、初期化処理を行う初期化部48Bから構成されている。初期化部48Aは、自モジュールが生成されると、図10(A)に示す初期化処理を行う。この初期化処理では、ステップ550において、自モジュールに割り当てられたメモリ14の領域のうち処理時間積算値を記憶するための領域を0に初期化する。また、次のステップ552において、自モジュールが付加された画像処理モジュール38の情報(例えばID等)を、自モジュールに割り当てられたメモリ14の領域のうち、各種の設定情報を記憶するための領域に記憶させ(図6(B)の(4)も参照)、処理を終了する。
【0071】
一方、アプリケーション32は、順次起動したモジュール生成部44によって前述のモジュール生成処理が順次行われることで、必要とされる画像処理を行う画像処理部50の構築が完了すると、動作モード毎に用意されたワークフロー管理部46Aのプログラムのうち、選択された動作モードに対応するワークフロー管理部46Aのプログラムを実行するスレッドを起動することで、ワークフロー管理部46Aに対して画像処理部50による画像処理の実行を指示する(図2のステップ176)。
【0072】
処理管理部46のワークフロー管理部46Aは、プログラムが起動されることで図9に示す画像処理部制御処理を行う。ワークフロー管理部46Aは画像処理部制御処理において、画像処理部50を構成する画像処理モジュール38のうちの所定の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求を入力することで、画像処理部50による画像処理を並列に行わせるが、以下では画像処理部50全体の動作説明に先立ち、個々のバッファモジュール40のバッファ制御部40Bによって行われる初期化処理完了以降の処理、個々の画像処理モジュール38の制御部38Bによって行われる画像処理モジュール制御処理について順に説明する。
【0073】
本実施形態では、画像処理モジュール38が後段のバッファモジュール40に画像データを書き込む場合には、画像処理モジュール38からバッファモジュール40へ書込要求が入力され、画像処理モジュール38が前段のバッファモジュール40から画像データを読み出す場合には、画像処理モジュール38からバッファモジュール40へ読出要求が入力される。前段の画像処理モジュール38からの書込要求がバッファモジュール40に入力された場合は、以下で説明するデータ書込処理がバッファ制御部40Bによって実行される。
【0074】
データ書込処理では、まず自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aに対してデータの書き込みと非同期にデータの読み出しも行われるので、バッファ40Aが使用中の場合は入力された書込要求情報をワークメモリ等に保管し、タイマをスタートさせてデータ書込処理を一旦終了する。なお、上記のタイマがタイムアウトした場合は、過去に入力されてワークメモリ等に保管している書込要求情報をワークメモリ等から取り出し、取り出した書込要求情報を処理対象の情報として以降の処理が行われる。
【0075】
続いてデータ書込処理では、確保すべきメモリ領域のサイズとして単位書込データ量をリソース管理部46Bに通知し、書込用として用いるメモリ領域をリソース管理部46Bを介して取得する。次に、自モジュールのバッファ40Aを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在しているか否か判定する。モジュール生成部44によって生成されたバッファモジュール40は、当初はバッファ40Aとして用いるメモリ領域(単位バッファ領域)が確保されておらず、メモリ領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール40に最初に書込要求が入力されたときにはバッファ40Aとして用いるメモリ領域(単位バッファ領域)が存在しておらず、この判定は否定される。また、単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合は上記判定が否定される。
【0076】
単位書込データ量以上の空き領域が有る単位バッファ領域が存在していないと判定された場合は、確保すべきメモリ領域のサイズ(単位バッファ領域のサイズ)をリソース管理部46Bに通知して、自モジュールのバッファ40Aとして用いるメモリ領域(画像データの保管に用いる単位バッファ領域)をリソース管理部46Bを介して取得する。そして、先に取得した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール38へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール38は、先頭アドレスが通知された書込用バッファ領域に画像データを書き込む。
【0077】
このように、本実施形態では、画像処理モジュール38による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写する。これにより、書込要求元の画像処理モジュール38への書込領域の通知は、その先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。なお、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合、すなわちバッファ40Aとして用いるメモリ領域が既に確保されている場合には、既に確保されたメモリ領域のアドレスを画像処理モジュール38に書込領域のアドレスとして通知し、上記メモリ領域への画像データの書き込みを行わせる。
【0078】
前段の画像処理モジュール38による書込領域への画像データの書き込みが完了すると、書込用バッファ領域に書き込まれている画像データに属性情報を付加した後に、保管用バッファ領域にそのまま書き込む。そして、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタのうち有効データの末尾位置を表すポインタを更新すると共に、先に書込用バッファ領域として確保したメモリ領域をリソース管理部46Bによって解放させ、データ書込処理を一旦終了する。なお、書込用バッファ領域はバッファモジュール40の初期化時に確保し、バッファモジュール40の消去時に解放するように構成してもよい。
【0079】
続いて、後段の画像処理モジュール38から読出要求がバッファモジュール40に入力された場合に、バッファモジュール40のバッファ制御部40Bによって実行されるデータ読出処理について説明する。
【0080】
データ読出処理では、まず今回のデータ読出処理の起動要因が、後段の画像処理モジュールからの読出要求の入力による起動か否か判定し、判定が肯定された場合は、後段の画像処理モジュールから入力された読出要求情報を読出用の待ち行列の末尾に登録する。次に、自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aが使用中であれば、読出用の待ち行列に読出要求情報が登録されているか否か判定し、読出要求情報が未登録であればそのままデータ読出処理を終了し、読出要求情報が登録されていればタイマをスタートさせた後にデータ読出処理を終了する。このタイマがタイムアウトするとデータ読出処理が再度起動され、読出用の待ち行列に登録されている未処理の読出要求(情報)が再度取り出され、当該読出要求に応じた処理が行われる。
【0081】
一方、自モジュールのバッファ40Aが使用中でなければ、読出用の待ち行列から先頭に登録されている読出要求情報を取り出し、取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール38を認識し、読出要求元の画像処理モジュール38によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール38に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール38に対応する有効データのバッファ40A上での先頭位置及び末尾位置を認識する。次に、認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール38に対応する有効データ(読出要求元の画像処理モジュール38が読出可能な画像データ)が単位読出データ量以上有るか否か判定する。
【0082】
読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であれば、読出要求元の画像処理モジュール38が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール38に対応する有効データがバッファ40Aに単位読出データ量以上記憶されているか、又は、バッファ40Aに記憶されている読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、確保すべきメモリ領域のサイズとして読出要求元の画像処理モジュール38に対応する単位読出データ量をリソース管理部46Bに通知すると共に、読出に用いるメモリ領域の確保をリソース管理部46Bに要求し、リソース管理部46Bを介して読出用バッファ領域を取得する。
【0083】
次に、読出対象の有効データをバッファ40Aから単位読出データ量分だけ読み出して読出用バッファ領域に書き込み、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール38へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール38は、先頭アドレスが通知された読出領域(読出用バッファ領域)からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール38に通知する。また、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合は、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール38が単位バッファ領域から直接画像データを読み出すようにしてもよい。
【0084】
読出要求元の画像処理モジュール38による読出領域からの画像データの読み出し完了が通知されると、読出用バッファ領域として確保したメモリ領域の先頭アドレス及びサイズをリソース管理部46Bへ通知して、当該メモリ領域をリソース管理部46Bによって解放させる。この読出用バッファ領域についても、バッファモジュール40の初期化時に確保しておき、バッファモジュール40が消去される時に解放するよう構成してもよい。また、読出要求元の画像処理モジュール38に対応する有効データポインタのうち有効データの先頭位置を表すポインタを更新する。
【0085】
次に、後段の個々の画像処理モジュール38に対応する有効データポインタを各々参照し、先のポインタ更新により、バッファ40Aを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール38による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合は、前述した読出用の待ち行列のチェック処理(読出用の待ち行列に読出要求情報が登録されているか否かの判定)を経てデータ読出処理を終了するが、有効データを記憶していない単位バッファ領域が出現した場合は、当該単位バッファ領域をリソース管理部46Bによって解放させた後に読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。
【0086】
一方、バッファ40Aに記憶されており読出要求元の画像処理モジュール38が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合(図7の(4)で読出可能な有効データ無が検知された場合)には、新たな画像データを要求するデータ要求をワークフロー管理部46Aへ出力し(図7の(5)も参照)、読出用の待ち行列から取り出した読出要求情報を元の待ち行列(の先頭又は末尾)に再度登録した後に、読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。この場合、ワークフロー管理部46Aにより、自モジュールの前段の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求が入力されることになる。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
【0087】
詳細は後述するが、ワークフロー管理部46Aはバッファモジュール40からデータ要求が入力されると、データ要求元のバッファモジュール40の前段の画像処理モジュール38(又は当該画像処理モジュール38に付加された処理時間計測モジュール48)に処理要求を入力する(図7の(6)も参照)。この処理要求の入力をトリガとして前段の画像処理モジュール38の制御部38Bで行われる処理により、前段の画像処理モジュール38がバッファモジュール40へ画像データを書込可能な状態になると、前段の画像処理モジュール38から書込要求が入力されることで前述のデータ書込処理が行われ、前段の画像処理モジュール38からバッファモジュール40のバッファ40Aに画像データが書き込まれる(図7の(7),(8)も参照)。これにより、後段の画像処理モジュール38によるバッファ40Aからの画像データの読出が行われることになる(図7の(9)も参照)。
【0088】
上述したデータ書込処理及びデータ読出処理では、一方が自モジュールのバッファ40Aにアクセスしている間、他方がバッファ40Aへのアクセスを停止する排他制御が行われる。これにより、コンピュータ10のCPU12が画像処理部50を構成する個々のモジュールに対応するスレッドを並列に実行しても、単一のバッファモジュール40に複数の要求が同時又は略同時に入力されることによる不都合の発生を回避できるので、コンピュータ10のCPU12が個々のモジュールに対応するスレッドを並列に実行することができる。
【0089】
続いて、画像処理部50を構成する個々の画像処理モジュール38に対し、ワークフロー管理部46A(又はワークフロー管理部46Aからの処理要求を中継する処理時間計測モジュール48)から処理要求が入力される毎に、個々の画像処理モジュール38の制御部38Bによって各々行われる画像処理モジュール制御処理(図8)を説明する。
【0090】
画像処理モジュール制御処理では、まずステップ220において、自モジュールの前段にモジュール(バッファモジュール40や画像データ供給部22、画像処理モジュール38等)が存在している場合に、当該前段のモジュールに対してデータ(画像データ又は解析等の画像処理の処理結果)を要求する。次のステップ222では前段のモジュールからデータが取得可能であるかを判定し、ステップ222の判定が否定された場合はステップ224で全体処理終了が通知されたか否かを判定する。ステップ224の判定が否定された場合はステップ222に戻り、前段のモジュールからデータを取得可能となる迄ステップ222,224を繰り返す。
【0091】
ここで、自モジュールの前段のモジュールがバッファモジュール40である場合には、先のステップ220でデータを要求すると(読出要求)、読出可能な有効データがバッファモジュール40のバッファ40Aに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール40の前段の画像処理モジュール38が当該バッファモジュール40のバッファ40Aに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ222の判定が肯定されてステップ226へ移行し、前段のバッファモジュール40より先頭アドレスが通知された読出領域から単位読出データ量(又はそれ未満のデータ量)の画像データを読み出し、一時保管用のメモリ領域に書き込むデータ取得処理を行う(図6(A)の(3)も参照)。
【0092】
また、自モジュールの前段のモジュールが画像データ供給部22であれば、先のステップ220でデータ要求を出力すると画像データを取得可能な状態であることが前段の画像データ供給部22から直ちに通知されることで、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像データ供給部22から単位読出データ量の画像データを取得し、一時保管用のメモリ領域に書き込むデータ取得処理を行う。また、自モジュールの前段のモジュールが画像処理モジュール38であれば、先のステップ220でデータ要求(処理要求)を出力すると、前段の画像処理モジュール38が画像処理を実行可能な状態であれば書込要求が入力されることでデータ(画像処理結果)を取得可能な状態であることが通知されるので、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像処理モジュール38によってデータを書き込ませる一時保管用のメモリ領域のアドレスを通知して書込を要請することで、前段の画像処理モジュール38から出力されるデータを一時保管用のメモリ領域に書き込ませるデータ取得処理を行う。
【0093】
次のステップ228では、自モジュールの前段に複数のモジュールが連結されているか否か判定する。判定が否定された場合には何ら処理を行うことなくステップ232へ移行するが、判定が肯定された場合はステップ230へ移行し、前段に連結されている全てのモジュールからデータを取得したか否か判定する。ステップ230の判定が否定された場合はステップ220に戻り、ステップ230の判定が肯定される迄ステップ220〜ステップ230を繰り返す。前段のモジュールから取得すべきデータが全て揃うと、ステップ228の判定が否定されるかステップ230の判定が肯定されてステップ232へ移行する。
【0094】
次のステップ232では自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、ステップ232でデータ出力領域が取得できる迄(データ出力領域の先頭アドレスが通知される迄)繰り返し判定を行う。なお、後段のモジュールがバッファモジュール40であれば、上記のデータ出力用領域の要求は当該バッファモジュール40に対して書込要求を出力することによって成される。データ出力領域(後段のモジュールがバッファモジュール40であれば当該バッファモジュール40から先頭アドレスが通知された書込領域)が取得できたら(図6(A)の(4)も参照)、次のステップ236において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)、画像処理用のメモリ領域(の先頭アドレス及びサイズ)を画像処理エンジン38Aに入力し、入力したデータに対し画像処理用のメモリ領域を使用して所定の画像処理を行わせる(図6(A)の(5)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図6(A)の(6)も参照)。画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ238で出力が完了したことを後段のモジュールに通知する。
【0095】
上記のステップ220〜ステップ238により画像処理モジュール38における単位処理データ量のデータに対する処理(単位処理)が完了し、次のステップ242において、ワークフロー管理部46Aへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことを処理要求の入力元(ワークフロー管理部46A又は処理時間計測モジュール48)へ通知し、画像処理モジュール制御処理を終了する。
【0096】
また、処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ224の判定が肯定されてステップ244へ移行し、処理対象の画像データ(なお、処理対象の画像データは1頁分の画像データであることが多いが、複数頁分の画像データであってもよい)に対する処理が終了したことを意味する全体処理終了通知を処理要求の入力元及び後段のモジュールへ各々出力する。また、次のステップ246では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
【0097】
次に、ワークフロー管理部46Aによる処理を説明する。なお、以下では、まず動作モードとして通常モードが選択されていることで起動された、通常モードに対応するワークフロー管理部46Aによる処理を説明する。ワークフロー管理部46Aは、アプリケーション32によって起動されると図9(A)に示す画像処理部制御処理1を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理1のステップ500において、画像処理部50のうち最後段の画像処理モジュール38に処理要求を入力し(図11(A)の(1)参照)、画像処理部制御処理1を終了する。
【0098】
図11(A)に示す画像処理部50において、ワークフロー管理部46Aから最後段の画像処理モジュール384に処理要求が入力されると、画像処理モジュール384の制御部38Bは前段のバッファモジュール403に読出要求を入力する(図11(A)の(2)参照)。このとき、バッファモジュール403のバッファ40Aには画像処理モジュール384が読出可能な有効データ(画像データ)が記憶されていないので、バッファモジュール403のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図11(A)の(3)参照)。
【0099】
ワークフロー管理部46Aは、バッファモジュール40からデータ要求が入力される毎に、図9(B)に示す画像処理部制御処理2を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理2において、ステップ510でデータ要求入力元のバッファモジュール40(ここではバッファモジュール403)の前段の画像処理モジュール38(ここでは画像処理モジュール383)を認識し、認識した前段の画像処理モジュール38に処理要求を入力(図11(A)の(4)参照)して処理を終了する。
【0100】
画像処理モジュール383の制御部38Bは、処理要求が入力されると前段のバッファモジュール402に読出要求を入力し(図11(A)の(5)参照)、バッファモジュール402のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール402のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図11(A)の(6)参照)。ワークフロー管理部46Aは、バッファモジュール402からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール382に処理要求を入力し(図11(A)の(7)参照)、画像処理モジュール383の制御部38Bは前段のバッファモジュール401に読出要求を入力する(図11(A)の(8)参照)。また、バッファモジュール401のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール401のバッファ制御部40Bもワークフロー管理部46Aにデータ要求を入力し(図11(A)の(9)参照)。ワークフロー管理部46Aは、バッファモジュール401からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール381に処理要求を入力する(図11(A)の(10)参照)。
【0101】
ここで、画像処理モジュール381の前段のモジュールは画像データ供給部22であるので、画像処理モジュール381の制御部38Bは、画像データ供給部22にデータ要求を入力することで画像データ供給部22から単位読出データ量の画像データを取得し(図11(A)の(11)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール401のバッファ40Aに書き込む(図11(A)の(12)参照)。
【0102】
また、バッファモジュール401のバッファ制御部40Bは、後段の画像処理モジュール382が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール382に対して読出を要請し、これに伴い画像処理モジュール382の制御部38Bは、バッファモジュール401のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(13)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール402のバッファ40Aに書き込む(図11(A)の(14)参照)。
【0103】
以下同様に、バッファモジュール402のバッファ制御部40Bは、後段の画像処理モジュール383が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール383へ読出を要請し、画像処理モジュール383の制御部38Bは、バッファモジュール402のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(15)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール403のバッファ40Aに書き込む(図11(A)の(16)参照)。
【0104】
また、バッファモジュール403のバッファ制御部40Bは、後段の画像処理モジュール384が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール384に対して読出を要請し、これに伴い画像処理モジュール384の制御部38Bは、バッファモジュール403のバッファ40Aから単位読出データ量の画像データを読み出し(図11(A)の(17)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部24へ出力する(図11(A)の(18)参照)。
【0105】
また、個々の画像処理モジュール38の制御部38Bは、後段のバッファモジュール40のバッファ40Aへの画像データの書き込みを完了すると、ワークフロー管理部46Aへ処理完了通知を入力する。ワークフロー管理部46Aは、画像処理モジュール38から処理完了通知が入力される毎に、図9(C)に示す画像処理部制御処理3を行う。通常モードに対応するワークフロー管理部46Aは、画像処理部制御処理3において、ステップ520で処理完了通知元の画像処理モジュール38に処理要求を再度入力し、処理を終了する。このように、画像処理モジュール38から処理完了通知が入力される毎に、処理完了通知元の画像処理モジュール38へ処理要求を再度入力することで、処理対象の画像データに対する画像処理が、個々の画像処理モジュール38で並列に行われる。
【0106】
また、画像データ供給部22から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール38からワークフロー管理部46Aへの全体処理終了通知の入力が、前段側の画像処理モジュール38から順次行われる。ワークフロー管理部46Aは、画像処理モジュール38から全体処理終了通知が入力される毎に、図9(D)に示す画像処理部制御処理4を行う。
【0107】
この画像処理部制御処理4では、ステップ530において、全体処理終了通知入力元のモジュール(画像処理モジュール38又は処理時間計測モジュール48)が最後段のモジュールか否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部24へ全て出力されることで、最後段のモジュールから全体処理終了通知が入力された場合にはステップ530の判定が肯定され、ステップ532(後述)を経てステップ542へ移行し、アプリケーション32に対して画像処理の完了を通知し(図2のステップ180も参照)、画像処理部制御処理4を終了する。そして、画像処理の完了が通知されたアプリケーション32は、利用者に対して画像処理の完了を通知する(図2のステップ182も参照)。
【0108】
次に、動作モードとして計測モードが選択されている場合の処理を説明する。動作モードとして計測モードが選択されている場合、例として図5や図11(B)に示すように、画像処理部50の個々の画像処理モジュール38とワークフロー管理部46Aとの間に処理時間計測モジュール48が各々設けられており、計測モードに対応するワークフロー管理部46Aが起動されている。
【0109】
ワークフロー管理部46Aは、前述のように、アプリケーション32によって起動されたことをトリガとして、図9(A)に示す画像処理部制御処理1を行うが、計測モードに対応するワークフロー管理部46Aは、この画像処理部制御処理1のステップ500において、管理テーブルを参照し、画像処理部50のうち最後段の画像処理モジュール38に付加されている処理時間計測モジュール48を認識し、認識した処理時間計測モジュール48に処理要求を入力し(図11(B)の(1)も参照)、画像処理部制御処理1を終了する。
【0110】
また、計測モードに対応するワークフロー管理部46Aは、バッファモジュール40からのデータ要求の入力をトリガとして行われる画像処理部制御処理2(図9(B)参照)のステップ510においても、管理テーブルを参照し、データ要求入力元のバッファモジュール40の前段の画像処理モジュール38に付加されている処理時間計測モジュール48を認識し、認識した処理時間計測モジュール48に処理要求を入力し(図11(B)の(1),(4),(7),(10)も参照)、画像処理部制御処理2を終了する。更に、計測モードに対応するワークフロー管理部46Aは、処理完了通知が処理時間計測モジュール48から入力されるが(後述)、この処理完了通知の入力をトリガとして行われる画像処理部制御処理3(図9(C)参照)のステップ520において、処理完了通知入力元の処理時間計測モジュール48に処理要求を入力し、画像処理部制御処理3を終了する。
【0111】
一方、画像処理部50に設けられた個々の処理時間計測モジュール48(の中継・計測部48A)は、ワークフロー管理部46Aから処理要求が入力される度に(図6(B)の(5)も参照)、図10(B)に示す処理時間計測処理を行う。この処理時間計測処理では、まずステップ560において、ワークフロー管理部46Aから入力された処理要求を、自モジュールが付加されている画像処理モジュール38へ転送する(図6(B)の(6)も参照)。これにより、自モジュールが付加されている画像処理モジュール38の制御部38Bでは、前述の画像処理モジュール制御処理(図8)が行われる。また、次のステップ562では、一定時間周期でカウント値を1ずつインクリメントすることで経過時間を計測する計時タイマをスタートさせることで、自モジュールが付加されている画像処理モジュール38による画像処理の処理時間の計測を開始する。
【0112】
次のステップ564では、自モジュールが付加されている画像処理モジュール38から処理完了が通知されたか否か判定し、判定が肯定される迄ステップ564を繰り返す。自モジュールが付加されている画像処理モジュール38から処理完了が通知されると(図6(B)の(11)も参照)、ステップ564の判定が肯定されてステップ566へ移行し、先のステップ562でスタートさせた計時タイマからカウント値、すなわち自モジュールが付加されている画像処理モジュール38による画像処理の処理時間の計測結果を取得する。次のステップ568では、ステップ566で取得した処理時間を、メモリ14に記憶している処理時間の積算値に積算する。そしてステップ570では、画像処理モジュール38からの処理完了通知をワークフロー管理部46Aへ転送し(図6(B)の(12)も参照)、処理時間計測処理を終了する。
【0113】
ワークフロー管理部46Aから処理要求が入力される度に、個々の処理時間計測モジュール48で上記の処理時間計測処理が行われることで、図6(B)の(5),(6)及び図6(B)の(11),(12)に示すように、ワークフロー管理部46Aと画像処理モジュール38との間の処理要求及び処理完了通知の送受が処理時間計測モジュール48によって中継されると共に、ワークフロー管理部46Aから画像処理モジュール38への処理要求の中継を行ってから、画像処理モジュール38からワークフロー管理部46Aへの処理完了通知の中継を行う迄の時間が、画像処理モジュール38における画像処理の処理時間として計測される。このように、画像処理の処理時間を計測するか否かに拘わらず、個々の画像処理モジュール38における処理は同じであるので、個々の画像処理モジュール38における画像処理の処理時間を計測するにあたり、個々の画像処理モジュール38の構成(プログラム)を変更する必要が無くなる。
【0114】
また、計測モードに対応するワークフロー管理部46Aに対し、最後段の処理時間計測モジュール48から全体処理終了通知が入力された場合は、前述の画像処理部制御処理4(図9(D)参照)のステップ530,532が各々肯定されてステップ534へ移行し、画像処理部50を構成する全ての処理時間計測モジュール48に対し、処理時間の計測結果の転送を各々要求する。これにより、個々の処理時間計測モジュール48では、図10(C)に示す処理時間通知処理が行われ、当該処理のステップ580において、メモリ14に記憶されている処理時間の積算値が読み出されてワークフロー管理部46Aへ出力する処理が行われ、個々の処理時間計測モジュール48による処理時間の計測結果がワークフロー管理部46Aに各々取得される。
【0115】
画像処理部制御処理4(図9(D)参照)では、次のステップ536において、i番目の処理時間計測モジュール48から取得した処理時間の計測結果(ti)から、i−1番目の処理時間計測モジュール48から取得した処理時間の計測結果(ti-1)を減算することを、1番目の処理時間計測モジュール48から取得した処理時間の計測結果(t1)を除く全ての処理結果に対して行う。これにより、個々の画像処理モジュール38毎に、個々の画像処理モジュール38における画像処理の処理時間のうち、前段のモジュールの処理終了を待機している待ち時間を除外した、正確な処理時間が算出される。
【0116】
次のステップ538では、ステップ536で個々の画像処理モジュール38毎に得られた処理時間と、一連の画像処理で個々の画像処理モジュール38に入力された画像データ(又は個々の画像処理モジュール38から出力された画像データ)のデータ量に基づいて、画像処理の処理速度を個々の画像処理モジュール38毎に演算する。この処理速度は、処理時間を画像データのデータ量で除すことで単位データ量当りの処理時間として算出するようにしてもよいし、画像データのデータ量を処理時間で除すことで単位時間当りの処理データ量として算出するようにしてもよい。
【0117】
そしてステップ540では、先のステップ536で個々の画像処理モジュール38毎に得られた処理時間と、ステップ538で個々の画像処理モジュール38毎に演算した画像処理の処理速度を、例えば表示部16に表示させる等によって出力し、先に説明したステップ540を経て画像処理部制御処理4(図9(D)参照)を終了する。
【0118】
これにより、利用者が上記処理で出力された処理時間や処理速度を参照することで、画像処理部50で実行される一連の画像処理のボトルネックを検知したり、実行される画像処理のアルゴリズムを改良すべき画像処理モジュール38を特定したり、画像処理部50を構成する画像処理モジュール38の最適な組み合わせや最適な処理パラメータを検討したりすることが可能となる。
【0119】
なお、上記では画像処理部50を構成する全ての画像処理モジュール38に対して処理時間の計測を行う態様を説明したが、本発明はこれに限定されるものではなく、画像処理部50を構成する画像処理モジュール38のうちの一部の画像処理モジュール38(例えば、利用者によって指定された画像処理を行う画像処理モジュール38や、予め設定された画像処理モジュール38等)に対してのみ処理時間の計測を行うようにしてもよい。
【0120】
また、上記では個々の画像処理モジュール38毎に得られた画像処理の処理時間及び処理速度を、表示部16に表示させる等によって出力する態様を説明したが、本発明はこれに限定されるものではなく、個々の画像処理モジュール38毎に得られた画像処理の処理時間及び処理速度に基づき、個々の画像処理モジュール38に相当するプログラム(や個々のバッファモジュール40のバッファ制御部40Bに相当するプログラム)の実行優先度や、個々の画像処理モジュール38への各種リソース(例えばメモリ14等の記憶リソースや、CPU、MMX(MultiMedia eXtention)用の演算器、SSE (Streaming SIMD Extension)用の演算器、CPUと別に設けられたDSP(Digital Signal Processor)等の高速演算器等のプログラム実行リソース)の割当を、個々の画像処理モジュール38毎に得られた画像処理の処理時間や処理速度に応じて変更する(例えば処理速度が比較的低い画像処理モジュール38の実行優先度を高くしたり、各種リソースを優先的に割当てる等)等の制御を行うようにしてもよい。
【0121】
また、上記では画像処理部50の個々の画像処理モジュール38における画像処理を並列に行わせる実行形態に本発明を適用した態様を説明したが、画像処理の実行形態は上記に限定されるものではない。画像処理部50では、例えば、単一の画像処理モジュール38でのみ画像処理(単位処理)を繰り返し行わせ、前記画像処理モジュール38における1面分の画像データに対する画像処理が完了し、前記画像処理モジュール38の後段のバッファモジュール40のバッファ40Aに1面分の画像データが蓄積されると、画像処理(単位処理)を繰り返し行わせる画像処理モジュール38を、バッファ40Aに1面分の画像データが蓄積されたバッファモジュール40の後段の単一の画像処理モジュール38に切り替える制御を、画像処理部50の前段側の画像処理モジュール38から順に適用する実行形態(所謂面単位処理)で画像処理を行わせることも可能であるが、本発明は面単位処理で画像処理を行われるように画像処理部50を制御する場合の処理時間の計測にも適用可能である。
【0122】
更に、上記では本発明に係る画像処理プログラムに相当する画像処理プログラム群34がコンピュータ10に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
【符号の説明】
【0123】
10 コンピュータ
16 表示部
38 画像処理モジュール
40 バッファモジュール
42 処理構築部
44 モジュール生成部
46 処理管理部
46A ワークフロー管理部
48 処理時間計測モジュール
50 画像処理部
【特許請求の範囲】
【請求項1】
処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段と、
前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段と、
前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段と、
を含む画像処理装置。
【請求項2】
前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれ、かつ前記画像処理モジュールに付加された前記処理計測モジュールは、処理開始前に処理時間の積算値を初期化し、自モジュールが付加された前記画像処理モジュールへの処理要求を前記処理要求の入力元から受け付ける度に、受け付けた前記処理要求を前記画像処理モジュールに転送すると共に処理時間の計測を開始し、前記画像処理モジュールから前記応答が出力される度に、前記応答を前記処理要求の入力元へ転送すると共に、処理時間の計測を終了し、当該計測によって得られた処理時間を前記積算値に加算し、前記収集手段に対し、画像処理の処理時間の計測結果として前記積算値を出力する請求項1記載の画像処理装置。
【請求項3】
前記構築手段によって構築された前記画像処理部に含まれる前記画像処理モジュールは、処理開始前に自モジュールの前段の全モジュールの情報を取得・登録しておき、登録した情報に基づき自モジュールの前段の全モジュールから画像データを各々取得する構成であり、
前記処理計測モジュールは、自モジュールが付加された画像処理モジュールの前段のモジュールの数に拘わらず同一の構成とされている請求項1又は請求項2記載の画像処理装置。
【請求項4】
前記収集手段によって収集された画像処理の処理時間を出力するか、又は、前記収集手段によって収集された画像処理の処理時間に基づいて、画像処理の処理速度を演算して出力する出力手段を更に備えた請求項1〜請求項3の何れか1項記載の画像処理装置。
【請求項5】
前記収集手段は、前記画像処理モジュールに付加された前記処理計測モジュールが前記画像処理部に複数存在している場合、複数の前記処理計測モジュールから画像処理の処理時間の計測結果を各々収集し、
前記出力手段は、第1の前記処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間として、第1の前記処理計測モジュールより収集された処理時間から、第1の前記処理計測モジュールの前段に位置する第2の前記処理計測モジュールより収集された処理時間を減算することを、複数の前記処理計測モジュールのうち自モジュールの前段に他の前記処理計測モジュールが存在する前記処理計測モジュールついて各々行うことで、前記処理計測モジュールが付加された個々の画像処理モジュールにおける画像処理の処理時間を各々演算する請求項4記載の画像処理装置。
【請求項6】
前記画像処理部に含まれる個々のモジュールの情報が登録されたテーブルを参照することで、前記画像処理部に含まれる個々の画像処理モジュールを認識し、前記画像処理部に含まれる個々の画像処理モジュールに対し、個々の前記画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する毎に前記処理要求を入力する処理管理手段を更に備えた請求項1〜請求項5の何れか1項記載の画像処理装置。
【請求項7】
前記処理管理手段は、前記構築手段によって構築された前記画像処理部に含まれる各モジュールの情報を前記テーブルに登録すると共に、前記動作モードが計測モードの場合に、前記処理計測モジュールの情報については、当該処理計測モジュールが付加された前記画像処理モジュールの情報と対応付けて前記テーブルに登録し、前記画像処理部に含まれる個々の画像処理モジュールのうち、対応する情報を処理計測モジュールの情報と対応付けて前記テーブルに登録した前記画像処理モジュールについては、前記処理要求を前記処理計測モジュールに入力する請求項6記載の画像処理装置。
【請求項8】
前記画像処理モジュールは、前記処理要求が入力されると自モジュールの前段へデータ要求を出力し、前記バッファモジュールは、自モジュールの後段から前記データ要求が入力され、自モジュールのバッファに画像データが記憶されていない場合に前記処理管理手段へデータ要求を出力し、
前記処理管理手段は、前記画像処理部に含まれるバッファモジュールから前記データ要求が入力された場合に、前記バッファモジュールの前段に位置する前記画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する請求項6記載の画像処理装置。
【請求項9】
記憶手段は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶し、
構築手段は、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、
収集手段は、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する画像処理方法。
【請求項10】
処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段を備えたコンピュータを、
前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段、
及び、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段
として機能させるための画像処理プログラム。
【請求項1】
処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段と、
前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段と、
前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段と、
を含む画像処理装置。
【請求項2】
前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれ、かつ前記画像処理モジュールに付加された前記処理計測モジュールは、処理開始前に処理時間の積算値を初期化し、自モジュールが付加された前記画像処理モジュールへの処理要求を前記処理要求の入力元から受け付ける度に、受け付けた前記処理要求を前記画像処理モジュールに転送すると共に処理時間の計測を開始し、前記画像処理モジュールから前記応答が出力される度に、前記応答を前記処理要求の入力元へ転送すると共に、処理時間の計測を終了し、当該計測によって得られた処理時間を前記積算値に加算し、前記収集手段に対し、画像処理の処理時間の計測結果として前記積算値を出力する請求項1記載の画像処理装置。
【請求項3】
前記構築手段によって構築された前記画像処理部に含まれる前記画像処理モジュールは、処理開始前に自モジュールの前段の全モジュールの情報を取得・登録しておき、登録した情報に基づき自モジュールの前段の全モジュールから画像データを各々取得する構成であり、
前記処理計測モジュールは、自モジュールが付加された画像処理モジュールの前段のモジュールの数に拘わらず同一の構成とされている請求項1又は請求項2記載の画像処理装置。
【請求項4】
前記収集手段によって収集された画像処理の処理時間を出力するか、又は、前記収集手段によって収集された画像処理の処理時間に基づいて、画像処理の処理速度を演算して出力する出力手段を更に備えた請求項1〜請求項3の何れか1項記載の画像処理装置。
【請求項5】
前記収集手段は、前記画像処理モジュールに付加された前記処理計測モジュールが前記画像処理部に複数存在している場合、複数の前記処理計測モジュールから画像処理の処理時間の計測結果を各々収集し、
前記出力手段は、第1の前記処理計測モジュールが付加された画像処理モジュールにおける画像処理の処理時間として、第1の前記処理計測モジュールより収集された処理時間から、第1の前記処理計測モジュールの前段に位置する第2の前記処理計測モジュールより収集された処理時間を減算することを、複数の前記処理計測モジュールのうち自モジュールの前段に他の前記処理計測モジュールが存在する前記処理計測モジュールついて各々行うことで、前記処理計測モジュールが付加された個々の画像処理モジュールにおける画像処理の処理時間を各々演算する請求項4記載の画像処理装置。
【請求項6】
前記画像処理部に含まれる個々のモジュールの情報が登録されたテーブルを参照することで、前記画像処理部に含まれる個々の画像処理モジュールを認識し、前記画像処理部に含まれる個々の画像処理モジュールに対し、個々の前記画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する毎に前記処理要求を入力する処理管理手段を更に備えた請求項1〜請求項5の何れか1項記載の画像処理装置。
【請求項7】
前記処理管理手段は、前記構築手段によって構築された前記画像処理部に含まれる各モジュールの情報を前記テーブルに登録すると共に、前記動作モードが計測モードの場合に、前記処理計測モジュールの情報については、当該処理計測モジュールが付加された前記画像処理モジュールの情報と対応付けて前記テーブルに登録し、前記画像処理部に含まれる個々の画像処理モジュールのうち、対応する情報を処理計測モジュールの情報と対応付けて前記テーブルに登録した前記画像処理モジュールについては、前記処理要求を前記処理計測モジュールに入力する請求項6記載の画像処理装置。
【請求項8】
前記画像処理モジュールは、前記処理要求が入力されると自モジュールの前段へデータ要求を出力し、前記バッファモジュールは、自モジュールの後段から前記データ要求が入力され、自モジュールのバッファに画像データが記憶されていない場合に前記処理管理手段へデータ要求を出力し、
前記処理管理手段は、前記画像処理部に含まれるバッファモジュールから前記データ要求が入力された場合に、前記バッファモジュールの前段に位置する前記画像処理モジュールにおける画像処理の実行タイミングが到来したと判断する請求項6記載の画像処理装置。
【請求項9】
記憶手段は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶し、
構築手段は、前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、
収集手段は、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する画像処理方法。
【請求項10】
処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力し、前記処理要求の入力元へ応答を出力する一連の処理を単位処理量ずつ行う画像処理モジュールのプログラムと、自モジュールの前段から出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段によって読み出させる処理を行うバッファモジュールのプログラムと、前記画像処理モジュールに付加可能で、自モジュールが付加された前記画像処理モジュールと前記処理要求の入力元との間の前記処理要求及びその応答の送受を中継すると共に、前記処理要求の中継から前記応答の中継迄の時間を画像処理の処理時間として計測する処理計測モジュールのプログラムと、を各々記憶する記憶手段を備えたコンピュータを、
前記記憶手段に記憶されている各モジュールのプログラムを用いて、指定された動作モードが通常モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、前記処理計測モジュールを含まず、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築し、前記動作モードが計測モードの場合には、前記画像処理モジュールの前段及び後段の少なくとも一方に前記バッファモジュールが連結されると共に、画像処理部を構成する1つ以上の前記画像処理モジュールに前記処理計測モジュールが付加され、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を構築する構築手段、
及び、前記動作モードが計測モードの場合に、前記構築手段によって構築された前記画像処理部に含まれる前記処理計測モジュールによって計測された画像処理の処理時間を収集する収集手段
として機能させるための画像処理プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2012−43096(P2012−43096A)
【公開日】平成24年3月1日(2012.3.1)
【国際特許分類】
【出願番号】特願2010−182341(P2010−182341)
【出願日】平成22年8月17日(2010.8.17)
【出願人】(306037311)富士フイルム株式会社 (25,513)
【Fターム(参考)】
【公開日】平成24年3月1日(2012.3.1)
【国際特許分類】
【出願日】平成22年8月17日(2010.8.17)
【出願人】(306037311)富士フイルム株式会社 (25,513)
【Fターム(参考)】
[ Back to top ]