JP2010015257A - 画像処理装置、画像処理方法、及びプログラム - Google Patents

画像処理装置、画像処理方法、及びプログラム Download PDF

Info

Publication number
JP2010015257A
JP2010015257A JP2008172658A JP2008172658A JP2010015257A JP 2010015257 A JP2010015257 A JP 2010015257A JP 2008172658 A JP2008172658 A JP 2008172658A JP 2008172658 A JP2008172658 A JP 2008172658A JP 2010015257 A JP2010015257 A JP 2010015257A
Authority
JP
Japan
Prior art keywords
filter
image
calculation
pixel
pixel data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008172658A
Other languages
English (en)
Inventor
Takahisa Yamamoto
貴久 山本
Masami Kato
政美 加藤
Yoshinori Ito
嘉則 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2008172658A priority Critical patent/JP2010015257A/ja
Publication of JP2010015257A publication Critical patent/JP2010015257A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Processing (AREA)

Abstract

【課題】広帯域のメモリを使用しなくとも、演算器への画素データの供給を効率よく行えるようにする。
【解決手段】フィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理装置にて、画像メモリから読み出された複数の画素データを記憶し所定の規則に従って演算器に並列に出力するシフトレジスタと、フィルターの係数と複数の画素データとを用いた演算を並列に行う複数の演算器と、複数の演算器によって並列に演算が行われる画素列が並ぶ方向を選択する並列演算画素方向選択部とを有し、フィルター演算処理に用いるフィルターの形状に応じて、複数の演算器間で共有される画素データを多くするような方向を選択し、画像メモリから読み出す画素データの数を減少させ、演算器への画素データの供給を効率よく行うことができるようにする。
【選択図】図1

Description

本発明は、画像処理装置、画像処理方法、及びプログラムに関し、2次元データに対してフィルター演算処理を行う画像処理技術に関する。
従来から画像処理分野では、画素配列が2次元になっていることから、2次元のフィルター処理のような2次元のデータ演算が頻繁に用いられる。このような2次元のデータ演算処理に関して、演算処理の高速化や演算対象画像の画素データの効率的な使用を達成しようとする方法が提案されている。例えば、下記特許文献1や下記特許文献2には、積和演算器に代表されるような演算器を複数用意し、演算器に供給される演算対象画像の画素データを複数の演算器間で共有して並列処理させる方法が提案されている。
例えば、特許文献2に記載の半導体集積回路では、図8に示されるように構成された演算装置を用いている。図8は、画像データに対して3×3の2次元フィルターの演算を行う演算装置を示している。図8に示す演算装置では、出力画像の1ライン分のフィルター演算処理を並列に行うことが可能となっている。図8に示す演算装置は、シリアルアクセスメモリSAM1、2次元メモリアレイMAR、センスアンプSA、並列転送回路TRC、データメモリDM、及び演算回路群PE1、PE2、…、PEnより構成されている。
シリアルアクセスメモリSAM1は、入力される画素データFxyを1ライン分蓄えて、並列に2次元メモリアレイMARに書き込むためのものである。2次元メモリアレイMARは、2次元配列された複数のメモリセルを有し、シリアルアクセスメモリSAM1から出力された画素データ(画素値)を3ライン分記憶する。センスアンプSAは、2次元メモリアレイMARから1ライン分の画素値を並列に読み出してラッチし、並列転送回路TRCは、読み出された画素値を並列に演算回路群PE1、PE2、…、PEnに転送する。データメモリDMは、フィルター係数を記憶するメモリである。演算回路群PE1、PE2、…、PEnは、並列転送回路TRCより転送される画素値及びデータメモリDMから供給されるフィルター係数を用いた積和演算を並列に行う。
以下、図8に示した演算装置の動作を、図9を参照して説明する。図9には、画像フレームの画素と演算装置内のメモリセルの内容との対応、及び並列転送回路TRCの制御方法を示している。
まず、各画素値がPビットのデータよりなる入力画像が、順番にシリアルアクセスメモリSAM1に入力される。入力画像の第1行の画素値F11、F12、…、F1kが、シリアルアクセスメモリSAM1に蓄えられると、それらが1ライン分の画素値として並列に2次元メモリアレイMARのワード線W1に書き込まれる。続いて、同じように入力画像の第2行、第3行の画素値が、シリアルアクセスメモリSAM1に蓄えられる度に、それぞれが1ライン分の画素値として2次元メモリアレイMARのワード線W2、W3に書き込まれる。
このようにして、出力画像の1ライン分の画素値を計算するのに必要な3ライン分の画素値が2次元メモリアレイMARに書き込まれる。このときの入力画像のフレームと2次元メモリアレイMARのワード線上のデータとの対応は、図6(A)に示したようになっている。
そして、図8に示した演算装置では、次のライン(入力画像の第4行)の画素値がシリアルアクセスメモリSAM1に書き込まれている間に、出力画像の第2行の画素値R21、R22、…、R2kが並列に計算される。このとき、並列転送回路TRCの制御は、図6(B)に示してあるように9回の演算サイクルで実行される。
まず、第1サイクルでは、2次元メモリアレイMARのワード線W1に記憶した1ライン分の画素値が読み出され、データ線群DGを通じてセンスアンプSAにラッチされる。ここで、並列転送回路TRCを構成するセレクタSELのスイッチL、C、Rのうち、スイッチLがオンにされる。これにより、並列転送回路TRCを通じて、画素値F11が演算回路PE1に、画素値F12が演算回路PE2に、…、画素値F1(k−2)が演算回路PEnに転送される。同時に、データメモリDMより重み係数C00が読み出されて、演算回路群PE1、PE2、…、PEnにて、入力された画素値と重み係数C00の乗算が各々行われる。
続いて、第2サイクルでは、セレクタSEL内のスイッチCがオンにされ、並列転送回路TRCを通じて、画素値F12が演算回路PE1に、画素値F13が演算回路PE2に、…、画素値F1(k−1)が演算回路PEnに入力される。同時に、データメモリDMより重み係数C01が読み出されて、演算回路群PE1、PE2、…、PEnにて、入力された画素値と重み係数C01の乗算が各々行われ、その演算結果が第1サイクルにおいて計算された値に積算される。
同様にして、第3サイクルでは、セレクタSEL内のスイッチRがオンにされ、並列転送回路TRCを通じて、画素値F13が演算回路PE1に、画素値F14が演算回路PE2に、…、画素値F1kが演算回路PEnに入力される。また、データメモリDMより重み係数C02が読み出されて、演算回路群PE1、PE2、…、PEnにて、入力された画素値と重み係数C02の乗算が各々行われ、その演算結果が先に計算された値に積算される。
こうして、2次元メモリアレイMARのワード線W1に記憶された画素値を使用した演算を行った後、第4サイクルでは、2次元メモリアレイMARのワード線W2が選択される。これにより、2次元メモリアレイMARのワード線W2に記憶した1ライン分の画素値が読み出され、センスアンプSAにラッチされる。
この第4サイクルでは、セレクタSEL内のスイッチLがオンにされ、並列転送回路TRCを通じて、画素値F21が演算回路PE1に、画素値F22が演算回路PE2に、…、画素値F2(k−2)が演算回路PEnに転送される。そして、演算回路群PE1、PE2、…、PEnにて、入力された画素値とデータメモリDMより読み出された重み係数C10との乗算が各々行われ、その演算結果が先に計算された値に積算される。
続いて、第5サイクルでは、セレクタSEL内のスイッチCがオンにされ、並列転送回路TRCを通じて、画素値F22が演算回路PE1に、画素値F23が演算回路PE2に、…、画素値F2(k−1)が演算回路PEnに入力される。そして、演算回路群PE1、PE2、…、PEnにて、入力された画素値とデータメモリDMより読み出された重み係数C11との乗算が各々行われ、その演算結果が先に計算された値に積算される。
同様にして、第6サイクルでは、セレクタSEL内のスイッチRがオンにされ、並列転送回路TRCを通じて、画素値F23が演算回路PE1に、画素値F24が演算回路PE2に、…、画素値F2kが演算回路PEnに入力される。そして、演算回路群PE1、PE2、…、PEnにて、入力された画素値とデータメモリDMより読み出された重み係数C12との乗算が各々行われ、その演算結果が先に計算された値に積算される。
こうして、2次元メモリアレイMARのワード線W2に記憶された画素値を使用した演算を行った後、さらに、第7サイクルから第9サイクルで、同様な計算を2次元メモリアレイMARのワード線W3に記憶された画素値を使用して行う。これにより、演算回路PE1、PE2、…、PEnにて、出力画像の第2行の画素値R21、R22、…、R2kが求まる。これをシリアルアクセスメモリSAM2に並列に転送して、順に出力する。なお、端の画素については、必要な入力画素がないので図示したようにそのまま転送すればよい。
出力画像の次の1ライン分の演算を行うには、同様の動作を繰り返せばよい。すなわち、シリアルアクセスメモリSAM1に入力画像の新たな1ライン分の画素値が蓄えられたら、その1ライン分の画素値を2次元メモリアレイMARにて最も古くデータを書き替えたワード線に転送する。そして、入力画像の次の1ライン分の画素値がシリアルアクセスメモリSAM1に書き込まれている間に、出力画像の1ライン分の画素値について演算を行う。これを繰り返すことにより、図6(C)に示したような出力画像を得ることが可能となる。
このようにして、出力画像の同一ライン上の複数画像に関する2次元フィルター処理を並列に行うことができる。また、特許文献1に記載の画像処理装置では、特許文献2における並列転送回路TRCの代わりにパラレルロードシフトレジスタを用いて、同様の並列処理が実現されている。
特開2004−13873号公報 特許第3251421号公報
しかしながら、特許文献1及び特許文献2に記載の技術では、演算対象画像の画素データ(画素値)を複数の演算器間で共有するために記憶しておくメモリとして、帯域が広いメモリの使用を前提としている。例えば、特許文献1では複数の読み出しポートを有するメモリが用いられ、特許文献2では2次元メモリアレイが用いられている。このような広帯域のメモリを使用して画像処理装置を構成すると、効率よく処理が行える半面、高価になるという問題がある。
一方、この問題を回避するために、上述した例に示したような広帯域のメモリを用いない場合には、演算対象画像を格納している画像メモリから演算器への画素データの供給がボトルネックとなり、演算処理の高速化が阻害されるという問題点がある。
本発明は、このような事情に鑑みてなされたものであり、帯域が広いメモリを使用しなくとも、演算器への画素データの供給を効率よく行えるようにすることを目的とする。
本発明に係る画像処理装置は、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理装置であって、前記画像メモリから読み出された前記画像データにおける複数の画素データを一時的に記憶するとともに、記憶している前記複数の画素データを所定の規則に従って並列に出力する記憶手段と、前記フィルターの係数と、前記記憶手段から出力される前記複数の画素データとを用いた演算を並列に行う複数の演算手段と、前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記複数の演算手段によって並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択手段とを有することを特徴とする。
本発明に係る画像処理装置は、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理装置であって、前記画像メモリから読み出された前記画像データにおける複数の画素データを一時的に記憶するとともに、記憶している前記複数の画素データを所定の規則に従って並列に出力する記憶手段と、前記フィルターの係数と、前記記憶手段から出力される前記複数の画素データとを用いた演算を並列に行う複数の演算手段と、前記複数の演算手段により得られる複数の演算結果を前記画像メモリに書き込む画像メモリ書き込み制御手段と、処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記画像メモリ書き込み制御手段が前記複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択手段とを有することを特徴とする。
本発明に係る画像処理方法は、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理方法であって、前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出し工程と、前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力工程と、前記フィルターの係数と、前記出力工程にて出力される前記複数の画素データとを用いた演算を並列に行う演算工程と、前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記演算工程にて並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択工程とを有し、前記読み出し工程では、前記選択工程にて選択された前記並列演算画素方向に従い前記画像メモリから前記画素データを順次読み出すことを特徴とする。
本発明に係る画像処理方法は、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理方法であって、前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出し工程と、前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力工程と、前記フィルターの係数と、前記出力工程にて出力される前記複数の画素データとを用いた演算を並列に行う演算工程と、処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記演算工程にて得られる複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択工程と、前記選択工程にて選択された書き込み方向で前記複数の演算結果を前記画像メモリに書き込む書き込み工程とを有することを特徴とする。
本発明に係るプログラムは、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理をコンピュータに実行させるためのプログラムであって、前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出しステップと、前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力ステップと、前記フィルターの係数と、前記出力ステップにて出力される前記複数の画素データとを用いた演算を並列に行う演算ステップと、前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記演算ステップにて並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択ステップとをコンピュータに実行させ、前記読み出しステップでは、前記選択ステップにて選択された前記並列演算画素方向に従い前記画像メモリから前記画素データを順次読み出すことを特徴とする。
本発明に係るプログラムは、係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理をコンピュータに実行させるためのプログラムであって、前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出しステップと、前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力ステップと、前記フィルターの係数と、前記出力ステップにて出力される前記複数の画素データとを用いた演算を並列に行う演算ステップと、処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記演算ステップにて得られる複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択ステップと、前記選択ステップにて選択された書き込み方向で前記複数の演算結果を前記画像メモリに書き込む書き込みステップとをコンピュータに実行させることを特徴とする。
本発明によれば、フィルター演算処理に用いるフィルターの形状に応じて、画像メモリからの画素データの読み出し方向、又は画像メモリへの演算結果の書き込み方向を選択する。これにより、広帯域のメモリを用いることなく、演算手段への画素データの供給を効率よく行うことができる。
以下、本発明の実施形態を図面に基づいて説明する。
(第1の実施形態)
本発明の第1の実施形態について説明する。
第1の実施形態に係る画像処理装置は、画像メモリに格納された入力画像(演算対象画像)に対してフィルターカーネルを走査させてフィルター演算処理を行い、演算出力画像を得る。
図1は、第1の実施形態に係る画像処理装置の構成例を示すブロック図である。図1に示す画像処理装置は、積和演算器を4個用いることにより、演算出力画像の4画素分を並列に得られるような構成になっている。
図1に示すように、第1の実施形態に係る画像処理装置は、シフトレジスタ100、画像メモリ101、積和演算器110〜113、及びフィルター係数メモリ120を有する。また、第1の実施形態に係る画像処理装置は、並列演算画素方向選択部130、フィルター係数メモリ読み出し制御部140、及び画像メモリ読み出し制御部150を有する。
記憶手段であるシフトレジスタ100は、パラレル出力可能なシフトレジスタである。シフトレジスタ100は、画像メモリ101から読み出された画像データにおける複数の画素データDxyを一時的に記憶する。そして、シフトレジスタ100は、記憶している複数の画素データDxyを所定の規則に従って積和演算器110〜113に並列に出力する。具体的には、シフトレジスタ100は、入力される画素データDxyを並列演算画素数分(本実施形態では4画素分)保持するとともに、一方向に順次シフトさせながら保持している画素データDxyを積和演算器110〜113にパラレル出力する。
したがって、シフトレジスタ100のビット幅(シフトレジスタ100を構成するレジスタSR0〜SR3のビット幅)は、少なくとも演算対象画像(入力画像)の画素データDxyのビット幅と同じビット幅を有する。
画像メモリ101は、演算対象画像の画像データを記憶しているメモリである。演算対象画像の画像データは、複数の画素データで構成される。
演算手段である積和演算器110〜113は、シフトレジスタ100のレジスタSR0〜SR3に蓄積された画素データとフィルターの係数とを用いた演算、詳細には画素データと係数とを乗算し乗算結果を累積加算する処理を並列に行う。積和演算器110は、乗算器160、加算器170、及びレジスタ180を有し、積和演算器111は、乗算器161、加算器171、及びレジスタ181を有する。同様に、積和演算器112は、乗算器162、加算器172、及びレジスタ182を有し、積和演算器113は、乗算器163、加算器173、及びレジスタ183を有する。
乗算器160〜163はそれぞれ、シフトレジスタ100のレジスタSR0〜SR3より出力された画素データと、フィルター係数メモリ120より出力されたフィルター係数とを掛け合わせ、その結果を出力する。加算器170〜173はそれぞれ、乗算器160〜163からの出力とレジスタ180〜183に蓄積しているデータとを加算する。レジスタ180〜183はそれぞれ、加算器170〜173からの出力データを蓄積する。
フィルター係数メモリ120は、フィルターの係数(フィルターカーネルとして定義された、2次元配列された係数で構成されたあるサイズのフィルターに対応する係数行列)を記憶する。フィルター係数メモリ120からは記憶しているフィルターの係数が順次出力される。
並列演算画素方向選択部130は、フィルターカーネルの水平方向サイズ及び垂直方向サイズに基づいて、積和演算器110〜113において並列に演算が行われる画素列が並ぶ方向(この方向を並列演算画素方向と呼ぶ。)を選択する。さらに、並列演算画素方向選択部130は、選択した結果に基づいて、次に示すようにフィルター係数メモリ読み出し制御部140及び画像メモリ読み出し制御部150に対して、それぞれのメモリからデータを読み出す方向を指示する。
並列演算画素方向選択部130は、フィルターカーネルの水平方向サイズと垂直方向サイズとを比較する。その結果、
(1)水平方向サイズが垂直方向サイズより大きい場合には、並列演算画素方向として水平方向を選択する。そして、並列演算画素方向選択部130は、フィルター係数メモリ読み出し制御部140及び画像メモリ読み出し制御部150に対して、それぞれのメモリからデータを読み出す方向として選択した方向(水平方向)を指示する。
(2)垂直方向サイズが水平方向サイズより大きい場合には、並列演算画素方向として垂直方向を選択する。そして、並列演算画素方向選択部130は、フィルター係数メモリ読み出し制御部140及び画像メモリ読み出し制御部150に対して、それぞれのメモリからデータを読み出す方向として選択した方向(垂直方向)を指示する。
(3)垂直方向サイズと水平方向サイズとが等しい場合には、並列演算画素方向として水平方向或いは垂直方向の任意の1方向を選択する。そして、並列演算画素方向選択部130は、フィルター係数メモリ読み出し制御部140及び画像メモリ読み出し制御部150に対して、それぞれのメモリからデータを読み出す方向として選択した方向(水平方向或いは垂直方向の任意の1方向)を指示する。
フィルター係数メモリ読み出し制御部140は、並列演算画素方向選択部130の指示に従って、積和演算器110〜113に入力されるフィルター係数を、次のようにフィルター係数メモリ120から読み出す。すなわち、フィルター係数メモリ読み出し制御部140は、フィルター係数メモリ120からのフィルター係数の読み出しを、並列演算画素方向選択部130で選択された並列演算画素方向に従い次のように制御する。
(1)並列演算画素方向選択部130から水平方向が指示された場合には、フィルター係数メモリ120を水平スキャンする順序で係数を順次読み出す。
(2)並列演算画素方向選択部130から垂直方向が指示された場合には、フィルター係数メモリ120を垂直スキャンする順序で係数を順次読み出す。
画像メモリ読み出し制御部150は、並列演算画素方向選択部130の指示に従って、シフトレジスタ100に記憶させる演算対象画像の画素データを、次のように画像メモリ101から読み出す。すなわち、画像メモリ読み出し制御部150は、画像メモリ101からの画素データの読み出しを、並列演算画素方向選択部130で選択された並列演算画素方向に従い次のように制御する。
(1)並列演算画素方向選択部130から水平方向が指示された場合には、画像メモリ101を水平スキャンする順序で画素データを順次読み出す。
(2)並列演算画素方向選択部130から垂直方向が指示された場合には、画像メモリ101を垂直スキャンする順序で画素データを順次読み出す。
次に、図2に示すようなフィルターカーネルAを用いた場合の第1の実施形態における画像処理装置の動作手順について説明する。図2において、(A)は入力画像(演算対象画像)の一例を示しており、(B)はフィルターカーネルの一例を示しており、(C)は演算出力画像の一例を示している。また、図3は、フィルターカーネルAを用いた場合の第1の実施形態における画像処理装置の動作例を示すタイムチャートであり、図3において点線間はクロック周期を示している。
図2(B)に示すフィルターカーネルAは、水平方向サイズが5であり、垂直方向サイズが3である。したがって、並列演算画素方向選択部130は、並列演算画素方向として、フィルターカーネルの長辺方向である水平方向を選択する。
そして、並列演算画素方向選択部130は、フィルター係数メモリ読み出し制御部140に対してフィルター係数メモリ120から係数を読み出す方向として水平方向を指示する。また、並列演算画素方向選択部130は、画像メモリ読み出し制御部150に対して、画像メモリ101から画素データを読み出す方向として水平方向を指示する。
画像メモリ読み出し制御部150は、並列演算画素方向選択部130の指示(水平方向)に従って、画像メモリ101を水平スキャンする順序で画像メモリ101から画素データを順次読み出す。すなわち、画素データD00、D10、D20、D30の順で画素データが読み出され、シフトレジスタ100に入力され記憶される。このときシフトレジスタ100のレジスタSR0には画素データD00、レジスタSR1には画素データD10、レジスタSR2には画素データD20、レジスタSR3には画素データD30がそれぞれ格納されようとしている(図3の時刻t3)。
この状態において、フィルター係数メモリ読み出し制御部140は、並列演算画素方向選択部130の指示(水平方向)に従って、フィルター係数メモリ120から水平スキャンする順序で係数を順次読み出す。読み出された係数は、積和演算器110〜113に入力される。すなわち、係数W00、W10、W20、W30、W40の順でフィルター係数が読み出され、積和演算器110〜113に入力される。また、同時に、画像メモリ読み出し制御部150は、引き続いて画素データD40、D50、D60、D70の順で画素データを読み出し、シフトレジスタ100に入力する。
積和演算器110〜113は、順次入力されるシフトレジスタ100のレジスタSR0〜SR3から出力された画素データとフィルター係数メモリ120から読み出された係数との乗算を行い、乗算結果を累積加算する。
ここで、フィルター係数メモリ読み出し制御部140がフィルター係数メモリ120から係数を読み出していないとき(図3におけるフィルター係数メモリの出力としてXが示されているとき)、積和演算器110〜113内の乗算器160〜163は動作しない。あるいは、フィルター係数メモリの出力として0を出力するようにフィルター係数メモリ読み出し制御部140によって制御するようにしてもよい。
さらに、引き続き同様にして、画像メモリ読み出し制御部150は、画素データD01、D11、D21、D31、D41、D51、D61、D71の順で画像メモリ101から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部140は、係数W01、W11、W21、W31、W41の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
さらに、引き続き同様にして、画像メモリ読み出し制御部150は、画素データD02、D12、D22、D32、D42、D52、D62、D72の順で画像メモリ101から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部140は、係数W02、W12、W22、W32、W42の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
このようにすることで図3に示す時刻t24の1クロック後(積和演算器110〜113内にレジスタ180〜183があるため1クロック後となる)に、下記式(1)に示す演算出力画像の画素R21、R31、R41、R51が出力される。具体的には、積和演算器110から演算出力画像の画素R21が、積和演算器111から演算出力画像の画素R31が、積和演算器112から演算出力画像の画素R41が、積和演算器113から演算出力画像の画素R51が、並列にフィルター演算され出力される。
Figure 2010015257
したがって、第1の実施形態における画像処理装置において、図2(B)に示したフィルターカーネルAを用いた場合には、演算対象画像から24画素の画素データを読み出せば、フィルター演算処理された演算出力画素を4画素分得られることになる。
次に、本実施形態における画像処理の有効性を示すために、図4に示すようなフィルターカーネルBを用いた場合のフィルター演算処理に関して、第1の実施形態を適用した場合と、そうでない場合とを比較し説明する。図4において、(A)は入力画像(演算対象画像)の一例を示しており、(B)はフィルターカーネルの一例を示しており、(C)は演算出力画像の一例を示している。図4(B)に示すフィルターカーネルBを用いる場合には、フィルター係数メモリ120にはフィルターカーネルBが格納されている。
図4(B)に示すフィルターカーネルBは、水平方向サイズが3であり、垂直方向サイズが5である。したがって、並列演算画素方向選択部130は、並列演算画素方向として、フィルターカーネルBの長辺方向である垂直方向を選択する。そして、並列演算画素方向選択部130は、フィルター係数メモリ読み出し制御部140及び画像メモリ読み出し制御部150に対して、それぞれのメモリからデータを読み出す方向として垂直方向を指示する。
画像メモリ読み出し制御部150は、並列演算画素方向選択部130の指示(垂直方向)に従って、画像メモリ101を垂直スキャンする順序で画像メモリ101から画素データを順次読み出す。つまり、図2及び図3を参照して説明した例とは水平/垂直の方向は変わるが、同様の処理を行う。すなわち、画素データD00、D01、D02、D03、D04、D05、D06、D07の順で画素データが読み出され、シフトレジスタ100に入力され記憶される。それと共に、フィルター係数メモリ読み出し制御部140は、並列演算画素方向選択部130の指示(垂直方向)に従って、フィルター係数メモリ120を垂直スキャンする順序で係数を順次読み出す。すなわち、係数U00、U01、U02、U03、U04の順でフィルター係数が読み出され、積和演算器110〜113に入力される。
そして、積和演算器110〜113は、順次入力されるシフトレジスタ100のレジスタSR0〜SR3から出力された画素データとフィルター係数メモリ120から読み出された係数との乗算を行い乗算結果を累積加算する。
さらに、引き続き同様にして、画像メモリ読み出し制御部150は、画素データD10、D11、D12、D13、D14、D15、D16、D17の順で画像メモリ101から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部140は、係数U10、U11、U12、U13、U14の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
さらに、引き続き同様にして、画像メモリ読み出し制御部150は、画素データD20、D21、D22、D23、D24、D25、D26、D27の順で画像メモリ101から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部140は、係数U20、U21、U22、U23、U24の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
このようにすることにより、積和演算器110〜113から下記式(2)に示す演算出力画像の画素R12、R13、R14、R15が出力される。積和演算器110から演算出力画像の画素R12が、積和演算器111から演算出力画像の画素R13が、積和演算器112から演算出力画像の画素R14が、積和演算器113から演算出力画像の画素R15が、並列にフィルター演算され出力される。
Figure 2010015257
したがって、第1の実施形態を適用すると、図4(B)に示したフィルターカーネルBを用いる場合も、演算対象画像から24画素の画素データを読み出せば、フィルター演算処理された演算出力画素を4画素分得られる。
比較のために、図4(B)に示したフィルターカーネルBを用いた場合のフィルター演算処理に関して、並列演算画素方向として水平方向とした場合に必要となる演算対象画像の画素データ数について示す。この場合、フィルター演算処理された演算出力画素を4画素分(R12、R22、R32、R42)得るためには、演算対象画像の画素データとして、D00〜D50、D01〜D51、D02〜D52、D03〜D53、D04〜D54の30画素必要となる。
以上説明したように、並列演算画素方向選択部130が、フィルターカーネルの形状に応じて、積和演算器110〜113において並列に演算が行われる画素列が並ぶ方向を選択することにより効率よくフィルター演算処理を行うことが可能である。
つまり、並列に演算される画素数をP、フィルターカーネルの水平方向サイズをH、フィルターカーネルの垂直方向サイズをVとすると、演算出力画素をP画素分得るのに必要となる演算対象画素数は、次のようになる。
並列演算画素方向が水平の場合 … (P+H−1)×V
並列演算画素方向が垂直の場合 … (P+V−1)×H
ここで、(P+H−1)×Vの値と(P+V−1)×Hの値との大小関係は、HとVの大小関係によって決定される。本実施形態では、フィルター演算処理に先立って、HとVの大小関係を判定することで、(P+H−1)×Vの値及び(P+V−1)×Hの値のどちらがより小さいかを判定し、小さい方の並列演算画素方向を選択する。これにより、演算出力画素をP画素分得るのに必要となる演算対象画素数が、常に小さくなるような並列演算画素方向が選択される。したがって、演算対象画素の画素データを画像メモリ101から読み出すのに必要な時間が短縮され、効率よく演算が行える。
第1の実施形態によれば、並列演算画素方向選択部130が、フィルターカーネルとして定義された係数が2次元配列されたフィルターの形状に応じて、複数の積和演算器間で共有される画素データを多くするような方向を並列演算画素方向として選択する。具体的には、並列演算画素方向選択部130が、フィルターカーネルの水平方向サイズと垂直方向サイズとを比較して、フィルターカーネルの長辺方向を並列演算画素方向として選択する。これにより、複数の積和演算器間で共有される画素データを増加させ、画像メモリから読み出す画素データの数を減少させることができ、帯域が広いメモリを使用しなくとも、積和演算器への画素データの供給を効率よく行うことができる。
例えば、水平方向サイズが5であり、垂直方向サイズが3であるフィルターカーネルを用いてフィルター演算処理を行う場合には、演算出力画像の1画素分の演算を行うのに演算対象画像の画素データは15画素分必要となる。したがって、シリアルにフィルター演算を行うことによって演算出力画像を1画素ずつ求める場合には、演算出力画像の1画素分を求めるのに必要な演算対象画像の画素データは常に15画素となる。
一方、演算出力画像における隣接する複数の画素を並列に演算する場合には、並列に行われる演算の間で共有できる画素データがあるため、演算出力画像の1画素あたりに必要な演算対象画像の画素データを減少させることができる。
例えば、水平方向に2画素並列に演算する場合、水平方向4画素、垂直方向3画素分が共有できる。したがって、必要な演算対象画像の画素データは15×2−4×3=18画素となり、演算出力画像の1画素あたりを求めるのに必要な演算対象画像の画素データ数は減少する。
ところが同じ並列演算でも、垂直方向に2画素並列に演算する場合には、水平方向5画素、垂直方向2画素分が共有となり、必要な演算対象画像の画素データは15×2−5×2=20画素となってしまう。この場合、シリアルに演算するよりは、演算出力画像の1画素あたりを求めるのに必要な演算対象画像の画素データは減少しているが、水平方向に2画素並列に演算する場合に比べると増加している。
本実施形態では、並列演算画素方向選択部130が、フィルターカーネルの形状に応じて、並列演算画素方向として、積和演算器間で共有される画素データを多くする方向、つまり画像メモリから読み出す画素データの数が少ない方向を選択する。これにより、効率のよい積和演算器への画素データの供給を実現している。
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。
第2の実施形態に係る画像処理装置は、フィルターカーネルを順次更新して、階層的にフィルター演算処理を繰り返し行う。すなわち、画像メモリに記憶されている画像データに対してフィルターカーネルを走査させてフィルター演算処理(第一階層)を行う。さらに、そのフィルター演算処理により得られた結果(中間出力画像と呼ぶ)に対してフィルターカーネルを更新して再度フィルター演算処理を行う(第二階層以降)というようにフィルター演算処理を繰り返し行う。
上述した第1の実施形態では、複数の演算器間で共有される画素データを多くする(画像メモリから読み出す画素データ数を少なくする)ために、フィルターカーネルの形状に応じてメモリからのデータの読み出しを水平方向又は垂直方向で行うか選択していた。
第2の実施形態では、画像メモリから画素データを読み出す方向及びフィルター係数メモリから係数を読み出す方向を選択するのではなく、積和演算器で得られた結果を画像メモリに書き込む際に水平方向に書き込むか垂直方向に書き込むかを選択する。また、同様に、フィルター係数をフィルター係数メモリに書き込む際に水平方向に書き込むか垂直方向に書き込むかを選択する。
これにより、フィルター演算処理の実行に係る画像メモリからの画素データの読み出し、及びフィルター係数メモリからの係数の読み出しを、常に一定方向(水平方向又は垂直方向)で行うことが可能となり、制御が簡素化される。
以下に説明する第2の実施形態では、フィルター演算処理を行うために画像メモリから画素データを読み出す方向、及びフィルター係数メモリから係数を読み出す方向として、常に水平方向とした場合の例について示す。また、第2の実施形態における画像処理装置は、積和演算器を4個用いることにより、演算出力画像の4画素分を並列に得られるような構成になっている。
図5は、第2の実施形態に係る画像処理装置の構成例を示すブロック図である。図5において、図1に示したブロック等と同一の機能を有するブロック等には同一の符号を付し、重複する説明は省略する。
図5に示すように、第2の実施形態に係る画像処理装置は、シフトレジスタ100、画像メモリ701、積和演算器110〜113、フィルター係数メモリ120、及び演算対象画像書き込み方向選択部730を有する。また、第2の実施形態に係る画像処理装置は、フィルター係数メモリ読み出し制御部740、画像メモリ読み出し制御部750、フィルター係数メモリ書き込み制御部760、画像メモリ書き込み制御部770、シフトレジスタ700、及びセレクタ702を有する。
シフトレジスタ700は、パラレル入力可能なシフトレジスタであり、積和演算器110〜113によって演算された結果を保持する。保持された演算結果は、順次画像メモリ701に書き込まれる。したがって、シフトレジスタ700のビット幅(シフトレジスタ700を構成するレジスタPR0〜PR3のビット幅)は、少なくとも演算結果画像(演算出力画像)の画素データRxyのビット幅と同じビット幅を有する。
画像メモリ701は、演算対象画像の画像データを記憶するメモリである。第2の実施形態において、画像メモリ701に記憶される演算対象画像の画像データには、外部から入力される入力画像及び積和演算器110〜113での演算結果として得られる画像データが含まれる。
セレクタ702は、入力画像又は演算結果(演算出力画像又は中間出力画像)を画像メモリ701に書き込むデータとして選択する。
演算対象画像書き込み方向選択部730は、現在の処理中のフィルター演算処理で用いられているフィルターカーネルの長辺方向と、次に行われるフィルター演算処理で用いるフィルターカーネルの長辺方向とに基づいて、演算対象画像の書き込み方向を選択する。すなわち、演算対象画像書き込み方向選択部730は、2つのフィルターカーネルの長辺方向に基づいて、積和演算器110〜113で得られる演算結果を画像メモリ701に書き込んでいく方向(この方向を演算対象画像書き込み方向と呼ぶ。)を選択する。なお、演算結果を書き込む画像メモリは、演算対象画像の画像データが記憶されている画像メモリと同一のメモリであってもよいし、異なるメモリであってもよい。
ここで、現在の処理中のフィルター演算処理で用いられているフィルターカーネルは、第1のフィルターに相当し、以下では、このフィルターカーネルを現階層フィルターカーネルと呼ぶ。また、次に行われるフィルター演算処理で用いるフィルターカーネルは、第2のフィルターに相当し、以下、このフィルターカーネルを次階層フィルターカーネルと呼ぶ。
ただし、階層演算の最初である入力画像を画像メモリ701に書き込む時には、演算対象画像書き込み方向選択部730は、現階層フィルターカーネルとして水平方向が長辺のフィルターを仮定して、演算対象画像書き込み方向を選択する。これは、本実施形態では、フィルター演算処理を行うために画像メモリ701から画素データを読み出す方向、及びフィルター係数メモリ120から係数を読み出す方向として、常に水平方向としているためである。
さらに、演算対象画像書き込み方向選択部730は、選択した結果に基づいて、次に示すようにフィルター係数メモリ書き込み制御部760及び画像メモリ書き込み制御部770に対して、それぞれのメモリにデータを書き込んでいく方向を指示する。
演算対象画像書き込み方向選択部730は、次階層フィルターカーネルの水平方向サイズと垂直方向サイズとを比較するとともに、現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とを比較する。その結果、
(1)現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とが一致する場合には、演算対象画像書き込み方向として水平方向を選択する。そして、演算対象画像書き込み方向選択部730は、フィルター係数メモリ書き込み制御部760及び画像メモリ書き込み制御部770に対して、それぞれのメモリにデータを書き込んでいく方向として選択した方向(水平方向)を指示する。
(2)現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とが異なる場合には、演算対象画像書き込み方向として垂直方向を選択する。そして、演算対象画像書き込み方向選択部730は、フィルター係数メモリ書き込み制御部760及び画像メモリ書き込み制御部770に対して、それぞれのメモリにデータを書き込んでいく方向として選択した方向(垂直方向)を指示する。
(3)次階層フィルターカーネルの水平方向サイズと垂直方向サイズとが等しい場合には、演算対象画像書き込み方向として水平方向或いは垂直方向の任意の1方向を選択する。そして、演算対象画像書き込み方向選択部730は、フィルター係数メモリ書き込み制御部760及び画像メモリ書き込み制御部770に、それぞれのメモリにデータを書き込んでいく方向として選択した方向(水平方向又は垂直方向の任意の1方向)を指示する。さらに、ここで選択した方向を、次階層においては、現階層フィルターカーネルの長辺方向とする。
フィルター係数メモリ読み出し制御部740は、積和演算器110〜113に入力されるフィルター係数を、フィルター係数メモリ120から水平スキャンする順序で読み出す。ここで、フィルター係数メモリ120から水平スキャンする順序でフィルター係数を読み出したとしても、フィルターカーネルとしては、必ずしも水平スキャンの順序でフィルター係数が読み出される訳ではない点に注意されたい。つまり、フィルター係数メモリ120におけるフィルターカーネルの格納状態によっては、フィルターカーネル自体の水平方向と、フィルター係数メモリ読み出し制御部740がフィルター係数メモリ120を水平スキャンするときの方向とは必ずしも一致しない。
画像メモリ読み出し制御部750は、シフトレジスタ100に記憶させる演算対象画像の画素データを、画像メモリ701を水平スキャンする順序で読み出す。ここでも、同様に、画像メモリ701から水平スキャンする順序で画素データを読み出したとしても、演算対象画像としては、必ずしも水平スキャンの順序で画素データが読み出される訳ではない点に注意されたい。つまり、画像メモリ701における演算対象画像の格納状態によっては、演算対象画像自体の水平方向と、画像メモリ読み出し制御部750が画像メモリ701を水平スキャンするときの方向とは必ずしも一致しない。
フィルター係数メモリ書き込み制御部760は、演算対象画像書き込み方向選択部730の指示に従って、次のようにフィルター係数メモリ120にフィルター係数を書き込む。
(1)演算対象画像書き込み方向選択部730から水平方向が指示された場合には、フィルター係数メモリ読み出し制御部740が係数を読み出す時の水平スキャン方向とフィルターカーネル自体の水平方向とが一致するように係数を書き込む。
(2)演算対象画像書き込み方向選択部730から垂直方向が指示された場合には、フィルター係数メモリ読み出し制御部740が係数を読み出す時の水平スキャン方向とフィルターカーネル自体の垂直方向とが一致するように係数を書き込む。
画像メモリ書き込み制御部770は、演算対象画像書き込み方向選択部730の指示に従って、次のように画像メモリ701に演算対象画像(入力画像又は中間出力画像)を書き込む。
(1)演算対象画像書き込み方向選択部730から水平方向が指示された場合には、画像メモリ701に対し水平スキャンする順序で演算対象画像の画素データを書き込む。この場合、演算対象画像の水平方向と、画像メモリ読み出し制御部750が画素データを読み出すときの水平スキャン方向とが一致する。
(2)演算対象画像書き込み方向選択部730から垂直方向が指示された場合には、画像メモリ701に対し垂直スキャンする順序で演算対象画像の画素データを書き込む。この場合、演算対象画像の垂直方向と、画像メモリ読み出し制御部750が画素データを読み出すときの水平スキャン方向とが一致する。
次に、図6に示すようなフィルターカーネルA、Bを階層的に用いた場合の第2の実施形態における画像処理装置の動作について説明する。図6において、(A)は入力画像の一例を示しており、(B)はフィルターカーネルAの一例を示しており、(C)は中間出力画像の一例を示しており、(D)はフィルターカーネルBの一例を示しており、(E)は演算出力画像の一例を示している。
以下、入力画像の画素データDxyに対して第一階層のフィルター演算を行い、中間出力画像の画素データMxyを得る。さらにその中間出力画像の画素データMxyに対して第二階層のフィルター演算を行い、演算出力画像の画素データRxyを得る、という処理について説明する。第一階層のフィルター演算はフィルターカーネルAを用いて行い、第二階層のフィルター演算はフィルターカーネルBを用いて行う。
まず、入力画像の画素データDxyを画像メモリ701に書き込む際に、演算対象画像書き込み方向選択部730は、現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とを比較する。ここで、入力画像に対しては、現階層フィルターカーネルの長辺方向は上述したように水平方向としているので、次階層フィルターカーネルの長辺方向(水平方向)と一致する。したがって、演算対象画像書き込み方向選択部730は、演算対象画像書き込み方向として水平方向を選択する。
演算対象画像書き込み方向選択部730は、フィルター係数メモリ書き込み制御部760に対してフィルター係数メモリ120に係数を書き込んでいく方向として水平方向を指示する。また、演算対象画像書き込み方向選択部730は、画像メモリ書き込み制御部770に対して、画像メモリ701に画素データを書き込んでいく方向として水平方向を指示する。このときセレクタ702は入力画像を選択する。
画像メモリ書き込み制御部770は、演算対象画像書き込み方向選択部730の指示(水平方向)に従って、画像メモリ読み出し制御部750が読み出す時の水平スキャン方向と入力画像の水平方向とが一致するように画素データを画像メモリ701に書き込む。つまり、入力画像の画素データが、画像メモリ読み出し制御部750の水平スキャン方向での読み出しによって、D00、D10、D20、D30、D40、…、D01、D11、…、D02、D12、…と読み出されるように画像メモリ701に格納される。すなわち、入力画像の画素データは、図7(A)に示すように画像メモリ701に格納される。
フィルター係数書き込み制御部760は、演算対象画像書き込み方向選択部730の指示(水平方向)に従って、フィルターカーネルAの係数をフィルター係数メモリ120に書き込む。このとき、フィルター係数メモリ読み出し制御部740が読み出す時の水平スキャン方向とフィルターカーネルの水平方向とが一致するようにフィルターカーネルAの係数をフィルター係数メモリ120に書き込む。つまり、フィルターカーネルAの係数が、フィルター係数メモリ読み出し制御部740によって、W00、W10、W20、W30、W40、W01、…、W41、W02、…、W42と読み出されるようにフィルター係数メモリ120に格納される。すなわち、フィルターカーネルAの係数は、図7(B)に示すようにフィルター係数メモリ120に格納される。
このように画像メモリ701に入力画像の画素データを格納し、フィルター係数メモリ120にフィルターカーネルAの係数を格納した状態において、まず、第一階層のフィルター演算処理が開始される。なお、第一階層のフィルター演算処理は、第1の実施形態において図2及び図3を参照して説明した動作と同様である。
すなわち、第一階層のフィルター演算処理では、画像メモリ読み出し制御部750は、画像メモリ701を水平スキャンする順序で画像メモリ701から画素データを順次読み出す。つまり、画素データD00、D10、D20、D30の順で画素データが読み出され、シフトレジスタ100に入力され記憶される。このときシフトレジスタ100のレジスタSR0には画素データD00、レジスタSR1には画素データD10、レジスタSR2には画素データD20、レジスタSR3には画素データD30が格納されようとしている(図3のt3)。
この状態において、フィルター係数メモリ読み出し制御部740は、フィルター係数メモリ120を水平スキャンする順序でフィルター係数メモリ120から係数を順次読み出す。読み出された係数は、積和演算器110〜113に入力される。すなわち、係数W00、W10、W20、W30、W40の順でフィルター係数が読み出され、積和演算器110〜113に入力される。また、同時に、画像メモリ読み出し制御部750は、引き続いて画素データD40、D50、D60、D70の順で画素データを読み出し、シフトレジスタ100に入力する。
積和演算器110〜113は、順次入力されるシフトレジスタ100のレジスタSR0〜SR3から出力された画素データとフィルター係数メモリ120から読み出された係数との乗算を行い乗算結果を累積加算する。
ここで、フィルター係数メモリ読み出し制御部740がフィルター係数メモリ120から係数を読み出していないとき(図3におけるフィルター係数メモリの出力としてXが示されているとき)、積和演算器110〜113内の乗算器160〜163は動作しない。あるいは、フィルター係数メモリの出力として0を出力するようにフィルター係数メモリ読み出し制御部740によって制御するようにしてもよい。
さらに、引き続き同様にして、画像メモリ読み出し制御部750は、画素データD01、D11、D21、D31、D41、D51、D61、D71の順で画像メモリ701から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部740は、係数W01、W11、W21、W31、W41の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
さらに、引き続き同様にして、画像メモリ読み出し制御部750は、画素データD02、D12、D22、D32、D42、D52、D62、D72の順で画像メモリ701から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部740は、係数W02、W12、W22、W32、W42の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
このようにすることで図3に示す時刻t24の1クロック後に、下記式(3)に示す中間出力画像の画素M21、M31、M41、M51が出力される。具体的には、積和演算器110から中間出力画像の画素M21が、積和演算器111から中間出力画像の画素M31が、積和演算器112から中間出力画像の画素M41が、積和演算器113から中間出力画像の画素M51が、並列にフィルター演算され出力される。
Figure 2010015257
このタイミング、すなわち図3に示す時刻t24の1クロック後において、中間出力画像の画素データM21、M22、M23、M24をシフトレジスタ700にパラレル入力する。これにより、中間出力画像の画素データM21、M22、M23、M24がそれぞれシフトレジスタ700内のレジスタPR0、PR1、PR2、PR3に格納される。
続いて、第一階層のフィルター演算処理で得られた演算中間結果(中間出力画像の画素データ)を画像メモリ701に書き込む。その際に、演算対象画像書き込み方向選択部730は、現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とを比較する。ここで、次の階層(第二階層)で行われるフィルター演算処理に用いるフィルターカーネルはフィルターカーネルBであり、その長辺方向は垂直方向であるので、現階層フィルターカーネルの長辺方向と次階層フィルターカーネルの長辺方向とは異なる。
したがって、演算対象画像書き込み方向選択部730は、演算対象画像書き込み方向として垂直方向を選択する。そして、演算対象画像書き込み方向選択部730は、フィルター係数メモリ書き込み制御部760及び画像メモリ書き込み制御部770に対して、それぞれのメモリにデータを書き込んでいく方向として垂直方向を指示する。このときセレクタ702は演算結果(シフトレジスタ700の出力)を選択する。
画像メモリ書き込み制御部770は、演算対象画像書き込み方向選択部730の指示(垂直方向)に従って、画像メモリ読み出し制御部750が読み出す時の水平スキャン方向と中間出力画像の垂直方向とが一致するように画素データを書き込む。つまり、中間出力画像(演算対象画像)の画素データが、画像メモリ読み出し制御部750の水平スキャン方向の読み出しにより、M00、M01、M02、M03、M04、…、M10、M11、…、と読み出されるように画像メモリ701に格納される。すなわち、中間出力画像(演算対象画像)の画素データは、図7(C)に示すように画像メモリ701に格納される。
なお、中間出力画像のうち、M00、M10等の画像端の領域は、フィルター演算結果としては出力されない。このような端の領域の画素データをどのように扱うかは、本実施形態と関係ないが、例えば0でパディングしてもよい。
第一階層のフィルター演算処理が終了すると、フィルター係数書き込み制御部760は、演算対象画像書き込み方向選択部730の指示(垂直方向)に従って、フィルターカーネルBの係数をフィルター係数メモリ120に書き込む。このとき、フィルター係数メモリ読み出し制御部740が読み出す時の水平スキャン方向とフィルターカーネルの垂直方向とが一致するようにフィルターカーネルBの係数をフィルター係数メモリ120に書き込む。つまり、フィルターカーネルBの係数が、フィルター係数メモリ読み出し制御部740によって、U00、U01、U02、U03、U04、U10、…、U14、U20、…、U24と読み出されるようにフィルター係数メモリ120に格納される。すなわち、フィルターカーネルBの係数は、図7(D)に示すようにフィルター係数メモリ120に格納される。
このように画像メモリ701に中間出力画像の画素データを格納し、フィルター係数メモリ120にフィルターカーネルBの係数を格納した状態において、第二階層のフィルター演算処理が開始される。
第二階層のフィルター演算処理では、画像メモリ読み出し制御部750は、画像メモリ701を水平スキャンする順序で画像メモリ701から画素データを順次読み出す。ここで、第一階層のフィルター演算処理で得られた中間出力画像(第二階層の演算対象画像)の書き込み時に、画像メモリ701の水平方向と中間出力画像の垂直方向とが一致するように画素データを書き込んでいる。したがって、画像メモリ読み出し制御部750は、画素データM00、M01、M02、M03、M04、M05、M06、M07の順で画像メモリ701から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部140は、フィルター係数メモリ120を水平スキャンする順序でフィルター係数メモリ120から係数を順次読み出す。つまり、係数U00、U01、U02、U03、U04の順でフィルター係数が読み出され、積和演算器110〜113に入力される。
積和演算器110〜113は、順次入力されるシフトレジスタ100のレジスタSR0〜SR3から出力された画素データとフィルター係数メモリ120から読み出された係数との乗算を行い乗算結果を累積加算する。
さらに、引き続き同様にして、画像メモリ読み出し制御部750は、画素データM10、M11、M12、M13、M14、M15、M16、M17の順で画像メモリ701から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部740は、係数U10、U11、U12、U13、U14の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
さらに、引き続き同様にして、画像メモリ読み出し制御部750は、画素データM20、M21、M22、M23、M24、M25、M26、M27の順で画像メモリ701から画素データを読み出し、シフトレジスタ100に入力する。それと共に、フィルター係数メモリ読み出し制御部740は、係数U20、U21、U22、U23、U24の順でフィルター係数メモリ120から係数を読み出し、積和演算器110〜113に入力する。
このようにすることで、積和演算器110〜113から、下記式(4)に示す中間出力画像の画素R12、R13、R14、R15が出力される。積和演算器110から中間出力画像の画素R12が、積和演算器111から中間出力画像の画素R13が、積和演算器112から中間出力画像の画素R14が、積和演算器113から中間出力画像の画素R15が、並列にフィルター演算され出力される。
Figure 2010015257
以上、第2の実施形態によれば、演算対象画像書き込み方向選択部730が、次階層のフィルターカーネルの形状を参照して、現階層のフィルター演算処理で得られた演算結果を画像メモリに書き込む方向を選択する。これにより、帯域が広いメモリを使用しなくとも、積和演算器への画素データの供給を効率よく行うことができるとともに、メモリからのデータ読み出しを常に一定方向で行うことが可能になり、データ供給に係る制御が簡略化される。
なお、上述した説明では、フィルター演算処理を行うために画像メモリ701から画素データを読み出す方向、及びフィルター係数メモリから係数を読み出す方向として、水平方向とした場合の例について示した。しかし、これに限定されるものではなく、画像メモリ701から画素データを読み出す方向、及びフィルター係数メモリから係数を読み出す方向を垂直方向とした場合も本発明に含まれる。
また、上述した第1及び第2の実施形態で示したフィルターカーネルは一例であり、これらに限定されるものではなく、任意のフィルターカーネルを用いることができる。
(本発明の他の実施形態)
上述した実施形態の機能を実現するべく各種のデバイスを動作させるように、該各種デバイスと接続された装置又はシステム内のコンピュータ(CPU又はMPU)に対し、前記実施形態の機能を実現するためのソフトウェアのプログラムを供給する。そして、そのシステム又は装置のコンピュータに格納されたプログラムに従って前記各種デバイスを動作させることによって実施したものも、本発明の範疇に含まれる。
また、この場合、前記ソフトウェアのプログラム自体が上述した実施形態の機能を実現することになり、そのプログラム自体は本発明を構成する。また、そのプログラムをコンピュータに供給するための手段、例えばかかるプログラムを格納した記録媒体は本発明を構成する。かかるプログラムを記憶する記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
また、供給されたプログラムがコンピュータにて稼働しているオペレーティングシステム又は他のアプリケーションソフト等と共同して上述の実施形態の機能が実現される場合にもかかるプログラムは本発明の実施形態に含まれることは言うまでもない。
さらに、供給されたプログラムがコンピュータに係る機能拡張ボードや機能拡張ユニットに備わるメモリに格納された後、そのプログラムの指示に基づいてその機能拡張ボード等に備わるCPU等が実際の処理の一部又は全部を行う。その処理によって上述した実施形態の機能が実現される場合にも本発明に含まれることは言うまでもない。
例えば、第1及び第2の実施形態に示した画像処理装置は、図10に示すようなコンピュータ機能800を有し、そのCPU801により第1及び第2の実施形態での動作が実施される。
コンピュータ機能800は、図10に示すように、CPU801と、ROM802と、RAM803とを備える。また、操作部(CONS)809のコントローラ(CONSC)805と、CRTやLCD等の表示部としてのディスプレイ(DISP)810のディスプレイコントローラ(DISPC)806とを備える。さらに、ハードディスク(HD)811、及びフレキシブルディスク等の記憶デバイス(STD)812のコントローラ(DCONT)807と、ネットワークインタフェースカード(NIC)808とを備える。それら機能部801、802、803、805、806、807、808は、システムバス804を介して互いに通信可能に接続された構成としている。
CPU801は、ROM802又はHD811に記憶されたソフトウェア、又はSTD812より供給されるソフトウェアを実行することで、システムバス804に接続された各構成部を総括的に制御する。すなわち、CPU801は、上述したような動作を行うための処理プログラムを、ROM802、HD811、又はSTD812から読み出して実行することで、第1及び第2の実施形態での動作を実現するための制御を行う。RAM803は、CPU801の主メモリ又はワークエリア等として機能する。
CONSC805は、CONS809からの指示入力を制御する。DISPC806は、DISP810の表示を制御する。DCONT807は、ブートプログラム、種々のアプリケーション、ユーザファイル、ネットワーク管理プログラム、及び第1及び第2の実施形態における前記処理プログラム等を記憶するHD811及びSTD812とのアクセスを制御する。NIC808はネットワーク813上の他の装置と双方向にデータをやりとりする。
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明の第1の実施形態に係る画像処理装置の構成例を示す図である。 第1の実施形態における入力画像、フィルターカーネル、演算出力画像の一例を示す図である。 第1の実施形態における画像処理装置の動作例を示す図である。 第1の実施形態における入力画像、フィルターカーネル、演算出力画像の他の例を示す図である。 本発明の第2の実施形態に係る画像処理装置の構成例を示す図である。 第2の実施形態における入力画像、フィルターカーネル、中間出力画像、及び演算出力画像の一例を示す図である。 第2の実施形態における演算対象画像及びフィルターカーネルのメモリ格納状態の一例を示す図である。 画像データに対して3×3の2次元フィルターの演算を行う演算装置の構成を示す図である。 図8に示した演算装置における画像フレームの画素と内部メモリセルの内容との対応、及び並列転送回路の制御方法を示す図である。 本実施例における画像処理装置を実現可能なコンピュータ機能を示すブロック図である。
符号の説明
100 シフトレジスタ
101、701 画像メモリ
110〜113 演算器
120 フィルター係数メモリ
130 並列演算画素方向選択部
140、740 フィルター係数メモリ読み出し制御部
150、750 画像メモリ読み出し制御部
730 演算対象画像書き込み方向選択部
760 フィルター係数メモリ書き込み制御部
770 画像メモリ書き込み制御部

Claims (13)

  1. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理装置であって、
    前記画像メモリから読み出された前記画像データにおける複数の画素データを一時的に記憶するとともに、記憶している前記複数の画素データを所定の規則に従って並列に出力する記憶手段と、
    前記フィルターの係数と、前記記憶手段から出力される前記複数の画素データとを用いた演算を並列に行う複数の演算手段と、
    前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記複数の演算手段によって並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択手段とを有することを特徴とする画像処理装置。
  2. 前記フィルターの係数が記憶されている係数メモリと、
    前記選択手段により選択された前記並列演算画素方向に従った前記画像メモリからの前記複数の画素データの読み出しを制御する画像メモリ読み出し制御手段と、
    前記選択手段により選択された前記並列演算画素方向に従った前記係数メモリからの前記フィルターの係数の読み出しを制御する係数メモリ読み出し制御手段とを有することを特徴とする請求項1記載の画像処理装置。
  3. 前記選択手段は、前記並列演算画素方向として前記フィルターの長辺方向を選択することを特徴とする請求項1又は2記載の画像処理装置。
  4. 前記選択手段が前記並列演算画素方向として前記フィルターの水平方向を選択した場合には、前記画像メモリを水平スキャンする順序で前記画像メモリから画素データを順次読み出して前記記憶手段に記憶させ、
    前記選択手段が前記並列演算画素方向として前記フィルターの垂直方向を選択した場合には、前記画像メモリを垂直スキャンする順序で前記画像メモリから画素データを順次読み出して前記記憶手段に記憶させ、
    前記選択手段での選択にかかわらず、前記複数の演算手段に対して前記フィルターの長辺方向から係数を入力していくことを特徴とする請求項1〜3の何れか1項に記載の画像処理装置。
  5. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理装置であって、
    前記画像メモリから読み出された前記画像データにおける複数の画素データを一時的に記憶するとともに、記憶している前記複数の画素データを所定の規則に従って並列に出力する記憶手段と、
    前記フィルターの係数と、前記記憶手段から出力される前記複数の画素データとを用いた演算を並列に行う複数の演算手段と、
    前記複数の演算手段により得られる複数の演算結果を前記画像メモリに書き込む画像メモリ書き込み制御手段と、
    処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記画像メモリ書き込み制御手段が前記複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択手段とを有することを特徴とする画像処理装置。
  6. 前記フィルターの係数を記憶する係数メモリと、
    前記選択手段により選択された前記書き込み方向に従って前記係数メモリに前記第2のフィルターの係数を書き込む係数メモリ書き込み制御手段とを有することを特徴とする請求項5記載の画像処理装置。
  7. 前記選択手段は、
    前記第1のフィルターの長辺方向と前記第2のフィルターの長辺方向とが一致する場合には、前記記憶手段に記憶させる前記複数の画素データを前記画像メモリから読み出す際に前記画像メモリをスキャンする方向と同じ方向を前記書き込み方向として選択し、
    前記第1のフィルターの長辺方向と前記第2のフィルターの長辺方向とが異なる場合には、前記記憶手段に記憶させる前記複数の画素データを前記画像メモリから読み出す際に前記画像メモリをスキャンする方向と異なる方向を前記書き込み方向として選択することを特徴とする請求項5又は6記載の画像処理装置。
  8. 前記選択手段での選択にかかわらず、前記画像メモリの一定方向から画素データを順次読み出して前記記憶手段に記憶させ、
    前記選択手段での選択にかかわらず、前記複数の演算手段に対して前記フィルターの長辺方向から係数を入力していくことを特徴とする請求項5〜7の何れか1項に記載の画像処理装置。
  9. 前記記憶手段は、一方向に順次シフトさせながら保持している画素データを前記演算手段に供給するシフトレジスタであることを特徴とする請求項1〜8の何れか1項に記載の画像処理装置。
  10. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理方法であって、
    前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出し工程と、
    前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力工程と、
    前記フィルターの係数と、前記出力工程にて出力される前記複数の画素データとを用いた演算を並列に行う演算工程と、
    前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記演算工程にて並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択工程とを有し、
    前記読み出し工程では、前記選択工程にて選択された前記並列演算画素方向に従い前記画像メモリから前記画素データを順次読み出すことを特徴とする画像処理方法。
  11. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理方法であって、
    前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出し工程と、
    前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力工程と、
    前記フィルターの係数と、前記出力工程にて出力される前記複数の画素データとを用いた演算を並列に行う演算工程と、
    処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記演算工程にて得られる複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択工程と、
    前記選択工程にて選択された書き込み方向で前記複数の演算結果を前記画像メモリに書き込む書き込み工程とを有することを特徴とする画像処理方法。
  12. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行う画像処理をコンピュータに実行させるためのプログラムであって、
    前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出しステップと、
    前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力ステップと、
    前記フィルターの係数と、前記出力ステップにて出力される前記複数の画素データとを用いた演算を並列に行う演算ステップと、
    前記フィルターの水平方向サイズ及び垂直方向サイズに基づいて、前記演算ステップにて並列に演算が行われる画素列が並ぶ並列演算画素方向を選択する選択ステップとをコンピュータに実行させ、
    前記読み出しステップでは、前記選択ステップにて選択された前記並列演算画素方向に従い前記画像メモリから前記画素データを順次読み出すことを特徴とするプログラム。
  13. 係数が2次元配列されたフィルターを走査させて、画像メモリに記憶されている画像データに対するフィルター演算処理を行い、かつ前記フィルターを順次更新して前記画像データに対するフィルター演算処理を繰り返し行う画像処理をコンピュータに実行させるためのプログラムであって、
    前記画像メモリから前記画像データにおける複数の画素データを読み出して記憶手段に記憶させる読み出しステップと、
    前記記憶手段に記憶されている前記複数の画素データを所定の規則に従って並列に出力する出力ステップと、
    前記フィルターの係数と、前記出力ステップにて出力される前記複数の画素データとを用いた演算を並列に行う演算ステップと、
    処理中のフィルター演算処理で用いられている第1のフィルターの長辺方向、及び次に行われるフィルター演算処理で用いる第2のフィルターの長辺方向とに基づいて、前記演算ステップにて得られる複数の演算結果を前記画像メモリに書き込んでいく書き込み方向を選択する選択ステップと、
    前記選択ステップにて選択された書き込み方向で前記複数の演算結果を前記画像メモリに書き込む書き込みステップとをコンピュータに実行させるためのプログラム。
JP2008172658A 2008-07-01 2008-07-01 画像処理装置、画像処理方法、及びプログラム Pending JP2010015257A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008172658A JP2010015257A (ja) 2008-07-01 2008-07-01 画像処理装置、画像処理方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008172658A JP2010015257A (ja) 2008-07-01 2008-07-01 画像処理装置、画像処理方法、及びプログラム

Publications (1)

Publication Number Publication Date
JP2010015257A true JP2010015257A (ja) 2010-01-21

Family

ID=41701338

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008172658A Pending JP2010015257A (ja) 2008-07-01 2008-07-01 画像処理装置、画像処理方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP2010015257A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109447892A (zh) * 2017-03-31 2019-03-08 三星电子株式会社 半导体装置
JP2019074967A (ja) * 2017-10-17 2019-05-16 キヤノン株式会社 フィルタ処理装置およびその制御方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109447892A (zh) * 2017-03-31 2019-03-08 三星电子株式会社 半导体装置
CN109447892B (zh) * 2017-03-31 2023-11-28 三星电子株式会社 半导体装置
JP2019074967A (ja) * 2017-10-17 2019-05-16 キヤノン株式会社 フィルタ処理装置およびその制御方法
JP2022089892A (ja) * 2017-10-17 2022-06-16 キヤノン株式会社 フィルタ処理装置およびその制御方法
JP7352684B2 (ja) 2017-10-17 2023-09-28 キヤノン株式会社 フィルタ処理装置およびその制御方法

Similar Documents

Publication Publication Date Title
CN106445471B (zh) 处理器和用于在处理器上执行矩阵乘运算的方法
JP6945986B2 (ja) 演算回路、その制御方法及びプログラム
WO2018074012A1 (ja) 演算処理回路および認識システム
JP3251421B2 (ja) 半導体集積回路
JP5522893B2 (ja) 画像処理装置、画像処理方法及びプログラム
CN111898733B (zh) 一种深度可分离卷积神经网络加速器架构
CN108073549B (zh) 卷积运算装置及方法
CN112395092B (zh) 数据处理方法及人工智能处理器
JP2004199222A (ja) 対称型画像フィルタ処理装置、プログラム、及びその方法
Colleman et al. High-utilization, high-flexibility depth-first CNN coprocessor for image pixel processing on FPGA
CN110414672B (zh) 卷积运算方法、装置及系统
JP2021517702A (ja) 効率的な畳み込みエンジン
JP7352684B2 (ja) フィルタ処理装置およびその制御方法
US20220113944A1 (en) Arithmetic processing device
JP2010015257A (ja) 画像処理装置、画像処理方法、及びプログラム
WO2020230374A1 (ja) 演算装置および演算システム
JP4712503B2 (ja) リコンフィグ可能な画像処理用アドレス生成回路及びそれを有するリコンフィグlsi
KR20200110165A (ko) 뉴럴 네트워크의 레이어들의 처리에서 제로 값(zero value)의 연산을 처리하는 방법 및 장치
CN112712457B (zh) 数据处理方法以及人工智能处理器
CN113627587A (zh) 一种多通道式卷积神经网络加速方法及装置
JP2022074442A (ja) 演算装置および演算方法
JP7292903B2 (ja) 画像処理装置及び画像処理方法
JP5608932B2 (ja) 並列プロセッサ用のアドレス指定装置
JP2022518640A (ja) データ処理方法、装置、機器、記憶媒体及びプログラム製品
TWI616840B (zh) 卷積運算裝置及方法