JP2008140005A - 画像処理装置及びプログラム - Google Patents

画像処理装置及びプログラム Download PDF

Info

Publication number
JP2008140005A
JP2008140005A JP2006324188A JP2006324188A JP2008140005A JP 2008140005 A JP2008140005 A JP 2008140005A JP 2006324188 A JP2006324188 A JP 2006324188A JP 2006324188 A JP2006324188 A JP 2006324188A JP 2008140005 A JP2008140005 A JP 2008140005A
Authority
JP
Japan
Prior art keywords
image processing
image
module
unit
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.)
Granted
Application number
JP2006324188A
Other languages
English (en)
Other versions
JP4818893B2 (ja
Inventor
Kazuyuki Itagaki
和幸 板垣
Takashi Igarashi
貴 五十嵐
Yusuke Sugimoto
裕介 杉本
Yukio Kumazawa
幸夫 熊澤
Takashi Nagao
隆 長尾
Yoichi Isaka
洋一 井坂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujifilm Corp
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fuji Xerox Co Ltd, Fujifilm Corp filed Critical Fuji Xerox Co Ltd
Priority to JP2006324188A priority Critical patent/JP4818893B2/ja
Publication of JP2008140005A publication Critical patent/JP2008140005A/ja
Application granted granted Critical
Publication of JP4818893B2 publication Critical patent/JP4818893B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Image Processing (AREA)

Abstract

【課題】所定の条件に応じて適切な画像処理モジュールを挿入することができるため、一連の処理を該所定の条件に応じた適切な状態で実行することができる画像処理装置及び画像処理プログラムを得る。
【解決手段】所定の画像処理を行う画像処理モジュールを複数連結して画像データに対して複数の画像処理を組み合わせた一連の処理を実行する場合に、所定の条件に応じて、画像データを所定の状態に変換する第1の画像処理と画像データを該第1の画像処理とは逆方向に変換する第2の画像処理とを該一連の処理に挿入して実行する。
【選択図】図8

Description

本発明は画像処理装置及びプログラムに係り、特に、個々のモジュールを連結して一連の処理を実行することができる画像処理装置、及び、コンピュータを前記画像処理装置として機能させるための画像処理プログラムに関する。
入力された画像データに対して画像処理を行う画像処理装置や、画像を取扱可能なDTP(デスクトップ・パブリッシング)システム、入力された画像データが表す画像を記録材料に記録するプリントシステム等では、入力された画像データに対して拡大・縮小、回転、アフィン変換、色変換、フィルタ処理、画像合成等の各種の画像処理が行われる。画像処理装置では、このような複数の画像処理を組み合わせて実行することにより、高品位な画像データを得ることができる。
これらの装置やシステムにおいて、入力される画像データの属性や画像データに対する画像処理の内容・手順・パラメータ等が固定されている場合には、専用に設計したハードウエアによって画像処理を行わることができるが、画像処理の内容や手順・パラメータ等が様々に変更される場合には、実行する画像処理をより柔軟に変更可能な構成が必要となる。
このような要求を満たすために、必要な機能モジュールを所望の順番でパイプライン状に接続/初期化し、処理を行うことで柔軟に画像処理を行うパイプライン化画像処理システムが知られている(例えば、特許文献1参照。)。
通常、このようなシステムで組み合わせて用いられる個々のモジュールは、その適用・応用分野をできる限り広くするため、柔軟性・汎用性を持たせて設計・実装されている。しかし、柔軟性・汎用性を追求した結果、画像タイプとモジュールの組み合わせによっては、ユーザの意図を反映しない結果(性能低下や速度低下等)を招いてしまう場面があった。
ここで、性能低下、速度低下を招くおそれがある具体例を説明する。
従来提案されているパイプライン化画像処理システムでは、指定したデータ量で画像処理のパイプラインを構築して処理が行われる。しかし、大抵の場合「指定したデータ量」には、計算機メモリやパイプライン処理効率の観点から、画像の1ラインが選択されることが多い。図16(A)に示す横W×縦Hの画像サイズの画像データに画像処理を施す場合、画像1枚に対する各画像処理モジュールでの処理命令は、全部でH回行われることになる。
また、画像データのサイズが横W×縦Hで、画像処理モジュールが図16(B)のように全部でN個ある場合、途中に画像サイズ変更が無いと仮定して、それぞれライン単位の処理が各モジュールで行われるとすると、系全体でH×N回の処理命令が実行されることになる。これにより、多くのオーバーヘッドが発生し、速度低下を招くおそれがある。この「組み合わせ」に対する問題を克服するために、個々のモジュールに対して最適化を図ることも考えられるが、柔軟性・汎用性を損なう恐れがある。また、個々のモジュールを最適化しても、様々なモジュールが複数組み合せられている系全体から見ると、十分な効果を得ることが難しかった。
また、図17に示すように、計算精度を考慮しないで、画像処理モジュールをつなぎ合わせた場合、処理1〜処理Mにおいて途中で値が飽和したり、丸められたりする可能性がある。ユーザが高精度な処理結果を望む場合には、ユーザ側で適切なビット深度拡張モジュールなどを途中に挿入する必要があるが、専門的な知識を持たないユーザの場合には難しく、パイプライン構築作業自体の敷居が高くなってしまっていた。
なお、簡素化できる別の画像属性あるいは別空間に一旦変換して処理を行い、最後に元の画像属性や空間に戻す、という高速化や精度向上の方法がいくつか提案されているが(特許文献2,3、4参照。)、これらの方法は、その対象が特定のものに限られており、様々な分野や種類の画像処理には適用することができない。
特開平7−105020号公報 特開2000−354162号公報 特開2004−104537号公報 特開2004−165969号公報
本発明は上記事実を考慮して成されたもので、所定の条件に応じて適切な画像処理モジュールを挿入して、一連の処理を所定の条件に応じた適切な状態で実行することができる画像処理装置及び画像処理プログラムを得ることを目的とする。
上記目的を達成するために請求項1記載の発明に係る画像処理装置は、所定の画像処理を行う画像処理モジュールを複数連結して画像データに対して複数の画像処理を組み合わせた一連の処理を実行する画像処理手段と、所定の条件に応じて、画像データを所定の状態に変換する第1の画像処理と画像データを前記第1の画像処理とは逆方向に変換する第2の画像処理とが前記一連の処理に挿入されるように前記画像処理手段を制御する制御手段と、を含んで構成されている。
このような構成によれば、所定の条件に応じて適切な画像処理モジュールを挿入することができるため、一連の処理を該所定の条件に応じた適切な状態で実行することができる。
請求項2の発明は、請求項1記載の発明において、前記第1及び第2の画像処理の挿入位置は、画像データの入力処理および出力処理を除いた前記一連の処理の最前段及び最後段、または、前記所定の条件に応じて画像データを所定の状態に変換する必要があると判断された変換対象部分の最前段及び最後段であることを特徴とする。
画像データの入力処理および出力処理を除いた一連の処理の最前段及び最後段に第1の画像処理と第2の画像処理とを挿入することによって、所定の条件に応じた一連の処理系を簡易に構築することができる。また、所定の条件に応じて画像データを所定の状態に変換する必要があると判断された変換対象部分の最前段及び最後段に挿入することによって、例えば所定の条件を満足させるにあたりボトルネックとなると判断された部分の最前段及び最後段に挿入するなど、場合に応じて柔軟に処理系を構築することができる。
請求項3の発明は、請求項1または請求項2記載の発明において、前記所定の条件は、精度を優先するモード及び速度を優先するモードを含む処理モード、前記画像データのビット深数、前記画像データのサイズ、及び前記画像データの形状の少なくとも1つであることを特徴とする。
こうした条件に応じて第1及び第2の画像処理を挿入することによって、利用者の要望や処理対象の画像の状態などを反映して各画像処理及び一連の処理を効率的に実行することが可能となる。
請求項4の発明は、請求項3記載の発明において、前記処理モードを指定するための指定手段を更に設けたことを特徴とする。
このような構成により、一連の処理を予め利用者が指定した条件で実行することができる。
請求項5の発明は、請求項1乃至請求項4のいずれか1項記載の発明において、前記第1及び第2の画像処理を示す情報を条件毎に記憶したテーブルを記憶した記憶手段を更に備え、前記制御手段は、前記所定の条件及び前記テーブルに基づいて挿入すべき前記第1および第2の画像処理を判断し、該挿入すべきと判断した第1および第2の画像処理が前記一連の処理に挿入されるように前記画像処理手段を制御することを特徴とする。
このテーブルによって、どのような画像処理を挿入するべきかを条件に応じて容易に判別でき、条件に応じて第1の画像処理、第2の画像処理を実行する適切な画像処理モジュールを容易に挿入することができる。
請求項6の発明の画像処理プログラムは、コンピュータを、所定の画像処理を行う画像処理モジュールを複数連結して画像データに対して複数の画像処理を組み合わせた一連の処理を実行する画像処理手段、及び、所定の条件に応じて、画像データを所定の状態に変換する第1の画像処理と画像データを前記第1の画像処理とは逆方向に変換する第2の画像処理とが前記一連の処理に挿入されるように前記画像処理手段を制御する制御手段、として機能させるものである。
これにより、所定の条件に応じて適切な画像処理モジュールを挿入することができるため、一連の処理を該所定の条件に応じた適切な状態で実行することができる。
以上説明したように本発明は、所定の条件に応じて適切な画像処理モジュールを挿入することができるため、一連の処理を該所定の条件に応じた適切な状態で実行することができる、という優れた効果を有する。
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図1には、本発明に係る画像処理装置として機能することが可能なコンピュータ10が示されている。なお、このコンピュータ10は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ(PC)等の独立したコンピュータであってもよく、更にPDA(Personal Digital Assistant)や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
コンピュータ10はCPU12、メモリ14、表示部16、操作部18、記憶部20、画像データ供給部22及び画像出力部24を備えており、これらはバス26を介して互いに接続されている。コンピュータ10が上述したような画像取扱機器に組み込まれている場合、表示部16や操作部18としては、画像取扱機器に設けられたLCD等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ10が独立したコンピュータである場合、表示部16や操作部18としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部20としてはHDD(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
また、画像データ供給部22は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部(メモリ14又は記憶部20)等を適用することができる。
また、画像出力部24は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部24は画像処理を経た画像データを単に記憶する画像記憶部(メモリ14又は記憶部20)であっても構わない。
図1に示すように、記憶部20には、CPU12によって実行される各種のプログラムとして、メモリ14等のリソースの管理やCPU12によるプログラムの実行の管理、コンピュータ10と外部との通信等を司るオペレーティングシステム30のプログラム、コンピュータ10を本発明に係る画像処理装置として機能させるための画像処理プログラム群34、CPU12が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション32のプログラム(図1ではアプリケーションプログラム群32と表記)が各々記憶されている。
画像処理プログラム群34は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、PC等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、PC等の各種機器(プラットフォーム)で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。
画像処理プログラム群34によって実現される画像処理装置は、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、アプリケーション32からの実行指示に従い、前記画像処理部によって画像処理を行う(詳細は後述)。画像処理プログラム群34は、所望の画像処理を行う画像処理部(所望の構成の画像処理部)の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション32に提供している。
このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群34に行わせるアプリケーション32を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
また、画像処理プログラム群34によって実現される画像処理装置は、前述のように、アプリケーション32からの構築指示に従い、アプリケーション32が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、画像処理装置(画像処理部)によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
以下、画像処理プログラム群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、RGB色空間をCMY色空間へ変換する色変換処理を行う画像処理モジュール38、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38等の複数の画像処理モジュール38が各々用意されている。また、この他にも、例えば、低解像度から高解像度に変換する画像処理モジュール38や、その逆に高解像度から低解像度に変換する画像処理モジュール38、画像を右または左に90度回転させる画像処理モジュール38、画像データのビット深数を8ビットから16ビットへ、その逆に16ビットから8ビットへ変換するビット数変換処理を行う画像処理モジュール38等も用意されている。
また、画像処理モジュール38の制御部38Bは、画像処理エンジン38Aが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール(例えばバッファモジュール40)から画像データを単位読出データ量ずつ取得し、画像処理エンジン38Aから出力される画像データを単位書込データずつ後段のモジュール(例えばバッファモジュール40)へ出力する(画像処理エンジン38Aで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量=単位処理データ量となる)か、画像処理エンジン38Aによる画像処理の結果を自モジュールの外部へ出力する(例えば画像処理エンジン38Aがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある)処理を行うが、モジュールライブラリ36には、画像処理エンジン38Aが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール38も登録されている。例えば、画像回転処理を行う画像処理モジュール38についても、前述のように単位処理データ量が画像1面分の画像処理モジュール38のプログラム以外に、単位処理データ量が画像の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と、バッファ制御部40Bとから構成されている。バッファ40Aは、コンピュータ10に設けられたメモリ14からオペレーティングシステム30を通じて確保されたメモリ領域で構成される。バッファ制御部40Bは、バッファモジュール40の前段及び後段のモジュールとの画像データの入出力及びバッファ40Aの管理を行う。個々のバッファモジュール40のバッファ制御部40Bもその実体はCPU12によって実行されるプログラムであり、モジュールライブラリ36にはバッファ制御部40Bのプログラムも登録されている(図1ではバッファ制御部40Bのプログラムを「バッファモジュール」と表記して示している)。
また、アプリケーション32からの指示に従って画像処理部50を構築する処理構築部42は、図1に示すように複数種のモジュール生成部44から構成されている。複数種のモジュール生成部44は互いに異なる画像処理に対応しており、アプリケーション32によって処理管理部46を介して起動されることで、対応する画像処理を実現するための画像処理モジュール38及びバッファモジュール40から成るモジュール群を生成する処理を行う。
なお、図1ではモジュール生成部44の一例として、モジュールライブラリ36に登録されている個々の画像処理モジュール38が実行する画像処理の種類に対応するモジュール生成部44を示しているが、個々のモジュール生成部44に対応する画像処理は、複数種の画像処理モジュール38によって実現される画像処理(例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理)であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション32は複数種の画像処理の何れかに対応するモジュール生成部44を処理管理部46を介して順次起動する。これにより、アプリケーション32によって順次起動されたモジュール生成部44により、必要とされる画像処理を行う画像処理部50が構築されることになる。
また図1に示すように、処理管理部46は、画像処理部50における画像処理の実行を制御するワークフロー管理部46A、画像処理部50の各モジュールによるメモリ14や各種のファイル等のコンピュータ10のリソースの使用を管理するリソース管理部46B、及び、画像処理部50で発生したエラーを管理するエラー管理部46Cを含んで構成される。
次に本実施形態の作用を図4〜図7のフローチャートを参照して説明する。
まず、画像処理プログラム群34が実装されている機器において、ユーザは画像処理を行う際の処理モードを予め設定しておくことができる(図8(2)も参照。)。図4は、処理モードを設定する設定処理の流れを示すフローチャートである。記憶部20に記憶されているアプリケーションプログラム群32の中には、設定処理を行うためのプログラムが含まれており、CPU12は該プログラムによって該設定処理を実行する。
ステップ90では、選択可能な処理モードを列挙して表示部16に表示する。処理モードとしては、例えば、図8(3)に示すように、処理速度を優先させる処理速度優先モードや、精度を優先させる精度優先モード、精度及び速度の双方を優先させるモード等がある。ユーザは列挙された処理モードから操作部18を介して処理モードを選択することができる。
ステップ92では、ユーザにより処理モードが選択されたか否かを判定し、選択された場合には、ステップ94に移行し、選択結果(選択された処理モードの情報)をメモリ14に記憶する。
処理管理部46は、このように設定された処理モードに応じて画像処理部50を構築し、処理モードに応じて最適化した一連の画像処理を実行する。詳細は後述する。
なお、処理モードを何も設定しないで画像処理部50を構築し一連の画像処理を実行することも可能であるが、この場合には処理モードに応じた画像処理の最適化は行われない。
図5は、アプリケーションが実行するモジュール生成処理の流れを示すフローチャートである。
画像処理プログラム群34が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション32によって検知される。
なお、画像処理を行う必要のある状況としては、例えば画像データ供給部22としての画像読取部によって画像を読み取り、画像出力部24としての画像記録部により記録材料に画像として記録するか、画像出力部24としての表示部に画像として表示させるか、画像出力部24としての書込装置により画像データを記録メディアに書き込むか、画像出力部24としての送信部により画像データを送信するか、画像出力部24としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部22としての受信部によって受信されるか、画像データ供給部22としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。
また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション32が実行可能な処理の名称等を表示部16に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
まず、アプリケーション32は、上記状況を検知後、ステップ100で、画像処理対象の画像データを供給する画像データ供給部22の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合には、画像データ供給部22として指定されたバッファ領域を含むバッファモジュール40を生成する。後述するバッファモジュール40の新規生成では、バッファモジュール40のバッファ制御部40Bのプログラムを実行するプロセス、スレッド又はオブジェクトを生成することでバッファ制御部40Bを生成し、生成されたバッファ制御部40Bによりバッファ40Aとして使用するメモリ領域が確保されることによって成されるが、このステップ154におけるバッファモジュール40の生成は、指定されたバッファ領域を既に確保されたバッファ40Aとして(バッファ制御部40Bに)認識させるパラメータを設定してバッファ制御部40Bを生成する処理を行うことによって成される。ここで生成されたバッファモジュール40は画像データ供給部22として機能する。
続いてアプリケーション32は、上記と同様に、ステップ102で、画像処理を行った画像データの出力先としての画像出力部24の種別を認識し、認識した種別がバッファ領域(メモリ14の一部領域)であった場合は、画像出力部24として指定されたバッファ領域を含むバッファモジュール40を上記と同様にして生成する)。ここで生成されたバッファモジュール40は画像出力部24として機能する。
次にアプリケーション32は、ステップ104で、実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部44に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション32は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
ステップ106では、アプリケーション32は、上記で判定した画像処理の種類、実行順序に基づいて、処理管理部46に対して特定の画像処理に対応する画像処理モジュール38を生成するように指示する。なお、アプリケーション32は、該指示と共に、モジュールの生成に必要な情報として、該生成するモジュールに画像データを入力する入力モジュールを識別するための入力モジュール識別情報、該生成するモジュールが画像データを出力する出力モジュールを識別するための出力モジュール識別情報、該生成するモジュールに入力されるべき入力画像データの属性を表す入力画像属性情報、該生成するモジュールから出力される出力画像データの属性を表す出力画像属性情報、実行すべき画像処理のパラメータを処理管理部46に通知する。
ステップ108では、モジュール生成部44から生成通知が入力されたか否かを判定する。ここで肯定判定した場合には、ステップ110で、アプリケーション32は、全画像処理種のモジュールを生成したか否か(すなわち、必要とされる画像処理を行う画像処理部50の構築が完了したか否か)を判定する。ここで否定判定した場合には、次の画像処理モジュール38が生成されるように、ステップ106に戻って上記処理を繰り返す。また、ステップ110で肯定判定した場合には、ステップ112に移行し、稼働中の処理管理部46に対して画像処理部50による画像処理の実行を指示する。
図6は、処理管理部46のワークフロー管理部46Aが実行するモジュール生成制御処理の流れを示すフローチャートである。このモジュール生成制御処理は、アプリケーション32からモジュール生成指示が入力されたときに開始される。
ステップ120では、画像処理モジュール38の生成指示を受けた処理管理部46のワークフロー管理部46Aが、ユーザによって処理モードが設定されているか否かを判定する。処理モードが設定されていると判定した場合には、ステップ126に移行し、現在のモジュール生成位置が、処理モードに応じた変換用の画像処理モジュール38を挿入する位置か否かを判定する。
本実施の形態では、画像データの読込みを行う入力処理モジュール38の後段(入力処理モジュールを除いた一連の画像処理系の最前段)、および画像データの書き出しを行う出力処理モジュール38の前段(入力処理モジュールを除いた一連の画像処理系の最後段)、の2カ所を処理モードに応じた変換用の画像処理モジュール38を挿入する位置としている。なお、この2カ所には、対になる(すなわち変換の方向が互いに逆方向の)画像処理モジュール38が挿入される(図8(6)も参照。)。例えば、最初の挿入位置には画像ビット深数を8ビットから16ビットに変換する画像処理モジュール38を挿入し、最後の挿入位置には画像ビット深数を8ビットから16ビットに変換する画像処理モジュール38を挿入することができる。また、例えば、最初の挿入位置に解像度を2倍にする拡大処理を実行する画像処理モジュール38を挿入し、最後の挿入位置に解像度を1/2にする縮小処理を実行する画像処理モジュール38を挿入することもできる。
また、各挿入位置で2種類の変換を行う場合には各挿入位置に複数の画像処理モジュール38を挿入することも可能である。例えば、最初の挿入位置に、画像を左に90度回転する処理と、解像度を低解像度に変換する処理とを挿入し、最後の挿入位置には、画像を右に90度回転する処理と、解像度を高解像度に変換する(元の解像度に戻す)処理とを挿入する。このとき、最後の挿入位置では、最初に挿入された処理の方向とは逆方向の処理を最初の挿入順序と逆の順序で挿入する。すなわち、最初の挿入位置で画像を左90度回転させる処理を挿入した後に、解像度を低解像度に変換させる処理を挿入した場合には、最後の挿入位置では、解像度を元の解像度に変換させる処理を挿入した後に、画像を右90度回転させる処理を挿入する。
なお、挿入する画像処理モジュールの種別(内容)は、処理モードと挿入する画像処理の内容とを対応付けて記憶したテーブル(変換処理内容テーブル)を予めユーザが作成してメモリ14或いは記憶部20等に記憶しておき(図8(1)も参照。)、これを参照して選択することができる。
変換処理内容テーブルには、このような情報を処理モードに対応させて登録しておく。
ステップ126で肯定判定した場合には、ステップ128に移行し、変換処理内容テーブルを参照して、挿入位置に挿入すべき全モジュールを生成済か否かを判定する。前述したように各挿入位置では複数の画像処理モジュール38を挿入することもある。例えば、図8に示す変換処理内容テーブルでは、処理モードが速度優先モードの場合には、画像を90度回転する処理と、解像度を変換する処理とを挿入する必要がある。従って、この2つの処理を実行する画像処理モジュール38が生成済になるまでステップ128では否定判定される。
ステップ128で否定判定されると、ステップ130に移行し、変換処理内容テーブルを参照してユーザが設定した処理モードに対応して挿入する処理の内容を確認し(図8(3)も参照。)、該処理を実行する画像処理モジュール38を生成するモジュール生成部44を起動し、該画像処理モジュール38を生成させる(図8(4)および(5)も参照。)。
続いて、ステップ132で、モジュール生成部44から生成通知が入力されたか否かを判定し、ここで肯定判定した場合には、ステップ120に戻る。
一方、ステップ120およびステップ126で否定判定した場合やステップ128で肯定判定した場合には、ステップ122に移行し、アプリケーション32から生成指示された画像処理種のモジュール生成部44を起動してモジュールを生成させる。
ステップ124では、該モジュール生成部44から生成通知が入力されたか否かを判定する。生成通知が入力された場合には、本フローチャートの処理を終了する。
なお、処理モードの他に更に処理対象の画像データのビット深数、画像データのサイズ、及び画像データの形状等の各種条件に応じて(すなわちユーザにより設定された処理モードとは異なる条件も考慮して)、挿入する画像処理の内容を異ならせ、より最適化した画像処理部50が構築されるように、変換処理内容テーブルを生成しておくこともできる。なお、「処理モード」は、挿入する画像処理を決定する条件の1つであるが、ここでは、処理モード以外の条件を単に「条件」と呼称し、処理モードと区別して説明する。
図9(A)は、速度優先モード及び上記各種条件に対応して挿入する画像処理の内容を登録した変換処理内容テーブルの一例を示す図である。
速度優先モードにおいて、処理対象の画像データの画像が短冊のように細長い場合、すなわち縦Hが横Wよりも著しく長い場合には、最初の挿入位置に、右90度回転を行う画像処理モジュール38を挿入し、次の挿入位置には左90度回転を行う画像処理モジュール38を挿入する。これにより、ライン単位の処理命令のオーバーヘッドを減らし、速度低下を防止することができる。
図16(A)に示すように、各画像処理モジュール38がライン単位で処理を行うと、画像1枚に対する各画像処理モジュールでの処理命令は、全部でH回行われることになる。さらに、画像データのサイズが横W×縦Hの短冊状で、連結する画像処理モジュールが図16(B)のように全部N個ある場合、途中に画像サイズ変更が無いと仮定して、それぞれライン単位の処理が各モジュールで行われるとすると、系全体でH×N回の処理命令が実行されることになる。これにより、縦Hが横Wよりも著しく長い画像の場合には、多くのオーバーヘッドが発生し、速度低下を招くおそれがある。
そこで、最初の挿入位置に左90度の回転を行う画像処理モジュール38を挿入すると、図10に示すように、縦W×横Hの横に長い画像に変換することができる。これにより、各画像処理モジュールでは、W回の処理命令を実行すればよいこととなり、オーバーヘッドの発生回数が少なくなり、速度低下を防止することができる。
なお、最後の挿入位置には右90度の回転を行う画像処理モジュール38を挿入すれば、画像の向きを元に戻すことができ、処理結果は、ユーザの意図を反映したものとなる。
また、1ビットのビット深数の画像データにおいて、画像幅が8の倍数になっていない場合には、バイト境界に対する予め定められた例外処理が実行されるため、処理速度が遅くなる。従って、最初の挿入位置には画像幅を8の倍数に一致させるように解像度を変換する画像処理モジュール38を挿入し、最後の挿入位置に解像度を元に戻す画像処理モジュール38を挿入するようにする。これにより、速度低下を防止できる。
また、一連の画像処理に対して、画像データが十分すぎる画像ビット数(ビット深数)の場合には、処理速度が低下する。このため、最初の挿入位置には低ビットへのビット数変換処理を行う画像処理モジュール38を挿入し、最後の挿入位置に元のビット数に変換する処理を行う画像処理モジュール38を挿入するようにする。これにより、処理量を減らし、処理速度を向上させることができる。また、最初の挿入位置に低解像度への解像度変換処理を行う画像処理モジュール38を挿入し、最後の挿入位置に元の解像度に変換する解像度変換処理を行う画像処理モジュール38を挿入するようにしても、同様に処理速度を向上させることができる。
図9(B)は、精度優先モード及び上記条件に対応して挿入する画像処理の内容を登録した変換処理内容テーブルの一例を示す図である。図9(B)では、条件を1つだけ例示したが、図9(A)に示すように種々の条件に応じて登録することももちろん可能である。
低ビット画像で厳密な色変換を行う場合には、精度を優先させる必要がある。従って、最初の挿入位置には高ビットへのビット数変換処理を行う画像処理モジュール38を挿入し、最後の挿入位置には元のビット数に変換する処理を行う画像処理モジュール38を挿入するようにすれば、データの飽和や丸めなどを防止することができ、精度高く処理することが可能となる。
図9(C)はRLE(Run Length Encoded)圧縮優先モード及び上記条件に対応して挿入する画像処理モジュール38の処理内容を登録した変換処理内容テーブルの一例を示す図である。図9(C)でも、条件を1つだけ例示したが、図9(A)に示すように種々の条件に応じて登録することももちろん可能である。
RLEは、同じビット列が連続する場合は、そのビット値と繰り返し数を記録しておく圧縮方法である。従って、処理対象の画像データの画像が短冊のように細長い場合、すなわち縦Hが横Wよりも著しく長い場合には、圧縮効率が悪くなる。そこで、最初の挿入位置に、右90度回転を行う画像処理モジュール38を挿入し、次の挿入位置には左90度回転を行う画像処理モジュール38を挿入する。これにより、画像幅を増やすことができ、圧縮率向上が見込める。
なお、上記では処理モードを挿入する画像処理モジュール38(挿入する画像処理)を判断するための必須の条件として用いているが、これに限定されず、挿入する画像処理モジュール38(挿入する画像処理)を、処理モード、処理対象の画像データのビット深数、画像データのサイズ、及び画像データの形状、の少なくとも1つに応じて判断するようにしてもよい。
図7は、モジュール生成部44で実行されるモジュール生成処理の流れを示すフローチャートである。このモジュール生成処理は、アプリケーション32によって生成指定された画像処理モジュール38を生成する場合だけでなく、処理管理部46によって挿入される画像処理モジュール38を生成する場合にも適用される。
モジュール生成部44は、処理管理部46のワークフロー管理部46Aによって起動されると、図7に示すモジュール生成処理を行う。なお、起動時に、処理管理部46のワークフロー管理部46Aからモジュールの生成に必要な情報として、入力モジュール識別情報、出力モジュール識別情報、入力画像属性情報、出力画像属性情報、実行すべき画像処理のパラメータ等が通知される。
モジュール生成処理では、まずステップ200において、このモジュール生成部44で次に生成すべき画像処理モジュール38が有るか否かを判定する。判定が否定された場合はモジュール生成処理を終了する。生成すべき画像処理モジュール38が有る場合には、ステップ202で、生成する画像処理モジュール38の後段にバッファモジュール40が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール(画像出力部24)である場合(例えば図2(A)〜(C)に示す画像処理部50における最後段の画像処理モジュール38を参照)や、例として図2(B)に示す画像処理部50においてスキュー角検知処理を行う画像処理モジュール38のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール38へ出力するモジュールである場合は否定され、バッファモジュール40の生成を行うことなくステップ210へ移行するが、上記以外の場合は判定が肯定されてステップ208へ移行し、バッファ制御部40Bを起動する(バッファ制御部40Bのプログラムを実行するプロセス、スレッド又はオブジェクトを生成する)ことで、画像処理モジュールの後段に連結するバッファモジュール40を生成する。
次のステップ206では、前段のモジュール(例えばバッファモジュール40)の情報と後段のバッファモジュール40の情報、画像処理モジュール38に入力される入力画像データの属性、処理パラメータを与えて、画像処理モジュール38を生成する。なお、ステップ206で後段のバッファモジュール40が不要と判断された画像処理モジュール38に対しては後段のバッファモジュール40の情報は与えられず、また例えば50%縮小処理のように処理内容が固定的で特別な画像処理パラメータが必要ない場合には処理パラメータは与えられない。
このステップ206では、モジュールライブラリ36に登録されており、画像処理モジュール38として利用可能な複数の候補モジュールの中から、上記取得した入力画像データの属性、及び、画像処理モジュール38で実行すべき処理パラメータに合致する画像処理モジュール38を選択する。例えば実行中のモジュール生成処理に対応するモジュール生成部44が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてCMY色空間が指定され、更に入力画像データがRGB色空間のデータであった場合には、モジュールライブラリ36に登録されている各種の色空間処理を行う複数種の画像処理モジュール38の中から、RGB→CMYの色空間変換を行う画像処理モジュール38が選択される。
また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール38であり、指定された拡大縮小率が50%以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール38が選択され、指定された拡大縮小率が50%であれば、拡大縮小率50%に特化した拡大縮小処理、すなわち入力された画像データを1画素おきに間引くことで50%に縮小する縮小処理を行う画像処理モジュール38が選択される。なお、画像処理モジュール38の選択は上記に限られるものではなく、例えば画像処理エンジン38Aによる画像処理における単位処理データ量が異なる画像処理モジュール38をモジュールライブラリ36に複数登録しておき、画像処理部50へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール38を選択する(例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール38を選択する等)ようにしてもよいし、アプリケーション32或いはユーザに選択させるようにしてもよい。
次のステップ208では、モジュール生成通知と共に後段のバッファモジュール40のIDと生成した画像処理モジュール38のIDの組をワークフロー管理部46Aに通知する。このIDは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール40や画像処理モジュール38のオブジェクトのメモリ上でのアドレス等でも良い。ワークフロー管理部46Aに通知された情報は、テーブル形式やリスト形式、連想配列形式等でワークフロー管理部46Aの内部に保持され、後の処理で使われる。ここではテーブル形式で保持するものとして説明を続ける。
なお、先程述べた後段のバッファモジュール40を持たない画像処理モジュール38の場合には、例えば下記の方法で処理を行う。図2(A)において出力処理を行う画像処理モジュール38のように、生成する画像処理モジュール38がパイプラインの終点又は有向非循環グラフの終点の一つである場合には、当該画像処理モジュール38をモジュール生成部44の出力として呼び出し元のアプリケーション32に戻す。また、図2(B)においてスキュー角検知処理を行う画像処理モジュール38のように、生成した画像処理モジュール38における画像処理の結果が他の画像処理モジュール(図2(B)では画像回転処理を行う画像処理モジュール38)で使われる場合、モジュール生成部44は、当該画像処理モジュール38に対して処理が終了するまで繰り返し処理実行を指示して、処理結果を取得する。
次のステップ210では、モジュール生成通知をアプリケーション32にも通知する。
このように、順次起動されたモジュール生成部44によって上述したモジュール生成処理(図7)が順次行われることで、例として図2(A)〜(C)に示すように、必要とされる画像処理を行う画像処理部50が構築されることになる。
モジュール生成後は、該生成されたモジュールにより一連の画像処理が実行される。
アプリケーション32は、モジュール生成後、稼働中の処理管理部46に対して画像処理部50による画像処理の実行を指示する。
処理管理部46は、アプリケーション32から画像処理の実行が指示されると、メモリ14にロードした画像処理部50の各モジュールのプログラムを、オペレーティングシステム30を通じてスレッド(又はプロセス又はオブジェクト)としてCPU12に実行させる。
画像処理モジュール38のプログラムがスレッドとして実行されると、個々の画像処理モジュール38の制御部38Bは自モジュールの初期化を行う。画像処理モジュール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の初期化の完了を処理管理部46通知する。
また、バッファモジュール40(のバッファ制御部40B)のプログラムがスレッドとして実行されると、個々のバッファモジュール40のバッファ制御部40Bは自モジュールの初期化を行う。バッファモジュール40の初期化では、まず自モジュールの前段の画像処理モジュール38から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール38から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する(図3(B)の(1),(2)も参照)。
自モジュールと連結されている全ての画像処理モジュール38から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール38によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ40Aの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量(自モジュールの後段に複数の画像処理モジュール38が連結されている場合は、個々の画像処理モジュール38によって各々設定された単位読出データ量の最大値)を設定してもよいし、単位書込データ量と単位読出データ量(の最大値)の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値(例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量(の最大値)の何れか)を設定するようにしてもよい。
また、自モジュールが画像データ供給部22又は画像出力部24として機能するバッファモジュール40であった場合には、自モジュールのバッファ40Aとして用いるメモリ領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ40Aとして用いる既設のメモリ領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ40Aに書き込まれた画像データのうち、対応する後段の画像処理モジュール38によって読み出されていない画像データ(有効データ)の先頭位置(次の読出開始位置)と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが画像データ供給部22として機能するバッファモジュール40であれば、自モジュールのバッファ40Aとして用いるメモリ領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール38に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール40の初期化が完了し、バッファ制御部40Bは初期化の完了を処理管理部46へ通知する。
処理管理部46は、画像処理部50を構成する全てのモジュールから初期化の完了が通知されると、ワークフロー管理部46Aのプログラムを実行するスレッド(又はプロセス又はオブジェクト)を起動し、ワークフロー管理部46Aに対して画像処理部50による画像処理の実行を指示する。
これらの処理は、画像処理部50を構成する画像処理モジュール38に処理要求を入力することで、画像処理部50に画像処理を行わせるものであるが、以下では画像処理部50全体の動作説明に先立ち、個々のバッファモジュール40のバッファ制御部40Bによって行われる処理、個々の画像処理モジュール38の制御部38Bによって行われる処理について順に説明する。
本実施形態では、画像処理モジュール38が後段のバッファモジュール40に画像データを書き込む場合には、画像処理モジュール38からバッファモジュール40へ書込要求が入力され、画像処理モジュール38が前段のバッファモジュール40から画像データを読み出す場合には、画像処理モジュール38からバッファモジュール40へ読出要求が入力される。
データ書込処理では、確保すべきメモリ領域のサイズとして単位書込データ量をリソース管理部46Bに通知し、書込用として用いるメモリ領域(書込用バッファ領域:図11(B)も参照)を稼働中の処理管理部46のリソース管理部46Bを介して取得する。次に、自モジュールのバッファ40Aを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在しているか否か判定する。モジュール生成部44によって生成されたバッファモジュール40は、当初はバッファ40Aとして用いるメモリ領域(単位バッファ領域)が確保されておらず、メモリ領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール40に最初に書込要求が入力されたときにはバッファ40Aとして用いるメモリ領域(単位バッファ領域)が存在しておらず、この判定は否定される。また、後述する処理を経てバッファ40Aとして用いる単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合にも上記判定は否定される。
単位書込データ量以上の空き領域が有る単位バッファ領域(単位書込データ量の画像データを書き込み可能な単位バッファ領域)が存在していないと判定された場合は、確保すべきメモリ領域のサイズ(単位バッファ領域のサイズ)をリソース管理部46Bに通知して、自モジュールのバッファ40Aとして用いるメモリ領域(画像データの保管に用いる単位バッファ領域)をリソース管理部46Bを介して取得する。そして、先に取得した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール38へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール38は、先頭アドレスが通知された書込用バッファ領域に画像データを書き込む(図11(B)も参照)。
例えば単位バッファ領域のサイズが単位書込データ量の整数倍でない場合、バッファ40A(単位バッファ領域)への単位書込データ量の画像データの書込が繰り返されることで、例として図11(A)にも示すように、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい状態が生ずる。この場合、単位書込データ量の画像データが書き込まれる領域が複数の単位バッファ領域に跨ることになるが、本実施形態では、バッファ40Aとして用いるメモリ領域を単位バッファ領域を単位として確保するので、異なるタイミングで確保した単位バッファ領域が実メモリ(メモリ14)上で連続する領域であることは保証されない。これに対して本実施形態では、画像処理モジュール38による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、図11(C)に示すように、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写するので、画像データが書き込まれる領域が複数の単位バッファ領域に跨るか否かに拘わらず、書込要求元の画像処理モジュール38への書込領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。
なお、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合、すなわちバッファ40Aとして用いるメモリ領域が既に確保されている場合には、既に確保されたメモリ領域のアドレスを画像処理モジュール38に書込領域のアドレスとして通知し、上記メモリ領域への画像データの書き込みを行わせる。前段の画像処理モジュール38による書込領域への画像データの書き込みが完了すると、書込用バッファ領域に書き込まれている画像データに属性情報を付加した後に、保管用バッファ領域にそのまま書き込む。なお、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい場合、書込用バッファ領域に書き込まれた画像データは、図11(C)に示すように、保管用の複数の単位バッファ領域へ分けて書き込まれることになる。
そして、自モジュールの後段の個々の画像処理モジュール38に対応する有効データポインタのうち有効データの末尾位置を表すポインタを、該ポインタが指し示す有効データの末尾位置が単位書込データ量分だけ後へ移動するように更新する(図11(C)も参照)と共に、先に書込用バッファ領域として確保したメモリ領域をリソース管理部46Bによって解放させ、データ書込処理を一旦終了する。なお、書込用バッファ領域はバッファモジュール40の初期化時に確保し、バッファモジュール40の消去時に解放するように構成してもよい。
続いて、バッファモジュール40のバッファ制御部40Bによって実行されるデータ読出処理について説明する。
まず、読出用の待ち行列から先頭に登録されている読出要求情報を取り出し、取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール38を認識し、読出要求元の画像処理モジュール38によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール38に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール38に対応する有効データのバッファ40A上での先頭位置及び末尾位置を認識する。次に、認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール38に対応する有効データ(読出要求元の画像処理モジュール38が読出可能な画像データ)が単位読出データ量以上有るか否か判定する。
読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であれば、読出要求元の画像処理モジュール38が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール38に対応する有効データがバッファ40Aに単位読出データ量以上記憶されているか、又は、バッファ40Aに記憶されている読出要求元の画像処理モジュール38に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、確保すべきメモリ領域のサイズとして読出要求元の画像処理モジュール38に対応する単位読出データ量をリソース管理部46Bに通知すると共に、読出に用いるメモリ領域(読出用バッファ領域:図12(B)も参照)の確保をリソース管理部46Bに要求し、リソース管理部46Bを介して読出用バッファ領域を取得する。
次に、読出対象の有効データをバッファ40Aから単位読出データ量分だけ読み出して読出用バッファ領域に書き込み、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール38へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール38は、先頭アドレスが通知された読出領域(読出用バッファ領域)からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール38に通知する。また、自モジュールがアプリケーション32によって生成されたバッファモジュール40である場合は、バッファ40Aとして用いているメモリ領域(単位バッファ領域の集合体)は連続領域であるので、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール38が単位バッファ領域から直接画像データを読み出すようにしてもよい。
なお、例として図12(A)に示すように、有効データの先頭部分の画像データを記憶している単位バッファ領域に記憶されている有効データのデータ量が単位読出データ量未満であり、読出対象の有効データが複数の単位バッファ領域に跨っている場合には、今回の読出対象の有効データが実メモリ(メモリ14)上で連続する領域に記憶されているとは限らないが、上記のデータ読出処理では、図12(B),(C)に示すように、このような場合にも読出対象の画像データを読出用バッファ領域に一旦書き込んだ後に該読出用バッファ領域から画像データを読み出させるので、読出対象の画像データが複数の単位バッファ領域に跨って記憶されているか否かに拘わらず、読出要求元の画像処理モジュール38への読出領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール38とのインタフェースが簡単になる。
読出要求元の画像処理モジュール38による読出領域からの画像データの読み出し完了が通知されると、読出用バッファ領域として確保したメモリ領域の先頭アドレス及びサイズをリソース管理部46Bへ通知して、当該メモリ領域をリソース管理部46Bによって解放させる。この読出用バッファ領域についても、バッファモジュール40の初期化時に確保しておき、バッファモジュール40が消去される時に解放するよう構成してもよい。また、読出要求元の画像処理モジュール38に対応する有効データポインタのうち有効データの先頭位置を表すポインタを、該ポインタが指し示す有効データの先頭位置を単位読出データ量分だけ後へ移動させることで更新する(図12(C)も参照)。
次に、後段の個々の画像処理モジュール38に対応する有効データポインタを各々参照し、先のポインタ更新により、バッファ40Aを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール38による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合は、前述した読出用の待ち行列のチェック処理(読出用の待ち行列に読出要求情報が登録されているか否かの判定)を経てデータ読出処理を終了するが、有効データを記憶していない単位バッファ領域が出現した場合は、当該単位バッファ領域をリソース管理部46Bによって解放させた後に読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。
一方、バッファ40Aに記憶されており読出要求元の画像処理モジュール38が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合(図3(B)の(4)で読出可能な有効データ無が検知された場合)には、新たな画像データを要求するデータ要求をワークフロー管理部46Aへ出力し(図3(B)の(5)も参照)、読出用の待ち行列から取り出した読出要求情報を元の待ち行列(の先頭又は末尾)に再度登録した後に、読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。この場合、ワークフロー管理部46Aにより、自モジュールの前段の画像処理モジュール38に処理要求が入力されることになる。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
詳細は後述するが、ワークフロー管理部46Aはバッファモジュール40からデータ要求が入力されると、データ要求元のバッファモジュール40の前段の画像処理モジュール38に処理要求を入力する(図3(B)の(6)も参照)。この処理要求の入力をトリガとして前段の画像処理モジュール38の制御部38Bで行われる処理により、前段の画像処理モジュール38がバッファモジュール40へ画像データを書込可能な状態になると、前段の画像処理モジュール38から書込要求が入力されることで前述したデータ書込処理が行われ、前段の画像処理モジュール38からバッファモジュール40のバッファ40Aに画像データが書き込まれる(図3(B)の(7),(8)も参照)。これにより、後段の画像処理モジュール38によるバッファ40Aからの画像データの読出が行われることになる(図3(B)の(9)も参照)。
続いて、画像処理部50を構成する個々の画像処理モジュール38に対してワークフロー管理部46Aから処理要求が入力される毎に、個々の画像処理モジュール38の制御部38Bによって各々行われる画像処理モジュール制御処理(図13)を説明する。
画像処理モジュール制御処理では、まずステップ218において、自モジュールの画像処理エンジン38Aが行う画像処理の種類や内容等に基づき、自モジュールが使用するメモリのサイズ及び自モジュールが使用する他のリソースの有無を認識する。なお、画像処理モジュール38が使用するメモリは、画像処理エンジン38Aが画像処理を行うために必要なメモリが主であるが、前段のモジュールが画像データ供給部22である場合や後段のモジュールが画像出力部24である場合には、前段又は後段のモジュールとの画像データの送受に際して画像データを一時記憶するためのバッファ用のメモリが必要となることもある。また、処理パラメータにテーブル等の情報が含まれている場合には、それを保持するためのメモリ領域が必要となることもある。そして、認識したサイズのメモリ領域の確保をリソース管理部46Bへ要求し、リソース管理部46Bによって確保されたメモリ領域をリソース管理部46Bから取得する。また、自モジュール(の画像処理エンジン38A)がメモリ以外の他のリソースを必要としていると認識した場合には、上記他のリソースの確保をリソース管理部46Bへ要求し、上記他のリソースをリソース管理部46Bから取得する。
次のステップ220では、自モジュールの前段にモジュール(バッファモジュール40や画像データ供給部22、画像処理モジュール38等)が存在している場合に、当該前段のモジュールに対してデータ(画像データ又は解析等の画像処理の処理結果)を要求する。次のステップ222では前段のモジュールからデータが取得可能であるかを判定し、ステップ222の判定が否定された場合はステップ224で全体処理終了が通知されたか否かを判定する。ステップ224の判定が否定された場合はステップ222に戻り、前段のモジュールからデータを取得可能となる迄ステップ222,224を繰り返す。ステップ222の判定が肯定された場合には、ステップ226で前段のモジュールからデータを取得し、取得したデータをステップ218で取得したメモリ領域のうちデータの一時保管用のメモリ領域に書き込むデータ取得処理を行う。
ここで、自モジュールの前段のモジュールがバッファモジュール40である場合には、先のステップ220でデータを要求すると(読出要求)、読出可能な有効データがバッファモジュール40のバッファ40Aに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール40の前段の画像処理モジュール38が当該バッファモジュール40のバッファ40Aに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール40から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ222の判定が肯定されてステップ226へ移行し、前段のバッファモジュール40より先頭アドレスが通知された読出領域から単位読出データ量(又はそれ未満のデータ量)の画像データを読み出し、一時保管用のメモリ領域に書き込むデータ取得処理を行う(図3(A)の(3)も参照)。
また、自モジュールの前段のモジュールが画像データ供給部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)の(4)も参照)、次のステップ236において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域(の先頭アドレス)、先のステップ218で取得したメモリ領域のうち画像処理エンジンによる画像処理用のメモリ領域(の先頭アドレス及びサイズ)を画像処理エンジン38Aに入力し、入力したデータに対し画像処理用のメモリ領域を使用して所定の画像処理を行わせる(図3(A)の(5)も参照)と共に、処理後のデータをデータ出力領域に書き込ませる(図3(A)の(6)も参照)。画像処理エンジン38Aへの単位読出データ量のデータの入力が完了し、画像処理エンジン38Aから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ238で出力が完了したことを後段のモジュールに通知する。
上記のステップ220〜ステップ238により画像処理モジュール38における単位処理データ量のデータに対する処理(単位処理)が完了するが、ワークフロー管理部46Aから画像処理モジュール38に入力される処理要求では、ワークフロー管理部46Aによって単位処理の実行回数が指定されることがある。このためステップ240では、単位処理の実行回数が、入力された処理要求によって指示された実行回数に達したか否か判定する。指示された単位処理の実行回数が1回の場合、この判定は無条件に肯定されるが、指示された単位処理の実行回数が2回以上の場合はステップ220に戻り、ステップ240の判定が肯定される迄ステップ220〜ステップ240を繰り返す。ステップ240の判定が肯定されるとステップ242へ移行し、ワークフロー管理部46Aへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことをワークフロー管理部46Aへ通知し、画像処理モジュール制御処理を終了する。
また、ワークフロー管理部46Aから処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ224の判定が肯定されてステップ244へ移行し、処理対象の画像データ(なお、処理対象の画像データは1頁分の画像データであることが多いが、複数頁分の画像データであってもよい)に対する処理が終了したことを意味する全体処理終了通知をワークフロー管理部46A及び後段のモジュールへ各々出力する。また、次のステップ246では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
ワークフロー管理部46Aは、ブロック単位での画像処理の実行が指示されると、図14(A)に示すブロック単位制御処理1を行い、バッファモジュール40からデータ要求が入力される毎に図14(B)に示すブロック単位制御処理2を行い、画像処理モジュール38から処理完了通知が入力される毎に図14(C)に示すブロック単位制御処理3を行い、画像処理モジュール38から全体処理終了通知が入力される毎に図14(D)に示すブロック単位制御処理4を行う。
先にも述べたように、ブロック単位制御処理1では、ワークフロー管理部46Aによる画像処理部50の個々の画像処理モジュール38への処理要求の入力では、単位処理の実行回数を指定可能とされているが、ステップ500では、1回の処理要求で指定する単位処理の実行回数を個々の画像処理モジュール38毎に決定する。この処理要求1回当りの単位処理の実行回数は、例えば処理対象の画像データ全体を処理する間の個々の画像処理モジュール38への処理要求の入力回数が平均化されるように定めることができるが、他の基準に従って定めてもよい。そして次のステップ502において、画像処理部50のうち最後段の画像処理モジュール38に処理要求を入力し(図15の(1)も参照)、ブロック単位制御処理1を終了する。
ここで、図15に示す画像処理部50において、ワークフロー管理部46Aから最後段の画像処理モジュール384に処理要求が入力されると、画像処理モジュール384の制御部38Bは前段のバッファモジュール403に読出要求を入力する(図15の(2)参照)。このとき、バッファモジュール403のバッファ40Aには画像処理モジュール384が読出可能な有効データ(画像データ)が記憶されていないので、バッファモジュール403のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図15の(3)参照)。
ワークフロー管理部46Aは、バッファモジュール40からデータ要求が入力される毎に、図14(B)に示すブロック単位制御処理2を行う。このブロック単位制御処理2では、ステップ504において、データ要求入力元のバッファモジュール40(ここではバッファモジュール403)の前段の画像処理モジュール38(ここでは画像処理モジュール383)を認識し、認識した前段の画像処理モジュール38に処理要求を入力(図15の(4)参照)して処理を終了する。
画像処理モジュール383の制御部38Bは、処理要求が入力されると前段のバッファモジュール402に読出要求を入力し(図15の(5)参照)、バッファモジュール402のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール402のバッファ制御部40Bはワークフロー管理部46Aにデータ要求を入力する(図15の(6)参照)。ワークフロー管理部46Aは、バッファモジュール402からデータ要求が入力された場合も、前述のブロック単位制御処理2を再度行うことで、その前段の画像処理モジュール382に処理要求を入力し(図15の(7)参照)、画像処理モジュール383の制御部38Bは前段のバッファモジュール401に読出要求を入力する(図15の(8)参照)。また、バッファモジュール401のバッファ40Aにも読出可能な画像データが記憶されていないので、バッファモジュール401のバッファ制御部40Bもワークフロー管理部46Aにデータ要求を入力し(図15の(9)参照)。ワークフロー管理部46Aは、バッファモジュール401からデータ要求が入力された場合も、前述のブロック単位制御処理2を再度行うことで、その前段の画像処理モジュール381に処理要求を入力する(図15の(10)参照)。
ここで、画像処理モジュール381の前段のモジュールは画像データ供給部22であるので、画像処理モジュール381の制御部38Bは、画像データ供給部22にデータ要求を入力することで画像データ供給部22から単位読出データ量の画像データを取得し(図15の(11)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール401のバッファ40Aに書き込む(図15の(12)参照)。
また、バッファモジュール401のバッファ制御部40Bは、後段の画像処理モジュール382が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール382に対して読出を要請し、これに伴い画像処理モジュール382の制御部38Bは、バッファモジュール401のバッファ40Aから単位読出データ量の画像データを読み出し(図15の(13)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール402のバッファ40Aに書き込む(図15の(14)参照)。バッファモジュール402のバッファ制御部40Bは、後段の画像処理モジュール383が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール383へ読出を要請し、画像処理モジュール383の制御部38Bは、バッファモジュール402のバッファ40Aから単位読出データ量の画像データを読み出し(図15の(15)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のバッファモジュール403のバッファ40Aに書き込む(図15の(16)参照)。
更に、バッファモジュール403のバッファ制御部40Bは、後段の画像処理モジュール384が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール384に対して読出を要請し、これに伴い画像処理モジュール384の制御部38Bは、バッファモジュール403のバッファ40Aから単位読出データ量の画像データを読み出し(図15の(17)参照)、取得した画像データに対して画像処理エンジン38Aが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部24へ出力する(図15の(18)参照)。
また、個々の画像処理モジュール38の制御部38Bは、後段のバッファモジュール40のバッファ40Aへの画像データの書き込みを完了すると、ワークフロー管理部46Aへ処理完了通知を入力する。ワークフロー管理部46Aは、画像処理モジュール38から処理完了通知が入力される毎に、図14(C)に示すブロック単位制御処理3を行う。このブロック単位制御処理3では、まずステップ506において、処理完了通知元の画像処理モジュール38が最後段の画像処理モジュール38か否か判定する。判定が否定された場合は何ら処理を行うことなくブロック単位制御処理3を終了する。また、判定が肯定された場合はステップ508へ移行し、処理完了通知元の画像処理モジュール38に処理要求を再度入力して処理を終了する。
また、ワークフロー管理部46Aは、画像処理モジュール38から全体処理終了通知が入力される毎に、図14(D)に示すブロック単位制御処理4を行う。このブロック単位制御処理4では、ステップ510において、全体処理終了通知入力元の画像処理モジュール38が最後段の画像処理モジュール38か否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部24へ全て出力されることで、最後段の画像処理モジュール38から全体処理終了通知が入力された場合には、ステップ510の判定が肯定されてステップ512へ移行し、アプリケーション32に対して画像処理の完了を通知し、ブロック単位制御処理を終了する。そして、画像処理の完了が通知されたアプリケーション32は、ユーザに対して画像処理の完了を通知する。
このように、ブロック単位処理では、最後段の画像処理モジュール38に入力された処理要求がより前段の画像処理モジュール38へ遡り、最前段の画像処理モジュール38に到達すると、最前段の画像処理モジュール38で画像処理が行われて後段のバッファモジュール40にデータが書き込まれ、それでデータが足りるようならば処理が後段のモジュールへ進んで行くという流れで一連の画像処理が行われる。
なお、上記では画像処理部の個々の画像処理モジュール38が、画像1面分よりも小さいデータ量を単位として後段へ画像データを引き渡しながら画像処理を行うように動作させることで、画像処理部が全体としてブロック単位処理を行うようにワークフロー管理部46Aが制御する態様を説明したが、これに限定されるものではなく、画像処理部の個々の画像処理モジュール38が、前段の画像処理モジュール38が画像1面分の画像データに対する画像処理を完了した後に、後段の画像処理モジュール38が画像1面分の画像データに対する画像処理を行うように動作させることで、画像処理部が全体として面単位処理を行うことも可能なように、ワークフロー管理部46Aを構成してもよい。
また、上記のようにワークフロー管理部46Aが制御を行っている間、処理管理部46のエラー管理部46Cも動作している。エラー管理部46Cは、画像処理部50が画像処理を実行している途中でエラーが発生した場合に、発生したエラーの種別・発生箇所等のエラー情報を取得し、画像処理プログラム群34がインストールされたコンピュータ10が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部20等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知する処理を行う。
なお、上記実施の形態では、処理管理部46のプログラムが、記憶部20に固定的に記憶されている場合を説明したが、これに限定されず、コンピュータ10の外部から、例えばUSBメモリ等の外部記憶装置や通信回線等を介して、新たな処理管理部のプログラムを追加したり、既登録の処理管理部のプログラムを上書き更新可能としてもよい。
また、上記では本発明に係る画像処理プログラムに対応する画像処理プログラム群34が記憶部20に予め記憶(インストール)されている態様を説明したが、本発明に係る画像処理プログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
なお、上記実施の形態では、対になる変換用の画像処理モジュールを、入力処理モジュール38の後段、および出力処理モジュール38の前段の2カ所に挿入する例について説明したが、これに限定されず、例えば、一連の画像処理において、ユーザが設定した処理モードに応じて変換が必要であると判断された部分の最前段及び最後段に挿入するようにしてもよい。具体的には、例えば、速度優先モードが設定された場合に、一連の画像処理系において、そのままの状態では速度が著しく低下する(速度低下のボトルネックとなる)、或いは何らかの変換処理を挿入することによって速度向上が見込めると判断された画像処理の部分(以下、変換対象部分と呼称)の最前段と最後段を挿入位置として、該挿入位置に回転処理や解像度変換処理などを挿入することができる。
また、変換対象部分が複数存在する場合には、それぞれの部分の最前段及び最後段に、一対の画像処理を挿入することができる。
また、変換用の画像処理モジュールを処理管理部46が自動的に挿入するのではなく、プログラムのソースレベルで静的に直接埋め込むようにすることもできる。
本実施形態に係るコンピュータ(画像処理装置)の概略構成を示すブロック図である。 画像処理部の構成例を示すブロック図である。 (A)は画像処理モジュール、(B)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。 処理モードを設定する設定処理の流れを示すフローチャートである。 アプリケーションが実行するモジュール生成処理の流れを示すフローチャートである。 処理管理部のワークフロー管理部が実行するモジュール生成制御処理の流れを示すフローチャートである。 モジュール生成部で実行されるモジュール生成処理の流れを示すフローチャートである。 本実施の形態のモジュール生成動作を説明する説明図である。 変換処理内容テーブルの例を示した図である。 図16に示す一連の画像処理系に90度回転処理を挿入したときの挿入結果を示す図である。 書込対象の画像データが複数の保管用単位バッファ領域に跨る場合を説明する概略図である。 読出対象の画像データが複数の保管用単位バッファ領域に跨っていた場合を説明する概略図である。 画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。 処理管理部のワークフロー管理部によって実行されるブロック単位制御処理の内容を示すフローチャートである。 画像処理部における画像処理の流れを説明する概略図である。 画像サイズと画像処理モジュールの組み合わせによって速度低下を招くおそれがある具体例を示す図である。 画像ビット深度数が足りずに精度低下を招くおそれのある具体例を示す図である。
符号の説明
10 コンピュータ
12 CPU
20 記憶部
22 画像データ供給部
24 画像出力部
34 画像処理プログラム群
38 画像処理モジュール
40 バッファモジュール
46 処理管理部

Claims (6)

  1. 所定の画像処理を行う画像処理モジュールを複数連結して画像データに対して複数の画像処理を組み合わせた一連の処理を実行する画像処理手段と、
    所定の条件に応じて、画像データを所定の状態に変換する第1の画像処理と画像データを前記第1の画像処理とは逆方向に変換する第2の画像処理とが前記一連の処理に挿入されるように前記画像処理手段を制御する制御手段と、
    を含む画像処理装置。
  2. 前記第1及び第2の画像処理の挿入位置は、画像データの入力処理および出力処理を除いた前記一連の処理の最前段及び最後段、または、前記所定の条件に応じて画像データを所定の状態に変換する必要があると判断された変換対象部分の最前段及び最後段である請求項1記載の画像処理装置。
  3. 前記所定の条件は、精度を優先するモード及び速度を優先するモードを含む処理モード、前記画像データのビット深数、前記画像データのサイズ、及び前記画像データの形状の少なくとも1つである請求項1または請求項2記載の画像処理装置。
  4. 前記処理モードを指定するための指定手段を更に設けた請求項3記載の画像処理装置。
  5. 前記第1及び第2の画像処理を示す情報を条件毎に記憶したテーブルを記憶した記憶手段を更に備え、
    前記制御手段は、前記所定の条件及び前記テーブルに基づいて挿入すべき前記第1および第2の画像処理を判断し、該挿入すべきと判断した第1および第2の画像処理が前記一連の処理に挿入されるように前記画像処理手段を制御する請求項1乃至請求項4のいずれか1項記載の画像処理装置。
  6. コンピュータを、
    所定の画像処理を行う画像処理モジュールを複数連結して画像データに対して複数の画像処理を組み合わせた一連の処理を実行する画像処理手段、
    及び、所定の条件に応じて、画像データを所定の状態に変換する第1の画像処理と画像データを前記第1の画像処理とは逆方向に変換する第2の画像処理とが前記一連の処理に挿入されるように前記画像処理手段を制御する制御手段、
    として機能させる画像処理プログラム。
JP2006324188A 2006-11-30 2006-11-30 画像処理装置及びプログラム Active JP4818893B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006324188A JP4818893B2 (ja) 2006-11-30 2006-11-30 画像処理装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006324188A JP4818893B2 (ja) 2006-11-30 2006-11-30 画像処理装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2008140005A true JP2008140005A (ja) 2008-06-19
JP4818893B2 JP4818893B2 (ja) 2011-11-16

Family

ID=39601419

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006324188A Active JP4818893B2 (ja) 2006-11-30 2006-11-30 画像処理装置及びプログラム

Country Status (1)

Country Link
JP (1) JP4818893B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013073543A (ja) * 2011-09-29 2013-04-22 Fixstars Corp 画像処理フィルタ統合装置、画像処理フィルタ統合方法、およびプログラム
JP2018164157A (ja) * 2017-03-24 2018-10-18 富士ゼロックス株式会社 画像処理装置及びプログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0744699A (ja) * 1993-07-27 1995-02-14 Matsushita Electric Ind Co Ltd 画像拡大縮小装置
JPH0863584A (ja) * 1995-09-25 1996-03-08 Canon Inc カラー画像処理装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0744699A (ja) * 1993-07-27 1995-02-14 Matsushita Electric Ind Co Ltd 画像拡大縮小装置
JPH0863584A (ja) * 1995-09-25 1996-03-08 Canon Inc カラー画像処理装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013073543A (ja) * 2011-09-29 2013-04-22 Fixstars Corp 画像処理フィルタ統合装置、画像処理フィルタ統合方法、およびプログラム
JP2018164157A (ja) * 2017-03-24 2018-10-18 富士ゼロックス株式会社 画像処理装置及びプログラム

Also Published As

Publication number Publication date
JP4818893B2 (ja) 2011-11-16

Similar Documents

Publication Publication Date Title
JP4694266B2 (ja) 画像処理装置、方法及びプログラム
JP4694267B2 (ja) 画像処理装置、方法及びプログラム
JP4979287B2 (ja) 画像処理装置及びプログラム
JP4694270B2 (ja) 画像処理装置、方法及びプログラム
JP4694268B2 (ja) 画像処理装置、方法及びプログラム
JP4694264B2 (ja) 画像処理装置、方法及びプログラム
JP4795138B2 (ja) 画像処理装置及びプログラム
JP4694265B2 (ja) 画像処理装置、方法及びプログラム
JP5479519B2 (ja) 画像処理装置、方法及びプログラム
JP2007287085A (ja) 画像処理装置及びプログラム
JP2012123688A (ja) データ処理装置及びプログラム
JP4694269B2 (ja) 画像処理装置、方法及びプログラム
JP4619868B2 (ja) 画像処理装置、方法及びプログラム
JP2007287084A (ja) 画像処理装置及びプログラム
JP4818893B2 (ja) 画像処理装置及びプログラム
JP2008140007A (ja) 画像処理装置及びプログラム
JP4869890B2 (ja) 画像処理装置及びプログラム
JP4762865B2 (ja) 画像処理装置、画像処理プログラム
JP2008140170A (ja) 画像処理装置及びプログラム
JP5036588B2 (ja) 画像処理装置、画像処理プログラム
JP5047139B2 (ja) 画像処理装置及びプログラム
JP5440129B2 (ja) 画像処理装置、画像形成装置、及び画像処理プログラム
JP2012043096A (ja) 画像処理装置及び方法ならびにプログラム
JP2008140042A (ja) 画像処理装置及びプログラム
JP2008141331A (ja) 画像処理装置及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090908

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110519

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110524

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110715

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110809

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110831

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140909

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4818893

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250