以下、本実施の形態について説明する。なお、各実施形態における構成の組み合わせも本発明の実施形態に含まれる。
図1は本実施の形態に係る画像符号化装置1の構成の一例を示すブロック図である。画像符号化装置1は入力された動画データを圧縮し符号化する。画像符号化装置1は差分器5、DCT変換部3、量子化部10、逆量子化部17、逆DCT変換部7、加算器18、フレーム内予測部11、フレーム間予測部12、可変長符号化部13を有する。ここでDCTとは離散コサイン変換(Discrete Cosine Transform)であり、離散信号を周波数領域の信号に変換する処理である。
フレーム内予測部11は予測対象ブロックの予測計算に用いる符号化済みの隣接ブロックの画素16から予測画像を生成し、生成した予測画像と予測画像生成前のブロックの入力画像2との差分値が最も小さい予測モードを求めるフレーム内予測処理を行う。フレーム内予測部11は差分値が最も小さい予測モードを選択することにより、最も正確な画像予測が可能な予測モードを決定する。
フレーム間予測部12は予測対象ブロックに対し、前方、後方、あるいはその両方のフレームから予測画像を生成し、生成した予測画像と元の入力画像2との差分を求めるフレーム間予測処理を行う。フレーム間予測部12は入力画像2および参照画像62を入力とし、予測画像ブロックの生成を行う。フレーム間予測部12は予測画像と入力画像2との差分値が最も小さい予測モードを選択することにより、最も正確な画像予測が可能な予測モードを決定する。
判定部6はフレーム間予測部12およびフレーム内予測部11が出力する予測画素のうち、予測誤差の小さい画像を予測画像8として出力する。
差分器5は入力画像2とその予測結果である予測画像8との差分を計算し、その差分値を予測誤差60として出力する。ここで予測画像8はフレーム間予測処理またはフレーム内予測処理において隣接フレームのマクロブロックあるいは同一フレームの隣接マクロブロックに基づいて生成された画像である。画像符号化装置1は各予測処理により生成された予測画像8と予測処理前の入力画像2との差分を符号化し出力する。差分が小さくなるほど画像の圧縮率は高くなる。
DCT変換部3は予測誤差60を離散コサイン変換により周波数領域に変換する。量子化部10は変換したDCT係数値に対し、量子化ステップで除算した結果を整数値に丸める処理をする。
可変長符号化部13は出現頻度の高い情報は短い符号で表現し、出現頻度の低い情報は長い符号で表現することにより、全体として出力ビット数を減らす処理を行い、符号化データ19を出力する。
逆量子化部17は量子化部10により量子化された予測誤差を逆量子化する。逆量子化した予測誤差は逆DCT変換部7により逆変換され、DCT系数値に変換される前の予測誤差61となる。
加算部18はフレーム内予測部11又はフレーム間予測部12により生成された予測画像8と予測誤差61とを加算し画像16を出力する。画像16はフィルタ部9に入力される。フィルタ部9はデブロッキング・フィルタとも呼ばれ、画像16のブロックひずみを減少させる。フィルタ部9はブロックひずみ処理後の画像を復元画像15として出力する。復元画像15はフレーム間予測部12によるフレーム間予測処理の参照画像として用いられる。
入力画像2が入力されると、フレーム間予測部12によりフレーム間予測処理が実行され、フレーム内予測部11によりフレーム内予測処理が実行される。判定部6はフレーム間予測処理結果およびフレーム内予測処理結果のうち最も入力画像2との差分値が小さい予測画像8を出力する。
差分器5は生成された予測画像8と入力画像2との差分を計算し予測誤差60をDCT変換部3に出力する。予測誤差60はDCT変換部3により変換され量子化部10で量子化される。量子化された予測画像8は可変長符号部13により符号化され、符号化データ19として出力される。
量子化部10は量子化した予測誤差を可変長符号化部13に出力すると共に、逆量子化部17へ出力する。逆量子化部17により逆量子化された予測誤差は逆DCT変換部7により周波数領域から時間領域に変換される。加算器18は時間領域に変換された予測誤差と判定部6から出力された予測画像8とを加算し、予測処理前の画像16を復号生成する。
以上の動作により画像符号化装置1は、フレーム間予測処理とフレーム内予測処理により動画を圧縮することが出来る。
図2はフレーム内予測部11の詳細ブロック図である。フレーム内予測部11は予測モードごとに生成した予測画像のデータと、入力された入力画像2との差分値を求め、もっとも差分値の小さい予測モードにおける予測画素を予測画像4として出力する。画像符号化装置1は元の入力画像2と予測画像4との差分値である予測誤差をDCT係数値に変換して量子化し、可変長符号化した符号化データ19を出力する。したがって、差分値が小さいほど画像の圧縮率を高くすることが出来る。
フレーム内予測部11は制御部14、記憶部20、複数の選択部21、演算部22、減算部23、モード判定部24を有する。フレーム内予測部11は制御部14から出力される制御信号に基づいてフレーム内予測処理を行う。制御部14の出力する制御信号にはシフト信号30、選択信号31、演算信号32がある。
記憶部20は隣接符号化済みの画像16のうち、予測対象のマクロブロックの予測計算に用いる隣接画素データを画素データ単位でそれぞれ保持する複数の記憶領域と、記憶領域の隣接画素データを出力する複数の出力部C0、C1、C2、C3、C4、C5を有し、保持した隣接画素データの記憶領域を任意に移動させることが可能である。本実施例において記憶部20の複数の記憶領域は隣接画素データを格納する複数のレジスタである。記憶部20は個々のレジスタに保持する隣接画素データを制御部14から出力されるシフト信号30に応じて隣のレジスタへ移動させるシフトレジスタであってもよい。本実施例において、隣接画素データを記憶する複数のレジスタのうちレジスタD0、D1、D2、D3、D4、D5は、保持した隣接画素データを出力する出力部C0、C1、C2、C3、C4、C5をそれぞれ有する。それぞれのレジスタD0、D1、D2、D3、D4、D5の出力部C0、C1、C2、C3、C4、C5は後述する複数の選択部21にそれぞれ結線されている。レジスタD0、D1、D2、D3、D4、D5に保持された隣接画素データは出力部C0、C1、C2、C3、C4、C5から選択部21へ出力される。
記憶部20を形成する複数のレジスタのうち、両端のレジスタはそのレジスタに記憶している画素データを自分自身のレジスタにコピーしながら隣のレジスタに画素データをシフトさせる機能を有する。例えば右端のレジスタに画素データ“H”が記憶されており、左にシフトする命令が来た場合、右端のレジスタは画素データ“H”を左隣のレジスタにシフトさせると共に、画素データ“H”を自分自身にも保持する。また、記憶部20のレジスタの数は全ての隣接画素データよりも多く設けておき、余分なレジスタにはあらかじめその余分な領域に最も近いレジスタに記憶した隣接画素データをコピーしておいてもよい。あるいは別途補助記憶レジスタを用意し、シフト動作によって記憶部20から溢れた隣接画素データを補助記憶レジスタに記憶させても良い。これにより、画素データを何も記憶していないレジスタを無くすことが出来るとともに、シフト動作によりレジスタに記憶された隣接画素データが消えるのを防ぐことが出来る。
選択部21は記憶部20の特定の出力部C0、C1、C2、C3、C4、C5に結線され、記憶部20の複数の出力部C0、C1、C2、C3、C4、C5から出力された隣接画素データの一部を選択し演算部22に出力する。複数の選択部21はそれぞれマルチプレクサ210、211、212、213を有する。マルチプレクサ210は記憶部20の出力部C0、C1、C2に接続されている。マルチプレクサ211は記憶部20の出力部C1、C2、C3に接続されている。マルチプレクサ212は記憶部20の出力部C2、C3、C4に接続されている。マルチプレクサ213は記憶部20の出力部C3、C4、C5に接続されている。例えばレジスタD0、D1、D2、D3、D4、D5にそれぞれ隣接画素データ“A”、“B”、“C”、“D”、“E”、“F”が記憶されている場合、マルチプレクサ210、211、212、213にはそれぞれ、隣接画素データ(“A”、“B”、“C”)、(“B”、“C”、“D”)、(“C”、“D”、“E”)、(“D”、“E”、“F”)が出力される。
マルチプレクサ210、211、212、213をそれぞれ複数のマルチプレクサで構成し、それぞれのマルチプレクサが入力信号を出力するか否かの切り替え動作を制御部14で制御しても良い。
マルチプレクサ210、211、212、213の前段にはそれぞれ補助的な画素選択動作を行う補助マルチプレクサ214、215、216、217が接続されている。補助マルチプレクサ214、215、216、217は記憶部20に記憶された画素データの一部を入力とする。補助マルチプレクサ214、215、216、217は選択信号31に基づいてマルチプレクサ210、211、212、213が未選択の隣接画素データの一部を選択しマルチプレクサ210、211、212、213に出力する。補助マルチプレクサ214、215、216、217は特定の予測モードにおいてマルチプレクサ210、211、212、213がレジスタD0、D1、D2、D3、D4、D5から画素予測に必要な画素データを読み込めない場合に記憶部20から画素データを選択し、マルチプレクサ210、211、212、213にそれぞれ出力する。
なお、予測モードによってそれぞれの補助マルチプレクサ214、215、216、217が取得すべき画素はあらかじめ分かっているので、記憶部20に対し予測画素の生成に必要な画素データが記憶されているレジスタに限定して補助マルチプレクサ214、215、216、217を接続してもよい。本実施例において、記憶部20のそれぞれのレジスタに左から順に“L”、“K”、“J”、“I”、“M”、“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”が初期値として保持されているとする。レジスタD0の左側のレジスタをD6とし、レジスタD6の出力部を出力部C6とする。この場合各予測モードでの予測画素の演算に必要な隣接画素を考慮し、補助マルチプレクサ214はレジスタD0の左側のレジスタD6の出力部C6に結線する。補助マルチプレクサ215はレジスタD1の左側のレジスタD0の出力部C0に結線する。補助マルチプレクサ216はレジスタD2の左側のレジスタD0、D1の出力部C0、C1に結線する。補助マルチプレクサ217はレジスタD3の左側のレジスタD6、D0、D1、D2の出力部C6、C0、C1、C2に結線する。
以上の通り、記憶部20のシフト動作および記憶部20と選択部21との接続関係を考慮することにより、それぞれの補助マルチプレクサ214、215、216、217と接続すべきレジスタの数を少なくすることが出来る。接続するレジスタの数を少なくすることにより配線面積および補助マルチプレクサ214、215、216、217の回路規模は小さくなり、画像符号化装置全体の実装面積を小さくすることが出来る。
演算部22は入力された画素データに基づいて予測画素データを演算する。演算部22は制御部14から出力される演算信号32に基づいて予測画素の演算内容を決定する。演算部22は演算器220、221、222、223、224を有する。なお、実施例において、演算部22が複数の演算器を有するように記載しているが、1つの演算部22が演算信号32に応じて演算機能を切り替えるように設計しても良い。
演算器220、221、222、223、224による演算処理は予測モードによって異なる。演算部22による演算処理の詳細は後述する。演算器220はマルチプレクサ210の出力画素データに基づいて予測画素データを生成する。演算器221はマルチプレクサ211の出力画素データに基づいて予測画素データを生成する。演算器222はマルチプレクサ212の出力画素データに基づいて予測画素データを生成する。演算器223はマルチプレクサ213の出力画素データに基づいて予測画素データを生成する。演算器224は後述する予測モード1から予測モード3の予測画素を生成する。演算器224には記憶部20に記憶されたすべての画素データが入力される。
制御部14は該記憶部20に対してアルゴリズムの異なる複数の予測モードに応じて記憶領域に保持した隣接画素データを移動させる制御を行い、選択部21に対して予測モードに応じて受信した隣接画素データの一部を選択させる制御を行い、演算器220、221、222、223に対して予測モードに応じた演算を実行させる制御を行う。制御部14はシフト信号30、選択信号31、演算信号32の値を予測モードに応じて決定する。
減算部23は演算部22により生成された予測画素と予測対象の元の入力画像2との差分値を計算する。減算部23は減算器230、231、232、233を有する。モード判定部24は予測モードごとの差分値を記憶し、すべての予測モードのうちもっとも差分値の小さいものをベストモードとして選択し、選択した予測モードに対応する予測画像4を出力する。
フレーム内予測部11の動作は予測モードによって異なる。フレーム内予測部11の動作の詳細は後述する。予測モードに応じて記憶部20の各レジスタに記憶された画素データをシフトさせることにより、選択部21に入力される画素データの最大数を小さくすることが出来る。これにより記憶部20と選択部21との配線面積および選択部21の回路規模を小さくすることが出来る。また、選択部21による信号選択処理数を少なくすることが出来、信号選択処理における消費電力を小さくすることが出来る。
なお、本実施例におけるフレーム内予測部11は4×4画素のマクロブロックに対するフレーム内予測処理での構成を示しているが、8×8画素および16×16画素のマクロブロックをフレーム内予測処理する場合の構成も基本的に同じである。
図3はフレーム内予測部11によるフレーム内予測処理において、マクロブロック内の各画素を予測するのに用いる隣接画素を示した隣接画素テーブルである。図3のAからIは4×4画素のマクロブロックに対する別個の予測モードをそれぞれ示している。図3のAにおいて、予測モードにおける4×4画素のマクロブロック40は予測対象のマクロブロックである。また、図3のAからIにおいて実線で囲まれた画素Aから画素Mはマクロブロック40の予測に用いる隣接画素である。制御部14は図3に示す各隣接画素データが演算部22に受け渡されるように記憶部20および選択部21を制御する。制御部14による記憶部20および選択部21の制御の詳細は後述する。
図3のAにおいて、列50から列53はマクロブロック40の各列の画素の予測に用いる隣接画素の組み合わせを示している。それぞれの列の画素群は、フレーム内予測部11の演算部22に入力される画素を示している。また、行55から行58はマクロブロック40の各行の画素の予測に用いる隣接画素の組み合わせを示している。演算部22は、各予測モードAからIに応じて予測画素の計算を行う。
マクロブロック40の行55、列50を起点(0、0)とした場合のy行目、x列目の予測画素をpred(x、y)とし、マクロブロックの予測計算に用いる隣接画素をp(x、y)とする。これにより、A=p(0、−1)、B=p(1、−1)、C=p(2、−1)、D=p(3、−1)、E=p(4、−1)、F=p(5、−1)、G=p(6、−1)、H=p(7、−1)、I=p(−1、0)、J=p(−1、1)、K=p(−1、2)、L=p(−1、3)、M=p(−1、−1)と表すことができる。
フレーム内予測処理の予測対象となるマクロブロックのサイズは、H.264規格の場合4×4画素、8×8画素、および16×16画素が用意されている。それぞれのサイズにおけるフレーム内予測処理の処理方法は基本的に同じであるため、本実施例では4×4画素のマクロブロックに対するフレーム内予測処理について詳細に説明する。
図3のAはモード0の予測モード図である。モード0では隣接画素である画素(A、B、C、D)をマクロブロック内の同じ列50から列53の画素の予測値とする。
モード0において予測画素はpred(x、y)=p(x、−1)として計算される。モード0での予測画素の演算は図2の演算器220、221、222、223により実行してもよいし、演算器224により実行しても良い。
図3のBはモード1の予測モード図である。モード1では隣接画素である画素(I、J、K、L)をマクロブロック内の同じ行55から行58の画素の予測値とする。
モード1において予測画素はpred(x、y)=p(−1、y)として計算される。モード1での予測画素の演算は図2の演算器224により実行される。
図3のCはモード2の予測モード図である。モード2では隣接画素である画素(A、B、C、D、I、J、K、L)の平均値をマクロブロック内のそれぞれの画素の予測値とする。
モード2において予測画素はpred(x、y)=(p(0、−1)+p(1、−1)+p(2、−1)+p(3、−1)+p(−1、0)+p(−1、1)+p(−1、2)+p(−1、3)+4)>>3として計算される。ここで>>3は画素のビットデータを右に3桁シフトすることを表す。モード2での予測画素の演算は図2の演算器224により実行される。
図3のDはモード3におけるマクロブロック40の予測演算に必要な隣接画素を示している。フレーム内予測部11の演算部22は、各サイクルに応じて1行ごとに予測画素の計算を行う。例えば列50の予測画素の演算は演算器220が行う。サイクル0において演算器220に入力される画素データを(0、演算器220)とすると、(0、演算器220)=(A、B、C)である。同様に(0、演算器221)=(B、C、D)、(0、演算器222)=(C、D、E)、(0、演算器223)=(D、E、F)となる。サイクル1から3までの予測画素の計算も同様に(1、演算器220)=(B、C、D)、(1、演算器221)=(C、D、E)、(1、演算器222)=(D、E、F)、(1、演算器223)=(E、F、G)、(2、演算器220)=(C、D、E)、(2、演算器221)=(D、E、F)、(2、演算器222)=(E、F、G)、(2、演算器223)=(F、G、H)、(3、演算器220)=(D、E、F)、(3、演算器221)=(E、F、G)、(3、演算器222)=(F、G、H)、(3、演算器223)=(G、H、H)となる。フレーム内予測部11は4つの演算器220から223を用いて4×4画素のマクロブロック40の画素を1行ずつ予測演算処理する。モード3についての予測処理の詳細は後述する。
モード3において予測画素はpred(x、y)=(p(x+y、−1)+2×p(x+y+1、−1)+p(x+y+2、−1)+2)>>2として計算される。ただし、x=y=3の場合、予測画素はpred(x、y)=(p(6、−1)+3×p(7、−1)+2)>>2として計算される。
図3のEはモード4におけるマクロブロック40の予測演算に必要な隣接画素を示している。マクロブロック40の各画素の予測に必要な隣接画素データはそれぞれ、(0、演算器220)=(I、M、A)、(0、演算器221)=(M、A、B)、(0、演算器222)=(A、B、C)、(0、演算器223)=(B、C、D)、(1、演算器220)=(J、I、M)、(1、演算器221)=(I、M、A)、(1、演算器222)=(M、A、B)、(1、演算器223)=(A、B、C)、(2、演算器220)=(K、J、I)、(2、演算器221)=(J、I、M)、(2、演算器222)=(I、M、A)、(2、演算器223)=(M、A、B)、(3、演算器220)=(L、K、J)、(3、演算器221)=(K、J、I)、(3、演算器222)=(J、I、M)、(3、演算器223)=(I、M、A)である。
xがyより大きい場合、モード4において予測画素はpred(x、y)=(p(x−y−2、−1)+2×p(x−y−1、−1)+p(x−y、−1)+2)>>2として計算される。xがyより小さい場合、予測画素はpred(x、y)=(p(−1、y−x−2)+2×p(−1、y−x−1)+p(−1、y−x)+2)>>2として計算される。x=yの場合、予測画素はpred(x、y)=(p(0、−1)+2×p(−1、−1)+p(−1、0)+2)>>2として計算される。
図3のFはモード5におけるマクロブロック40の予測演算に必要な隣接画素を示している。マクロブロック40の各画素の予測に必要な隣接画素データはそれぞれ、(0、演算器220)=(M、A)、(0、演算器221)=(A、B)、(0、演算器222)=(B、C)、(0、演算器223)=(C、D)、(1、演算器220)=(I、M、A)、(1、演算器221)=(M、A、B)、(1、演算器222)=(A、B、C)、(1、演算器223)=(B、C、D)、(2、演算器220)=(J、I、M)、(2、演算器221)=(M、A)、(2、演算器222)=(A、B)、(2、演算器223)=(B、C)、(3、演算器220)=(K、J、I)、(3、演算器221)=(I、M、A)、(3、演算器222)=(M、A、B)、(3、演算器223)=(A、B、C)である。モード5についての予測処理の詳細は後述する。
VR=2×x−yとし、x、yがVR=0、VR=2、VR=4、またはVR=6の何れかを満たす場合、モード5において予測画素はpred(x、y)=(p(x−(y>>1)−1、−1)+p(x−(y>>1)、−1)+1)>>1として計算される。x、yがVR=1、VR=3、またはVR=5の何れかを満たす場合、予測画素はpred(x、y)=(p(x−(y>>1)−2、−1)+2×p(x−(y>>1)−1、−1)+p(x−(y>>1)、−1)+2)>>2として計算される。VR=−1の場合、予測画素はpred(x、y)=(p(−1、0)+2×p(−1、−1)+p(0、−1)+2)>>2として計算される。x、yがVR=−2またはVR=−3を満たす場合、予測画素はpred(x、y)=(p(−1、y−1)+2×p(−1、y−2)+p(−1、y−3)+2)>>2として計算される。
図3のGはモード6におけるマクロブロック40の予測演算に必要な隣接画素を示している。マクロブロック40の各画素の予測に必要な隣接画素データはそれぞれ、(0、演算器220)=(I、M)、(0、演算器221)=(I、M、A)、(0、演算器222)=(M、A、B)、(0、演算器223)=(A、B、C)、(1、演算器220)=(J、I)、(1、演算器221)=(J、I、M)、(1、演算器222)=(I、M)、(1、演算器223)=(I、M、A)、(2、演算器220)=(K、J)、(2、演算器221)=(K、J、I)、(2、演算器222)=(J、I)、(2、演算器223)=(J、I、M)、(3、演算器220)=(L、K)、(3、演算器221)=(L、K、J)、(3、演算器222)=(K、J)、(3、演算器223)=(K、J、I)である。
HD=2×y−xとし、x、yがHD=0、HD=2、HD=4、またはHD=6の何れかを満たす場合、モード6において予測画素はpred(x、y)=(p(−1、y−(x>>1)−1)+p(−1、y−(x>>1))+1)>>1として計算される。x、yがHD=1、HD=3、またはHD=5の何れかを満たす場合、予測画素はpred(x、y)=(p(−1、y−(x>>1)−2)+2×p(−1、y−(x>>1)−1)+p(−1、y−(x>>1))+2)>>2として計算される。HD=−1の場合、予測画素はpred(x、y)=(p(−1、0)+2×p(−1、−1)+p(0、−1)+2)>>2として計算される。x、yがHD=−2またはHD=−3を満たす場合、予測画素はpred(x、y)=(p(x−1、−1)+2×p(x−2、−1)+p(x−3)+2、−1)>>2として計算される。
図3のHはモード7におけるマクロブロック40の予測演算に必要な隣接画素を示している。マクロブロック40の各画素の予測に必要な隣接画素データはそれぞれ、(0、演算器220)=(A、B)、(0、演算器221)=(B、C)、(0、演算器222)=(C、D)、(0、演算器223)=(D、E)、(1、演算器220)=(A、B、C)、(1、演算器221)=(B、C、D)、(1、演算器222)=(C、D、E)、(1、演算器223)=(D、E、F)、(2、演算器220)=(B、C)、(2、演算器221)=(C、D)、(2、演算器222)=(D、E)、(2、演算器223)=(E、F)、(3、演算器220)=(B、C、D)、(3、演算器221)=(C、D、E)、(3、演算器222)=(D、E、F)、(3、演算器223)=(E、F、G)である。
y=0またはy=2の場合、モード7において予測画素はpred(x、y)=(p(x+(y>>1)、−1)+p(x+(y>>1)+1、−1)+1)>>1として計算される。y=1またはy=3の場合、予測画素はpred(x、y)=(p(x+(y>>1)、−1)+2×p(x+(y>>1)+1、−1)+p(x+(y>>1)+2、−1)+2)>>2として計算される。
図3のIはモード8におけるマクロブロック40の予測演算に必要な隣接画素を示している。マクロブロック40の各画素の予測に必要な隣接画素データはそれぞれ、(0、演算器220)=(J、I)、(0、演算器221)=(K、J、I)、(0、演算器222)=(K、J)、(0、演算器223)=(L、K、J)、(1、演算器220)=(K、J)、(1、演算器221)=(L、K、J)、(1、演算器222)=(L、K)、(1、演算器223)=(L、L、K)、(2、演算器220)=(L、K)、(2、演算器221)=(L、L、K)、(2、演算器222)=(L)、(2、演算器223)=(L)、(3、演算器220)=(L)、(3、演算器221)=(L)、(3、演算器222)=(L)、(2、演算器223)=(L)である。
HU=x+2×yとし、x、yがHU=0、HU=2、HU=4の何れかを満たす場合、モード8において予測画素はpred(x、y)=(p(−1、y+(x>>1))+p(−1、y+(x>>1)+1)+1)>>1として計算される。x、yがHU=1またはHU=3の場合、予測画素はpred(x、y)=(p(−1、y+(x>>1))+2×p(−1、y+(x>>1)+1)+p(−1、y+(x>>1))+2)>>2として計算される。HU=5の場合、予測画素はpred(x、y)=(p(−1、2)+3×p(−1、3)+2)>>2として計算される。HUが5よりも大きい場合、予測画素はpred(x、y)=p(−1、3)として計算される。
フレーム内予測部11はモード0からモード8までのすべてのモードについて予測画素を計算する。フレーム内予測部11は各モードにおける予測画素と予測処理前の元の画素との差分を取り、差分値が最も小さくなるモードを予測精度が高いモードとして選択する。各予測モードにおける選択部21の隣接画素選択処理ステップを減らすことにより、隣接画素選択動作に伴う消費電力を削減することが出来る。この結果、フレーム内予測部11を有する画像符号化装置1の消費電力を削減することが出来る。
図4はフレーム内予測部11における予測モード3での予測画素演算フロー図である。フロー70から73はそれぞれ演算器220から223における画素予測演算に関わる処理フローである。
予測対象となるマクロブロック40の隣接画素AからMは記憶部20に記憶される。制御部14はレジスタD0からD5に画素データAからFが割り当てられるようにシフト信号30を記憶部20に出力する(S10)。マルチプレクサ210から213に接続されたレジスタD0からD5に格納する画素データと、マルチプレクサ210から213が演算器220から223に出力する画素データは同一である。よって制御部14はマルチプレクサ210から213に対し、レジスタD0からD5から受信した画素データをそのまま出力するように選択信号31を選択部21に出力する。
演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S110からS113)。前述のとおり、予測画素の演算方法は予測モードごとに異なる。制御部14は予測モード3に応じた演算信号32を演算部22に出力する。
マクロブロック40における1行目の予測画素の演算が終了すると、制御部14は2行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、各レジスタに記憶された画素データの記憶位置を左に一つシフトさせるシフト信号30を出力する。シフト信号30により、レジスタD0からD5に記憶された画素データはBからGとなる(S12)。マルチプレクサ210から213に接続されたレジスタD0からD5に格納された画素データと、マルチプレクサ210から213が演算器220から223に出力する画素データは同一である。よって制御部14はマルチプレクサ210から213に対し、レジスタD0からD5から入力された画素データをそのまま出力するように選択信号31を選択部21に出力する。演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S130からS133)。
マクロブロック40における2行目の予測画素の演算が終了すると、制御部14は3行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、各レジスタに記憶された画素データの記憶位置を左に一つシフトさせるシフト信号30を出力する。シフト信号30により、レジスタD0からD5に記憶された画素データはCからHとなる(S14)。マルチプレクサ210から213に接続されたレジスタD0からD5に格納する画素データと、マルチプレクサ210から213が演算器220から223に出力する画素データは同一である。よって制御部14はマルチプレクサ210から213に対し、レジスタD0からD5から入力された画素データをそのまま出力するように選択信号31を選択部21に出力する。演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S150からS153)。
マクロブロック40における3行目の予測画素の演算が終了すると、制御部14は4行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、各レジスタに記憶された画素データの記憶位置を左に一つシフトさせるシフト信号30を出力する。ここで、画素Hの右隣のデータは記憶部20に記憶されていない。右隣にデータが無い場合、レジスタD0はシフト前に記憶している画素データ“H”を保持する。このため、シフト信号30により、レジスタD0からD5に記憶された画素データは(D、E、F、G、H、H)となる(S15)。
マルチプレクサ210から213に接続されたレジスタD0からD5に格納する画素データと、マルチプレクサ210から213が演算器220から223に出力する画素データは同一である。よって制御部14はマルチプレクサ210から213に対し、レジスタD0からD5から入力された画素データをそのまま出力するように選択信号31を選択部21に出力する。演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S160からS163)。演算器220から223は入力される3つの画素データに基づいて予測画素を生成する(S160からS163)。
減算部23は演算部22により予測演算したマクロブロックの画像と、フレーム内予測処理前の元の画像16との差分値を計算する(S171からS173)。モード判定部24は予測モードごとの予測画素および差分値を記憶する。モード判定部24はそれぞれの予測モードにおける差分値を比較評価し、もっとも差分値の小さい予測モードを特定する。モード判定部24は特定したモードにおける予測画像4を出力する(S18)。
モード4における予測画素の計算も、モード3と同様に記憶部20の各レジスタに記憶された画素データの記憶位置をシフトさせることによって実行することが出来る。ただし、モード3ではレジスタに対する画素データの記憶位置を左側にシフトさせていたのに対し、モード4では画素データの記憶位置を右側にシフトさせる。また前述の通り、演算部22で行う演算内容もモード3とモード4とでは異なる。
モード7における予測画素の計算も、モード3と同様に記憶部20の各レジスタに記憶された画素データの記憶位置をシフトさせることによって実行することが出来る。ただし、モード3ではレジスタに対する画素データの記憶位置を1サイクルごとに左側にシフトさせていたのに対し、モード7ではサイクル2でのみ画素データの記憶位置を左側にシフトさせる。また前述の通り、演算部22で行う演算内容もモード3とモード7とでは異なる。
以上の通り、予測モードに応じて記憶部20の各レジスタに対する画素データの記憶位置をシフトさせることにより、予測モードごとの隣接画素を参照し、予測画素を算出することが出来る。
図5はフレーム内予測部11における予測モード5での予測画素演算フロー図である。フロー80から83はそれぞれ演算器220から223における画素予測演算に関わる処理フローである。予測モード5では3行目の予測画素の生成において、演算器220での予測画素の演算に必要な画素Kをマルチプレクサ210から受信できない。本実施例ではそのような場合のフレーム内予測部11の動作について説明する。
予測対象となるマクロブロック40の隣接画素データAからMは記憶部20に記憶される。制御部14はレジスタD0からD5に画素データMからEが格納されるようにシフト信号30を記憶部20に出力する(S20)。制御部14は、それぞれのマルチプレクサ210から213に接続されたレジスタD0からD5により記憶される画素データのうち2つの画素データを選択し、演算器220から223へ出力するよう、選択信号31を選択部21に出力する。
演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S210からS213)。前述の通り予測画素の演算方法は予測モードごとに異なる。制御部14は予測モード5に応じた演算信号32を演算部22に出力する。
マクロブロック40における1行目の予測画素の演算が終了すると、制御部14は2行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、レジスタに対する画素データの記憶位置を右に一つシフトさせるシフト信号30を出力する。シフト信号30により、レジスタD0からD5に記憶された画素データはIからDとなる(S22)。マルチプレクサ210から213に接続されたレジスタD0からD5に格納する画素データと、マルチプレクサ210から213が演算器220から223に出力する画素データは同一である。よって制御部14はマルチプレクサ210から213に対し、レジスタD0からD5から受信した画素データをそのまま出力するように選択信号31を選択部21に出力する。演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S230からS233)。
マクロブロック40における2行目の予測画素の演算が終了すると、制御部14は3行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、各レジスタに対する画素データの記憶位置を右側に1つシフトさせるシフト信号30を出力する。シフト信号30により、レジスタD0からD5に記憶された画素データはJからCとなる(S24)。2行目の予測演算時と異なり、制御部14はマルチプレクサ211から213に対し、それぞれ記憶部20からの画素データ(J、I、M)、(M、A)、(A、B)、(B、C)を選択し演算器220から223へ出力するよう、選択信号31を出力する。
演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S260からS263)。演算器220から223は、予測画素の演算処理を制御部14から出力された演算信号32に応じて実行する。
マクロブロック40における3行目の予測画素の演算が終了すると、制御部14は4行目の予測画素の演算処理に移行する。制御部14は記憶部20に対し、記憶画素をそのままの位置に保持させるシフト信号30を出力する。シフト信号30により、レジスタD0からD5に記憶された画素データは(J、I、M、A、B、C)のままとなる(S28)。制御部14はマルチプレクサ211から213に対し、それぞれ画素データ(I、M、A)、(M、A、B)、(A、B、C)を選択し演算器221から223へ出力するよう、選択信号31を出力する。
これに対しマルチプレクサ210を補助する補助マルチプレクサ214は、記憶部20に記憶された画素データからKを選択し、マルチプレクサ210へ出力する。マルチプレクサ210は選択信号31に応じて、入力された画素データK、J、I、MからK、J、Iを選択し、演算器220に出力する(S27)。
本実施例のように、予測モードに対応した予測画素演算の際に、画素演算に用いる画素データがレジスタD0からD5に格納されていないことがある。レジスタD0からD5にない画素データから必要な画素データを選択するための補助マルチプレクサ214から217を設けておくことにより、マルチプレクサ210から213だけでは選択できない画素データを演算部22に出力することが出来る。またマルチプレクサ210から213が演算部22に対し予測画素の生成に必要な画素データを送れない場合にのみ、補助マルチプレクサ214から217が動作すればよい。これにより選択部21による消費電力を低く抑えることができる。
演算器220から223はマルチプレクサ210から213により出力された画素データに基づいて予測画素を生成する(S290からS293)。
減算部23は演算部22により予測演算したマクロブロックの画像と、フレーム内予測処理前の元の画像16との差分値を計算する(S300からS303)。モード判定部24は予測モードごとの予測画素および差分値を記憶する。モード判定部24はそれぞれの予測モードにおける差分値を比較評価し、もっとも差分値の小さい予測モードを特定する。モード判定部24は特定したモードにおける予測画像4を出力する(S31)。
以上の通り、予測モードに応じてマルチプレクサ210から213へ出力すべき画素データを記憶部20に記憶された画素データのシフトだけでは対応できない場合であっても、補助マルチプレクサ214から217を用いて他の隣接画素を選択可能にしておくことにより、予測モードに応じた特殊な画素データの選択動作に対応することが出来る。
モード6における予測画素の計算も、モード5と同様に補助マルチプレクサ214から217を用いて他の隣接画素を選択可能にし、予測モードに応じた特殊な画素データの選択動作に対応することが出来る。より具体的には、サイクル1で各レジスタに対する画素データの記憶位置を右側にシフトさせると共に、画素“I”を補助マルチプレクサ217からマルチプレクサ213へ出力する。同様に、サイクル2において各レジスタに対する画素データの記憶位置を右側にシフトさせると共に、画素“J”を補助マルチプレクサ217からマルチプレクサ213へ出力する。さらにサイクル3において各レジスタに対する画素データの記憶位置を右側にシフトさせると共に、画素“K”を補助マルチプレクサ217からマルチプレクサ213へ出力する。前述の通り、演算部22で行う演算内容はモード5とモード6とでは異なる。
モード8における予測画素の計算も、モード5と同様に補助マルチプレクサ214から217を用いて他の隣接画素を選択可能にし、予測モードに応じた特殊な画素データの選択動作に対応することが出来る。
より具体的な処理は以下の通りである。サイクル0において、補助マルチプレクサ215は画素“K”を出力し、補助マルチプレクサ216は画素“K、J”を出力し、補助マルチプレクサ217は画素“J、K、I”を出力する。サイクル1において、記憶部20の各レジスタに記憶する画素データの記憶位置を右側へシフトさせると共に、補助マルチプレクサ215は画素“L”を出力し、補助マルチプレクサ216は画素“L、K”を出力し、補助マルチプレクサ217は画素“L、K”を出力する。サイクル2において、記憶部20の各レジスタに対する画素データの記憶位置を右側へシフトさせると共に、補助マルチプレクサ216は画素“L”を出力し、補助マルチプレクサ217は画素“L”を出力する。サイクル3において、記憶部20の各レジスタに対する画素データの記憶位置を右側へシフトさせる。
全ての予測モードのうち、補助マルチプレクサ215、216を用いるのはモード8のみである。またモード8では予測対象マクロブロックの全ての行の計算に補助マルチプレクサ215、216、217を用いる必要がある。モード8の計算を演算器224に実行させれば、補助マルチプレクサ215、216は不要になる。補助マルチプレクサ215、216を実装しないことにより、画像符号化装置の回路規模を更に小さくすることができる。また、補助マルチプレクサ215、216による画素選択動作が不要となり、画像符号化装置の消費電力を小さくすることが出来る。