(57)【要約】【課題】多段接続されるモジュールを用いて画像処理を行う場合に、例外捕獲処理によって、少なくとも各モジュールの接続処理において発生する例外を捕獲して処理の安定を実現しつつ、簡便な実装形態にて、資源の効率的利用及び処理速度の向上を図ることのできる、画像処理装置を提供する。【解決手段】制御部１１が、それぞれ所定の画像処理を行う複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行うにあたり、少なくともモジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行するようプログラムされており、モジュールの各々について、その終了処理の可否に関する終了可否設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、終了可否設定を参照し、特定されたモジュールについて、その終了処理が可能でないときには、終了処理の実行を留保する。【選択図】　　　　図１
2004038844.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが所定の画像処理を行う複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手段と、
少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手段と、
前記モジュールの各々について、その終了処理の可否に関する終了可否設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記終了可否設定を参照し、前記特定されたモジュールについて、その終了処理が可能でないときには、終了処理の実行を留保する終了制御手段と、
を含むことを特徴とする画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記終了制御手段は、終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせることを特徴とする画像処理装置。
【請求項３】
それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手段と、
少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手段と、
前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する終了制御手段と、
を含むことを特徴とする画像処理装置。
【請求項４】
請求項３に記載の画像処理装置において、
前記終了制御手段は、終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせることを特徴とする画像処理装置。
【請求項５】
それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる工程と、
少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する工程と、
前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する工程と、
を含むことを特徴とする画像処理方法。
【請求項６】
請求項５に記載の画像処理方法において、
前記終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせる工程、
をさらに含むことを特徴とする画像処理方法。
【請求項７】
コンピュータに、
それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手順と、
少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手順と、
前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する手順と、
を実行させることを特徴とする画像処理プログラム。
【請求項８】
請求項７に記載の画像処理プログラムにおいて、コンピュータに、さらに、
前記終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせる手順、
を実行させることを特徴とする画像処理プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複合機等において画像処理機能を実装するために用いられる画像処理装置に関する。
【０００２】
【従来の技術】
複合機を含め、画像データを処理する多くの機器において、その内部で行われる画像処理が高度になってきている。例えばＤＴＰ（デスクトップパブリッシング）システム等においても、拡大・縮小、回転、アフィン変換、色変換、フィルタ、画像合成等の各種の画像処理が行われている。これらの処理を行うにあたり、処理の対象となる画像の性状や処理の内容等が固定的である場合は、専用に設計したハードウエアを用いて処理を行うこともある。しかし、処理の対象となる画像の性状が必ずしも同じでなく、処理の内容も頻繁に変更される場合、これらの変更に応じて柔軟に対応できるような構成が要求される。
【０００３】
従来、これらの要求を満たすための構成として、特開平５−２６０３７３号公報（特許文献１）や特開平７−１０５０２０号公報（特許文献２）に開示されているものがある。これらは、プログラマブルなモジュールをいわゆるパイプライン状に接続したり、ＤＡＧ（Ｄｉｒｅｃｔｅｄ　Ａｃｙｃｌｉｃ　Ｇｒａｐｈ；有向非循環グラフ）の形態に接続して、所望の処理を行うためのソフトウエアを形成する技術が開示されている。
【０００４】
また、特開平５−２６０３７３号公報（特許文献３）には、複数のプログラマブル演算処理部での演算処理内容と、これらプログラマブル演算処理部の接続形態とを、外部から設定可能にすることで、高速かつ高度な演算処理を可能にするデジタル映像信号処理装置が開示されている。これら特許文献１から３に開示の技術は、モジュールを連接して所望の機能を実現させる構成の一般的な背景技術を示したものである。
【０００５】
なお、特許文献２に開示された技術は、例えばＵＮＩＸ（登録商標）等のオペレーティングシステムで用いられている、単一プロセッサによる多重処理パイプラインのシミュレーション方法を画像処理等の分野に応用したものである。この技術においては、各モジュールは、それより前段側に接続されているモジュールと、後段側に接続されているモジュールとに対してそれぞれ要求を送信可能な状態に（いわば、双方向にリンクされている状態に）なっている。
【０００６】
具体的に、特許文献２に開示された技術によると、所望の機能を達成するために必要となる複数のモジュールが選択され、これらが互いに接続される。ここで接続というのは、要求を送信できるようにすることであり、例えば、接続の相手先となるモジュールのオブジェクトに対するポインタを取得することが接続に相当する。なお、ここ及び以下の説明では、ポインタだけでなく、広義にモジュールに処理を要求したり、パラメータを伝達したりする場合に必要となる、いわば宛先を特定する情報を含むものを「接続情報」と呼ぶこととする。
【０００７】
各モジュールの接続が終了すると、これら互いに接続されたモジュール群を利用するアプリケーション・プログラムから、最後段のモジュールに対して、ヘッダの取得が要求される。各モジュールは、この要求を接続順を遡って、最前段のモジュール（通常画像データファイルを読み込む画像入力モジュール）に順次伝達する。そして最前段のモジュールが、処理対象となる画像の性状を表す情報（例えばヘッダ情報）を次の段のモジュールに出力する。
【０００８】
すると、各モジュールが自分自身で変更する部分の情報を書き換えて後段のモジュールに出力するという処理を行う。例えば画像データを１／２サイズに縮小する処理を行うモジュールでは、入力画像のサイズが１０００×１０００画素であると、５００×５００画素への縮小処理が行われることとなる。そこで、このモジュールでは前段のモジュールから入力されたヘッダ情報のうち、サイズを表す情報を１０００×１０００から５００×５００にするといった変更を施して、後段のモジュールに出力する。このような処理を順次繰り返して、最後段のモジュールはこれらモジュール群（画像処理パイプライン）によって出力される画像のヘッダ情報をアプリケーション・プログラムに出力する。
【０００９】
アプリケーション・プログラムは、こうして得られたヘッダ情報などをもとにデータの処理の要求を行う。データの処理の要求もヘッダの処理に対するのと同様に、最後段のモジュールに対して一定量のデータ出力を要求し、最後段のモジュールから、順次最前段のモジュールまで必要な画像データの入力の要求を出力する。最前段のモジュールでは、必要な画像データがファイルから読み込まれて後段に出力される。そして、接続されたモジュール群によって順次、画像処理が施されて、最終的に最後段の処理モジュールから、処理後の画像データが出力される。
【００１０】
この処理が画像データの最後まで、または必要な部分に対して行われると、処理パイプラインは不要となるので、アプリケーション・プログラムは、最後段のモジュールに対して終了処理を要求する。この終了要求も既に述べたヘッダ情報に対する処理と同様に、モジュールの接続順を遡って最前段のモジュールに達し、最前段のモジュールが処理に用いたリソースを解放するとともに自身を解放して後段に制御を渡していき、それぞれ制御が渡されたモジュールがリソースや自身を解放する処理を行ってさらに後段に制御を渡すという処理を繰り返し、最後段のモジュールのリソース／自身の解放が終了した段階で、全体的な処理が完結する。
【００１１】
このような処理を行うことで、特許文献２に開示された技術では、１回の処理単位を画像の１ラインに制限するなど、必要なメモリ上での記憶領域サイズを低減でき、特にページングによる仮想記憶処理を行うオペレーティングシステムでのスワップアウトが最小限に抑えられて、処理の高速化にも貢献する。
【００１２】
さらに回転処理等、１ラインの処理結果を得るにも画像全体のデータの入力を必要とするような処理を実行するモジュールがパイプラインに含まれているときにも、メモリの記憶領域サイズを低減可能となる技術が、特開平８−２７２９８１号公報（特許文献４）に開示されている。
【００１３】
特許文献４に開示された技術では、ページバッファ（画像全体を保持するに十分なサイズのバッファ）を用いるか否か等、所定の条件を満足するモジュール（注目モジュール）がパイプラインに含まれている場合、その注目モジュールへの画像データのバッファリングが完了したときに、注目モジュールより前段側に接続されているモジュールに対して終了処理を実行し、その資源を開放させる。この特許文献４に開示された技術は、パイプラインとして互いに接続されたモジュールのうち、そのパイプライン全体としての処理が完了していないときでも、パイプラインに含まれるモジュールに対する終了処理が行われるという背景技術を開示したものである。
【００１４】
【発明が解決しようとする課題】
このように複数のモジュールを相互に接続して、一連の画像処理を行わせ、ある機能を実現するというソフトウエアを一般に広く用いられているＣ＋＋（シー・プラス・プラス）やＪａｖａ（登録商標）といったオブジェクト指向言語によって記述する場合、例えば図７に模式的に示すように、ｔｒｙ／ｃａｔｃｈ（トライ／キャッチ）といった構文を用いて例外発生に備えた記述となるのが一般的である。
【００１５】
また、各モジュール間の接続を行わせる接続関数をインプリメントしておき、この接続関数が、モジュールの生成（メモリへのロード等のインスタンス化処理等）を行い、生成したモジュールへの接続情報を前段のモジュールへ通知するように設計する。
【００１６】
従ってトライ（ｔｒｙ）の構造内を実行するプロセスにおいては、次のような処理が行われることとなる。まず、最前段のモジュールがロード（準備）される（Ｓｔｅｐ１）。既に述べたように、最前段のモジュールは、一般的には画像データをファイルから読み込むモジュールＡである。
【００１７】
次に二段目のモジュールＢの接続関数をコールする。この接続関数が正常に動作すると、モジュールＢが生成されて、モジュールＢがモジュールＡに接続される（Ｓｔｅｐ２）。これらの処理が例外なく実行されると、トライの構造内でもモジュールＡ，Ｂへの接続情報が取得可能となる。
【００１８】
次に三段目のモジュールＣの接続関数をコールする（Ｓｔｅｐ３）。ここで、モジュールＣの接続関数で例外が発生すると、例えばモジュールＣが生成され、モジュールＢへの接続は行われるものの、接続関数内で例外が投げられる（ｔｈｒｏｗされる）場合がある。この段階では接続関数の処理が完了していないので、トライの構造内ではモジュールＣへの接続情報を取得できない。
【００１９】
ここで特許文献４に開示されている技術を利用する場合、例えばモジュールＣが９０度回転を行うモジュールである場合など、その前段のモジュールに対する終了処理を要求すべきものとして設定されたものであると、モジュールＣの接続関数で例外が発生するか否かに関わらず、モジュールＣへの画像データのバッファが完了した段階でモジュールＢに対する終了処理が行われてしまうので、トライの構造内でモジュールＣへの接続情報を取得できない状態で、キャッチ（ｃａｔｃｈ）の構造（例外処理）に処理が移される。通常、例外が発生すると処理の続行は困難になるため、各モジュールに対して終了処理を実行させ、各モジュールで確保した資源（メモリ領域等）を開放させる手続が採られるはずである。
【００２０】
ところが、このキャッチの処理では、モジュールＢに対しては既に終了処理が完了しているので、終了処理の要求はできない。また、モジュールＣへの接続情報は得られていないので終了処理の要求ができない。すなわち、モジュールＣについては生成も完了しており、当該モジュールＣでの資源確保は行われた状態であるのに、モジュールＣに対しての終了処理の要求を行うことができなくなってしまう。
【００２１】
さらに、例えば図８に示すように、複数のプリミティブなモジュール、例えば多値化モジュール４１と、補間付き任意角回転モジュール４２と、２値化モジュール４３とを組み合わせて２値画像の補間処理付き任意角回転処理を行う複合的モジュールを生成する場合、このように要素機能的な、プリミティブモジュールを接続して複合的モジュールを生成、接続するサービス関数（「複合モジュール関数」と呼ぶ）を用いる場合に特許文献４に開示されている技術を適用すると、次のようになる。
【００２２】
すなわち、これら組み合わせられたプリミティブモジュールの中に、例えば上述の補間付き任意角回転モジュール４２のように、画像全体のバッファリング後、前段のモジュールに対する終了処理を実行するようなモジュール（注目モジュール）があると、接続関数において例外が発生したとしても、前段である多値化モジュール４１を含むモジュール群に対する終了処理が行われてしまう。
【００２３】
従って、注目モジュールへの接続中に例外が発生したときには、例外を捕獲したブロック内（上述のトライ構造内）においては補間付き任意角回転モジュール４２と２値化モジュール４３とに対する終了処理を行うことができないこととなり、これらのモジュールが確保した資源を開放させることができなくなる。
【００２４】
本発明は上記実情に鑑みて為されたもので、多段接続されるモジュールを用いて画像処理を行う場合に、例外捕獲処理によって、少なくとも各モジュールの接続処理において発生する例外を捕獲して処理の安定を実現しつつ、簡便な実装形態にて、資源の効率的利用及び処理速度の向上を図ることのできる、画像処理装置を提供することをその目的の一つとする。
【００２５】
【課題を解決するための手段】
上記従来例の問題点を解決するための本発明は、画像処理装置であって、それぞれが所定の画像処理を行う複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手段と、少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手段と、前記モジュールの各々について、その終了処理の可否に関する終了可否設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記終了可否設定を参照し、前記特定されたモジュールについて、その終了処理が可能でないときには、終了処理の実行を留保する終了制御手段と、を含むことを特徴としている。ここで前記終了制御手段は、終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせることとするのも好ましい。
【００２６】
すなわち、多段接続されるモジュールを用いて一連の画像処理を実行するにあたり、その実行中に一部のモジュールを終了処理するようにプログラムされているとき、ある条件の下でその終了処理を一時的に留保し、後続のモジュールにおいて例外が発生した場合に、当該例外を捕獲して、上記終了処理を留保したモジュールを起点に、全モジュールの終了処理を可能としている。
【００２７】
これにより、少なくとも一つのモジュールを、終了処理要求を受け付け可能な状態で維持でき、終了処理を円滑に行って、簡便な実装により資源の効率的利用及び処理速度の向上が図られる。また、各モジュールの接続を双方向に行うとともに、不用意に前段の終了処理が連鎖的に行われない様にするための機構を、接続関数および複合接続モジュール関数の入り口に設けることで、例外が発生した場合において、各モジュールの実装状態を変更することなく、簡便な実装により資源の効率的利用及び処理速度の向上が図られる。
【００２８】
また、本発明のある態様によれば、画像処理装置であって、それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手段と、少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手段と、前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する終了制御手段と、を含むこととした。ここで、前記終了制御手段は、終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせるものであってもよい。
【００２９】
また、本発明の別の態様によれば、画像処理方法であって、それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる工程と、少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する工程と、前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する工程と、を含むこととした。ここで、前記終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせる工程をさらに含むことも好ましい。
【００３０】
また、本発明のさらに別の態様によると、画像処理プログラムであって、それぞれが所定の画像処理を行うとともに、終了処理の要求を受けて、その前段及び後段側に接続されたモジュールに対して終了処理の要求を順次伝達する複数のモジュールを多段接続し、当該多段接続したモジュールによって一連の画像処理を行わせる手順と、少なくとも前記モジュールを接続する際の処理との関係において発生する例外を捕獲し、例外処理を実行する手順と、前記モジュールの各々について、その終了処理の実行可否に関する設定を管理し、終了処理の対象となるモジュールを特定する情報とともに、当該特定されたモジュールに対する終了処理の要求を受けて、前記管理されている設定を参照し、当該特定されたモジュールについて、その終了処理の実行が可能と設定されていないときには、終了処理の要求の出力を留保する手順と、をコンピュータに実行させることとした。ここでさらに、前記終了処理の実行が留保されたモジュールに対し、当該モジュールに対する終了処理が可能となったときには、当該モジュールに終了処理を行わせる手順、を実行させることとするのも好ましい。
【００３１】
【発明の実施の形態】
本発明の実施の形態について図面を参照しながら説明する。本実施の形態に係る画像処理装置は、例えば図１に示すような一般的なコンピュータを用いて実現される。具体的に、本実施の形態の画像処理装置は、図１に示すように、制御部１１と、記憶部１２と、操作部１３と、出力部１４とを含んで構成される。ここで記憶部１２は、制御部１１が各種処理を行うために必要な処理領域や各種の演算途中結果、処理パラメータなどを保持するワークメモリとして動作するＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ、以下、単に「メモリ」と呼ぶ）と、制御部１１によって実行される画像処理プログラムを格納したコンピュータ読取可能な記録媒体であるハードディスクやＣＤ−ＲＯＭ等と、処理対象となる画像データを格納する画像メモリとを含む。
【００３２】
制御部１１は、記憶部１２に格納されている画像処理プログラムを実行する。この画像処理の具体的内容については、後に詳しく述べる。操作部１３は、利用者から入力される操作の内容を制御部１１に伝達する。出力部１４は、制御部１１から入力される指示に従って、処理した結果等を外部の機器に出力し、又は図示しないディスプレイ等の表示部に出力する。
【００３３】
なお、ここでは画像処理装置として、コンピュータを用いてソフトウエア的に実現する場合を例として示すが、その一部又は全体が専用のハードウエアによって構成されてもよい。
【００３４】
記憶部１２に格納されている画像処理プログラムは、図２に示すように、接続処理部２１と、モジュール管理部２２と、終了処理部２３とを含む。接続処理部２１は、モジュール管理部２２にて管理されている画像処理用モジュール（組み合わせ可能な画像処理プログラム、以下単に「モジュール」と略称する）ごとに設けられた接続関数を保持しており、指示された接続関数を起動し、当該起動した接続関数に対応するモジュールを起動させ（生成処理）、モジュール間でのデータの受け渡しを可能にさせる（接続処理）。この接続関数の具体的内容については、後に詳しく述べる。
【００３５】
モジュール管理部２２は、複数のモジュールを管理している。これらモジュールの各々は予め定められた画像処理を実行する。このモジュールの具体的内容についても後に詳しく述べる。終了処理部２３は、起動された画像処理モジュールに対してメモリ空間の開放等を行わせる、いわゆる終了処理の要求を行う。本実施の形態において特徴的なことは、この終了処理部２３が、所定の条件下でのときに、終了処理の要求の出力を留保することである。この終了処理部２３の具体的動作についても、後に詳しく述べる。
【００３６】
［モジュール］
各モジュールは、その一般的な構造として、図３に示すように、入力バッファ３１と、画像処理要素３２とを含んで構成される。入力バッファ３１は、前段のモジュールから入力される画像データを保持する。実際の処理においては、入力バッファ３１の接続情報が前段のモジュールに渡され、前段のモジュールでは、その処理結果をこの入力バッファ３１に書き込むことになる。
【００３７】
画像処理要素３２は、従来のモジュールと同様の動作を行うものであり、入力バッファ３１に保持されている画像データに対して予め定められた処理を実行し、その結果を後段の画像処理要素から提供されるバッファ（後段のモジュールの入力バッファ３１）に格納する。なお、最後段の画像処理要素３２は、予め確保した出力バッファ（不図示）に対して処理の結果を格納する。
【００３８】
また、この画像処理要素３２は、前段に接続されているモジュールへの接続情報と、後段に接続されているモジュールへの接続情報とを保持しており、終了処理部２３から終了処理の要求を受け入れると、終了処理を実行する。ここで終了処理は、入力バッファ３１のメモリ領域を含め、確保している資源を解放するなどの処理をいう。
【００３９】
さらに、この画像処理要素３２は、終了処理部２３から終了処理の要求とともに、その要求を前後段に接続されたモジュールへ伝達するように指示されたときには、前段と後段とに接続されているモジュールのそれぞれに対して終了処理の要求を伝達する。この伝達は、終了処理部２３を介して行われる。なお、最前段や最後段のモジュールでは、それぞれ後段側及び前段側に接続されたモジュールに対して終了処理の要求を伝達することとなる。さらに画像処理要素３２は、前段側に接続されたモジュールから終了処理の要求を受け入れると、後段に接続されているモジュールに対して終了処理の要求を伝達し、自らも終了処理を実行する。同様に、後段側に接続されたモジュールから終了処理の要求を受け入れると、前段に接続されているモジュールに対して終了処理の要求を伝達し、自らも終了処理を実行する。これらの場合も、終了処理の要求の伝達は、終了処理部２３を介して行われる。
【００４０】
さらに各モジュールには、これらの処理以外に、それまでの処理を破棄して画像の先頭から処理をやり直すリセット動作や、不要なデータの処理を省略するために処理を行わずに内部状態のみ変更するスキップ動作などの処理を行う機能が備わっていてもよい。
【００４１】
［接続関数］
接続関数は、対応するモジュールを起動させる生成処理と、モジュール間でのデータの受け渡しを可能にさせる接続処理とを基本的に実行している。ここで生成処理では、モジュールをメモリに読み込み、処理に必要なパラメータを伝達する。また接続処理では、読み込んだモジュールへの接続情報を前段に接続されるべきモジュールへ伝達する処理を行う。また、接続関数は、正常に処理が終了したときには、接続関数をコールした関数（呼出元）に対して読み込んだモジュールへの接続情報を通知する。
【００４２】
具体的に制御部１１は、接続関数の処理として図４に示す処理を開始し、まず、終了処理部２３に対して、前段のモジュールの終了処理を留保するよう要求する（Ｓ１）。このように接続関数の入口で終了処理の留保を行い、前段のモジュールに対して終了処理の要求があっても、当該終了処理を留保させる。制御部１１は、接続関数に対応するモジュールを生成して、前段のモジュールへの接続情報と、処理パラメータとを通知する（Ｓ２）。このとき当該生成されたモジュールの入力バッファ３１には、前段のモジュールから画像データが格納される。またこのとき、前段のモジュールに対する終了処理を行うよう終了処理部２３に要求がされても、終了処理部２３は、その終了処理を留保するので、実際には終了処理は行われない。
【００４３】
次に制御部１１は、接続関数の処理が成功したか（生成・接続などの処理が成功しているか）否かを判断し（Ｓ３）、成功していれば（Ｙｅｓならば）、終了処理部２３に対して前段のモジュールの終了処理の留保を解除するよう要求する（Ｓ４）。後に説明するが、終了処理部２３は、このときまでに前段のモジュールに対する終了処理の要求を受けていれば、この留保の解除の要求を受けて、前段のモジュールに対して実際に終了処理を要求し、前段のモジュールの資源が解放されることとなる。そして制御部１１は、処理Ｓ２で生成したモジュールへの接続情報を呼出元に通知して（Ｓ５）、接続関数の処理を終了する。
【００４４】
一方、処理Ｓ３において、接続関数の処理が成功していなければ（Ｎｏならば）、制御部１１は、終了処理部２３に対してエラーが発生したことを伝達し（Ｓ６）、例外を投げて（ｔｈｒｏｗして）、処理を終了する。ここで投げられた例外は、呼出元で捕獲され、呼出元での例外処理が開始されることとなる。
【００４５】
なお、前段までの処理を終了させないようなモジュール、例えば画像全体をバッファする必要がないようなモジュールに対応する接続関数は、従来のものと同様の（処理Ｓ１の留保の要求や処理Ｓ４の留保の解除の処理を行わない）ものとしてもよい。
【００４６】
［終了処理部］
終了処理部２３は、図５に模式的に示すように、接続されている各モジュールごとに、その終了処理の可否を示す情報（終了可否情報）を保持している。初期化時には、この終了可否情報は、終了処理が可能である旨を表すものに設定されている。
【００４７】
そして終了処理部２３は、特定のモジュールについての終了処理の留保の要求を受けて、当該モジュールについての終了可否情報を終了処理が可能でない旨を表すものに設定する。また、終了処理部２３は、特定のモジュールについて、その終了処理の留保を解除する要求を受けて、当該モジュールについての終了可否情報を終了処理が可能である旨を表すものに設定する。
【００４８】
終了処理部２３は、さらに、特定のモジュールについて終了処理を行うべき要求を受けると、当該モジュールについての終了可否情報を参照し、それが終了可能である旨の設定となっていれば、当該モジュールに対して終了処理の要求を出力する。また、終了可能でない旨の設定となっていれば、当該モジュールに対して終了処理の要求があったことを記憶する。この場合、当該モジュールについての終了処理の留保が解除されてから、当該モジュールに対して終了処理の要求を出力することとなる。
【００４９】
なお、この終了処理部２３は、これらの処理のほかに、特定のモジュールおよびそれに接続された全てのモジュールを終了するべき要求を受けて、当該要求に応じた処理を実行するようにしてもよい。さらに、あるモジュールについて終了処理を留保するよう設定されている間に、そのモジュールへの終了処理が要求されなかった場合ににおいては、留保の解除時にそのモジュールの終了処理は要求しない。
【００５０】
［モジュールと接続関数との動作例］
ここで動作を分かりやすくするために、モジュールと接続関数とがどのように動作するかを簡単に説明する。なお以下の例に挙げるモジュールは、その前段に接続されたモジュールを終了させないモジュール（例えば拡大縮小の処理を行う拡縮処理モジュール）と、前段に接続されたモジュールを終了させてもよいモジュール（すなわち、画像全体の画像データをバッファする等、それより前段での処理結果に改めてアクセスする必要のないもの、例えば９０度回転処理を行う９０度回転処理モジュールのようなもの）と、があるので、これらを分けて説明する。
【００５１】
［前段を終了させないモジュール］
まず、拡大縮小の処理を行う拡縮処理モジュールなど、その前段に接続されたモジュールを終了させないモジュールである場合について説明する。図７に示したような関数（呼出元関数）から接続関数がコールされると、接続関数は、モジュール管理部２２から対応するモジュールを読出して生成し、呼出元関数から予め取得した縮拡の倍率と前段のモジュールへの接続情報とをモジュールに伝達する。また接続関数は、拡縮処理モジュールへの接続情報を前段のモジュールに対して通知する。
【００５２】
縮拡処理モジュールは、前段のモジュールへの接続情報を利用して、前段のモジュールに対し、入力される画像情報の取得要求を出して画像データのサイズやビット数などの情報を取得し、メモリ上に処理に必要なサイズの入力バッファ３１を生成する。
【００５３】
なお、縮拡処理モジュールが最後段のモジュールであれば、与えられた倍率の情報から出力画像データに関する情報を計算し、メモリ上に拡縮後の画像を格納するために必要となるバッファのサイズを計算し、そのサイズのバッファを出力バッファとして確保する。具体的に入力画像が１０００×１０００画素で、１画素当り８ビットの深さを有する画像であり、拡縮倍率が（０．６，１．０）（横方向に０．６倍、縦方向に１．０倍）であり、１回に出力される画像データの単位が１ラインである場合を想定すると、拡縮処理モジュールはメモリ上に１０００バイト分の入力バッファ３１と、１０００×０．６×１．０＝６００バイト分の出力バッファを生成することになる。
【００５４】
そして縮拡処理モジュールは、後段側のモジュールから（自己が最後段であれば外部から）画像データの出力処理の要求を受けて、前段のモジュールへ出力要求を伝達する。そして、前段のモジュールから１ライン分、すなわち１０００バイト分の画像データが入力バッファ３１に書き込まれ、制御が渡されると、縮拡処理モジュールの画像処理要素３２は、与えられた拡縮倍率に従って、後段のモジュールの入力バッファ（自己が最後段であれば出力バッファ）に、横方向に０．６倍した縮小画像データを書き込む。そして後段のモジュールがあれば、後段のモジュールへ処理を渡す。尚、縮小処理の詳細については、一般的な画像処理関係の書籍などに詳しいので、ここでは説明を省略する。このような処理を画像のライン数回（上の例では１０００回）繰り返すことで、所望の画像処理が多段接続された一連のモジュールにより実現される。
【００５５】
また、接続関数における接続等の処理の過程でエラーが発生すると、接続関数は例外を投げて、処理を終了する。そして呼出元では、この例外を捕獲して例外処理を開始し、縮拡モジュールの前段のモジュール（正常に生成された最後のモジュール）に対して終了処理を行うよう終了処理部２３に要求する。
【００５６】
終了処理部２３は、前段のモジュールについての終了可否情報を参照し、この場合は終了可否情報が初期化された状態（終了処理可能の状態）のままであるので、前段のモジュールに対して終了処理を要求し、また、当該前段のモジュールに対して前後段の双方に接続されたモジュールに対して順次終了処理を行うよう指示する。
【００５７】
すると、当該前段のモジュールを中心に、その前後段に接続されたモジュールに対して順次終了処理の要求が、終了処理部２３を介して出力され、相互に接続されたすべてのモジュールで、確保されていた資源が解放されるなどの処理が実行される。
【００５８】
［前段を終了させるモジュール］
次に、９０度回転処理モジュールを例として前段を終了させるべきモジュールについてモジュールと接続関数とがどのように動作するかを簡単に説明する。図７に示したような関数（呼出元関数）から接続関数がコールされると、接続関数は、まず、終了処理部２３に対して前段のモジュールへの終了処理を留保するよう要求する。終了処理部２３は、この要求を受けて、９０度回転処理モジュールの前段に接続されるモジュールについての終了可否情報を終了処理可能でない旨のものに設定する。
【００５９】
次に接続関数は、モジュール管理部２２から対応するモジュールを読出して生成し、呼出元関数から予め取得した前段のモジュールへの接続情報とをモジュールに伝達する。ここでは、９０度の回転処理が行われるだけなので、回転角度などのパラメータは伝達されないが、任意角回転処理であれば、回転角度などのパラメータがモジュールに伝達される。また、接続関数は、９０度回転処理モジュールへの接続情報を前段のモジュールに対して通知する。
【００６０】
９０度回転処理モジュールは、前段のモジュールへの接続情報を利用して、前段のモジュールに対し、入力される画像情報の取得要求を出して画像データのサイズやビット数などの情報を取得し、メモリ上に処理に必要なサイズの入力バッファ３１を生成する。
【００６１】
そして９０度回転処理処理モジュールは、後段側のモジュールから（自己が最後段であれば外部から）画像データの出力処理の要求を受けて、前段のモジュールへ出力要求を伝達する。すると前段のモジュールから画像全体の画像データが入力バッファ３１に書き込まれ、制御が渡される。この時点で、前段側のモジュールに終了処理を行わせるべく、終了処理部２３に、当該前段のモジュールに対して終了処理の要求を出力するよう指示がされる。終了処理部２３は、当該前段のモジュールについての終了可否情報を参照し、それが終了処理可能でない旨に設定されているので、終了処理の要求があったことを記憶し、終了処理の要求を出力せずに留保する。
【００６２】
接続関数は、自己の処理が支障なく完了したか否かを判断し、支障なく完了していれば、終了処理部２３に対して前段のモジュールについての終了可否情報を終了可能である旨に設定するよう要求し、自己の呼出元に９０度回転処理モジュールへの接続情報を伝達する。終了処理部２３は、前段のモジュールについての終了可否情報が終了可能である旨を示すものになったことを受けて、既に終了処理の要求が行われているので、前段のモジュールに対して終了処理を行うよう要求する。このとき、当該前段のモジュールに対し、さらに先行する（９０度回転処理モジュールからみて２段階以前の）各モジュールへと終了処理を伝達するよう指示する。
【００６３】
この伝達は、終了処理部２３自身を介して行われ、終了処理部２３は、当該先行する各モジュールについて、それぞれの終了可否情報を参照して、終了可能と設定されているものについては終了処理を要求し、終了可能でないと設定されているものについては終了処理の要求を行わないで留保する。これにより、９０度回転処理モジュールに先行するモジュールであって、かつ終了処理の留保が要求されているモジュールまでの各モジュールがその資源を解放して処理を完了することとなる。すなわち、この場合、終了処理が連鎖的に行われることになるが、連鎖の途中に終了処理の留保が設定されたモジュールが存在する場合には、そのモジュールとそれより前に接続されたモジュールの終了処理は実行されない。
【００６４】
そして、９０度回転処理モジュールの画像処理要素３２は、後段のモジュールの入力バッファ（自己が最後段であれば出力バッファ）に、９０度回転した画像データを書き込む。そして後段のモジュールがあれば、後段のモジュールへ処理を渡す。なお、画像データの回転処理の詳細については、一般的な画像処理関係の書籍などに詳しいので、ここでは説明を省略する。
【００６５】
また、接続関数における接続等の処理の過程でエラーが発生した場合、接続関数は例外を投げて、処理を終了する。そして呼出元では、この例外を捕獲して例外処理を開始する。この時点では、９０度回転処理モジュールの前段のモジュール（正常に生成された最後のモジュール）について終了処理が留保されているため、呼出元では、その接続情報を利用して当該前段のモジュールに対する終了可否情報を終了可能に設定するよう終了処理部２３に要求するとともに、当該前段のモジュールに対して終了処理を行うよう終了処理部２３に要求することができる。
【００６６】
終了処理部２３は、終了可否情報が終了可能に設定されたことを受けて、前段のモジュールに対して終了処理を要求し、また、当該前段のモジュールに対して、その前後段の双方に接続されたモジュールに対して順次終了処理を伝達するよう指示する。
【００６７】
すると、当該前段のモジュールを中心に、その前後段に接続されたモジュールに対して順次終了処理の要求が、終了処理部２３を介して出力され、相互に接続されたすべてのモジュールで、確保されていた資源が解放されるなどの処理が実行される。
【００６８】
なお、これら２つの例ではいずれも、モジュールが入力バッファ３１を生成し、処理結果を保持するバッファについては、後段のモジュールの入力バッファ３１を用いることとして説明したが、各モジュールが独自の出力バッファを確保し、処理結果をそれぞれの出力バッファに書き込んだ上で、後段のモジュールに出力するときには、当該出力バッファに書き込まれたデータを後段のモジュールの入力バッファに複写する等の処理を行ってもよい。
【００６９】
すなわち本実施の形態の画像処理装置によると、例えば画像入力モジュール（画像データをファイルから読出すモジュール）と、色変換処理を行うモジュールと、９０度回転処理モジュールと、縮拡モジュールとがこの順に接続され、全体として色調整を行って９０度回転し、縮小を行うという画像処理を行うべく、その処理のメインルーチン（呼出元）のトライ構造内でまず画像入力モジュールが起動される。さらに同じトライ構造内で上記の各モジュールの接続関数が順次コールされる。
【００７０】
ここで９０度回転処理モジュールの接続関数では、その入り口部分で、前段のモジュールである色変換処理モジュールへの終了処理を留保するよう終了処理部２３に要求する。これにより色変換処理モジュールの入力バッファに画像データが読み込まれ、ここでＬＵＴ（ルック・アップ・テーブル）や色変換マトリクスを用いた色変換処理を行い、これを９０度回転処理モジュールの入力バッファに格納したところで、色変換処理モジュールに対する終了処理の要求が終了処理部２３に出力されても、終了処理部２３は実際には終了処理の要求を行わない。
【００７１】
そして９０度回転処理モジュールの接続関数において例外が発生し、その例外が投げられると、呼出元のキャッチ構造内に処理が移り、ここで例外処理が行われる。この例外処理では、終了処理部２３に対して色変換処理モジュールについての終了処理の留保を解除させて、色変換処理モジュールに対して終了処理の要求を出力させる。このとき、色変換処理モジュールからその前後段に接続された各モジュールへ終了処理の要求を伝達させる。これによりすべてのモジュールに対して終了処理の要求が伝達でき、各モジュールで確保された資源が解放される。
【００７２】
なお、本実施の形態の画像処理装置は、複合的モジュールの生成においても同様の動作を行うので、以下、２値画像の補間付き任意角回転処理の動作の例について説明する。図８に示したように、２値画像の補間付き任意角回転処理では、多値化モジュール４１、任意角回転モジュール４２、および、２値化モジュール４３というプリミティブな画像処理を行うモジュールを順に、生成して接続することとなる。
【００７３】
この場合、制御部１１は、まず例外を監視しながら多値化モジュール４１を生成する。そして、任意角回転モジュール４２の接続関数の処理を開始し、多値化モジュール４１の前段のモジュール（つまり、この複合的モジュールの前段のモジュール）に対する終了処理を留保するよう設定し、任意角回転モジュール４２を生成して、多値化モジュール４１に接続する。そして任意角回転モジュール４２がその入力バッファに前段のモジュールである多値化モジュール４１から画像全体のデータのバッファリングを受けた後、当該多値化モジュール４１の終了処理要求を発行する。しかし制御部１１は終了処理部２３の動作として、多値化モジュール４１に対しては終了処理の要求を出力するが、その前段のモジュール、すなわち、複合的モジュールの前段のモジュールは終了処理が留保されているため、終了処理の要求は行われない。
【００７４】
各モジュールの生成および接続が成功したときは、前段のモジュールについての終了処理の留保が解除される。一方、生成または接続に失敗した場合は、前段のモジュールに対して不正状態をセットするとともに終了処理の留保を解除し、処理を終える。この場合、前段のモジュールの終了処理は行われないので、呼出元の例外処理で終了処理を行うこととなる。
【００７５】
具体的に、この場合の制御部１１の動作を図示すると、次の図６に示すようになる。すなわち、ある関数あるいはモジュールなどから接続要求を受けると、まず、終了処理部の処理として、前段のモジュールの終了処理を留保するように設定し（Ｓ１１）、処理の途中で前段のモジュールの終了処理が指示されても実際には終了させないようにする。そして、前段モジュールを基に多値化モジュール４１を生成する（Ｓ１２）。ここで、多値化モジュール４１の生成が問題なく終了しか否かを判断し（Ｓ１３）、問題なく終了したならば（Ｙｅｓならば）、前段のモジュールを基に任意角回転モジュール４２を生成する（Ｓ１４）。このとき、多値化モジュールは多値化モジュール４１から画像全体のデータを読込んでバッファリングし、その後、前段のモジュールに対して終了処理を行うよう、終了処理部２３に指示する。
【００７６】
しかし、処理Ｓ１１において前段のモジュールの終了処理が留保されているため、処理Ｓ１２で作成した多値化モジュール４１の終了処理だけが行われ、前段のモジュールの終了処理は実際には行われない。
【００７７】
制御部１１は、さらに任意角回転モジュール４２の生成が問題なく終了したか否かを判断し（Ｓ１５）、問題なく終了したならば（Ｙｅｓならば）、前段のモジュールを基に２値化モジュール４３を生成する（Ｓ１６）。ここで、制御部１１は２値化モジュール４３の生成が問題なく終了したか否かを判断し（Ｓ１７）、問題なく終了したならば（Ｙｅｓならば）、終了処理部２３に前段のモジュールの終了処理の留保を解除するよう指示する（Ｓ１８）。
【００７８】
このときには、任意角転処理モジュール４２から既に前段のモジュールに対する終了処理の指示を受けているため、終了処理部２３は前段のモジュールに対して終了処理を要求する。そして終了処理部２３は当該前段のモジュールに先行して接続された各処理モジュールの終了処理も行う。こうして、複合的モジュールの前段に接続されたモジュールを含め、それより前方に接続された全てのモジュールの終了処理が行われる。ただし、途中に終了処理の留保が設定されたモジュールが存在する場合には、そのモジュールとそれより前方に接続されたモジュールの終了処理は実行されない。
【００７９】
制御部１１は、処理Ｓ１８に続いて、作成した複合的モジュールの接続情報を呼出元に返して（Ｓ１９）、処理を終了する。なお、処理Ｓ１３、Ｓ１５、Ｓ１７において、モジュールの生成が問題なく終了しなかったときには（Ｎｏのときには）、終了処理部２３に対して、エラーが発生したことを伝達する（Ｓ２０）。このとき、エラー状態であることが記録され、前段の終了処理を行うことなく、複合的モジュールの接続処理が終了される。
【００８０】
呼出元では、この接続処理が正常に終了した場合には生成された複合的モジュールへの接続情報を受け取り、その後の処理を行う。また、例外が捕獲された場合（エラーが発生した場合）には、複合的モジュールの前段に接続されたモジュールに対して終了処理を要求する。すると、当該モジュールの前後段の各モジュールに連鎖的に終了処理の要求が出力され、すべてのモジュールについて終了処理が行われることとなる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る画像処理装置の一例を表す構成ブロック図である。
【図２】本発明の実施の形態に係る画像処理プログラムの一例を表す機能ブロック図である。
【図３】モジュールの構造の一例を表す機能ブロック図である。
【図４】接続関数の処理の一例を表すフローチャート図である。
【図５】終了可否情報の一例を表す模式図である。
【図６】複合モジュール関数の一例を表すフローチャート図である。
【図７】呼出元のプログラムの一記述例を表す説明図である。
【図８】複合モジュールの一例を表す構成ブロック図である。
【符号の説明】
１１　制御部、１２　記憶部、１３　操作部、１４　出力部、２１　接続処理部、２２　モジュール管理部、２３　終了処理部、３１　入力バッファ、３２　画像処理要素、４１　多値化モジュール、４２　補間付き任意角回転モジュール、４３　２値化モジュール。
【図１】
2004038844.tif 000003
【図２】
2004038844.tif 000004
【図３】
2004038844.tif 000005
【図４】
2004038844.tif 000006
【図５】
2004038844.tif 000007
【図６】
2004038844.tif 000008
【図７】
2004038844.tif 000009
【図８】
2004038844.tif 000010