(57)【要約】【課題】  画像処理モジュールの処理順序を変えられるように構成すると、変倍（拡大、縮小）モジュールや処理単位の制約のあるモジュールなどを、周辺画素を用いる画像処理モジュールより前で使うのか後で使うのか等によって、付加するべき周辺画素の数が異なってしまうので好ましい周辺画素量が得られなかった【解決手段】  各処理モジュールに対応する入力量演算処理と出力量演算処理を定義しておき、処理順（処理順の逆順）で入力量演算処理や出力量演算処理を実施することで好ましい周辺画素量を取得する。【選択図】  図５
2014048906.tif 000002
【特許請求の範囲】
【請求項１】
複数の画像処理モジュールを備える並列処理部と、
当該複数の画像処理モジュールの処理順の逆順に基づいて、前記複数の画像処理モジュールの画像処理で必要とする周辺画素量を取得する取得手段と、
前記取得手段で取得した周辺画素量に基づいて前記並列処理部に入力画像を供給する入力手段とを有することを特徴とする画像処理装置。
【請求項２】
前記複数の画像処理モジュールに供給するデータについて、前記複数の画像処理モジュールで処理させる処理順を保持する保持手段をさらに有することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記保持手段は、前記画像処理モジュール毎に必要とする周辺画素量を取得するアルゴリズムを保持し、前記取得手段は、前記処理順の逆順の画像処理モジュールに対応するアルゴリズムを順番に実施することで前記周辺画素量を取得することを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記保持手段は、前記画像処理モジュール毎に入力画像サイズから出力画像サイズを取得するアルゴリズムを保持し、前記取得手段は、前記処理順の画像処理モジュールに対応するアルゴリズムを順番に実施することで出力画像のサイズを取得することを特徴とする請求項２に記載の画像処理装置。
【請求項５】
前記画像処理装置を複数の処理モードで動作させるように制御する制御手段をさらに有し、前記保持手段は前記処理モード毎に前記複数の画像処理モジュールの処理順を保持することを特徴とする請求項２乃至４のいずれか１項に記載の画像処理装置。
【請求項６】
前記保持手段は、前記画像処理装置の処理モード毎に、前記並列処理部への入力画像のサイズ、または、前記並列処理部からの出力画像のサイズを保持していることを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記周辺画素量は、画像の処理対象の画像の上端に付加する画素数、処理対象の画像の下端に付加する画素数、処理対象の画像の左端に付加する画素数、処理対象の画像の右端に付加する画素数、付加した画素を含む画像幅、付加した画素を含む画像高さ、の少なくとも１つを含むことを特徴とする請求項１乃至６のいずれか１項に記載の画像処理装置。
【請求項８】
前記複数の画像処理モジュールは、入力画像を拡大処理する拡大処理モジュールを含むことを特徴とする請求項１乃至７のいずれか１項に記載の画像処理装置。
【請求項９】
前記複数の画像処理モジュールは、入力画像を縮小処理する縮小処理モジュールを含むことを特徴とする請求項１乃至８のいずれか１項に記載の画像処理装置。
【請求項１０】
前記複数の画像処理モジュールは、複数の入力画素を参照して１つの出力画素を出力する処理を実施ことを特徴とする請求項１乃至９のいずれか１項に記載の画像処理装置。
【請求項１１】
前記複数の画像処理モジュールは、Ｎ×Ｍ画素のフィルタ処理を実施するフィルタ処理モジュールを含むことを特徴とする請求項１乃至１０のいずれか１項に記載の画像処理装置。
【請求項１２】
前記複数の画像処理モジュールは、Ｋ×Ｌ画素のタイル処理を実施するタイル処理モジュールを含むことを特徴とする請求項１乃至１１のいずれか１項に記載の画像処理装置。
【請求項１３】
前記複数の画像処理モジュールは、エッジ検出を実施することを特徴とする請求項１乃至１２のいずれか１項に記載の画像処理装置。
【請求項１４】
前記複数の画像処理モジュールは、所定の画素値の画素を追加する余白追加処理モジュールを含むことを特徴とする請求項１乃至１３のいずれか１項に記載の画像処理装置。
【請求項１５】
前記複数の画像処理モジュールは、切り出し処理を実施する切り出し処理モジュールを含むことを特徴とする請求項１乃至１４のいずれか１項に記載の画像処理装置。
【請求項１６】
前記入力手段は、前記並列処理部へ供給するためのアドレス領域を拡張することで、周辺画素を付加した入力画像を前記並列処理部へ供給することを特徴とする請求項１乃至１５のいずれか１項に記載の画像処理装置。
【請求項１７】
前記入力手段は、前記並列処理部へ供給するためにアドレス領域を複数回読み出すことで、周辺画素を付加した入力画像を前記並列処理部へ供給することを特徴とする請求項１乃至１５のいずれか１項に記載の画像処理装置。
【請求項１８】
前記入力手段は、所定の画素値の画素を周辺画素として付加した入力画像を前記並列処理部へ供給することを特徴とする請求項１乃至１５のいずれか１項に記載の画像処理装置。
【請求項１９】
前記並列処理部は、前記複数の画像処理モジュールを前記処理順に従って、論理的に接続するインターコネクトを備えることを特徴とする請求項１乃至１８のいずれか１項に記載の画像処理装置。
【請求項２０】
前記インターコネクトはリングバスであることを特徴とする請求項１９に記載の画像処理装置。
【請求項２１】
前記インターコネクトはクロスバースイッチであることを特徴とする請求項２０に記載の画像処理装置。
【請求項２２】
複数の画像処理モジュールを備える並列処理部と、
入力画像のサイズに関する情報を保持する保持手段と、
当該複数の画像処理モジュールの処理順に基づいて、前記サイズの入力画像を前記複数の画像処理モジュールにより処理した場合の出力画像のサイズに関する情報を取得する取得手段と、
前記取得手段で取得した出力画像のサイズに関する情報に基づいて前記並列処理部によって処理した出力画像を出力する出力手段とを有することを特徴とする画像処理装置。
【請求項２３】
複数の画像処理モジュールを備える並列処理部と、当該複数の画像処理モジュールに入力画像を供給する入力手段と、を備える画像処理装置による画像処理方法であって、
前記複数の画像処理モジュールの処理順の逆順に基づいて、前記複数の画像処理モジュールの画像処理で必要とする周辺画素量を取得する取得工程と、
前記取得工程で取得した周辺画素量に基づいて前記入力手段を設定する設定工程と、
前記設定工程で設定された入力手段により供給される入力画像を、前記複数の画像処理モジュールによって処理する処理工程とを有することを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、およびプログラムに関する。
【背景技術】
【０００２】
画像を処理する際に、出力対象の位置の画素（注目画素）の画素値を算出するために、注目画素とその周辺の複数の画素の画素値が必要になる画像処理がある。たとえば、３×３のメディアンフィルタ処理では注目画素（ここでは、中央の１画素）に対して上下左右それぞれ１個以上の周辺画素（ここでは、周辺の８画素）の画素値が必要となる。ただし画像端を注目画素として、周辺画素が必要となる画像処理を行う際は、ダミーの画素を周辺画素として必要な量だけ入力画像に付加するなどした上でフィルタ処理をしないと好ましい出力値は得られない。
【０００３】
特許文献１ではフィルタ処理を組み合わせた場合の縦方向及び横方向の周辺画素の必要量を画像処理モジュールごとに加算し、入力画像に付加するべき周辺画素の量を求めている。
【０００４】
一方、特許文献２は処理回路間の接続をリング型のバス（リングバス）で接続する方法が開示されている。この方法によれば、複数の処理回路によってパイプライン処理をする際に、各処理回路の処理順番を入れ替えることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−３５４１６８号公報
【特許文献２】特開平７−３２５８００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１の技術を特許文献２の技術にそのまま適用することは困難である。詳細には、入力画像に付加するべき周辺画素量は、特許文献１の手法で画像処理モジュールごとに必要となる周辺画素の数を取得し加算していくだけでは効率的に求めることは難しい。なぜなら、特許文献２のようなリングバスを用いて画像処理モジュールの処理順序を変えられるように構成すると、変倍（拡大、縮小）モジュールや処理単位の制約のあるモジュールなどを、周辺画素を用いる画像処理モジュールより前で使うのか後で使うのか等によって、付加するべき周辺画素の数が異なってしまうためである。
【０００７】
そこで、本発明は特許文献２のように周辺画素を用いて処理をする画像処理モジュールを含む複数の画像処理モジュールの処理順番を変えられるような構成について、より効率良く周辺画素を付加できるような技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を達成する本発明に係る情報処理装置は、複数の画像処理モジュールと、当該複数の画像処理モジュールの処理順の逆順に基づいて、前記複数の画像処理モジュールの画像処理で必要とする周辺画素量を取得する取得手段と、前記取得手段で取得した周辺画素量に基づいて前記複数の画像処理モジュールに入力画像を供給する入力手段とを有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、画像処理モジュールの処理順を変えられるように構成について、周辺画素を必要とする画像処理のために、入力画像に対して効率良く周辺画素を付加することができる。
【図面の簡単な説明】
【００１０】
【図１】画像処理装置の概略構成を示すブロック図である。
【図２】画像処理部の概略構成を示すブロック図である。
【図３】周辺画素量を含む入力画像のサイズを算出する処理を示すフローチャートである。
【図４】複数の画像処理モジュールに関する処理順を示す模式図である。
【図５】入力量演算処理を示すフローチャートである。
【図６】出力量演算処理を示すフローチャートである。
【図７】縮小モジュールに対応する入力量演算処理を示すフローチャートである。
【図８】３×３フィルタ処理モジュールに対応する入力量演算処理を示すフローチャートである。
【図９】縮小モジュールに対応する出力量算出処理を示すフローチャートである。
【図１０】３×３フィルタ処理モジュールに対応する出力量演算処理を示すフローチャートである。
【図１１】入力制限がある縮小モジュールに対応する出力量演算処理を示すフローチャートである。
【図１２】周辺画素量を含む入力画像のサイズを算出する処理を示すフローチャートである。
【図１３】（ａ）従来技術で求めた周辺画素量を示す模式図、（ｂ）適切な周辺画素量を示す模式図、（ｃ）着目画素と周辺画素を示す模式図である。
【図１４】（ａ）リングバスを備える並列処理部の概略構成を示すブロック図、（ｂ）リングバスで用いるパケットのフォーマットを示す概略図である。
【図１５】リングバスを用いる場合の画像処理モジュールの構成を示すブロック図である。
【図１６】画像処理装置で実施する処理の概略を示すフローチャートである。
【図１７】（ａ）ページ単位の入力画像に周辺画素を付加する様子を示す模式図、（ｂ）バンド単位の入力画像に周辺画素を付加する様子を示す模式図である。
【図１８】（ａ）処理モード毎に、各処理モジュールの処理順と、入・出力バンド高さ（周辺画素含まない）とを含む処理モード情報示す模式図、（ｂ）処理モジュール毎に、対応する演算プログラムを示す表、（ｃ）演算プログラムに含まれる内容を示す模式図である。
【発明を実施するための形態】
【００１１】
まず、前述の特許文献１の技術を特許文献２の技術にそのまま適用することが困難であることについて説明を補足する。
【００１２】
例えば、複数の画像処理モジュールとして、画像処理モジュールＡ、画像処理モジュールＢ、画像処理モジュールＣがあるとする。図１３（Ｃ）に示す様に、画像処理モジュールＡの周辺画素の数（以降の説明では周辺画素量と称す）は右端部に１画素であり、画像処理モジュールＢの周辺画素量は上下左右端部に２画素ずつである。画像処理モジュールＣは拡大処理（単に入力画像を２倍に拡大するとする）で周辺画素量は０であるとする（不図示）。そして、それらの画像処理モジュールをＡ→Ｃ→Ｂという順で画像処理を行わせるとすると特許文献１の様に周辺画素量を求める。すると、画像処理モジュールＡと画像処理モジュールＢの周辺画素の必要分を足し合わせ、メモリから読み出した元画像１３００の上端部に２画素、下端部に２画素、左端部に２画素、右端部に３画素のダミー画素１３０１を付加することになる（図１３の（ａ）参照）。
【００１３】
しかし、実際に必要となる周辺画素量は異なる。画像処理モジュールＢのために周辺画素として上下左右端部に２画素ずつ付加すると、画像処理モジュールＣの拡大処理によって周辺画素も拡大されてしまう。従って、画像処理モジュールＣの拡大処理を考慮すると画像処理モジュールＣの出力として２画素必要であれば、拡大率の逆数をかけることにより画像処理モジュールＣに入力される時点で周辺画素量は１画素であることが好ましい。
【００１４】
さらに、Ａで必要となる周辺画素量は右端部に１画素なので、画像処理モジュールＡに入力されるべき周辺画素量は上端部に１画素、下端部に１画素、左端部に１画素、右端部に２画素となる（図１３の（ｂ）参照）。このように変倍（拡大、縮小）モジュールが周辺画素を必要とする画像モジュールに対してどの順番で実行されるかを考慮する必要がある。
【００１５】
また、画像処理モジュールの中にはＫ×Ｌ画素のブロック単位（タイル単位）で処理を行うタイル処理モジュールがあり、そのようなモジュールは入力画像サイズの画像高さはＬの倍数、画像幅はＫの倍数である必要がある。例えばブロック処理サイズを２×２画素とすると、画像高さや画像幅が偶数でなければならない。
【００１６】
例えば、上述の画像処理モジュールＡ〜Ｃにおいて、画像モジュールＣがタイル処理（エッジ検出処理など、周辺画素を必要しない領域処理）も実施するモジュールであり入力画像サイズが偶数でなければならない制約があるものとする。この際、入力画像幅が９０の画像を入力しＡ→Ｃ→Ｂと処理を行わせるために、先に示したように終端モジュールから処理順とは逆順に辿って周辺画像量を求めていくことで入力画像幅は９３（左端必要周辺画像量１＋入力画像サイズ９０＋右端必要周辺画像量２）画素と求まる。しかし、これでは画像処理モジュールＣに入力される左右の必要な周辺画像を含む入力画像サイズの幅は９１画素になるためこれは画像処理モジュールＣの制約に違反してしまう。
【００１７】
＜＜第１実施形態＞＞
まず、図１を参照して、本発明の一実施形態である第１実施形態に係る画像処理装置１０４の構成を説明する。画像処理装置１０４は画像処理部１００、メモリ１０１、入出力デバイス１０２とＣＰＵ（中央制御部）１０３を備える。ＣＰＵ１０３はメモリに保持されているプログラムに基づいて、後述のフローチャートを実現する処理を実施し、画像処理部１００を初期化したり、画像処理部１００に種々の処理を実行させるための設定をしたり、画像処理部１００へ処理対象の画像データを供給したりする。また、ＣＰＵ１０３は、画像処理装置を複数の処理モード（プリント、スキャン、コピー、メール、ＦＡＸ、ダイレクトプリント）のいずれかで動作するように制御する。ここで、ダイレクトプリントとは着脱可能なメモリカードの画像をパソコンなどの制御を用いずにプリントアウトすることを示す。入出力デバイス１０２は、画像処理装置１０４の外部とのデータやコマンドの送受を行う。例えば、外部のスキャナでスキャンしたスキャンイメージを入出力デバイス１０２が受信してメモリ１０１に格納させる、スキャンイメージについて画像処理部１００が画像処理を施した後で、入出力デバイス１０２が外部の出力装置（プリンタ、ディスプレイ、プロジェクタ）などに送信する。なお、各構成間のデータ転送は不図示のＤＭＡＣ（ダイレクトメモリアクセスコントローラ）で行ってもよい。
【００１８】
次に図２を参照して、本実施形態に係る画像処理部１００の概略構成について説明する。
【００１９】
画像処理部１００は、入力モジュール２００、画像処理モジュールＡ＿２０１、画像処理モジュールＢ＿２０２、画像処理モジュールＣ＿２０３、画像処理モジュールＤ＿２０４、並列処理部２０５、出力モジュール２０６を備える。
【００２０】
入力モジュール２００はＣＰＵ１０３によって設定された読み込み開始アドレス、入力画像高さ、入力画像幅及び１ピクセル当たりのデータ単位を元にメモリ１０１から画像データを入力データとして、並列処理部２０５に転送する。
【００２１】
並列処理部２０５へ入力するデータはページ単位であっても、あるライン数でバンド分割したバンド単位あっても良い（並列処理部２０５に入力する、ページ単位のデータ、バンド単位のデータなどに周辺画素を付加する点についての詳細は後述する。）。
【００２２】
並列処理部２０５の有する各画像処理モジュール（以降、単に処理モジュールと称す）は、任意の順序で論理的に接続され、接続された順番でデータを処理することができる。また、各処理モジュール２０１〜２０４は並列に動作することができ、パイプライン処理を実現する。
【００２３】
処理モジュールＡ＿２０１は３×３（以降、「３Ｘ３」の様に表記する）のフィルタ処理を行う。処理モジュールＡ＿２０１が画像処理を行う際に必要となる周辺画素量は上下左右にそれぞれ１画素である。つまり、処理モジュールＡ＿２０１が画像処理を行う際には少なくとも、縦方向に２画素、そして横方向に２画素を付加しなければ好ましい画像処理を行わせることができない。
【００２４】
処理モジュールＢ＿２０２は５Ｘ５のフィルタ処理を行うモジュールであり、処理モジュールＢ＿２０２が画像処理を行う際に必要となる周辺画素量は上下左右にそれぞれ２画素である。つまり、処理モジュールＢ＿２０２が画像処理を行う際は少なくとも縦方向に４画素、そして横方向に４画素を付加しなければ好ましい画像処理を行わせることができない。
【００２５】
処理モジュールＣ＿２０３は２画素単位でエッジ検出処理を行い、処理モジュールＣ＿２０３が画像処理を行う際に周辺画素は不要である。ただし、処理モジュールＣに対する入力画像サイズには制約があり、入力画像の高さ及び入力画像の幅が偶数個の画素数でなければならないものとする。
【００２６】
処理モジュールＤ＿２０４は設定に応じて変倍処理を行うモジュールであり、画像処理モジュールＤ＿２０４が画像処理を行う際に周辺画素は不要である。
【００２７】
並列処理部２０５では、処理モジュールＡ〜Ｄを任意の順で論理的に接続して画像データを順に処理する。詳細は後述するが、本実施形態ではリングバスによって各モジュールが順序入れ替え可能に接続されている。
【００２８】
出力モジュール２０６は設定された書き込み開始アドレス、出力画像高さ、出力画像幅及び１ピクセル当たりのデータ単位（ビット数）に基づいて外部メモリに出力データを転送する。
【００２９】
次に、図１６のフローチャートを参照して、画像処理装置１０４の全体的な処理の概略を説明する。
【００３０】
処理待ちの状態（電源ＯＦＦや省電力状態でない状態）にある画像処理装置１０４のＣＰＵ１０３は、ユーザの指示、通信可能な外部装置（コンピュータや情報端末）からの画像処理依頼などを受けて、ステップＳ１６０１で次に実施する画像処理モードを決定する。
【００３１】
そして、ステップＳ１６０２においてＣＰＵ１０３は、ステップＳ１６０１で決定した画像処理モードを実現するための、画像処理モジュールの処理順と、各画像処理モジュールに設定するパラメータとをメモリ１０１の処理モード情報（詳細は図１８（ａ）を用いて後述する）から取得する。なお、この際に処理モード情報から、周辺画素を含まない、入力画像または出力画像のサイズを示す情報（図１８のＩｎｐｕｔ  Ｈｅｉｇｈｔ，Ｏｕｔｐｕｔ  Ｈｅｉｇｈｔ）を取得する。
【００３２】
ステップＳ１６０３ではＣＰＵ１０３は、画像処理モジュールの処理順とパラメータとに基づいて、各画像処理モジュールの要件を満たす周辺画素量を取得する（詳細は図３を用いて後述する）する。
【００３３】
ステップＳ１６０４ではＣＰＵ１０３は、入力モジュール２００、出力モジュール２０６を含め、画像処理モードに沿った処理が実施できるように画像処理部１００を設定（レジスタ設定など）する。
【００３４】
ステップＳ１６０５では画像処理部１００が、複数のモジュール（画像処理モジュール、入力モジュール、出力モジュール）を動作させて画像処理モードに沿った処理を実現する。
【００３５】
ステップＳ１６０６でＣＰＵは、画像処理部１００から次の画像処理モードに沿った処理を開始できる通知を受けると、次に処理する画像処理の有無を判定する。次の画像処理が無ければ処理を終了し、有ればステップＳ１６０１に戻って同様の処理を繰り返す。
【００３６】
（入力モジュール２００、出力モジュール２０６の設定算出）
次に、特定の接続順において各処理モジュール２０１〜２０４の要件を満たすような入力画像（並列処理部２０５への入力画像）のサイズを、ＣＰＵ１０３が算出する処理に関して、図３のフローチャートを用いて説明する。なお、以降の説明では各処理モジュールへ入力する画像を中間入力画像の様に称して、算出しようとする並列処理部２０５への入力画像と区別する。この算出処理にて求まった入力画像サイズまたは出力画像サイズを利用してＣＰＵ１０３が、入力モジュール２００と出力モジュール２０６を設定する。なお、本実施形態では入力画像サイズ（周辺画素を含まない）を予めメモリ１０１に保持しているものとする（詳細は図１８を用いて後述する）。
【００３７】
ここで、中間出力画像に含まれる周辺画素量から中間入力画像に含まれる周辺画素量を算出するための入力量演算、または、中間入力画像に含まれる周辺画素量から中間出力画像に含まれる周辺画素量を算出する出力量演算処理、はモジュールごとに定義されプログラムとしてメモリ１０１に保持している（詳細は図１８を用いて後述する）。
【００３８】
図３のフローチャートでは、ステップＳ３０１〜Ｓ３１３おいて、各処理モジュールについて論理的な接続順（以降、単に処理順として説明する）の逆順で着目し、着目したモジュールに対応する入力量演算処理を実施して周辺画素量を逐次的に求めていく。
【００３９】
ステップＳ３１３以降では、仮の入力画像サイズに各処理モジュールの要件を満たす周辺画素量加え、処理順に出力量演算処理を実施して処理モジュールの要件を満たすか確認する。なお、入力量演算処理や出力量演算処理はソフトウェアおよびハードウェアのどちらで実現しても良いが、以降の説明ではソフトウェアで実現する例について説明する。
【００４０】
まず、ステップＳ３０１でＣＰＵ１０３は、変数ＩＮ＿ＷＩＤＴＨを０で初期化する。さらに、ステップＳ３０２ではＣＰＵ１０３は、変数、ＩＮ＿ＨＥＩＧＨＴを０で初期化する。
【００４１】
ステップＳ３０３でＣＰＵ１０３は各モジュールの設定パラメータを取得する。この設定パラメータは、例えば、画像処理の内容（度合い）を決定する値であり、変倍処理においては変倍モジュールの変倍率を求める際等に必要となる。
【００４２】
ステップＳ３０４ではＣＰＵ１０３はモジュールの処理順をメモリ１０１から取得し、その情報を元にステップＳ３０５にて処理順テーブル４０１を生成しメモリ１０１に保存する。各モジュールには固有のＩＤ（０以外の値）が割り振られており、そのＩＤを処理順に沿って処理順テーブル４０１に格納する。図４に並列処理部２０５の各モジュールの処理順がＢ→Ｃ→Ｄ→Ａだった場合の模式図を示す。なお、画像処理部に複数のモードを設定し、各モードにおける処理順をテーブルとして予めメモリ１０１に保持させておけばステップＳ３０４，Ｓ３０５は省略してもよい。
【００４３】
ステップＳ３０６〜Ｓ３１２で、ＣＰＵ１０３は各変数に０を格納して初期化する。詳細には、上部周辺画素量であるＩＮＩＴ＿ＴＯＰ＿ＲＥＦ、下部周辺画素量であるＩＮＩＴ＿ＢＯＴＴＯＭ＿ＲＥＦ、左部周辺画素量であるＩＮＩＴ＿ＬＥＦＴ＿ＲＥＦ、右部周辺画素量であるＩＮＩＴ＿ＲＩＧＨＴ＿ＲＥＦに０を格納する。これらは、処理順で最後の処理モジュールから出力される画像の周辺画像量が０であることに相当する。
【００４４】
ステップＳ３１０ではＡＰＵ１０３は変数ＩＮＩＴ＿ＷＩＤＴＨに０を格納し、ステップＳ３１１では変数ＩＮＩＴ＿ＨＥＩＧＨＴに０を格納して初期化する。
【００４５】
ステップＳ３１２ではＣＰＵ１０３は処理順テーブル４０１の参照開始位置を指定するＳＴＡＲＴ＿Ｌに−１を格納する。
【００４６】
ステップＳ３１３ではＣＰＵ１０３は、ステップＳ３０５で作成した処理順テーブルを用いて、入力量演算処理（詳細は図５を用いて後述する）を実行し、入力モジュール２００にメモリ１０１の保持する画像を転送する際に付加する周辺画素量を算出する。
【００４７】
算出された上部周辺画素量はＩＮ＿ＴＯＰ＿ＲＥＦに格納する。同様に下部周辺画素量はＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦに、左部周辺画素量はＩＮ＿ＬＥＦＴ＿ＲＥＦに、右部周辺画素量はＩＮ＿ＲＩＧＨＴ＿ＲＥＦに格納する。
【００４８】
ステップＳ３１４ではＣＰＵ１０３は、周辺画素を含まない入力画像幅（メモリ１０１から取得）と、ＩＮ＿ＬＥＦＴ＿ＲＥＦと、ＩＮ＿ＲＩＧＨＴ＿ＲＥＦと、を加算した結果をＳＥＴ＿ＩＮ＿ＷＩＤＴＨに格納する。
【００４９】
ステップＳ３１５ではＣＰＵ１０３は、周辺画素を含まない入力画像高さ（メモリ１０１から取得）と、ＩＮ＿ＴＯＰ＿ＲＥＦと、ＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦと、を加算した結果をＳＥＴ＿ＩＮ＿ＨＥＩＧＨＴに格納する。
【００５０】
ステップＳ３１８ではＣＰＵ１０３は、入力画像幅としてＳＥＴ＿ＩＮ＿ＷＩＤＴＨ、入力画像高さとしてＳＥＴ＿ＩＮ＿ＨＥＩＧＨＴを用いて出力量演算処理（詳細は図６を用いて後述する）を実行する。出力量演算処理では並行処理部２０５から出力される画像幅及び画像高さが求まり、出力画像の画像幅はＯＵＴ＿ＷＩＤＴＨに格納し、出力画像の画像高さはＯＵＴ＿ＨＥＩＧＨＴに格納する。
【００５１】
ステップＳ３１９ではＣＰＵ１０３は、ステップＳ３１８の実行結果がエラーであるかどうかを判断する。例えば、特定の処理モジュールについて下記１〜４のいずれか１つを満たしてしまっている場合などにエラーと判断する。
【００５２】
１．中間入力画像の幅・高さがＮまたはＭ（ＮとＭは自然数で、少なくとも一方は２以上）の倍数でなければならないという条件を満たさない中間入力画素数が算出されている場合。
２．中間入力画像の幅・高さが、特定モジュールの画像処理に必要な画素幅・高さに満たない場合。
３．中間出力画像の幅・高さの一方が０になる場合。
４．処理モジュールの内部バッファの容量を超える中間入力画像が算出されている場合。
【００５３】
なお、エラーであっても補正可能である場合は、補正可能か否かを示すフラグであるＲＥＶＩＳＥ＿ＦＬＡＧに１が設定される。逆に補正不可能である場合は０が設定される。一方、エラーでない場合は終了する。また、エラー時は処理順テーブル４０１における参照位置もＴＡＢＬＥ＿ＮＵＭＢＥＲに格納される。ここでＣＰＵ１０３は、エラーではあるが、着目した画像モジュールを少し遡って算出処理をし直せば補正可能である場合は、補正した入力画像幅をＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥに設定する。ＣＰＵ１０３は、入力画像高さも同様にエラーであり補正可能である場合、補正された（補正については図６を用いて後述する）入力画像高さをＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥに設定する。詳しくは後述する。
【００５４】
ステップＳ３１９でＣＰＵ１０３は、エラーであると判断した場合はステップＳ３２２に遷移し、エラーでないと判断した場合はステップＳ３２０に遷移する。
【００５５】
ステップＳ３２２でＣＰＵ１０３はＥＮＡＢＬＥ＿ＦＬＡＧが１（有効）であるか否かを判断する。１であればステップＳ３２４に遷移する。ＥＮＡＢＬＥ＿ＦＬＡＧが１でない場合は、ステップＳ３２３に遷移してエラーフラグを１（有効）に設定して処理を終了する。
【００５６】
ステップＳ３２４でＣＰＵ１０３はステップＳ３１８にてエラーになった際に示された補正された補正画像幅であるＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥをＩＮＩＴ＿ＷＩＤＴＨに格納する。このＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥは処理順においてひとつ前に位置するモジュールの出力画像幅となる（補正画像幅については図６を用いて後述する）。
【００５７】
ステップＳ３２５でＣＰＵ１０３はステップＳ３１８にてエラーになった際に示された補正された補正画像高さであるＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥをＩＮＩＴ＿ＨＥＩＧＨＴに格納する。このＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥは処理順においてひとつ前に位置するモジュールの出力画像高さとなる（補正画像高さについては図６を用いて後述する）。
【００５８】
ステップＳ３３０でＣＰＵ１０３はＳＴＡＲＴ＿ＬにステップＳ３１８で示された（詳細は図６の説明で後述する）ＴＡＢＬＥ＿ＮＵＭＢＥＲを格納する。
【００５９】
ステップＳ３３１でＣＰＵ１０３は周辺画素量・入力画像サイズ算出処理を再度実行する。ステップＳ３３２でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨをＳＥＴ＿ＩＮ＿ＷＩＤＴＨに格納し、ステップＳ３３３ではＩＮ＿ＨＥＩＧＨＴをＳＥＴ＿ＩＮ＿ＨＥＩＧＨＴに格納する。そして、再びステップＳ３１６〜ＳＳ３１８を実行する。
【００６０】
以上の処理によって、各処理モジュールの要件・制約を満たす尤もらしい周辺画素量を取得することができる。
【００６１】
（入力量演算処理）
次に、ステップＳ３１３またはステップＳ３３１における入力量演算処理に関して図５のフローチャートを用いて説明する。入力量演算処理では、処理順の逆順に沿って各画像モジュールで入力する周辺画素を求める入力量演算処理を順次行っていく。詳細には、複数の処理モジュールについて処理順の逆順に、各モジュールの要件を満たす周辺画素量を逐次的に求め、処理順で１番目の処理モジュールに入力される画像に付加されるべき周辺画素量を取得する。
【００６２】
なお、中間入力画像に付加されるべき周辺画素量を算出する処理を実現するプログラムは予め、処理モジュール毎にメモリ１０１に保持されている。
【００６３】
ステップＳ５０１ではＣＰＵ１０３は、メモリ１０１から処理順テーブル４０１を取得する。
【００６４】
ステップＳ５０２では処理順テーブル４０１の参照位置を示すＬに、ステップＳ３１２で設定されたｓｔａｒｔ＿Ｌを代入する。ｓｔａｒｔ＿Ｌに−１より大きい値を指定することで途中位置（図４の例でいう、Ｃ、Ｄ、Ａ）から計算を開始することが可能である。
【００６５】
ステップＳ５０３〜５０６では、ＣＰＵ１０３が入力量演算処理の対象の処理モジュールより、処理順が後の０個以上（図４の例で、対象が処理モジュールＡであれば０個、対象が処理モジュールＣであればＤとＡの２個）の処理モジュールで必要とされる周辺画素にステップＳ３０６〜Ｓ３０９で初期化した値を代入する。詳細には、上部周辺画素量の総量を示すＯＵＴ＿ＴＯＰ＿ＲＥＦにＩＮＩＴ＿ＴＯＰ＿ＲＥＦを格納し、ステップＳ５０４で下部周辺画素量の総量を示すＯＵＴ＿ＢＯＴＴＯＭ＿ＲＥＦにＩＮＩＴ＿ＢＯＴＴＯＭ＿ＲＥＦを格納し、ステップＳ５０５で左部周辺画素量の総量を示すＯＵＴ＿ＬＥＦＴ＿ＲＥＦにＩＮＩＴ＿ＬＥＦＴ＿ＲＥＦを格納し、ステップＳ５０６で右部周辺画素量の総量を示すＯＵＴ＿ＲＩＧＨＴ＿ＲＥＦにＩＮＩＴ＿ＲＩＧＨＴ＿ＲＥＦを格納する。
【００６６】
ステップＳ５０７，Ｓ５０８ではＣＰＵ１０３は周辺画素量の縦幅と横幅とを初期化する。詳細には、ステップＳ５０７ではステップＳ３０１において指定されたＩＮＩＴ＿ＷＩＤＴＨをＯＵＴ＿ＷＩＤＴＨに格納し、ステップＳ５０８ではステップＳ３０２において指定されたＩＮＩＴ＿ＨＥＩＧＨＴをＯＵＴ＿ＨＥＩＧＨＴに格納する。
【００６７】
ステップＳ５０９ではＣＰＵ１０３はｓｔａｒｔ＿Ｌが−１か否かを判断し、−１であった場合にはステップＳ５１０を実行し、−１でなかった場合はステップＳ５１１を実行する。
【００６８】
ステップＳ５１０ではＣＰＵ１０３は、処理順テーブル４０１の終端位置を検索し、Ｌにテーブル終端位置を代入する。図４の例では３（番目）が終端位置であるためＬ＝３とする。なお、以降の説明でＬ番目の処理モジュール（入力量演算処理の対象の処理モジュール）を着目モジュールと説明する。
【００６９】
ステップＳ５１１ではＣＰＵ１０３は、処理順テーブル４０１のＬ番目に位置する処理モジュールに対応する入力量演算処理を実行し、Ｌ番目の処理モジュールに入力する周辺画素量の横幅と縦幅等を取得する。詳細にはステップＳ５１１では、上下左右の周辺画素量（ＩＮ＿ＴＯＰ＿ＲＥＦ、ＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦ、ＩＮ＿ＬＥＦＴ＿ＲＥＦ、ＩＮ＿ＲＩＧＨＴ＿ＲＥＦ）と、必要な周辺画素量のサイズ（ＩＮ＿ＷＩＤＴＨ、ＩＮ＿ＨＥＩＧＨＴ）とを取得する。
【００７０】
ステップＳ５１２ではＣＰＵ１０３は、Ｌの値を１だけデクリメントし、着目する処理モジュールを、処理順で１つ前の処理モジュールに変更する。
【００７１】
ステップＳ５１３ではＣＰＵ１０３は、Ｌの値が０以上であればステップＳ５１４を実行し、０未満の場合は処理を終了する。
【００７２】
ステップＳ５１４〜Ｓ５１９では、ＣＰＵ１０３は、先ほどステップＳ５１１で求めた、中間入力画像に含まれるべき周辺画素量を、新たな着目モジュールの中間出力画像に含まれるべき周辺画素量として代入する。詳細には、ＯＵＴ＿ＴＯＰ＿ＲＥＦにＩＮ＿ＴＯＰ＿ＲＥＦを代入し、ＯＵＴ＿ＢＯＴＴＯＭ＿ＲＥＦにＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦを代入し、ＯＵＴ＿ＬＥＦＴ＿ＲＥＦにＩＮ＿ＬＥＦＴ＿ＲＥＦを代入し、ＯＵＴ＿ＲＩＧＨＴ＿ＲＥＦにＩＮ＿ＲＩＧＨＴ＿ＲＥＦを代入し、ＯＵＴ＿ＷＩＤＴＨにＩＮ＿ＷＩＤＴＨを代入し、ＯＵＴ＿ＨＥＩＧＨＴにＩＮ＿ＨＥＩＧＨＴを代入する。
【００７３】
図４の例では、着目モジュールをＡ→Ｄ→Ｃ→Ｂと変えながら、ステップＳ５１１〜Ｓ５１９までの処理を繰り返してステップＳ５１３でＬが０より小さくなるとフローを抜ける。以上の処理によって、処理順序で１番目の処理モジュールに入力される画像に付加されるべき周辺画素量を取得する
（出力量演算処理）
次に図６のフローチャートを用いて、ステップＳ３１８の出力量演算処理の詳細に関して説明する。出力量演算処理では処理順に沿って各処理モジュールに対応する出力量演算処理を実施する。
【００７４】
まず、ステップＳ６０１でＣＰＵ１０３は処理順テーブルの参照位置を管理するカウンタであるＬを０に初期化する。さらに、ステップＳ６０２でＣＰＵ１０３は処理順テーブルの終端位置を検索しＭＡＸ＿Ｌに終端ライン位置を代入する。ステップＳ６０３でＣＰＵ１０３はステップＳ３１４で設定した入力画像の幅であるＳＥＴ＿ＩＮ＿ＷＩＤＴＨをＩＮ＿ＷＩＤＴＨに代入する。ステップＳ６０４でＣＰＵ１０３はステップＳ３１５で設定した入力画像の高さであるＳＥＴ＿ＩＮ＿ＨＥＩＧＨＴをＩＮ＿ＨＥＩＧＨＴに代入する。
【００７５】
ステップＳ６０５でＣＰＵ１０３は処理順テーブルＬ番目のモジュールに対応する出力量演算処理を実行する。ステップＳ６０６ではステップＳ６０５の実行結果がエラーか否かを判断し、エラーの場合はステップＳ６１１を実行し、エラーでない場合はステップＳ６０７を実行する（なお、何をエラーとするかはＳ３１９の説明で上述したとおりである）。
【００７６】
ステップＳ６０７でＣＰＵ１０３はＬを１だけインクリメントする。ステップＳ６０８でＣＰＵ１０３はＭＡＸ＿ＬとＬを比較し「ＭＡＸ＿Ｌ＜Ｌ」の条件に当てはまれば処理を終了し、当てはまらなければステップＳ６１０を実行する。
【００７７】
ステップＳ６０９でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴにステップＳ６０５実行時の結果として得られる出力画像の幅であるＯＵＴ＿ＷＩＤＴＨを代入する。
【００７８】
ステップＳ６１０でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴにステップＳ６０５実行時の結果として得られる出力画像の高さであるＯＵＴ＿ＨＥＩＧＨＴを代入する。
【００７９】
ステップＳ６１１でＣＰＵ１０３はステップＳ６０５の処理がエラーだった場合に示される補正可能フラグが１である場合はステップＳ６１２を実行する。１でない場合はエラーとする。
【００８０】
ステップＳ６１２でＣＰＵ１０３はＲＥＶＩＳＥ＿ＦＬＡＧに１を代入する。ステップＳ６１３でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥにステップＳ６０５の処理がエラーでありさらに補正可能である場合に示される入力画像幅補正値を代入する。ステップＳ６１４でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥにステップＳ６０５の処理がエラーでありさらに補正可能である場合に示される入力画像高さ補正値を代入する。なお、ステップＳ６１３やＳ６１４で入力画像幅補正値や入力画像高さ補正値は、処理モジュール毎の演算プログラムに含まれている補正値演算プログラムによって求められる。
【００８１】
ステップＳ６１５でＣＰＵ１０３はＴＡＢＬＥ＿ＮＵＭＢＥＲにＬを代入する。
【００８２】
（処理モジュールのアルゴリズム毎の入力量演算処理の具体例）
次に処理モジュールのアルゴリズム毎の入力量演算処理の具体例に関して図７及び図８を用いて説明する。
【００８３】
処理モジュールごとに定義される入力量演算処理は、着目モジュールより処理順が後の処理モジュール（０個以上）が必要とする「周辺画素量（上・下・左・右・幅・高さ）」に基づいて、着目モジュールが必要とする「周辺画素量（上・下・左・右・幅・高さ）」を算出するものである。処理モジュールで実施される画像処理のアルゴリズムにより入力量演算処理のアルゴリズムは異なる。
【００８４】
縮小処理モジュールに対するＣＰＵ１０３による入力量演算処理の具体例を図７に示す。図７では縮小処理を見越して縮小処理モジュールに入力する周辺画像の量は縦方向・横方向それぞれＮ倍（０＜Ｎ＜１）にする。
【００８５】
ステップＳ７０１でＣＰＵ１０３は着目モジュールより後で必要な上部周辺画素量を示すＯＵＴ＿ＴＯＰ＿ＲＥＦに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＴＯＰ＿ＲＥＦに格納する。同様に、ステップＳ７０２でＣＰＵ１０３はＯＵＴ＿ＢＯＴＴＯＭ＿ＲＥＦに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦに格納し、ステップＳ７０３でＣＰＵ１０３はＯＵＴ＿ＬＥＦＴ＿ＲＥＦに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＬＥＦＴ＿ＲＥＦに格納する。ステップＳ７０４でＣＰＵ１０３はＯＵＴ＿ＲＩＧＨＴ＿ＲＥＦに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＲＩＧＨＴ＿ＲＥＦに格納する。
【００８６】
また、ステップＳ７０５でＣＰＵ１０３は着目モジュールより後で必要なＯＵＴ＿ＷＩＤＴＨに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＷＩＤＴＨに格納する。同様に、ステップＳ７０６でＣＰＵ１０３はＯＵＴ＿ＨＥＩＧＨＴに変倍率の逆数（１／Ｎ）を乗じたものをＩＮ＿ＨＥＩＧＨＴに格納する。
【００８７】
以上の処理によって縮小処理モジュールに入力する、中間入力画像のサイズ（ＩＮ＿ＷＩＤＴＨ，ＯＵＴ＿ＨＥＩＧＨＴ）と、周辺画素量（ＩＮ＿ＴＯＰ＿ＲＥＦ，ＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦ，ＩＮ＿ＬＥＦＴ＿ＲＥＦ，ＩＮ＿ＲＩＧＨＴ＿ＲＥＦ）とを取得する。
【００８８】
次に、フィルタ処理モジュールに対応する入力量演算処理の一例を図８に示す。説明の簡便のため３×３のフィルタ処理を用いて説明する。
【００８９】
ステップＳ８０１でＣＰＵ１０３は着目モジュールより後で必要な上部周辺画素量を格納したＯＵＴ＿ＴＯＰ＿ＲＥＦに着目モジュールにて必要となる上部周辺画素量である１を加算したものをＩＮ＿ＴＯＰ＿ＲＥＦに格納する。同様に、ステップＳ８０２でＣＰＵ１０３は着目モジュールより後で必要な下部周辺画素量を格納したＯＵＴ＿ＢＯＴＴＯＭ＿ＲＥＦに着目モジュールにて必要となる下部周辺画素量である１を加算したものをＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦに格納する。さらに、ステップＳ８０３でＣＰＵ１０３は着目モジュールより後で必要な左部周辺画素量を格納したＯＵＴ＿ＬＥＦＴ＿ＲＥＦに着目モジュールにて必要となる左部周辺画素量である１を加算したものをＩＮ＿ＬＥＦＴ＿ＲＥＦに格納する。そして、ステップＳ８０４でＣＰＵ１０３は着目モジュールより後で必要な右部周辺画素量を格納したＯＵＴ＿ＲＩＧＨＴ＿ＲＥＦに着目モジュールにて必要となる右部周辺画素量である１を加算したものをＩＮ＿ＲＩＧＨＴ＿ＲＥＦに格納する。
【００９０】
ステップＳ８０５でＣＰＵ１０３は着目モジュールより後で必要な入力画像幅を格納したＯＵＴ＿ＷＩＤＴＨに着目モジュールにて必要となる左部及び右部の周辺画素量の和である２を加算したものをＩＮ＿ＷＩＤＴＨＦに格納する。同様に、ステップＳ８０６でＣＰＵ１０３は着目モジュールより後で必要な入力画像高さを格納したＯＵＴ＿ＨＥＩＧＨＴに当該モジュールにて必要となる上部及び下部の周辺画素量の和である２を加算したものをＩＮ＿ＨＥＩＧＨＴに格納する。
【００９１】
以上の処理によってフィルタ処理モジュールに入力する、中間入力画像のサイズ（ＩＮ＿ＷＩＤＴＨ，ＯＵＴ＿ＨＥＩＧＨＴ）と、周辺画素量（ＩＮ＿ＴＯＰ＿ＲＥＦ，ＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦ，ＩＮ＿ＬＥＦＴ＿ＲＥＦ，ＩＮ＿ＲＩＧＨＴ＿ＲＥＦ）とを取得する。
【００９２】
なお、以上の説明では３Ｘ３フィルタ処理モジュールにおける一例を示したが、ＮＸＭ画素のフィルタ処理モジュールに拡張することもできる。ここで、ＮとＭはともに自然数で、少なくとも一方は２以上であり、Ｎは幅、Ｍは高さを示すものとする。
【００９３】
ＮＸＭフィルタ処理モジュールについて必要となる周辺画素量は、左部周辺画素量がＮ／２、右部周辺画素量が（Ｎ−１）／２、上部周辺画素量がＭ／２、下部周辺画素量が（Ｍ−１）／２となる。なお、この計算式は図１３（ｃ）でモジュールＢの５Ｘ５フィルタのように着目画素の位置が中央である場合の式であるが、着目画素の位置に応じて変えればよい。
【００９４】
３ｘ３フィルタの場合左部周辺画素量と上部周辺画素量は３／２＝１，右部周辺画素量と下部周辺画素量は（３−１）／２＝１となる。４ｘ４フィルタの場合、左部周辺画素量と上部周辺画素量は４／２＝２，右部周辺画素量と下部周辺画素量は（４−１）／２＝１となる。５ｘ５フィルタの場合、左部周辺画素量と上部周辺画素量は５／２＝２，右部周辺画素量と下部周辺画素量は（５−１）／２＝２となる。
【００９５】
（処理モジュールのアルゴリズム毎の出力量演算処理の具体例）
次に、処理モジュールのアルゴリズム毎の出力量演算処理の具体例を図９、図１０及び図１１を用いて説明する。
【００９６】
縮小処理モジュールに対応する出力量演算処理の一例を図９に示す。図９は縮小処理モジュールに対して縦方向・横方向それぞれＮ倍にする設定がなされているものとする。
【００９７】
ステップＳ９０１でＣＰＵ１０３は入力される画像幅を格納したＩＮ＿ＷＩＤＴＨに変倍率を乗じたものをＯＵＴ＿ＷＩＤＴＨに格納する。
【００９８】
ステップＳ９０２でＣＰＵ１０３は入力される画像高さを格納したＩＮ＿ＨＥＩＧＨＴに変倍率を乗じたものをＯＵＴ＿ＨＥＩＧＨＴに格納する。
【００９９】
ステップＳ９０３でＣＰＵ１０３は中間入力画像の幅又は高さを補正したことを示すフラグであるＲＥＶＩＳＥ＿ＦＬＡＧに０（補正なし）を格納する。
【０１００】
次に、フィルタ処理などのように、周辺画素を含む複数の入力画素を１つの出力画素を出力するために必要とするモジュールに対応する出力量演算処理の一例を図１０に示す。当該フィルタ処理は３Ｘ３のフィルタ処理を行うものとする。
【０１０１】
ステップＳ１００１でＣＰＵ１０３は入力される画像幅を格納したＩＮ＿ＷＩＤＴＨに上部及び下部の周辺画素量の和である２を減算したものをＯＵＴ＿ＷＩＤＴＨに格納する。
【０１０２】
ステップＳ１００２でＣＰＵ１０３は入力される画像高さを格納したＩＮ＿ＨＥＩＧＨＴに左部及び右部の周辺画素量の和である２を減算したものをＯＵＴ＿ＨＥＩＧＨＴに格納する。
【０１０３】
ステップＳ１００３でＣＰＵ１０３は中間入力画像の幅又は高さを補正したことを示すフラグであるＲＥＶＩＳＥ＿ＦＬＡＧに０（補正なし）を格納する。
【０１０４】
次に、Ｎ倍（Ｎ＝２）の拡大処理モジュールで、入力制限もあるモジュールに対応する出力量演算処理の一例を図１１に示す。ここでは中間入力画像の幅と高さが、共に２の倍数でなければならない制限があるとする。
【０１０５】
ステップＳ１１０１でＣＰＵ１０３は変数ＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥを０に初期化する。同様に、ステップＳ１１０２でＣＰＵ１０３は変数ＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥを０に初期化する。
【０１０６】
ステップＳ１１０３でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨを２で割った際の余りが０であればステップＳ１１０５に遷移し、０でなければステップＳ１１０４に遷移する。
【０１０７】
ステップＳ１１０４でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨを２の倍数に切り上げた数をＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥに格納することで中間入力画像の幅が制約を満たすように補正する。
【０１０８】
ステップＳ１１０５でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴを２で割った際の余りが０であればステップＳ１１０７に遷移し、０でなければステップＳ１１０６に遷移する。
【０１０９】
ステップＳ１１０６でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴを２の倍数に切り上げた数をＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥに格納することで中間入力画像の高さが制約を満たすように補正する。
【０１１０】
ステップＳ１１０７でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨ＿ＲＥＶＩＳＥが０でありかつＩＮ＿ＨＥＩＧＨＴ＿ＲＥＶＩＳＥが０である場合はステップＳ１１０８に遷移し、この条件を満たない場合はステップＳ１１１０に遷移する。
【０１１１】
ステップＳ１１０８でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨに２を乗じたものをＯＵＴ＿ＷＩＤＴＨに格納する。
【０１１２】
ステップＳ１１０９でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴに２を乗じたものをＯＵＴ＿ＨＥＩＧＨＴに格納する。
【０１１３】
ステップＳ１１１０でＣＰＵ１０３は中間入力画像の幅又は高さを補正したことを示すフラグであるＲＥＶＩＳＥ＿ＦＬＡＧに０（補正なし）を格納する。
【０１１４】
ステップＳ１１１１でＣＰＵ１０３は中間入力画像の幅又は高さを補正したことを示すフラグであるＲＥＶＩＳＥ＿ＦＬＡＧに１（補正あり）を格納し、実行エラーが発生した際にステップＳ３２４〜Ｓ３３３の処理を実施する判定に用いる。
【０１１５】
あと、図は省略するが、周辺画素を消費しない処理モジュールでは、中間入力画像のサイズと周辺画素量をそのまま中間出力画像のサイズと周辺画素量として引き継げばよい。例えば、画像の色空間をＲＧＢからＣＭＹＫ（またはその逆）に変換する色変換処理モジュールや、カラー画像をグレースケールに変換する色処理モジュールなどが挙げられる。
【０１１６】
（周辺画素の付加）
次に、並列処理部２０５へ入力する入力画像に周辺画素を付加する詳細について説明する。
【０１１７】
図１７（ａ）は、ページ単位の入力画像に周辺画素を付加する様子を示す模式図である。なお、並列処理部２０５は所定範囲（領域５２、５４、５５、５６、５７）を処理に用いる処理モジュールを含むものとする。メモリ１０１に格納されている画像５１は１ページ分であり、複数の処理モジュールにおける制約や必要とする周辺画素に基づいて領域５３を補う。画素を補う具体例として、入力モジュール２００が画像端部で折り返された画像が付加されるように、メモリ１０１の画像５１について同じアドレスを複数回読み出す方法がある。もしくは画像５１が画像処理装置のスキャナ（不図示）で読み取ったスキャン画像であれば並列処理部２５０へ読み出すアドレス領域を拡張することでも対応できる（一般的に、スキャナはラインセンサでスキャンした画像領域の一部を切り出してスキャン画像としているため。）。または、ＣＰＵ１０３や入力モジュール２００などで特定の値の画素を余白画素として付加するようにしてもよい。
【０１１８】
そして、並列処理部２０５の入出力バッファ１４０１には領域５３を付加された入力画像を保持する。
【０１１９】
図１７（ｂ）は、バンド単位の入力画像（例えば、図１７（ａ）の領域５８）に周辺画素を付加する様子を示す模式図である。メモリ１０１に格納されている画像５１を短冊状に分割し、短冊状に分割した部分画像（バンド画像）を順に並列処理部２０５へ入力する。ここで、並列処理部２０５の入出力バッファには周辺画素が付加された入力画像（点線領域６５）を保持する。
【０１２０】
（リングバス）
次に本実施形態で並列処理部２０５が備えるリングバスの詳細について説明する。
【０１２１】
図１４（ａ）に、並列処理部２０５の概略構成を示す。並列処理部２０５は複数個のモジュール２０１から２０４を有する。リングバス１４００は、モジュール間でパケットを転送するためのバスである。モジュール２０１から２０４はリングバス並列処理部２０５を介して接続されている。各モジュールはデータパケットを隣接する一方のモジュールから受信し、所定の処理を行った後に隣接する他方のモジュールへ送信するように構成される。各モジュールが送受信するパケットはリングバスを一方向に移動する。以降の説明では単方向にデータ（又はパケット）を周回させるリング状のバスを単にリングバスと称す。
【０１２２】
入出力バッファ１４０１は、データの入出力を行うためのバッファで、ＳＲＡＭなどを備える。モジュール２０１〜２０４は、それぞれを識別するための情報を有している（図１４では「ＩＤ」と記述）。なお、ＩＤが１のモジュール２０１は、入出力バッファ２０６と接続されて、データの入出力も管理する。
【０１２３】
次に、図１５を参照して、各モジュール２０１〜２０４の概略構成を説明する。図１５において、パケット識別部１５０８は、他のモジュールから到来したパケットを取り込むか否かを判断する。パケット識別部１５０８は自らが待ち受けているＩＤと一致する送信元ＩＤを保持するパケットを受信した時にパケットをパケット受信部１５１０に出力する。
【０１２４】
パケット受信部１５１０はパケットの受信処理を行う。処理データ送信部１５０４は、処理部１５０２に処理対象のデータを送信する。処理部１５０２は実際の画像処理を行う。処理データ受信部１５０５は、処理部１５０２からの処理後データを受信する。パケット生成部１５１１は、処理部１５０２から受信した処理後データとパケット変更部１５０７からの出力をもとにパケットを生成する。なお、パケット生成部１５１１はレジスタ１５１２に自身のモジュールの識別子を保持し、生成したパケットの送信元ＩＤ１４１２にレジスタ１５１２の値を保持させる。
【０１２５】
パケット送信部１５１２はパケットをリングバスに送出する。パケット変更部１５０７は、パケット受信部１５１０からの指示に応じて、パケットのデータ有効フラグ１４１１や保留フラグ１４１４の値を変更する（パケットの詳細については後述する）。セレクタ１５１３は、パケット送信部１５１２からのパケットとパケット変更部１５０７からのパケットのいずれかをパケット送信部１５１２からの指示に基づいて選択する。セレクタ１５１３はパケット送信部１５１２からの指示がなければパケット変更部１５０７からの出力を選択してそれを出力とする。バッファ１５１４はパケットを次から次へと転送するためのもので、本実施形態では１つ分のパケットを１サイクルの間だけ保持する。
【０１２６】
なお、処理部１５０２の状態によっては、パケット受信部１５１０はパケットの受信を保留しなければならないこともある。
【０１２７】
次にモジュール間でデータを送受信するために必要なパケットのフォーマットを図１４（ｂ）に示す。データ有効フラグ１４１１は、パケットが有効なデータを保持しているかどうかを示す。例えば、データ有効フラグ４０１が「１」であればデータは有効であり、「０」であればデータは無効であるとする。
【０１２８】
送信元ＩＤ１４１２は、パケットを送信したモジュールの識別子を格納する。データ格納領域１４１３は処理データ本体を格納する領域である。本実施形態では、データ格納領域はＲＧＢもしくはＣＭＹＫの１画素分の画素データを保持するものとし、３２ｂｉｔ分の領域を確保している。保留フラグ１４１４は、モジュールがパケットの処理を保留した際に「１」に設定する。即ち、保留フラグ１４１４が「１」であればそのパケットの処理が受け取り側で保留されたことを示している。なお、処理の保留は、例えば次に処理を実施する対象のモジュールが受信したものの、処理部１５０２がビジー状態であったためデータを処理できなかった場合に行われる。保留フラグ１４１４は初期値が「０」である。属性情報１５１５はその他のメタデータである。例えば、複数のデータフローを並列処理部２０５で実現する際に、各パケットがどのデータフローに属するのかを示すフロー識別情報などを含む。
【０１２９】
また、各モジュールはパケット識別部１５０８内のレジスタ１５１５に待ち受けパケットＩＤを保持し、パケット識別部３０１は、待ち受けパケットＩＤとリングバスを流れるパケットの送信元ＩＤ４０２とが一致した時にパケットをパケット受信部１５１０に取り込む。
【０１３０】
例えば、Ａ→Ｂ→Ｃ→Ｄ→Ａの順でデータパスを構成したい場合を考える。この場合、モジュールＡの待ち受けパケットＩＤを３に、モジュールＢの待ち受けパケットＩＤを４に、モジュールＣの待ち受けパケットＩＤを２に、モジュールＤの待ち受けパケットＩＤを１に設定する。このようにして各モジュールの待ち受けパケットＩＤをそれぞれ設定することで、データパスを形成することができる。ここで、入出力バッファ１４０１からの入力は直接モジュールＡの処理部１５０２へ入力されるものとする。なお、待ち受けパケットＩＤは、各モジュールについて事前に設定され、その情報はパケット識別部１５０８のレジスタ１５１５が記憶するものとする。
【０１３１】
次に、通信部１５０１におけるデータ受信方法に関して説明する。例えば、図１４（ａ）においてＩＤ＝１のモジュールＡからＩＤ＝３のモジュールＣに転送を行う場合を考える。このとき、モジュールＣのパケット識別部１５０８はデータ有効フラグ１４１１が有効となっているパケットを取得し、該パケットの送信元ＩＤ１４１２と自らの待ち受けパケットＩＤとを比較する。そして、両者が等しい場合に、該パケットをパケット受信部１５１０に送信する。
【０１３２】
処理データ送信部１５０４は、処理部１５０２が処理可能であるかどうかを判定（ハンドシェイク）し、処理可能と判定した場合、パケット受信部１５１０は取得したパケットから処理対象データを抽出して処理データ送信部１５０４に送信する。データを抽出した際に、パケット無効処理指示レジスタ１５０９の値が「０」である場合、該パケットはすでに不要であるからパケット受信部１５１０はパケットのデータ有効フラグ１４１１を無効（０）に設定するようにパケット変更部１５０７に指示を出す。（パケット無効処理指示レジスタ１５０９の値が「０」である場合、パケット受信部１５１０はデータ有効フラグ１４１１を無効（０）に設定する指示を出さない。）
一方、処理データ送信部１５０４が処理部１５０２はビジー（新たなデータの投入が不可能）であると判定した場合、パケット受信部１５１０はパケットの保留フラグ１４１４を１に設定するようにパケット変更部１５０７に指示を出す。パケット変更部１５０７は、パケット受信部１５１０からの指示に従ってデータ有効フラグ１４１１或いは保留フラグ１４１４を変更して、セレクタ１５１３に送信する。セレクタ１５１３は、パケット変更部１５０７とパケット送信部１５１２からの入力のうちいずれかを選択してバッファ１５１４に送信する。
【０１３３】
なお保留フラグ１４１４を有効（１）に設定されたパケットはリングバス１４００をそのまま周回する。そして、保留フラグ１４１４を有効にしたモジュールまで周回してきた際に、当該モジュールのビジー状態が解除されていれば通常のパケットと同様に処理されるので、パケットを意識的に再送する必要がない。このようにリングバスを用いた並列処理部２０５では、モジュール間で効率よくデータ転送をすることができる。
【０１３４】
（処理モード情報と演算プログラムについて）
図１８（ａ）は処理モード毎に、各処理モジュールの処理順と、入・出力バンド高さ（周辺画素含まない）とを含む処理モード情報示す模式図である。処理モード情報は予めメモリ１０１のＲＯＭなどに工場出荷時に記憶する。ＭＯＤＥ  ＩＤは処理モードの識別子であり、Ｐｒｏｃｅｓｓｉｎｇ  Ｏｒｄｅｒは処理モジュールの処理順を示す、Ｉｎｐｕｔ  Ｈｅｉｇｈｔは入力バンド高さ（周辺画素含まない）、Ｏｕｔｐｕｔ  Ｈｅｉｇｈｔｈａ出力バンド高さ（周辺画素含まない）である。入力バンド幅と出力バンド高さも処理モード毎に設定してもよいが、この例では処理モード毎に変わらない値（２００）を決め打ちで与えているため省略している。なお、処理モード４では分岐処理を含む処理順を示している。
【０１３５】
図１８（ｂ）は、処理モジュールと対応する演算プログラムを示す識別子の対応を保持する表であり、処理モード情報と同様にメモリ１０１に保持されている。なお、演算プログラムの識別子でなくても、相対アドレスなどの代替できる情報であればよい。
【０１３６】
図１８（ｃ）は、識別子１の演算プログラムの内容を示す。領域１８０１は入力量演算プログラムを示し、領域１８０２は出力量演算プログラムを示し、領域１８０３は補正値演算プログラムを示す。演算プログラムは画像処理モジュール毎に、処理モード情報と同様にメモリ１０１に保持されている。
【０１３７】
以上のように、本実施形態によれば、周辺画素を使って処理する画像処理モジュールを含む複数の画像処理モジュールを所望の処理順で処理させる際に、好ましい結果をえるために少なくとも付加するべき周辺画素量を取得することができる。さらに、取得した周辺画素量を付加するように入力・出力モジュールを設定し、好ましい画像処理結果を得ることができる。
【０１３８】
＜＜第２実施形態＞＞
第１実施形態では入力画像サイズ（入力バンド高さなど）周辺画素量と入力画像のサイズ（周辺画素含む）とを求めたが、第２実施形態では図１２に示す様に、出力画像サイズ（出力バンド高さなど）から周辺画素量と入力画像のサイズ（周辺画素含む）とを求める。
【０１３９】
なお、第１実施形態と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【０１４０】
ステップＳ１２０１でＣＰＵ１０３はＩＮＩＴ＿ＷＩＤＴＨとして、設定された出力画像幅（Ｓ１６０２で取得したバンド幅）を格納する。
【０１４１】
ステップＳ１２０２でＣＰＵ１０３はＩＮＩＴ＿ＨＥＩＧＨＴとして、設定された出力画像高さ（Ｓ１６０２で取得したＯｕｔｐｕｔ  Ｈｅｉｇｈｔ）を格納する。
【０１４２】
ステップＳ１２０３でＣＰＵ１０３はＩＮ＿ＷＩＤＴＨ、ＩＮ＿ＬＥＦＴ＿ＲＥＦ＿ＯＵＴＰＵＴ及びＩＮ＿ＲＩＧＨＴ＿ＲＥＦ＿ＯＵＴＰＵＴの和をＳＥＴ＿ＩＮ＿ＷＩＤＴＨに格納する。
【０１４３】
ステップＳ１２０４でＣＰＵ１０３はＩＮ＿ＨＥＩＧＨＴ、ＩＮ＿ＴＯＰ＿ＲＥＦ＿ＯＵＴＰＵＴ及びＩＮ＿ＢＯＴＴＯＭ＿ＲＥＦ＿ＯＵＴＰＵＴの和をＳＥＴ＿ＩＮ＿ＨＥＩＧＨＴに格納する。
【０１４４】
本実施形態によれば、出力画像サイズから周辺画素を含む入力画像のサイズを求めることができる。
【０１４５】
なお、説明の簡便のため、第１実施形態と第２実施形態を別々に説明したが、第１実施形態と第２実施形態を組み合わせて実施してもよい。例えば、ステップＳ１６０１においてＣＰＵ１０３が画像処理モードを決定する際に、図１８（ａ）の処理モード情報に基づいて第１実施形態と第２実施形態とのいずれを実施するか決定すればよい。
【０１４６】
上述の実施形態では並列処理部２０５の複数のモジュール間の接続としてリングバスを用いる形態について説明したが、モジュール間の処理順序を動的に変更可能なインターコネクトであれば構わない。例えば、クロスバースイッチやスイッチマトリックスを用いてもよいし、複数のセレクタによって処理順序の入れ替えができるように構成してもよい。
【０１４７】
上述の実施形態ではクロッピングやマスクなどの切り出し処理を実施する切り出し処理モジュールについては触れていないが、これらの処理では処理順を遡って入力量を演算することが困難である。しかし、このような処理順を遡って入力量を演算することが困難な処理モジュールは処理順の最後とし、図４のように処理順のテーブルを作成する際に除外するようにしておけば、図３や図１２に示した処理では自動的にスキップすることができる。ただし、クロッピング処理を含む処理順に対応する出力バンド高さは、クロッピングを実施する前の値を設定しておくことが好ましい。
【０１４８】
なお上述の実施形態では詳細を述べていないが、画像処理モジュールの１つに余白画素を追加する余白追加処理モジュールを追加するようにしてもよい。その場合、処理順の先頭に予約画素を追加する処理モジュールが来るようにする。また、図３や図１２の処理で周辺画素量を取得した後にＣＰＵ１０３が余白追加処理モジュールを設定し、余白追加処理モジュールは、所定の画素値（例えば、Ｒ２５５，Ｇ２５５，Ｂ２５５）を含む画素（実際にはパケット）を必要な箇所で出力する。
【０１４９】
上述の実施例で用いたデータ処理装置の各部の概略構成図は、回路や機能手段の接続関係を説明するためのものであって、各構成の位置関係を制限するものではない。
【０１５０】
また、前述の各実施例の処理は、複数のハードウェアとソフトウェアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウェア（プログラム）をコンピュータ等の処理装置（ＣＰＵ、プロセッサ）にて実行することで実現できる。
【０１５１】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【図１】
2014048906.tif 000003
【図２】
2014048906.tif 000004
【図３】
2014048906.tif 000005
【図４】
2014048906.tif 000006
【図５】
2014048906.tif 000007
【図６】
2014048906.tif 000008
【図７】
2014048906.tif 000009
【図８】
2014048906.tif 000010
【図９】
2014048906.tif 000011
【図１０】
2014048906.tif 000012
【図１１】
2014048906.tif 000013
【図１２】
2014048906.tif 000014
【図１３】
2014048906.tif 000015
【図１４】
2014048906.tif 000016
【図１５】
2014048906.tif 000017
【図１６】
2014048906.tif 000018
【図１７】
2014048906.tif 000019
【図１８】
2014048906.tif 000020