(57)【特許請求の範囲】
【請求項１】
２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは３以上の整数）の係数を保持する係数用レジスタと、
Ｎ個のデータ値を保持するデータレジスタと、
ｍ個（２≦ｍ＜Ｎ）の積和演算器を備えた前処理回路と、
１〜Ｎ番目の積和レジスタを備えた後処理回路とを有し、
初期化サイクルにおいて前記１〜Ｎ番目の内の１〜Ｎ−１番目の積和レジスタを初期化し、
その後、１〜Ｎサイクルにかけて順に、前記２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータ値を前記データレジスタに保持し、
各サイクル毎に、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ個のデータ値と、前記Ｎ列×Ｎ行のいずれかの列のＮ個の係数との間の積和を演算する操作を、Ｎ回未満繰り返して行うことにより前記Ｎ個のデータ値と全ての列の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記Ｎ個のデータ値と前記１列目のＮ個の係数との間の積和演算結果を前記後処理回路の１番目の積和レジスタに保持するとともに、前記Ｎ個のデータ値と前記ｎ列目（ｎ＝２〜Ｎ）の係数との間の積和演算結果と、前サイクルで前記後処理回路のｎ−１番目の積和レジスタに保持した値との積算値を、該後処理回路のｎ番目の積和レジスタに保持することにより、
前記Ｎ番目の積和レジスタから、前記２次元空間の前記Ｎ列×Ｎ行の範囲の中心に位置する第１の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路。
【請求項２】
前記後処理回路がさらに、前記１〜Ｎ番目の積和レジスタのそれぞれに対応して設けられた１〜Ｎ番目の一時レジスタを備え、
前記各サイクル毎に、前記積和演算器が演算した、前記データ値と前記１〜Ｎ列目の係数との間の積和演算結果のそれぞれを前記１〜Ｎ番目の一時レジスタに保持した後に、該一時レジスタのｎ番目に保持した積和演算結果と前記前サイクルでｎ−１番目の積和レジスタに保持された値との積算値を、前記ｎ番目の積和レジスタに保持することを特徴とする請求項１記載の演算回路。
【請求項３】
２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは２以上の整数）の係数を保持する係数用レジスタと、
Ｎ列×Ｎ行のデータレジスタと、
Ｎ個の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを有し、
前記データレジスタに前記２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持し、
第１サイクルにおいて、前記Ｎ個の内のｎ番目（ｎ＝１〜Ｎ）の積和演算器で、前記Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値と前記Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算し、それぞれの演算結果を、前記後処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記データレジスタに保持されたデータを−１列分シフトし、該データレジスタのＮ列目に、前記２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、
前記ｎ番目の積和演算器で、前記Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値と前記Ｎ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算し、それぞれの演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、前記後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路。
【請求項４】
２次元空間に配置されたデータとＮ列×Ｎ行（Ｎは２以上の整数）の係数との間の畳み込み演算を行う演算方法であって、
Ｎ個の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを用意し、
第１サイクルにおいて、前記２次元空間のＮ列×Ｎ行の範囲のデータ値と、前記Ｎ列×Ｎ行の第１列のＮ個の係数とを前記前処理回路に供給し、前記Ｎ個の内のｎ番目（ｎ＝１〜Ｎ）の積和演算器で、前記２次元空間のｎ列目のＮ個のデータ値と前記Ｎ個の係数との間の積和を演算し、その演算結果を、前記後処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記２次元空間のＮ列×Ｎ行のｋ列目から、該Ｎ列×Ｎ行の範囲に列方向に隣接する、Ｎ＋ｋ−１列目までのデータ値と、前記Ｎ列×Ｎ行の内のｋ列目のＮ個の係数とを前記前処理回路に供給し、前記ｎ番目の積和演算器で、前記２次元空間の（Ｎ＋ｋ−１）列目のＮ個のデータ値と前記Ｎ個の係数との間の積和を演算し、それぞれの演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、前記後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算方法。
【請求項５】
２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは２以上の整数）の係数を保持する係数用レジスタと、
Ｎ列×Ｎ行のデータレジスタと、
ｍ個（ｍ＜Ｎ）の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを有し、
前記データレジスタに前記２次元空間内のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持し、
第１サイクルにおいて、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、前記Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算する操作を繰り返して行うことにより、前記データレジスタの全ての列に保持されたデータ値と前記１列目の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記データレジスタのｎ列目（ｎ＝１〜Ｎ）に保持されたデータ値と前記１列目の係数との間の積和演算結果を、前記前処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記データレジスタに保持されたデータを列方向に−１シフトし、該データレジスタのＮ列目に、前記２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、前記Ｎ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算する操作を、繰り返して行うことにより、前記データレジスタの全ての列に保持されたデータ値と前記ｋ列目の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記データレジスタのｎ列目に保持されたデータ値と前記ｋ列目の係数との間の積和演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、該後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１の演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２次元空間に配置されたデータに対し、畳み込み演算によって各種のフィルタ処理を行う演算回路およびその演算方法に関するものである。
【背景技術】
【０００２】
元画像にデジタル処理を行い、画質の向上、ノイズ除去、エッヂ強調などのフィルタ処理を行う従来技術の１つとして畳み込み演算が知られている。畳み込み演算は、主に画像などのように、ｘ列×ｙ行からなる２次元空間に配置されたデータに対して各種のフィルタ処理をするために使用される。畳み込み演算は、一般的に上記の目的で使用される場合が多いが、その係数値を変えることによって、様々な特性を持つフィルタを構成することができる。
【０００３】
例えば、５列×５行のフィルタ処理を行う場合、元画像の列方向（横方向）をｘ、行方向（縦方向）をｙ、元画像のｘ列ｙ行目の画素値をＬx,y、フィルタ処理後のｘ列ｙ行目の画素値をＰx,y、５列×５行のフィルタ係数のｉ列ｊ行目の係数値をＣi,jとすると、フィルタ処理後の画素値Ｐx,yは下記式（１）により算出される。上記の通り、フィルタの特性は係数値Ｃi,jにより決定され、画質の向上、ノイズ除去、エッヂ強調などの各種の機能を果たす。
【０００４】
【数１】
0004833690.tif 000002
【０００５】
以下、説明を簡単にするために、元画像（フィルタ処理前）の２列×２行の４画素分の画素値から、フィルタ処理後の１画素の画素値を算出する畳み込み演算を行うフィルタ（演算回路）について説明する。
【０００６】
ここでは、図８に示す元画像の各画素の画素値Ｌ１１，Ｌ１２，Ｌ１３，…、Ｌ２１，Ｌ２２，Ｌ２３，…、Ｌ３１，Ｌ３２，Ｌ３３，…に対して畳み込み演算によるフィルタ処理を行い、図９に示すフィルタ処理後の画像の各画素の画素値Ｐ１１，Ｐ１２，Ｐ１２，…、Ｐ２１，Ｐ２２，Ｐ２３，…を算出するものとする。
【０００７】
図１０は、元画像の各画素の画素値とフィルタ処理後の画像の各画素の画素値との関係を表す一例の概念図である。すなわち、この例では、元画像の２列×２行＝４画素分の画素値Ｌi,j，Ｌi,j+1，Ｌi+1,j，Ｌi+1,j+1を使用して、フィルタ処理後の１画素の画素値Ｐi,jが算出される。２列×２行のフィルタの場合、４個（＝２列×２行）のフィルタ係数Ｃ1,1，Ｃ1,2，Ｃ2,1，Ｃ2,2が必要である。フィルタ処理後の各画素の画素値Ｐi,jは下記式（２）により算出される。
【０００８】
Ｐi,j＝Ｃ1,1Ｌi,j＋Ｃ1,2Ｌi,j+1＋Ｃ2,1Ｌi+1,j＋Ｃ2,2Ｌi+1,j+1  …  （２）
【０００９】
例えば、フィルタ処理後の画像の最初の画素の画素値Ｐ１１は、図１１に示すように、四角の太枠で囲まれた元画像の１および２列目の４画素分の画素値Ｌ１１，Ｌ２１，Ｌ１２，Ｌ２２を使用して算出される。また、図１３に示す順序でフィルタ処理を行う場合、フィルタ処理後の画像の２番目の画素の画素値Ｐ１２は、図１２に示すように、四角の太枠で囲まれた元画像の２及び３列目の４画素分の画素値Ｌ１２，Ｌ２２，Ｌ１３，Ｌ２３を使用して算出される。
【００１０】
また、例えばノイズ除去のフィルタ処理を行う場合、元画像の４画素分の画素値Ｌi,j，Ｌi,j+1，Ｌi+1,j，Ｌi+1,j+1の平均値を算出するために、フィルタ係数Ｃ1,1，Ｃ1,2，Ｃ2,1，Ｃ2,2を下記式（３）のように全て同じ値の１／４に設定する。これにより、上記式（２）は下記式（４）の形式となる。このように、元画像の４画素分の画素値Ｌi,j，Ｌi,j+1，Ｌi+1,j，Ｌi+1,j+1の平均値を算出することにより、元画像における小さなノイズを除去する効果を得ることができる。
【００１１】
Ｃ1,1＝Ｃ1,2＝Ｃ2,1＝Ｃ2,2＝１／４  …  （３）
Ｐi,j＝（Ｌi,j＋Ｌi,j+1＋Ｌi+1,j＋Ｌi+1,j+1）／４  …  （４）
【００１２】
ここで、上記式（２）により、図１３に示す順序でフィルタ処理を行う場合、例えばフィルタ処理後の画素の画素値Ｐ１１とＰ１２のように、隣りあう画素の演算において、図１１と図１２とを見比べると分かるように、１列の２画素分の画素値Ｌ１２とＬ２２が、Ｐ１１とＰ１２の演算の両方で使用されている。従って、例えば特許文献１などには、隣りあう画素の演算において共通に使用される元画像の同じ画素の画素値をメモリなどから２度読み出すことを防止する技術が提案されている。
【００１３】
以下、特許文献１について説明する。
【００１４】
図１４は、従来の畳み込み演算によるフィルタ処理を行う演算回路の構成を表す一例の概略図である。同図に示す演算回路１４０は、説明を簡単化するために、特許文献１によって提案された技術を２列×２行のフィルタとして構成したものである。演算回路１４０は、画像情報記憶装置１４１と、元画像用レジスタ１４２と、係数用シフトレジスタ１４４と、マルチプレクサ（ＭＵＸ）１４５と、積和演算器１４６と、加算器１４８と、マルチプレクサ（ＭＵＸ）１４９と、２つのフリップフロップ１５０ａ、１５０ｂからなる中間結果レジスタ１５４と、カウンタ１５６とによって構成されている。
【００１５】
また、図１５および図１６は、図１４に示す演算回路１４０のカウンタ１５６のカウント値＝０の場合と、カウント値＝１の場合における演算回路１４０の状態を概念的に表したものである。また、図１７は、演算回路１４０で用いられている積和演算器１４６の構成を表す概念図であって、係数値Ｃ１（Ｃ１１またはＣ２１）と画素値Ｌ１とを乗算する乗算器１６０ａと、係数値Ｃ２（Ｃ１２またはＣ２２）と画素値Ｌ２とを乗算する乗算器１６０ｂと、２つの乗算器１６０ａ、１６０ｂの演算結果を加算する加算器１６２とによって構成されている。
【００１６】
カウンタ１５６は、初期化後、０，１を繰り返しカウントする。カウンタ１５６のカウント値＝０の場合、画像情報記憶装置１４１に記憶されている元画像の中から、処理対象となる１列の２画素分の画素値が読み出され、元画像用レジスタ１４２に、それぞれＬ１，Ｌ２として保持される。また、図１５に示すように、係数用シフトレジスタ１４４からは、マルチプレクサ１４５を介して係数値Ｃ１１，Ｃ２１が出力される。
【００１７】
積和演算器１４６では、元画像用レジスタ１４２から入力される１列の２画素分の画素値Ｌ１，Ｌ２と、係数用シフトレジスタ１４４から入力される係数値Ｃ１１，Ｃ２１との積和演算Ｃ１１Ｌ１＋Ｃ２１Ｌ２が行われる。加算器１４８では、積和演算器１４６の演算結果と０との加算が行われ、その加算結果Ｃ１１Ｌ１＋Ｃ２１Ｌ２が、マルチプレクサ１４９を介して中間結果レジスタ１５４のフリップフロップ１５０ａに入力される。
【００１８】
中間結果レジスタ１５４のフリップフロップ１５０ａには、クロック信号に同期して、加算器１４８から入力される加算結果が保持される。フリップフロップ１５０ｂには、同じくクロック信号に同期して、フリップフロップ１５０ａの出力が保持されるとともに、フィルタ処理後の画素の画素値として出力される。すなわち、フリップフロップ１５０ｂには、１サイクル（１クロック）前にフリップフロップ１５０ａに保持された値が保持される。
【００１９】
一方、カウンタ１５６のカウント値＝１の場合、画像情報記憶装置１４１から新たな画素値の読み出しは行われない。従って、元画像用レジスタ１４２には、カウンタ１５６のカウント値＝０の時の２画素分の画素値Ｌ１，Ｌ２が保持されている。係数用シフトレジスタ１４４からは、図１６に示すように、係数値Ｃ１２，Ｃ２２が出力される。積和演算器１４６では、１列の２画素分の画素値Ｌ１，Ｌ２と、係数値Ｃ１２，Ｃ２２との積和演算Ｃ１２Ｌ１＋Ｃ２２Ｌ２が行われる。
【００２０】
加算器１４８では、積和演算器１４６の演算結果とフリップフロップ１５０ｂの出力とが加算される。これにより、３サイクル前にカウンタ１５６のカウンタ値＝０であった時の積和演算器１４６の演算結果Ｃ１１Ｌ１＋Ｃ２１Ｌ２とカウンタ値＝１の時の演算結果Ｃ１２Ｌ１＋Ｃ２２Ｌ２とが加算される。フリップフロップ１５０ｂには、クロック信号に同期して、加算器１４８の加算結果が保持されるとともに、フィルタ処理後の画素の画素値として出力される。フリップフロップ１５０ａには、自分自身の１サイクル前の保持値が保持（維持）される。
【００２１】
次に、下記表１を参照しながら、演算回路１４０の動作を具体的に説明する。
【００２２】
【表１】
0004833690.tif 000003
【００２３】
最初のサイクルは、初期化のサイクルである。中間結果レジスタ１５４の２つのフリップフロップ１５０ａ、１５０ｂの保持値Ｐ１，Ｐ２は０となる。また、表１中では省略しているが、係数用シフトレジスタ１４４には、係数値Ｃ１１，Ｃ２１，Ｃ１２，Ｃ２２が設定される。
【００２４】
サイクル１では、カウンタ１５６のカウント値＝０である。従って、画像情報記憶装置１４１から、最初の１列目の２画素分の画素値Ｌ１１，Ｌ２１が読み出され、それぞれ元画像用レジスタ１４２にＬ１，Ｌ２として保持される。また、係数用シフトレジスタ１４４からは係数値Ｃ１１，Ｃ２１が出力される。そして、積和演算器１４６により、Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が演算され、加算器１４８により、さらに０が加算される。加算器１４８の加算結果Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１は、クロック信号に同期して、中間結果レジスタ１５４のフリップフロップ１５０ａに、保持値Ｐ１として保持される。フリップフロップ１５０ｂには、フリップフロップ１５０ａに１サイクル前に保持された値である０が、保持値Ｐ２として保持される。
【００２５】
サイクル２では、カウンタ１５６のカウント値＝１となる。従って、元画像用レジスタ１４２のＬ１，Ｌ２は、Ｌ１１，Ｌ２１のままである。一方、係数用シフトレジスタ１４４からは係数値Ｃ１２，Ｃ２２が出力される。そして、積和演算器１４６により、Ｃ１２Ｌ１１＋Ｃ２２Ｌ２１が演算され、加算器１４８により、さらに中間結果レジスタ１５４のフリップフロップ１５０ｂの出力０が加算される。加算器１４８の加算結果Ｃ１２Ｌ１１＋Ｃ２２Ｌ２１は、クロック信号に同期して、中間結果レジスタ１５４のフリップフロップ１５０ｂに保持される。フリップフロップ１５０ａは、自分自身の出力であるＣ１１Ｌ１１＋Ｃ２１Ｌ２１を維持する。
【００２６】
サイクル３では、再びカウンタ１５６のカウント値＝０となる。２番目の１列の２画素分の画素値Ｌ１２，Ｌ２２が読み出され、それぞれ元画像用レジスタ１４２にＬ１，Ｌ２として保持される。係数用シフトレジスタ１４４からは係数値Ｃ１１，Ｃ２１が出力される。そして、積和演算器１４６により、Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２が演算され、加算器１４８により、さらに０が加算される。加算器１４８の加算結果Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２は、クロック信号に同期して、中間結果レジスタ１５４のフリップフロップ１５０ａに保持される。フリップフロップ１５０ｂには、フリップフロップ１５０ａの出力Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が保持される。
【００２７】
サイクル４では、再びカウンタ１５６のカウント値＝１となる。同じく元画像用レジスタ１４２のＬ１，Ｌ２は、Ｌ１２，Ｌ２２のままである。係数用シフトレジスタ１４４からは係数値Ｃ１２，Ｃ２２が出力される。そして、積和演算器１４６により、Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２が演算され、加算器１４８により、さらに中間結果レジスタ１５４のフリップフロップ１５０ｂの出力Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が加算される。加算器１４８の加算結果Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１＋Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２は、クロック信号に同期して、中間結果レジスタ１５４のフリップフロップ１５０ｂに保持され、フィルタ処理後の画素の画素値Ｐ１１として出力される。フリップフロップ１５０ａは、自分自身の出力Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２を維持する。
【００２８】
サイクル５以降の動作は、上記と同様である。すなわち、演算回路１４０では、初期化後、４サイクルでフィルタ処理後の最初の画素の画素値Ｐ１１が出力され、以後、２サイクル毎に、フィルタ処理後の２番目以降の画素の画素値Ｐ１２，Ｐ１３，…が順次出力される。
【００２９】
上記の通り、特許文献１では、隣りあう画素の演算で共通に使用される元画像の画素の画素値を、画像情報記憶装置から２度読み出す必要がないという利点がある。しかし、特許文献１では、初期化後、フィルタ処理後の最初の画素の画素値Ｐ１１が出力されるまでに、４サイクルを必要とし、２番目以降の画素の画素値Ｐ１２，Ｐ１３，…が出力される毎に、２サイクルを必要とするため、フィルタ処理に処理時間（サイクル数）がかかりすぎるという問題がある。
【００３０】
【特許文献１】特開昭５１−１４１５３６号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
本発明の目的は、前記従来技術に基づく問題点を解消し、２次元空間に配置されたデータに対して、従来よりも少ないサイクル数で畳み込み演算によるフィルタ処理を行うことができる演算回路および演算方法を提供することにある。
【００３２】
また、本発明の他の目的は、畳み込み演算によるフィルタ処理に高速性が要求されない場合、処理速度よりも回路規模を優先させて、その回路規模を適宜削減することができる演算回路および演算方法を提供することにある。
【課題を解決するための手段】
【００３７】
上記目的を達成するために、本発明は、２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは３以上の整数）の係数を保持する係数用レジスタと、
Ｎ個のデータ値を保持するデータレジスタと、
ｍ個（２≦ｍ＜Ｎ）の積和演算器を備えた前処理回路と、
１〜Ｎ番目の積和レジスタを備えた後処理回路とを有し、
初期化サイクルにおいて前記１〜Ｎ番目の内の１〜Ｎ−１番目の積和レジスタを初期化し、
その後、１〜Ｎサイクルにかけて順に、前記２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータ値を前記データレジスタに保持し、
各サイクル毎に、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ個のデータ値と、前記Ｎ列×Ｎ行のいずれかの列のＮ個の係数との間の積和を演算する操作を、Ｎ回未満繰り返して行うことにより前記Ｎ個のデータ値と全ての列の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記Ｎ個のデータ値と前記１列目のＮ個の係数との間の積和演算結果を前記後処理回路の１番目の積和レジスタに保持するとともに、前記Ｎ個のデータ値と前記ｎ列目（ｎ＝２〜Ｎ）の係数との間の積和演算結果と、前サイクルで前記後処理回路のｎ−１番目の積和レジスタに保持した値との積算値を、該後処理回路のｎ番目の積和レジスタに保持することにより、
前記Ｎ番目の積和レジスタから、前記２次元空間の前記Ｎ列×Ｎ行の範囲の中心に位置する第１の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路を提供する。
【００３８】
ここで、前記後処理回路がさらに、前記１〜Ｎ番目の積和レジスタのそれぞれに対応して設けられた１〜Ｎ番目の一時レジスタを備え、
前記各サイクル毎に、前記積和演算器が演算した、前記データ値と前記１〜Ｎ列目の係数との間の積和演算結果のそれぞれを前記１〜Ｎ番目の一時レジスタに保持した後に、該一時レジスタのｎ番目に保持した積和演算結果と前記前サイクルでｎ−１番目の積和レジスタに保持された値との積算値を、前記ｎ番目の積和レジスタに保持することが好ましい。
【００３９】
また、本発明は、２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは２以上の整数）の係数を保持する係数用レジスタと、
Ｎ列×Ｎ行のデータレジスタと、
Ｎ個の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを有し、
前記データレジスタに前記２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持し、
第１サイクルにおいて、前記Ｎ個の内のｎ番目（ｎ＝１〜Ｎ）の積和演算器で、前記Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値と前記Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算し、それぞれの演算結果を、前記後処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記データレジスタに保持されたデータを−１列分シフトし、該データレジスタのＮ列目に、前記２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、
前記ｎ番目の積和演算器で、前記Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値と前記Ｎ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算し、それぞれの演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、前記後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路を提供する。
【００４０】
また、本発明は、２次元空間に配置されたデータとＮ列×Ｎ行（Ｎは２以上の整数）の係数との間の畳み込み演算を行う演算方法であって、
Ｎ個の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを用意し、
第１サイクルにおいて、前記２次元空間のＮ列×Ｎ行の範囲のデータ値と、前記Ｎ列×Ｎ行の第１列のＮ個の係数とを前記前処理回路に供給し、前記Ｎ個の内のｎ番目（ｎ＝１〜Ｎ）の積和演算器で、前記２次元空間のｎ列目のＮ個のデータ値と前記Ｎ個の係数との間の積和を演算し、その演算結果を、前記後処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記２次元空間のＮ列×Ｎ行のｋ列目から、該Ｎ列×Ｎ行の範囲に列方向に隣接する、Ｎ＋ｋ−１列目までのデータ値と、前記Ｎ列×Ｎ行の内のｋ列目のＮ個の係数とを前記前処理回路に供給し、前記ｎ番目の積和演算器で、前記２次元空間の（Ｎ＋ｋ−１）列目のＮ個のデータ値と前記Ｎ個の係数との間の積和を演算し、それぞれの演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、前記後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算方法を提供する。
【００４１】
また、本発明は、２次元空間に配置されたデータの畳み込み演算を行う演算回路であって、
Ｎ列×Ｎ行（Ｎは２以上の整数）の係数を保持する係数用レジスタと、
Ｎ列×Ｎ行のデータレジスタと、
ｍ個（ｍ＜Ｎ）の積和演算器を備えた前処理回路と、
Ｎ個の積和レジスタを備えた後処理回路とを有し、
前記データレジスタに前記２次元空間内のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持し、
第１サイクルにおいて、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、前記Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算する操作を繰り返して行うことにより、前記データレジスタの全ての列に保持されたデータ値と前記１列目の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記データレジスタのｎ列目（ｎ＝１〜Ｎ）に保持されたデータ値と前記１列目の係数との間の積和演算結果を、前記前処理回路のｎ番目の積和レジスタに保持し、
その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、
前記データレジスタに保持されたデータを列方向に−１シフトし、該データレジスタのＮ列目に、前記２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、
前記前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、前記Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、前記Ｎ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算する操作を、繰り返して行うことにより、前記データレジスタの全ての列に保持されたデータ値と前記ｋ列目の係数との間の積和の演算を行い、
前記積和演算器が演算した、前記データレジスタのｎ列目に保持されたデータ値と前記ｋ列目の係数との間の積和演算結果と、前サイクルで前記後処理回路のｎ番目の積和レジスタに保持された値との積算値を、該後処理回路のｎ番目の積和レジスタに保持する操作を繰り返すことにより、
前記Ｎ個の積和レジスタのそれぞれから、前記２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１の演算対象点、および、該２次元空間の列方向に前記第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果を出力することを特徴とする演算回路を提供する。
【発明の効果】
【００４２】
本発明によれば、従来と同様に、隣りあうデータの演算で共通に使用されるデータ値を記憶装置から２度読み出す必要がないという利点がある。また、本発明では、複数の積和演算器を用いて演算処理を行うことよって、従来の演算回路の数倍の処理速度を実現することができる。一方、処理速度が要求されない用途であれば、使用する積和演算器の個数を適宜減らす構成とすることもできるので、回路規模を適宜削減することができる。
【発明を実施するための最良の形態】
【００４３】
以下に、添付の図面に示す好適実施形態に基づいて、本発明の演算回路および演算方法を詳細に説明する。
【００４４】
図１は、本発明の演算回路の構成を表す第１の実施形態の概略図である。同図に示す演算回路１０は、２次元空間に配置された元画像の内の２列×２行の４画素分の画素値から、畳み込み演算によるフィルタ処理を順次行う。演算回路１０は、元画像用レジスタ１２と、係数用レジスタ１４と、前処理回路２２と、後処理回路２４とによって構成されている。
【００４５】
元画像用レジスタ（本発明のデータレジスタ）１２は、クロック信号に同期して、元画像の各画素の画素値が記憶されている画像情報記憶装置（図示省略、図１４を参照）から処理順に読み出される、処理対象の１列の２画素分の画素値を、それぞれＬ１，Ｌ２として順次保持する。元画像用レジスタ１２の出力Ｌ１，Ｌ２は、前処理回路２２の積和演算器１６ａ、１６ｂの両方に共通に入力される。
【００４６】
係数用レジスタ１４は、演算回路１０の機能（フィルタ処理）を決定する係数値を保持する。本実施形態の場合、係数用レジスタ１４には、元画像の２列×２行＝４画素に対応する４個の係数値Ｃ１１，Ｃ２１，Ｃ１２，Ｃ２２が保持されている。１列目の係数値Ｃ１１，Ｃ２１は積和演算器１６ａに入力され、２列目の係数値Ｃ１２，Ｃ２２は積和演算器１６ｂに入力される。
【００４７】
前処理回路２２は、列数分（行数分）の２つの積和演算器１６ａ、１６ｂによって構成されている。
【００４８】
積和演算器１６ａは、１列の２画素分の画素値Ｌ１，Ｌ２と、図１中左側から１列目の２つの係数値Ｃ１１，Ｃ２１との積和演算Ｃ１１Ｌ１＋Ｃ２１Ｌ２を行う。
【００４９】
積和演算器１６ｂは、１列の２画素分の画素値Ｌ１，Ｌ２と、同２列目の２つの係数値Ｃ１２，Ｃ２２との積和演算Ｃ１２Ｌ１＋Ｃ２２Ｌ２を行う。積和演算器１６ｂから出力される演算結果（ｂ）は、加算器１８に入力される。
【００５０】
積和演算器１６ａ、１６ｂは、例えば図１７に示す構成とすることができる。なお、積和演算器１６ａ、１６ｂの構成は、何ら限定されず、同様の積和演算を行うことができる各種構成のものがいずれも使用可能である。
【００５１】
続いて、後処理回路２４は、列数分の２つの積和レジスタ２１ａ、２１ｂによって構成されている。
【００５２】
積和レジスタ２１ａは、フリップフロップ２０ａによって構成されている。フリップフロップ２０ａは、クロック信号（図示省略）の有効エッジ（クロックエッジ）のタイミングで、積和演算器１６ａの出力Ｔ１を保持値Ｐ１として保持する。言い変えると、積和レジスタ２１ａは、積和演算器１６ａの出力と０との加算結果を保持する。このため、次に述べる積和レジスタ２１ｂと比べて加算器が省略されている。フリップフロップ２０ａはまた、Ｐ１を保持する以前には、前サイクルで保持された値を、出力Ｐ１’として加算器１８に出力する。
【００５３】
積和レジスタ２１ｂは、加算器１８と、フリップフロップ２０ｂとによって構成されている。加算器１８によって、積和演算器１６ｂの出力Ｔ２と、フリップフロップ２０ａの出力Ｐ１’との加算が行われ、その加算結果（ｏ）は、クロックエッジのタイミングで、フリップフロップ２０ｂに保持値Ｐ２として保持される。このように、積和レジスタ２１ｂは、加算器１８とフリップフロップ２０ｂとを備えることにより、積和演算器１６ｂの演算結果と前サイクルで積和レジスタ２１ａに保持された値との積算値を算出し、保持する。フリップフロップ２０ｂに保持された値Ｐ２は、フィルタ処理後の画像の各画素の画素値として出力される。
【００５４】
なお、演算結果を保持するためにフリップフロップ２０ａ、２０ｂに供給するクロック信号は、画素値を保持するために元画素用レジスタ１２に供給するクロック信号と同一のものにすることができる。そして、クロック信号の第１の有効エッジのタイミングで元画像用レジスタ１２に保持した画素値を利用した演算結果を、同一のクロック信号の次の有効エッジのタイミングで、フリップフロップ２０ａ、２０ｂに保持することができる。この場合、クロック信号の第１の有効エッジから、次の有効エッジまでの期間が、演算回路１０の１つの演算サイクルになる。
【００５５】
次に、演算回路１０の基本的な動作を説明する。
【００５６】
演算回路１０では、初期化のサイクルで、少なくともフリップフロップ２０ａが初期化され、その保持値は０となる。また、係数用レジスタ１４には、４個の係数値Ｃ１１，Ｃ２１，Ｃ１２，Ｃ２２が設定（保持）される。
【００５７】
続いて、各サイクル毎に、処理順に読み出される元画像の１列の２画素分の画素値が、Ｌ１，Ｌ２として元画像用レジスタ１２に保持される。例えば、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われる場合、元画像用レジスタ１２のＬ１，Ｌ２には、１サイクル毎に、図８中左側から、１列目のＬ１１，Ｌ２１、２列目のＬ１２，Ｌ２２、３列目のＬ１３，Ｌ２３…の順序で１列の２画素分の画素値が保持される。
【００５８】
前処理回路２２の積和演算器１６ａでは、元画像用レジスタ１２から入力される１列の２画素分の画素値Ｌ１，Ｌ２と、係数用レジスタ１４から入力される１列目の係数値Ｃ１１，Ｃ２１との積和演算Ｃ１１Ｌ１＋Ｃ２１Ｌ２が行われる。また、積和演算器１６ｂでは、同じく１列の２画素分の画素値Ｌ１，Ｌ２と、２列目の係数値Ｃ１２，Ｃ２２との積和演算Ｃ１２Ｌ１＋Ｃ２２Ｌ２が行われる。
【００５９】
積和演算器１６ａの出力Ｔ１は、クロックエッジのタイミングで後処理回路２４の積和レジスタ２１ａのフリップフロップ２０ａに保持値Ｐ１として保持される。そして、加算器１８により、積和演算器１６ｂの出力Ｔ２と、フリップフロップ２０ａの出力Ｐ１’（＝１サイクル前の積和演算器１６ａの出力Ｔ１）とが加算される。その加算結果（ｏ）は、同じくクロックエッジのタイミングで、積和レジスタ２１ｂのフリップフロップ２０ｂに保持値Ｐ２として保持され、フィルタ処理後の画像の各画素の画素値として順次出力される。
【００６０】
なお、フィルタ処理後の画像の各画素（演算対象点）の画素値（畳み込み演算結果）は、図１０〜図１２に示すように、２次元空間の２列×２行の処理対象の画素の範囲の中心に位置する。
【００６１】
次に、下記表２を参照しながら、演算回路１０の動作を具体的に説明する。以下の説明では、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われるものとする。
【００６２】
【表２】
0004833690.tif 000004
【００６３】
表２には、各サイクルの開始時に元画像用レジスタ１２に保持される画素値Ｌ１，Ｌ２、その画素値を利用して積和演算器１６ａ、１６ｂが算出する積和演算結果Ｔ１，Ｔ２、および、同一サイクルの最後にフリップフロップ２０ａ、２０ｂに保持される値Ｐ１，Ｐ２を示す。後から示す表３、４についても同様である。
【００６４】
最初のサイクルは、初期化のサイクルである。少なくともフリップフロップ２０ａの保持値が０に初期化される。
【００６５】
サイクル１では、クロック信号の最初のエッジのタイミングで画像情報記憶装置から、図８中左側から１列目の２画素分の画素値Ｌ１１，Ｌ２１が読み出され、元画像用レジスタ１２に、それぞれＬ１，Ｌ２として保持される。その結果、積和演算器１６ａからは、演算結果Ｔ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が出力され、積和演算器１６ｂからは、演算結果Ｔ２＝Ｃ１２Ｌ１１＋Ｃ２２Ｌ２１が出力される。
【００６６】
フリップフロップ２０ａには、クロック信号の次のエッジのタイミングで、積和演算器１６ａの出力Ｔ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が保持値Ｐ１として保持される。加算器１８からは、フリップフロップ２０ａの出力Ｐ１’（表２では、前のサイクル、すなわち、初期化サイクルでのＰ１の値として示されている）＝０と積和演算器１６ｂの出力Ｔ２＝Ｃ１２Ｌ１１＋Ｃ２２Ｌ２１との積算結果（ｏ）＝Ｃ１２Ｌ１１＋Ｃ２２Ｌ２１が出力される。フリップフロップ２０ｂには、クロックエッジのタイミングで、この積算結果（ｏ）が保持値Ｐ２として保持される。
【００６７】
続いて、サイクル２では、画像情報記憶装置から、同２列目の２画素分の画素値Ｌ１２，Ｌ２２が読み出され、元画像用レジスタ１２に、それぞれＬ１，Ｌ２として保持される。その結果、積和演算器１６ａからは、演算結果Ｔ１＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２が出力され、積和演算器１６ｂからは、演算結果Ｔ２＝Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２が出力される。
【００６８】
フリップフロップ２０ａには、クロックエッジに同期して、積和演算器１６ａの出力Ｔ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が保持される。加算器１８からは、前サイクル（サイクル１）でフリップフロップ２０ａに保持された値Ｐ１’（表２では、前のサイクル、すなわち、サイクル１でのＰ１の値として示されている）＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１と積和演算器１６ｂの出力Ｔ２＝Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２との積算結果（ｏ）＝Ｃ１１Ｌ１１＋Ｃ１２Ｌ１２＋Ｃ２１Ｌ２１＋Ｃ２２Ｌ２２が出力される。フリップフロップ２０ｂには、クロックエッジのタイミングで、この積算結果（ｏ）が保持値Ｐ２として保持される。そして、フリップフロップ２０ｂからは、この保持値が、フィルタ処理後の画素値Ｐ１１として出力される。
【００６９】
続いて、サイクル３では、画像情報記憶装置から、同３列目の２画素分の画素値Ｌ１３，Ｌ２３が読み出され、元画像用レジスタ１２に、それぞれＬ１，Ｌ２として保持される。その結果、積和演算器１６ａからは、演算結果Ｔ１＝Ｃ１１Ｌ１３＋Ｃ２１Ｌ２３が出力され、積和演算器１６ｂからは、演算結果Ｔ２＝Ｃ１２Ｌ１３＋Ｃ２２Ｌ２３が出力される。
【００７０】
フリップフロップ２０ａには、クロックエッジのタイミングで、積和演算器１６ａの出力Ｔ１＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２が保持される。加算器１８からは、前サイクル（サイクル２）でフリップフロップ２０ａに保持された値Ｐ１’＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２と積和演算器１６ｂの出力Ｔ２＝Ｃ１２Ｌ１３＋Ｃ２２Ｌ２３との加算結果（ｏ）＝Ｃ１１Ｌ１２＋Ｃ１２Ｌ１３＋Ｃ２１Ｌ２２＋Ｃ２２Ｌ２３が出力される。フリップフロップ２０ｂには、クロックエッジのタイミングで、この加算結果（ｏ）が保持され、フィルタ処理後の画素の画素値Ｐ１２として出力される。
【００７１】
これ以降の動作は、上記と同様である。演算回路１０では、初期化後、２サイクルでフィルタ処理後の最初の画素の画素値Ｐ１１が出力され、以後、１サイクル毎に、フィルタ処理後の２番目以降の画素の画素値Ｐ１２，Ｐ１３，…が順次出力される。
【００７２】
なお、表２では、初期化サイクルにおいてフリップフロップ２０ｂの保持値Ｐ２も０に初期化した場合を示した。しかし、サイクル１において、クロック信号以前に出力される値Ｐ１’が演算に利用されるフリップフロップ２０ａについては初期化の必要があるが、フリップフロップ２０ｂについては初期化は必須ではない。また、図１３に示す順序で１行目のフィルタ処理後の画素の画素値Ｐ１１〜Ｐ１５の出力を終えた後には、再び初期化サイクルを行ってから、１行目と同様のサイクルを繰り返すことによって２行目のフィルタ処理後の画素の画素値の保持および出力を行う。
【００７３】
本実施形態の演算回路１０では、図１４に示す従来の演算回路１４０と同様に、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点がある。また、従来の演算回路１４０では、積和演算器が１つだけしか用いられていないが、本実施形態の演算回路１０では、２つの積和演算器を用いることによって、従来の演算回路１４０の２倍の処理速度が実現されている。さらに、従来の演算回路１４０とは異なり、カウンタ１５６やマルチプレクサ１４９を用いた複雑な制御を必要としない。従って、単純な構成で高い処理速度を実現することが可能である。
【００７４】
次に、第１の実施形態の別の例として、元画像の５列×５行の２５画素分の画素値を用いて畳み込み演算によるフィルタ処理を行う演算回路について説明する。
【００７５】
図２は、本発明の演算回路の構成を表す第２の実施形態の概念図である。同図に示す演算回路３０は、演算回路１０と比べると抽象的な表現となっているが、２次元空間に配置された元画像の５列×５行の２５画素分の画素値から、同様の畳み込み演算によるフィルタ処理を行う。演算回路３０は、元画像用レジスタ３２と、係数用レジスタ３４と、前処理回路４２と、後処理回路４４とによって構成されている。
【００７６】
以下、図２に示す演算回路３０について、図１の演算回路１０との違いを重点的に説明する。
【００７７】
演算回路３０において、元画像用レジスタ３２および係数用レジスタ３４は、図１の演算回路１０の元画像用レジスタ１２および係数用レジスタ１４と同様の機能を有する。なお、図２では、元画像用レジスタ３２が、Ｌiと記された縦長の長方形で表現されている。これは、処理対象となる元画像のｉ番目の１列の５画素分の画素値Ｌ１ｉ〜Ｌ５ｉをまとめてＬiと簡略的に表現したものである。また、係数用レジスタ３４のＣ１〜Ｃ５についても同様である。
【００７８】
前処理回路４２は、列数分の５つの積和演算器３６ａ、３６ｂ、３６ｃ、３６ｄ、３６ｅによって構成されている。前処理回路４２も、図１の演算回路１０の前処理回路２２と同様の機能を有する。例えば、図２中、一番上側（上側から１番目）の積和演算器３６ａは、Ｃ１Ｌi（＝Ｃ１１Ｌ１ｉ＋Ｃ２１Ｌ２ｉ＋Ｃ３１Ｌ３ｉ＋Ｃ４１Ｌ４ｉ＋Ｃ５１Ｌ５ｉ）の演算を行い、その演算結果Ｔ１を出力する。また、２〜５番目の積和演算器３６ｂ、３６ｃ、３６ｄ、３６ｅも同様である。
【００７９】
また、後処理回路４４は、列数分の５つの積和レジスタ４１ａ、４１ｂ、４１ｃ、４１ｄ、４１ｅによって構成されている。後処理回路４４も、図１の演算回路１０の積和レジスタ２１ａ、２１ｂと同様に構成され、同様の機能を有する。すなわち、１つめの積和レジスタ４１ａはフリップフロップのみからなるが、２〜５つめの積和レジスタ４１ｂ〜４１ｅは、加算器とフリップフロップとから構成されている。
【００８０】
一番上側（上側から１番目）の積和レジスタ４１ａは、クロックエッジのタイミングで、１番目の積和演算器３６ａの出力Ｔ１を保持値Ｐ１として保持する。
【００８１】
２番目の積和レジスタ４１ｂは、クロックエッジのタイミングで、積和レジスタ４１ａの出力Ｐ１’と積和演算器３６ｂの演算結果Ｔ２との加算結果を保持値Ｐ２として保持する。
【００８２】
３〜５番目の積和レジスタ４１ｃ、４１ｄ、４１ｅは、２番目の積和レジスタ４１ｂと同様に動作する。そして、最後（５番目）の積和レジスタ４１ｅにクロック信号に同期して保持された保持値Ｐ５が、フィルタ処理後の画像の各画素の画素値Ｐとして出力される。
【００８３】
なお、画素値および係数値を８ビットとすると、図２に示すように、元画像用レジスタ３２から前処理回路４２に対しては８ビット×５＝４０本の配線が接続され、係数用レジスタ３４から前処理回路４２に対しては８ビット×５×５＝２００本の配線が接続される。また、演算結果Ｔ１〜Ｔ５を８ビットとすると、前処理回路４２から後処理回路４４に対しては８ビット×５＝４０本の配線が接続される。そして、フィルタ処理後の画素の画素値を８ビットとすると、後処理回路４４からは、８ビット＝８本の配線が接続される。また、これ以後の実施形態においても、必要に応じて、図中に配線のビット数を示す。
【００８４】
演算回路３０の基本的な動作は、図１の演算回路１０と同様であるから、ここでは、繰り返しの説明を省略する。
【００８５】
同様に、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われる場合、演算回路３０の具体的な動作は、下記表３，４に示す通りである。
【００８６】
【表３】
0004833690.tif 000005
【００８７】
【表４】
0004833690.tif 000006
【００８８】
なお、上記表３，４において、元画像用レジスタ３２の出力Ｌiは、サイクル１でＬ１となっているが、Ｌ１＝Ｌ１１，Ｌ２１，Ｌ３１，Ｌ４１，Ｌ５１の意味である。サイクル２〜６のＬ２〜Ｌ６も同様である。また、積和演算器３６ａの出力Ｔ１は、サイクル１でＣ１Ｌ１となっているが、Ｃ１Ｌ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１＋Ｃ３１Ｌ３１＋Ｃ４１Ｌ４１＋Ｃ５１Ｌ５１の意味である。積和演算器３６ｂ、３６ｃ、３６ｄ、３６ｅの出力Ｔ２〜Ｔ５、積和レジスタ４１ａ、４１ｂ、４１ｃ、４１ｄ、４１ｅの出力Ｐ１〜Ｐ５も同様である。
【００８９】
演算回路３０では、初期化後、５サイクルでフィルタ処理後の最初の画素の画素値Ｐが出力され、以後、１サイクル毎に、フィルタ処理後の２番目以降の画素の画素値Ｐが順次出力される。また、演算回路３０では、同様に、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点があるのはもちろん、５つの積和演算器が用いられているので、従来の５倍の処理速度が実現されている。
【００９０】
なお、本発明は、上記第１および第２の実施形態のように、画像データに限らず、２次元空間に配置された、あらゆる種類のデータのデータ値を畳み込み演算によってフィルタ処理する演算回路にも同様に適用可能である。これ以後の実施形態においても同様である。また、上記第１および第２の実施形態の演算回路１０，３０は、２列×２行や５列×５行のフィルタ処理に限らず、Ｎ列×Ｎ行（Ｎは２以上の整数）のフィルタ処理を行う演算回路に適用可能である。
【００９１】
第１および第２の実施形態の演算回路では、一般的に、初期化後、第１〜Ｎサイクルにかけて順に、２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータ値がデータレジスタに保持され、１番目の積和演算器の演算結果が１番目の積和レジスタに保持される。また、ｎ番目（ｎ＝２〜Ｎ）の積和演算器の演算結果と、前サイクルでｎ−１番目の積和レジスタに保持された値との積算値がｎ番目の積和レジスタに保持される。これにより、Ｎ番目の積和レジスタから、２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１の演算対象点の畳み込み演算結果が出力される。
【００９２】
また、１〜Ｎサイクルに続くＮ＋１サイクルにおいてさらに、順に、２次元空間のＮ列×Ｎ行の範囲に隣接するＮ＋１列目以降のデータ値がデータレジスタに保持される。これにより、Ｎ＋Ｍ（Ｍは１以上の整数）サイクル後に、Ｎ番目の積和レジスタから、第１の演算対象点から列方向に順に隣りあうＭ番目の演算対象点の畳み込み演算結果が出力される。
【００９３】
次に、本発明の第３の実施形態について説明する。
【００９４】
図３は、本発明の演算回路の構成を表す第３の実施形態の概念図である。同図に示す演算回路５０も、図２の演算回路３０と同様に、２次元空間に配置された元画像の５列×５行の２５画素分の画素値から、畳み込み演算によるフィルタ処理を行う。図３の演算回路５０は、元画像用レジスタ５２と、係数用レジスタ５４と、前処理回路６２と、後処理回路６４と、カウンタ６６とによって構成されている。
【００９５】
また、図４は、図３の演算回路５０を具体的に表現した概略図である。なお、図４では、その煩雑さを避けるために、カウンタ６６の表示を省略し、そのカウント値がｊ＝０〜２で表されている。例えば、フリップフロップ６０ａ１のクロック端子はｊ＝０となっているが、これは、フリップフロップ６０ａ１には、カウンタ６６のカウント値ｊ＝０である期間に、クロック信号が入力されることを意味する。
【００９６】
以下、図３および図４に示す演算回路５０について、図２の演算回路３０との違いを重点的に説明する。
【００９７】
演算回路５０において、元画像用レジスタ５２および係数用レジスタ５４は、図２の演算回路３０の元画像用レジスタ３２および係数用レジスタ３４と同様の機能を有する。
【００９８】
図２の演算回路３０では、係数用レジスタ３４から５つの積和演算器３６ａ、３６ｂ、３６ｃ、３６ｄ、３６ｅに各々対応する係数値Ｃ１〜Ｃ５が同時（並列）に出力される。これに対し、図３の演算回路５０では、カウンタ６６のカウント値ｊが変わる毎に、係数用レジスタ５４から２つの積和演算器５６ａ、５６ｂに、１つまたは２つの係数値のみが同時（並列）に出力される。両者は、この点で異なっている。
【００９９】
図２に示す演算回路３０では、１つの係数値Ｃを８ビットとすると、８ビット×５×５＝２００本の配線が必要となる。これに対し、図３および図４に示す演算回路５０では、係数用レジスタ５４から出力される係数値は最大で２つであるから、同じく１つの係数値を８ビットとすると、８ビット×５×２＝８０本の配線だけしか必要がなく、配線数を２／５に削減することができる。
【０１００】
つまり、本実施形態の場合、係数用レジスタ５４の出力ビット幅を少なくできる。このように、出力ビット幅を少なくすることにより、係数用レジスタ５４として、レジスタではなく、実際には、より面積が小さいメモリやＦＩＦＯなどを使用することが可能となる。また、このことは、係数用レジスタ５４に限らず、以下の実施形態に示すように、元画像用レジスタについても同様である。
【０１０１】
続いて、前処理回路６２は、列数（５）に比較して少ない２つの積和演算器５６ａ、５６ｂによって構成されている。
【０１０２】
積和演算器５６ａは、Ｃ2j+1Ｌiの演算を行い、その演算結果Ｔ2j+1を出力する。また、積和演算器５６ｂは、Ｃ2j+2Ｌiの演算を行い、その演算結果Ｔ2j+2を出力する。
【０１０３】
カウンタ６６は、初期化後、クロック信号に同期して、０〜２を繰り返しカウントする。本実施形態の場合、カウンタ６６のカウント値ｊ＝０の時、フィルタ係数用レジスタ５４から係数値Ｃ１，Ｃ２が出力され、それぞれ積和演算器５６ａ、５６ｂに入力される。また、カウント値ｊが１の時、係数値Ｃ３，Ｃ４が、それぞれ積和演算器５６ａ、５６ｂに入力され、カウント値ｊが２の時、係数値Ｃ５が積和演算器５６ａに入力される。
【０１０４】
積和演算器５６ａでは、係数値Ｃ１が入力されると、その演算結果Ｔ１として、Ｃ１１Ｌ１ｉ＋Ｃ２１Ｌ２ｉ＋Ｃ３１Ｌ３ｉ＋Ｃ４１Ｌ４ｉ＋Ｃ５１Ｌ５ｉが出力される。また、Ｃ３が入力されると、Ｔ３として、Ｃ１３Ｌ１ｉ＋Ｃ２３Ｌ２ｉ＋Ｃ３３Ｌ３ｉ＋Ｃ４３Ｌ４ｉ＋Ｃ５３Ｌ５ｉが出力され、Ｃ５が入力されると、Ｔ５として、Ｃ１５Ｌ１ｉ＋Ｃ２５Ｌ２ｉ＋Ｃ３５Ｌ３ｉ＋Ｃ４５Ｌ４ｉ＋Ｃ５５Ｌ５ｉが出力される。
【０１０５】
積和演算器５６ｂでは、係数値Ｃ２が入力されると、その演算結果Ｔ２として、Ｃ１２Ｌ１ｉ＋Ｃ２２Ｌ２ｉ＋Ｃ３２Ｌ３ｉ＋Ｃ４２Ｌ４ｉ＋Ｃ５２Ｌ５ｉが出力される。また、Ｃ４が入力されると、Ｔ４として、Ｃ１４Ｌ１ｉ＋Ｃ２４Ｌ２ｉ＋Ｃ３４Ｌ３ｉ＋Ｃ４４Ｌ４ｉ＋Ｃ５４Ｌ５ｉが出力される。
【０１０６】
なお、積和演算器５６ａに係数値Ｃ５が入力される時、積和演算器５６ｂの出力は後処理回路６４で使用されないので、積和演算器５６ｂに入力される係数値は何ら限定されない。
【０１０７】
続いて、後処理回路６４は、列数分の５つの積和レジスタ６１ａ、６１ｂ、６１ｃ、６１ｄ、６１ｅによって構成されている。
【０１０８】
図４に示すように、１番目の積和レジスタ６１ａは、２つのフリップフロップ６０ａ１，６０ａ２によって構成されている。１段目のフリップフロップ６０ａ１は、カウンタ６６のカウント値ｊ＝０の時に、クロックエッジのタイミングで、積和演算器５６ａの出力を１列目の積和演算結果Ｔ１として一時的に保持する。具体的には、例えば、クロック信号の有効エッジのタイミングでカウンタ６６が動作してカウント値ｊが０に変化し、クロック信号の１周期の間に、係数値の演算器５６ａへの入力、および、演算器５６ａからの積和演算結果の出力が行われ、次の有効エッジのタイミングで、フリップフロップ６０ａ１に保持される。この、１段目のフリップフロップ（以降、「一時レジスタ」と呼ぶ）６０ａ１に保持された積和演算結果は、次にカウント値ｊ＝０となる期間に、クロックエッジのタイミングで、２段目のフリップフロップ６０ａ２に保持値Ｐ１として保持される。一方、Ｐ１が保持される以前には、前回カウント値ｊ＝０であった期間に２段目のフリップフロップ６０ａ２に保持された値Ｐ１’が、フリップフロップ６０ａ２から出力され、２番目の積和レジスタ６１ｂの加算器５８ｂに入力される。
【０１０９】
積和レジスタ６１ｂは、加算器５８ｂと、２つのフリップフロップ６０ｂ１，６０ｂ２とによって構成されている。１段目のフリップフロップ（一時レジスタ）６０ｂ１には、カウンタ６６のカウント値ｊ＝０である期間に、クロックエッジのタイミングで、積和演算器５６ｂの出力を２列目の積和演算結果Ｔ２として保持する。加算器５８ｂは、一時レジスタ６０ｂ１に保持された積和演算結果Ｔ２と、上記フリップフロップ６０ａ２の出力Ｐ１’とを加算する。フリップフロップ６０ｂ２は、次にカウンタ６６のカウント値ｊ＝０となる期間に、クロックエッジのタイミングで、加算器５８ｂの出力Ｐ１’＋Ｔ２を保持する。ここでの演算に利用されるＰ１’は、Ｐ１が保持される以前にフリップフロップ６０ａ２に保持されていた値である。
【０１１０】
積和レジスタ６１ｃ、６１ｄ、６１ｅの構成および動作も、積和レジスタ６１ｂの構成および動作と同様である。すなわち、積和レジスタ６１ｃおよび積和レジスタ６１ｄの一時レジスタ６１ｃ１，６１ｄ１は、カウンタ６６のカウント値ｊ＝１である期間に、クロックエッジのタイミングで、それぞれ積和演算器５６ａおよび５６ｂの出力を、３列目および４列目の積和演算結果Ｔ３，Ｔ４として保持する。積和レジスタ６１ｅの一時レジスタ６０ｅ１は、カウンタ６６のカウント値ｊ＝２である期間に、クロックエッジのタイミングで、積和演算器５６ａの出力を５列目の積和演算結果Ｔ５として保持する。また、積和レジスタ６１ｃ〜６１ｅの加算器５８ｃ〜５８ｅは、それぞれ、積和レジスタ６１ｂ〜６１ｄの２段目のフリップフロップ６０ｂ２〜６０ｄ２に保持された値Ｐ２’〜Ｐ４’と、対応する一時レジスタに保持された積和演算結果Ｔ３〜Ｔ５との積算値を、２段目のフリップフロップ６０ｃ２〜６０ｅ２に出力する。そして、これらの積算値Ｐ２’＋Ｔ３〜Ｐ４’＋Ｔ５は、次にカウント値ｊ＝０になる期間に、クロックエッジのタイミングで、それぞれの積和レジスタの２段目のフリップフロップ６０ｃ２〜６０ｅ２に保持される。
【０１１１】
次に、演算回路５０の基本的な動作を説明する。
【０１１２】
演算回路５０では、初期化処理として、係数用レジスタ１４に、５つの列のそれぞれ５個の係数値Ｃ１〜Ｃ５が保持される。そして、少なくとも積和レジスタ６１ａ、６１ｂ、６１ｃ、６１ｄの一時レジスタおよび２段目のフリップフロップの保持値は全て０に初期化される。
【０１１３】
前述の通り、カウンタ６６は、クロック信号に同期して、０〜２の順に繰り返しカウントを行い、そのカウント値ｊ＝０〜２を出力する。このカウント値ｊは、係数用レジスタ５４、元画像用レジスタ５２、前処理回路６２および後処理回路６４に入力される。そして、カウント値ｊ＝０になる毎に、処理対象となる元画像の１列の５画素分の画素値が、元画像用レジスタ５２にＬｉとして保持される。
【０１１４】
カウンタ６６のカウント値ｊ＝０の期間には、係数値レジスタ５４から、１および２番目の係数値Ｃ１，Ｃ２が出力され、それぞれ前処理回路６２の積和演算器５６ａ、５６ｂに入力される。
【０１１５】
積和演算器５６ａでは、元画像用レジスタ５２から入力される、１番目の１列の５画素分の画素値Ｌ１と、係数用レジスタ５４から入力される、１番目の１列の５つの係数値Ｃ１との積和演算Ｃ１Ｌ１が行われ、その演算結果Ｔ１が出力される。また、積和演算器５６ｂでは、１番目の１列の５画素分の画素値Ｌ１と、２番目の１列の５つの係数値Ｃ２との積和演算Ｃ２Ｌ１が行われ、その演算結果Ｔ２が出力される。
【０１１６】
積和演算器５６ａ、５６ｂの出力Ｔ１およびＴ２は、クロックエッジのタイミングで、それぞれ１番目の積和レジスタ６１ａのフリップフロップ６０ａ１および２番目の積和レジスタ６１ｂのフリップフロップ６０ｂ１に保持される。
【０１１７】
続いて、カウンタ６６のカウント値ｊ＝１の期間には、係数用レジスタ５４から、３および４列目の係数値Ｃ３，Ｃ４が出力され、それぞれ積和演算器５６ａ、５６ｂに入力される。
【０１１８】
同様に、積和演算器５６ａでは、１番目の１列の５画素分の画素値Ｌ１と、３番目の１列の５つの係数値Ｃ３との積和演算Ｃ３Ｌ１が行われ、その演算結果Ｔ３が出力される。また、積和演算器５６ｂでは、１番目の１列の５画素分の画素値Ｌ１と、４番目の１列の５つの係数値Ｃ４との積和演算Ｃ４Ｌ１が行われ、その演算結果Ｔ４が出力される。
【０１１９】
積和演算器５６ａ、５６ｂの出力Ｔ３およびＴ４は、クロックエッジのタイミングで、それぞれ３番目の積和レジスタ６１ｃの一時レジスタ６０ｃ１および４番目の積和レジスタ６１ｄの一時レジスタ６０ｄ１に保持される。
【０１２０】
続いて、カウンタ６６のカウント値ｊ＝２の期間には、係数用レジスタ５４から、５番目の係数値Ｃ５が出力され、前処理回路６２の積和演算器５６ａに入力される。
【０１２１】
積和演算器５６ａでは、１番目の１列の５画素分の画素値Ｌ１と、５番目の１列の５つの係数値Ｃ５との積和演算Ｃ５Ｌ１が行われ、その演算結果Ｔ５が出力される。
【０１２２】
積和演算器５６ａの出力Ｔ５は、クロックエッジのタイミングで、５番目の積和レジスタ６１ｅの一時レジスタ６０ｅ１に保持される。このように、演算回路５０では、列数（５）よりも少ない個数（２個）の積和演算器５６ａ、５６ｂを使用して、カウンタ６６のカウント値がｊ＝０，１，２と変化する間に、５個の積和演算結果Ｔ１〜Ｔ５を算出し、それぞれの積和レジスタ６１ａ〜６１ｅの一時レジスタ６０ａ１〜６０ｅ１に保持する。
【０１２３】
そして、次のカウント値ｊ＝０の期間には、一時レジスタ６０ａ１〜６０ｅ１に一時的に保持した積和演算結果を、そのまま、もしくは、積和レジスタ６１ａ〜６１ｄの２段目のフリップフロップに保持されていた値と積算した上で、２段目のフリップフロップ６０ａ２〜６０ｅ２に保持する。
【０１２４】
積和レジスタ６１ａでは、一時レジスタ６０ａ１に保持された積和演算結果Ｔ１が、クロックエッジのタイミングでフリップフロップ６０ａ２に保持される。また、積和レジスタ６１ｂでは、加算器５８ｂにより、一時レジスタ６０ｂ１に保持された積和演算結果Ｔ２と、フリップフロップ６０ａ２の出力Ｐ１’とが加算され、その加算結果Ｐ１’＋Ｔ１が、クロックエッジのタイミングでフリップフロップ６０ｂ２に、保持値Ｐ２として保持される。ここでの加算演算に利用されるフリップフロップ６０ａ２の出力Ｐ１’は、前回、カウンタ６６のカウント値ｊ＝０であった期間にフリップフロップ６０ａ２に保持された値である。この場合には初期化後の値、すなわち０である。
【０１２５】
積和レジスタ６１ｃでは、加算器５８ｃにより、一時レジスタ６０ｃ１に保持された積和演算結果Ｔ３と、フリップフロップ６０ｂ２の出力Ｐ２’とが加算され、その加算結果Ｐ２’＋Ｔ３が、クロックエッジのタイミングでフリップフロップ６０ｃ３に、保持値Ｐ３として保持される。また、積和レジスタ６１ｄでは、加算器５８ｄにより、一時レジスタ６０ｄ１に保持された積和演算結果Ｔ４と、フリップフロップ６０ｃ２の出力Ｐ３’とが加算され、その加算結果Ｐ３’＋Ｔ４が、クロックエッジのタイミングでフリップフロップ６０ｄ２に、保持値Ｐ４として保持される。ここでの加算結果に利用されるフリップフロップ６０ｂ２および６０ｃ２の出力Ｐ２’およびＰ３’は、前回、カウント値ｊ＝０であった期間にフリップフロップ６０ｂ２および６０ｃ２に保持された値である。この場合には初期化後の値、すなわち０である。
【０１２６】
積和レジスタ６１ｅでは、加算器５８ｅにより、一時レジスタ６０ｅ１に保持された積和演算結果Ｔ５と、フリップフロップ６０ｄ２の出力Ｐ４’とが加算され、その加算結果Ｐ４’＋Ｔ５が、クロックエッジのタイミングで、保持値Ｐ５としてフリップフロップ６０ｅ２に保持される。ここでの加算演算に利用されるフリップフロップ６０ｄ２の出力Ｐ４’は、前回、カウント値ｊ＝０であった期間に保持された値である。この場合には、初期化後の値、すなわち０である。そして、フリップフロップ６０ｅ２の出力Ｐ５が、フィルタ処理後の画像の各画素の画素値Ｐとして出力される。
【０１２７】
このように、演算回路５０では、カウンタ６６のカウンタ値ｊが０，１，２と変化する過程で、２個の積和演算器５６ａ、５６ｂを利用して積和演算Ｃ１Ｌ１〜Ｃ５Ｌ１を行い、その演算結果Ｔ１〜Ｔ５を、１〜５番目の積和レジスタ６１ａ〜６１ｅのそれぞれの一時レジスタ６０ａ１〜６０ｅ１に保持する。そして、次にカウント値ｊ＝０になった期間に、１番目の積和レジスタ６１ａの一時レジスタ６０ａ１に保持された積和演算結果Ｔ１が同一の積和レジスタ６１ａの２段目のフリップフロップ６０ａ２に保持される。同時に、２〜５番目の積和レジスタ６１ｂ〜６１ｅの２段目のフリップフロップ６０ｂ２〜６０ｅ２には、それぞれ、同一の積和レジスタ６１ｂ〜６１ｅの一時レジスタ６０ｂ１〜６０ｅ１に保持された積和演算結果Ｔ２〜Ｔ５と、１〜４番目の積和レジスタ６１ａ〜６１ｄの２段目のフリップフロップ６０ａ２〜６０ｄ２に、前回カウント値ｊ＝０であった期間に保持された値Ｐ１’〜Ｐ４’との積算値が、保持される。
【０１２８】
すなわち、演算回路５０では、カウンタ６６のカウント値ｊが０，１，２と変化し、さらに０に戻る過程で、図２の演算回路３０が１サイクルに実施する演算を実施する。これ以降、カウント値ｊが０，１，２であるそれぞれの期間を、演算のサイクルと区別するために、ステップと呼ぶ。
【０１２９】
演算回路５０では、さらに、カウンタ６６によって、０〜２の順に繰り返しカウントが行われ、上記の動作が繰り返される。そして、演算回路３０と同様に、初期化後５サイクルで、５列×５行の畳み込み演算によるフィルタ処理を行った最初の画素の画素値Ｐが後処理回路６４の最後の積和レジスタ６１ｅのフリップフロップ６０ｅ２に保持され、出力される。
【０１３０】
同様に、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われる場合、演算回路５０の具体的な動作は、下記表５，６に示す通りである。
【０１３１】
【表５】
0004833690.tif 000007
【０１３２】
【表６】
0004833690.tif 000008
【０１３３】
表５および表６には、各ステップにおけるカウント値ｊと、クロックエッジに同期して積和レジスタ６１ａ〜６１ｅのそれぞれの一時レジスタ６０ａ１〜６０ｅ１に保持される積和演算結果Ｔ１〜Ｔ５、および、２段目のフリップフロップ６０ａ２〜６０ｅ２に保持される値Ｐ１〜Ｐ５を示した。従って、カウント値ｊ＝０となるステップにおいて２段目のフリップフロップ６０ｂ２〜６０ｅ２に保持する値を算出するために、それぞれの積和レジスタ６１ｂ〜６１ｅの加算器５８ｂ〜５８ｅに供給される値Ｐ１’〜Ｐ４’は、同一ステップにおけるＰ１〜Ｐ４の値として表６に示された値とは異なる。例えば、表６には、第４ステップにおけるＰ１〜Ｐ４の値としては、それぞれＴ１１，Ｔ２１，Ｔ３１，Ｔ４１が示されている。しかし、同一ステップにおいて加算器５８ｂ〜５８ｅに供給されるＰ１’〜Ｐ４’の値は、前回ｊ＝０であった第１ステップにおいてそれぞれのフリップフロップ６０ａ２〜６０ｄ２に保持され、その後、第３ステップまで維持されていた値、すなわち、０である。なお、表５および表６において、例えばＴ１１は、表４におけるＣ１Ｌ１と同じものである。Ｔ１２，Ｔ１３，…およびＴ２１，Ｔ３１，…、等についても同様である。
【０１３４】
ここで、表４，５を参照しながら、カウンタ６６のカウント値ｊが０，１，２と変化し、さらに０に戻る過程で、演算回路５０が、図２の演算回路３０が１サイクルに実施する演算を実施する処理を説明する。
【０１３５】
例えば、表５，６の第１ステップから開始される第１サイクルにおいては、まず、第１ステップにおいて、元画像用レジスタ５２に１番目の１列の画素値Ｌ１が保持される。そして、第１〜第３ステップにかけて、２つの積和演算器５６ａ、５６ｂによって、元画像用レジスタ５２に保持された１番目の１列の画素値Ｌ１と係数用レジスタ５４に保持された係数値との間の積和演算が行われる。そして、この積和演算結果Ｔ１１〜Ｔ５１が、図４に示されたＴ１〜Ｔ５の値として、積和レジスタ６１ａ〜６１ｅの一時レジスタ６０ａ１〜６０ｅ１に保持される。続いて、第４ステップにおいて、１番目の積和レジスタ６１ａの一時レジスタ６０ａ１に保持された、１番目の１列の画素値と１列目の係数との間の積和演算結果Ｔ１１が、１番目の積和レジスタ６１ａの２段目のフリップフロップ６０ａ２に、表６のＰ１の値として保持される。また、２〜５番目の積和レジスタ６１ｂ〜６１ｅの一時レジスタ６０ｂ１〜６０ｅ１に保持された、１番目の１列の画素値と２〜５列目の係数値との間の積和演算結果Ｔ２１〜Ｔ５１は、それぞれ、１〜４番目の積和レジスタ６１ａ〜６１ｄの２段目のフリップフロップ６０ａ２〜６０ｄ２から供給される値Ｐ１’〜Ｐ４’（第１ステップにおいて保持された値Ｐ１〜Ｐ４）と積算され、２〜５番目の積和レジスタ６１ｂ〜６１ｅの２段目のフリップフロップ６０ｂ２〜６０ｅ２に保持される。この場合には、第１ステップにおいてフリップフロップ６０ａ２〜６０ｄ２に保持された値はいずれも０であるため、積和演算結果Ｔ２１〜Ｔ５１がそのまま、表６のＰ２〜Ｐ５の値として保持される。これによって、第１の処理サイクルが完了する。
【０１３６】
この第４ステップにおいては、第１サイクルにおける第２段のフリップフロップ６０ａ２〜６０ｅ２への積和演算結果もしくは積算値の保持と並行して、第２サイクルにおける元画像用レジスタ５２への２番目の１列の画素値Ｌ２の保持、および、この画素値Ｌ２と係数値との間の積和演算とその結果の一時レジスタへの保持が開始される。すなわち、表５のＴ１，Ｔ２の値は、それぞれＴ１２，Ｔ２２に変化する。このように、演算回路５０においては、カウンタ６６のカウント値ｊが０になるステップにおいて、連続する２つのサイクルの処理の一部が並列して行われる。
【０１３７】
第２サイクルの処理は、さらに第５〜第７ステップにおいて引き続いて行われる。すなわち、第４ステップに続いて第５，６ステップにおいて積和演算とその結果の一時レジスタへの保持が行われ、第７ステップにおいて、第２段のフリップフロップ６０ａ２〜６０ｅ２への積和演算結果もしくは積算値の保持が行われる。ここで、第７ステップにおいて積算値の算出において利用される、１〜４番目の積和レジスタ６１ａ〜６１ｄの２段目のフリップフロップ６０ａ〜６０ｄに保持された値は、前サイクル、すなわち、第４ステップで、クロック信号に同期して保持されたものである。
【０１３８】
ここで、上記第１サイクルの最後に、第４ステップにおいて行われる積算に利用される値Ｐ１’〜Ｐ４’は、初期化ステップに続く第１ステップにおいて２段目のフリップフロップ６０ａ〜６０ｄに保持値Ｐ１〜Ｐ４として保持されたものである。前述のように、第１ステップにおいては、既に第１サイクルの処理としての積和演算および積和演算結果の一時レジスタへの保持が開始されている。しかし、やはり前述のように、演算回路５０においては、カウント値ｊが０になるステップにおいて、連続する２つのサイクルの処理の一部が並列して行われる。すなわち、第１ステップでの２段目のフリップフロップ６０ａ〜６０ｄへの保持値Ｐ１〜Ｐ４の保持は、前サイクルである初期化サイクルの一部として行われる。従って、第１サイクルの最後の第４ステップにおいて積算値の算出に利用される、１〜４番目の積和レジスタ６１ａ〜６１ｄの２段目のフリップフロップ６０ａ〜６０ｄの保持値も、前サイクルで保持された値である。
【０１３９】
その後、第３以降のサイクルの処理も同様に行われ、第５サイクルが終了する第１６ステップにおいて、最初のフィルタ処理後の画素の画素値Ｐが出力される。以後、３サイクル毎に、２番目以降のフィルタ処理後の画素の画素値Ｐが順次出力される。
【０１４０】
本実施形態の演算回路５０においても、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点がある。また、演算回路５０では、２つの積和演算器５６ａ、５６ｂだけを用いている。これにより、その処理速度は、従来の１／３倍となるが、処理速度が要求されない用途であれば、回路規模を削減することができるという利点がある。
【０１４１】
なお、本実施形態では、積和演算器５６ａには、係数値Ｃ１，Ｃ３，Ｃ５の順で順次係数値が入力され、積和演算器５６ｂには、Ｃ２，Ｃ４の順で順次係数値が入力されている。しかし、本発明は、これに限らず、積和演算器に係数値が入力される順序はどのような順序であっても良い。また、積和演算器５６ａ、５６ｂのどちらにどの係数値を入力するかも任意である。
【０１４２】
第３の実施形態の演算回路は、５列×５行に限らず、Ｎ列×Ｎ行（Ｎは３以上の整数）の畳み込み演算によるフィルタ処理に適用可能である。この時、前処理回路５２の積和演算器の個数ｍは、２≦ｍ＜Ｎとする。
【０１４３】
本実施形態の演算回路では、一般的に、初期化後、１〜Ｎサイクルにかけて順に、２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータ値をデータレジスタに保持し、各サイクル毎に、前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、Ｎ個のデータ値と、Ｎ列×Ｎ行のいずれかの列のＮ個の係数との間の積和を演算する操作を、Ｎ回（Ｎステップ）未満繰り返して行うことによりＮ個のデータ値と全ての列の係数との間の積和の演算を行う。そして、積和演算器が演算した、Ｎ個のデータ値と１列目のＮ個の係数との間の積和演算結果を後処理回路の１番目の積和レジスタに保持するとともに、Ｎ個のデータ値とｎ列目（ｎ＝２〜Ｎ）の係数との間の積和演算結果と、前サイクルでの後処理回路のｎ−１番目の積和レジスタに保持した値との積算値を、後処理回路のｎ番目の積和レジスタに保持する。これにより、Ｎ番目の積和レジスタから、２次元空間の前記Ｎ列×Ｎ行の範囲の中心に位置する第１の演算対象点の畳み込み演算結果が出力される。
【０１４４】
また、図４に示すように、後処理回路がさらに、１〜Ｎ番目の積和レジスタのそれぞれに対応して設けられた１〜Ｎ番目の一時レジスタ（図４のフリップフロップ６０ａ１，６０ｂ１，６０ｃ１，６０ｄ１，６０ｅ１）を備えることが好ましい。この場合、各サイクル毎に、積和演算器が演算した、データ値と１〜Ｎ列目の係数値との間の積和演算結果のそれぞれが１〜Ｎ番目の一時レジスタに保持された後に、一時レジスタのｎ番目に保持された積和演算結果と前サイクルでｎ−１番目の積和レジスタに保持された値との積算値が、ｎ番目の積和レジスタに保持される。
【０１４５】
次に、本発明の第４の実施形態について説明する。
【０１４６】
図５は、本発明の演算回路の構成を表す第４の実施形態の概略図である。同図に示す演算回路７０は、２次元空間に配置された元画像の２列×２行の４画素分の画素値から、畳み込み演算によるフィルタ処理を行う。演算回路７０は、元画像用シフトレジスタ７２と、係数用シフトレジスタ７４と、前処理回路８２と、後処理回路８４と、カウンタ８６とによって構成されている。
【０１４７】
元画像用シフトレジスタ７２は、処理対象となる元画像の２列×２行＝４画素分の画素値を保持する。そして、１サイクル毎に、次の１列の２画素分の画素値が、図５中右側の１列にシフトインされ、各列の２画素分の画素値が左側に１列ずつシフトされる。
【０１４８】
すなわち、元画像用シフトレジスタ７２では、１サイクル毎に、左側（１列目）の１列の２画素分の画素値Ｌiがシフトアウトされ、右側（２列目）の１列の２画素分の画素値Ｌi+1が左側の１列にシフトされてＬiとして保持され、処理対象となる次の１列の２画素分の画素値が新たなＬi+1として右側の１列に保持される。１サイクル毎に、左側の１列の２画素分の画素値Ｌiは積和演算器７６ａに入力され、右側の１列の２画素分の画素値Ｌi+1は積和演算器７６ｂに入力される。
【０１４９】
続いて、係数用シフトレジスタ７４は、演算回路７０の機能（フィルタ処理）を決定するための、元画像の２列×２行＝４画素に対応する４個の係数値Ｃ１１，Ｃ２１，Ｃ１２，Ｃ２２を保持する。
【０１５０】
係数用シフトレジスタ７４では、１サイクル毎に、図５中、左側の１列の２つの係数値Ｃ１１，Ｃ２１と、右側の１列の２つの係数値Ｃ１２，Ｃ２２とが交互にシフト（ローテーション）され、左側の１列の２つの係数値が出力される。１列の２つの係数値Ｃ１（＝Ｃ１１，Ｃ２１）もしくはＣ２（＝Ｃ１２，Ｃ２２）は、１サイクル毎に、積和演算器７６ａ、７６ｂの両方に共通に入力される。
【０１５１】
カウンタ８６は、初期化後、クロック信号に同期して１〜２を繰り返しカウントする。このカウンタ８６の計数と、係数用シフトレジスタ７４のシフトとが、同一のクロック信号に同期して行われることにより、本実施形態の場合、カウント値ｋ＝１の時には係数値Ｃ１が、カウント値ｋ＝２の時には係数値Ｃ２が、積和演算器７６ａ、７６ｂに共通に入力される。
【０１５２】
前処理回路８２は、列数分の２つの積和演算器７６ａ、７６ｂによって構成されている。
【０１５３】
積和演算器７６ａは、サイクル毎に、元画像用シフトレジスタ７２の左側の１列の２画素分の画素値Ｌi（例えば、サイクル１ではＬ１，サイクル２ではＬ２）と、係数用シフトレジスタ７４の１番目（図５中、左側）の１列の２つの係数値Ｃk（例えば、サイクル１ではＣ１，サイクル２ではＣ２）との積和演算Ｔ１＝ＣkＬiを行う。積和演算器７６ａの出力Ｔ１は加算器７８ａに入力される。
【０１５４】
一方、積和演算器７６ｂは、元画像用シフトレジスタ７２の右側の１列の２画素分の画素値Ｌi+1（例えば、サイクル１ではＬ２，サイクル２ではＬ３）と、係数用シフトレジスタ７４の１番目の１列の２つの係数値Ｃkとの積和演算Ｔ２＝ＣkＬi+1を行う。積和演算器７６ｂの出力Ｔ２は加算器７８ｂに入力される。
【０１５５】
後処理回路８４は、列数分の２つの積和レジスタ８１ａ、８１ｂによって構成されている。
【０１５６】
積和レジスタ８１ａは、加算器７８ａと、セレクタ７９ａと、フリップフロップ８０ａによって構成されている。加算器７８ａは、積和演算器７６ａの出力Ｔ１とフリップフロップ８０ａの出力Ｐ１’とを加算する。セレクタ７９ａは、カウンタ８６のカウント値ｋ＝１の時には積和演算器７６ａの出力Ｔ１を選択し、出力する。カウント値ｋ＝２の時には加算器７８ａの出力Ｐ１’＋Ｔ１を選択し、出力する。フリップフロップ８０ａは、クロックエッジのタイミングで、セレクタ７９ａの出力を保持する。保持された値Ｐ１は、フィルタ処理後の画像の奇数番目の各画素の画素値として出力される。
【０１５７】
また、積和レジスタ８１ｂは、加算器７８ｂと、セレクタ７９ｂと、フリップフロップ８０ｂによって構成されている。加算器７８ｂは、積和演算器７６ｂの出力Ｔ２とフリップフロップ８０ｂの出力Ｐ２’とを加算する。セレクタ７９ｂは、カウンタ８６のカウント値ｋ＝１の時には積和演算器７６ｂの出力Ｔ１を選択し、出力する。カウント値ｋ＝２の時には加算器７８ｂの出力Ｐ２’＋Ｔ２を選択し、出力する。フリップフロップ８０ｂは、クロック信号に同期して、セレクタ７９ｂの出力を保持する。保持された値Ｐ２は、フィルタ処理後の画像の偶数番目の各画素の画素値として出力される。
【０１５８】
次に、表７を参照しながら、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われる場合の演算回路７０の動作を説明する。
【０１５９】
【表７】
0004833690.tif 000009
【０１６０】
初期化のサイクルでは、元画像用シフトレジスタ７２には、図５中上側に示すように、左側の１列の２画素分の画素値Ｌiとして、元画像の１列目の２画素分の画素値Ｌ１１，Ｌ２１が保持され、右側の２画素分の画素値Ｌi+1として、元画像の２列目の２画素分の画素値Ｌ１２，Ｌ２２が保持される。係数用シフトレジスタ７４には、係数値Ｃ１（＝Ｃ１１，Ｃ２１）およびＣ２（＝Ｃ１２，Ｃ２２）が、最初にＣ１が出力される状態に保持される。
【０１６１】
サイクル１では、積和演算器７６ａでは、元画像用レジスタ７２から入力される左側の１列の２画素分の画素値Ｌ１＝Ｌ１１，Ｌ２１と、係数用シフトレジスタ７４から入力される２つの係数値Ｃ１＝Ｃ１１，Ｃ２１との積和演算Ｃ１Ｌ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が行われる。
【０１６２】
同様に、積和演算器７６ｂでは、右側の１列の２画素分の画素値Ｌ２＝Ｌ１２，Ｌ２２と、２つの係数値Ｃ１＝Ｃ１１，Ｃ２１との積和演算Ｃ１Ｌ２＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２が行われる。
【０１６３】
そして、サイクル１では、カウンタ８６のカウント値ｋ＝１であるため、セレクタ７９ａにより、積和演算器７６ａの出力Ｔ１＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１が選択され、クロックエッジのタイミングでフリップフロップ８０ａに保持される。
【０１６４】
同様に、セレクタ７９ｂにより、積和演算器７６ｂの出力Ｔ２＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２が選択され、クロックエッジのタイミングでフリップフロップ８０ｂに保持される。
【０１６５】
サイクル２では、図５中下側に示すように、元画像用シフトレジスタ７２の左側の１列の２画素分の画素値Ｌiとして、元画像の２列目の２画素分の画素値Ｌ１２，Ｌ２２が保持され、右側の２画素分の画素値Ｌi+1として、元画像の３列目の２画素分の画素値Ｌ１３，Ｌ２３が保持され、それぞれ、積和演算器７６ａおよび７６ｂに入力される。また、係数用シフトレジスタ７４からは、係数値Ｃ２（＝Ｃ１２，Ｃ２２）が出力される。
【０１６６】
従って、積和演算器７６ａでは、左側の１列の２画素分の画素値Ｌ２＝Ｌ１２，Ｌ２２と、係数値Ｃ２＝Ｃ１２，Ｃ２２との積和演算Ｃ２Ｌ２＝Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２が行われる。
【０１６７】
同様に、積和演算器７６ｂでは、右側の１列の２画素分の画素値Ｌ３＝Ｌ１３，Ｌ２３と、係数値Ｃ２＝Ｃ１２，Ｃ２２との積和演算Ｃ２Ｌ３＝Ｃ１２Ｌ１３＋Ｃ２２Ｌ２３が行われる。
【０１６８】
積和レジスタ８１ａでは、加算器７８ａにより、積和演算器７６ａの出力Ｔ１＝Ｃ１２Ｌ１２＋Ｃ２２Ｌ２２とフリップフロップ８０ａの出力Ｐ１’＝Ｃ１１Ｌ１１＋Ｃ２１Ｌ２１とが加算される。そして、サイクル２では、カウンタ８６のカウント値ｋ＝２であるため、セレクタ７９ａにより、加算器７８ａの出力Ｐ１’＋Ｔ１＝Ｃ１１Ｌ１１＋Ｃ１２Ｌ１２＋Ｃ２１Ｌ２１＋Ｃ２２Ｌ２２が選択され、クロックエッジのタイミングでフリップフロップ８０ａに保持される。保持された値Ｐ１は、フィルタ処理後の画像の１番目の画素の画素値Ｐ１１として出力される。
【０１６９】
同様に、積和レジスタ８１ｂでは、加算器７８ｂにより、積和演算器７６ｂの出力Ｔ２＝Ｃ１２Ｌ１３＋Ｃ２２Ｌ２３と、クロック信号以前のフリップフロップ８０ｂの出力Ｐ２’＝Ｃ１１Ｌ１２＋Ｃ２１Ｌ２２とが加算される。そして、セレクタ７９ｂにより、加算器７８ｂの出力Ｐ２’＋Ｔ２＝Ｃ１１Ｌ１２＋Ｃ１２Ｌ１３＋Ｃ２１Ｌ２２＋Ｃ２２Ｌ２３が選択され、クロックエッジのタイミングでフリップフロップ８０ｂに保持される。保持された値Ｐ２は、フィルタ処理後の画像の２番目の画素の画素値Ｐ１１として出力される。
【０１７０】
これ以降の動作は、上記と同様である。すなわち、演算回路７０では、初期化後、２サイクルで１および２番目のフィルタ処理後の２画素分の画素値Ｐ１１，Ｐ１２が同時（並列）に出力される。これ以後、２サイクル毎に、フィルタ処理後の２画素分の画素値が同時に出力される。
【０１７１】
本実施形態の演算回路７０においても、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点がある。また、本実施形態の演算回路７０では、２つの積和演算器７６ａ、７６ｂと、２つの積和レジスタ８１ａ、８１ｂとが用いられている。これによって、従来の２倍の処理速度が実現されている。
【０１７２】
次に、第４の実施形態の別の例として、元画像の５列×５行の２５画素分の画素値を用いて畳み込み演算によるフィルタ処理を行う演算回路について説明する。
【０１７３】
図６は、本発明の演算回路の構成を表す第５の実施形態の概念図である。同図に示す演算回路１００は、２次元空間に配置された元画像の５列×５行の２５画素分の画素値から、畳み込み演算によるフィルタ処理を行う。演算回路１００は、元画像用シフトレジスタ１０２と、係数用シフトレジスタ１０４と、前処理回路１１２と、後処理回路１１４と、カウンタ１１６とによって構成されている。
【０１７４】
以下、図６に示す演算回路１００について、図５の演算回路７０との違いを重点的に説明する。
【０１７５】
演算回路１００において、元画像用シフトレジスタ１０２および係数用シフトレジスタ１０４は、図５の演算回路７０の元画像用シフトレジスタ７２および係数用シフトレジスタ７４と同様の機能を有する。
【０１７６】
前処理回路１１２は、列数分の５つの積和演算器１０６ａ、１０６ｂ、１０６ｃ、１０６ｄ、１０６ｅによって構成されている。前処理回路１１２も、図５の前処理回路８２と同様の機能を有する。
【０１７７】
また、後処理回路１１４は、列数分の５つの積和レジスタ１１１ａ、１１１ｂ、１１１ｃ、１１１ｄ、１１１ｅによって構成されている。後処理回路１１４も、図５の演算回路７０の後処理回路８４と同様の機能を有する。
【０１７８】
カウンタ１１６は、初期化後、クロック信号に同期して、１サイクル毎に１〜５を繰り返しカウントする。本実施形態の場合、カウンタ１１６のカウント値ｋ＝１の時、係数用シフトレジスタ１０４から係数値Ｃ１（＝Ｃ１１，Ｃ２１，Ｃ３１，Ｃ４１，Ｃ５１）が出力され、全ての積和演算器１０６ａ、１０６ｂ、１０６ｃ、１０６ｄ、１０６ｅに共通に入力される。また、カウント値ｋ＝２〜５の時に、係数値Ｃ２〜Ｃ５が、それぞれ出力される。
【０１７９】
すなわち、カウンタ１１６のカウント値ｋ＝１〜５の時に、係数値Ｃ１〜Ｃ５についての処理がそれぞれ行われる。
【０１８０】
演算回路１００の動作は、図５の演算回路７０と同様である。前処理回路１１２では、前述のように、カウンタ１１６のカウント値ｋ＝１〜５の時に、それぞれ係数値Ｃ１〜Ｃ５を利用した積和演算処理が行われ、積和演算結果Ｔ１〜Ｔ５が出力される。後処理回路１１４では、ｋ＝１のときには、前処理回路から入力された積和演算結果Ｔ１〜Ｔ５がそのまま保持される。一方、ｋ＝２〜５のときには、前サイクルで（すなわち、それぞれｋ＝１〜４のときに）保持された値Ｐ１’〜Ｐ５’とＴ１〜Ｔ５との積算値が保持される。そして、５サイクル毎に、後処理回路１１４から、フィルタ処理後の画像の５画素分の画素値Ｐが出力される。
【０１８１】
同様に、図８に示す元画像の各画素の画素値が画像情報記憶装置に記憶され、図１３に示す順序でフィルタ処理が順次行われる場合、演算回路１００の具体的な動作は、下記表８〜１０に示す通りである。
【０１８２】
【表８】
0004833690.tif 000010
【０１８３】
【表９】
0004833690.tif 000011
【０１８４】
【表１０】
0004833690.tif 000012
【０１８５】
すなわち、演算回路１００では、初期化後、５サイクルで最初のフィルタ処理後の５画素分の画素値Ｐ１１〜Ｐ５１が同時に出力される。これ以後、５サイクル毎に、フィルタ処理後の５画素分の画素値が同時に出力される。
【０１８６】
本実施形態の演算回路１００においても、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点がある。また、本実施形態の演算回路１００では、５つの積和演算器１０６ａ、１０６ｂ、１０６ｃ、１０６ｄ、１０６ｅと、５つの積和レジスタ１１１ａ、１１１ｂ、１１１ｃ、１１１ｄ、１１１ｅとを用いているため、従来の５倍の処理速度が実現されている。
【０１８７】
なお、第４および第５の実施形態の演算回路７０，１００も、５列×５行に限らず、Ｎ列×Ｎ行（Ｎは２以上の整数）の畳み込み演算によるフィルタ処理に適用可能である。
【０１８８】
第４および第５の実施形態の演算回路では、一般的に、データレジスタに２次元空間のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持する。そして、第１サイクルにおいて、Ｎ個の内のｎ番目（ｎ＝１〜Ｎ）の積和演算器で、Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値と、Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算し、それぞれの演算結果を、後処理回路のｎ番目の積和レジスタに保持する。その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、データレジスタに保持されたデータを−１列分シフトし、データレジスタのＮ列目に、２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、さらに、Ｎ個の内のｎ番目の積和演算器で、Ｎ列×Ｎ行のデータレジスタのｎ列目に保持されたＮ個のデータ値とＮ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算し、それぞれの演算結果と、前サイクルで後処理回路のｎ番目の積和レジスタに保持された値との積算値を、後処理回路のｎ番目の積和レジスタに保持する操作を繰り返す。これにより、Ｎ個の積和レジスタのそれぞれから、２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１演算対象点、および、２次元空間の列方向に第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果が出力される。
【０１８９】
最後に、本発明の第６の実施形態について説明する。
【０１９０】
図７は、本発明の演算回路の構成を表す第６の実施形態の概念図である。同図に示す演算回路１２０も、２次元空間に配置された元画像の５列×５行の２５画素分の画素値から、畳み込み演算によるフィルタ処理を行う。図７の演算回路１２０は、元画像用シフトレジスタ１２２と、係数用シフトレジスタ１２４と、前処理回路１３２と、後処理回路１３４と、カウンタ１３６とによって構成されている。
【０１９１】
図７に示す演算回路１２０は、図６に示す演算回路１００において、積和演算器の個数を減らし、図３に示す演算回路５０のように、これを時系列（時分割）に使用する構成のものである。従って、カウンタ１３６は、図６に示す演算回路１００のカウンタ１１６の機能と、図３に示す演算回路５０のカウンタ６６の機能とを併せ持つ。すなわち、後処理回路１３４の処理サイクルを制御するカウント値ｋと、前処理回路の処理のステップを制御するカウント値ｊとを生成する。カウント値ｊは、０に初期化された後、クロック信号に同期して０〜４のカウントを繰り返す。カウント値ｋは、１に初期化された後、カウント値ｊが０に戻る毎に１つずつ加算されて、１〜５のカウントを繰り返す。
【０１９２】
以下、図７の演算回路１２０について、図６の演算回路１００との違いを重点的に説明する。
【０１９３】
演算回路１２０において、元画像用シフトレジスタ１２２および係数用シフトレジスタ１２４は、図６の演算回路１００の元画像用シフトレジスタ１０２および係数用シフトレジスタ１０４と同様の機能を有する。
【０１９４】
図６の演算回路１００では、元画像用シフトレジスタ１０２から、前処理回路１１２の５つの積和演算器１０６ａ、１０６ｂ、１０６ｃ、１０６ｄ、１０６ｅに対して、各々対応する各列の１画素分の画素値Ｌi〜Ｌi+4が同時に入力される。これに対し、図７の演算回路１２０では、１ステップ毎に、各列の５画素分の画素値Ｌi+jがカウント値ｊの変化に従って順に、１つの積和演算器１２６に時系列に入力される。両者は、この点で異なっている。そして、カウント値ｊが０〜４に変化する過程で５ステップの処理が行われた後、カウント値ｊが０に戻り、次のサイクルに進むときに、処理対象となる次の１列の５画素分の画素値がシフトインされる。
【０１９５】
１つの画素の画素値を８ビットとすると、図６に示す演算回路１００では、８ビット×５×５＝２００本の配線が必要となる。これに対し、図７に示す演算回路１２０では、元画像用シフトレジスタ１２２から出力される画素値は１列の５画素分だけであるから、同じく１つの画素値を８ビットとすると、８ビット×５＝４０本の配線だけしか必要がなく、配線数を１／５に削減することができる。
【０１９６】
また、係数用シフトレジスタ１２４では、図６の係数用シフトレジスタ１０４と同様に、１サイクル毎に、すなわち、カウント値ｋが変化する毎に、図６中、５つの係数値Ｃ１〜Ｃ５が順次シフト（ローテーション）され、図中で最も左側の１列の５つの係数値が出力される。ただし、同一の係数値Ｃkの供給が、カウント値ｊが０〜４の間に変化する５ステップの期間継続して行われ、その後、カウント値ｋが変化し、次のサイクルに進む時に係数Ｃ１〜Ｃ５のシフトが行われる点で、図６の係数用シフトレジスタ１０４とは異なっている。
【０１９７】
続いて、前処理回路６２は、１つの積和演算器１２６によって構成されている。積和演算器１２６は、ＣkＬi+jの積和演算を行い、その演算結果Ｔj+1を出力する。
【０１９８】
また、後処理回路１３４は、列数分の５つの積和レジスタ１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅによって構成されている。後処理回路１３４の積和レジスタ１３１ａ〜１３１ｅのそれぞれは、例えば、図５の積和レジスタ８１ａ（または８１ｂ）の前段に、図４の一時レジスタ６０ａ１（または６０ｂ１〜６０ｅ１）を組み合わせた構成とすることができる。この場合、図４に示した演算回路５０と同様に、それぞれの積和レジスタ１３１ａ〜１３１ｅの一時レジスタには、カウント値ｊが対応する値である期間にクロック信号を供給する。また、２段目のフリップフロップには、カウント値ｊが０に戻った期間にクロック信号を供給する。
【０１９９】
次に、演算回路１２０の動作を説明する。
【０２００】
演算回路１２０では、初期化のサイクルで、元画像用シフトレジスタ１２２には、１〜５列目の画素値Ｌ１〜Ｌ５が保持され、係数用レジスタ１４には、５列分の係数値Ｃ１〜Ｃ５が保持される。
【０２０１】
サイクル１では、カウンタ１３６のカウント値ｊ＝０〜４に応じて、元画像用シフトレジスタ１２２から、１〜５列目の画素値Ｌ１〜Ｌ５が順次出力され、係数用シフトレジスタ１２４から、係数値Ｃ１（すなわち、ｋ＝１である）が出力される。
【０２０２】
前処理回路１３２の積和演算器１２６では、カウンタ１３６のカウント値ｊ＝０〜４に応じて、１ステップ毎に、１〜５列目の画素値Ｌi+j（＝Ｌ１〜Ｌ５）と、係数値Ｃ１とから積和演算Ｃ１Ｌi+jが行われ、その演算結果Ｔj+1（Ｔ１〜Ｔ５）が順次出力される。すなわち、積和演算器１２６では、カウント値ｊ＝０〜４に応じて、１ステップ毎に、積和演算Ｃ１Ｌ１、Ｃ１Ｌ２、Ｃ１Ｌ３、Ｃ１Ｌ４、Ｃ１Ｌ５が順次行われ、その演算結果Ｔ１〜Ｔ５が出力される。
【０２０３】
ステップ１〜５の積和演算器１２６の出力Ｔ１〜Ｔ５（＝Ｃ１Ｌ１、Ｃ１Ｌ２、Ｃ１Ｌ３、Ｃ１Ｌ４、Ｃ１Ｌ５）は、後処理回路１３４の積和レジスタ１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅにそれぞれ入力され、クロックエッジのタイミングで保持される。
【０２０４】
次のサイクル２で、元画像用シフトレジスタ１２２に、処理対象となる次の１列の５画素分の画素値Ｌ６がシフトインされ、元画像用シフトレジスタ１２２には、２〜６列目の画素値Ｌ２〜Ｌ６が保持される。
【０２０５】
サイクル２におけるステップ１〜５では、カウンタ１３６のカウント値ｊ＝０〜４に応じて、元画像用シフトレジスタ１２２から、１〜５列目の画素値Ｌ２〜Ｌ６が順次出力され、係数用シフトレジスタ１２４から、係数値Ｃ２（すなわち、ｋ＝２である）が出力される。
【０２０６】
同様に、積和演算器１２６では、カウンタ１３６のカウント値ｊ＝０〜４に応じて、１〜５列目の画素値Ｌi+j（＝Ｌ２〜Ｌ６）と、係数値Ｃ２とから積和演算Ｃ２Ｌi+jが行われ、その演算結果Ｔj+1（Ｔ１〜Ｔ５）が順次出力される。すなわち、積和演算器１３２では、カウント値ｊ＝０〜４に応じて、１ステップ毎に、積和演算Ｃ２Ｌ２、Ｃ２Ｌ３、Ｃ２Ｌ４、Ｃ２Ｌ５、Ｃ２Ｌ６が順次行われ、その演算結果Ｔ１〜Ｔ５が出力される。
【０２０７】
サイクル２での積和演算器１２６の出力Ｔ１〜Ｔ５（＝Ｃ２Ｌ２、Ｃ２Ｌ３、Ｃ２Ｌ４、Ｃ２Ｌ５、Ｃ２Ｌ６）は、それぞれサイクル１で積和レジスタ１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅに保持された各々対応するＰ１’〜Ｐ５’（＝Ｃ１Ｌ１、Ｃ１Ｌ２、Ｃ１Ｌ３、Ｃ１Ｌ４、Ｃ１Ｌ５）と加算される。そして、その加算結果が、クロックエッジのタイミングで、それぞれ積和レジスタ１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅに再度保持される。
【０２０８】
すなわち、積和レジスタ１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅには、それぞれＣ１Ｌ１＋Ｃ２Ｌ２、Ｃ１Ｌ２＋Ｃ２Ｌ３、Ｃ１Ｌ３＋Ｃ２Ｌ４、Ｃ１Ｌ４＋Ｃ２Ｌ５、Ｃ１Ｌ５＋Ｃ２Ｌ６が保持される。
【０２０９】
なお、前述のように、後処理回路１３４を、図３，４に示した演算回路５０の場合のように、カウント値ｊが増大する過程で積和演算結果を一時レジスタに保持し、カウント値ｊが０に戻った期間に、そのまま、もしくは、前サイクルで保持した値と積算して、後段のフリップフロップに保持する構成とすることができる。このとき、カウント値ｊが０に戻るタイミングでカウント値ｋのカウントを進めた場合、サイクル１における積和演算結果の保持は、実際には、カウント値ｋ＝２に変化した後に行われる。また、サイクル２における積和演算結果と前のサイクルで保持した値との積算値の保持は、カウント値ｋ＝３に変化した後に行われる。従って、積和演算結果をそのまま保持するか、前のサイクルで保持した値と積算してから保持するかの制御を、図５に示した演算回路７０のように、セレクタを用いて行う場合、カウント値ｋ＝２であるときには一時レジスタの出力を選択し、カウント値ｋが２以外であるときには加算器の出力を選択するように制御することができる。
【０２１０】
以下同様にして、１サイクル毎に、元画像用シフトレジスタ１２２に、次の１列の５画素分の画素値がシフトインされ、係数用シフトレジスタ１２４から、次の係数値Ｃkが出力され、上記の動作が繰り返し行われる。その結果、初期化後、２５サイクル毎に、フィルタ処理後の５画素分の画素値Ｐが同時に出力される。
【０２１１】
本実施形態の演算回路１２０においても、隣りあう画素の演算で共通に使用される元画像の画素の画素値を画像情報記憶装置から２度読み出す必要がないという利点がある。また、演算回路１２０では、５つではなく、１つの積和演算器１２６だけを用いることによって、その処理速度は、従来の１／５倍となるが、処理速度が要求されない用途であれば、回路規模を削減することができるという利点がある。もちろん、図３の演算回路５０のように、前処理回路１３２に複数の積和演算器を設け、５列の画素値を利用した積和演算結果Ｔ１〜Ｔ５を、列数（５）未満の繰り返し回数で得ることも可能である。これによって、処理速度と回路規模とのバランスをはかることが可能である。
【０２１２】
なお、本実施形態の演算回路１２０では、積和演算器１２６に画素値をＬiからＬi+4の順序で入力しているが、これに限らず、画素値はどのような順序で入力しても良い。また、後処理回路１３４において、積和演算結果Ｔ１〜Ｔ４をそのまま保持するか、前のサイクルで保持した値Ｐ１’〜Ｐ５’と積和演算結果Ｔ１〜Ｔ５との積算値を保持するかの制御を、セレクタを用いて行うことは必須ではない。例えば、積和レジスタを構成するフリップフロップに加算器の出力を直接接続した構成とした場合であっても、フリップフロップからのフィルタ処理後の画素値Ｐの出力を終えた後に、次の画素についての積和演算結果Ｔ１〜Ｔ５の一時レジスタへの保持を行っている期間に、フリップフロップの初期化を行い、保持値Ｐ１〜Ｐ５を０とする処理を行うことが可能である。
【０２１３】
また、本実施形態の演算回路は、５列×５行に限らず、Ｎ列×Ｎ行（Ｎは２以上の整数）の畳み込み演算によるフィルタ処理に適用可能である。この場合、積和演算器の個数ｍは、１≦ｍ＜Ｎとする。
【０２１４】
本実施形態の演算回路では、一般的に、データレジスタに２次元空間内のＮ列×Ｎ行の範囲の１〜Ｎ列目のデータを保持する。第１サイクルにおいて、前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、Ｎ列×Ｎ行の１列目のＮ個の係数との間の積和を演算する操作を繰り返して行うことにより、データレジスタの全ての列に保持されたデータ値と１列目の係数との間の積和の演算を行う。そして、積和演算器が演算した、データレジスタのｎ列目（ｎ＝１〜Ｎ）に保持されたデータ値と１列目の係数との間の積和演算結果を、前処理回路のｎ番目の積和レジスタに保持する。その後、第ｋ（ｋ＝２〜Ｎ）サイクルにかけて順に、データレジスタに保持されたデータを列方向に−１シフトし、データレジスタのＮ列目に、２次元空間のＮ列×Ｎ行の範囲に列方向に隣接するＮ＋ｋ−１列目のデータを保持し、前処理回路のｍ個の積和演算器の少なくとも一部のそれぞれで、Ｎ列×Ｎ行のデータレジスタのいずれかの列に保持されたＮ個のデータ値と、Ｎ列×Ｎ行のｋ列目のＮ個の係数との間の積和を演算する操作を、繰り返して行うことにより、データレジスタの全ての列に保持されたデータ値とｋ列目の係数との間の積和の演算を行う。続いて、積和演算器が演算した、データレジスタのｎ列目に保持されたデータ値とｋ列目の係数との間の積和演算結果と、前サイクルで後処理回路のｎ番目の積和レジスタに保持された値との積算値を、後処理回路のｎ番目の積和レジスタに保持する操作を繰り返す。これにより、Ｎ個の積和レジスタのそれぞれから、２次元空間のＮ列×Ｎ行の範囲の中心に位置する第１の演算対象点、および、２次元空間の列方向に第１の演算対象点に順に隣りあう、２〜Ｎ番目の演算対象点の畳み込み演算結果が出力される。
【０２１５】
なお、本発明において、データレジスタは、記憶装置（例えば、元画像用レジスタは、画像情報記憶装置）から、ラインメモリやＦＩＦＯなどのバッファを介してデータを読み込む構成としても良い。また、前処理回路は、積和演算器以外の構成要素を含んでいても良いし、後処理回路は、積和レジスタ以外の構成要素を含んでいても良い。また、積和演算器や積和レジスタの具体的な構成も何ら限定されず、同様の機能を果たす各種構成のものが使用可能である。
【０２１６】
本発明は、基本的に以上のようなものである。
以上、本発明の演算回路および演算方法について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の主旨を逸脱しない範囲において、種々の改良や変更をしてもよいのはもちろんである。
【図面の簡単な説明】
【０２１７】
【図１】本発明の演算回路の構成を表す第１の実施形態の概略図である。
【図２】本発明の演算回路の構成を表す第２の実施形態の概念図である。
【図３】本発明の演算回路の構成を表す第３の実施形態の概念図である。
【図４】図３に示す演算回路の具体的な構成を表す概略図である。
【図５】本発明の演算回路の構成を表す第４の実施形態の概略図である。
【図６】本発明の演算回路の構成を表す第５の実施形態の概念図である。
【図７】本発明の演算回路の構成を表す第６の実施形態の概念図である。
【図８】２次元空間に配置された元画像の各画素の画素値を表す一例の概念図である。
【図９】２列×２行のフィルタ処理後の画像の各画素の画素値を表す一例の概念図である。
【図１０】図８に示す元画像の各画素の画素値と図９に示すフィルタ処理後の画像の各画素の画素値との関係を表す概念図である。
【図１１】図１０において、１番目の処理対象の元画像の４画素分の画素値とフィルタ処理後の画素の画素値を表す概念図である。
【図１２】図１０において、２番目の処理対象の元画像の４画素分の画素値とフィルタ処理後の画素の画素値を表す概念図である。
【図１３】畳み込み演算によるフィルタ処理の順序を表す一例の概念図である。
【図１４】従来の畳み込み演算によるフィルタ処理を行う演算回路の構成を表す一例の概略図である。
【図１５】図１４に示す演算回路において、カウンタのカウント値が０の場合の状態を表す概念図である。
【図１６】図１４に示す演算回路において、カウンタのカウント値が１の場合の状態を表す概念図である。
【図１７】積和演算器の構成を表す一例の概念図である。
【符号の説明】
【０２１８】
１０，３０，５０，７０，１００，１２０，１４０  演算回路
１２，３２，５２，１０２，１４２  元画像用レジスタ
１４，３４，５４，１０４  係数用レジスタ
２２，４２，６２，８２，１１２，１３２  前処理回路
２４，４４，６４，８４，１１４，１３４  後処理回路
１６ａ、１６ｂ、３６ａ、３６ｂ、３６ｃ、３６ｄ、３６ｅ、５６ａ、５６ｂ、７６ａ、７６ｂ、１０６ａ、１０６ｂ、１０６ｃ、１０６ｄ、１０６ｅ、１２６，１４６  積和演算器
２１ａ、２１ｂ、４１ａ、４１ｂ、４１ｃ、４１ｄ、４１ｅ、６１ａ、６１ｂ、６１ｃ、６１ｄ、６１ｅ、８１ａ、８１ｂ、１１１ａ、１１１ｂ、１１１ｃ、１１１ｄ、１１１ｅ、１３１ａ、１３１ｂ、１３１ｃ、１３１ｄ、１３１ｅ  積和レジスタ
６６，１１６，１３６，１５６  カウンタ
６０ａ１，６０ａ２，６０ｂ１，６０ｂ２，６０ｃ１，６０ｃ２，６０ｄ１，６０ｄ２，６０ｅ１，６０ｅ２、８０ａ、８０ｂ、８０ｃ、８０ｄ、８０ｅ、１５０ａ、１５０ｂ  フリップフロップ
５８ｂ、５８ｃ、５８ｄ、５８ｅ、７８ａ、７８ｂ、７８ｃ、７８ｄ、７８ｅ、１４８，１６２  加算器
７２，１２２  元画像用シフトレジスタ
７４，１２４，１４４  係数用シフトレジスタ
７９ａ、７９ｂ  セレクタ
８６  カウンタ
１４１  画像情報記憶装置
１４５，１４９  マルチプレクサ（ＭＵＸ）
１５４  中間結果レジスタ
１６０ａ、１６０ｂ  乗算器
【図１】
0004833690.tif 000013
【図２】
0004833690.tif 000014
【図３】
0004833690.tif 000015
【図４】
0004833690.tif 000016
【図５】
0004833690.tif 000017
【図６】
0004833690.tif 000018
【図７】
0004833690.tif 000019
【図８】
0004833690.tif 000020
【図９】
0004833690.tif 000021
【図１０】
0004833690.tif 000022
【図１１】
0004833690.tif 000023
【図１２】
0004833690.tif 000024
【図１３】
0004833690.tif 000025
【図１４】
0004833690.tif 000026
【図１５】
0004833690.tif 000027
【図１６】
0004833690.tif 000028
【図１７】
0004833690.tif 000029