(57)【特許請求の範囲】
【請求項１】
画像を格納する共有メモリと、
共有メモリに接続され画像処理を実行する複数のプロセッサと、
前記共有メモリに格納された画像を複数の領域に分割して、分割された領域を任意のプロセッサにそれぞれ設定し、少なくとも複数のプロセッサを１つのグループ単位にまとめた複数のグループを設定し、前記１つのグループに属する複数のプロセッサについては同時に動作を開始させて、前記グループ毎の処理開始タイミングを順次ずらせて並列処理させるコントローラと
を有し、
先行して動作を開始する先行グループに属するプロセッサが画像処理する処理領域内には、続いて動作を開始する後行グループに属する全てのプロセッサが最初に処理する画素の画素間依存関係を充足する画素が含まれていることを特徴とする画像処理装置。
【請求項２】
前記コントローラは、前記先行グループに属するプロセッサが当該処理領域に含まれる後行グループに属するプロセッサとの間で前記画素間依存関係を充足する全ての画素について前記画像処理が終了したとき以降に前記後行グループに属するプロセッサの動作を開始させることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
画像を格納する共有メモリと、共有メモリに接続され画像処理を実行する複数のプロセッサとを備えた画像処理装置の画像処理方法において、
前記共有メモリに格納された画像を複数の領域に分割し、
分割された領域を任意のプロセッサにそれぞれ設定し、
少なくとも複数のプロセッサを１つのグループ単位にまとめた複数のグループを設定し、
前記１つのグループに属する複数のプロセッサについては同時に動作を開始させ、
前記グループ毎の処理開始タイミングを順次ずらせて並列処理させ、
先行して動作を開始する先行グループに属するプロセッサが画像処理する処理領域内には、続いて動作を開始する後行グループに属する全てのプロセッサが最初に処理する画素の画素間依存関係を充足する画素が含まれていることを特徴とする画像処理方法。
【請求項４】
前記先行グループに属するプロセッサが当該処理領域に含まれる後行グループに属するプロセッサとの間で前記画素間依存関係を充足する全ての画素について前記画像処理が終了したとき以降に前記後行グループに属するプロセッサの動作を開始させることを特徴とする請求項３に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の汎用プロセッサコアを持つ画像処理装置であって、画素の処理結果が、隣接する他の画素に依存して決まるタイプの画像処理を高速化する技術に関する。
【背景技術】
【０００２】
従来、大量の画像処理をリアルタイムで実現しようとした場合は、ＡＳＩＣ（Application Specific Integrated Circuit）などの専用ハードウェアを用い、画像処理アルゴリズムを専用ハードウェアに固定して実現していた。近年、ＳＩＭＤ（Single Instruction Multiple Data）型の演算器、及びＳＩＭＤ型データレジスタのスロット間（隣接画素間）演算を行なうハードウェアを用いた画像処理技術が知られている。この画像処理技術では、これらのハードウェア上で動作するプログラムを書き換えることによって、パラメータ、アルゴリズムを、柔軟に変更することができる。
【０００３】
このようなＳＩＭＤ型の技術を開示したものとして、特許文献１に記載された技術が知られている。この特許文献１に記載された技術は、誤差拡散タイプの画像処理を、水平・垂直方向の２つの方向の画素列の処理に分解し、垂直方向はＳＩＭＤ型演算器、水平方向は逐次処理用回路を用いて処理することで、高速な処理を実現するものである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載された技術を実施する際には専用ハードウェアが必要である。そして、性能を更に向上させようとした場合、単にその専用ハードウェアを増設しても処理効率を高められるものでもない。そのため、性能を更に向上させようとした場合、新たな専用ハードウェアが必要となる。即ち、特許文献１に記載された技術では、処理効率向上を容易に実現することが難しいという問題がある。
【０００５】
本願発明は係る事情に鑑みてなされたものであって、画素間に依存関係がある画像処理の処理効率向上を簡便に実現することのできる画像処理装置及び画像処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、画像を格納する共有メモリと、共有メモリに接続され画像処理を実行する複数のプロセッサと、前記共有メモリに格納された画像を複数の領域に分割して、分割された領域を任意のプロセッサにそれぞれ設定し、少なくとも複数のプロセッサを１つのグループ単位にまとめた複数のグループを設定し、前記１つのグループに属する複数のプロセッサについては同時に動作を開始させて、前記グループ毎の処理開始タイミングを順次ずらせて並列処理させるコントローラとを有し、先行して動作を開始する先行グループに属するプロセッサが画像処理する処理領域内には、続いて動作を開始する後行グループに属する全てのプロセッサが最初に処理する画素の画素間依存関係を充足する画素が含まれている画像処理装置である。
【００１０】
また本発明は、画像を格納する共有メモリと、共有メモリに接続され画像処理を実行する複数のプロセッサとを備えた画像処理装置の画像処理方法において、前記共有メモリに格納された画像を複数の領域に分割し、分割された領域を任意のプロセッサにそれぞれ設定し、少なくとも複数のプロセッサを１つのグループ単位にまとめた複数のグループを設定し、前記１つのグループに属する複数のプロセッサについては同時に動作を開始させ、前記グループ毎の処理開始タイミングを順次ずらせて並列処理させ、先行して動作を開始する先行グループに属するプロセッサが画像処理する処理領域内には、続いて動作を開始する後行グループに属する全てのプロセッサが最初に処理する画素の画素間依存関係を充足する画素が含まれている画像処理方法である。
【発明の効果】
【００１２】
この発明の画像処理装置及び画像処理方法によれば、画素間に依存関係がある画像処理の処理効率向上を簡便に実現することができる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の画像処理装置を示す図。
【図２】第１の実施の形態の画像処理装置を適用した画像処理システムを示す図。
【図３】対象とする画素の処理が他の画素の処理結果に依存する画像処理の一例を説明する図。
【図４】各プロセッサの処理領域を示す図。
【図５】コア間の同期タイミングを示す図。
【図６】コア間の同期タイミングを示す図。
【図７】汎用プロセッサコアの動作を示すタイムチャート。
【図８】画像領域が大きい場合の汎用プロセッサコアの割り当てを示す図。
【図９】制御用プロセッサコアの概略の処理を示すフローチャート。
【図１０】汎用プロセッサコアの概略の処理を示すフローチャート。
【図１１】汎用プロセッサコアに割り当てられる領域を示す図。
【図１２】最初に画像処理を実行する２つのプロセッサコアが処理する領域を表す図。
【図１３】次に画像処理を実行する２つのプロセッサコアが処理する領域を表す図。
【図１４】汎用プロセッサコアの同期処理のタイミングを示す図。
【図１５】汎用プロセッサコア間の同期タイミングを詳細に示す図。
【図１６】汎用プロセッサコアで処理する画像データと共有メモリに格納されている処理済みデータとを示す図。
【図１７】制御用プロセッサコアの概略の処理を示すフローチャート。
【図１８】汎用プロセッサコアの概略の処理を示すフローチャート。
【図１９】汎用プロセッサコアの動作を示すタイムチャート。
【図２０】処理領域と汎用プロセッサコア間の同期タイミングを示す図。
【図２１】外部バスに接続されている画像処理装置が１台の場合の処理を説明する図。
【図２２】外部バスに接続されている画像処理装置が複数台の場合の処理を説明する図。
【図２３】制御用プロセッサコアの概略の処理を示すフローチャート。
【図２４】汎用プロセッサコアの概略の処理を示すフローチャート。
【図２５】汎用プロセッサコアの概略の処理を示すフローチャート。
【発明を実施するための形態】
【００１４】
[第１の実施の形態]  
図１は、第１の実施の形態の画像処理装置を示す図である。  
画像処理装置１は、図示しない外部装置との間でデータを送受信する外部インタフェース２、共有メモリ３、共有メモリとの送受信を行うメモリインタフェース４、制御用プロセッサコア５、画像処理を実行する複数の汎用プロセッサコア６、及びこれらの各ハードウェア間のデータ通信路であるバス７を備えている。
【００１５】
汎用プロセッサコア６は、共有メモリ３よりも高速にアクセス可能なローカルメモリ８を内部に備えている。さらに、汎用プロセッサコア６は、プログラムに従って画像処理を実行する演算ユニット（不図示）と、ローカルメモリ８と共有メモリ３間のデータ転送、および、他の汎用プロセッサコア６との間で動作開始タイミングを合わせるための同期処理を実現するＤＭＡ転送ユニット（不図示）を備えている。これら汎用プロセッサコア６は、それぞれプログラムによって制御可能であり、また、並行に実行させることが可能である。
【００１６】
汎用プロセッサコア６間のデータ通信方法については、ローカルメモリ８間で直接送受信する方法と、共有メモリ３を介して送受信する方法がある。このいずれの方法も使用することができるが、画像データのように大量のデータを送受信する場合には、共有メモリ３を介して通信する方式を用いることで高速に処理することができる。
【００１７】
また、汎用プロセッサコア間での起動を制御する同期処理に関しては、同期処理を行う汎用プロセッサコア数が増える毎に指数的に同期処理に要する時間が増大する。このため、本画像処理装置１においては、より少ない同期回数で所定の処理を実現することが必要である。
【００１８】
制御用プロセッサコア５は、画像処理装置１の動作を統括して制御する。例えば、制御用プロセッサコア５は、汎用プロセッサコア６で生成した処理データを外部インタフェース２を介して外部へ通信する。また、制御用プロセッサコア５は、外部インタフェース２を介して外部からの指示を受信して汎用プロセッサコア６を制御する。
【００１９】
なお、図１に示す画像処理装置１は、共有メモリ３を備えているが、この共有メモリ３は、任意に接続可能な外部装置であっても良く、常に画像処理装置が備えていなくても良い。
【００２０】
図２は、第１の実施の形態の画像処理装置を適用した画像処理システムを示す図である。この画像処理システムは、Ｆａｘ、プリンター、コピー、スキャン機能を備えたＭＦＰ（Multi Functional Peripheral：画像形成装置）の一部として構成されている。
【００２１】
即ち、画像処理装置１は、ＭＦＰを構成するハードウェアのーつとして、ＭＦＰ本体側の制御手段１０によって管理されている。そして、画像処理装置１は、ＭＦＰ本体側と外部インタフェース２を介して、画像処理プログラム、画像データを受信して、処理プログラムに従って画像処理を実施し、再び、処理された画像をＭＦＰ本体側に出力する。
【００２２】
次に、図２を参照しつつ画像処理の流れについて説明する。  
先ずＭＦＰ側の制御手段１０が、ＭＦＰ内の記憶領域１１から画像処理プログラムを取り出して、共有メモリ３にコピーさせると共に、画像処理装置１に対して決められた手順に従って指示を行うことで画像処理が開始される。この際、画像処理の対象となる画像データは、画像処理プログラムと同様に、ＭＦＰ本体の記憶領域１１に格納されている。
【００２３】
画像処理装置１では、制御用プロセッサコア５が画像処理プログラムを各汎用プロセッサコア６に読み込ませる。また制御用プロセッサコア５は、ＭＦＰ側の記憶領域１１から、画像データを取得して共有メモリ３に保存する。
【００２４】
ＭＦＰ本体側の制御手段１０から、処理開始が指示されると、制御用プロセッサコア５が、汎用プロセッサコア６に対して画像処理の開始を指示する。各汎用プロセッサコア６は、画像処理を実行する。画像処理された画像データは共有メモリ３に一旦格納される。画像処理が完了すると、共有メモリ３に格納された画像データは、ＭＦＰ側の記憶領域１１に送信されて格納される。  
図２には、画像データの流れが矢印で示されている。またＭＦＰ側の記憶領域１１には、未処理の画像データと処理済みの画像データとが格納されていることが示されている。
【００２５】
ここで、画像処理装置１が実行する画像処理は、ある画素の処理結果を取り入れて他の画素を処理するような処理である。即ち、対象とする画素の処理が他の画素の処理結果とは独立になされるのではなく、対象とする画素の処理が他の画素の処理結果に依存するような処理である。
【００２６】
図３は、そのような画像処理の一例を説明する図である。図３に示す画像処理では、対象となる画素の計算において、図３に示すように、その対象画素の左、左上、上に隣接する画素の画像処理結果を用いる。第１の実施の形態の画像処理装置１では、このような依存関係のある画像処理を、複数の汎用プロセッサコア６により並列に処理することで高速な処理を実現する。なお、上述のような依存関係のある画像処理としては、誤差拡散処理、ディザ処理等が挙げられる。
【００２７】
続いて、複数の汎用プロセッサコア６での画像処理方法について説明する。図４は、それぞれの汎用プロセッサコア６に割り当てられる領域を示す図である。
【００２８】
画像処理の並列処理にあたり、図３に示すように左、左上、上にある画素の計算結果が必要であることから、図４に示すように、画像領域を斜め方向に分割し、この領域毎に汎用プロセッサコア６を割り当てて画像処理を実行させる。図４には、複数の汎用プロセッサコア６の内、領域ごとに処理を実行する汎用プロセッサコア６を明示している。
【００２９】
各汎用プロセッサコアでの処理に関しては、後述する同期方式により実行タイミングを時間的にずらしながら処理を行うことにより、同期処理のオーバーヘッドが少ない効率的な並列処理が可能となる。
【００３０】
各汎用プロセッサコア６での処理と、汎用プロセッサコア間の同期処理による画像処理の詳細について説明する。図５は、画像領域の左側の汎用プロセッサコア６に割り当てられた領域を拡大して示す図である。
【００３１】
最初に処理を実行するのは、図５の左端の領域に割り当てられた汎用プロセッサコア(1)であり、他の汎用プロセッサコアについては、処理を担当する領域の左側に位置する領域を処理する汎用プロセッサコアからの同期信号を待つ（同期待ち）状態にある。
【００３２】
処理状態にある汎用プロセッサコア(1)の画像処理は、領域の左の画素から順次右の画素に対して実行される。この画像処理の際、処理に必要な画像データが共有メモリ３から取り出されてローカルメモリ８に転送される。なお、画像データの転送サイズは、共有メモリ３とローカルメモリ８との間で予め定められたサイズ、または、その倍数のサイズである。
【００３３】
また、領域内の一つの行について画像処理を実行する際には、１行前の処理結果が必要である。そのため、１行前の処理結果を保持し続ける。  
汎用プロセッサコア(1)の画像処理は、右側領域を処理する汎用プロセッサコア(2)との同期処理を図る画素まで連続して行われる。
【００３４】
隣接領域との同期処理解除について、図５の先頭２行分を拡大した図６を用いて説明する。図６では、「Ａ」と表記される部分が共有メモリ３とローカルメモリ８との間のＤＭＡ転送単位であるメモリブロックを表している。Ａｉ，ｊと表現された場合の添え字ｉは行数を表し、添え字ｊはブロック番号を表している。そして、Ｕｐ（ｘ）、Ｕｐｌｅｆｔ（ｘ）、Ｌｅｆｔ（ｘ）は、それぞれ画素ｘが依存する上、左上、左の画素の値を表している。また、図６の点線は汎用プロセッサコアの処理する領域の境界線を表している。
【００３５】
汎用プロセッサコア(2)が処理を開始する画素は、処理対象となる領域内で先頭行（＝１行）の左端にあたる画素で、図６中ではａｌｍで示される。この画素の画像処理を実行するための他の画素との計算依存関係を考慮する。計算に依存する画素Ｕｐ（ａｌｍ）、Ｕｐｌｅｆｔ（ａｌｍ）は、上の行に属し、画像領域外である。従って、画素ａｌｍの画像処理に影響する他の画素は、隣接左側画素Ｌｅｆｔ（ａｌｍ）のみである。即ち、この画素Ｌｅｆｔ（ａｌｍ）の処理結果が得られれば汎用プロセッサコア(2)は処理を開始できる。
【００３６】
画像処理において、元画像、および、処理済み画像は、転送サイズに最適化されたサイズで共有メモリとの間で転送される。汎用プロセッサコア(2)が処理に必要なデータを取得するためには、汎用プロセッサコア(2)の処理開始に必要な隣接左側画素が含まれるメモリブロックＡｌ，ｎのデータが、汎用プロセッサコア(1)により書き込まれた後である必要がある。
【００３７】
本実施の形態では、同期解除は隣接左側画素の処理が完了したタイミングではなく、さらの後のタイミングである、汎用プロセッサコア(1)が次の行である２行目の終端画素であるメモリブロックＡ２，ｎ−１の右端に属する画素の処理を完了した後に、この同期解除を行なう。これは、汎用プロセッサコア(1)の動作と汎用プロセッサコア(2)の開始動作との間に時間的なマージンを設けることによって安定した動作を確保するためである。
【００３８】
この同期解除の後、汎用プロセッサコア(1)は以降同期処理を行なわずに領域の最後の画素まで連続して画像処理を実行する。汎用プロセッサコア(2)は、汎用プロセッサコア(1)と同様に汎用プロセッサコア(3)に対する隣接右側領域の同期解除処理を行い、その後、領域の終端まで画像処理を連続して行なう。  
以降、最後の画像領域まで、同様にして汎用プロセッサコア６の処理が行なわれる。
【００３９】
図７は、汎用プロセッサコア６の動作を示すタイムチャートである。図７には、それぞれの汎用プロセッサコア内部の処理、共有メモリ間とのデータ転送、および、隣接汎用プロセッサコアとの同期解除処理のタイミングについて、これらを時間軸上に展開して表している。以下、図７を参照しつつ説明する。なお、図７に記載の処理の前には、予め、制御用プロセッサコア５と、処理を実行する複数の汎用プロセッサコア６に処理プログラムがロードされているものとする。
【００４０】
初めに、制御用プロセッサコア５が、バス７を介して、各汎用プロセッサコア６に処理開始を通知する。通知後、左端領域の処理を割り当てられた汎用プロセッサコア(1)が画像処理を開始し、それ以外の汎用プロセッサコア６は、左側領域からの同期信号を待機する。
【００４１】
汎用プロセッサコア(1)は、初めに共有メモリ３から、ＤＭＡ転送サイズだけブロックＡ１，１のデータを読み出す。読み込みが完了すると、汎用プロセッサコア(1)は、読み込んだ領域の画像処理を左側の画素から順次実行しつつ、次のブロックＡ１，２のデータの読み込み動作を実行する。
【００４２】
次に、処理が終わった初めのブロックＡ１，１のデータの共有メモリ３への書き出しと、次の処理ブロックＡ１，３のデータ読み込みとに並行して、ブロックＡ１，２の処理を実行する。  
このように、汎用プロセッサコア(1)は、共有メモリ３への読み込み・書き込みと並行して画像処理を行いながら、同期解除を行なう画素まで処理を続ける。そして、汎用プロセッサコア(1)は、汎用プロセッサコア(2)との同期処理を実行する。同期処理を実行した以降は、汎用プロセッサコア(1)は、汎用プロセッサコア(2)との同期を取らずに、領域の最後まで画像処理を行なう。
【００４３】
汎用プロセッサコア(1)との同期処理を実行した後、汎用プロセッサコア(2)は、２行目の最終画素を含むブロックまで処理を行い、汎用プロセッサコア(3)との同期処理を実行する。以降、汎用プロセッサコア(3)、汎用プロセッサコア(4)についても同様に処理が行われる。
【００４４】
このように汎用プロセッサコア６に割り当てられた処理は、左側隣接領域を処理する汎用プロセッサコア６との同期、当該領域の画像処理、右側隣接領域を処理する汎用プロセッサコア６との同期、当該領域終端までの画像処理であり、これらの処理は順次実行される。
【００４５】
なお、画像領域が大きい場合には、図８に示すように、汎用プロセッサコア数よりも多い数の領域に画像領域を分割し、順次汎用プロセッサコアを割り当てた後、再び、初めに割り当てた汎用プロセッサコアから順に画像領域を割り当てて、繰り返して１枚の画像を処理する。
【００４６】
次に、画像処理装置１における各部の制御、及びデータの扱いについて説明する。  
図９は、画像処理装置１の概略の処理を示すフローチャートである。図９に示す処理は、制御用プロセッサコア５が実行する。
【００４７】
アクトＡ０１において、制御用プロセッサコア５は、外部から処理に関する指示を受信する。即ち、処理する画像データの種別を受信する。ここでのデータ種別とは、画像全体を一括して受信して処理するか、バンドデータを、順次受信して処理するかを表わす。また、このとき、画像に対してどのような処理を実施させるかを表す処理種別も受信する。アクトＡ０２において、画像処理装置内において処理を実行する汎用プロセッサコア６に対して、指定された画像処理を実行するプログラムを送る。
【００４８】
アクトＡ０３において、処理対象の画像データを受信してその画像タイプを判定する。判定結果、受信した画像データがバンドデータの先頭／最終バンドか、一枚画像の場合、アクトＡ０４において、画像域外領域のデータ格納部分を、先に受信した処理に対応する初期値によって初期化する。判定結果、そうでない場合、即ちバンドデータで、かつ、先頭以外のものの場合、アクトＡ０５において、域外領域にメモリ内に格納された画像の一部をコピーする。
【００４９】
この処理の完了後、アクトＡ０６において、画像データを外部から受信する。続いて、アクトＡ０７において、受信した画像データの一部を、画像処理装置に直接接続された共有メモリ３にコピーする。コピーの完了後、アクトＡ０８において、それぞれの汎用プロセッサコア６に対して、処理開始を指示する。この後、それぞれの汎用プロセッサコア６が並列に画像処理を実施し、アクトＡ０９において、制御用プロセッサコア５は、これらの汎用プロセッサコア６から送信される処理終了の受信を待つ。
【００５０】
処理終了を受信した後、アクトＡ１０において、処理結果が格納された共有メモリ３から画像データを、受け渡し用メモリにコピーし、バンド、もしくは、１枚画像の結果を、処理依頼元に対して通知する。アクトＡ１２において、全バンドの処理が終了しているかどうかを調べ、画像タイプがバンドで、処理が完了していない場合（アクトＡ１２でＮｏ）は、再び、これまでの処理を繰り返し、全バンド、もしくは、１枚画像の処理が完了していれば（アクトＡ１２でＹｅｓ）、ここで画像処理は完了となる。
【００５１】
図１０は、汎用プロセッサコア６の概略の処理を示すフローチャートである。  
汎用プロセッサコア６で実行される処理については、処理の依頼側から指示される。即ち、処理の依頼側から処理を実行するプログラムが送信されて、これが実行されることで汎用プロセッサコア６上の処理が開始される。
【００５２】
アクトＰ０１において、汎用プロセッサコア６は、処理を行う画像上の領域を受信する。つづいて、アクトＰ０２において、独立した画像領域の画像データを受信する。ここで独立した画像領域とは、処理対象となる画像領域で、かつ、隣接領域の処理結果を利用しない画像領域のことである。
【００５３】
次に、アクトＰ０３において、隣接する汎用プロセッサコア６からの同期信号を待機する。即ち隣接領域において、同期をとる画素（同期画素）の画像処理が完了されるのを待つ。アクトＰ０４において、同期信号、即ち同期画素の処理が完了したことを受信すると、アクトＰ０５において、汎用プロセッサコア６は処理を開始する。アクトＰ０６において、処理結果は共有メモリ３にコピーする。
【００５４】
自領域において同期画素の処理が完了すると、アクトＰ０７において、同期信号、即ち同期画素までの処理を完了したことを隣接領域を処理する汎用プロセッサコア６に通知する。この処理の後、アクトＰ０８〜Ｐ０９において、汎用プロセッサコア６は割り当てられた領域の最後の画素まで処理と処理結果のコピーとを繰り返して実行する。処理の完了後、アクトＰ１０において、処理完了を制御用プロセッサコア５に対して通知する。
【００５５】
このように、依存関係により単純に並列化して処理することが困難な画像処理についても、画像を斜め方向に分割して画素間の依存関係を考慮した処理制御を採用することで、データ転送、汎用プロセッサ処理に適した並列化を行なうことができる。従って、更なるハードウェアを追加することによるアクセラレーションを行なわずに、高速化を実現することができる。
【００５６】
[第２の実施の形態]  
本発明の第２の実施の形態に係る画像処理装置は、画像処理方法が第１の実施の形態と異なっている。従って、第１の実施の形態と同一の部位には同一の符号を付してその詳細の説明は省略する。
【００５７】
第２の実施の形態に係る画像処理装置１で実施される並列画像処理方式について説明する。図１１は、汎用プロセッサコア６に割り当てられる領域を示す図である。この並列画像処理方式では、それぞれの汎用プロセッサコア６が処理する領域は、画像を縦、横方向に分割した領域である。そして、横方向についてはライン（行）単位で分割された画素領域を汎用プロセッサコア６に割り当て、縦方向については、縦領域＋縦領域の計算に関係する画素領域を汎用プロセッサコア６に割り当てる。そして、それぞれの汎用プロセッサコア６が並列に計算を実施する。
【００５８】
図１２は、最初に画像処理を実行する２つのプロセッサコアが処理する領域を表す図である。この方式では、常に２つのプロセッサコアが同時に処理を開始する。  
汎用プロセッサコア(1)の処理領域は、図１２の内、網掛け領域(1)＋(2)と、右斜線領域(1)である。汎用プロセッサコア(2)の処理領域は、同じく網掛け領域(1)＋(2)と、左斜線領域(2)の部分である。横方向に分割された領域を処理する汎用プロセッサコア(1) に割り当てられる領域の大きさは、画像１行分である。縦方向に分割された領域を処理する汎用プロセッサコア(2) に割り当てられる領域の大きさは、上辺がＤＭＡ転送のブロックサイズ×２、下辺がＤＭＡ転送のブロックサイズである台形領域である。
【００５９】
この領域の処理に続いて、内側の領域について汎用プロセッサコア(3)、(4)が同時に処理を開始する。  
図１３は、次に画像処理を実行する２つのプロセッサコアが処理する領域を表す図である。図１２に示す領域と比較して、汎用プロセッサコア(3)が処理する領域は、汎用プロセッサコア(1)が処理する領域よりもＤＭＡ転送のブロックサイズ列分少なく、汎用プロセッサコア(4)が処理する領域は、汎用プロセッサコア(2)が処理する領域よりも、１行、１列分少ないサイズの領域となっている。
【００６０】
図１４は、汎用プロセッサコア(1)、(2)の処理開始後に、汎用プロセッサコア(3)、(4)が処理を開始するための同期処理のタイミングを示す図である。  
汎用プロセッサコア(3)、(4)が開始点の画素を処理するためには、当該開始点の画素を基準として、上側の画素、左上の画素、及び、左側の画素の処理結果が必要である。
【００６１】
図１２に示すように、縦分割領域を処理する汎用プロセッサコア(2)の領域には、汎用プロセッサコア(1)の一部の領域が含まれ、また、汎用プロセッサコア(3)、(4)の開始点が依存する画素がすべて含まれる。よって、汎用プロセッサコア(2)の処理が、汎用プロセッサコア(3)、(4)の開始点の左側に位置する画素まで処理され、共有メモリ３に書き込まれた段階から汎用プロセッサコア(3)、(4)は処理を開始することができる。
【００６２】
図１５は、汎用プロセッサコア間の同期タイミングを詳細に示す図である。  
ブロックＡ１，１及びブロックＡ１，２は、汎用プロセッサコア(1) 、(2)が処理する領域であり、図１２の網掛け領域(1)＋(2)に相当する。ブロックＡ２，１及びブロックＡ３，１は、汎用プロセッサコア(2)が処理する領域である。  
ブロックＡ２，２は、汎用プロセッサコア(3) 、(4)が処理する領域であり、またその領域の一部は汎用プロセッサコア(2)が処理する。ブロックＡ２，３は、汎用プロセッサコア(4)が処理する領域であり、またその領域の一部は汎用プロセッサコア(2)が処理する。
【００６３】
ここで、汎用プロセッサコア(3) 、(4)が処理を開始する開始点の画素ａ２ｍは、ブロックＡ２，２の左端の画素である。この開始点の画素ａ２ｍが画像処理を実行できるためには、画素Ｕｐ（ａ２ｍ）、Ｕｐｌｅｆｔ（ａ２ｍ）、Ｌｅｆｔ（ａ２ｍ）の処理が終了していることが必要である。従って、左隣接画素であるＬｅｆｔ（ａ２ｍ）の処理が終了すれば、汎用プロセッサコア(3) 、(4)は処理を開始することができる。しかし上述のように、汎用プロセッサコア(2)の動作と汎用プロセッサコア(3) 、(4)の開始動作との間に時間的なマージンを設けることによって安定した動作を確保する。このため、汎用プロセッサコア(2)がブロックＡ３，１の右端の画素を処理したときを同期タイミングとする。
【００６４】
そこでブロックＡ３，１の右端の画素の処理が完了した段階で同期待ちが解除され汎用プロセッサコア(3) 、(4)は処理を開始する。処理開始点の画素は、その画素の上、左上、左側の画素の処理結果を必要とするため、同期処理の前に格納済みのこれらのデータを共有メモリ３から読み出して処理を行う。汎用プロセッサコア(2)は、この同期処理以降は同期処理を行わず、領域の終端部分まで処理を進める。以降、同様に、画像の右下方向に向かって並列に処理が行われる。
【００６５】
第１の実施の形態でも記述したように、バス７を介して汎用プロセッサコア６の同期処理を行う場合、同期を取る汎用プロセッサコア６の数が増えると同期処理に要する時間が増大する。領域を単純に縦、及び、横に分割して処理した場合、汎用プロセッサコア(3) 、(4)は、汎用プロセッサコア(1) 、(2)との間で同期処理を行わねばならない。即ち、４つの汎用プロセッサコアで同期処理を行う必要があり処理時間が増加する。
【００６６】
図１６は、汎用プロセッサコア６で処理する画像データと共有メモリ３に格納されている処理済みデータとを示す図である。
【００６７】
第２の実施の形態では、画像処理の依存性を利用して、１つの汎用プロセッサコアの処理領域に同期に必要となる画素を全て含めている。また、処理量が多い汎用プロセッサコアの動作に基づいて同期タイミングを決定するように構成することで、処理を開始した汎用プロセッサコアが共有メモリ３にアクセスするタイミングでは、多くの処理済みのデータが共有メモリ３上に存在していることになる。
【００６８】
次に、画像処理装置１における各部の制御、及びデータの扱いについて説明する。  
図１７は、画像処理装置１の概略の処理を示すフローチャートである。図１７に示す処理は、制御用プロセッサコア５が実行する。  
なお、図１７のフローチャートに示す処理は、図９のフローチャートに示す処理と同じであるためその詳細の説明は省略する。
【００６９】
図１８は、汎用プロセッサコア６の概略の処理を示すフローチャートである。  
汎用プロセッサコア６で実行される処理については、処理の依頼側から指示される。即ち、処理の依頼側から処理を実行するプログラムが送信されて、これが実行されることで汎用プロセッサコア６上の処理が開始される。
【００７０】
アクトＰ１０１において、汎用プロセッサコア６は、処理を行う画像上の領域を受信する。つづいて、アクトＰ１０２において、独立した画像領域の画像データを受信する。ここで独立した画像領域とは、処理対象となる画像領域で、かつ、隣接領域の処理結果を利用しない画像領域のことである。
【００７１】
次に、アクトＰ１０３において、隣接する汎用プロセッサコア６からの同期信号を待機する。即ち隣接領域において、同期をとる画素（同期画素）の画像処理が完了されるのを待つ。アクトＰ１０４において、同期信号、即ち同期画素の処理が完了したことを受信すると、アクトＰ１０５において、汎用プロセッサコア６は処理を開始する。アクトＰ１０６において、処理結果は共有メモリ３にコピーする。
【００７２】
アクトＰ１０７において、汎用プロセッサコア６は隣接する領域を処理する他の汎用プロセッサコア６に対して同期解除を通信する必要があるかどうかを判定する。  
同期解除を通信する必要がある場合（アクトＰ１０７でＹｅｓ）、自領域において同期画素の処理が完了すると、アクトＰ１０８において、同期信号、即ち同期画素までの処理を完了したことを隣接領域を処理する汎用プロセッサコア６に通知する。同期解除を通信する必要がない場合（アクトＰ１０７でＮｏ）、次のアクトＰ１０９を実行する。
【００７３】
アクトＰ１０９〜Ｐ１１０において、汎用プロセッサコア６は割り当てられた領域の最後の画素まで処理と処理結果のコピーとを続ける。処理の完了後、アクトＰ１１１において、処理完了を制御用プロセッサコア５に対して通知する。
【００７４】
ここで、汎用プロセッサコア６が隣接領域を処理する他の汎用プロセッサコア６に対して、同期解除の通信を行なう必要があるかどうかは、当該汎用プロセッサコア６が処理する対象の領域によって判定する。図１１に示すように、対象処理領域が画像バンドを縦横に分割した際の、縦分割領域に該当する場合は同期処理を行い、横分割領域に該当する場合は同期処理を行わないものとして判定する。
【００７５】
図１９は、汎用プロセッサコア６の動作を示すタイムチャートである。図１９には、それぞれの汎用プロセッサコア内部の処理、共有メモリ間とのデータ転送、および、隣接汎用プロセッサコアとの同期解除処理のタイミングについて、これらを時間軸上に展開して表している。図１９に記載する処理の前には、予め、制御用プロセッサコア５によって、処理用の複数の汎用プロセッサコア６にプログラムがロードされているものとする。
【００７６】
初めに、制御用プロセッサコア５が、バス７を介して、各汎用プロセッサコア６に処理開始を通知する。通知後、汎用プロセッサコア(1)、(2)が画像処理を開始し、それ以外の汎用プロセッサコア６は、隣接領域からの同期信号を待機する。
【００７７】
汎用プロセッサコア(1)は、画像処理装置１に格納されている画像領域の上辺、即ち、画像データの先頭行を処理する。汎用プロセッサコア(2)は、画像左端及び、それを含む数列分を処理する。ここで、列の数は、画像処理装置１に接続された共有メモリ３と、ローカルメモリ８との間でのデータ転送に最適化されたサイズである。
【００７８】
汎用プロセッサコア(1)、(2)は、初期のデータのロードとして、画像処理装置１に接続された記憶領域１１から画像データを共有メモリ３を介して取得する。汎用プロセッサコア(1)、(2)は、共有メモリ３に格納された処理前の画像データを、左端から順次、一定量ずつ取得して処理を行い、処理された結果を一定量ずつ共有メモリ３に書込む。
【００７９】
この画像処理装置１に接続された共有メモリ３と、ローカルメモリ８との間の画像転送、及び画像処理は、汎用プロセッサコア６内の計算処理ユニットと、ＤＭＡ転送ユニットにより並行して処理される。即ち、汎用プロセッサコア６は、一定量のデータを取得してこのデータを画像処理するが、この処理のタイミングで、処理済みデータ群の書き込み、および、次処理データ群の読込みを並行して実施する。
【００８０】
図１９に示すタイムチャートには、汎用プロセッサコア６間における同期処理タイミング、及び同期処理方式について詳細を記載している。このタイムチャートの見方は図７において既に説明している。従って、その詳細の説明は省略する。
【００８１】
汎用プロセッサコア (2)は、汎用プロセッサコア (3)、(4)との間での同期処理を実行した後、割り当てられた領域の最後まで処理を進める。汎用プロセッサコア (4)は、画像処理を継続し、隣接する領域に対して同期を行うための同期画素について処理を行ったときは、処理後のデータを共有メモリ３に書込むと共に、同期処理を実行する。そしてその後、汎用プロセッサコア (2)と同様に、割り当てられた領域の終端まで処理を実施する。
【００８２】
なお、画像領域が大きい場合には、図２０に示すように、汎用プロセッサコア数よりも多い数に画像領域を分割し、順次汎用プロセッサコアを割り当てた後、再び、初めに割り当てた汎用プロセッサコアから順に内部の画像領域を割り当てて、繰り返して１枚の画像を処理する。
【００８３】
以上説明した第２の実施の形態の並列画像処理方法では、割り当てられた領域の画像処理に続いて、さらにその内側領域を割り当て領域として処理が実行される。上述したように、画像領域を縦、横方向に分割して並列処理する際、一方の分割領域に次の並列処理との同期に必要な画素（同期画素）を含めることで、同期処理回数を減らして、より少ないオーバーヘッドでの並列処理が可能となる。
【００８４】
[第３の実施の形態]  
本発明の第３の実施の形態に係る画像処理装置は、第１の実施の形態と第２の実施の形態とを組み合わせた構成である。従って、第１及び第２の実施の形態と同一の部位には同一の符号を付してその詳細の説明は省略する。
【００８５】
第３の実施の形態では、複数の画像処理装置１を外部バスに接続する仕組みを備えている。外部バスに接続されている画像処理装置１の台数は、手動で、あるいは自動認識機能を備えたハードウェアなどにより自動で検出される。
【００８６】
外部バスに接続されている画像処理装置１が１台のみの場合には、図２１に示すように、本発明の第２の実施の形態に記載の画像処理方式に従って画像処理が実施される。  
外部バスに接続されている画像処理装置１が複数台の場合には、図２２に示すように、処理対象の画像データは、本発明の第１の実施の形態に沿った画像処理方式に従って画像処理される。
【００８７】
即ち、図２２に示す画像処理方式では、画像処理装置１の数に応じて本発明の第１の実施の形態に沿う形で画像領域を分割する。そして、それぞれの画像処理装置１では、分割された領域をさらに第１の実施の形態に沿う形で分割処理する。更にそれぞれの画像処理装置１において依存関係があり相互に情報のやり取りが必要な画素は、外部バスに接続する記憶領域１１を使って共有しながら処理を行う。
【００８８】
次に、画像処理装置１における各部の制御、及びデータの扱いについて説明する。  
図２３は、画像処理装置１の概略の処理を示すフローチャートである。図２３に示す処理は、制御用プロセッサコア５が実行する。
【００８９】
アクトＡ２０１において、制御用プロセッサコア５は、外部から処理の指示を受信する。即ち、処理する画像データの種別を受信する。ここでのデータ種別とは、画像全体を一括して受信して処理するか、バンドデータを、順次受信して処理するものかを表わす。また、このとき、画像に対してどのような処理を実施させるかを表す処理種別も受信する。
【００９０】
アクトＡ２０２において、外部バスに接続された画像処理装置１の数を調べる。画像処理装置１の数が１つの場合は、アクトＡ２０３において、第２の実施の形態の画像処理を実行するプログラムをそれぞれの汎用プロセッサコア６にロードする。
【００９１】
画像処理装置１の数が２つ以上の場合は、アクトＡ２０４において、第１の実施の形態の画像処理を実行すると共に、画像処理装置１間で、依存関係をもつ画素の同期処理とその処理結果の通信を実行するプログラムをそれぞれの汎用プロセッサコア６にロードする。
【００９２】
そして、このロードしたプログラムを用いてアクトＡ２０５からアクトＡ２１４の処理を実行する。なお、アクトＡ２０５からアクトＡ２１４の処理は、図９に示すアクトＡ０３からアクトＡ１２の処理と分割数、ならびに、領域が異なるだけであり、その動作は同様であるため詳細の説明は省略する。
【００９３】
図２４、図２５は、汎用プロセッサコア６の概略の処理を示すフローチャートである。なお、図２４、図２５は、上述のように画像処理装置１の数が２のときの処理フローである。  
汎用プロセッサコア６で実行される処理については、処理の依頼側から指示される。即ち、処理の依頼側から処理を実行するプログラムが送信されて、これが実行されることで汎用プロセッサコア６上の処理が開始される。
【００９４】
アクトＰ０１において、汎用プロセッサコア６は、処理を行う画像上の領域を受信する。つづいて、アクトＰ０２において、独立した画像領域の画像データを受信する。ここで独立した画像領域とは、処理対象となる画像領域で、かつ、隣接領域の処理結果を利用しない画像領域のことである。
【００９５】
アクトＰ２０３において、汎用プロセッサコア６は、他の画像処理装置１からの同期信号を待機するかどうかを判断する。他の画像処理装置１の汎用プロセッサコア６の処理結果を利用する場合（アクトＰ２０３でＹｅｓ）、アクトＰ２０４において当該外部の汎用プロセッサコア６の処理結果を待機する。他の画像処理装置１の汎用プロセッサコア６の処理結果を利用しない場合（アクトＰ２０３でＮｏ）、アクトＰ２０５において、同じ画像処理装置１の汎用プロセッサコア６からの同期信号を待つ。
【００９６】
アクトＰ２０６において、同期信号、即ち同期画素の処理が完了したことを受信すると、アクトＰ２０７において、汎用プロセッサコア６は処理を開始し、隣接領域に対して依存関係に基づく同期処理を行う画素（同期画素）まで画像処理を実施する。  
アクトＰ２０８において、同期信号を他の画像処理装置１に送信するかどうかを判断する。同期対象が他の画像処理装置１であった場合（アクトＰ２０８でＹｅｓ）は、アクトＰ２０９において、外部バスに接続された外部メモリ上に処理結果を書込む。同期対象が同じ画像処理装置１の汎用プロセッサコア６であった場合（アクトＰ２０８でＮｏ）は、アクトＰ２１０において、共有メモリに処理結果を書込む。
【００９７】
そして、アクトＰ２１１において、同期信号、即ち同期画素までの処理を完了したことを該当する汎用プロセッサコア６に通知する。この処理の後、アクトＰ２１２において、画像処理を続行する。
【００９８】
アクトＰ２１３において、処理結果を他の画像処理装置１に送信するかどうかを判断する。送信先が他の画像処理装置１であった場合（アクトＰ２１３でＹｅｓ）は、アクトＰ２１４において、外部バスに接続された外部メモリ上に処理結果を書込む。送信先が同じ画像処理装置１の汎用プロセッサコア６であった場合（アクトＰ２１３でＮｏ）は、アクトＰ２１５において、共有メモリに処理結果を書込む。  
そして、処理の完了後、アクトＰ２１６において、処理完了を制御用プロセッサコア５に対して通知する。
【００９９】
ここで、上述のフローでは画像処理装置の数が２の場合について説明したが、画像処理装置の数が３以上の場合についても、分割数、ならびに、領域が異なるだけで、処理は同様に行われる。
【０１００】
このように、第３の実施形態の画像処理装置は、複数の画像処理装置を用いて、汎用プロセッサコア間のデータ転送、同期処理のオーバーヘッドを考慮した処理方式を適用することで、性能向上を実現する。
【０１０１】
以上説明した各実施の形態の画像処理装置によれば、複数プロセッサコアを持つ画像処理システムにおいて、画素間に依存関係がある画像処理を、並列化によって高速に処理することができる。
【０１０２】
本発明第１の実施形態の画像処理方式により、複数の計算コアからなる装置において、ある画素の処理が、他の画素の結果を利用するような依存性を持った画像処理を、複数のプロセッサコアにより並列処理することが可能となり、高速な処理の実現が可能となる。
【０１０３】
本発明第２の実施形態の画像処理方式により、複数の計算コアからなる装置において、同期処理のオーバーヘッドがある程度大きい場合でも、これを考慮した並列処理が可能となるため、ハードウェアの制約が存在する画像処理環境においても、高速処理を実現することができる。
【０１０４】
本発明第３の実施形態の画像処理方式により、複数のコアからなる並列処理のプロセッサをさらに複数増設し、デバイスの接続形態に適した、同期・通信オーバーヘッドを考慮した並列処理を実現することができる。従って、複数コアによるプロセッサにおいて性能が不足した場合でも、このプロセッサを複数用いて本実施の形態のように構成することで更に性能の高い画像処理を実現することが可能となる。
【０１０５】
尚、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。  
また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【産業上の利用可能性】
【０１０６】
本発明は、画素間に依存関係がある画像処理の処理効率向上を簡便に実現することのできる画像処理装置を製造する産業において利用することができる。
【符号の説明】
【０１０７】
１…画像処理装置、２…外部インタフェース、３…共有メモリ、４…メモリインタフェース、５…制御用プロセッサコア、６…汎用プロセッサコア、７…バス、８…ローカルメモリ、１０…制御手段、１１…記憶領域。
【先行技術文献】
【特許文献】
【０１０８】
【特許文献１】特開２００７−８７４１７号公報
【図１】
0005112386.tif 000002
【図２】
0005112386.tif 000003
【図３】
0005112386.tif 000004
【図４】
0005112386.tif 000005
【図５】
0005112386.tif 000006
【図６】
0005112386.tif 000007
【図７】
0005112386.tif 000008
【図８】
0005112386.tif 000009
【図９】
0005112386.tif 000010
【図１０】
0005112386.tif 000011
【図１１】
0005112386.tif 000012
【図１２】
0005112386.tif 000013
【図１３】
0005112386.tif 000014
【図１４】
0005112386.tif 000015
【図１５】
0005112386.tif 000016
【図１６】
0005112386.tif 000017
【図１７】
0005112386.tif 000018
【図１８】
0005112386.tif 000019
【図１９】
0005112386.tif 000020
【図２０】
0005112386.tif 000021
【図２１】
0005112386.tif 000022
【図２２】
0005112386.tif 000023
【図２３】
0005112386.tif 000024
【図２４】
0005112386.tif 000025
【図２５】
0005112386.tif 000026