JP2008141331A - 画像処理装置及びプログラム - Google Patents
画像処理装置及びプログラム Download PDFInfo
- Publication number
- JP2008141331A JP2008141331A JP2006323639A JP2006323639A JP2008141331A JP 2008141331 A JP2008141331 A JP 2008141331A JP 2006323639 A JP2006323639 A JP 2006323639A JP 2006323639 A JP2006323639 A JP 2006323639A JP 2008141331 A JP2008141331 A JP 2008141331A
- Authority
- JP
- Japan
- Prior art keywords
- image processing
- module
- unit
- buffer
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Digital Computer Display Output (AREA)
- Facsimiles In General (AREA)
- Image Processing (AREA)
Abstract
【課題】画像処理部に加わる負荷の増大を抑制しつつ画像処理部における画像処理の進行度合を検知する。
【解決手段】前段から画像データを取得して画像処理を行い、後段へ出力する複数の画像処理モジュールの前段及び後段の少なくとも一方に、前段のモジュールから出力される画像データをバッファに書き込ませ、後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結された画像処理部において、個々の画像処理モジュールが後段のバッファモジュールに画像データを書き込んだことを契機として、個々の画像処理モジュールからワークフロー管理部に処理完了通知が入力される毎に、ワークフロー管理部は処理完了通知の入力回数を更新して画像処理部における画像処理の進行度合を演算・表示させる((A),(B)の「進行度合更新」も参照)。
【選択図】図10
【解決手段】前段から画像データを取得して画像処理を行い、後段へ出力する複数の画像処理モジュールの前段及び後段の少なくとも一方に、前段のモジュールから出力される画像データをバッファに書き込ませ、後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結された画像処理部において、個々の画像処理モジュールが後段のバッファモジュールに画像データを書き込んだことを契機として、個々の画像処理モジュールからワークフロー管理部に処理完了通知が入力される毎に、ワークフロー管理部は処理完了通知の入力回数を更新して画像処理部における画像処理の進行度合を演算・表示させる((A),(B)の「進行度合更新」も参照)。
【選択図】図10
Description
本発明は画像処理装置及びプログラムに係り、特に、複数の画像処理モジュールの前段及び後段の少なくとも一方にバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて成る画像処理部を備えた画像処理装置、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なDTP(デスクトップ・パブリッシング)システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わせる場合もあるが、例えば色空間や1画素当たりのビット数が異なる様々な画像データが入力されたり、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
このような要求を満たすために、例えば特許文献1には、プログラマブルな処理モジュールをパイプライン形態やDAG(Directed Acyclic Graph:有向非循環グラフ)形態に接続して、所望の画像処理を行うことを可能とする技術が提案されている。特許文献1に記載の技術では、複数のプログラマブル演算処理部の各々における演算処理の内容と、ネットワーク部による各プログラマブル演算処理部の接続形態を、ホストコントロール手段を通じて外部から自在に設定できるように構成することで、高速かつ高度な演算処理が可能で、機能変更や系統変更に対する自由度が高いデジタル映像信号処理装置を実現している。
また、上記に関連して特許文献2には、コンピュータとの情報の交換を行うコンピュータインターフェース手段、コード情報で表された画像情報をコンピュータインターフェース手段を介して受信し、該受信した画像情報を展開する画像展開手段、画像展開手段によって展開された画像を記録する画像記録手段、及び、画像展開手段によって展開された画像を通信回線を介して送受信する画像通信手段が直列的又は並列的に動作可能な複合画像処理システムにおいて、処理単位の管理番号、処理単位を実行する処理部の情報、処理単位の実行状況の情報、処理単位の内容を示す情報及び処理単位の処理中に発生したエラーの内容を示す情報からなるステータス情報を記憶、更新することで各処理手段の処理状況を監視し、監視の結果(ステータス情報)をユーザに通知する技術が開示されている。
特開平5−260373号公報
特開平8−289061号公報
特許文献1に記載の技術のように、複数種の画像処理モジュールを任意に組み合わせて所望の画像処理を行う画像処理装置を構成する場合、以下に述べるような問題がある。すなわち、各画像処理モジュールには、実行する画像処理の種類や内容に応じて処理し易い単位(例えば画素単位、1ライン単位、複数ライン単位、面単位等)がある。しかし、各画像処理モジュールを任意の順番で連結し協調して処理することを可能とするためには、全ての画像処理モジュールの出力単位を揃えるか、或いは各画像処理モジュールが任意の入力単位に対応可能に構成する必要があり、各画像処理モジュールの構成が複雑になる。また、各画像処理モジュールは他の画像処理モジュールと連携して動作するため、各画像処理モジュールには、入力された画像データに対して実際に画像処理を行う部分以外に、自モジュールと連結された他の画像処理モジュールとの間で画像データを受け渡す処理を制御する部分も必要となり、各画像処理モジュールの構成は一層複雑になる。
上記の問題は、画像処理モジュールの前後にバファを設けた構成を用い、個々の画像処理モジュールで各種の画像処理を行わせると共に、個々の画像処理モジュールを、実行する画像処理の種類や内容に応じた処理し易い単位ずつ前段のバッファから画像データを取得して画像処理を行うように構成することで解決可能である。
しかしながら、上記のように個々の画像処理モジュールの出力単位(画像データの取得単位や画像処理の実行単位)が揃っていない場合、複数の画像処理モジュールやバッファから成る画像処理部全体としての画像処理の進行度合を把握することが困難であるという問題がある。このため、画像処理部における画像処理の進行度合を表示したり、画像処理の処理完了時刻を予測したり、或いは、画像処理部における画像処理の進行度合に応じて、個々のモジュールに対応するプログラムの実行優先度や個々のモジュールへのリソースの割当を変更する等の制御を行うことが困難、という不都合が生じる。
これに対し、前述の特許文献2には、各処理手段からの処理状況報告を基にステータス情報を逐次更新することで処理状況を把握・表示する技術が開示されているものの、特許文献2に記載の技術で把握可能な処理状況は、処理手段の状態変化や処理終了等の大雑把な処理状況であると共に、より細かく処理状況を把握するためには、頻繁に処理状況報告を出力するように個々の処理手段を構成する必要があり、個々の処理手段に多大な負荷が加わることで処理遅延等が生ずる可能性がある。
本発明は上記事実を考慮して成されたもので、画像処理部に加わる負荷の増大を抑制しつつ画像処理部における画像処理の進行度合を検知できる画像処理装置及び画像処理プログラムを得ることが目的である。
上記目的を達成するために請求項1記載の発明に係る画像処理装置は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する一連の処理を単位処理量ずつ行う複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部と、前記画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して前記画像処理部を動作させると共に、個々の画像処理モジュール又は個々のバッファモジュールから入力される前記通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、前記画像処理部における画像処理の進行度合を検知する管理手段と、を含んで構成されている。
請求項1記載の発明に係る画像処理部は、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、画像処理を経た画像データ又は画像処理の処理結果を自モジュールの後段へ出力する一連の処理を単位処理量ずつ行う複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成されている。また、請求項1記載の発明に係る管理手段と、画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して画像処理部を動作させる。
このように、請求項1記載の発明では、画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから管理手段に通知又要求が入力され、入力された通知又要求に基づいて管理手段が個々の画像処理モジュールに処理要求を各々入力することで画像処理部が動作される。上記のように、個々の画像処理モジュール又は個々のバッファモジュールから、処理の進行と同期して通知又要求が管理手段に入力される場合、個々の画像処理モジュールにおける単位処理量が既知であれば、個々の画像処理モジュール又は個々のバッファモジュールからの通知又要求の総入力回数を事前に把握できるので、個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行度合を検知可能である。
上記に基づき請求項1記載の発明では、管理手段を、個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、画像処理部における画像処理の進行度合を検知するように構成しているので、画像処理部における画像処理の進行度合を管理手段が検知することができる。また請求項1記載の発明では、個々の画像処理モジュール又は個々のバッファモジュールから管理手段に入力される通知又要求を利用して画像処理の進行度合を検知するので、画像処理の進行度合を検知するか否かに拘わらず、画像処理部の構成を変更する必要もなく、画像処理部に加わる負荷が増大することも抑制することができる。
なお、請求項1記載の発明において、画像処理モジュールが、管理手段から入力された処理要求に応じて一連の処理を行う毎に、管理手段へ処理完了通知を出力する構成である場合、管理手段は、具体的には、例えば請求項2に記載したように、個々の画像処理モジュールから処理完了通知が入力される毎に、処理完了通知の入力元の画像処理モジュールへ処理要求を出力すると共に、個々の画像処理モジュールからの処理完了通知の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、画像処理部における画像処理の進行度合を検知するように構成することができる。
また、請求項1記載の発明において、画像処理モジュールが管理手段から入力された処理要求に応じて一連の処理を行い、当該一連の処理によって得られた画像データがバッファに書き込まれる毎に、バッファモジュールが管理手段へ書込完了通知を出力する構成である場合、管理手段は、具体的には、例えば請求項3に記載したように、個々のバッファモジュールから書込完了通知が入力される毎に、書込完了通知の入力元のバッファモジュールの前段の画像処理モジュールへ処理要求を出力すると共に、個々のバッファモジュールからの書込完了通知の入力回数及び個々のバッファモジュールの前段の個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、画像処理部における画像処理の進行度合を検知するように構成することができる。
また、請求項1記載の発明において、画像処理モジュールが、管理手段から処理要求が入力されると前段のバッファモジュールへ読出要求を出力することでバッファからの画像データの読出しを要求し、当該読出しによって得られた画像データに対して一連の処理を行う構成であり、バッファモジュールが、後段の画像処理モジュールから読出要求が入力された場合に、読出可能な画像データが前記バッファに記憶されているか否かに拘わらず管理手段へデータ要求を出力する構成である場合、管理手段は、具体的には、例えば請求項4に記載したように、個々のバッファモジュールからデータ要求が入力される毎に、データ要求の入力元のバッファモジュールの前段の画像処理モジュールへ処理要求を出力すると共に、個々のバッファモジュールからのデータ要求の入力回数及び個々のバッファモジュールの後段の個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、画像処理部における画像処理の進行度合を検知するように構成することができる。
また、請求項1乃至請求項4の何れかに記載の発明において、管理手段は、例えば請求項5に記載したように、画像処理部による処理対象の画像データのデータ量及び個々の画像処理モジュールにおける単位処理量に基づいて、画像処理部が処理対象の画像データに対する処理を完了する迄の間の、個々の画像処理モジュール又は個々のバッファモジュールからの通知又要求の総入力回数を予め演算し、個々の画像処理モジュール又は個々のバッファモジュールから通知又は要求が入力された回数を計数し、計数した回数を総入力回数で除算することで画像処理の進行度合を検知するように構成することが好ましい。これにより、個々の画像処理モジュールにおける単位処理量が相違している場合にも、個々の画像処理モジュールにおける画像処理の進行度合を正確に検知することができ、画像処理部における画像処理の進行度合を正確に検知することができる。
また、請求項1乃至請求項5の何れかに記載の発明において、管理手段は、例えば請求項6に記載したように、検知した画像処理部における画像処理の進行度合を表示手段に表示させるように構成してもよい。これにより、画像処理部における画像処理の進行度合を利用者に認識させることができる。なお、本発明において、画像処理部における画像処理の進行度合を検知した結果は、上記のように表示手段に表示させることに限られるものではなく、画像処理部における画像処理の処理完了時刻を予測して表示手段に表示させたり、画像処理部における画像処理の進行度合に応じて、個々のモジュールに対応するプログラムの実行優先度や個々のモジュールへのリソースの割当を変更する等の制御を行う際に利用することも可能である。
請求項7記載の発明に係る画像処理プログラムは、コンピュータを、処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する一連の処理を単位処理量ずつ行う複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部、及び、前記画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して前記画像処理部を動作させると共に、個々の画像処理モジュール又は個々のバッファモジュールから入力される前記通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、前記画像処理部における画像処理の進行度合を検知する管理手段として機能させる。
請求項7記載の発明に係る画像処理プログラムは、コンピュータを、上記の画像処理部及び管理手段として機能させるためのプログラムであるので、コンピュータが請求項7記載の発明に係る画像処理プログラムを実行することで、前記コンピュータが請求項1に記載の画像処理装置として機能することになり、請求項1記載の発明と同様に、画像処理部に加わる負荷の増大を抑制しつつ画像処理部における画像処理の進行度合を検知することができる。
以上説明したように本発明は、画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して画像処理部を動作させる管理手段において、個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、画像処理部における画像処理の進行度合を検知するようにしたので、画像処理部に加わる負荷の増大を抑制しつつ画像処理部における画像処理の進行度合を検知できる、という優れた効果を有する。
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
コンピュータ10はCPU12、DRAM又はSRAM等から成るメモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述したような画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
図1に示すように、記憶部20には、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行うが(詳細は後述)、画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や1画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション32が画像処理部の再構築を指示することで、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
以下、画像処理プログラム群34について説明する。図1に示すように、画像処理プログラム群34はモジュールライブラリ36と、処理構築部42のプログラムと、処理管理部46のプログラムに大別される。詳細は後述するが、本実施形態に係る処理構築部42は、アプリケーションからの指示により、例として図2に示すように、予め定められた画像処理を行う1つ以上の画像処理モジュール38と、個々の画像処理モジュール38の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール40と、がパイプライン形態又はDAG(Directed Acyclic Graph:有向非循環グラフ)形態で連結されて成る画像処理部50を構築する。画像処理部50を構成する個々の画像処理モジュールの実体はCPU12によって実行されCPU12で所定の画像処理を行わせるための第1プログラム、又は、CPU12によって実行されCPU12により図1に図示されていない外部の画像処理装置(例えば専用画像処理ボード等)に対する処理の実行を指示するための第2プログラムであり、上述したモジュールライブラリ36には、予め定められた互いに異なる画像処理(例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等)を行う複数種の画像処理モジュール38のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部50を構成する個々の画像処理モジュールの実体が上記の第1プログラムであるものとして説明する。
個々の画像処理モジュール38は、例として図3(A)にも示すように、画像データに対する画像処理を所定の単位処理データ量ずつ行う画像処理エンジン38Aと、画像処理モジュール38の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン38Aの制御を行う制御部38Bから構成されている。個々の画像処理モジュール38における単位処理データ量は、画像の1ライン分、画像の複数ライン分、画像の1画素分、画像1面分等を含む任意のバイト数の中から、画像処理エンジン38Aが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール38では単位処理データ量が1画素分とされ、拡大・縮小処理を行う画像処理モジュール38では単位処理データ量が画像の1ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール38では単位処理データ量が画像1面分とされ、画像圧縮伸長処理を行う画像処理モジュール38では単位処理データ量が実行環境に依存するNバイトとされている。
また、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール38も登録されている(図1では、この種の画像処理モジュールを「モジュール1」「モジュール2」と表記して示している)。例えば拡大・縮小処理を行う画像処理モジュール38については、入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、例えば色変換処理を行う画像処理モジュール38については、RGB色空間をCMY色空間へ変換する画像処理モジュール38やその逆へ変換する画像処理モジュール38、L*a*b*色空間等の他の色空間変換を行う画像処理モジュール38が各々用意されている。
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データ量ずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば画像回転処理を行う画像処理モジュール38における単位処理データ量についても、前述した画像1面分に限られるものではなく、同じ画像回転処理を行いかつ単位処理データ量が互いに異なる(例えば画像の1ライン分や複数ライン分等の)複数の画像処理モジュール38がモジュールライブラリ36に含まれていても良い。
また、モジュールライブラリ36に登録されている個々の画像処理モジュール38のプログラムは、画像処理エンジン38Aに相当するプログラムと制御部38Bに相当するプログラムから構成されているが、制御部38Bに相当するプログラムは部品化されており、個々の画像処理モジュール38のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール38は、画像処理エンジン38Aで実行される画像処理の種類や内容に拘わらず、制御部38Bに相当するプログラムが共通化されている(制御部38Bに相当するプログラムとして同一のプログラムが用いられている)。これにより、画像処理モジュール38のプログラムの開発にあたっての開発負荷が軽減される。
なお、画像処理モジュール38の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール38については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール38について、制御部38Bに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群34は、前述のように各種機器に実装可能であるが、画像処理プログラム群34のうちモジュールライブラリ36に登録する画像処理モジュール38の数や種類等については、画像処理プログラム群34を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
また、画像処理部50を構成する個々のバッファモジュール40は、例として図3(B)にも示すように、バッファ40Aと、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行うバッファ制御部40Bから構成されている。なお、バッファ40Aはコンピュータ10に設けられたメモリ14からオペレーティングシステム30及びリソース管理部46Bを通じて確保されたメモリ領域で構成される。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。
また図1に示すように、処理管理部46は、画像処理部50における画像処理の実行を制御するワークフロー管理部46A、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10のリソースの使用を管理するリソース管理部46B、及び、画像処理部50で発生したエラーを管理するエラー管理部46Cを含んで構成されている。エラー管理部46Cは、画像処理部50が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群34がインストールされたコンピュータ10が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部20等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。なお、ワークフロー管理部46Aは本発明に係る管理手段に対応している。
次に本実施形態の作用を説明する。画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション32は、まず画像処理対象の画像データを供給する画像データ供給部22の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合には、画像データ供給部22として指定されたバッファ領域を既に確保されたバッファ40Aとしてバッファ制御部40Bに認識させるパラメータを設定し、バッファ制御部40Bのプログラムを実行するスレッド(プロセス又はオブジェクトでもよい:以下同様)を生成する(バッファ制御部40Bを生成する)ことで、指定されたバッファ領域を含むバッファモジュール40(画像データ供給部22として機能するバッファモジュール40)を生成する。
続いてアプリケーション32は、上記と同様に、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する。ここで生成されたバッファモジュール40は画像出力部24として機能する。また、アプリケーション32は実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
そしてアプリケーション32は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部44を起動(モジュール生成部44のプログラムを実行するスレッドを生成)した後に、起動したモジュール生成部44に対し、当該モジュール生成部44によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータを通知して対応するモジュール群の生成を指示する。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は、指示したモジュール生成部44からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部44を起動してモジュール群の生成に必要な情報を通知する処理を個々の画像処理の実行順序の昇順に繰り返す。
なお、上記の入力モジュールは、実行順序が1番目のモジュール群については画像データ供給部22が入力モジュールとなり、実行順序が2番目以降のモジュール群については前段のモジュール群の最終モジュール(通常はバッファモジュール40)が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部24が出力モジュールとなるので、画像出力部24が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション32による指定は行われず、必要な場合はモジュール生成部44によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション32が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
一方、モジュール生成部44は、アプリケーション32によって起動されるとモジュール生成処理を行う。モジュール生成処理では、まず生成対象の画像処理モジュール38に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール38の前段にバッファモジュール40が存在している場合、当該バッファモジュール40に画像データの書き込みを行う更に前段の画像処理モジュール38から出力画像データの属性を取得することによって実現できる。
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール38の生成が必要か否か判定する。例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてCMY色空間がアプリケーション32から指定された場合、取得した入力画像属性情報に基づいて入力画像データがRGB色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール38としてRGB→CMYの色空間変換を行う画像処理モジュール38を生成する必要があるが、入力画像データがCMY色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール38は生成不要と判断する。
生成対象の画像処理モジュール38の生成が必要と判断した場合には、生成対象の画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図2(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図2(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定されてバッファ制御部40Bを起動する(バッファ制御部40Bのプログラムを実行するスレッドを各々生成する)ことで、画像処理モジュール38の後段に連結するバッファモジュール40を生成する。
続いて、前段のモジュール(例えばバッファモジュール40)の情報、後段のバッファモジュール40の情報(後段にバッファモジュール40を生成した画像処理モジュール38のみ)、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択・生成(画像処理エンジン38A及び制御部38Bのプログラムを実行するスレッドを生成)する。
例えばモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間が指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択・生成され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択・生成される。
なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いはユーザに選択させるようにしてもよい。
画像処理モジュール38の生成が完了すると、後段のバッファモジュール40のIDと生成した画像処理モジュール38のIDの組をワークフロー管理部46Aに通知する。このIDは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部44が、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理を行う画像処理モジュール38と画像回転処理を行う画像処理モジュール38によって実現されるスキュー補正処理)を行うモジュール群を生成する場合には、上記処理が繰り返されて2個以上の画像処理モジュール38を含むモジュール群が生成される。アプリケーション32によって順次起動された個々のモジュール生成部44により、以上のモジュール生成処理が順次行われることで、例として図2(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築される。
ところで、画像処理モジュール38の制御部38Bは、モジュール生成部44によって起動されると画像処理モジュール38の初期化を行う。この初期化では、まずモジュール生成部44から与えられた自モジュールの前段及び後段のモジュールの情報を記憶する。続いて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール40以外、例えば画像データ供給部22や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール40が存在している場合には、前段のバッファモジュール40からの1回の画像データの読み出しによって取得する画像データのデータ量(単位読出データ量)を認識する。この単位読出データ量は、自モジュールの前段のバッファモジュール40の数が1個であれば1個だけであるが、例えば図2(C)に示す画像処理部50において画像合成処理を行う画像処理モジュール38のように、前段のバッファモジュール40の数が複数で、複数のバッファモジュール40から各々取得した画像データを用いて画像処理エンジン38Aが画像処理を行う等の場合、前段の個々のバッファモジュール40に対応する単位読出データ量は、自モジュールの画像処理エンジン38Aが行う画像処理の種類や内容、前段のバッファモジュール40の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール40へ通知することで、前段に存在している全てのバッファモジュール40に単位読出データ量を設定する(図3(A)の(1)も参照)。
次に、自モジュールの後段のモジュールを判定する。自モジュールの後段のモジュールがバッファモジュール40以外、例えば画像出力部24や特定のファイル等の場合には、必要に応じてその初期化処理(例えば後段のモジュールが画像出力部24であれば、単位書込データ量に相当するデータ量ずつ画像データを出力することを通知する処理等)を行う。また、後段のモジュールがバッファモジュール40であれば、1回の画像データの書き込みにおける画像データのデータ量(単位書込データ量)を認識し、後段のバッファモジュールに当該単位書込データ量を設定(図3(A)の(2)も参照)する。そして、当該画像処理モジュール38の初期化の完了をモジュール生成部44に通知して処理を終了する。
一方、画像処理部50を構成する個々のバッファモジュール40のバッファ制御部40Bは、モジュール生成部44又はアプリケーション32によって起動されるとバッファモジュール40の初期化を行う。バッファモジュール40の初期化では、まず自モジュールの前段の画像処理モジュール38から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール38から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する(図3(B)の(1),(2)も参照)。
自モジュールと連結されている全ての画像処理モジュール38から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール38によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ40Aの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量(自モジュールの後段に複数の画像処理モジュール38が連結されている場合は、個々の画像処理モジュール38によって各々設定された単位読出データ量の最大値)を設定してもよいし、単位書込データ量と単位読出データ量(の最大値)の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値(例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量(の最大値)の何れか)を設定するようにしてもよい。
また、自モジュールがアプリケーション32によって生成され、画像データ供給部22又は画像出力部24として機能するバッファモジュール40であった場合には、自モジュールのバッファ40Aとして用いるメモリ領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ40Aとして用いる既設のメモリ領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ40Aに書き込まれた画像データのうち、対応する後段の画像処理モジュール38によって読み出されていない画像データ(有効データ)の先頭位置(次の読出開始位置)と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが自モジュールがアプリケーション32によって生成され、画像データ供給部22として機能するバッファモジュール40であれば、自モジュールのバッファ40Aとして用いるメモリ領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール38に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール40の初期化が完了し、バッファ制御部40Bは初期化の完了をワークフロー管理部46Aへ通知する。
一方、アプリケーション32は、順次起動したモジュール生成部44によって前述のモジュール生成処理が順次行われることで、必要とされる画像処理を行う画像処理部50の構築が完了すると、ワークフロー管理部46Aのプログラムを実行するスレッドを起動することで、ワークフロー管理部46Aに対して画像処理部50による画像処理の実行を指示する。
処理管理部46のワークフロー管理部46Aは、プログラムが起動されることで図7に示すような画像処理部制御処理を行う。ワークフロー管理部46Aは画像処理部制御処理において、画像処理部50を構成する画像処理モジュール38のうちの所定の画像処理モジュール38に処理要求を入力することで、画像処理部50による画像処理を並列に行わせるが、以下では画像処理部50全体の動作説明に先立ち、個々のバッファモジュール40のバッファ制御部40Bによって行われる初期化処理完了以降の処理、個々の画像処理モジュール38の制御部38Bによって行われる画像処理モジュール制御処理について順に説明する。
本実施形態では、画像処理モジュール38が後段のバッファモジュール40に画像データを書き込む場合には、画像処理モジュール38からバッファモジュール40へ書込要求が入力され、画像処理モジュール38が前段のバッファモジュール40から画像データを読み出す場合には、画像処理モジュール38からバッファモジュール40へ読出要求が入力される。前段の画像処理モジュール38からの書込要求がバッファモジュール40に入力された場合(及び、後述するタイマがタイムアウトした場合)は、以下で説明するデータ書込処理がバッファ制御部40Bによって実行される。
データ書込処理では、まず自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aに対してデータの書き込みと非同期にデータの読み出しも行われるので、バッファ40Aが使用中の場合は入力された書込要求情報をワークメモリ等に保管し、タイマをスタートさせてデータ書込処理を一旦終了する。なお、以降の処理では、入力された書込要求情報を処理対象の情報とするが、タイマがタイムアウトしてデータ書込処理が起動された場合には、過去に入力されてワークメモリ等に保管している書込要求情報をワークメモリ等から取り出し、取り出した書込要求情報を処理対象の情報として以降の処理を行う。
続いてデータ書込処理では、確保すべきメモリ領域のサイズとして単位書込データ量をリソース管理部46Bに通知し、書込用として用いるメモリ領域(書込用バッファ領域:図4(B)も参照)をリソース管理部46Bを介して取得する(リソース管理部における処理については後述する)。次に、自モジュールのバッファ40Aを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在しているか否か判定する。モジュール生成部44によって生成されたバッファモジュール40は、当初はバッファ40Aとして用いるメモリ領域(単位バッファ領域)が確保されておらず、メモリ領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール40に最初に書込要求が入力されたときにはバッファ40Aとして用いるメモリ領域(単位バッファ領域)が存在しておらず、この判定は否定される。また、後述する処理を経てバッファ40Aとして用いる単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合にも上記判定は否定される。
単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在していないと判定された場合は、確保すべきメモリ領域のサイズ(単位バッファ領域のサイズ)をリソース管理部46Bに通知して、自モジュールのバッファ40Aとして用いるメモリ領域(画像データの保管に用いる単位バッファ領域)をリソース管理部46Bを介して取得する。そして、先に取得した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール38へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール38は、先頭アドレスが通知された書込用バッファ領域に画像データを書き込む(図4(B)も参照)。
例えば単位バッファ領域のサイズが単位書込データ量の整数倍でない場合、バッファ40A(単位バッファ領域)への単位書込データ量の画像データの書込が繰り返されることで、例として図4(A)にも示すように、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい状態が生ずる。この場合、単位書込データ量の画像データが書き込まれる領域が複数の単位バッファ領域に跨ることになるが、本実施形態では、バッファ40Aとして用いるメモリ領域を単位バッファ領域を単位として確保するので、異なるタイミングで確保した単位バッファ領域が実メモリ(メモリ14)上で連続する領域であることは保証されない。これに対して本実施形態では、画像処理モジュール38による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、図4(C)に示すように、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写するので、画像データが書き込まれる領域が複数の単位バッファ領域に跨るか否かに拘わらず、書込要求元の画像処理モジュール38への書込領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。
なお、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合、すなわちバッファ40Aとして用いるメモリ領域が既に確保されている場合には、既に確保されたメモリ領域のアドレスを画像処理モジュール38に書込領域のアドレスとして通知し、上記メモリ領域への画像データの書き込みを行わせる。前段の画像処理モジュール38による書込領域への画像データの書き込みが完了すると、書込用バッファ領域に書き込まれている画像データに属性情報を付加した後に、保管用バッファ領域にそのまま書き込む。なお、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい場合、書込用バッファ領域に書き込まれた画像データは、図4(C)に示すように、保管用の複数の単位バッファ領域へ分けて書き込まれることになる。
そして、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタのうち有効データの末尾位置を表すポインタを、該ポインタが指し示す有効データの末尾位置が単位書込データ量分だけ後へ移動するように更新する(図4(C)も参照)と共に、先に書込用バッファ領域として確保したメモリ領域をリソース管理部46Bによって解放させ、データ書込処理を一旦終了する。なお、書込用バッファ領域はバッファモジュール40の初期化時に確保し、バッファモジュール40の消去時に解放するように構成してもよい。
続いて、後段の画像処理モジュール38から読出要求がバッファモジュール40に入力された場合(及び、後述するタイマがタイムアウトした場合)に、バッファモジュール40のバッファ制御部40Bによって実行されるデータ読出処理について説明する。
データ読出処理では、まず今回のデータ読出処理の起動要因が、後段の画像処理モジュールからの読出要求の入力による起動か否か判定し、判定が肯定された場合は、後段の画像処理モジュールから入力された読出要求情報を読出用の待ち行列の末尾に登録する。次に、自モジュールのバッファ40Aが他のスレッドによって使用中か否か判定する。バッファ40Aが使用中であれば、読出用の待ち行列に読出要求情報が登録されているか否か判定し、読出要求情報が未登録であればそのままデータ読出処理を終了し、読出要求情報が登録されていればタイマをスタートさせた後にデータ読出処理を終了する。このタイマがタイムアウトするとデータ読出処理が再度起動され、読出用の待ち行列に登録されている未処理の読出要求(情報)が再度取り出され、当該読出要求に応じた処理が行われる。
一方、自モジュールのバッファ40Aが使用中でなければ、読出用の待ち行列から先頭に登録されている読出要求情報を取り出し、取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール38を認識し、読出要求元の画像処理モジュール38によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール38に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール38に対応する有効データのバッファ40A上での先頭位置及び末尾位置を認識する。次に、認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール38に対応する有効データ(読出要求元の画像処理モジュール38が読出可能な画像データ)が単位読出データ量以上有るか否か判定する。
読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であれば、読出要求元の画像処理モジュール38が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール38に対応する有効データがバッファ40Aに単位読出データ量以上記憶されているか、又は、バッファ40Aに記憶されている読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、確保すべきメモリ領域のサイズとして読出要求元の画像処理モジュール38に対応する単位読出データ量をリソース管理部46Bに通知すると共に、読出に用いるメモリ領域(読出用バッファ領域:図5(B)も参照)の確保をリソース管理部46Bに要求し、リソース管理部46Bを介して読出用バッファ領域を取得する。
次に、読出対象の有効データをバッファ40Aから単位読出データ量分だけ読み出して読出用バッファ領域に書き込み、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール38へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール38は、先頭アドレスが通知された読出領域(読出用バッファ領域)からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール38に通知する。また、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合は、バッファ40Aとして用いているメモリ領域(単位バッファ領域の集合体)は連続領域であるので、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール38が単位バッファ領域から直接画像データを読み出すようにしてもよい。
なお、例として図5(A)に示すように、有効データの先頭部分の画像データを記憶している単位バッファ領域に記憶されている有効データのデータ量が単位読出データ量未満であり、読出対象の有効データが複数の単位バッファ領域に跨っている場合には、今回の読出対象の有効データが実メモリ(メモリ14)上で連続する領域に記憶されているとは限らないが、上記のデータ読出処理では、図5(B),(C)に示すように、このような場合にも読出対象の画像データを読出用バッファ領域に一旦書き込んだ後に該読出用バッファ領域から画像データを読み出させるので、読出対象の画像データが複数の単位バッファ領域に跨って記憶されているか否かに拘わらず、読出要求元の画像処理モジュール38への読出領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。
読出要求元の画像処理モジュール38による読出領域からの画像データの読み出し完了が通知されると、読出用バッファ領域として確保したメモリ領域の先頭アドレス及びサイズをリソース管理部46Bへ通知して、当該メモリ領域をリソース管理部46Bによって解放させる。この読出用バッファ領域についても、バッファモジュール40の初期化時に確保しておき、バッファモジュール40が消去される時に解放するよう構成してもよい。また、読出要求元の画像処理モジュール38に対応する有効データポインタのうち有効データの先頭位置を表すポインタを、該ポインタが指し示す有効データの先頭位置を単位読出データ量分だけ後へ移動させることで更新する(図5(C)も参照)。
次に、後段の個々の画像処理モジュール38に対応する有効データポインタを各々参照し、先のポインタ更新により、バッファ40Aを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール38による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合は、前述した読出用の待ち行列のチェック処理(読出用の待ち行列に読出要求情報が登録されているか否かの判定)を経てデータ読出処理を終了するが、有効データを記憶していない単位バッファ領域が出現した場合は、当該単位バッファ領域をリソース管理部46Bによって解放させた後に読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。
一方、バッファ40Aに記憶されており読出要求元の画像処理モジュール38が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合(図3(B)の(4)で読出可能な有効データ無が検知された場合)には、新たな画像データを要求するデータ要求をワークフロー管理部46Aへ出力し(図3(B)の(5)も参照)、読出用の待ち行列から取り出した読出要求情報を元の待ち行列(の先頭又は末尾)に再度登録した後に、読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。この場合、ワークフロー管理部46Aにより、自モジュールの前段の画像処理モジュール38に処理要求が入力されることになる。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
詳細は後述するが、ワークフロー管理部46Aはバッファモジュール40からデータ要求が入力されると、データ要求元のバッファモジュール40の前段の画像処理モジュール38に処理要求を入力する(図3(A)の(3)、(B)の(6)も参照)。この処理要求の入力をトリガとして前段の画像処理モジュール38の制御部38Bで行われる処理により、前段の画像処理モジュール38がバッファモジュール40へ画像データを書込可能な状態になると、前段の画像処理モジュール38から書込要求が入力されることで前述したデータ書込処理が行われ、前段の画像処理モジュール38からバッファモジュール40のバッファ40Aに画像データが書き込まれる(図3(B)の(7),(8)も参照)。これにより、後段の画像処理モジュール38によるバッファ40Aからの画像データの読出が行われることになる(図3(B)の(9)も参照)。
上述したデータ書込処理及びデータ読出処理では、一方が自モジュールのバッファ40Aにアクセスしている間、他方がバッファ40Aへのアクセスを停止する排他制御が行われる。これにより、コンピュータ10のCPU12が画像処理部50を構成する個々のモジュールに対応するスレッドを並列に実行しても、単一のバッファモジュール40に複数の要求が同時又は略同時に入力されることによる不都合の発生を回避できるので、コンピュータ10のCPU12が個々のモジュールに対応するスレッドを並列に実行することができる。
続いて、画像処理部50を構成する個々の画像処理モジュール38に対してワークフロー管理部46Aから処理要求が入力される毎に、個々の画像処理モジュール38の制御部38Bによって各々行われる画像処理モジュール制御処理(図6)を説明する。
画像処理モジュール制御処理では、まずステップ220において、自モジュールの前段にモジュール(バッファモジュール40や画像データ供給部22、画像処理モジュール38等)が存在している場合に、当該前段のモジュールに対してデータ(画像データ又は解析等の画像処理の処理結果)を要求する(図3(A)の(4)も参照)。次のステップ222では前段のモジュールからデータが取得可能であるかを判定し、ステップ222の判定が否定された場合はステップ224で全体処理終了が通知されたか否かを判定する。ステップ224の判定が否定された場合はステップ222に戻り、前段のモジュールからデータを取得可能となる迄ステップ222,224を繰り返す。ステップ222の判定が肯定された場合には、ステップ226で前段のモジュールからデータを取得し、取得したデータを一時保管用のメモリ領域に書き込むデータ取得処理を行う。
ここで、自モジュールの前段のモジュールがバッファモジュール40である場合には、先のステップ220でデータを要求すると(読出要求)、読出可能な有効データがバッファモジュール40のバッファ40Aに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール40の前段の画像処理モジュール38が当該バッファモジュール40のバッファ40Aに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ222の判定が肯定されてステップ226へ移行し、前段のバッファモジュール40より先頭アドレスが通知された読出領域から単位読出データ量(又はそれ未満のデータ量)の画像データを読み出し、一時保管用のメモリ領域に書き込むデータ取得処理を行う(図3(A)の(5)も参照)。
また、自モジュールの前段のモジュールが画像データ供給部22であれば、先のステップ220でデータ要求を出力すると画像データを取得可能な状態であることが前段の画像データ供給部22から直ちに通知されることで、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像データ供給部22から単位読出データ量の画像データを取得し、一時保管用のメモリ領域に書き込む画像データ取得処理を行う。また、自モジュールの前段のモジュールが画像処理モジュール38であれば、先のステップ220でデータ要求(処理要求)を出力すると、前段の画像処理モジュール38が画像処理を実行可能な状態であれば書込要求が入力されることでデータ(画像処理結果)を取得可能な状態であることが通知されるので、ステップ222の判定が肯定されてステップ226へ移行し、前段の画像処理モジュール38によってデータを書き込ませる一時保管用のメモリ領域のアドレスを通知して書込を要請することで、前段の画像処理モジュール38から出力されるデータを一時保管用のメモリ領域に書き込ませるデータ取得処理を行う。
次のステップ228では、自モジュールの前段に複数のモジュールが連結されているか否か判定する。判定が否定された場合には何ら処理を行うことなくステップ232へ移行するが、判定が肯定された場合はステップ230へ移行し、前段に連結されている全てのモジュールからデータを取得したか否か判定する。ステップ230の判定が否定された場合はステップ220に戻り、ステップ230の判定が肯定される迄ステップ220〜ステップ230を繰り返す。前段のモジュールから取得すべきデータが全て揃うと、ステップ228の判定が否定されるかステップ230の判定が肯定されてステップ232へ移行する。
次のステップ232では自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、ステップ232でデータ出力領域が取得できる迄(データ出力領域の先頭アドレスが通知される迄)繰り返し判定を行う。なお、後段のモジュールがバッファモジュール40であれば、上記のデータ出力用領域の要求は当該バッファモジュール40に対して書込要求を出力することによって成される。データ出力領域(後段のモジュールがバッファモジュール40であれば当該バッファモジュール40から先頭アドレスが通知された書込領域)が取得できたら(図3(A)の(6)も参照)、次のステップ236において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)、画像処理用のメモリ領域(の先頭アドレス及びサイズ)を画像処理エンジン38Aに入力し、入力したデータに対し画像処理用のメモリ領域を使用して所定の画像処理を行わせる(図3(A)の(7)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図3(A)の(8)も参照)。画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ238で出力が完了したことを後段のモジュールに通知する。
上記のステップ220〜ステップ238により画像処理モジュール38における単位処理データ量のデータに対する処理(単位処理)が完了し、次のステップ242において、ワークフロー管理部46Aへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことをワークフロー管理部46Aへ通知し、画像処理モジュール制御処理を終了する。
また、ワークフロー管理部46Aから処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ224の判定が肯定されてステップ244へ移行し、処理対象の画像データ(なお、処理対象の画像データは1頁分の画像データであることが多いが、複数頁分の画像データであってもよい)に対する処理が終了したことを意味する全体処理終了通知をワークフロー管理部46A及び後段のモジュールへ各々出力する。また、次のステップ246では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
一方、ワークフロー管理部46Aは、アプリケーション32によって起動されると、図7(A)に示す画像処理部制御処理1を行う。画像処理部制御処理1では、まずステップ500において、画像処理部50の個々の画像処理モジュール38における単位処理での処理データ量(本発明に係る単位処理量に相当:具体的には、例えば単位読出データ量又は単位書込データ量)を取得する。また、次のステップ501では、画像処理部50に入力される処理対象の画像データの画像データ量及び個々の画像処理モジュール38で行われる画像処理の種類等に基づいて、個々の画像処理モジュール38から出力される画像データのデータ量(すなわち次段の画像処理モジュール38に入力される画像データのデータ量:入力画像データ量)を演算する。そしてステップ502では、個々の画像処理モジュール38毎に、個々の画像処理モジュール38への入力画像データ量を、個々の画像処理モジュール38における単位処理での処理データ量(この場合は単位読出データ量)で除算することで、個々の画像処理モジュール38毎の処理完了通知の総入力回数を演算・記憶すると共に、個々の画像処理モジュール38毎の処理完了通知の総入力回数の合算値を演算し、演算した合算値を画像処理部50全体としての処理完了通知の合計入力回数として記憶する。
なお、個々の画像処理モジュール38毎の処理完了通知の総入力回数は、個々の画像処理モジュール38からの出力画像データ量を、個々の画像処理モジュール38における単位書込データ量で除算することで求めることも可能である。
また、ワークフロー管理部46Aは、画像処理部50における画像処理の進行度合を検知するために、個々の画像処理モジュール38からの処理完了通知の入力回数及び全ての画像処理モジュール38からの処理完了通知の入力回数の合計値(画像処理部50全体の処理完了通知の総入力回数)を保持するための領域をメモリ領域に各々設けており、ステップ503では、これらの領域に記憶されている入力回数(個々の画像処理モジュール毎の処理完了通知の入力回数及び画像処理部50全体としての処理完了通知の総入力回数)を0に初期化する。
ステップ504では、表示部16に表示させる画像処理の進行度合表示画面として、例として図9(A)に示すような初期画面を表示させる。図9に示すように、本実施形態に係る進行度合表示画面には、個々の画像処理モジュール38における画像処理の進行度合及び画像処理部50全体としての画像処理の進行度合を数値(百分率)で表示するための表示領域と、画像処理部50全体としての画像処理の進行度合を表す棒グラフ(プログレスバー)52を表示するための表示領域が設けられており、ステップ504では、画像処理の進行度合が各々0%であることを明示した画面を表示部16に表示させる。そして次のステップ505では、画像処理部50のうち最後段の画像処理モジュール38に処理要求を入力し(図8の(1)、図10(B)の「処理要求」も参照)、画像処理部制御処理1を終了する。
ここで、図8に示す画像処理部50において、ワークフロー管理部46Aから最後段の画像処理モジュール384に処理要求が入力されると、画像処理モジュール384の制御部38Bは前段のバッファモジュール403に読出要求を入力する(図8の(2)、図10(B)の「読出要求」も参照)。このとき、バッファモジュール403のバッファ40Aには画像処理モジュール384が読出可能な有効データ(画像データ)が記憶されていないので、バッファモジュール403のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図8の(3)、図10(B)の「データ要求」も参照)。
ワークフロー管理部46Aは、バッファモジュール40からデータ要求が入力される毎に、図7(B)に示す画像処理部制御処理2を行う。この画像処理部制御処理2では、ステップ510において、データ要求入力元のバッファモジュール40(ここではバッファモジュール403)の前段の画像処理モジュール38(ここでは画像処理モジュール383)を認識し、認識した前段の画像処理モジュール38に処理要求を入力(図8の(4)、図10(B)の「処理要求」も参照)して処理を終了する。
画像処理モジュール383の制御部38Bは、処理要求が入力されると前段のバッファモジュール402に読出要求を入力し(図8の(5)、図10(B)の「読出要求」も参照)、バッファモジュール402のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール402のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図8の(6)、図10(B)の「データ要求」も参照)。ワークフロー管理部46Aは、バッファモジュール402からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール382に処理要求を入力し(図8の(7)、図10(B)の「処理要求」も参照)、画像処理モジュール383の制御部38Bは前段のバッファモジュール401に読出要求を入力する(図8の(8)、図10(B)の「読出要求」も参照)。また、バッファモジュール401のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール401のバッファ制御部40Bもワークフロー管理部46Aにデータ要求を入力し(図8の(9)、図10(B)の「データ要求」も参照)。ワークフロー管理部46Aは、バッファモジュール401からデータ要求が入力された場合も、前述の画像処理部制御処理2を再度行うことで、その前段の画像処理モジュール381に処理要求を入力する(図8の(10)、 図10(B)の「処理要求」も参照)。
ここで、画像処理モジュール381の前段のモジュールは画像データ供給部22であるので、画像処理モジュール381の制御部38Bは、画像データ供給部22にデータ要求を入力することで画像データ供給部22から単位読出データ量の画像データを取得し(図8の(11)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール401のバッファ40Aに書き込む(図8の(12)参照)。
また、バッファモジュール401のバッファ制御部40Bは、後段の画像処理モジュール382が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール382に対して読出を要請し(図10(B)の「読出要請」も参照)、これに伴い画像処理モジュール382の制御部38Bは、バッファモジュール401のバッファ40Aから単位読出データ量の画像データを読み出し(図8の(13)、図10(B)の「データ読出」も参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール402のバッファ40Aに書き込む(図8の(14)、図10(B)の「書込要求」「画像処理/データ書込」も参照)。
以下同様に、バッファモジュール402のバッファ制御部40Bは、後段の画像処理モジュール383が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール383へ読出を要請し、画像処理モジュール383の制御部38Bは、バッファモジュール402のバッファ40Aから単位読出データ量の画像データを読み出し(図8の(15)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール403のバッファ40Aに書き込む(図8の(16)参照)。
また、バッファモジュール403のバッファ制御部40Bは、後段の画像処理モジュール384が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール384に対して読出を要請し、これに伴い画像処理モジュール384の制御部38Bは、バッファモジュール403のバッファ40Aから単位読出データ量の画像データを読み出し(図8の(17)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部24へ出力する(図8の(18)参照)。
また、個々の画像処理モジュール38の制御部38Bは、後段のバッファモジュール40のバッファ40Aへの画像データの書き込みを完了すると、ワークフロー管理部46Aへ処理完了通知を入力する(図10(B)の「処理完了通知」も参照)。ワークフロー管理部46Aは、画像処理モジュール38から処理完了通知が入力される毎に、図7(C)に示す画像処理部制御処理3を行う。
この画像処理部制御処理3では、まずステップ516において、個々の画像処理モジュール38毎にメモリ領域に記憶されている処理完了通知の入力回数のうち、処理完了通知元の画像処理モジュール38に対応する入力回数を1だけインクリメントすることで前記入力回数を更新する。次のステップ517では、更新後の入力回数を、処理完了通知元の画像処理モジュール38に対応する処理完了通知の総入力回数で除算することで、処理完了通知元の画像処理モジュール38の画像処理の進行度合を演算し、進行度合表示画面に数値として表示している処理完了通知元の画像処理モジュール38の進行度合を、演算した進行度合に書替えることで、進行度合表示画面の表示を更新する。
またステップ518では、メモリ領域に記憶されている画像処理部50全体としての処理完了通知の入力回数を1だけインクリメントすることで、画像処理部50全体としての処理完了通知の入力回数を更新する。またステップ519では、更新後の入力回数を、画像処理部50全体としての処理完了通知の合計入力回数で除算することで、画像処理部50全体としての画像処理の進行度合を演算し、進行度合表示画面に数値及び棒グラフ52として表示している画像処理部50全体としての進行度合を、演算した進行度合に応じて更新する。そしてステップ520では、処理完了通知元の画像処理モジュール38に処理要求を再度入力し、画像処理部制御処理3を終了する。
なお、上述したステップ516〜519は、先に説明した画像処理部制御処理1のステップ500〜504と共に、本発明に係る管理手段による「画像処理の進行度合を検知する」処理(詳しくは請求項2,5,6に記載の管理手段)に対応している。
このように、任意の画像処理モジュール38から処理完了通知が入力される毎に、処理完了通知元の画像処理モジュール38へ処理要求を再度入力することで、処理対象の画像データに対する画像処理が、個々の画像処理モジュール38で並列に行われる。また、個々の画像処理モジュール38から処理完了通知が入力される毎に、上記のように進行度合の演算及び表示(進行度合表示画面の表示更新:図10(B)の「進行度合更新」も参照)が行われることで、進行度合表示画面上に表示されている画像処理の進行度合がリアルタイムに更新される(図9(B),(C)も参照)。これにより、表示部16に表示されている進行度合表示画面をユーザが参照することで、画像処理部50における画像処理の進行度合をリアルタイムで把握することが可能となる。
なお、個々の画像処理モジュール38で画像処理が並列に行われている間には、後段の画像処理モジュール38から前段のバッファモジュール40に読出要求が入力された際に、読出対象の画像データが既にバッファ40Aに記憶されている状態も生じ得るが、この場合は図10(A)にも示すように、前段のバッファモジュール40(バッファモジュールn-1)からの画像データの読出が後段の画像処理モジュール38(画像処理モジュールn)によって行われ(図10(A)の「読出要請」「データ読出」も参照)、画像処理及び更に後段のバッファモジュール40(バッファモジュールn) への画像データの書込(図10(A)の「書込要求」「画像処理/データ書込」も参照)が行われた後に、画像処理モジュール38からワークフロー管理部46Aに処理完了通知が入力され(図10(A)の「処理完了通知」も参照)、これを契機として上記と同様に進行度合の演算及び表示(図10(B)の「進行度合更新」も参照)が行われることになる。
また、画像データ供給部22から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール38からワークフロー管理部46Aへの全体処理終了通知の入力が、前段側の画像処理モジュール38から順次行われる。ワークフロー管理部46Aは、画像処理モジュール38から全体処理終了通知が入力される毎に、図7(D)に示す画像処理部制御処理4を行う。
この画像処理部制御処理4では、ステップ540において、全体処理終了通知入力元の画像処理モジュール38が最後段の画像処理モジュール38か否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部24へ全て出力されることで、最後段の画像処理モジュール38から全体処理終了通知が入力された場合には、ステップ540の判定が肯定されてステップ542へ移行し、アプリケーション32に対して画像処理の完了を通知し、画像処理部制御処理4を終了する。そして、画像処理の完了が通知されたアプリケーション32は、ユーザに対して画像処理の完了を通知する。
上述したように、本実施形態では、個々の画像処理モジュール38からワークフロー管理部46Aに入力される処理完了通知を利用して、ワークフロー管理部46Aが画像処理の進行度合の演算(検知)及び表示を行っているので、画像処理の進行度合の演算(検知)等を行うか否かに拘わらず、画像処理部50の構成を変更する必要が無くなる。このため、画像処理の進行度合の演算(検知)等を行う場合に画像処理部50に加わる負荷が増大することを抑制できる。また、ワークフロー管理部46Aに相当するプログラムとして、画像処理の進行度合の演算(検知)等を行う第1のプログラムと、画像処理の進行度合の演算(検知)等を行わない第2のプログラムを各々設け、これらのプログラムを選択的に用いるのみで、画像処理の進行度合の演算(検知)等を行うか否かを切替えることができ、画像処理の進行度合の演算(検知)等を行うか否かに応じて画像処理部50の構成を切替える必要が無いので、画像処理の進行度合の演算(検知)等を行うか否かの切替えを容易に行うことができる。
なお、上記では個々の画像処理モジュール38からワークフロー管理部46Aに入力される処理完了通知を利用して画像処理の進行度合の演算(検知)等を行う態様を説明したが、本発明はこれに限定されるものではなく、ワークフロー管理部46Aに入力される通知・要求の何れを用いて画像処理の進行度合の演算(検知)等を行うかは、画像処理モジュール38、バッファモジュール40及びワークフロー管理部46Aの間の情報伝達のシーケンスに応じて適宜変更可能である。
例えば、画像処理モジュール38、バッファモジュール40及びワークフロー管理部46Aの間の情報伝達のシーケンスが、図11(A),(B)に示すように、前段の画像処理モジュール38から後段のバッファモジュール40への画像データの書込が完了した後、前段の画像処理モジュール38からの処理完了通知に代えて、後段のバッファモジュール40からの書込完了通知がワークフロー管理部46Aに入力されるシーケンスである場合には、個々のバッファモジュール毎に書込完了通知の総入力回数(=前段の画像処理モジュール38からの出力画像データ量÷前段の画像処理モジュール38における単位書込データ量)を予め求めておき、バッファモジュール40から書込完了通知が入力される毎に、書込完了通知入力元のバッファモジュール40からの書込完了通知の入力回数を更新し、更新後の入力回数を前述した総入力回数で除算し、演算結果を、書込完了通知入力元のバッファモジュール40の前段の画像処理モジュール38における画像処理の進行度合とすることで、画像処理の進行度合の演算(検知)等を行うようにしてもよい(上記態様は請求項3記載の発明に対応している)。
また、例えば画像処理モジュール38、バッファモジュール40及びワークフロー管理部46Aの間の情報伝達のシーケンスが、図12(A),(B)に示すように、後段の画像処理モジュール38から前段のバッファモジュール40に読出要求が入力されると、読出対象の画像データがバッファ40Aに記憶されているか否かに拘わらず、後段のバッファモジュール40からワークフロー管理部46Aにデータ要求が入力されるシーケンスである場合には、個々のバッファモジュール毎にデータ要求の総入力回数(=後段の画像処理モジュール38への入力データ量÷後段の画像処理モジュール38における単位読出データ量)を予め求めておき、バッファモジュール40からデータ要求が入力される毎に、データ要求入力元のバッファモジュール40からのデータ要求の入力回数を更新し、更新後の入力回数を前述した総入力回数で除算し、演算結果を、データ要求入力元のバッファモジュール40の後段の画像処理モジュール38における画像処理の進行度合とすることで、画像処理の進行度合の演算(検知)等を行うようにしてもよい(上記態様は請求項4記載の発明に対応している)。
また、上記では画像処理の進行度合の演算(検知)を行った結果を、進行度合表示画面として表示部16に表示させる態様を説明したが、本発明はこれに限定されるものではなく、画像処理の進行度合の演算(検知)を行った結果に基づいて画像処理部50における画像処理の処理完了時刻を予測し、予測した処理完了時刻を表示部16に表示させるようにしてもよいし、画像処理の進行度合の演算(検知)を行った結果に基づき、個々の画像処理モジュール38に相当するプログラム(や個々のバッファモジュール40のバッファ制御部40Bに相当するプログラム)の実行優先度や、個々の画像処理モジュール38への各種リソース(例えばメモリ14等の記憶リソースや、CPU、MMX(MultiMedia eXtention)用の演算器、SSE (Streaming SIMD Extension)用の演算器、CPUと別に設けられたDSP(Digital Signal Processor)等の高速演算器等のプログラム実行リソース)の割当を、画像処理部50における画像処理の進行度合に応じて変更する(例えば画像処理の実行開始当初は、画像処理部50のうち前段側のモジュールの実行優先度を高くしたり、前段側のモジュールに各種リソースを優先的に割当て、画像処理が進行するに従って、後段側のモジュールの実行優先度や各種リソースの割当ての優先度を相対的に増大させる等)等の制御を行うようにしてもよい。
また、上記では画像処理部50の個々の画像処理モジュール38における画像処理を並列に行わせる実行形態に本発明を適用した態様を説明したが、画像処理の実行形態は上記に限定されるものではない。画像処理部50では、例えば、単一の画像処理モジュール38でのみ画像処理(単位処理)を繰り返し行わせ、前記画像処理モジュール38における1面分の画像データに対する画像処理が完了し、前記画像処理モジュール38の後段のバッファモジュール40のバッファ40Aに1面分の画像データが蓄積されると、画像処理(単位処理)を繰り返し行わせる画像処理モジュール38を、バッファ40Aに1面分の画像データが蓄積されたバッファモジュール40の後段の単一の画像処理モジュール38に切り替える制御を、画像処理部50の前段側の画像処理モジュール38から順に適用する実行形態(所謂面単位処理)で画像処理を行わせることも可能であるが、本発明は面単位処理で画像処理を行われるように画像処理部50を制御する場合の進行度合の検知にも適用可能である。
更に、上記では本発明に係る画像処理プログラムに相当する画像処理プログラム群34がコンピュータ10に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
10 コンピュータ
16 表示部
38 画像処理モジュール
40 バッファモジュール
46 処理管理部
46A ワークフロー管理部
50 画像処理部
16 表示部
38 画像処理モジュール
40 バッファモジュール
46 処理管理部
46A ワークフロー管理部
50 画像処理部
Claims (7)
- 処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する一連の処理を単位処理量ずつ行う複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部と、
前記画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して前記画像処理部を動作させると共に、個々の画像処理モジュール又は個々のバッファモジュールから入力される前記通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、前記画像処理部における画像処理の進行度合を検知する管理手段と、
を含む画像処理装置。 - 前記画像処理モジュールは、前記管理手段から入力された処理要求に応じて前記一連の処理を行う毎に、前記管理手段へ処理完了通知を出力し、
前記管理手段は、個々の画像処理モジュールから前記処理完了通知が入力される毎に、前記処理完了通知の入力元の画像処理モジュールへ処理要求を出力すると共に、個々の画像処理モジュールからの処理完了通知の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、前記画像処理部における画像処理の進行度合を検知することを特徴とする請求項1記載の画像処理装置。 - 前記バッファモジュールは、前記画像処理モジュールが前記管理手段から入力された処理要求に応じて前記一連の処理を行い、当該一連の処理によって得られた画像データが前記バッファに書き込まれる毎に、前記管理手段へ書込完了通知を出力し、
前記管理手段は、個々のバッファモジュールから前記書込完了通知が入力される毎に、前記書込完了通知の入力元のバッファモジュールの前段の画像処理モジュールへ処理要求を出力すると共に、個々のバッファモジュールからの前記書込完了通知の入力回数及び個々のバッファモジュールの前段の個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、前記画像処理部における画像処理の進行度合を検知することを特徴とする請求項1記載の画像処理装置。 - 前記画像処理モジュールは、前記管理手段から処理要求が入力されると前段のバッファモジュールへ読出要求を出力することで前記バッファからの画像データの読出しを要求し、当該読出しによって得られた画像データに対して前記一連の処理を行い、
前記バッファモジュールは、後段の画像処理モジュールから前記読出要求が入力された場合に、読出可能な画像データが前記バッファに記憶されているか否かに拘わらず前記管理手段へデータ要求を出力し、
前記管理手段は、個々のバッファモジュールから前記データ要求が入力される毎に、前記データ要求の入力元のバッファモジュールの前段の画像処理モジュールへ処理要求を出力すると共に、個々のバッファモジュールからの前記データ要求の入力回数及び個々のバッファモジュールの後段の個々の画像処理モジュールにおける単位処理量に基づいて、個々の画像処理モジュールにおける画像処理の進行度合を検知し、前記画像処理部における画像処理の進行度合を検知することを特徴とする請求項1記載の画像処理装置。 - 前記管理手段は、前記画像処理部による処理対象の画像データのデータ量及び個々の画像処理モジュールにおける単位処理量に基づいて、前記画像処理部が前記処理対象の画像データに対する処理を完了する迄の間の、個々の画像処理モジュール又は個々のバッファモジュールからの前記通知又要求の総入力回数を予め演算し、個々の画像処理モジュール又は個々のバッファモジュールから前記通知又は要求が入力された回数を計数し、計数した回数を前記総入力回数で除算することで前記画像処理の進行度合を検知することを特徴とする請求項1乃至請求項4の何れか1項記載の画像処理装置。
- 前記管理手段は、検知した前記画像処理部における画像処理の進行度合を表示手段に表示させることを特徴とする請求項1乃至請求項5の何れか1項記載の画像処理装置。
- コンピュータを、
処理要求が入力される毎に、自モジュールの前段から画像データを取得し、取得した画像データに所定の画像処理を行い、当該画像処理を経た画像データ又は前記画像処理の処理結果を自モジュールの後段へ出力する一連の処理を単位処理量ずつ行う複数の画像処理モジュールの前段及び後段の少なくとも一方に、自モジュールの前段のモジュールから出力される画像データをバッファに書き込ませ、前記バッファに記憶されている画像データを自モジュールの後段のモジュールによって読み出させる処理を行うバッファモジュールが各々連結されるように、個々のモジュールがパイプライン形態又は有向非循環グラフ形態で連結されて構成された画像処理部、
及び、前記画像処理部の個々の画像処理モジュール又は個々のバッファモジュールにおける処理の進行と同期して個々の画像処理モジュール又は個々のバッファモジュールから入力される通知又要求に基づいて、個々の画像処理モジュールに処理要求を各々入力して前記画像処理部を動作させると共に、個々の画像処理モジュール又は個々のバッファモジュールから入力される前記通知又要求の入力回数及び個々の画像処理モジュールにおける単位処理量に基づいて、前記画像処理部における画像処理の進行度合を検知する管理手段
として機能させる画像処理プログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2006323639A JP2008141331A (ja) | 2006-11-30 | 2006-11-30 | 画像処理装置及びプログラム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2006323639A JP2008141331A (ja) | 2006-11-30 | 2006-11-30 | 画像処理装置及びプログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2008141331A true JP2008141331A (ja) | 2008-06-19 |
Family
ID=39602386
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2006323639A Pending JP2008141331A (ja) | 2006-11-30 | 2006-11-30 | 画像処理装置及びプログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2008141331A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN115222576A (zh) * | 2022-08-08 | 2022-10-21 | 北京地平线信息技术有限公司 | 图像数据处理方法、装置、可读存储介质及电子设备 |
-
2006
- 2006-11-30 JP JP2006323639A patent/JP2008141331A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN115222576A (zh) * | 2022-08-08 | 2022-10-21 | 北京地平线信息技术有限公司 | 图像数据处理方法、装置、可读存储介质及电子设备 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4694266B2 (ja) | 画像処理装置、方法及びプログラム | |
| CN103366338B (zh) | 图像处理装置和图像处理方法 | |
| JP5046801B2 (ja) | 画像処理装置及びプログラム | |
| JP4694267B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4694270B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4694268B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4979287B2 (ja) | 画像処理装置及びプログラム | |
| JP2012123688A (ja) | データ処理装置及びプログラム | |
| JP4795138B2 (ja) | 画像処理装置及びプログラム | |
| JP2007287085A (ja) | 画像処理装置及びプログラム | |
| JP4694264B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4694265B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4619868B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP4694269B2 (ja) | 画像処理装置、方法及びプログラム | |
| JP2008009696A (ja) | 画像処理装置及びプログラム | |
| JP2007287084A (ja) | 画像処理装置及びプログラム | |
| JP5440129B2 (ja) | 画像処理装置、画像形成装置、及び画像処理プログラム | |
| JP2007323393A (ja) | 画像処理装置及びプログラム | |
| JP2012043096A (ja) | 画像処理装置及び方法ならびにプログラム | |
| JP2008141331A (ja) | 画像処理装置及びプログラム | |
| JP4818893B2 (ja) | 画像処理装置及びプログラム | |
| JP4762865B2 (ja) | 画像処理装置、画像処理プログラム | |
| JP2008140042A (ja) | 画像処理装置及びプログラム | |
| JP5036588B2 (ja) | 画像処理装置、画像処理プログラム | |
| JP4869890B2 (ja) | 画像処理装置及びプログラム |