(57)【要約】【課題】  記憶装置へのアクセス回数を削減し、行列演算を高速化する。【解決手段】  行列の大きさに対応した数の演算器５０を備え、各演算器５０において、セレクタ１０が初めに外部入力１１から供給される画素値を出力して乗算器２０で変換行列の要素との乗算を行い、累算器３０に１回目の行列演算の結果を保持する。次に、セレクタ１０が累算器３０からの値を出力して乗算器２０で変換行列との２回目の乗算を行う。この結果、各演算器５０から８入力加算器６０に２回目の行列演算の途中結果が供給され、８入力加算器６０がそれらの加算結果を出力することにより、２回目の行列演算結果が得られる。【選択図】        図１
2005216124.tif 000002
【特許請求の範囲】
【請求項１】
第１の行列の各要素データの供給を受ける第１の外部入力端と、第２の行列の各要素データの供給を受ける第２の外部入力端と、出力端とを有する複数の演算器と、
上記複数の演算器の出力値を加算して出力する加算器を備え、
各々の上記演算器は、
２つの入力端と１つの入力端を有するセレクタと、
上記セレクタの出力値と、上記第２の外部入力端から供給される第２の行列の各要素データの乗算を行う乗算器と、
上記乗算器の出力値の入力を受けてそれらを累算する累算器を備え、
上記セレクタは、上記第１の外部入力端から供給される第１の行列の各要素データおよび上記累算器の累算結果を入力とし、
上記セレクタが上記第１の外部入力端からの入力を選択して出力する間、上記累算器は上記乗算器の出力値を累算し、
上記セレクタが上記累算器の累算結果を選択して出力する間、上記累算器は累算処理を停止し、
上記加算器は、上記セレクタが上記累算器の累算結果を選択して出力する間に各々の演算器の出力端から供給される上記乗算器の出力値の入力を受け、それらを加算して出力することを特徴とする行列演算装置。
【請求項２】
各々の演算器の外部入力端から供給するデータの桁をシフトさせることにより整数値とし、
上記各々の演算器は、累算器の出力を入力とする第１のシフト器と、
加算器の出力を入力とする第２のシフト器を備え、
各々の演算器の乗算器、累算器、および加算器は、整数演算を行い、
上記第１のシフト器は、上記累算器の出力値をシフトして桁を戻すと共に小数点以下の値を四捨五入してセレクタに供給し、
上記第２のシフト器は、上記加算器の出力値をシフトして桁を戻すと共に小数点以下の値を四捨五入して出力することを特徴とする請求項１記載の行列演算装置。
【請求項３】
第１の行列は画素値行列であり、
第２の行列は、上記第１の行列で表される画像データを圧縮するための変換行列であることを特徴とする請求項１または請求項２記載の行列演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、行列演算装置に関するものである。
【背景技術】
【０００２】
画像処理装置における画像圧縮処理アルゴリズムとして近年多く用いられているものに、例えばＤＣＴ（Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ；離散コサイン変換）がある。ＤＣＴ変換では、画素データ行列に対し２回の行列乗算を行う。
【０００３】
従来の、行列演算を行う画像処理装置の例として、例えば、特許文献１に開示されたブロック画像データ演算装置がある。この装置は、１つの画面を表すディジタル画像データを蓄積し、画面の水平および垂直方向のデータを読み出すことが可能な画像データ記憶手段と、読み出した１列分のデータを蓄積することが可能な画像データ保持手段と、ブロック画像データの２次元行列演算を行うために用いられる係数を格納する係数記憶手段と、画像データ保持手段に蓄積されている画像データと係数記憶手段に保持されている係数との乗算を行う乗算手段と、乗算手段による乗算結果を加算する加算手段を有し、画像データ記憶手段から画像データを水平方向に読み出して乗算手段により乗算を行った後に加算手段により加算を行う動作と、画像データ記憶手段から画像データを垂直方向に読み出して乗算手段により乗算を行った後に加算手段により加算を行う動作を行うことにより、ブロック画像データの２次元行列演算を行うものである。
【０００４】
また、特許文献２に開示された従来の行列乗算装置は、記憶装置に格納されている第１および第２の二つの行列の乗算を行ない、この乗算結果を、記憶装置に書き込む行列乗算装置であり、記憶装置から読み出した第１の行列の一つの要素毎に、この要素に対応する第２の行列の全ての乗算要素を、記憶装置から順次に読み出してそれぞれの掛け算を行ない、第１の行列の同列の各要素に対応する掛け算結果を累積加算する行列演算回路を設け、この行列演算回路の加算結果を、記憶装置に書き込むことにより、行列の乗算処理における処理装置と記憶装置間のデータ転送回数を削減し、行列乗算の高速化を図っている。
【０００５】
【特許文献１】特開平２−１００５７６号公報
【特許文献２】特開平５−３２４７００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来の行列演算装置は以上のように構成されているので、２回の行列演算を行う場合には１回目の乗算結果を一旦メモリ等の記憶装置に記憶し、２回目の乗算を行う際に記憶装置から１回目の乗算結果を取り出して乗算していた。このため、記憶装置への記憶、データ読み出しに時間を要し、行列演算の処理時間が長くなってしまうという問題があった。
【０００７】
この発明は上記のような課題を解決するためになされたもので、記憶装置へのアクセス回数を削減することにより、行列演算装置の処理を高速化することを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係る行列演算装置は、第１の行列の各要素データの供給を受ける第１の外部入力端と、第２の行列の各要素データの供給を受ける第２の外部入力端と、出力端とを有する複数の演算器と、複数の演算器の出力値を加算して出力する加算器を備え、
各々の演算器は、２つの入力端と１つの入力端を有するセレクタと、セレクタの出力値と、第２の外部入力端から供給される第２の行列の各要素データの乗算を行う乗算器と、乗算器の出力値の入力を受けてそれらを累算する累算器を備え、セレクタは、第１の外部入力端から供給される第１の行列の各要素データおよび累算器の累算結果を入力とし、セレクタが第１の外部入力端からの入力を選択して出力する間、累算器は乗算器の出力値を累算し、セレクタが累算器の累算結果を選択して出力する間、累算器は累算処理を停止し、加算器は、セレクタが累算器の累算結果を選択して出力する間に各々の演算器の出力端から供給される乗算器の出力値の入力を受け、それらを加算して出力するものである。
【発明の効果】
【０００９】
この発明によれば、２回の行列演算を行う場合に、１回目の演算結果を記憶装置に一旦保持することなく演算結果が得られるので、行列演算を高速化することができる。
【発明を実施するための最良の形態】
【００１０】
以下、この発明の実施の様々な形態を説明する。
実施の形態１．
図１は、この発明の実施の形態１による、画像処理装置のＤＣＴ演算ユニット（行列演算装置）１００の構成を示すブロック図である。図に示すように、ＤＣＴ演算ユニット１００は、８個の演算器５０、および８入力加算器６０を備えている。各々の演算器５０は、それぞれセレクタ１０、乗算器２０、累算器３０を備えている。各々の演算器５０は、外部入力（第１の外部入力端）１１と外部入力（第２の外部入力端）１２を有している。
【００１１】
セレクタ１０の入力端には、累算器３０の出力と外部入力１１が接続されている。
乗算器２０の入力端には、セレクタ１０の出力と外部入力１２が接続されている。
【００１２】
累算器３０の入力端には、乗算器２０の出力が接続されている。
また、８入力加算器６０の８つの入力端には、８個の演算器５０の乗算器２０の出力が接続されている。
【００１３】
各々の外部入力１１および外部入力１２は実数値であり、乗算器２０、累算器３０、および８入力加算器６０は実数の演算に対応している。
【００１４】
次に、動作について説明する。
まず、ＤＣＴ演算ユニット１００が行うＤＣＴ変換処理について説明する。
ＤＣＴ変換を行列式で表すと、Ｃ×Ｘ×ＣＴとなる。ここで、Ｃは８行８列の変換行列、Ｘは８行８列の画素値行列、ＣＴは、行列Ｃの転置行列である。図２は、行列Ｃのｍ行ｎ列（ｍ、ｎ＝１，２，３，・・・，８）の要素の値をｃｍｎ、行列Ｘのｍ行ｎ列の要素の値をｘｍｎと表した場合のＤＣＴ変換の行列式を示している。ここでｃｍｎは実数値である。
【００１５】
ＤＣＴ演算ユニット１００は、図２に示す行列演算を行うことによりＤＣＴ変換を行う。
まず初期状態では、各々の演算器５０のセレクタ１０は、外部入力１１を選択して出力する。
【００１６】
以下、図１中左端に位置する演算器５０を例に取り説明する。演算器５０の外部入力１１にはｘ１１が、外部入力１２にはｃ１１が入力される。乗算器２０は、ｘ１１とｃ１１を乗算し、乗算結果（ｘ１１＊ｃ１１）を出力する。累算器３０には、（ｘ１１＊ｃ１１）が入力され、累算器３０の出力値は（ｘ１１＊ｃ１１）となる。
【００１７】
次に、外部入力１１にｘ１２、外部入力１２にｃ１２が供給され、乗算器２０は乗算結果（ｘ１２＊ｃ１２）を出力する。累算器３０には、（ｘ１２＊ｃ１２）が入力され、累算器３０の出力値は（ｘ１１＊ｃ１１＋ｘ１２＊ｃ１２）となる。
【００１８】
同様に、外部入力１１および外部入力１２に、ｘ１３とｃ１３、ｘ１４とｃ１４、・・・、ｘ１８とｃ１８が順に入力され、乗算器２０は乗算結果（ｘ１３＊ｃ１３）、（ｘ１４＊ｃ１４）、・・・、（ｘ１８＊ｃ１８）を出力する。累算器３０の出力値は、（ｘ１１＊ｃ１１＋ｘ１２＊ｃ１２＋ｘ１３＊ｃ１３）、（ｘ１１＊ｃ１１＋ｘ１２＊ｃ１２＋ｘ１３＊ｃ１３＋ｘ１４＊ｃ１４）、・・・と累算され、（ｘ１８＊ｃ１８）が入力された段階で（ｘ１１＊ｃ１１＋ｘ１２＊ｃ１２＋ｘ１３＊ｃ１３＋・・・＋ｘ１８＊ｃ１８）となる。この演算結果は、図２上で枠線Ａで囲った部分の各要素同士の演算結果、すなわち、行列Ｘ×ＣＴ（以下、Ｚ＝Ｘ×ＣＴとする。）の１行１列の値となる。
【００１９】
他の演算器５０でも同様の演算を行う。図１中、左からｋ番目（ｋ＝１，２，３，・・・，８）の演算器５０の外部入力１１にはｘｋ１，ｘｋ２，・・・，ｘｋ８が順に入力され、外部入力１２には、全てｃ１１，ｃ１２，・・・，ｃ１８が順に入力される。
この結果、左からｋ番目の演算器５０の累算器３０の出力値は、行列Ｚのｋ行１列目の値となる。
【００２０】
次に、全ての演算器５０の累算器３０の累算処理を停止し、セレクタ１０は累算器３０の出力を選択して出力する。
この状態で、図１中、左からｋ番目の演算器５０の外部入力１２に、ｃ１１，ｃ１２，ｃ１３，・・・，ｃ１８が入力される。これは図２に示す行列Ｃの１行目（図２上の枠線Ｂで囲った部分）の各要素に相当する。
各々の演算器５０の乗算器２０は、累算器３０の出力値と外部入力１２との乗算結果を出力する。すなわち、左からｋ番目の演算器５０の乗算器２０からは、行列Ｃの１行ｋ列の値と行列Ｚのｋ行１列の値の積が出力される。
図３は、行列Ｚのｍ行ｎ列（ｍ、ｎ＝１，２，３，・・・，８）の要素の値をｚｍｎと表した場合の行列式Ｃ×Ｚを示したものであり、各々の演算器５０の乗算器２０からは、図中枠線Ｄで囲った部分の要素同士の乗算結果が出力される。
【００２１】
８入力加算器６０には、各々の演算器５０の乗算器２０の乗算結果が入力され、それらが加算される。演算結果は、Ｃ×Ｘ×ＣＴの１行１列目の値が出力される。
【００２２】
次に、全ての演算器５０の累算器３０の累算処理を停止して、セレクタ１０が累算器３０の出力を選択して出力するようにしたままの状態で、左からｋ番目の演算器５０の外部入力１２にｃ２１，ｃ２２，ｃ２３，・・・，ｃ２８（行列Ｃの２行目）が入力される。
この結果各演算器５０の乗算器２０からは、（ｃ２ｋ＊ｚｋ１）の値が出力される。その結果、８入力加算器６０からは、Ｃ×Ｘ×ＣＴの２行１列目の値が出力される。
以下、外部入力１２の値を行列Ｃの３行目〜８行目まで変化させて同様の演算を８回繰り返すと、Ｃ×Ｘ×ＣＴの１列目の値が得られる。
【００２３】
次に、全ての累算器３０に保持されたデータを０にクリアして累算処理を再開させる。
セレクタ１０は、外部入力１１を出力する様に設定され、左からｋ番目の演算器５０の外部入力１０にはｘｋ１，ｘｋ２，・・・，ｘｋ８が順に入力され、外部入力１２には、全てｃ２１，ｃ２２，・・・，ｃ２８が順に入力される。
この結果、左からｋ番目の演算器５０の累算器３０の出力値は、行列Ｚの、ｋ行２列目の演算結果が並んでいる状態となる。
【００２４】
次に、全ての演算器５０の累算器３０の累算処理を停止し、セレクタ１０は累算器３０の出力を選択して出力する。
この状態で、左からｋ番目の演算器５０の外部入力１２に、ｃ１１，ｃ１２，ｃ１３，・・・，ｃ１８が入力される。これは行列Ｃの１行目の各要素に相当する。
各々の演算器５０の乗算器２０は、累算器３０の出力値と外部入力１２との乗算結果を出力する。すなわち、左からｋ番目の演算器５０の乗算器２０からは、行列Ｃの１行ｋ列目の値と行列Ｚのｋ行２列目の値の積が出力される。
８入力加算器６０には、各々の演算器５０の乗算器２０の乗算結果が入力され、それらが加算される。演算結果は、Ｃ×Ｘ×ＣＴの１行２列目の値が出力される。
【００２５】
次に、全ての演算器５０の累算器３０の累算処理を停止して、セレクタ１０が累算器３０の出力を選択して出力するようにしたままの状態で、左からｋ番目の演算器５０の外部入力１２にｃ２１，ｃ２２，ｃ２３，・・・，ｃ２８（行列Ｃの２行目）が入力される。
この結果各演算器５０の乗算器２０からは、（ｃ２ｋ＊ｚｋ２）の値が出力される。その結果、８入力加算器６０からは、Ｃ×Ｘ×ＣＴの２行２列目の値が出力される。
以下、外部入力１２の値を行列Ｃの３行目〜８行目まで変化させて同様の演算を８回繰り返すと、Ｃ×Ｘ×ＣＴの２列目の８個の値が得られる。
【００２６】
次に、再び全ての累算器３０に保持されたデータを０にクリアして累算処理を再開させ、左からｋ番目の演算器５０の外部入力１１にはｘｋ１，ｘｋ２，・・・，ｘｋ８が順に入力され、外部入力１２には、全てｃ３１，ｃ３２，・・・，ｃ３８が順に入力され、上記と同様の動作を繰り返すことにより、Ｃ×Ｘ×ＣＴの８列目の８個の値が得られる。
上述の演算を８回繰り返すことにより、Ｃ×Ｘ×ＣＴの８列目までの値が得られ、Ｃ×Ｘ×ＣＴの演算が終了する。
【００２７】
以上のように、実施の形態１によれば、行列の大きさに対応した数の演算器５０を備え、各演算器５０において、セレクタ１０が初めに外部入力１１の値を出力して乗算器２０で変換行列の要素との乗算を行い、累算器３０に１回目の行列演算の結果を保持する。次に、セレクタ１０が累算器３０からの値を出力して乗算器２０で変換行列との２回目の乗算を行う。この結果、各演算器５０から８入力加算器６０に２回目の行列演算の途中結果が供給され、８入力加算器６０がそれらの加算結果を出力することにより、２回目の行列演算結果の各要素が得られる。
このように、行列演算の中間結果をメモリ等の記憶装置へ保持しないため、演算途中で記憶装置へのアクセスが発生せず、演算処理の時間を短縮することができる。
【００２８】
なお、実施の形態１では、８行８列の行列演算を行うことを想定して、演算器５０を８個備えるようにしたが、行列のサイズに合わせて演算器の個数を変えることにより、どのような大きさの行列演算にも対応することができる。
【００２９】
実施の形態２．
実施の形態１では、外部入力１１および外部入力１２は実数値であり、乗算器２０、累算器３０、および８入力加算器６０は実数の演算に対応している。しかし、実数演算は演算量が大きくなるため、実施の形態２は、整数演算によりＤＣＴ変換を行う。
【００３０】
図４は、実施の形態２による、画像処理装置のＤＣＴ演算ユニット２００の構成を示すブロック図である。図１と同一の符号は同一の構成要素を表している。ＤＣＴ演算ユニット２００は、ＤＣＴ演算ユニット１００と同様に８個の演算器２５０を備えている。個々の演算器２５０は、シフト器４０を備えており、シフト器４０の入力端には累算器２３０の出力が接続されている。また、実施の形態２では、セレクタ１０の入力端には、シフト器４０の出力と外部入力２１１が接続されている。
【００３１】
また、ＤＣＴ演算ユニット２００はシフト器７０を備えており、シフト器７０の入力端には８入力加算器２６０の出力が接続されている。
【００３２】
各々の演算器２５０に含まれる乗算器２２０および累算器２３０と、８入力加算器２６０は、整数演算に対応している。また、各々の演算器２５０への外部入力２１１および外部入力２１２は、整数値である。
【００３３】
次に、実施の形態２によるＤＣＴ変換の動作について説明する。
実施の形態２による行列演算は、実施の形態１とほぼ同様の手順で行われるが、累算器２３０の出力はシフト器４０に供給される。
【００３４】
実施の形態２では、外部入力２１１および外部入力２１２を整数値とするため、実施の形態１では小数点以下の値を持っていたｃｍｎの値を、整数値となるよう、予めｐビット分シフトアップしておく。
シフト器４０は、累算器２３０から供給されたデータをｑビット分シフトダウンし、小数点以下の値を四捨五入した値を出力する。
【００３５】
また、８入力加算器２６０の出力はシフト器７０に供給される。シフト器７０は、供給されたデータを（ｐ＊２−ｑ）ビット分シフトダウンし、小数点以下の値を四捨五入した値を出力する。
【００３６】
以上のように、実施の形態２によれば、実施の形態１と同様に行列演算を行うので、行列演算の中間結果をメモリ等の記憶装置へ保持しないため、演算途中で記憶装置へのアクセスが発生せず、演算処理の時間を短縮することができる。
さらに、外部入力２１１および外部入力２１２の値を予めシフトアップして整数値とし、整数値演算に対応した乗算器２２０、累算器２３０、および８入力加算器２６０を用いて演算を行い、シフト器４０およびシフト器７０でシフトダウンおよび丸め処理行うようにしたので、演算量の少ない整数演算により行列演算を行うことができる。
【図面の簡単な説明】
【００３７】
【図１】この発明の実施の形態１による、画像処理装置のＤＣＴ演算ユニットの構成を示す図である。
【図２】ＤＣＴ演算を説明する図である。
【図３】この発明の実施の形態１による、行列演算を説明する図である。
【図４】この発明の実施の形態２による、画像処理装置のＤＣＴ演算ユニットの構成を示す図である。
【符号の説明】
【００３８】
１０  セレクタ、１１，１２，２１１，２１２  外部入力、２０，２２０  乗算器、３０，２３０  累算器、４０，７０  シフト器、５０，２５０  演算器、６０，２６０  ８入力加算器、１００，２００  ＤＣＴ演算ユニット（行列演算装置）。
【図１】
2005216124.tif 000003
【図２】
2005216124.tif 000004
【図３】
2005216124.tif 000005
【図４】
2005216124.tif 000006