特許第5835942号(P5835942)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧
特許5835942画像処理装置、その制御方法及びプログラム
<>
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000002
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000003
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000004
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000005
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000006
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000007
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000008
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000009
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000010
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000011
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000012
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000013
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000014
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000015
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000016
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000017
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000018
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000019
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000020
  • 特許5835942-画像処理装置、その制御方法及びプログラム 図000021
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5835942
(24)【登録日】2015年11月13日
(45)【発行日】2015年12月24日
(54)【発明の名称】画像処理装置、その制御方法及びプログラム
(51)【国際特許分類】
   G06T 1/20 20060101AFI20151203BHJP
【FI】
   G06T1/20 C
【請求項の数】14
【全頁数】29
(21)【出願番号】特願2011-112897(P2011-112897)
(22)【出願日】2011年5月19日
(65)【公開番号】特開2012-27901(P2012-27901A)
(43)【公開日】2012年2月9日
【審査請求日】2014年5月15日
(31)【優先権主張番号】特願2010-145528(P2010-145528)
(32)【優先日】2010年6月25日
(33)【優先権主張国】JP
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(72)【発明者】
【氏名】高坂 三千聡
(72)【発明者】
【氏名】石川 尚
【審査官】 佐藤 実
(56)【参考文献】
【文献】 特開2003−281518(JP,A)
【文献】 特開2006−196937(JP,A)
【文献】 特開2002−150281(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/20
(57)【特許請求の範囲】
【請求項1】
パイプライン接続されている複数の処理モジュールによって画像データを処理する画像処理装置であって、
画像データを第1サイズ毎に処理する処理モジュールを含む複数の処理モジュールを備える第1パイプライン処理手段と、
前記第1パイプライン処理手段から分岐し、前記第1サイズとは異なる第2サイズ毎に画像データを処理する処理モジュールを含む複数の処理モジュールを備える第2パイプライン処理手段と、
を備え、
前記第2パイプライン処理手段は、前記第1パイプライン処理手段から前記第1サイズの部分画像データを取得し前記第2サイズの部分画像データに変更する変更手段を先頭に備えることを特徴とする画像処理装置。
【請求項2】
前記変更手段は、
前記第1サイズが前記第2サイズよりも大きい場合に、前記第2サイズに一致するように前記第1サイズの部分画像データの周辺部から所定サイズのデータを削除し、
前記第2サイズの部分画像データを後段の処理モジュールへ送信する
ことを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記変更手段は、
前記第1サイズが前記第2サイズよりも小さい場合に、前記第2サイズに一致するように前記第1サイズの部分画像データの周辺部に所定サイズのデータを付加し、
前記第2サイズの部分画像データを後段の処理モジュールへ送信する
ことを特徴とする請求項1又は2に記載の画像処理装置。
【請求項4】
前記第2パイプライン処理手段は、
前記第1パイプライン処理手段に合流するように構成され、
前記第2パイプライン処理手段の末尾に配置され、前記第2サイズの部分画像データから前記第1サイズの部分画像データに再変更する再変更手段を更に備える
ことを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
【請求項5】
パイプライン接続されている複数の処理モジュールによって画像データを処理する画像処理装置であって、
画像データを第1サイズ毎に処理する処理モジュールを含む複数の処理モジュールを備える第1パイプライン処理手段と、
前記1パイプライン処理手段へ合流し、前記第1サイズとは異なる第2サイズ毎に画像データを処理する処理モジュールを含む複数の処理モジュールを備える第2パイプライン処理手段と、
前記第2パイプライン処理手段の末尾に配置され、前記第2サイズの部分画像データを前記第1サイズの部分画像データに変更する変更手段と、
を備えることを特徴とする画像処理装置。
【請求項6】
前記変更手段は、
前記第2サイズが前記第1サイズよりも大きい場合に、前記第1サイズに一致するように前記第2サイズの部分画像の周辺部から所定サイズのデータを削除し、
前記第1サイズの部分画像データを後段の処理モジュールへ送信する
ことを特徴とする請求項5に記載の画像処理装置。
【請求項7】
前記変更手段は、
前記第2サイズが前記第1サイズよりも小さい場合に、前記第1サイズに一致するように前記第2サイズの部分画像の周辺部に所定サイズの付加データを付加し、
前記第1サイズの部分画像データを後段の処理モジュールへ送信する
ことを特徴とする請求項5又は6に記載の画像処理装置。
【請求項8】
前記変更手段は、前段のモジュールから入力された画像データのうち、前記画像処理装置に入力された画像データに対応する有効領域に含まれる画像データを変更せずに、前記有効領域の周囲に位置する補助領域の画素数を変更した画像データを出力することを特徴とする請求項5に記載の画像処理装置。
【請求項9】
前記変更手段は、前記補助領域の一部又は全部を削除することを特徴とする請求項8に記載の画像処理装置。
【請求項10】
前記変更手段は、前記前段のモジュールから入力された画像データに新たな補助領域を付加することを特徴とする請求項8に記載の画像処理装置。
【請求項11】
前記第1パイプライン処理手段が備える前記複数の処理モジュールと前記第2パイプライン処理手段が備える前記複数の処理モジュールとを含む複数のモジュールは、リングバスによって接続されていることを特徴とする請求項1乃至10のいずれか1項に記載の画像処理装置。
【請求項12】
パイプライン接続されている複数の処理モジュールによって画像データを処理する画像処理装置の制御方法であって、
前記画像処理装置は、
画像データを第1サイズ毎に処理する処理モジュールを含む複数の処理モジュールを備える第1パイプライン処理手段と、
前記第1パイプライン処理手段から分岐し、前記第1サイズとは異なる第2サイズ毎に画像データを処理する処理モジュールを含む複数の処理モジュールを備える第2パイプライン処理手段と、
を備え、
前記制御方法は、
前記第2パイプライン処理手段の先頭に配置された変更手段が、前記第1パイプライン処理手段から取得した前記第1サイズの部分画像データを前記第2サイズの部分画像データに変更する工程を有することを特徴とする制御方法。
【請求項13】
パイプライン接続されている複数の処理モジュールによって画像データを処理する画像処理装置の制御方法であって、
前記画像処理装置は、
画像データを第1サイズ毎に処理する処理モジュールを含む複数の処理モジュールを備える第1パイプライン処理手段と、
前記1パイプライン処理手段へ合流し、前記第1サイズとは異なる第2サイズ毎に画像データを処理する処理モジュールを含む複数の処理モジュールを備える第2パイプライン処理手段と、
を備え、
前記制御方法は、
前記第2パイプライン処理手段の末尾に配置された変更手段が、前記第2サイズの部分画像データを前記第1サイズの部分画像データに変更する工程を有する
ことを特徴とする制御方法。
【請求項14】
請求項12又は13に記載の制御方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理装置、その制御方法及びプログラムに関する。
【背景技術】
【0002】
従来、複数のハードウェアで処理を並列に実行する方法として、特許文献1に記載されているようなバス型のパイプライン接続方式によるものがあった。しかしながら、この接続方式を用いると入力されたデータは、複数のプロセッサが物理的に接続された順序で処理され、出力端子において外部メモリ等へ出力される。したがって、複数のプロセッサに任意の処理順序でデータを処理させることができなかった。こうした課題を解決するために、プロセッサ間をリング型のバスで接続する方式がたとえば特許文献2、特許文献3および特許文献4により提案されている。
【0003】
さらに、シグナルフローグラフの考え方を適用して、リングバス上に送出するデータに、このデータを最も直近に処理したプロセッサを特定可能にする送信元ID(識別子)を付加する方法がある。そして、送信元IDが設定された送出データを、後続するプロセッサが待ち受けることにより、処理フローを分岐させることが出来る。以下では、この処理フローの分岐について簡単に説明する。
【0004】
図17は、データの処理を行う4つの処理部A〜Dと、データの入出力を行う1つの入出力部2108とを含むリングバス型の処理ブロックを説明する図である。この処理ブロックでは、複数の通信部2103〜2107が環状に接続されており、通信部2103〜2107のそれぞれに対して、処理部A〜Dのいずれか1つまたは入出力部2108が接続されている。図18は、図17の処理ブロックを用いて行われるデータの処理の論理的な接続関係を表すシグナルフローグラフの例を示す。シグナルフローグラフにおいて、矢印で示された辺は処理を表し、それぞれ処理部A〜Dにおける処理に対応する。また、丸で示されたノードは処理の論理的な接続関係を表す。各ノードにはIDが付されている。通信部2103〜2107はそれぞれ送信元IDレジスタおよび待ち受けIDレジスタを有する。送信元IDレジスタは、通信部に接続された処理部を示す辺の終点のノードのIDが格納されている。送信元IDレジスタに格納されたIDを送信元IDと呼ぶ。通信部は、接続された処理部で処理が行われた場合に、自身の送信元IDをデータに付して後段の通信部へ転送する。これにより、後段の通信部は転送されたデータを最も直近に処理した処理部を特定することができる。待ち受けIDレジスタは、通信部に接続された処理部を示す辺の始点のノードのIDを格納する。待ち受けIDレジスタに格納されたIDを待ち受けIDと呼ぶ。通信部は、自身の待ち受けIDと、受信したデータに付された送信元IDとが一致する場合に、このデータを処理部に渡して処理させる。このように、通信部が送信元IDレジスタおよび待ち受けIDレジスタを有することで、物理的に環状に接続された通信部を有する処理ブロックにおいて、処理フローを論理的に分岐することができる。以下、図18を用いて、処理フローが分岐を有しない場合の具体例と処理フローが分岐を有する場合の具体例とをそれぞれ説明する。
【0005】
図18(a)は、まず入出力部2108がデータをリングバスに投入し、処理部A、処理部B、処理部C、処理部Dが順にデータを処理し、入出力部2108が処理後のデータを外部メモリなどに送出する場合のシグナルフローグラフを示す。グラフによれば、処理部Aに対応する辺はノード“1”からノード“2”へ接続されるので、処理部Aに接続された通信部2104はノード“1”から受信したデータを処理部Aに渡して処理し、処理後のデータをノード“2”へ送信する。そこで、通信部2104において、送信元IDレジスタに“2”を格納し、待ち受けIDレジスタに“1”を格納しておく。
【0006】
同様に、処理部Bに接続された通信部2105において、送信元IDレジスタに“3”を格納し、待ち受けIDレジスタに“2”を格納しておく。処理部Cに接続された通信部2106において、送信元IDレジスタに“4”を格納し、待ち受けIDレジスタに“3”を格納しておく。処理部Dに接続された通信部2107において、送信元IDレジスタに“5”を格納し、待ち受けレジスタに“4”を格納しておく。
【0007】
また、入出力部2108に接続された通信部2103において、送信元IDレジスタに“1”を格納し、待ち受けIDレジスタに“5”を格納しておく。以上のように、各通信部2103〜2107に対して各レジスタの設定を所望の処理順序に従って行い、その後にデータ処理を開始すると、以下に示すようなデータ転送が行われる。
【0008】
入出力部2108は、入力端子2101から入力されたデータを通信部2103に渡す。通信部2103は、受け取ったデータと、自身の送信元IDである“1”とを有するパケットを生成して、後段の通信部2104へ転送する。通信部2104は、転送されたパケット内の送信元IDと自身の待ち受けIDとを比較する。この例では一致するため、通信部2104はパケット内のデータを処理部Aに入力する。そして、処理部Aで処理されたデータと、自身の送信元IDである“2”とを有するパケットを生成して、後段の通信部2105へ転送する。以下、同様に処理が行われ、処理部A〜Dで順に処理されたデータを有し、送信元IDとして“5”を有するパケットが通信部2107から通信部2103へ転送される。通信部2103はこのパケットからデータを取り出し、入出力部2108へ渡す。入出力部2108はこのデータを出力端子2102から出力する。
【0009】
図18(b)は、処理フローが分岐を有する場合のシグナルフローグラフを示す。この処理フローでは、まず入出力部2108がデータをリングバスに投入し、処理部Aがこのデータを処理し、このデータを処理部Bと処理部Cとがさらに処理し、この結果のデータを処理部Dが処理したデータを入出力部2108が外部メモリなどに送出する。図18(b)のように処理フローが分岐を有する場合でも、グラフに示される接続関係を満たすように、通信部2103〜2107の送信元IDレジスタおよび待ち受けIDレジスタが設定される。すなわち、通信部2103において、送信元IDレジスタに“1”を格納し、待ち受けIDレジスタに“4”を格納しておく。通信部2104において、送信元IDレジスタに“2”を格納し、待ち受けIDレジスタに“1”を格納しておく。通信部2105と通信部2106とのそれぞれにおいて、送信元IDレジスタに“3”を格納し、待ち受けIDレジスタに“2”を格納しておく。通信部2107において、送信元IDレジスタに“4”を格納し、待ち受けIDレジスタに“3”を格納しておく。以上のように各レジスタを設定することで、処理フローを分岐させることが出来る。
【0010】
上述のように、プロセッサ間をリング型のバスで接続する方式において処理フローを分岐ことができる。一方、実際の画像処理、例えばフィルタ処理などでは、注目画素を処理するために、注目画素の周囲の画素を参照することがある。このような処理において、入力画像の4つの辺の近くに位置する画素を処理するために、入力画像の外側の画素を参照しなければならない場合がある。このような周囲の画素を参照せずに処理を行う場合、フィルタ処理等で参照する周辺画素の幅分の画素を入力画像から削ってしまうことになるため、入力画像の画素数と出力画像の画素数とが異なってしまうという問題点が発生する。このような場合、複数の異なるフィルタ係数を持つフィルタに連続して通さなければならなくなるので画像処理に問題が起きやすい。なぜなら、フィルタをかける回数が多くなると画像の画素数がどんどん小さくなり、最終的な出力画像において有効な画像範囲を確保することが難しくなるためである。このため、図19に示すように、入力画像2402に対してフィルタ処理を行う場合に、入力画像2402の端部に位置する画素に基づいて入力画像2402の外側の領域2401(斜線部)を作成する。そして、入力画像2402に領域2401を付加した画像2403をフィルタ処理する。以下、入力画像2402の外側の領域2401を補助領域と呼ぶ。補助領域を付加することにより、フィルタ処理により補助領域が消費されたとしても、入力画像2402と同じ画素数を有する出力画像を得ることができる。
【0011】
特許文献5では、データに制御コードを付けてリング状のバスに送出し、制御コードに従ってデータの取り込みの制御を行うことが提案されている。この制御コードにより、オーバーラップ部のデータを複数のプロセッサで受信できるようにし、オーバーラップ部のデータを送付対象プロセッサごとに重複してリング上のバスに送出する。そして、複数のプロセッサのそれぞれにオーバーラップ部のデータ設定が行われ、データ処理がプロセッサごとに分割して行われる。また、特許文献6では、少ない内部メモリを効率よく使用して、入力されたデータを用い、周辺画素を生成する技術が提案されている。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特許第2734246号公報
【特許文献2】特開平01−023340号公報
【特許文献3】特許第2834210号公報
【特許文献4】特許第2518293号公報
【特許文献5】特開昭63−247858号公報
【特許文献6】特開2009−151571号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
画像データを逐次的に処理する場合に、図18(b)に示すような分岐を有する処理フローを正しく処理が行えない場合が生じる。1つの例として、処理部Bが注目画素から上下左右5画素の領域を参照し、処理部Cが注目画素から上下左右3画素の領域を参照する場合を考える。この際、図18(b)に示す処理フローにおいて、処理部Bと処理部Cにはそれぞれ処理部Aから同一の画像データが供給される。この画像データの画素数を仮に100×100画素とすると、処理部Bは、画像の上下左右から5画素ずつ消費して90×90画素の画像データを出力する。一方で、処理部Cは、画像の上下左右から3画素ずつ消費して94×94画素の画像データを出力する。このため、処理部Dは、異なる2つの画像の位置合わせのように、複雑な処理を行わなければならなくなる。
【0014】
本発明は係る課題に鑑み、本発明の1つの側面は、画像データを逐次的に処理する画像処理装置において、分岐を有する処理フローを効率的に実行するための技術を提供する。
【課題を解決するための手段】
【0015】
この課題を解決するため、本発明の1つの側面に係る画像処理装置は、パイプライン接続されている複数の処理モジュールによって画像データを処理する画像処理装置であって、画像データを第1サイズ毎に処理する処理モジュールを含む複数の処理モジュールを備える第1パイプライン処理手段と、前記1パイプライン処理手段から分岐し、前記第1サイズとは異なる第2サイズ毎に画像データを処理する処理モジュールを含む複数の処理モジュールを備える第2パイプライン処理手段とを有し、前記第2パイプライン処理手段は、前記第1パイプライン処理手段から前記第1サイズの部分画像データを取得し前記第2サイズの部分画像データに変更する変更手段を先頭に備えることを特徴とする。
【発明の効果】
【0016】
本発明によれば、画像データを逐次的に処理する画像処理装置において、分岐を有する処理フローを効率的に実行するための技術が提供される。
【図面の簡単な説明】
【0017】
図1】第1実施形態の画像処理装置の構成を示す図。
図2】パケットの構造例を示す図。
図3】通信部の構成を示す図。
図4】受信部の構成を示す図。
図5】送信部の構成を示す図。
図6】無効化通信部の構成を示す図。
図7】無効化部における処理のフローチャート。
図8】第1実施形態における分岐フローの構成例を示す図。
図9】第2実施形態における画像処理装置の構成を示す図。
図10】無効化通信部の受信部の構成を示す図。
図11】分岐を有する処理フローの各種構成例を示す図。
図12】第5実施形態の付加モジュールの構成を示す図。
図13】第5実施形態の付加部の処理のためのフローチャート。
図14】第6実施形態の付加通信部の受信部構成を示す図。
図15】画像処理装置の参考例の構成を示す図。
図16】パケットの構造の参考例を示す図。
図17】3つのデータ処理部、1つのデータ入出力部の場合の参考ブロック図。
図18】シグナルフローグラフの参考例を示す図。
図19】補助領域の例を示す図。
図20】第5実施形態の付加部の処理における出力部のフローチャート。
【発明を実施するための形態】
【0018】
<第1実施形態>
まず、本実施形態の比較対象として、画像データを逐次的に処理する画像処理装置において、分岐フローが発生するとパイプラインを移動するパケットの利用効率が低下する例について説明する。
【0019】
図15は、通信路と複数のモジュールとを備える画像処理装置1901の例示の構成を示す。この例において複数のモジュールは通信路により物理的に直列に接続されている。このように物理的に直接に接続された複数のモジュールをパイプラインと呼ぶ。一列に並んだ各モジュールは、図において矢印で示されるように、前段のモジュール(図面で左側のモジュール)から転送された画像データを後段のモジュール(図面で右側のモジュール)へ転送する。画像処理装置1901は複数のモジュールとして、入力管理モジュール1902、出力管理モジュール1903、および処理モジュール1904を含む。入力管理モジュール1902は、外部メモリなどから処理対象の画像データを取得し、この画像データを後段のモジュールに転送する。出力管理モジュール1903は、前段のモジュールから転送された処理済みの画像データを外部メモリなどに出力する。処理モジュール1904は、前段のモジュールから転送された画像データの処理を必要に応じて行う。図15に示す例において、画像処理装置1901は1つの入力管理モジュール1902、2つの出力管理モジュール1903、および3つの処理モジュール1904を備えるが、各モジュールの個数はこれに限定されない。例えば、画像処理装置1901は複数の入力管理モジュール1902を備えてもよく、この場合にそれぞれの入力管理モジュール1902が処理対象の画像データを取得する。
【0020】
各モジュールは通信部1905を備える。通信部1905は画像データをパケットに格納してモジュール間の通信を行う。パケットの構造については後述する。入力管理モジュール1902はさらに入力部1906を備える。入力部1906は、外部メモリなどから画像データを取得し、後続の処理で消費される所定サイズの補助領域を周辺部に付して、通信部1905に渡す。出力管理モジュール1903はさらに出力部1907を備える。出力部1907は、通信部1905からのデータを画像データにまとめて外部メモリなどへ出力する。処理モジュール1904はさらに処理部1908を備える。処理部1908は通信部1905から受信した画像データに所定の処理を施して、処理後の画像データを通信部1905へ戻す。
【0021】
図16は、図15の画像処理装置1901においてモジュール間の通信に用いられるパケットの構造を示す。フィールド2001は、このパケットが保持している画像データが処理されるべきかどうかを示すフラグを格納する。すなわち、これはパケットが現在使用中であるかどうかを示す有効フラグと同じ意味である。以下、フィールド2001内のフラグをVALIDビットと呼ぶ。例えば、VALIDビットが“1”の場合に画像データが“有効”であることを示し、VALIDビットが“0”の場合に画像データが“無効”であることを示す。
【0022】
フィールド2002は、このパケット内のデータを最も直近に処理したモジュールの送信元IDを格納する。画像処理装置1901の複数のモジュールは、各モジュールを識別するために一意のIDを有する。例えば、図15に示されるように、各モジュールはパイプラインの上流から下流に向けて順にAからFのIDを有する。各通信部1905は、送信元IDレジスタおよび待ち受けIDレジスタを有し、送信元ID及び待ち受けIDがパイプライン処理に先立って設定されている。フィールド2003はデータを格納する。データは画素値であってもよいし、コマンドであってもよい。
【0023】
図11を用いてパイプラインの分岐について説明する。図11のグラフにおいて、四角で示されたノードはモジュールによる処理を表し、矢印は処理の順序や接続関係を表す。ここでは図11(a)の例だけを説明し、他の例については後述する。図11(a)に示す処理フローは6つのモジュールA〜Fで行われる処理により構成される。グラフの各ノードはモジュールA〜Fにおける処理に対応する。モジュールAは入力管理モジュール1902であり、モジュールB、C、Dは処理モジュール1904であり、モジュールE、Fは出力管理モジュール1903である。この処理フローでは、まずモジュールAが処理を行う。ここで、モジュールAは入力管理モジュール1902であるため、モジュールAにおける処理とはデータの取得である。次に、モジュールAが処理したデータ、すなわち取得したデータをモジュールBで処理する。モジュールBは処理モジュールであるため、モジュールBにおける処理とは処理部1908による処理である。モジュールBで処理されたデータはモジュールCとモジュールDとの両方に転送されてそれぞれ処理される。最後に、出力管理モジュール1903であるモジュールE、Fがデータの出力を行う。図11(a)に示された処理フローを実現するように、処理に先立って各通信部に送信元IDおよび待ち受けIDを設定しておく。
【0024】
ここで、図11(a)に示される処理フローにおいて、モジュールC、Dの処理部がそれぞれ異なるサイズの補助領域を必要としている場合、どちらか一方にだけ適応できる補助領域を付加してしまうと、他方の処理が正しく行えなくなることがある。
【0025】
これを避けるため、画像処理装置1901を2回に分けて起動し、A、B、C、Eという順のパイプライン処理とA、B、D、Fという順のパイプライン処理を並行して行う手法が考えられる。例えば、入力管理モジュールA´をさらに1つ追加して、モジュールA、B、C、Eによる処理フローとモジュールA´、B、D、Fによる処理フローとを画像処理装置1901内に混在させる。
【0026】
しかし、画像処理装置1901を2回に分けて起動する手法では、画像処理装置1901の起動処理や設定処理などのオーバーヘッドが必要となるため、画像処理全体として必要となる時間が増えてしまう。また、モジュールA−B間のパケット数が2倍になってしまうため、処理速度が低下する。
【0027】
以下において、分岐を有する処理フローのうち、論理的に直列に接続された一連の部分の1つを第1処理フローと呼び、第1処理フローから分岐した部分を第2処理フローと呼ぶ。例えば、図11(a)の例では、モジュールA〜Fによる処理で構成される処理フローのうち、モジュールA、B、C、E(第1モジュール群)が第1処理フローを実施し、モジュールD、F(第2モジュール群)が第2処理フローを実施する。第2処理フローは第1処理フローに合流してもよい。また、第2処理フローから更に分流する処理フローは第3処理フローと呼ぶ。ここで、図11(a)の例では、モジュールA、B、D、Fが第1処理フローを実施し、モジュールC、Eが第2処理フローを実施すると表現してもよい。また、処理フローのうち、処理が並行している部分をそれぞれ分岐フローと呼ぶ。例えば、図11(a)の例において、モジュールD、Fによる処理が第1分岐フローを構成し、モジュールC、Eによる処理が第2分岐フローを構成する。
【0028】
図1は、本実施形態に係る画像処理装置101の全体構成を示す図である。画像処理装置101は、画像データを部分画像データ(ブロック、数ピクセル、画素)毎に処理する複数のモジュールを備えている。モジュールとして出力管理モジュール102、入力管理モジュール103、複数の処理モジュール104、および無効化モジュール105を備える。これらのモジュールの通信部106は直列に接続されている。一列に並んだ各モジュールは、図において矢印で示されるように、前段のモジュール(図面で左側のモジュール)から転送されたデータを後段のモジュール(図面で右側のモジュール)へ転送する。入力管理モジュール103はさらに入力部107を備える。出力管理モジュール102はさらに出力部110を備える。処理モジュール104はさらに処理部108を備える。無効化モジュール105はさらに無効化部109を備える。入力部107、出力部110、および処理部108はそれぞれ図15の入力部1906、出力部1907、および処理部1908と同様のため重複する説明を省略する。無効化部109は、画像データの画素数を変更するため、設定値に応じてパケットに含まれる画像データの無効化を行う。画像データの無効化を行うことによって、補助領域のうち対応する画素を有する部分が削除される。また、無効化部109は、前段のモジュールから入力された画像データのうち、画像処理装置101に入力された画像データに対応する有効領域に含まれる画像データを変更しない。無効化部109は、有効領域の周囲に位置する補助領域の一部を削除した画像データを出力する。
【0029】
図2は、図1の画像処理装置101においてモジュール間の通信に用いられるパケットの例示の構造を示す。フィールド201〜203は、図16のフィールド2001〜2003と同様のため重複する説明を省略する。フィールド204は、フィールド203内の画像データの含む画素がページの先頭位置に属するか否か、すなわちこのパケットの含む画素がページの先頭の行に含まれるか否かを示すページスタートビット(以下、PSビット)を格納する。PSビットはこのパケットの含む画素がページ先頭位置に属する場合に“1”となり、属さない場合に“0”となる。フィールド205は、このパケットの含む画素がページの終端位置に属するか否か、すなわちこのパケットの含む画素がページの最後の行に含まれるか否かを示すページエンドビット(以下、PEビット)を格納する。PEビットはこのパケットの含む画素がページ終端位置に属する場合に“1”となり、属さない場合に“0”となる。フィールド206は、このパケットの含む画素がライン先頭位置に属するか否か、すなわちこのパケットの含む画素がページの先頭の列に含まれるか否かを示すラインスタートビット(以下、LSビット)を格納する。LSビットはこのパケットの含む画素がライン先頭位置に属する場合に“1”となり、属さない場合に“0”となる。フィールド207は、このパケットの含む画素がライン終端位置に属するか否か、すなわちこのパケットの含む画素がページの最後の列に含まれるか否かを示すラインエンドビット(以下、LEビット)を格納する。LEビットはこのパケットの含む画素がライン終端位置に属する場合に“1”となり、属さない場合に“0”となる。これまでに述べたPSビット、PEビット、LSビットおよびLEビットをまとめて画素位置属性情報と呼ぶ。本実施形態では、入力部107が取得した画像に補助領域を付してページを作成する。そして、入力部107がこのページの上部から下部に向かって、ラインごとに左から右に画素のスキャンを行い、1画素ずつ画素位置属性情報とともに画像データを入力管理モジュール103の通信部106へ渡す場合を扱う。しかし、本発明は、画像のスキャン方向によらず適用可能である。入力管理モジュール103の通信部106は入力部107から受信した画像データと画素位置属性情報とに基づいてパケットを生成し、このパケットを後続のモジュールへ転送する。
【0030】
図3は、処理モジュール104の通信部106の例示の構成図である。通信部106は、バッファ301、受信部302、セレクタ303、および送信部304を備える。前段のモジュールからデータ信号線305を介して通信部106に転送されたパケットは、バッファ301と受信部302との両方へ入力される。バッファ301は、前段のモジュールから転送されたパケットを格納する。バッファ301は、データ信号線315を介して、格納しているパケットをセレクタ303と送信部304との両方へ出力する。バッファ301はまた、VALID信号線313を介して、格納しているパケット内のVALIDビットを受信部302に出力する。受信部302は、前段のモジュールから転送されたパケット内の画像データを同一モジュール内の処理部108において処理すべきか否かを判定する。すなわち、受信部302は、パケット内のVALIDビットが有効であり、パケット内の送信元IDと自身の待ち受けIDとが一致するか否かを判定する。処理すべきと判定した場合に、受信部302は、パケットから画像データおよび画素位置属性情報を取り出し、データ信号線309を介してこれらを同一モジュール内の処理部108へ送信する。これとともに、受信部302はVALID信号線308を介して処理部108へ有効であるVALID信号を送信する。さらに、受信部302は、VALID信号線313を介して、バッファ301に格納されたパケット内のVALIDビットを無効にする。処理部108は、VALID信号線308からのVALID信号が有効である場合にのみ受信部302から画像データおよび画素位置属性情報を受信して処理する。処理部108は例えばフィルタ処理などの画像処理を行い、画像データおよび画素位置属性情報を更新して通信部106へ戻す。
【0031】
受信部302はまた、処理部108からSTALL信号線307を介してSTALL信号を受信する。受信部302は、処理部108からのSTALL信号が有効である場合か、またはバッファ301内に格納されたパケットのVALIDビットが有効である場合に、STALL信号線306を介して前段のモジュールへ有効であるSTALL信号を送信する。これにより、前段のモジュールからのパケットの転送が抑制される。
【0032】
セレクタ303は、セレクタ制御信号線317を介して送信部304から受信した制御信号に基づいて、バッファ301からのパケットと送信部304からのパケットとのいずれかを選択し、データ信号線318を介して後段のモジュールへ転送する。送信部304からの制御信号が有効でない限りセレクタはバッファ301からのパケットを選択する。
【0033】
送信部304は、処理部108からVALID信号線311を介してVALID信号を受信する。VALID信号が有効である場合にのみ、送信部304は、処理済の画像データおよび画素位置属性情報を処理部108からデータ信号線310を介して受信する。
【0034】
送信部304は、バッファ301内のパケットのVALIDビットが無効であり、かつ処理部108からのVALID信号が有効であれば、処理部108から受信した画像データおよび画素位置属性情報をパケットに格納する。これとともに、送信部304はデータ信号線316を介してセレクタ303に送信し、このパケットを後段のモジュールへ送信することを指示するため、有効である制御信号をセレクタ303へセレクタ制御信号線317を介して送信する。送信部304はまた、後段のモジュールからSTALL信号線314を介してSTALL信号を受信する。後段のモジュールからのSTALL信号が有効である場合に、送信部304は、STALL信号線312を介して有効であるSTALL信号を処理部108へ送信する。これとともに、送信部304はセレクタ303からのパケットの転送を抑制する。
【0035】
入力管理モジュール103の通信部106も図3で示された構成と同様であるが、送信部304が入力部107からデータを受信する点で異なる。また、出力管理モジュール102の通信部106も図3で示された構成と同様であるが、受信部302が出力部110へデータを送信する点で異なる。無効化モジュール105の通信部106も図3で示された構成と同様であるが、処理部108の代わりに無効化部109と通信する点で異なる。
【0036】
図4は、受信部302の例示の構成を示す図である。受信部302は、待ち受けIDレジスタ401、比較部402、および受信判定部403を備える。待ち受けIDレジスタ401は、前述の待ち受けIDを格納する。比較部IDは、待ち受けIDと、前段のモジュールから転送されたパケット内の送信元IDとを比較する。
【0037】
比較部402は、送信元IDと待ち受けIDとが一致する場合に、前段のモジュールから受信したパケット内のVALIDビットを受信判定部403へVALID信号線405を介して送信する。それとともに、比較部402は、前段のモジュールから受信したパケット内の画像データおよび画素位置属性情報を受信判定部403へデータ信号線404を介して送信する。
【0038】
受信判定部403は、処理部108からのSTALL信号が有効でない場合に、VALID信号線405をVALID信号線308に接続し、データ信号線404をデータ信号線309に接続する。そして、受信判定部403は、VALID信号線313を介してバッファ301へ無効であるVALID信号を送信する。つまり、受信判定部403は、処理部108がデータを処理する場合に、バッファ301に格納されたパケットのVALIDビットを無効にする。一方、受信判定部403は、処理部108からのSTALL信号が有効である場合に、STALL信号線306を介して前段のモジュールへ有効であるSTALL信号を送信する。
【0039】
図5は、送信部304の例示の構成を示す図である。送信部304は、出力制御部501、パケット生成部502および送信元IDレジスタ503を備える。送信元IDレジスタ503は前述の送信元IDを格納する。
【0040】
出力制御部501は、後段のモジュールからのSTALL信号が有効である場合に、処理部108へのSTALL信号を有効にして処理部108からの出力を抑制する。また、出力制御部501は、VALID信号線504からのVALID信号が有効であり、後段のモジュールからのSTALL信号が無効であり、かつバッファ301のVALIDビットが無効である場合に、セレクタ303へ有効である制御信号を送信する。そして更に、出力制御部501はデータ信号線505をデータ信号線316に接続する。それ以外の場合、例えばバッファ301に格納されているパケットのVALIDビットが有効である場合に、出力制御部501は無効である制御信号をセレクタ303へ送信する。無効である制御信号を受信したセレクタ303はバッファ301に格納されているパケットを後段のモジュールへ転送する。
【0041】
パケット生成部502は、処理部108からのVALID信号が有効である場合に、パケットを内部バッファにて生成する。ここで生成されるパケットのフィールド201のVALIDビットには“1”(有効)が格納される。また、フィールド202には送信元IDレジスタ503から取得された送信元IDが格納される。フィールド203には処理部108から取得された処理済の画像データが格納される。フィールド204〜207には処理部108から取得された画素位置属性情報が格納される。パケット生成部502は生成したパケットを出力制御部501へデータ信号線505を介して送信するとともに、有効であるVALID信号を出力制御部501へVALID信号線504を介して送信する。
【0042】
以上のように通信部106は、前段のモジュールからのパケット内のデータを処理すべき場合にこのパケットからデータを取り出して処理部108に処理させ、処理済みデータをパケットに格納して後段のモジュールに転送する。一方、通信部106は、前段のモジュールからのパケット内のデータを処理すべきでない場合に、このパケットを後段のモジュールへそのまま転送する。
【0043】
図6は、無効化モジュール105の例示の構成を示す図である。通信部106の構成は前述したため、ここでは繰り返さない。無効化部109は、制御部601および後述する各種レジスタ、カウンタを備える。データ保持レジスタ602は受信部302からの画像データおよび画素位置属性情報を保持する。このレジスタは画像データおよび画素位置属性情報を格納できるだけのビット幅を有する。また、上端部無効数指定レジスタ603は、画像上端部において無効化する画素数を格納する。左端部無効数指定レジスタ604は、画像左端部において無効化する画素数を格納する。有効画像高さレジスタ609は、無効化モジュール105から出力する画像の高さを格納する。有効画像幅レジスタ610は、無効化モジュール105から出力する画像の幅を格納する。これらのレジスタの値はパイプライン処理の実行に先立って設定しておく。第1Yカウンタ605および第2Yカウンタ607は、垂直方向の画素数をカウントする。第1Xカウンタ606および第2Xカウンタ608は、水平方向の画素数をカウントする。
【0044】
制御部601は無効化部109の制御を司り、上述のレジスタおよびカウンタの値に応じて、データ保持レジスタ602が保持するデータを送信部304に送信するか否かの判断を行う。制御部601は、信号線611を介してデータ保持レジスタ602から画素位置属性情報を取得し、上述のレジスタおよびカウンタの値に応じて、画素位置属性情報を補正する。制御部601は補正した画素位置属性情報をデータ保持レジスタに格納するとともに、通信部106へVALID信号を送信する。データ保持レジスタ602に格納されているデータおよび画素位置属性情報はデータ信号線310を介して送信部304へ送信される。
【0045】
次に図7のフローチャートを用いて無効化部109の動作を説明する。画像処理装置101において画像を処理するパイプライン処理が開始されると、無効化部109は、以下のステップに従って動作する。ステップS701において、制御部601は、無効化部109が通信部106から画像データおよび画素位置属性情報を受信したという条件の成否を判定する。ステップS701の条件が成り立たない場合に、処理はステップS703に移り、制御部601は画像処理装置101に入力された画像データの処理が終了したかどうかを判定する。ステップS703で、画像データの処理が終了した場合にこのフローチャートによる処理は終了する。一方、ステップS703で画像データの処理が終了していない場合に、処理はステップS701へ戻る。
【0046】
ステップ701の条件が成り立つ場合に、受信された画像データおよび画素位置属性情報はデータ保持レジスタ602に格納される。ステップS702で、制御部601はデータ保持レジスタ602に格納されているPSビットが有効であるか否かを判定する。PSビットが有効であれば処理はステップS704に移り、有効でなければ処理はステップS705に移る。ステップ704で、制御部601は、第1Yカウンタ605の値(Yカウンタ_1)、および第2Yカウンタ607の値(Yカウンタ_2)をそれぞれ0に初期化する
【0047】
ステップS705で、制御部601はデータ保持レジスタ602に格納されているLSビットが有効であるか否かを判定する。LSビットが有効であれば処理はステップS706に移り、有効でなければ処理はステップS707に移る。ステップS706で、制御部601は第1Xカウンタ606の値(Xカウンタ_1)および第2Xカウンタ608の値(Xカウンタ_2)をそれぞれ0に初期化し、第1Yカウンタ605の値を1だけインクリメントする。ステップS707で、制御部601は第1Xカウンタ606の値を1だけインクリメントする。ステップS708で、制御部601は上端部無効数指定レジスタ603から上端部無効画素数を取得し、第1Yカウンタ605の値と比較する。そして、第1Yカウンタ605の値が上端部無効画素数以下である場合、ステップS712に処理が移り、制御部601は無効であるVALID信号を通信部106へ送信する。それ以外の場合には処理はステップS709に移る。
【0048】
ステップS709で、制御部601は左端部無効数指定レジスタ604から左端部無効画素数を取得し、第1Xカウンタ606の値と比較する。そして、第1Xカウンタ606の値が左端部無効画素数以下である場合、ステップS712に処理が移り、制御部601は無効であるVALID信号を通信部106へ送信する。それ以外の場合には処理はステップS710に移る。
【0049】
ステップS710で、制御部601は有効画像高さレジスタ609から有効画像高さを取得し、上端部無効画素数と有効画像高さとの和を第1Yカウンタ605の値と比較する。そして、第1Yカウンタ605の値がその和より大きい場合、ステップS712に処理が移り、制御部601は無効であるVALID信号を通信部106へ送信する。それ以外の場合には処理はステップS711に移る。
【0050】
ステップS711で、制御部601は有効画像幅レジスタ610から有効画像幅を取得し、左端部無効画素数と有効画像幅との和を第1Xカウンタ606の値と比較する。そして、第1Xカウンタ606の値がその和より大きい場合、ステップS712に処理が移り、制御部601は無効であるVALID信号を通信部106へ送信する。それ以外の場合には処理はステップS713に移る。
【0051】
ステップS713で、制御部601は、第2Xカウンタ608の値が0であるという条件の成否を判定する。この条件は、データ保持レジスタ602が保持する画像データが、無効画素分を入力画像から切り取った画像における1ラインの開始位置のものであることを意味する。ステップS713の条件が成り立つ場合に処理はステップS714に移り、制御部601はデータ保持レジスタ602が保持するLSビットに1を設定する。ステップS713の条件が成り立たない場合に処理はステップS717に移り、制御部601は第2Xカウンタ608の値を1だけインクリメントする。
【0052】
ステップS715で、制御部601は、第2Yカウンタ607の値が0であるという条件の成否を判定する。この条件は、データ保持レジスタ602が保持する画像データが、無効画素分を入力画像から切り取った画像におけるページの先頭位置のものであることを意味する。ステップS715の条件が成り立つ場合に処理はステップS716に移り、制御部601はデータ保持レジスタ602が保持するPSビットに1を設定する。一方、ステップS715の条件が成り立たない場合に処理はステップS717に移り、制御部601は第2Xカウンタ608の値を1だけインクリメントする。
【0053】
ステップS718で、制御部601は、第2Xカウンタ608の値が有効画像幅に等しいという条件の成否を判定する。この条件は、データ保持レジスタ602が保持する画像データの含む画素が、無効画素分を入力画像から切り取った画像における1ライン終端位置のものであることを意味する。ステップS718の条件が成り立つ場合に、処理はステップS719に移り、制御部601は、データ保持レジスタ602が保持するLEビットに1を設定する。そして、ステップS720で、制御部601は第2Yカウンタ607の値を1だけインクリメントする。一方、ステップS718の条件が成り立たない場合に、処理はステップS723に移る。
【0054】
ステップS721で、制御部601は、第2Yカウンタ607の値が有効画像高さに等しいという条件の成否を判定する。この条件は、データ保持レジスタ602が保持する画像データの含む画素が、無効画素分を入力画像から切り取った画像におけるページ終端位置のものであることを意味する。ステップS721の条件が成り立つ場合に、処理はステップS722に移り、制御部601は、データ保持レジスタ602が保持するPEビットに1を設定する。一方、ステップS721の条件が成り立たない場合に、処理はステップS723に移る。
【0055】
ステップS723で、制御部601は、有効であるVALID信号を通信部106へ送信する。その後、処理はステップS701へ戻る。
【0056】
例えば図8に示すように、この場合の画像データに対するパイプライン処理は、第1処理フローを構成するモジュールA、B、C、E、Hによる第1パイプライン処理と、第2処理フローを構成するモジュールF、Gによる第2パイプライン処理とで行なわれる。このパイプライン処理において、モジュールBから第1サイズの画素数の画像データが出力され、モジュールFが第1サイズの画素数の画像データを処理対象とし、モジュールEが第1サイズよりも小さい第2サイズの画素数の画像データを処理対象とするとする。すなわち、モジュールFは第1サイズ毎に画像データを処理し、モジュールEは第2サイズ毎に画像データを処理する。この場合に、モジュールEの前段に無効化モジュールであるモジュールCを設置し、モジュールCが画像データの補助領域の不要な部分を削除した第2サイズの画像データをモジュールEへ転送する。それにより、それぞれの分岐フロー上の処理モジュールに対して効率的に処理データの転送を行い所望の画像処理を行うことができる。
【0057】
<第2実施形態>
第1実施形態では、処理フローの途中に無効化モジュールを設け、転送される画像の画素数が適切になるように補助領域を削除させることで、分岐フローごとに異なるサイズの補助領域の画像データを転送できることを示した。第2実施形態では通信部が補助領域を削除して処理部にデータを転送する例を示す。
【0058】
第2実施形態を、図9から図11を使って説明する。図9は本実施形態における画像処理装置101の例示の構成図である。図1と同様の要素は同一の参照符号を付して重複する説明を省略する。第2実施形態の画像処理装置101では、少なくとも一部の処理モジュール104が通信部106の代わりに無効化通信部901を備える。無効化通信部901は、不要な補助領域を削除して処理部にデータを転送する。無効化通信部901は、受信部302の代わりに図10に示される受信部1001を有する点で通信部106とは異なる。受信部1001はさらに無効化部1002を備える点で受信部302とは異なる。無効化部1002は無効化部109と同様の構成を有する。
【0059】
本実施形態の構成に従えば、図11(a)に示すように、この場合の画像データに対するパイプライン処理は、第1処理フローを構成するモジュールA、B、C、Eによる処理と、第2処理フローを構成するモジュールD、Fによる処理とで行なわれる。モジュールCとDとが異なるサイズの補助領域を必要としている場合でも、モジュールC、Dが無効化通信部901を有するため、モジュールC、Dの両方の処理部108に必要なサイズの補助領域を有する画像データを送信することが可能になる。その結果、適切なサイズの画像データの転送を効率よく行い所望の画像処理を行うことが可能となる。
【0060】
無効化通信部901が無効化を行う必要のない場合は、上端部無効数指定レジスタ603及び左端部無効数指定レジスタ604の値を0に指定する。そして、有効画像高さレジスタ609及び有効画像幅レジスタ610に処理部に前段モジュールから出力される画像の高さ及び幅を設定すればよい。
【0061】
<第3実施形態>
第1実施形態および第2実施形態では処理フローが途中で2つに分流する例を示した。本実施形態では処理フローが途中で3つ以上に分流する例を示す。例えば、処理モジュールBから処理モジュールD、E、Gへ処理フローが3つに分流し、処理モジュールD、E、Gが異なるサイズの補助領域を必要としている場合を考える。ここでは、処理モジュールDが最も大きな補助領域を必要とするとする。この場合、図11(b)のように無効化モジュールC、C´をそれぞれモジュールD、Eの前段に配置する。すなわち、無効化モジュールは各分岐フローの最初のモジュールとなるように配置される。入力モジュールAは処理モジュールBから出力される画像が処理モジュールGの必要とするサイズの補助領域を有するように、入力画像に補助領域を付加する。そして、2つの無効化モジュールC、C´は補助領域の不要な部分を削除し、処理モジュールD、Eの必要とする補助領域を有する画像を出力する。これにより、3つすべての分岐フローで所望の処理を行うことが可能となる。
【0062】
また、図11(c)に示すように、無効化モジュールを配置する代わりに処理モジュールD、Eがそれぞれ第2実施形態の無効化通信部901を有するように構成してもよい。この場合も3つすべての分岐フローで所望の処理を行うことが可能である。
【0063】
本実施形態では3つの分岐を有する例を示した。しかし、これ以外の個数の分岐の場合についても、所望の処理を行うことは可能である。すなわち、まずすべての分岐フロー中で最大のサイズの補助領域を必要とする分岐フローを特定する。そして、特定された処理フロー以外の処理フローに無効化モジュールを設置するか、無効化通信部901を配置する。
【0064】
<第4実施形態>
上述の3つの実施形態では処理フローが途中で分流する例を説明した。本実施形態においては、処理フローが途中で合流する例を説明する。本実施形態においてパケットは第1実施形態同様、図2に示すような構造を有するとする。なお、本明細書では処理フローの分流と合流とをあわせて処理フローの分岐と呼んでいる。
【0065】
例えば画像処理において合成処理などを行う場合に、2つの処理フローを途中で合流させる必要がある。例えば、図11(d)に示すようにモジュールA、B、C、Dによる処理で構成される第1処理フローに、モジュールE、Fによる処理で構成される第2処理フローがモジュールCで合流する場合である。ここで、処理モジュールBから出力される画像データの画素数が処理モジュールFから出力される画像データの画素数よりも小さいとする。この場合に、何らの手当てをしないとモジュールCが異なる画素数の画像データを処理することになる。
【0066】
この場合に、無効化モジュールGを処理モジュールFの後段に配置することによって、処理モジュールFから出力される画像データの補助領域の不要部分を無効化できる。すなわち、無効化モジュールGは分岐フローの最後のモジュールとなるように配置される。更に、図11(a)に示される処理フローの分流と図11(d)に示される処理フローの合流とを組み合わせてもよい。すなわち、第1処理フローから分流した第2処理フローが再度第1処理フローに合流してもよい。この場合に、第2処理フローの先頭で画素数が変更された画像データが、第2処理フローの末尾においてさらに画素数が再変更される。このように構成することで、前述した従来例では困難であった図18(b)のモジュールCによる処理についても、問題なく処理することができる。
【0067】
以上説明したように、第2処理フローが第1処理フローに合流する場合でも、所望の画像処理を行うことができる。すなわち、各分岐フローから得られる画像サイズが異なる場合でも、少なくともどちらか一方の処理フローに無効化モジュールを設け、後段のモジュールが受け取る画像の画素数を変更できるようにする。これにより、それぞれの合流先のモジュールへ効率的にデータを転送することができる。
【0068】
<第5実施形態>
上述の4つの実施形態では処理フローが分流または合流する場合に、無効化部が補助領域の不要部分を削除する例を説明した。本実施形態では、パイプラインに付加モジュールを追加する場合を扱う。付加モジュールは後段のモジュールでの処理に必要な補助領域を生成し、画像の回りに付加した画像データを後段のモジュールに転送する。本実施形態においてパケットは図2に示すような構造を有するものとする。
【0069】
本実施形態における全体構成は、第1実施形態における図1の構成と同様であり、画像処理装置は無効化モジュール105の代わりに付加モジュール1601を備える。図12は、本実施形態の付加モジュール1601の構成を示す。付加モジュール1601の構成要素のうち、無効化モジュール105の構成要素と同様のものは同一の参照符号を付し、重複する説明を省略する。
【0070】
付加データレジスタ1602は、補助領域を生成するときの画素値として利用する値を格納する。データ一時保持レジスタ1603は、前段のモジュールから受け取ったパケット内の画像データを一時的に保持する。制御部1604は、付加部1605の各処理を制御する。
【0071】
上端部付加数指定レジスタ1606は、画像上端部において付加する補助領域の画素数を格納する。左端部付加数指定レジスタ1607は、画像左端部において付加数する補助領域の画素数を格納する。データ一時保持レジスタ1603は、最大でパケットを格納できるだけのビット幅を持つ。なお、データ一時保持レジスタにはパケット内のVALIDビット、送信元ID、PSビット、PEビット、LSビット及びLEビットをも格納して構わない。付加部1605は、上述のレジスタおよびカウンタの値に応じて、画像の上部及び下部及び左部及び右部に必要な補助領域を生成し、画像に付して後段のモジュールに転送する。入力画像高さ保持レジスタ1608は付加部1605に入力される画像高さを格納する。入力画像幅保持レジスタ1609は付加部1605に入力される画像幅を格納する。付加部1605は、前段のモジュールから入力された画像データのうち、画像処理装置101に入力された画像データに対応する有効領域に含まれる画像データを変更しない。付加部1605は、有効領域の周囲に位置する補助領域に新たな補助領域を付加した画像データを出力する。
【0072】
次に図13のフローチャートを用いて付加部1605の動作を説明する。以下では、第1Yカウンタ605の値をYカウンタ_1、第1Xカウンタ606の値をXカウンタ_1、第2Yカウンタ607の値をYカウンタ_2、第2Xカウンタ608の値をXカウンタ_2と呼ぶ。
【0073】
パイプライン処理が開始されると、付加部1605は以下のステップに従って処理を実行する。ステップS1701において、制御部1604は、付加部1605が通信部106からデータおよび画素位置属性情報を受信したか否かを判定する。付加部1605がデータおよび画素位置属性情報を受信していないと判定された場合に、処理はステップS1702に移り、制御部1604は入力された画像データの処理が終了したかどうかを判定する。ステップS1702で、画像データの処理が終了した場合にこのフローチャートによる処理は終了する。一方、ステップS1702で画像データの処理が終了していない場合に、処理はステップS1701へ戻る。ステップ1701でデータおよび画素位置属性情報を受信したと判定された場合に、受信されたデータおよび画素位置属性情報はデータ保持レジスタ602に格納される。
【0074】
ステップS1703で、制御部1604は、取り込んだパケットのデータをデータ一時保持レジスタ1603に格納する。データ一時保持レジスタ1603に一時的に格納されるデータには画像データのほかにVALIDビット、送信元ID、PSビット、PEビット、LSビット、LEビットが含まれうるが、このうちの一部または全部が含まれていなくても構わない。
【0075】
ステップS1704で、制御部1604は、データ一時保持レジスタ1603にデータが格納されていることを示すフラグであるデータ受信フラグを1に設定する。
【0076】
ステップS1705で、制御部1604はデータ保持レジスタ602に格納されているPSビットが有効か否かを判定する。PSビットが有効である場合に、処理はステップS1706に移る。そして、制御部1604は、データの入力画像縦位置を管理するカウンタである第1Yカウンタ605、出力画像縦位置を管理するカウンタである第2Yカウンタ607、LE受信フラグ、およびPE受信フラグを0に初期化し、処理はステップS1707に移る。一方、ステップS1705でPSビットが無効である場合に処理はステップS1707に移る。
【0077】
ステップS1707で、制御部1604はデータ保持レジスタ602に格納されているLSビットが有効か否かを判定する。LSビットが有効である場合に、処理はステップS1708に移る。そして、制御部1604は第1Yカウンタ605の値を1だけインクリメントし、データの入力画像横位置を管理するカウンタである第1Xカウンタ606の値、出力画像横位置を管理するカウンタである第2Xカウンタ608の値を0に初期化する。そして、処理はステップS1709に移る。一方、ステップS1707でLSビットが無効である場合に処理はステップS1709に移る。
【0078】
ステップS1709で、制御部1604はデータ保持レジスタ602に格納されているLEビットが有効か否かを判定する。LEビットが有効である場合に、処理はステップS1710に移る。そして、制御部1604は、付加部1605に対する入力画像幅を保持する入力画像幅保持レジスタ1609に第1Xカウンタ606の値を代入し、さらにステップS1711でLE受信フラグを1に設定し、処理はステップ1712に移る。一方、ステップS1709でLEビットが無効である場合に処理はステップS1712に移る。
【0079】
ステップS1712で、制御部1604はデータ保持レジスタ602に格納されているPEビットが有効か否かを判定する。PEビットが有効である場合に、処理はステップS1713に移る。そして、制御部1604は、付加部1605に対する入力画像高さを保持する入力画像高さ保持レジスタ1608に第1Yカウンタ605の値を代入し、さらにステップS1714にてPE受信フラグを1に設定し、処理はステップ1715に移る。一方、ステップS1712でLEビットが無効である場合に処理はステップS1715に移る。
【0080】
ステップS1715は出力処理であり、図20を用いて説明する。ステップS2001で、制御部1604はSTALLフラグを0に設定し、処理はステップS2002に移る。ステップS2002で、制御部1604は上端部付加数指定レジスタ1606の値が第2Yカウンタ607の値よりも大きいという条件の成否を判定する。ステップS2002の条件が成り立つ場合に、処理はステップS2006に移る。一方、ステップS2002の条件が成り立たない場合に処理はステップS2003に移る。
【0081】
ステップS2003で、制御部1604は第2Xカウンタ608の値よりも左端部付加数指定レジスタ1607の値が大きいという条件の成否を判定する。ステップS2003の条件が成り立つ場合に処理はステップS2006に移る。一方、ステップS2003の条件が成り立たない場合に処理はステップS2004に移る。
【0082】
ステップS2004で、制御部1604は第1Yカウンタ605の値と上端部付加数指定レジスタ1606の値との和が第2Yカウンタ607の値以下であるという条件の成否を判定する。ステップS2004の条件が成り立つ場合に処理はステップS2006に移る。一方、ステップS2004の条件が成り立たない場合に処理はステップS2005に移る。
【0083】
ステップS2005で、制御部1604は第1Xカウンタ606の値と左端部付加数指定レジスタ1607の値との和が第2Xカウンタ608の値以下であるという条件の成否を判定する。ステップS2005の条件が成り立つ場合に処理はステップS2006に移る。一方、ステップS2005の条件が成り立たない場合に処理はステップS2008に移る。
【0084】
ステップS2008で、制御部1604はデータ一時保持レジスタ1603のデータをデータ保持レジスタ602に上書きする。さらにステップ2009で、制御部1604はデータ受信フラグに0を設定し、処理はステップS2010に移る。
【0085】
ステップS2006で、制御部1604は付加データレジスタ1602の値をデータ保持レジスタ602に上書きする。ステップS2007で、制御部1604はSTALLフラグに1を設定し、処理はステップS2010に移る。
【0086】
ステップS2010で、制御部1604はデータ保持レジスタ602のPSビット、PEビット、LSビット及びLEビットをそれぞれ0に設定する。ステップS2011で、制御部1604は第2Xカウンタ608の値が0であるという条件の成否を判定する。ステップS2011の条件が成り立つ場合に処理はステップS2012の処理に移り、成り立たない場合に処理はステップS2013に移る。ステップS2012で、制御部1604は、データ保持レジスタ602のLSビットを1に設定し、処理はステップS2017に移る。ステップS2017で、制御部1604は第2Yカウンタ607の値が0であるという条件の成否を判定する。ステップS2017の条件が成り立つ場合に処理はステップS2018の処理に移り、成り立たない場合に処理はステップS2019に移る。ステップS2018で、制御部1604はデータ保持レジスタ602のPSビットを1に設定し、処理はステップS2019に移る。
【0087】
ステップS2013で、制御部1604は第2Xカウンタ608の値が有効画像幅レジスタ610の値から1を引いた値に等しいという条件の成否を判定する。ステップS2013の条件が成り立つ場合に処理はステップS2014に移り、制御部1604はデータ保持レジスタ602のLEビットを1に設定する。一方、ステップS2013の条件が成り立たない場合に、処理はステップS2019に移る。
【0088】
ステップS2015で、制御部1604は第2Yカウンタ607の値が有効画像高さレジスタ609の値から1を引いた値に等しいという条件の成否を判定する。ステップS2015の条件が成り立つ場合に処理はステップS2016に移り、制御部1604はデータ保持レジスタ602のPEビットを1に設定する。一方、ステップS2015の条件が成り立たない場合に処理はステップS2019に移る。ステップS2019で、制御部1604は第2Xカウンタ608の値をインクリメントする。
【0089】
ステップS2020で、制御部1604は第2Xカウンタ608の値が有効画像幅レジスタ610の値に等しいという条件の成否を判定する。ステップS2020の条件が成り立つ場合に処理はステップS2021に移り、制御部1604は第2Xカウンタ608の値を0に初期化し、第2Yカウンタ607の値を1だけインクリメントする。一方、ステップS2020の条件が成り立たない場合に処理はステップS2022に移る。
【0090】
ステップS2022で、制御部1604は第2Yカウンタ607の値が有効画像高さレジスタ609の値に等しいという条件の成否を判定する。ステップS2022の条件が成り立つ場合に、処理はステップS2023に移り、制御部1604は第2Yカウンタ607の値を0に初期化する。一方、ステップS2022の条件が成り立たない場合に処理はステップS2024に移る。
【0091】
ステップS2024で、制御部1604はデータ保持レジスタ602のVALIDビットに1を設定する。そして、ステップS2025で、制御部1604は通信部106に対してデータ保持レジスタ602に格納されているデータをパケットに格納して後段のモジュールに転送するように指示し、処理はステップS2026に移る。
【0092】
ステップS2026で、制御部1604はデータ受信フラグが1に等しいという条件の成否を判定する。ステップS2026の条件が成り立つ場合に処理はステップS2027に移る。ステップS2027で、制御部1604はSTALLフラグを1に設定する。ステップS2026の条件が成り立たない場合は、処理はステップS2028に移る。
【0093】
ステップS2028で、制御部1604はLE受信フラグが1に等しいという条件の成否を判定する。ステップS2028の条件が成り立つ場合に処理はステップ2029に移る。ステップS2029で、制御部1604は、有効画像幅レジスタ610の値から入力画像幅保持レジスタ1609の値と左端部付加数指定レジスタ1607の値との和を引いた結果が0より大きいという条件の成否を判定する。ステップS2029の条件が成り立つ場合に処理はステップS2030に移る。ステップS2030で、制御部1604は、第2Xカウンタ608の値が入力画像幅保持レジスタ1609の値から1を引いたものに左端部付加数指定レジスタ1607の値を加えた結果よりも大きいという条件の成否を判定する。ステップS2030の条件が成り立つ場合に処理はステップS2031に移る。ステップS2031で、制御部1604はSTALLフラグを1に設定する。ステップS2028、ステップS2029およびステップS2030のいずれかの条件が成り立たない場合に、処理はステップS2032に移る。
【0094】
ステップS2032で、制御部1604は、データ保持レジスタ602のLEビットが1に等しいという条件の成否を判定する。ステップS2032の条件が成り立つ場合に、処理はステップS2033に移り、制御部1604はSTALLフラグを0に設定し、処理はステップS2034に移る。
【0095】
ステップS2034で、制御部1604は、PE受信フラグが1に等しいという条件の成否を判定する。ステップS2034の条件が成り立つ場合に処理はステップ2035に移る。ステップS2035で、制御部1604は、有効画像高さレジスタ609の値から入力画像高さ保持レジスタ1608の値と上端部付加数指定レジスタ1606の値との和を引いた結果が0より大きいという条件の成否を判定する。ステップS2035の条件が成り立つ場合に処理はステップS2036に移る。ステップS2036で、制御部1604は、第2Yカウンタ607の値が入力画像高さ保持レジスタ1608の値から1を引いたものに上端部付加数指定レジスタ1606の値を加えた結果よりも大きいという条件の成否を判定する。ステップS2036の条件が成り立つ場合に処理はステップS2037に移る。ステップS2037で、制御部1604はSTALLフラグを1に設定する。ステップS2034、ステップS2035およびステップS2036のいずれかの条件が成り立たない場合は、処理はステップS2038に移る。
【0096】
ステップS2038で、制御部1604は、データ保持レジスタ602のPEビットが1に等しいという条件の成否を判定する。ステップS2038の条件が成り立つ場合に、処理はステップS2039に移る。ステップS2039で、制御部1604は、STALLフラグを1に設定し、処理はステップS2040に移る。ステップS2038の条件が成り立たない場合、処理はステップS2040に移る。
【0097】
ステップS2040で、制御部1604はSTALLフラグが1に等しいという条件を判定する。ステップS2040の条件が成り立つ場合に、処理はステップS2041に移る。ステップS2041で、制御部1604は通信部106に有効であるSTALL信号を送信する。通信部106はこのSTALL信号を前段のモジュールへ転送するため、前段のモジュールはパケットの転送を一時的に停止する。その後、処理はステップS2001に移る。S2040の条件が成り立たない場合に処理は終了する。
【0098】
例えば先程の図8の例において、処理モジュールEの必要とする画像データの画素数が処理モジュールFの必要とする画像データの画素数よりも大きいとする。この場合に、モジュールCとして付加モジュールを配置することによって、処理モジュールBから転送された画像データを、モジュールE、Fの両方の処理部の処理に適した画素数にすることができる。これにより、分岐フロー上の処理モジュールに対して効率的に処理データの転送を行い所望の画像処理を行うことができる。
【0099】
<第6実施形態>
第5実施形態では、処理フローの途中に付加モジュールを設け、転送される画像の画素数が適切になるように補助領域を付加させることで、分岐フローごとに異なるサイズの補助領域の画像データを転送できることを示した。第6実施形態では通信部が補助領域を付加して処理部にデータを転送する例を示す。
【0100】
第5実施形態の画像処理装置では、少なくとも一部の処理モジュール104が通信部106の代わりに付加通信部(不図示)を備える。付加通信部は、画像データに必要な補助領域を付加して処理部に転送する。付加通信部は、受信部302の代わりに図14に示される受信部1801を有する点で通信部106とは異なる。受信部1801はさらに付加部1802を備える点で受信部302とは異なる。付加部1802は付加部1605と同様の構成を有する。
【0101】
本実施形態の構成に従えば、図11(a)に示すように、この場合の画像データに対するパイプライン処理は、第1処理フローを構成するモジュールA、B、C、Eによる処理と、第2処理フローを構成するモジュールD、Fによる処理とで行なわれる。モジュールCとDとが異なるサイズの補助領域を必要としている場合でも、モジュールC、Dが付加通信部を有せば、モジュールC、Dの両方の処理部108に必要なサイズの補助領域を有する画像データを送信することが可能になる。その結果、適切なサイズの画像データの転送を効率よく行い所望の画像処理を行うことが可能となる。
【0102】
無効化通信部901が無効化を行う必要のない場合は、上端部付加数指定レジスタ1606及び左端部付加数指定レジスタ1607の値を0に指定する。さらに、有効画像高さレジスタ609及び有効画像幅レジスタ610に処理部に前段モジュールから出力される画像の高さ及び幅を設定すればよい。また、付加する画素値に関しては終端画素を記憶しておき、それを指定された画素数だけ付加してもよいし、終端近辺の指定された領域の画素値を記憶しておきそれを鏡像形式で出力してもよい。
【0103】
<第7実施形態>
第3実施形態と同様に、処理フローが複数に分岐する場合に付加モジュール又は付加通信部を有する処理モジュールを配置することによって、各処理モジュールに適切な画素数の画像データを入力することができる。本実施形態では、分岐フローのうち、最小の画素数の補助領域を必要とする分岐フローを特定し、その分岐フローに併せた補助領域を付加して入力管理モジュール103が画像データを入力する。そして、不足分の補助領域を各付加モジュールが追加する。また、各処理モジュールの前段に付加モジュールを設置するか、通信部106を付加通信部に置き換えることで、入力管理モジュール103において補助領域を負荷する必要がなくなる。
【0104】
<第8実施形態>
例えば、図11(f)に示すように処理フローが2箇所以上で分岐しており、処理モジュールDは上下に2画素、処理モジュールEは上下に3画素、処理モジュールHは上下に1画素の補助領域が必要な場合を説明する。図11(f)に示すように無効化モジュールC、C´をそれぞれ処理モジュールD、Eの前段に配置し、さらに付加モジュールGを処理モジュールHの前段に配置する。そして、処理モジュールBから上下に3画素の補助領域が付加された画像データが出力されるように入力管理モジュールAが入力画像に補助領域を付す。この場合に、無効化モジュールCが上下1画素ずつ補助領域を削除し、付加モジュールGが上下1画素ずつ補助領域を付加すれば、処理モジュールD、E、Gのいずれにおいても必要な画素数の補助領域を有する画像データが入力される。このように、無効化モジュールと付加モジュールとを組み合わせることにより、一層柔軟に処理フローを構成することが可能になる。
【0105】
<第9実施形態>
上述した各実施形態では各モジュールがパイプライン接続されている例を説明した。しかし、いずれの実施形態でも、各モジュールがパイプラインの代わりにリングバスにて接続されていても構わない。この場合も、上述した各実施形態と同様に処理を行うことができる。
【0106】
<第10実施形態>
例えば、図11(a)に示すように処理フローが2箇所以上で分岐している場合を考える。処理モジュールDがサムネイル画像生成処理などの倍率の大きな変倍処理を行うものであり、処理モジュールFは入力画像のヒストグラムなどの画素に関する度数分布分析を行う処理であるとする。この場合、処理モジュールDにおいては、変倍処理に特有の周辺画素の参照だけでなく、例えば、1次補間処理であれば、周辺2カラム・2ライン以上の画像は参照しないため、入力画像の補助領域を削除する等の動作が行われることもある。このように、処理モジュールのアルゴリズムによっては、出力画像に影響しない入力画像領域を削除する動作をするものが存在しうる。このような場合、出力される画像には現れない領域について処理モジュールFでヒストグラムをとることは、出力画像に対するヒストグラムとして正しくない。よって、このような実施例においても、モジュールEにおいて、またはモジュールFに追加して補助領域の削除・付加を行うことで、モジュールDで全く参照しない画素領域を削除してもよい。これにより、モジュールDが出力する画像領域に対する正しい分析結果を得ることが可能となる。このように、単に入力として必要とされる領域の差のみを削除・付加するだけでなく、処理アルゴリズムの特性に従った削除・付加をおこなってもよい。
【0107】
<その他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
図1
図2
図3
図4
図5
図6
図8
図9
図10
図11
図12
図14
図15
図16
図17
図18
図19
図7
図13
図20