(57)【特許請求の範囲】
【請求項１】
デジタル画像データを記憶する画像記憶手段と、
少なくとも前記画像記憶手段から要求された画像データを順次読み出す機能と画像データの読み出しを先頭からやり直す機能とを持つ画像入力手段と、
入力された画像データを複数の出力先に出力可能な分岐処理手段と、
少なくとも入力側に接続された前記画像入力手段または他の画像処理手段または前記分岐処理手段から処理に必要なデータ部分を取得して所定の処理を行う機能と、該所定の処理を画像の先頭からやり直すように状態を初期化する機能とを持つ複数の画像処理手段とを具備し、
前記分岐処理手段は、
少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段と、容量の上限を指定可能なバッファ手段と、分岐処理全体を制御する分岐制御手段とを有し、
分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記バッファ手段から要求部分のデータが格納されているか否かの情報を取得し、格納されていれば当該データを出力要求があった分岐先に対して出力し、前記バッファ手段に格納されていない場合には前記入力管理手段から要求部分が入力済みか否かの情報を取得し、要求部分がまだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すように要求して要求部分を読み出し直して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納する
ことを特徴とする画像処理装置。
【請求項２】
前記分岐処理手段は、前記バッファ手段に対してデータを格納する際に、もし予め指定された容量を超える場合には、格納順の古いデータから順に前記バッファ手段から破棄する
ことを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記分岐処理手段は、前記バッファ手段に対してデータを格納する際に、もし予め指定された容量を超える場合には、画像の先頭の近くに位置するデータから順に前記バッファ手段から破棄する
ことを特徴とする請求項１記載の画像処理装置。
【請求項４】
デジタル画像データを記憶する画像記憶手段と、
少なくとも前記画像記憶手段から要求された画像データを順次読み出す機能と、画像データの読み出しを先頭からやり直す機能とを持つ画像入力手段と、
入力された画像データを複数の出力先に出力可能な分岐処理手段と、
少なくとも入力側に接続された前記画像入力手段または他の画像処理手段または前記分岐処理手段から処理に必要なデータ部分を取得して所定の処理を行う機能と、該所定の処理を画像の先頭からやり直すように状態を初期化する機能とを持つ複数の画像処理手段とを具備し、
前記分岐処理手段は、
少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段とを有し、
分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記入力管理手段から要求されたデータ部分が入力済みか否かの情報を取得し、まだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すよう要求して要求部分を読み出し直して出力要求があった分岐先に対して出力する
ことを特徴とする画像処理装置。
【請求項５】
前記画像入力手段および前記画像処理手段は、要求に応じて指定された部分についての処理を行わずスキップする機能を持ち、
前記分岐処理手段は、必要なデータ部分を得るためにその手前までの部分の処理をスキップするように入力側に要求する
ことを特徴とする請求項１〜４のいずれかに記載の画像処理装置。
【請求項６】
デジタル画像データを記憶する画像記憶手段と、
少なくとも前記画像記憶手段から要求された画像データを順次読み出す機能と画像データの読み出しを先頭からやり直す機能とを持つ画像入力手段と、
入力された画像データを複数の出力先に出力可能な分岐処理手段と、
少なくとも入力側に接続された前記画像入力手段または他の画像処理手段または前記分岐処理手段から処理に必要なデータ部分を取得して所定の処理を行う機能と、該所定の処理を画像の先頭からやり直すように状態を初期化する機能とを持つ複数の画像処理手段とを具備し、
前記分岐処理手段は、少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段と、容量の上限を指定可能なバッファ手段と、分岐処理全体を制御する分岐制御手段とを有する画像処理装置における画像処理方法であって、
分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記バッファ手段から要求部分のデータが格納されているか否かの情報を取得し、格納されていれば当該データを出力要求があった分岐先に対して出力し、前記バッファ手段に格納されていない場合には前記入力管理手段から要求部分が入力済みか否かの情報を取得し、要求部分がまだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すように要求して要求部分を読み出し直して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納する
ことを特徴とする画像処理方法。
【請求項７】
デジタル画像データを記憶する画像記憶手段と、
少なくとも前記画像記憶手段から要求された画像データを順次読み出す機能と、画像データの読み出しを先頭からやり直す機能とを持つ画像入力手段と、
入力された画像データを複数の出力先に出力可能な分岐処理手段と、
少なくとも入力側に接続された前記画像入力手段または他の画像処理手段または前記分岐処理手段から処理に必要なデータ部分を取得して所定の処理を行う機能と、該所定の処理を画像の先頭からやり直すように状態を初期化する機能とを持つ複数の画像処理手段とを具備し、
前記分岐処理手段は、少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段とを有する画像処理装置における画像処理方法であって、
分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記入力管理手段から要求されたデータ部分が入力済みか否かの情報を取得し、まだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すよう要求して要求部分を読み出し直して出力要求があった分岐先に対して出力する
ことを特徴とする画像処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、デジタル化された画像データを処理する画像処理装置および画像処理方法に関し、特に複数の要素機能的な画像処理モジュールを用意して、その組み合わせにより多種多様な画像処理機能を実現するような画像処理装置および画像処理方法に関する。
【０００２】
【従来の技術】
複数の要素機能的な画像処理モジュールを用意して、その組み合わせにより多種多様な画像処理機能を提供する技術は、例えば文書エディタや描画ツール、あるいは画像伝送装置やプリンタ等、デジタル画像を取り扱う様々なシステムにおいて利用される。そして、このような画像処理機能は、しばしば画像処理ライブラリファイルとして提供され、その場合には画像処理機能を利用したいアプリケーションプログラムとリンクすることによりその機能が利用される。
【０００３】
画像を入力可能なＤＴＰ（デスクトップ・パブリッシング）システム、画像を出力可能なプリントシステムなどでは、処理対象となる画像に対して、例えば拡大・縮小、回転、アフィン変換、色変換、フィルタ、合成などの各種の画像処理が行われる。これらの処理を行う際には、入力画像の属性や処理内容、手順、パラメータなどが固定されている場合には専用のハードウェアを用いて処理を行う場合もあるが、例えば色空間や画素当たりのビット数が異なる様々な画像が入力されたり、処理内容や手順、パラメータなどが様々に変更される場合には、より柔軟性のある構成で対応することが必要となる。
【０００４】
このような要求を満たす手段としては、従来、プログラマブルなモジュールをパイプライン形態やＤＡＧ（Directed Acyclic Graph：有向非循環グラフ）形態に接続して、柔軟に所望の処理を行う技術が提案されている（例えば、特開平５−２６０３７３号公報や特開平７−１０５０２０号公報を参照）。
【０００５】
特開平５−２６０３７３号公報には、複数のプログラマブル演算処理部の各演算処理内容と、ネットワーク部による各プログラマブル演算処理部の接続形態とを、ホストコントロール手段を通じて外部から自在に設定できるように構成することにより、高速かつ高度な演算処理が可能で、機能変更、系統変更に対する自由度が高いデジタル映像信号処理装置が記載されている。
【０００６】
また、特開平７−１０５０２０号公報には、必要な機能モジュールを所望の順番でパイプライン状に接続／初期化し、処理を行うことで柔軟に画像処理を行うパイプライン化画像処理システムが記載されている。当該パイプライン化画像処理システムでの動作は次の通りである。
【０００７】
すなわち、接続が終了すると、最後尾のモジュールに対して必要に応じてヘッダの取得を要求し、この要求は接続されたモジュールを順次遡って先頭の画像入力モジュールに達して読み込まれる画像のヘッダ情報を返し、各モジュールは自身が変更する部分の情報を書き換えた後に後段のモジュールに渡す。例えば入力画像のサイズが１０００×１０００画素であり、処理パイプラインの中に５００×５００画素への縮小処理モジュールが含まれていた場合には、当該縮小モジュールは前段から渡されたヘッダ情報のうちのサイズ情報を１０００×１０００から５００×５００に変更して後段に渡す。
【０００８】
このような処理を順次繰り返して、最終的に最後尾のモジュールは外部に対して当該画像処理パイプラインが出力する画像のヘッダ情報を出力する。次に、得られたヘッダ情報などをもとにデータの処理を行う。データの処理もヘッダの処理と同様に、最後尾のモジュールに対して一定量のデータ出力を要求すると、最後尾のモジュールは前段のモジュールに対してそれに必要な画像データの入力を要求する。この要求は同様により前段に対して遡って伝えられて画像入力モジュールに伝えられ、必要な画像データが読み出されて後段に渡され、順次処理をされながら最終的に最後尾の処理モジュールから出力される。
【０００９】
上記の処理が画像の最後まで、または必要な部分に対して行われると、処理パイプラインは不要となるので、最後尾のモジュールに対して終了を要求する。この終了要求もヘッダ情報取得や上記処理と同様にモジュールの接続を遡って最前部の画像入力モジュールに達し、画像入力モジュールは処理に用いたリソースを解放するとともに自身を解放して後段に制御を返す。制御が戻された後段も同様にリソースや自身を解放する処理を行ってさらに後段に返し、最終的に最後尾のモジュールのリソース／自身の解放が終了した時点で全ての操作が終了する。
【００１０】
特開平７−１０５０２０号公報に記載の上記技術は、例えばＵＮＩＸ（登録商標）などのオペレーティングシステムで用いられている単一プロセッサによる多重処理パイプラインのシミュレーション方式を画像処理などの分野に応用したものである。そして、特に画像処理においては、１回の処理単位を例えば画像の１ラインのように画像の一部に限定することにより、各処理モジュールが処理用に保持するメモリ領域を極めて少なくすることが可能となる。
【００１１】
その結果、少ないメモリ容量で複雑な処理を実行できるコストの安い画像処理装置を提供することが可能となったり、あるいは仮想記憶をサポートするオペレーティングシステム上で動作させる場合には、メモリ不足によるスワップアウトが最小限に抑えられるため、高速に処理を実行することが可能となる。
【００１２】
さらに、他の従来技術として、例えば９０度回転処理のように出力の1ラインを得るために入力画像全体を必要とする処理や、入力画像を複数の処理モジュールに対して出力する分岐モジュールなどの場合には、画像全体のバッファリングが終了したらそれよりも前段のモジュールに対して終了処理を行うことで、必要なメモリ資源を最小に抑えて高速に処理することを目指した画像処理装置も提案されている（特開平８−２７２９８１号公報参照）。
【００１３】
【発明が解決しようとする課題】
これまで述べたような、要素機能的なモジュールを任意に組み合わせて所望の複雑な処理を行わせることが可能な画像処理装置を構成する場合に、非常に特殊かつ重要なモジュールとして、入力画像を複数の処理モジュールに対して出力する分岐モジュールがある。入力から最後尾の処理まで、一度も分岐を行わずに済む処理も多いが、次のようなパイプライン処理の場合には分岐モジュールが必要となる。
【００１４】
例えば、異なるカーネルサイズでフィルタ処理を行った結果を比較し、その比較結果によって出力を決定する適応的フィルタ処理などを行うパイプライン処理のような場合である。具体的には、図１２に示すように、画像入力部１１１、拡縮処理部１１２、色変換処理部１１３、分岐処理部１１４、フィルタ処理部１１５−１，１１５−２および出力選択部１１６を含み、画像記憶部１００に保持されている処理対象の画像データに対して適応的フィルタ処理を行うようなパイプライン処理である。
【００１５】
このようなパイプライン処理において、分岐モジュールを使わなければ、図１３に示すように、２系統Ａ，Ｂのパイプラインを別々に生成して処理を行い、その結果を統合するモジュールを作って処理する方法を採ることになる。しかし、２系統のパイプラインを別々に生成する構成を採った場合には、図１２の分岐モジュールを使った場合と比較して、全く同じ画像入力処理、拡縮処理、色変換処理が２度ずつ行われることになってしまうため、リソース／処理速度の両面で大きな無駄が発生してしまう。
【００１６】
このような理由から、図１２に示すように、分岐モジュールを用いてパイプラインを構築するのが有効な手法となるのである。先述した特開平７−１０５０２０号公報には、パイプラインのブランチング（分岐化）、または「ファンアウト(fan-out)」パイプライン部分が存在する旨が記載されている。しかし、動作の詳細については何ら記載されておらず、当該公報の記載内容からは、画像全体をバッファリングして各分岐先に要求された中間処理結果を出力するしか実現方法がない。
【００１７】
また、先述した特開平８−２７２９８１号公報には、分岐モジュールよりも前段にあるモジュールを解放することで既に無駄となったリソースを少しでも解放し、また分岐した複数の出力先の全てで処理が終了したかどうかをチェックするためのフラグまたはカウンタを持ち、全てが終了したなら当該分岐モジュールが保持していたバッファなどの解放と自身の解放を行う旨が記載されている。しかし、この動作説明からも明らかなように、分岐モジュール中にはそこまでの中間処理結果である画像全体をバッファリングする必要がある。
【００１８】
以上述べたように、分岐モジュールは任意のモジュールを組み合わせて所望の複雑な処理を実現するために非常に重要であるにもかかわらず、従来技術では、分岐モジュールに至るまでの中間処理結果の画像全体をバッファリングする必要があるためメモリを大量に必要とし、その結果、ＤＡＧ形式を含むパイプライン型処理の利点、即ち少ないメモリで高速に処理できるという利点を打ち消す要因の一つとなっていた。
【００１９】
本発明は、上記課題に鑑みてなされたものであり、その目的とするところは、分岐モジュールを含むパイプライン処理において、分岐モジュールに入力される中間結果の一部分のみをバッファリングする、または全くバッファリングすることなしに任意の分岐先に対して要求された画像データを高速に出力可能な画像処理装置および画像処理方法を提供することにある。
【００２０】
【課題を解決するための手段】
上記目的を達成するために、この出願の第１発明は、デジタル画像データを記憶する画像記憶手段と、少なくとも前記画像記憶手段から要求された画像データを順次読み出す機能と画像データの読み出しを先頭からやり直す機能とを持つ画像入力手段と、入力された画像データを複数の出力先に出力可能な分岐処理手段と、少なくとも入力側に接続された前記画像入力手段または他の画像処理手段または前記分岐処理手段から処理に必要なデータ部分を取得して所定の処理を行う機能と、該所定の処理を画像の先頭からやり直すように状態を初期化する機能とを持つ複数の画像処理手段とを具備し、前記分岐処理手段が、少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段と、容量の上限を指定可能なバッファ手段と、分岐処理全体を制御する分岐制御手段とを有する画像処理装置において、分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記バッファ手段から要求部分のデータが格納されているか否かの情報を取得し、格納されていれば当該データを出力要求があった分岐先に対して出力し、前記バッファ手段に格納されていない場合には前記入力管理手段から要求部分が入力済みか否かの情報を取得し、要求部分がまだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すように要求して要求部分を読み出し直して出力要求があった分岐先に対して出力するとともに前記バッファ手段に格納するようにしている。
この出願の第２発明は、前記分岐処理手段が、少なくとも入力側に接続された前記画像入力手段または前記画像処理手段からの入力状況を管理する入力管理手段と、分岐先の情報を管理する分岐情報管理手段とを有する画像処理装置において、分岐先から出力要求を受けると、前記分岐制御手段が前記分岐情報管理手段から画像データのどの部分が出力要求されているかの情報を取得し、また前記入力管理手段から要求されたデータ部分が入力済みか否かの情報を取得し、まだ入力側から入力されていない場合には入力側から要求部分を読み出して出力要求があった分岐先に対して出力し、既に入力側から入力済みである場合には入力側に対して処理を画像の先頭からやり直すよう要求して要求部分を読み出し直して出力要求があった分岐先に対して出力するようにしている。
【００２１】
パイプライン処理において、複数の処理モジュールの各々に処理対象の画像データの先頭から処理をやり直す機能を持たせることで、処理対象の画像データの再読み出しが可能となる。したがって、画像データを解析した結果を後段の処理で使用するような処理をコンピュータ上のプログラムとして実現する場合に、従来複数のパスで行っていた処理を１つのパスで実現できる。また、分岐処理モジュールに少なくとも任意数の分岐先を管理する機能を持たせることで、画像全面分のバッファを持つこと無しに任意の数の分岐処理に対応でき、さらに後段に繋がる処理モジュールによっては全面をバッファリングするのと同じ速度で分岐処理できる。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２３】
図１は、本発明の一実施形態に係る画像処理装置（システム）の構成の一例を示すブロック図である。図１から明らかなように、本実施形態に係る画像処理装置は、画像記憶部１１、メモリ部１２、処理格納部１３、画像出力部１４および制御部１５を有し、これら構成要素がバスライン１６を介して相互に接続された構成となっている。
【００２４】
図１において、画像記憶部１１は、処理対象であるデジタル化された画像データを保持する。メモリ部１２は、画像記憶部１１に保持された画像データや、各種処理を行うために必要な処理領域や各種の演算途中結果、処理パラメータ等を保持する。なお、画像記憶部１１についてはメモリ部１２と兼用するようにしても良い。
【００２５】
処理格納部１３は、画像記憶部１１に保持された処理対象の画像データに対して所定の処理を実行する各種の処理手段、例えば画像入力手段１３１、分岐処理手段１３２、拡縮処理手段１３３、色変換処理手段１３４、フィルタ処理手段１３５および出力選択処理手段１３６を有している。この処理格納部１３内の各処理手段や制御部１５などは、プログラムモジュールとしてメモリ部１２の中に展開されて動作しても良いし、コンピュータ上の処理プログラムモジュールとして存在しても良いし、一部または全部が専用のハードウェアで構成されていても良い。処理格納部１３内の各種の処理手段の詳細については後述する。
【００２６】
画像出力部１４は、画像記憶部１１に保持された画像データが処理格納部１３内の各種の処理手段によって処理された処理結果を、バスライン１６を通して図示したシステムの外部に出力する。制御部１５はＣＰＵなどによって構成され、画像記憶部１１、メモリ部１２、処理格納部１３および画像出力部１４の各処理の制御を司っている。
【００２７】
次に、処理格納部３に格納される各種の処理手段について、幾つかの処理を例にとってその概要について説明する。
【００２８】
先述したように、各種の処理手段はコンピュータ上の処理プログラムモジュールとして存在しても良いし、一部または全部が専用のハードウェアで構成されていても良いが、以下では説明を簡単にするために、コンピュータ上の処理プログラムモジュールとして実現されている場合を例に挙げて説明する。
【００２９】
図２は、処理モジュールの一つである拡縮処理部２１の内部構成の一例を示すブロック図である。この拡縮処理部２１は、図１の拡縮処理手段１３３に対応している。図２から明らかなように、拡縮処理部２１は、前段のモジュールから入力される画像を保持するための入力バッファ２１１と、処理結果を後段のモジュールに出力するための出力バッファ２１２と、拡縮処理を制御する拡縮制御部２１３とを有する構成となっている。
【００３０】
拡縮処理部２１は、図１において、モジュール生成時に制御部１５から拡縮の倍率を指示され、必要な情報などを処理格納部１３から取り出されて、メモリ部１２上にプログラムモジュールとして生成される。その生成時に、拡縮制御部２１３は制御部１５から前段のモジュールへの接続情報を与えられ、その情報に基づいて前段のモジュールに対して入力される画像情報の取得要求を出して画像サイズやビット数などの情報を取得し、メモリ部１２上に処理に必要な入力バッファ２１１を生成する。
【００３１】
次に、制御部１５から与えられた倍率情報から出力画像情報を計算し、メモリ部１２上に後段のモジュールに拡縮後の画像を出力するための出力バッファ２１２を生成する。一例として、入力画像が１０００×１０００画素の１画素当り８ビットの画像であり、拡縮倍率が（０．６，１．０）であり、１回の出力単位が１ラインである場合を想定すると、拡縮制御部２１３はメモリ部１２上に１０００バイト分の入力バッファ２１１と、６００バイト（＝１０００×０．６）分の出力バッファ２１２とを生成することになる。
【００３２】
このようにして生成された拡縮処理部２１において、後段のモジュールから出力要求を受けると、その出力要求が拡縮制御部２１３に伝えられる。すると、拡縮制御部２１３は、前段のモジュールに対して画像の出力要求を出す。前段のモジュールはその要求に従って1ライン（＝１０００バイト）分の画像データを自身の出力バッファに書き込んで返す。このとき、拡縮制御部２１３はその結果を入力バッファ２１１にコピーする。
【００３３】
拡縮制御部２１３は次に、拡縮倍率に従って出力バッファ２１２に入力バッファ２１１のデータを０．６倍に縮小した画像データを書き込んで、その結果を後段のモジュールに渡す。後段のモジュールは渡された出力データを自身の入力バッファにコピーする。なお、縮小処理の技術は周知であるので、ここではその詳細については説明を省略する。このような処理を画像のライン数分の回数（本例では、１０００回）繰り返すことで、入力画像を（０．６，１．０）倍に縮小した画像を出力する処理を実行する。
【００３４】
ここでは説明の都合上、拡縮処理部２１が入力バッファ２１１と出力バッファ２１２の両方を生成／保持するように説明したが、出力バッファ２１２については後段のモジュールが生成して出力要求と共に拡縮処理部２１に渡して書き込んでもらうように構成しても良い。そのようにすれば、拡縮処理部２１の出力バッファ２１２は不要となり、また同様に前段のモジュールに対して出力要求時に拡縮処理部２１の入力バッファ２１１を渡せば前段のモジュールにも出力バッファは不要となり、入力時／出力時のバッファ間コピーも不要となるため処理速度を向上させることができる。
【００３５】
以下の各処理モジュールの説明においては、ブロック図上では出力バッファを図示するが、これは後段のモジュールから渡されるものとして説明する。
【００３６】
図３は、ルックアップテーブル（ＬＵＴ）や色変換マトリクスを使って入力画像の色変換処理を行う色変換処理部２２の内部構成の一例を示すブロック図である。この色変換処理部２２は、図１の色変換処理手段１３４に対応している。色変換処理部２２も拡縮処理部２１と同様に、前段のモジュールから入力される画像を保持するための入力バッファ２２１と、処理結果を後段のモジュールに出力するための出力バッファ２２２と、色変換処理を制御する色変換制御部２２３とを有する構成となっている。
【００３７】
色変換処理部２２は、図１において、モジュール生成時に制御部１５から、例えばＬＵＴやマトリクスなどの処理パラメータを指示され、それを処理するために必要な情報などが処理格納部１３から取り出され、メモリ部１２上にプログラムモジュールとして生成される。その生成時に、色変換制御部２２３は制御部１５から前段のモジュールへの接続情報を与えられ、その情報に基づいて前段のモジュールに対して入力される画像情報の取得要求を出して画像サイズやビット数などの情報を取得し、メモリ部１２上に処理に必要な入力バッファ２２１を生成する。
【００３８】
この色変換処理部２２において、後段のモジュールから出力バッファ２２２を渡されて出力要求を受けると、色変換制御部２２３は前段のモジュールに対して入力バッファ２２１を渡して出力要求を行い、その後に入力バッファ２２１に格納された画像データに対してＬＵＴやマトリクス処理を行ってその結果を出力バッファ２２２に書き出して後段のモジュールに返す。
【００３９】
図４は、畳み込みフィルタ処理を行うフィルタ処理部２３の内部構成の一例を示すブロック図である。フィルタ処理部２３は、図１のフィルタ処理手段１３５に対応している。図４から明らかなように、フィルタ処理部２３は、フィルタ係数サイズに対応した複数の入力バッファ２３１と、処理結果を後段のモジュールに出力するための出力バッファ２３２と、フィルタ処理を制御するフィルタ制御部２３３とを有する構成となっている。
【００４０】
図４には、例えば３×３サイズのフィルタ処理を行う場合を想定した構成が示されている。図１において、制御部１５がモジュール生成時に３×３のフィルタ係数を指示してフィルタ処理部２３を生成すると、フィルタ制御部２３３は、入力バッファ２３１として入力画像データの３ライン分を保持できるだけの容量をメモリ部１２上などに確保し、制御部１５から生成時に渡された前段モジュールへの接続情報から前段を呼び出して最初の１ライン目を入力バッファ２３１の２番目に書き込ませ、それを入力バッファ２３１の１番目にコピーする。
【００４１】
後段のモジュールから出力バッファ２３２を渡されて出力要求を受けると、フィルタ制御部２３３は前段のモジュールに入力バッファ２３１の３番目を渡して２ライン目の画像データを書き込ませ、これら入力バッファ２３１の１〜３番目の３ライン分のデータと、３×３のフィルタ係数を順々に畳み込んで出力データを計算し、出力バッファ２３２に書き出す。
【００４２】
この処理を１ライン分について行うと、１ライン分の出力結果が出力バッファ２３２に蓄えられるので、それを後段のモジュールに返す。その後、入力バッファ２３１は２番目のデータを１番目に、３番目のデータを２番目にコピーして、次のラインの処理に備える。
【００４３】
図５は、２つの入力画像を受け取ってある条件によりどちらかの画素値を選択して出力する出力選択処理部２４の内部構成の一例を示すブロック図である。この出力選択処理部２４は、図１の出力選択処理手段１３６に対応している。図５から明らかなように、出力選択処理部２４は、２つの入力画像のそれぞれに対応した２つの入力バッファ２４１−１，２４１−２と、処理結果を後段のモジュールに出力するための出力バッファ２４２と、出力選択処理を制御する出力選択制御部２４３とを有する構成となっている。
【００４４】
出力選択処理部２４は、図１において、モジュール生成時に制御部１５から選択条件などの処理パラメータを指示され、それを処理するために必要な情報などが処理格納部１３から取り出され、メモリ部１２上にプログラムモジュールとして生成される。その生成時に、出力選択制御部２４３は制御部１５から２つの前段モジュールへの接続情報を与えられ、その情報に基づいて前段のモジュールに対して入力される画像情報の取得要求を出して画像サイズやビット数などの情報を取得し、メモリ部１２上に処理に必要な入力バッファ２４１−１，２４１−２を生成する。
【００４５】
この出力選択処理部２４において、後段のモジュールから出力バッファ２４２を渡されて出力要求を受けると、２つの前段のモジュールそれぞれに対して入力バッファ２４１の１番目（２４１−１）と２番目（２４１−２）とを渡して出力要求を行い、入力バッファに画像データを書き込んでもらう。その後、制御部１５から指示された選択条件をもとに２つの入力バッファ２４１−１，２４１−２に格納された画像データから画素値を順次選択して出力バッファ２４２に書き出して後段のモジュールに返す。
【００４６】
以上、各種の処理モジュールについて通常の処理動作の概要を説明した。これら各処理モジュールには、これ以外に、それまでの処理を破棄して画像の先頭から処理をやり直すリセット（再度初期化）動作や、不要なデータの処理を省略するために処理を行わずに内部状態のみ変更するスキップ（読み飛ばし）動作などの機能が備わっていても良い。
【００４７】
例えば、図４のフィルタ処理部２３に対して後段からリセット指示が与えられると、フィルタ制御部２３３は、前段のモジュールに対して同様にリセット指示を行い、その後に内部に保持している処理ライン数カウンタを０にリセットするとともに、前段を呼び出して最初の１ライン目を入力バッファ２３１の２番目に書き込ませ、それを入力バッファ２３１の１番目にコピーする。このように動作することで、フィルタ処理部２３は制御部１５によって生成されたのと同じ状態に復帰することができる。
【００４８】
また、例えば図３の色変換処理部２２に対して後段からＫライン分の処理をスキップするよう指示が与えられると、色変換制御部２２３は、前段のモジュールに対して同様にＫライン分のスキップ指示を行い、その後に内部に保持している処理ライン数カウンタにＫを加算する。
【００４９】
上記のリセット／スキップ機能は、要求される処理の組み合わせや、分岐モジュールに保持可能なバッファ部の容量などにより必要であったり不要であったりする。以下の説明では、各具体例によってその要／不要が異なるが、各モジュールはこのような機能を持っていることを前提として、特に注釈なしに説明を行うものとする。
【００５０】
以上、各種の処理モジュールについてその概要を説明したが、本発明は、画像記憶部１１から画像を読み出す画像入力モジュールなども含めて、これら複数の処理モジュールを複雑に組み合わせてパイプライン処理を行う際に必要となる分岐処理に関するものである。
【００５１】
以下では、本発明の特徴とする部分である分岐処理部２５の構成およびその動作について、具体例をもって詳細に説明する。この分岐処理部２５は、図１の分岐処理手段１３２に対応している。
【００５２】
［第１具体例］
図６は、本発明の第１具体例に係る分岐処理部２５の内部構成の一例を示すブロック図である。図６から明らかなように、分岐処理部２５は、前段のモジュールからの入力状態を管理する入力管理部２５１と、複数の分岐先それぞれについて分岐先情報を管理する分岐情報管理部２５２と、入力した画像データを一時格納するバッファ部２５３と、これら各部を制御する分岐制御部２５４とを有する構成となっている。
【００５３】
図１において、制御部１５は処理格納部１３から分岐処理手段１３２を読み出して、前段モジュールへの接続情報とバッファ部２５３の容量の上限値を引数としてメモリ部１２上に分岐処理部２５のモジュールを生成する。すると、分岐処理部２５では、分岐制御部２５４の制御に従って各部が次のように動作する。
【００５４】
入力管理部２５１は、前段への接続情報と読み出したライン数のカウンタを保持して、ライン数カウンタを０に初期化する。分岐情報管理部２５２は、分岐先を判別するためのインデックスとその分岐先が読み出したライン数のカウンタの組を複数保持できる分岐先管理リストを生成し、この時点ではまだ分岐先が無いので空の状態に初期化する。バッファ部２５３は、容量の上限値から計算されるバッファリング可能なライン数のバッファを生成／管理するためにラインバッファのポインタのリストを生成し、この時点ではまだ何も入力されていないので空の状態に初期化する。
【００５５】
続いて制御部１５が、分岐処理部２５に対して新たに分岐先を生成するよう指示すると、分岐制御部２５４は、分岐情報管理部２５２を制御して分岐先毎に異なる値を取るインデックスと０に初期化されたライン数カウンタの組を生成させて前記分岐先管理リストに登録させ、前記インデックスを制御部１５に返す。この動作は、必要な分岐の数だけ繰り返される。
【００５６】
このようにして分岐処理部２５が生成され、さらにモジュールが接続されて処理全体が例えば図１２に示すパイプラインとして構築されたものとして、以下、図７のフローチャートに従って後段のモジュールから呼び出されたときの分岐処理部２５の動作について詳細に説明する。
【００５７】
ある分岐先から画像データの読み出し要求があると、分岐制御部２５４は分岐先のインデックスを取得して、その情報をもとに分岐情報管理部２５２の分岐先管理リストを探索して同一のインデックスを持つ分岐先情報を取得する（ステップＳ１１）。次いで、この取得した分岐先情報からライン数カウンタの値を読み出すことで、当該分岐先が次に必要とするライン情報を取得する（ステップＳ１２）。例えば、ライン数カウンタの値が初期値の０であった場合には1ライン目を、１０であった場合には１１ライン目をそれぞれ、当該分岐先が要求していることが分る。
【００５８】
次いで、分岐制御部３２４は、バッファ部２５３のラインバッファのリストを探索してステップＳ１２で判定した要求ラインが保持（バッファリング）されているか否かをチェックし（ステップＳ１３）、もし保持されていたらステップＳ１８に移行し、保持されていない場合には、入力管理部３２１から既に読み出したライン数のカウンタの値を取得する（ステップＳ１４）。
【００５９】
次いで、その取得した入力ライン数のカウンタの値から、要求ラインが既に読み出し済みか否かを判断し（ステップＳ１５）、既に読み出し済みならば、バッファ部２５３にも保持されていない状態なので、入力管理部２５１が保持している前段への接続情報をもとに前段のモジュールをリセットして入力ライン数のカウンタも０とし、画像の先頭ラインから読み出し直せるようにする（ステップＳ１６）。
【００６０】
まだ読み出していないならば、この時点で（入力済みライン＜要求ライン）となっているはずなので、入力管理部２５１経由で前段のモジュールを呼び出し、要求ラインに到達するまで空読みするか、または前段側に接続されているモジュールがスキップ機能を持っている場合には不要なラインをスキップして、要求ラインを読み出してバッファ部２５３に格納する（ステップＳ１７）。この時点で要求ラインはバッファ部２５３に格納されているので、呼出し分岐先から渡された出力バッファにそのラインデータをコピーして返す（ステップＳ１８）。これで当該分岐先からの読み出し要求は処理されたことになるので、一連の処理を終了する。
【００６１】
なお、ここでは説明を簡単にするために詳細を省略したが、ステップＳ１７の処理において、要求ラインを読み出してバッファ部２５３に格納する際に、もしバッファ部２５３が既に予め指定された容量の上限に達しており新たなラインを格納できない場合には、既に格納されているラインをバッファ部２５３から削除することとなる。その際に、どのラインを削除するかについては幾つかの方式が考えられる。例えば、バッファ部２５３への格納順の古いデータから順に削除する方式や、格納されているもののうちから画像の先頭に近くに位置するデータから順に削除する方式などを用いることができる。
【００６２】
上述したように、処理モジュールの一つとして分岐処理部２５を含むパイプライン処理において、当該分岐処理部２５に対して、入力状態を管理する入力管理部２５１、分岐先の情報を管理する分岐情報管理部２５２、容量の上限を指定することが可能なバッファ部２５３および分岐処理全体を制御する分岐制御部２５４を持たせたことにより、分岐処理部２５は画像全面分のバッファを持つこと無しに任意の数の分岐処理に対応することができるため、少ないメモリ消費で分岐処理を行うことができる。
【００６３】
なお、後段に繋がる処理モジュールの種類によっては全く前段のリセットを行わなくても分岐処理を制御することが可能となるので、画像全面をバッファリングした場合とほぼ同じ処理速度で分岐を行うことが可能となる。その例を、第２具体例として次に説明する。
【００６４】
［第２具体例］
本具体例では、図１２に示すように、複数の処理モジュールが接続されてなるパイプラインを例に採って、前段側に接続されたモジュールがリセット／スキップ機能を持たなくても限定された容量のバッファのみで分岐処理を行う場合について説明する。
【００６５】
図５において説明したように、出力選択処理部２４は２つの前段のモジュールから画像を１ライン単位で取得し、その入力を特定の条件で選択して１ラインを出力するものであり、図１２のパイプライン処理では、その前段モジュールとして３×３フィルタ処理を行うフィルタ処理部１（１１５−１）と、７×７フィルタ処理を行うフィルタ処理部２（１１５−２）とが接続されている。
【００６６】
図４のフィルタ処理部２３での動作説明のように、３×３フィルタ処理の場合には出力の１ライン先までを読み込んでおくことが必要であり、また同様に、７×７フィルタ処理の場合には出力の３ライン先までを読み込んでおくことが必要である。
【００６７】
つまり、出力選択処理部２４が１ライン毎に処理を行い、さらにフィルタ処理部１（１１５−１）を先に呼び出すとすると、分岐処理部２５はフィルタ処理部２（１１５−２）が先読みする３ライン分とフィルタ処理部１（１１５−１）が先読みする１ライン分との重複部分である３ライン分の範囲でのみ出力要求を受けることになる。そのため、分岐処理部２５中のバッファ部２５３は、３ライン分をバッファリングするだけで前段に対してリセットを行う必要が無くなり、画像全面をバッファリングするのと同じ速度で分岐処理を行うことができる。
【００６８】
また、例えば図８に示したように、フィルタ処理の代わりに異なる色変換処理を行ってその結果を選択するような処理手順が必要なパイプライン処理の場合を考える。図８中、図１２と同等部分には同一符号を付して示している。
【００６９】
図３において説明したように、色変換処理部２２の動作は出力ラインと同じ入力ラインを必要とするだけなので、色変換処理部１（１１３−１）と色変換処理部２（１１３−２）が要求するラインは全く同じラインとなる。そのため、分岐処理部２５（図８では、分岐処理部１１４）は１ライン分をバッファリングするだけで前段に対してリセットを行う必要が無くなり、画像全面をバッファリングするのと同じ速度で分岐処理を行うことができる。
【００７０】
以下に、本具体例における分岐処理部２５での分岐処理の動作について、図９に示すフローチャートに従って説明する。
【００７１】
ある分岐先から画像データの読み出し要求があると、分岐制御部２５４は分岐先のインデックスを取得して、その情報をもとに分岐情報管理部２５２の分岐先管理リストを探索して同一のインデックスを持つ分岐先情報を取得する（ステップＳ２１）。次いで、この取得した分岐先情報からライン数カウンタの値を読み出すことで、当該分岐先が次に必要とするライン情報を取得する（ステップＳ２２）。例えば、ライン数カウンタの値が初期値の０であった場合には1ライン目を、１０であった場合には１１ライン目をそれぞれ、当該分岐先が要求していることが分る。
【００７２】
次いで、分岐制御部２５４は、バッファ部２５３のラインバッファのリストを探索してステップＳ２２で判定した要求ラインが保持（バッファリング）されている否かをチェックし（ステップＳ２３）、もし保持されていたらステップＳ２６に移行し、保持されていない場合には、入力管理部２５１から既に読み出したライン数のカウンタの値を取得する（ステップＳ２４）。
【００７３】
次いで、この取得した入力ライン数カウンタの値をもとに、入力管理部２５１経由で前段のモジュールを呼び出し、要求ラインに到達するまで空読みするか、または前段側に接続されているモジュールがスキップ機能を持っている場合には不要なラインをスキップして、要求ラインを読み出してバッファ部２５３に格納する（ステップＳ２５）。
【００７４】
なお、後段にフィルタ処理や色変換処理を接続した場合では空読み処理やスキップ処理は不要で、入力管理部２５１経由で前段から順に次のラインを読み出すだけで良い。また、ステップＳ２５の処理での最初の時点では、（入力済みライン＜要求ライン）となっているはずなのでリセットが不要なのは前述した通りである。
【００７５】
ステップＳ２５の処理終了時点で、要求ラインはバッファ部２５３に格納されているので、呼出し分岐先から渡された出力バッファにそのラインデータをコピーして返す（ステップＳ２６）。これで当該分岐先からの読み出し要求は処理されたことになるので、一連の処理を終了する。
【００７６】
なお、ここでは説明を簡単にするために詳細を省略したが、ステップＳ２５の処理において、要求ラインを読み出してバッファ部２５３に格納する際に、もしバッファ部２５３が既に上限容量に達しており新たなラインを格納できない場合のバッファの削除方法については、第１具体例の場合と同じ方法を用いる。
【００７７】
上述したように、分岐処理部２５の後段に繋がる処理モジュールによっては、必要十分なバッファを持つことでリセットやスキップを行わずに処理が可能であり、これは処理モジュールを接続する制御部１５によって判定することが可能であるので、制御部１５が分岐モジュールを生成する際に、後段に接続する処理モジュールの種類を分析して分岐処理部２５のバッファ容量の上限値を指示することにより実現することができる。
【００７８】
ここでは、少ないメモリで画像全面をバッファリングするのと同じ処理速度を得る方法を示したが、例えば組み込み系システムのように処理速度よりもメモリの制約が厳しい場合には、分岐処理部２５で全くバッファを持たずに分岐処理を行うことが可能である。その例を、第３具体例として次に説明する。
【００７９】
［第３具体例］
図１０は、本発明の第３具体例に係る分岐処理部２５Ａの内部構成を示すブロック図であり、図中、図６と同等部分には同一符号を付して示している。図１０から明らかなように、本具体例に係る分岐処理部２５Ａは、第１，第２具体例に係る分岐処理部２５の構成に対してバッファ部２５３が無くなった構成となっている。そのため、分岐処理部２５Ａの生成時には、図１において、制御部１５は処理格納部１３から分岐処理手段１３２を読み出して、前段モジュールへの接続情報だけを引数としてメモリ部１２上に分岐処理部２５Ａのモジュールを生成する。
【００８０】
このときは、バッファ部が存在しないので、引数としてバッファ容量の上限値は不要となる。分岐処理部２５Ａの生成時の各部の動作は、バッファ部が無いためにそれに関する処理が無いことを除いて、第１具体例で説明したものと同じであるので説明を省略する。
【００８１】
なお、本具体例においては、少なくとも分岐処理部２５Ａの前段側に繋がっている入力を含む処理モジュールの全てはリセット機能を持っているものとする。以下に、本具体例に係る分岐処理部２５Ａでの分岐処理動作について、図１１に示すフローチャートに従って説明する。
【００８２】
ある分岐先から画像データの読み出し要求があると、分岐制御部２５４は分岐先のインデックスを取得して、その情報をもとに分岐情報管理部２５２の分岐先管理リストを探索して同一のインデックスを持つ分岐先情報を取得する（ステップＳ３１）。次いで、この取得した分岐先情報からライン数カウンタの値を読み出すことで、当該分岐先が次に必要とするライン情報を取得する（ステップＳ３２）。例えば、ライン数カウンタの値が初期値の０であった場合には1ライン目を、１０であった場合には１１ライン目をそれぞれ、当該分岐先が要求していることが分る。
【００８３】
次いで、分岐制御部２５４は、入力管理部２５１から既に読み出したライン数のカウンタの値を取得する（ステップＳ３３）。そして、この取得した入力ライン数のカウンタの値から、要求ラインが既に読み出し済みか否かを判断し（ステップＳ３４）、まだ読み出していないならば、ステップＳ３６に移行する。既に読み出し済みならば、入力管理部２５１が保持している前段への接続情報をもとに前段のモジュールをリセットして入力ライン数カウンタも０とし、画像の先頭ラインから読み出し直せるようにする（ステップＳ３５）。
【００８４】
ステップＳ３５の処理終了時点で（入力済みライン＜要求ライン）となっているはずなので、入力管理部２５１経由で前段のモジュールを呼び出し、要求ラインに到達するまで空読みするか、または前段側に接続されているモジュールがスキップ機能を持っている場合には不要なラインをスキップして、要求ラインを呼出し分岐先から渡された出力バッファ上に読み出して返す（ステップＳ３６）。これで当該分岐先からの読み出し要求は処理されたことになるので、一連の処理を終了する。
【００８５】
本具体例では、分岐処理部２５Ａからバッファを削除することができるが、分岐先から同じラインを要求されるとリセット機能を使って前段を画像の先頭まで巻き戻して再処理することになるので、処理コストは他の具体例と比べて高いものとなる。ステップＳ３６の処理においても述べたように、少なくとも分岐処理部２５Ａよりも前段側の処理モジュールがスキップ機能を持っていれば、その処理コストの増加を最小限に抑えることが出来る。
【００８６】
【発明の効果】
以上説明したように、本発明によれば、複数の要素機能的な画像処理モジュールを用意して、その組み合わせにより多種多様な画像処理機能を提供する際に必要となる画像の分岐処理について、これまで必要不可欠であった画像全面分のバッファを、全く持たない場合を含む任意の容量に削減することが可能となり、さらに後段に繋がる処理モジュールによっては全面をバッファリングするのと同じ速度で分岐処理することが可能となる。
【図面の簡単な説明】
【図１】  本発明の一実施形態に係る画像処理装置の構成の一例を示すブロック図である。
【図２】  拡縮処理部の内部構成の一例を示すブロック図である。
【図３】  色変換処理部の内部構成の一例を示すブロック図である。
【図４】  フィルタ処理部の内部構成の一例を示すブロック図である。
【図５】  出力選択処理部の内部構成の一例を示すブロック図である。
【図６】  本発明の第１具体例に係る分岐処理部の内部構成の一例を示すブロック図である。
【図７】  第１具体例に係る分岐処理部の動作説明に供するフローチャートである。
【図８】  本発明の第２具体例に係る処理モジュールの組み合わせ例を示すブロック図である。
【図９】  第２具体例に係る処理モジュールの組み合わせでの動作説明に供するフローチャートである。
【図１０】  本発明の第３具体例に係る分岐処理部の内部構成の一例を示すブロック図である。
【図１１】  第３具体例に係る分岐処理部の動作説明に供するフローチャートである。
【図１２】  分岐を使った処理モジュールの組み合わせの一例を示すブロック図である。
【図１３】  分岐を使わないで図１２と同じ処理を実現する場合の一例を示すブロック図である。
【符号の説明】
１１…画像記憶部、１２…メモリ部、１３…処理格納部、１４…画像出力部、１５…制御部、２１…拡縮処理部、２２…色変換処理部、２３…フィルタ処理部、２４…出力選択処理部、２５，２５Ａ…分岐処理部、１３１…画像入力手段、１３２…分岐処理手段、１３３…拡縮処理手段、１３４…色変換処理手段、１３５…フィルタ処理手段、１３６…出力選択処理手段
【図１】
0004051974.tif 000002
【図２】
0004051974.tif 000003
【図３】
0004051974.tif 000004
【図４】
0004051974.tif 000005
【図５】
0004051974.tif 000006
【図６】
0004051974.tif 000007
【図７】
0004051974.tif 000008
【図８】
0004051974.tif 000009
【図９】
0004051974.tif 000010
【図１０】
0004051974.tif 000011
【図１１】
0004051974.tif 000012
【図１２】
0004051974.tif 000013
【図１３】
0004051974.tif 000014