以下、本開示を実施するための形態(以下実施の形態とする)について説明する。なお、説明は以下の順序で行う。
1.適応プライマリ変換 [0016]
2.第1の実施の形態(変換行列からの変換行列導出) [0041]
2-1.共通コンセプト
2-2.実施例1-1
2-3.実施例1-2
2-4.実施例1-3
2-5.実施例1-4
2-6.実施例1-5
3.第2の実施の形態(予測残差変換) [0561]
3-1.共通コンセプト
3-2.実施例2-1
3-3.実施例2-2
3-4.実施例2-3
3-5.実施例2-4
4.第3の実施の形態(部分行列からの変換行列導出) [0734]
4-1.共通コンセプト
5.第4の実施の形態(実施の形態の組み合わせ) [0840]
5-1.共通コンセプト
6.付記
<1.適応プライマリ変換>
<技術内容・技術用語をサポートする文献等>
本技術で開示される範囲は、実施例に記載されている内容だけではなく、出願当時において公知となっている以下の非特許文献に記載されている内容も含まれる。
非特許文献1:(上述)
非特許文献3:TELECOMMUNICATION STANDARDIZATION SECTOR OF ITU(International Telecommunication Union), "Advanced video coding for generic audiovisual services", H.264, 04/2017
非特許文献4:TELECOMMUNICATION STANDARDIZATION SECTOR OF ITU(International Telecommunication Union), "High efficiency video coding", H.265, 12/2016
つまり、上述の非特許文献に記載されている内容もサポート要件を判断する際の根拠となる。例えば、非特許文献4に記載されているQuad-Tree Block Structure、非特許文献1に記載されているQTBT(Quad Tree Plus Binary Tree) Block Structureが実施例において直接的な記載がない場合でも、本技術の開示範囲内であり、請求の範囲のサポート要件を満たすものとする。また、例えば、パース(Parsing)、シンタックス(Syntax)、セマンティクス(Semantics)等の技術用語についても同様に、実施例において直接的な記載がない場合でも、本技術の開示範囲内であり、請求の範囲のサポート要件を満たすものとする。
また、本明細書において、画像(ピクチャ)の部分領域や処理単位として説明に用いる「ブロック」(処理部を示すブロックではない)は、特に言及しない限り、ピクチャ内の任意の部分領域を示し、その大きさ、形状、および特性等は限定されない。例えば、「ブロック」には、上述の非特許文献1、非特許文献3、および非特許文献4に記載のTB(Transform Block)、TU(Transform Unit)、PB(Prediction Block)、PU(Prediction Unit)、SCU(Smallest Coding Unit)、CU(Coding Unit)、LCU(Largest Coding Unit)、CTB(Coding Tree Block)、CTU(Coding Tree Unit)、変換ブロック、サブブロック、マクロブロック、タイル、またはスライス等、任意の部分領域(処理単位)が含まれるものとする。
また、このようなブロックのサイズを指定するに当たって、直接的にブロックサイズを指定するだけでなく、間接的にブロックサイズを指定するようにしてもよい。例えばサイズを識別する識別情報を用いてブロックサイズを指定するようにしてもよい。また、例えば、基準となるブロック(例えばLCUやSCU等)のサイズとの比または差分によってブロックサイズを指定するようにしてもよい。例えば、シンタックス要素等としてブロックサイズを指定する情報を伝送する場合に、その情報として、上述のような間接的にサイズを指定する情報を用いるようにしてもよい。このようにすることにより、その情報の情報量を低減させることができ、符号化効率を向上させることができる場合もある。また、このブロックサイズの指定には、ブロックサイズの範囲の指定(例えば、許容されるブロックサイズの範囲の指定等)も含む。
<適応プライマリ変換>
非特許文献1に記載のテストモデル(JEM4(Joint Exploration Test Model 4))においては、輝度の変換ブロックについて、水平方向のプライマリ変換PThor(プライマリ水平変換とも称する)、および垂直方向のプライマリ変換PTver(プライマリ垂直変換とも称する)毎に、適応的に複数の異なる1次元直交変換から、プライマリ変換を選択する適応プライマリ変換(AMT(Adaptive Multiple Core Transforms))が開示されている。
具体的には、輝度の変換ブロックについて、適応プライマリ変換を実施するか否かを示す適応プライマリ変換フラグapt_flagが0(偽)の場合には、例えば図1に示される表(LUT_TrSetToTrTypIdx)のように、プライマリ変換として、DCT(Discrete Cosine Transform)-II、またはDST(Discrete Sine Transform)-VIIがモード情報によって一意に決定される(TrSetIdx = 4)。
適応プライマリ変換フラグapt_flagが1(真)の場合であって、処理対象の輝度の変換ブロックを含むカレントCU(Coding Unit)がイントラCUである場合、図1に示される表のように、水平方向(x方向)と垂直方向(y方向)のそれぞれについてのプライマリ変換の候補となる直交変換を含む変換セットTrSetが、図1に示す3つの変換セットTrSet(TrSetIdx = 0,1,2)の中から選択される。なお、図1に示されるDST-VIIやDCT-VIII等は、直交変換のタイプを示しており、それぞれ、図2の表に示されるような関数が用いられる。
この変換セットTrSetは、図3に示されるモード情報と変換セットの対応表(のイントラ予測モード情報)に基づいて一意に決定される。例えば、以下の式(1)および式(2)のように、各変換セットTrSetH, TrSetVに対して、対応する変換セットTrSetを指定する変換セット識別子TrSetIdxを設定するように実施される。
ここで、TrSetHは、プライマリ水平変換PThorの変換セットを示し、TrSetVは、プライマリ垂直変換PTverの変換セットを示し、ルックアップテーブルLUT_IntraModeToTrSetは、図3の対応表である。ルックアップテーブルLUT_IntraModeToTrSet[][]の1番目の配列は、イントラ予測モードIntraModeを引数とし、2番目の配列は、{H=0, V=1}を引数とする。
例えば、イントラ予測モード番号19(IntraMode == 19)の場合、プライマリ水平変換PThorの変換セットTrSetH(プライマリ水平変換セットとも称する)として、図1の表に示される変換セット識別子TrSetIdx = 0の変換セットが選択され、プライマリ垂直変換PTverの変換セットTrSetV(プライマリ垂直変換セットとも称する)として、図1の表に示される変換セット識別子TrSetIdx=2の変換セットが選択される。
なお、適応プライマリ変換フラグapt_flagが1(真)の場合であって、処理対象の輝度の変換ブロックを含むカレントCUがインターCUである場合、プライマリ水平変換の変換セットTrSetHおよびプライマリ垂直変換の変換セットTrSetVには、インターCU専用の変換セットInterTrSet(TrSetIdx = 3)を割り当てる。
続いて、水平方向と垂直方向のそれぞれについて、選択された変換セットTrSetのうち、どの直交変換を適用するかを、プライマリ水平変換指定フラグpt_hor_flagおよびプライマリ垂直変換指定フラグpt_ver_flagの内の対応する方によって選択する。
例えば、以下の式(3)および式(4)のように、プライマリ{水平,垂直}変換セットTrSet{H,V}と、プライマリ{水平,垂直}変換指定フラグpt_{hor,ver}_flagとを引数として、図1に示される変換セットの定義表(LUT_TrSetToTrTypeIdx)から導出する。
例えば、イントラ予測モード番号34(IntraMode == 34)(すなわち、プライマリ水平変換セットTraSetHが0)であり、プライマリ水平変換指定フラグpt_hor_flagが0である場合、図1の変換セット定義表(LUT_TrSetToTrTypeIdx)から、式(3)の変換タイプ識別子TrTypeIdxHの値は4であり、該変換タイプ識別子TrTypeIdxHの値に対応する変換タイプTrTypeHは、図2を参照して、DST-VIIである。つまり、変換セット識別子TrSetIdxが0の変換セットのDST-VIIがプライマリ水平変換PThorの変換タイプとして選択される。また、プライマリ水平変換指定フラグpt_hor_flagが1の場合、DCT-VIIIが変換タイプとして選択される。なお、変換タイプTrTypeを選択するとは、変換タイプ識別子TrTypeIdxを介して、該変換タイプ識別子TrTypeIdxで指定される変換タイプを選択することを含む。
なお、プライマリ水平変換指定フラグpt_hor_flagおよびプライマリ垂直変換指定フラグpt_ver_flagからプライマリ変換識別子pt_idxが、以下の式(5)に基づいて導出される。すなわち、プライマリ変換識別子pt_idxの上位1bitは、プライマリ垂直変換指定フラグの値に対応し、下位1bitは、プライマリ水平変換指定フラグの値に対応する。
導出されたプライマリ変換識別子pt_idxのbin列に対して、算術符号化を適用して、ビット列を生成することで、符号化が実施される。なお、適応プライマリ変換フラグapt_flag、およびプライマリ変換識別子pt_idxは、輝度の変換ブロックにおいてシグナルされる。
以上のように、非特許文献1では、プライマリ変換の候補として、DCT-II(DCT2), DST-VII(DST7), DCT-VIII(DCT8), DST-I(DST1), DCT-V(DCT5)の5つの1次元直交変換が提案されている。また、非特許文献2においては、それらに加えて、さらに、DST-IV(DST4)およびIDT(Identity Transform:1次元変換スキップ)の2つの1次元直交変換が追加され、計7つの1次元直交変換をプライマリ変換の候補とすることが提案されている。
つまり、非特許文献1の場合、図4に示されるように、プライマリ変換の候補として、1次元直交変換がLUTに格納される。また、非特許文献2の場合、それらに加えて、さらに、DST-IV(DST4)およびIDTもLUTに格納される(図4参照)。
HEVC(High Efficiency Video Coding)の場合、変換行列の保持に必要なLUT(Look Up Table:ルックアップテーブル)のサイズは、図5に示される表のようになる。つまり、LUTのサイズは合計約1.3KBとなる。これに対して、非特許文献1に記載の方法の場合、例えばDCT2は、2/4/8/16/32/64/128点のサイズ毎の変換行列をLUT上に保持する必要がある。また、その他の1次元変換(DST7/DST1/DCT8)は、4/8/16/32/64点のサイズ毎の変換行列をLUT上に保持する必要がある。この場合、変換行列の各係数のビット精度を10bitと仮定すると、プライマリ変換の全変換行列の保持に必要なLUTのサイズは、図6のAに示されるようになる。つまり、この場合のLUTのサイズは合計約53KBとなる。すなわち、この場合のLUTのサイズは、HEVCの場合に対して約50倍に増大する。
同様に、非特許文献2に記載の方法の場合、プライマリ変換の全変換行列の保持に要するLUTのサイズは、図6のBに示される表のようになる。つまり、この場合のLUTのサイズは合計約67KBとなる。すなわち、この場合のLUTのサイズは、HEVCの場合に対して約60倍に増大する。
プライマリ変換のハードウエア実装を考えた場合、LUTのサイズは記憶容量(メモリ容量)に反映される。つまり、非特許文献1や非特許文献2に記載の方法の場合、HEVCの場合に比べて、回路規模(変換行列の係数の保持に必要なメモリ容量)が約50倍乃至60倍程度に増大するおそれがあった。
<2.第1の実施の形態>
<2-1.共通コンセプト>
<変換行列の導出>
そこで、第1の変換行列を用いて第2の変換行列を導出し、その導出された第2の変換行列を用いて、画像の予測残差を直交変換し、その予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成するようにする。
例えば、画像処理装置において、第1の変換行列を用いて第2の変換行列を導出する導出部と、その導出部により導出された第2の変換行列を用いて、画像の予測残差を直交変換する直交変換部と、その直交変換部により予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部とを備えるようにする。
このようにすることにより、変換行列を他の変換行列から導出することができるので、直交変換のために用意する変換行列の数の増大を抑制することができ、直交変換に必要なメモリ容量の増大を抑制することができる。
また、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、第1の変換行列を用いて第2の変換行列を導出し、その導出された第2の変換行列を用いて、その得られた係数データを逆直交変換するようにする。
例えば、画像処理装置において、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、第1の変換行列を用いて第2の変換行列を導出する導出部と、その導出部により導出された第2の変換行列を用いて、その復号部により得られた係数データを逆直交変換する逆直交変換部とを備えるようにする。
このようにすることにより、変換行列を他の変換行列から導出することができるので、逆直交変換のために用意する変換行列の数の増大を抑制することができ、逆直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列の特性>
変換行列の主な役割の1つは、DC成分の方向に向けて低次(特に0次)の周波数成分の信号を偏らせることであり、その周波数成分の集め方が重要な特性となる。周波数成分をどのように偏らせるかは、低次(特に0次)の基底ベクトル(行ベクトル)の波形成分が重要となる。つまり、この基底ベクトルの波形成分が似たような傾向にある変換行列同士は、直交変換・逆直交変換について、似たような性能を期待することができる(周波数成分の偏らせ方が似ている)。
そこで、変換行列の低次(特に0次)の基底ベクトル(行ベクトル)の波形に着目する。例えば、図7の変換行列30において、枠31内の低次(特に0次)の行ベクトルの波形(各要素の値の傾向)を、グラフ32のように示すとする。
グラフ32は、図中左側程、より低周波成分の要素の値(の傾向)を示し、図中右側程、より高周波成分の要素の値(の傾向)を示す。また、グラフ32は、図中上側程、値が大きいことを示し、図中下側程、値が小さいことを示す。なお、グラフ32の上下方向の中央が0を示し、中央より上側が正の値、中央より下側が負の値を示す。
グラフ32の波形32Aは、変換行列30の0次の行ベクトルの波形を示している。この波形32Aに示されるように、この場合、変換行列30の0次の行ベクトルは、低周波成分から高周波成分に向かって値が大きくなる傾向を有する。
また、例えば、図7の変換行列30において、枠33内の低次(特に0次)の列ベクトルの波形(各要素の値の傾向)を、グラフ34のように示すとする。グラフ34は、図中上側程、より低周波成分の要素の値(の傾向)を示し、図中下側程、より高周波成分の要素の値(の傾向)を示す。また、グラフ34は、図中左側程、値が大きいことを示し、図中右側程、値が小さいことを示す。なお、グラフ34の左右方向の中央が0を示し、中央より左側が正の値、中央より右側が負の値を示す。
グラフ34の波形34Aは、変換行列30の0次の列ベクトルの波形を示している。この波形34Aに示されるように、この場合、変換行列30の0次の列ベクトルは、中間の周波成分においてピークを有する(つまり、低周波側においてより低周波成分に向かって値が小さくなり、高周波側においてより高周波成分に向かって値が小さくなる傾向を有する)。
なお、本明細書においては、変換行列30の0次の列ベクトルの波形を、グラフ35のように転置した状態で表す場合もある。グラフ35の構造は、グラフ32と同様である。波形35Aは、波形34Aと等価である。
上述のように、このような低次(特に0次)の基底ベクトル(行ベクトル)の波形が類似する変換行列同士は、似たような性能を有する。換言するに、変換行列は、低次(特に0次)の基底ベクトル(行ベクトル)の波形が類似する他の変換行列によって代替することができる。したがって、これを利用することにより、LUTに格納する変換行列の数の増大を抑制することができる。
ここで、非特許文献1や非特許文献2に記載の変換タイプに着目すると、これらの変換タイプの変換行列の0次の行ベクトルや0次の列ベクトルの波形は、4つの型(タイプ)に分類することができる。図8にその例を示す。
1つ目のタイプは、フラット型である。このフラット型は、各周波数成分において値が略一様である波形のタイプである。2つ目のタイプは、増加型である。この増加型は、低周波成分から高周波成分に向かって値が増大する傾向にある波形のタイプである。3つ目のタイプは、減少型である。この減少型は、低周波成分から高周波成分に向かって値が減少する傾向にある波形のタイプである。4つ目のタイプは、山型である。この山型は、途中にピーク(最大値)を有する傾向にある波形のタイプである。つまり、この山型の場合、波形は、低周波成分側でより低周波成分に向かって値が減少するとともに、高周波成分側でより高周波成分に向かって値が減少する傾向にある。
なお、これらの各タイプは、波形のおおよその形を示すものであり、完全に一致する必要はない。例えば、増加型の場合、波形は、全体として、低周波側から高周波側に向かって値が大きくなる傾向にあればよく、低周波側から高周波側に向かって厳密に単調増加していなくてもよい。
同様に、減少型の場合、波形は、全体として、低周波側から高周波側に向かって値が小さくなる傾向にあればよく、低周波側から高周波側に向かって厳密に単調減少していなくてもよい。
同様に、山型の場合、波形は、全体として中央付近においてピーク(最大値)を有し、その両側において、そのピークから離れる方向に値が減少する傾向にあればよく、ピークの両側においてピークから離れる方向に値が単調減少している必要は無い。また、ピークは、1成分により形成されなくてもよく、例えば複数の成分からピークのおおよその位置や値が特定できるようなものであってもよい。また、ピークの位置は厳密に中央でなくてもよい。
同様に、フラット型の場合、波形は、全体として値が略一様であればよく、厳密にフラットである必要は無い。つまり、値に多少のばらつきがあってもよい。換言するに、他の3タイプに分類できないものをフラット型としてもよい。
以上の波形の分類は一例であり、上述の例に限定されない。つまり、上述した以外のタイプに波形を分類するようにしてもよく、分類するタイプの数も任意であり、上述の4種に限定されない。なお、この分類は本技術の説明の便宜上行うものであり、実際の処理として行うものではない。
この分類に従うと、図8に示されるように、DCT2の変換行列の0次行ベクトルの波形はフラット型に分類され、0次列ベクトルの波形は、減少型に分類される。また、DST7の変換行列の0次行ベクトルの波形は増加型に分類され、0次列ベクトルの波形は、山型に分類される。また、DCT8の変換行列の0次行ベクトルの波形は減少型に分類され、0次列ベクトルの波形は、減少型に分類される。また、DCT5の変換行列の0次行ベクトルの波形はフラット型に分類され、0次列ベクトルの波形は、フラット型に分類される。なお、DST4の変換行列の0次行ベクトルの波形は増加型に分類され、0次列ベクトルの波形は、増加型に分類される。
上述のように、変換行列は、0次の行ベクトルの波形が類似する他の変換行列によって代替することができる。つまり、0次の行ベクトルの波形が同型の変換タイプは、お互いに変換行列を代替することができる。
つまり、導出部が、上述の第1の変換行列を用いて第2の変換行列を導出する際に、最低次行ベクトルが所望のタイプの波形を有する第2の変換行列を導出するようにしてもよい。このようにすることにより、直交変換・逆直交変換のために用意する変換行列の数の増大を抑制することができ、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
例えば、導出部が、第1の変換行列を用いて、最低次行ベクトルがフラット型の波形を有する第2の変換行列を導出するようにしてもよい。このようにすることにより、導出した第2の変換行列により、最低次行ベクトルの波形がフラット型の変換行列を代替することができる。また、例えば、導出部が、第1の変換行列を用いて、最低次行ベクトルが増加型の波形を有する第2の変換行列を導出するようにしてもよい。このようにすることにより、導出した第2の変換行列により、最低次行ベクトルの波形が増加型の変換行列を代替することができる。
また、例えば、導出部が、第1の変換行列を用いて、最低次行ベクトルが減少型の波形を有する第2の変換行列を導出するようにしてもよい。このようにすることにより、導出した第2の変換行列により、最低次行ベクトルの波形が減少型の変換行列を代替することができる。また、例えば、導出部が、第1の変換行列を用いて、最低次行ベクトルが山型の波形を有する第2の変換行列を導出するようにしてもよい。このようにすることにより、導出した第2の変換行列により、最低次行ベクトルの波形が山型の変換行列を代替することができる。
例えば、図8において、DST7、DST4、DST8、DST3は、いずれも0次の行ベクトルの波形が増加型であるので、お互いに変換行列を代替することができる。つまり、互いに異なる変換タイプの変換行列であっても、代替することができる。
つまり、導出部が、上述の第1の変換行列を用いて第2の変換行列を導出する際に、第1の変換行列とは異なる変換タイプの第2の変換行列を導出するようにしてもよい。このようにすることにより、直交変換・逆直交変換のために用意する変換タイプの数の増大を抑制することができ、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
なお、その導出の際、導出部が、第1の変換行列と行数および列数が同一の第2の変換行列を導出するようにしてもよい。行数および列数を変化させる場合、波形のタイプが意図せずに変化する可能性がある。したがって、行数および列数を第1の変換行列と同一とすることにより、波形のタイプの意図しない変化が生じる可能性を抑制することができ、第2の変換行列の導出をより容易に行うことができる。
なお、行列は、要素に対する操作を容易に行うことができる。行列の要素に対する操作には、例えば、要素の並び替え等がある。より具体的には、例えば、行列は、その要素群の並び順を所定の方向にフリップ(反転)したり、要素群を転置して行と列とを入れ替えたりすることができる。なお、転置は、行列の左上端と右下端とを結ぶ対角線を軸とするフリップ(反転)と等価である。すなわち、転置はフリップの一部とも言える。また、各要素の符号を反転(正から負、負から正)することも容易である。
このような操作を利用することにより、0次の行ベクトルの波形(のタイプ)を意図的に変化させることができる。例えば、0次の行ベクトルの波形が増加型の行列を行方向にフリップすると、その0次の行ベクトルの波形は減少型に変化する。逆に、0次の行ベクトルの波形が減少型の行列を行方向にフリップすると、その0次の行ベクトルの波形は増加型に変化する。
つまり、図8に示されるように、0次の行ベクトルの波形が増加型の変換タイプ(例えば、DST7、DST4、DST8、DST3)の変換行列を行方向にフリップすることにより、0次の行ベクトルの波形が減少型の変換タイプ(例えば、DCT7、DCT4、DCT8、DCT3)の変換行列を代替可能な変換行列を得ることができる。
また、例えば、行列を転置すると、0次の行ベクトルの波形のタイプと0次の列ベクトルの波形のタイプとが入れ替わる。つまり、転置により、行列の0次の行ベクトルの波形が、転置前の行列の0次の列ベクトルの波形と同タイプになる。
例えば、図9に示されるように、0次の列ベクトルの波形が減少型であるDCT2(DCT6)の変換行列を転置することにより、0次の行ベクトルの波形が減少型の変換タイプ(DCT3、DCT7、DCT4、DCT8)の変換行列を代替可能な変換行列を得ることができる。また、例えば、図9に示されるように、0次の列ベクトルの波形が山型であるDST7(DST3)の変換行列を転置することにより、0次の行ベクトルの波形が山型の変換タイプ(DST2、DST6、DST1、DST5)の変換行列を代替可能な変換行列を得ることができる。
つまり、導出部は、このような第1の変換行列の要素に対する操作により、第2の変換行列を導出するようにしてもよい。そして、この要素に対する操作には、上述のように、要素の並び替え(並び順の変更)を含むようにしてもよい。このようにすることにより、意図的に波形のタイプを変更することができるので、第1の変換行列からより多様な第2の変換行列を導出することができる。したがって、直交変換・逆直交変換のために用意する変換タイプの数の増大を抑制することができ、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
なお、もちろん、導出部が、このような操作を複数回行って第2の変換行列を導出するようにしてもよい。例えば、フリップや転置等の操作を任意に組み合わせることができる。また、同じ操作を複数回繰り返してもよい。このようにすることにより、第1の変換行列からさらに多様な第2の変換行列を導出することができる。
なお、上述のように、直交変換・逆直交変換に利用される変換行列は、LUTに格納される。したがって、導出部は、このルックアップテーブル(LUT)に格納される第1の変換行列を用いて、第2の変換行列を導出するようにしてもよい。このようにすることにより、LUTのサイズの増大を抑制することができる。したがって、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
<導出例>
以上のような操作を伴う変換行列の導出例の一覧を図10に示す。なお、導出に用いる変換行列(第1の変換行列)をベース変換行列Tbaseとも称する。ベース変換行列の変換タイプをベース変換タイプまたは第1の変換タイプとも称する。また、導出する変換行列(第2の変換行列)の変換タイプを第2の変換タイプとも称する。
図10に示される表において、最上段の項目名の行を除き、上から1段目の例の導出は、第1の変換タイプの最低次行ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列をフリップして、第2の変換行列を導出する。より具体的には、導出部は、DST7の変換行列をベース変換行列Tbaseとし、それを行方向にフリップしてFlipDST7の変換行列を導出する。DST7の変換行列の0次の行ベクトルの波形は増加型であるので、導出されたFlipDST7の変換行列の0次の行ベクトルの波形は減少型である。したがって、このFlipDST7の変換行列により、0次の行ベクトルの波形が減少型のDCT8の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(FlipDST7)の変換行列を用いて直交変換・逆直交変換を行うことにより、DCT8の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、1回の操作で第2の変換行列(減少型の代替変換行列)を導出することができる。
また、その1段下の(上から2段目の)例の導出は、第1の変換タイプの最低次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列を転置して、第2の変換行列を導出する。より具体的には、導出部は、DST7の変換行列をベース変換行列Tbaseとし、それを転置してTrDST7の変換行列を導出する。DST7の変換行列の0次の列ベクトルの波形は山型であるので、導出されたTrDST7の変換行列の0次の行ベクトルの波形は山型である。したがって、このTrDST7の変換行列により、0次の行ベクトルの波形が山型のDST1の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST1の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(TrDST7)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST1の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、1回の操作で第2の変換行列(山型の代替変換行列)を導出することができる。
また、その1段下の(上から3段目の)例の導出は、対になるDCT/DST間の特性に着目したものである。より具体的には、対になるDCT/DST間(例えばDST7とDCT8)では、偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である点に着目している。
この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、第2の変換行列を導出する。より具体的には、導出部は、DST7の変換行列をベース変換行列Tbaseとし、それを行方向にフリップし、さらに、奇数次の行ベクトルの符号を反転してDCT8の変換行列を導出する。なお、行ベクトルの符号反転は、行ベクトルの各要素の最上位ビットを変換すればよい。当然、導出されたDCT8の変換行列により、0次の行ベクトルの波形が減少型のDST8の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、当然、導出された第2の変換タイプ(DCT8)の変換行列を用いて直交変換・逆直交変換を行うことにより、DCT8の変換行列を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。また、この場合、2回の操作で第2の変換行列(対になる代替変換行列)を導出することができる。
また、その1段下の(上から4段目の)例の導出は、上から1段目の場合と同様に、第1の変換タイプの最低次行ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列をフリップして、第2の変換行列を導出する。より具体的には、導出部は、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップして、FlipDCT8の変換行列を導出する。DCT8の変換行列の0次の行ベクトルの波形は減少型であるので、導出されたFlipDCT8の変換行列の0次の行ベクトルの波形は増加型である。したがって、このFlipDCT8の変換行列により、0次の行ベクトルの波形が増加型のDST7の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(FlipDCT8)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST7の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、1回の操作で第2の変換行列(減少型の代替変換行列)を導出することができる。
また、その1段下の(上から5段目の)例の導出は、第1の変換タイプの最高次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列を転置して、第2の変換行列を導出する。より具体的には、導出部は、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップし、さらに転置して、TrFlipDCT8の変換行列を導出する。DCT8の変換行列の最高次の列ベクトルの波形は山型であるので、導出されたTrFlipDCT8の変換行列の0次の行ベクトルの波形は山型である。したがって、このTrFlipDCT8の変換行列により、0次の行ベクトルの波形が山型のDST1の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST1の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(TrFlipDCT8)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST1の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、2回の操作で第2の変換行列(山型の代替変換行列)を導出することができる。
また、その1段下の(上から6段目の)例の導出は、上から3段目の場合と同様に、対になるDCT/DST間の特性に着目したものである。より具体的には、対になるDCT/DST間(例えばDCT8とDST7)では、偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である点に着目している。
この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、第2の変換行列を導出する。より具体的には、導出部は、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップし、さらに、奇数次の行ベクトルの符号を反転してDST7の変換行列を導出する。当然、導出されたDST7の変換行列により、0次の行ベクトルの波形が増加型のDST7の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、当然、導出された第2の変換タイプ(DST7)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST7の変換行列を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。また、この場合、2回の操作で第2の変換行列(対になる代替変換行列)を導出することができる。
また、その1段下の(上から7段目の)例の導出は、第1の変換タイプの最低次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列を転置して、第2の変換行列を導出する。より具体的には、導出部は、DCT2の変換行列をベース変換行列Tbaseとし、それを転置してDCT3の変換行列を導出する。DCT2の変換行列の0次の列ベクトルの波形は減少型であるので、導出されたDCT3の変換行列の0次の行ベクトルの波形は減少型である。したがって、このDCT3の変換行列により、0次の行ベクトルの波形が減少型のDCT8の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(DCT3)の変換行列を用いて直交変換・逆直交変換を行うことにより、DCT8の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、1回の操作で第2の変換行列(減少型の代替変換行列)を導出することができる。
また、その1段下の(上から8段目の)例の導出は、第1の変換タイプの最高次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。
この場合、導出部は、第1の変換行列を転置し、転置後の第1の変換行列をフリップして、第2の変換行列を導出する。より具体的には、導出部は、DCT2の変換行列をベース変換行列Tbaseとし、それを転置し、さらに行方向にフリップして、FlipDCT3の変換行列を導出する。DCT2の変換行列の最高次の列ベクトルの波形は増加型であるので、導出されたFlipDCT3の変換行列の0次の行ベクトルの波形は増加型である。したがって、このFlipDCT3の変換行列により、0次の行ベクトルの波形が増加型のDST7の変換行列を代替することができる。
このような導出を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された第2の変換タイプ(FlipDCT3)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST7の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。また、この場合、2回の操作で第2の変換行列(増加型の代替変換行列)を導出することができる。
なお、上述した各導出例は、それぞれ単独で実施するようにしてもよいし、複数の導出例を組み合わせて実施するようにしてもよい。
<画像符号化装置>
次に、以上のような変換行列の導出を行う構成について説明する。図11は、本技術を適用した画像処理装置の一態様である画像符号化装置の構成の一例を示すブロック図である。図11に示される画像符号化装置100は、動画像の画像データを符号化する装置である。例えば、画像符号化装置100は、非特許文献1、非特許文献3、または非特許文献4に記載されている技術を実装し、それらの文献のいずれかに記載された規格に準拠した方法で動画像の画像データを符号化する。
なお、図11においては、処理部やデータの流れ等の主なものを示しており、図11に示されるものが全てとは限らない。つまり、画像符号化装置100において、図11においてブロックとして示されていない処理部が存在したり、図11において矢印等として示されていない処理やデータの流れが存在したりしてもよい。これは、画像符号化装置100内の処理部等を説明する他の図においても同様である。
図11に示されるように画像符号化装置100は、制御部101、並べ替えバッファ111、演算部112、直交変換部113、量子化部114、符号化部115、蓄積バッファ116、逆量子化部117、逆直交変換部118、演算部119、インループフィルタ部120、フレームメモリ121、予測部122、およびレート制御部123を有する。
<制御部>
制御部101は、外部、または予め指定された処理単位のブロックサイズに基づいて、並べ替えバッファ111により保持されている動画像データを処理単位のブロック(CU, PU, 変換ブロックなど)へ分割する。また、制御部101は、各ブロックへ供給する符号化パラメータ(ヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo、フィルタ情報Finfoなど)を、例えば、RDO(Rate-Distortion Optimization)に基づいて、決定する。
これらの符号化パラメータの詳細については後述する。制御部101は、以上のような符号化パラメータを決定すると、それを各ブロックへ供給する。具体的には、以下の通りである。
ヘッダ情報Hinfoは、各ブロックに供給される。
予測モード情報Pinfoは、符号化部115と予測部122とに供給される。
変換情報Tinfoは、符号化部115、直交変換部113、量子化部114、逆量子化部117、および逆直交変換部118に供給される。
フィルタ情報Finfoは、インループフィルタ部120に供給される。
<並べ替えバッファ>
画像符号化装置100には、動画像データの各フィールド(入力画像)がその再生順(表示順)に入力される。並べ替えバッファ111は、各入力画像をその再生順(表示順)に取得し、保持(記憶)する。並べ替えバッファ111は、制御部101の制御に基づいて、その入力画像を符号化順(復号順)に並べ替えたり、処理単位のブロックに分割したりする。並べ替えバッファ111は、処理後の各入力画像を演算部112に供給する。また、並べ替えバッファ111は、その各入力画像(元画像)を、予測部122やインループフィルタ部120にも供給する。
<演算部>
演算部112は、処理単位のブロックに対応する画像I、および予測部122より供給される予測画像Pを入力とし、画像Iから予測画像Pを以下の式(6)に示されるように減算して、予測残差Dを導出し、それを直交変換部113に供給する。
<直交変換部>
直交変換部113は、演算部112から供給される予測残差Dと、制御部101から供給される変換情報Tinfoとを入力とし、その変換情報Tinfoに基づいて、予測残差Dに対して直交変換を行い、変換係数Coeffを導出する。直交変換部113は、その得られた変換係数Coeffを量子化部114に供給する。
<量子化部>
量子化部114は、直交変換部113から供給される変換係数Coeffと、制御部101から供給される変換情報Tinfoとを入力とし、その変換情報Tinfoに基づいて、変換係数Coeffをスケーリング(量子化)する。なお、この量子化のレートは、レート制御部123により制御される。量子化部114は、このような量子化により得られた量子化後の変換係数、すなわち量子化変換係数レベルlevelを、符号化部115および逆量子化部117に供給する。
<符号化部>
符号化部115は、量子化部114から供給された量子化変換係数レベルlevelと、制御部101から供給される各種符号化パラメータ(ヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo、フィルタ情報Finfoなど)と、インループフィルタ部120から供給されるフィルタ係数等のフィルタに関する情報と、予測部122から供給される最適な予測モードに関する情報とを入力とする。符号化部115は、量子化変換係数レベルlevelを可変長符号化(例えば、算術符号化)し、ビット列(符号化データ)を生成する。
また、符号化部115は、その量子化変換係数レベルlevelから残差情報Rinfoを導出し、残差情報Rinfoを符号化し、ビット列を生成する。
さらに、符号化部115は、インループフィルタ部120から供給されるフィルタに関する情報をフィルタ情報Finfoに含め、予測部122から供給される最適な予測モードに関する情報を予測モード情報Pinfoに含める。そして、符号化部115は、上述した各種符号化パラメータ(ヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo、フィルタ情報Finfoなど)を符号化し、ビット列を生成する。
また、符号化部115は、以上のように生成された各種情報のビット列を多重化し、符号化データを生成する。符号化部115は、その符号化データを蓄積バッファ116に供給する。
<蓄積バッファ>
蓄積バッファ116は、符号化部115において得られた符号化データを、一時的に保持する。蓄積バッファ116は、所定のタイミングにおいて、保持している符号化データを、例えばビットストリーム等として画像符号化装置100の外部に出力する。例えば、この符号化データは、任意の記録媒体、任意の伝送媒体、任意の情報処理装置等を介して復号側に伝送される。すなわち、蓄積バッファ116は、符号化データ(ビットストリーム)を伝送する伝送部でもある。
<逆量子化部>
逆量子化部117は、逆量子化に関する処理を行う。例えば、逆量子化部117は、量子化部114から供給される量子化変換係数レベルlevelと、制御部101から供給される変換情報Tinfoとを入力とし、その変換情報Tinfoに基づいて、量子化変換係数レベルlevelの値をスケーリング(逆量子化)する。なお、この逆量子化は、量子化部114において行われる量子化の逆処理である。逆量子化部117は、このような逆量子化により得られた変換係数Coeff_IQを、逆直交変換部118に供給する。
<逆直交変換部>
逆直交変換部118は、逆直交変換に関する処理を行う。例えば、逆直交変換部118は、逆量子化部117から供給される変換係数Coeff_IQと、制御部101から供給される変換情報Tinfoとを入力とし、その変換情報Tinfoに基づいて、変換係数Coeff_IQに対して逆直交変換を行い、予測残差D'を導出する。なお、この逆直交変換は、直交変換部113において行われる直交変換の逆処理である。逆直交変換部118は、このような逆直交変換により得られた予測残差D'を演算部119に供給する。なお、逆直交変換部118は、復号側の逆直交変換部(後述する)と同様であるので、逆直交変換部118については、復号側について行う説明(後述する)を適用することができる。
<演算部>
演算部119は、逆直交変換部118から供給される予測残差D’と、予測部122から供給される予測画像Pとを入力とする。演算部119は、その予測残差D’と、その予測残差D’に対応する予測画像Pとを加算し、局所復号画像Rlocalを導出する。演算部119は、導出した局所復号画像Rlocalをインループフィルタ部120およびフレームメモリ121に供給する。
<インループフィルタ部>
インループフィルタ部120は、インループフィルタ処理に関する処理を行う。例えば、インループフィルタ部120は、演算部119から供給される局所復号画像Rlocalと、制御部101から供給されるフィルタ情報Finfoと、並べ替えバッファ111から供給される入力画像(元画像)とを入力とする。なお、インループフィルタ部120に入力される情報は任意であり、これらの情報以外の情報が入力されてもよい。例えば、必要に応じて、予測モード、動き情報、符号量目標値、量子化パラメータQP、ピクチャタイプ、ブロック(CU、CTU等)の情報等がインループフィルタ部120に入力されるようにしてもよい。
インループフィルタ部120は、そのフィルタ情報Finfoに基づいて、局所復号画像Rlocalに対して適宜フィルタ処理を行う。インループフィルタ部120は、必要に応じて入力画像(元画像)や、その他の入力情報もそのフィルタ処理に用いる。
例えば、インループフィルタ部120は、非特許文献1に記載のように、バイラテラルフィルタ、デブロッキングフィルタ(DBF(DeBlocking Filter))、適応オフセットフィルタ(SAO(Sample Adaptive Offset))、および適応ループフィルタ(ALF(Adaptive Loop Filter))の4つのインループフィルタをこの順に適用する。なお、どのフィルタを適用するか、どの順で適用するかは任意であり、適宜選択可能である。
もちろん、インループフィルタ部120が行うフィルタ処理は任意であり、上述の例に限定されない。例えば、インループフィルタ部120がウィーナーフィルタ等を適用するようにしてもよい。
インループフィルタ部120は、フィルタ処理された局所復号画像Rlocalをフレームメモリ121に供給する。なお、例えばフィルタ係数等のフィルタに関する情報を復号側に伝送する場合、インループフィルタ部120は、そのフィルタに関する情報を符号化部115に供給する。
<フレームメモリ>
フレームメモリ121は、画像に関するデータの記憶に関する処理を行う。例えば、フレームメモリ121は、演算部119から供給される局所復号画像Rlocalや、インループフィルタ部120から供給されるフィルタ処理された局所復号画像Rlocalを入力とし、それを保持(記憶)する。また、フレームメモリ121は、その局所復号画像Rlocalを用いてピクチャ単位毎の復号画像Rを再構築し、保持する(フレームメモリ121内のバッファへ格納する)。フレームメモリ121は、予測部122の要求に応じて、その復号画像R(またはその一部)を予測部122に供給する。
<予測部>
予測部122は、予測画像の生成に関する処理を行う。例えば、予測部122は、制御部101から供給される予測モード情報Pinfoと、並べ替えバッファ111から供給される入力画像(元画像)と、フレームメモリ121から読み出す復号画像R(またはその一部)を入力とする。予測部122は、予測モード情報Pinfoや入力画像(元画像)を用い、インター予測やイントラ予測等の予測処理を行い、復号画像Rを参照画像として参照して予測を行い、その予測結果に基づいて動き補償処理を行い、予測画像Pを生成する。予測部122は、生成した予測画像Pを演算部112および演算部119に供給する。また、予測部122は、以上の処理により選択した予測モード、すなわち最適な予測モードに関する情報を、必要に応じて符号化部115に供給する。
<レート制御部>
レート制御部123は、レート制御に関する処理を行う。例えば、レート制御部123は、蓄積バッファ116に蓄積された符号化データの符号量に基づいて、オーバフローあるいはアンダーフローが発生しないように、量子化部114の量子化動作のレートを制御する。
以上のような構成の画像符号化装置100において、直交変換部113は、導出部および直交変換部として、上述した本技術を適用した処理を行う。また、符号化部115は、符号化部として、上述した本技術を適用した処理を行う。さらに逆直交変換部118は、逆直交変換部および導出部として、上述した本技術を適用した処理を行う。したがって、画像符号化装置100は、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
<直交変換部の詳細>
図12は、図11の直交変換部113の主な構成例を示すブロック図である。図12に示されるように、直交変換部113は、スイッチ151、プライマリ変換部152、およびセカンダリ変換部153を有する。
スイッチ151は、予測残差Dおよびコンポーネント識別子compIDに対応する変換スキップフラグts_flag[compID]を入力とし、変換スキップフラグts_flag[compID]の値がNO_TS(=0)の場合(変換スキップを適用しない場合)、プライマリ変換部152へ予測残差Dを供給する。また、変換スキップフラグts_flag[compID]の値が2D_TS(=1)の場合(2次元変換スキップを適用することを示す場合)、プライマリ変換部152およびセカンダリ変換部153をスキップし、予測残差Dを変換係数Coeffとして直交変換部113の外部に出力する(量子化部114に供給する)。
プライマリ変換部152は、例えば直交変換等の所定の変換処理であるプライマリ変換に関する処理を行う。例えば、プライマリ変換部152は、コンポーネント識別子compID、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]、コンポーネント識別子compIDのプライマリ変換識別子pt_idx[compID]、予測モード情報PInfo、変換ブロックのサイズ(横幅の対数値log2TBWSize, 縦幅の対数値log2TBHSize)、および予測残差Dを入力とする。なお、変換ブロックの横幅TBWSizeをTBWidthとも称し、その対数値をlog2TBWidthとも称する。同様に、変換ブロックの縦幅TBHSizeをTBHeightとも称し、その対数値をlog2TBHeightとも称する。
プライマリ変換部152は、その予測モード情報PInfo、コンポーネント識別子compID、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]、およびコンポーネント識別子compIDのプライマリ変換識別子pt_idx[compID]を参照して、コンポーネント識別子compIDに対応するプライマリ水平変換の変換タイプTrTypeH(および該変換タイプを示すプライマリ水平変換タイプ識別子TrTypeIdxH)、およびプライマリ垂直変換の変換タイプTrTypeV(および該変換タイプを示すプライマリ垂直変換タイプ識別子TrTypeIdxV)を選択する。
また、プライマリ変換部152は、予測残差Dに対して、そのプライマリ水平変換タイプ識別子TrTypeIdxH(または、プライマリ水平変換タイプTrTypeH)と変換ブロックの横幅log2TBWSizeで定まるプライマリ水平変換と、プライマリ垂直変換タイプ識別子TrTypeIdxV(または、プライマリ垂直変換タイプTrTypeV)と変換ブロックの縦幅log2TBHSizeで定まるプライマリ垂直変換と行い、プライマリ変換後の変換係数Coeff_Pを導出する。プライマリ水平変換は、水平方向の1次元直交変換であり、プライマリ垂直変換は、垂直方向の1次元直交変換である。
プライマリ変換部152は、導出した変換係数Coeff_Pをセカンダリ変換部153に供給する。
セカンダリ変換部153は、例えば直交変換等の所定の変換処理であるセカンダリ変換に関する処理を行う。例えばセカンダリ変換部153は、セカンダリ変換識別子st_idx、変換係数のスキャン方法を示すスキャン識別子scanIdx、および変換係数Coeff_Pを入力とする。セカンダリ変換部153は、セカンダリ変換識別子st_idxおよびスキャン識別子scanIdxに基づいて、変換係数Coeff_Pに対してセカンダリ変換を行い、セカンダリ変換後の変換係数Coeff_Sを導出する。
より具体的には、セカンダリ変換識別子st_idxが、セカンダリ変換を適用することを示す場合(st_idx>0)、セカンダリ変換部153は、変換係数Coeff_Pに対して、セカンダリ変換識別子st_idxに対応するセカンダリ変換の処理を実行し、セカンダリ変換後の変換係数Coeff_Sを導出する。
セカンダリ変換部153は、そのセカンダリ変換係数Coeff_Sを、変換係数Coeffとして直交変換部113の外部に出力する(量子化部114に供給する)。
また、セカンダリ変換識別子st_idxが、セカンダリ変換を適用しないことを示す場合(st_idx==0)、セカンダリ変換部153は、セカンダリ変換をスキップし、プライマリ変換後の変換係数Coeff_Pを変換係数Coeff(セカンダリ変換後の変換係数Coeff_S)として直交変換部113の外部に出力する(量子化部114に供給する)。
以上のような構成の直交変換部113において、プライマリ変換部152は、導出部および直交変換部として、上述した本技術を適用した処理を行う。つまり、導出部は、第1の変換行列を用いて第2の変換行列を導出し、直交変換部は、導出部により導出された第2の変換行列を用いて予測残差に対するプライマリ変換を行う。したがって、プライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、上述のようにプライマリ変換部152は、プライマリ変換として、プライマリ水平変換とプライマリ垂直変換とを行う。つまり、導出部は、水平方向の1次元直交変換用の第2の変換行列と、垂直方向の1次元直交変換用の第2の変換行列とを導出し、直交変換部は、プライマリ変換として、導出部により導出された水平方向の1次元直交変換用の第2の変換行列を用いて、水平方向の1次元直交変換を行い、さらに、導出部により導出された垂直方向の1次元直交変換用の第2の変換行列を用いて、垂直方向の1次元直交変換を行う。したがって、このような、水平方向の1次元直交変換および垂直方向の1次元直交変換が行われるプライマリ変換に必要なメモリ容量の増大を抑制することができる。
<画像符号化処理の流れ>
次に、以上のような画像符号化装置100により実行される各処理の流れについて説明する。最初に、図13のフローチャートを参照して、画像符号化処理の流れの例を説明する。
画像符号化処理が開始されると、ステップS101において、並べ替えバッファ111は、制御部101に制御されて、入力された動画像データのフレームの順を表示順から符号化順に並べ替える。
ステップS102において、制御部101は、並べ替えバッファ111が保持する入力画像に対して、処理単位を設定する(ブロック分割を行う)。
ステップS103において、制御部101は、並べ替えバッファ111が保持する入力画像についての符号化パラメータを決定(設定)する。
ステップS104において、予測部122は、予測処理を行い、最適な予測モードの予測画像等を生成する。例えば、この予測処理において、予測部122は、イントラ予測を行って最適なイントラ予測モードの予測画像等を生成し、インター予測を行って最適なインター予測モードの予測画像等を生成し、それらの中から、コスト関数値等に基づいて最適な予測モードを選択する。
ステップS105において、演算部112は、入力画像と、ステップS104の予測処理により選択された最適なモードの予測画像との差分を演算する。つまり、演算部112は、入力画像と予測画像との予測残差Dを生成する。このようにして求められた予測残差Dは、元の画像データに比べてデータ量が低減される。したがって、画像をそのまま符号化する場合に比べて、データ量を圧縮することができる。
ステップS106において、直交変換部113は、ステップS105の処理により生成された予測残差Dに対して直交変換処理を行い、変換係数Coeffを導出する。
ステップS107において、量子化部114は、制御部101により算出された量子化パラメータを用いる等して、ステップS106の処理により得られた変換係数Coeffを量子化し、量子化変換係数レベルlevelを導出する。
ステップS108において、逆量子化部117は、ステップS107の処理により生成された量子化変換係数レベルlevelを、そのステップS107の量子化の特性に対応する特性で逆量子化し、変換係数Coeff_IQを導出する。
ステップS109において、逆直交変換部118は、ステップS108の処理により得られた変換係数Coeff_IQを、ステップS106の直交変換処理に対応する方法で逆直交変換し、予測残差D'を導出する。なお、この逆直交変換処理は、復号側において行われる逆直交変換処理(後述する)と同様であるので、このステップS109の逆直交変換処理については、復号側について行う説明(後述する)を適用することができる。
ステップS110において、演算部119は、ステップS109の処理により導出された予測残差D'に、ステップS104の予測処理により得られた予測画像を加算することにより、局所的に復号された復号画像を生成する。
ステップS111において、インループフィルタ部120は、ステップS110の処理により導出された、局所的に復号された復号画像に対して、インループフィルタ処理を行う。
ステップS112において、フレームメモリ121は、ステップS110の処理により導出された、局所的に復号された復号画像や、ステップS112においてフィルタ処理された、局所的に復号された復号画像を記憶する。
ステップS113において、符号化部115は、ステップS107の処理により得られた量子化変換係数レベルlevelを符号化する。例えば、符号化部115は、画像に関する情報である量子化変換係数レベルlevelを、算術符号化等により符号化し、符号化データを生成する。また、このとき、符号化部115は、各種符号化パラメータ(ヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo)を符号化する。さらに、符号化部115は、量子化変換係数レベルlevelから残差情報RInfoを導出し、その残差情報RInfoを符号化する。
ステップS114において、蓄積バッファ116は、このようにして得られた符号化データを蓄積し、例えばビットストリームとして、それを画像符号化装置100の外部に出力する。このビットストリームは、例えば、伝送路や記録媒体を介して復号側に伝送される。また、レート制御部123は、必要に応じてレート制御を行う。
ステップS114の処理が終了すると、画像符号化処理が終了する。
以上のような流れの画像符号化処理において、ステップS106の処理として、上述した本技術を適用した処理が行われる。また、ステップS109の処理として、上述した本技術を適用した処理が行われる。さらに、ステップS113の処理として、上述した本技術を適用した処理が行われる。したがって、この画像符号化処理を実行することにより、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
<直交変換処理の流れ>
次に図13のステップS106において実行される直交変換処理の流れの例を、図14のフローチャートを参照して説明する。
直交変換処理が開始されると、スイッチ151は、ステップS131において、変換スキップフラグts_flagが2D_TS(2次元変換スキップを示す場合)(例えば1(真))、または、変換量子化バイパスフラグtransquant_bypass_flagが1(真)、であるか否かを判定する。変換スキップフラグts_flagが2D_TS(例えば1(真))、または、変換量子化バイパスフラグが1(真)であると判定された場合、直交変換処理が終了し、処理は図13に戻る。この場合、直交変換処理(プライマリ変換やセカンダリ変換)が省略され、入力された予測残差Dが変換係数Coeffとされる。
また、図14のステップS131において、変換スキップフラグts_flagが2D_TSでなく(2次元変換スキップでなく)(例えば0(偽))、かつ、変換量子化バイパスフラグtransquant_bypass_flagが0(偽)であると判定された場合、処理はステップS132に進む。この場合、プライマリ変換処理およびセカンダリ変換処理が行われる。
ステップS132において、プライマリ変換部152は、入力された予測残差Dに対して、コンポーネント識別子compIDで指定される適応プライマリ変換情報に基づいてプライマリ変換処理を行い、プライマリ変換後の変換係数Coeff_Pを導出する。
ステップS133において、セカンダリ変換部153は、変換係数Coeff_Pに対してセカンダリ変換処理を行い、セカンダリ変換後の変換係数Coeff_S(変換係数Coeff)を導出する。
ステップS133の処理が終了すると直交変換処理が終了する。
以上のような直交変換処理において、ステップS132の処理として、上述した本技術を適用した処理が行われる。したがって、この直交変換処理を実行することにより、プライマリ変換に必要なメモリ容量の増大を抑制することができる。
<画像復号装置>
図15は、本技術を適用した画像処理装置の一態様である画像復号装置の構成の一例を示すブロック図である。図15に示される画像復号装置200は、AVCやHEVCのように、画像とその予測画像との予測残差が符号化された符号化データを復号する装置である。例えば、画像復号装置200は、非特許文献1、非特許文献3、または非特許文献4に記載されている技術を実装し、それらの文献のいずれかに記載された規格に準拠した方法で動画像の画像データが符号化された符号化データを復号する。例えば、画像復号装置200は、上述の画像符号化装置100により生成された符号化データ(ビットストリーム)を復号する。
なお、図15においては、処理部やデータの流れ等の主なものを示しており、図15に示されるものが全てとは限らない。つまり、画像復号装置200において、図15においてブロックとして示されていない処理部が存在したり、図15において矢印等として示されていない処理やデータの流れが存在したりしてもよい。これは、画像復号装置200内の処理部等を説明する他の図においても同様である。
図15において、画像復号装置200は、蓄積バッファ211、復号部212、逆量子化部213、逆直交変換部214、演算部215、インループフィルタ部216、並べ替えバッファ217、フレームメモリ218、および予測部219を備えている。なお、予測部219は、不図示のイントラ予測部、およびインター予測部を備えている。画像復号装置200は、符号化データ(ビットストリーム)を復号することによって、動画像データを生成するための装置である。
<蓄積バッファ>
蓄積バッファ211は、画像復号装置200に入力されたビットストリームを取得し、保持(記憶)する。蓄積バッファ211は、所定のタイミングにおいて、または、所定の条件が整う等した場合、蓄積しているビットストリームを復号部212に供給する。
<復号部>
復号部212は、画像の復号に関する処理を行う。例えば、復号部212は、蓄積バッファ211から供給されるビットストリームを入力とし、シンタックステーブルの定義に沿って、そのビット列から、各シンタックス要素のシンタックス値を可変長復号し、パラメータを導出する。
シンタックス要素およびシンタックス要素のシンタックス値から導出されるパラメータには、例えば、ヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo、残差情報Rinfo、フィルタ情報Finfoなどの情報が含まれる。つまり、復号部212は、ビットストリームから、これらの情報をパースする(解析して取得する)。これらの情報について以下に説明する。
<ヘッダ情報Hinfo>
ヘッダ情報Hinfoは、例えば、VPS(Video Parameter Set)/SPS(Sequence Parameter Set)/PPS(Picture Parameter Set)/SH(スライスヘッダ)などのヘッダ情報を含む。ヘッダ情報Hinfoには、例えば、画像サイズ(横幅PicWidth、縦幅PicHeight)、ビット深度(輝度bitDepthY, 色差bitDepthC)、色差アレイタイプChromaArrayType、CUサイズの最大値MaxCUSize/最小値MinCUSize、4分木分割(Quad-tree分割ともいう)の最大深度MaxQTDepth/最小深度MinQTDepth、2分木分割(Binary-tree分割)の最大深度MaxBTDepth/最小深度MinBTDepth、変換スキップブロックの最大値MaxTSSize(最大変換スキップブロックサイズともいう)、各符号化ツールのオンオフフラグ(有効フラグともいう)などを規定する情報が含まれる。
例えば、ヘッダ情報Hinfoに含まれる符号化ツールのオンオフフラグとしては、以下に示す変換、量子化処理に関わるオンオフフラグがある。なお、符号化ツールのオンオフフラグは、該符号化ツールに関わるシンタックスが符号化データ中に存在するか否かを示すフラグとも解釈することができる。また、オンオフフラグの値が1(真)の場合、該符号化ツールが使用可能であることを示し、オンオフフラグの値が0(偽)の場合、該符号化ツールが使用不可であることを示す。なお、フラグ値の解釈は逆であってもよい。
コンポーネント間予測有効フラグ(ccp_enabled_flag):コンポーネント間予測(CCP(Cross-Component Prediction),CC予測とも称する)が使用可能であるか否かを示すフラグ情報である。例えば、このフラグ情報が「1」(真)の場合、使用可能であることが示され、「0」(偽)の場合、使用不可であることが示される。
なお、このCCPは、コンポーネント間線形予測(CCLMまたはCCLMP)とも称する。
<予測モード情報Pinfo>
予測モード情報Pinfoには、例えば、処理対象PB(予測ブロック)のサイズ情報PBSize(予測ブロックサイズ)、イントラ予測モード情報IPinfo、動き予測情報MVinfo等の情報が含まれる。
イントラ予測モード情報IPinfoには、例えば、JCTVC-W1005, 7.3.8.5 Coding Unit syntax中のprev_intra_luma_pred_flag, mpm_idx, rem_intra_pred_mode、およびそのシンタックスから導出される輝度イントラ予測モードIntraPredModeY等が含まれる。
また、イントラ予測モード情報IPinfoには、例えば、コンポーネント間予測フラグ(ccp_flag(cclmp_flag))、多クラス線形予測モードフラグ(mclm_flag)、色差サンプル位置タイプ識別子(chroma_sample_loc_type_idx)、色差MPM識別子(chroma_mpm_idx)、および、これらのシンタックスから導出される輝度イントラ予測モード(IntraPredModeC)等が含まれる。
コンポーネント間予測フラグ(ccp_flag(cclmp_flag))は、コンポーネント間線形予測を適用するか否かを示すフラグ情報である。例えば、ccp_flag==1のとき、コンポーネント間予測を適用することを示し、ccp_flag==0のとき、コンポーネント間予測を適用しないことを示す。
多クラス線形予測モードフラグ(mclm_flag)は、線形予測のモードに関する情報(線形予測モード情報)である。より具体的には、多クラス線形予測モードフラグ(mclm_flag)は、多クラス線形予測モードにするか否かを示すフラグ情報である。例えば、「0」の場合、1クラスモード(単一クラスモード)(例えばCCLMP)であることを示し、「1」の場合、2クラスモード(多クラスモード)(例えばMCLMP)であることを示す。
色差サンプル位置タイプ識別子(chroma_sample_loc_type_idx)は、色差コンポーネントの画素位置のタイプ(色差サンプル位置タイプとも称する)を識別する識別子である。例えば色フォーマットに関する情報である色差アレイタイプ(ChromaArrayType)が420形式を示す場合、色差サンプル位置タイプ識別子は、以下の式(7)のような割り当て方となる。
なお、この色差サンプル位置タイプ識別子(chroma_sample_loc_type_idx)は、色差コンポーネントの画素位置に関する情報(chroma_sample_loc_info())として(に格納されて)伝送される。
色差MPM識別子(chroma_mpm_idx)は、色差イントラ予測モード候補リスト(intraPredModeCandListC)の中のどの予測モード候補を色差イントラ予測モードとして指定するかを表す識別子である。
動き予測情報MVinfoには、例えば、merge_idx, merge_flag, inter_pred_idc, ref_idx_LX, mvp_lX_flag, X={0,1}, mvd等の情報が含まれる(例えば、JCTVC-W1005, 7.3.8.6 Prediction Unit Syntaxを参照)。
もちろん、予測モード情報Pinfoに含まれる情報は任意であり、これらの情報以外の情報が含まれるようにしてもよい。
<変換情報Tinfo>
変換情報Tinfoには、例えば、以下の情報が含まれる。もちろん、変換情報Tinfoに含まれる情報は任意であり、これらの情報以外の情報が含まれるようにしてもよい。
処理対象変換ブロックの横幅サイズTBWSizeおよび縦幅TBHSize(または、2を底とする各TBWSize、TBHSizeの対数値log2TBWSize、log2TBHSizeであってもよい)。
変換スキップフラグ(ts_flag):(逆)プライマリ変換および(逆)セカンダリ変換をスキップか否かを示すフラグである。
スキャン識別子(scanIdx)
量子化パラメータ(qp)
量子化マトリックス(scaling_matrix(例えば、JCTVC-W1005, 7.3.4 Scaling list data syntax))
<残差情報Rinfo>
残差情報Rinfo(例えば、JCTVC-W1005の7.3.8.11 Residual Coding syntaxを参照)には、例えば以下のシンタックスが含まれる。
cbf(coded_block_flag):残差データ有無フラグ
last_sig_coeff_x_pos:ラスト非ゼロ係数X座標
last_sig_coeff_y_pos:ラスト非ゼロ係数Y座標
coded_sub_block_flag:サブブロック非ゼロ係数有無フラグ
sig_coeff_flag:非ゼロ係数有無フラグ
gr1_flag:非ゼロ係数のレベルが1より大きいかを示すフラグ(GR1フラグとも呼ぶ)
gr2_flag:非ゼロ係数のレベルが2より大きいかを示すフラグ(GR2フラグとも呼ぶ)
sign_flag:非ゼロ係数の正負を示す符号(サイン符号とも呼ぶ)
coeff_abs_level_remaining:非ゼロ係数の残余レベル(非ゼロ係数残余レベルとも呼ぶ)
など。
もちろん、残差情報Rinfoに含まれる情報は任意であり、これらの情報以外の情報が含まれるようにしてもよい。
<フィルタ情報Finfo>
フィルタ情報Finfoには、例えば、以下に示す各フィルタ処理に関する制御情報が含まれる。
デブロッキングフィルタ(DBF)に関する制御情報
画素適応オフセット(SAO)に関する制御情報
適応ループフィルタ(ALF)に関する制御情報
その他の線形・非線形フィルタに関する制御情報
より具体的には、例えば、各フィルタを適用するピクチャや、ピクチャ内の領域を指定する情報や、CU単位のフィルタOn/Off制御情報、スライス、タイルの境界に関するフィルタOn/Off制御情報などが含まれる。もちろん、フィルタ情報Finfoに含まれる情報は任意であり、これらの情報以外の情報が含まれるようにしてもよい。
復号部212の説明に戻り、復号部212は、残差情報Rinfoを参照して、各変換ブロック内の各係数位置の量子化変換係数レベルlevelを導出する。復号部212は、その量子化変換係数レベルlevelを、逆量子化部213に供給する。
また、復号部212は、パースしたヘッダ情報Hinfo、予測モード情報Pinfo、量子化変換係数レベルlevel、変換情報Tinfo、フィルタ情報Finfoを各ブロックへ供給する。具体的には以下の通りである。
ヘッダ情報Hinfoは、逆量子化部213、逆直交変換部214、予測部219、インループフィルタ部216に供給される。
予測モード情報Pinfoは、逆量子化部213および予測部219に供給される。
変換情報Tinfoは、逆量子化部213および逆直交変換部214に供給される。
フィルタ情報Finfoは、インループフィルタ部216に供給される。
もちろん、上述の例は一例であり、この例に限定されない。例えば、各符号化パラメータが任意の処理部に供給されるようにしてもよい。また、その他の情報が、任意の処理部に供給されるようにしてもよい。
<逆量子化部>
逆量子化部213は、逆量子化に関する処理を行う。例えば、逆量子化部213は、復号部212から供給される変換情報Tinfoおよび量子化変換係数レベルlevelを入力とし、その変換情報Tinfoに基づいて、量子化変換係数レベルlevelの値をスケーリング(逆量子化)し、逆量子化後の変換係数Coeff_IQを導出する。
なお、この逆量子化は、量子化部114による量子化の逆処理として行われる。また、この逆量子化は、逆量子化部117による逆量子化と同様の処理である。つまり、逆量子化部117は、逆量子化部213と同様の処理(逆量子化)を行う。
逆量子化部213は、導出した変換係数Coeff_IQを逆直交変換部214に供給する。
<逆直交変換部>
逆直交変換部214は、逆直交変換に関する処理を行う。例えば、逆直交変換部214は、逆量子化部213から供給される変換係数Coeff_IQ、および、復号部212から供給される変換情報Tinfoを入力とし、その変換情報Tinfoに基づいて、変換係数Coeff_IQに対して逆直交変換処理を行い、予測残差D'を導出する。
なお、この逆直交変換は、直交変換部113による直交変換の逆処理として行われる。また、この逆直交変換は、逆直交変換部118による逆直交変換と同様の処理である。つまり、逆直交変換部118は、逆直交変換部214と同様の処理(逆直交変換)を行う。
逆直交変換部214は、導出した予測残差D'を演算部215に供給する。
<演算部>
演算部215は、画像に関する情報の加算に関する処理を行う。例えば、演算部215は、逆直交変換部214から供給される予測残差D'と、予測部219から供給される予測画像Pとを入力とする。演算部215は、以下の式(8)に示されるように、予測残差D'とその予測残差D'に対応する予測画像P(予測信号)とを加算し、局所復号画像Rlocalを導出する。
演算部215は、導出した局所復号画像Rlocalを、インループフィルタ部216およびフレームメモリ218に供給する。
<インループフィルタ部>
インループフィルタ部216は、インループフィルタ処理に関する処理を行う。例えば、インループフィルタ部216は、演算部215から供給される局所復号画像Rlocalと、復号部212から供給されるフィルタ情報Finfoとを入力とする。なお、インループフィルタ部216に入力される情報は任意であり、これらの情報以外の情報が入力されてもよい。
インループフィルタ部216は、そのフィルタ情報Finfoに基づいて、局所復号画像Rlocalに対して適宜フィルタ処理を行う。
例えば、インループフィルタ部216は、非特許文献1に記載のように、バイラテラルフィルタ、デブロッキングフィルタ(DBF(DeBlocking Filter))、適応オフセットフィルタ(SAO(Sample Adaptive Offset))、および適応ループフィルタ(ALF(Adaptive Loop Filter))の4つのインループフィルタをこの順に適用する。なお、どのフィルタを適用するか、どの順で適用するかは任意であり、適宜選択可能である。
インループフィルタ部216は、符号化側(例えば画像符号化装置100のインループフィルタ部120)により行われたフィルタ処理に対応するフィルタ処理を行う。もちろん、インループフィルタ部216が行うフィルタ処理は任意であり、上述の例に限定されない。例えば、インループフィルタ部216がウィーナーフィルタ等を適用するようにしてもよい。
インループフィルタ部216は、フィルタ処理された局所復号画像Rlocalを並べ替えバッファ217およびフレームメモリ218に供給する。
<並べ替えバッファ>
並べ替えバッファ217は、インループフィルタ部216から供給された局所復号画像Rlocalを入力とし、それを保持(記憶)する。並べ替えバッファ217は、その局所復号画像Rlocalを用いてピクチャ単位毎の復号画像Rを再構築し、保持する(バッファ内に格納する)。並べ替えバッファ217は、得られた復号画像Rを、復号順から再生順に並べ替える。並べ替えバッファ217は、並べ替えた復号画像R群を動画像データとして画像復号装置200の外部に出力する。
<フレームメモリ>
フレームメモリ218は、画像に関するデータの記憶に関する処理を行う。例えば、フレームメモリ218は、演算部215より供給される局所復号画像Rlocalを入力とし、ピクチャ単位毎の復号画像Rを再構築して、フレームメモリ218内のバッファへ格納する。
また、フレームメモリ218は、インループフィルタ部216から供給される、インループフィルタ処理された局所復号画像Rlocalを入力とし、ピクチャ単位毎の復号画像Rを再構築して、フレームメモリ218内のバッファへ格納する。フレームメモリ218は、適宜、その記憶している復号画像R(またはその一部)を参照画像として予測部219に供給する。
なお、フレームメモリ218が、復号画像の生成に係るヘッダ情報Hinfo、予測モード情報Pinfo、変換情報Tinfo、フィルタ情報Finfoなどを記憶するようにしても良い。
<予測部>
予測部219は、予測画像の生成に関する処理を行う。例えば、予測部219は、復号部212から供給される予測モード情報Pinfoを入力とし、その予測モード情報Pinfoによって指定される予測方法により予測を行い、予測画像Pを導出する。その導出の際、予測部219は、その予測モード情報Pinfoによって指定される、フレームメモリ218に格納されたフィルタ前またはフィルタ後の復号画像R(またはその一部)を、参照画像として利用する。予測部219は、導出した予測画像Pを、演算部215に供給する。
以上のような構成の画像復号装置200において、逆直交変換部214は、導出部および逆直交変換部として、上述した本技術を適用した処理を行う。また、復号部212は、復号部として、上述した本技術を適用した処理を行う。したがって、画像復号装置200は、逆直交変換に必要なメモリ容量の増大を抑制することができる。
<逆直交変換部の詳細>
図16は、図15の逆直交変換部214の主な構成例を示すブロック図である。図16に示されるように、逆直交変換部214は、スイッチ251、逆セカンダリ変換部252、および逆プライマリ変換部253を有する。
スイッチ251は、変換係数Coeff_IQ、および変換スキップフラグts_flag[compID]を入力とする。変換スキップフラグts_flag[compID]の値がNO_TS(=0)の場合、すなわち、変換スキップを適用しない場合、スイッチ251は、変換係数Coeff_IQを、逆セカンダリ変換部252に供給する。また、変換スキップフラグts_flag[compID]の値が2D_TS(=1)の場合、すなわち、2次元変換スキップを適用することを示す場合、スイッチ251は、逆セカンダリ変換部252および逆プライマリ変換部253をスキップし、変換係数Coeff_IQを予測残差D'として逆直交変換部214の外部に出力する(演算部215に供給する)。
逆セカンダリ変換部252は、符号化側(例えば、画像符号化装置100のセカンダリ変換部153)において行われるセカンダリ変換の逆処理である逆セカンダリ変換に関する処理を行う。例えば、逆セカンダリ変換部252は、セカンダリ変換識別子st_idx、変換係数のスキャン方法を示すスキャン識別子scanIdx、および、スイッチ251から供給される変換係数Coeff_IQを入力とする。
逆セカンダリ変換部252は、セカンダリ変換識別子st_idxおよびスキャン識別子scanIdxに基づいて、変換係数Coeff_IQに対して逆セカンダリ変換を行い、逆セカンダリ変換後の変換係数Coeff_ISを導出する。
より具体的には、セカンダリ変換識別子st_idxが、逆セカンダリ変換を適用することを示す場合(st_idx>0)、逆セカンダリ変換部252は、変換係数Coeff_IQに対して、セカンダリ変換識別子st_idxに対応する逆セカンダリ変換の処理を実行し、逆セカンダリ変換後の変換係数Coeff_ISを導出する。逆セカンダリ変換部252は、その逆セカンダリ変換後の変換係数Coeff_ISを逆プライマリ変換部253に供給する。
なお、セカンダリ変換識別子st_idxが、逆セカンダリ変換を適用しないことを示す場合(st_idx==0)、逆セカンダリ変換部252は、逆セカンダリ変換をスキップし、変換係数Coeff_IQを逆セカンダリ変換後の変換係数Coeff_ISとして逆プライマリ変換部253に供給する。
逆プライマリ変換部253は、符号化側(例えば、画像符号化装置100のプライマリ変換部152)において行われるプライマリ変換の逆処理である逆プライマリ変換に関する処理を行う。例えば、逆プライマリ変換部253は、コンポーネント識別子compID、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]、コンポーネント識別子compIDのプライマリ変換識別子pt_idx[compID]、予測モード情報PInfo、変換ブロックのサイズ(横幅の対数値log2TBWSize, 縦幅の対数値log2TBHSize)および逆セカンダリ変換後の変換係数Coeff_ISを入力とする。
逆プライマリ変換部253は、その予測モード情報PInfo、コンポーネント識別子compID、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]、およびコンポーネント識別子compIDのプライマリ変換識別子pt_idx[compID]を参照して、コンポーネント識別子compIDに対応する逆プライマリ水平変換の変換タイプTrTypeH(および該変換タイプを示す逆プライマリ水平変換タイプ識別子TrTypeIdxH)、および逆プライマリ垂直変換の変換タイプTrTypeV(および該変換タイプを示す逆プライマリ垂直変換タイプ識別子TrTypeIdxV)を選択する。
また、逆プライマリ変換部253は、逆セカンダリ後の変換係数Coeff_ISに対して、その逆プライマリ垂直変換タイプ識別子TrTypeIdxV(または、逆プライマリ垂直変換タイプTrTypeV)と変換ブロックの縦幅log2TBHSizeとで定まる逆プライマリ垂直変換と、逆プライマリ水平変換タイプ識別子TrTypeIdxH(または、逆プライマリ水平変換タイプTrTypeH)と変換ブロックの横幅log2TBWSizeとで定まる逆プライマリ水平変換とを行い、逆プライマリ変換後の変換係数Coeff_IPを導出する。逆プライマリ垂直変換は、垂直方向の逆1次元直交変換であり、逆プライマリ水平変換は、水平方向の逆1次元直交変換である。
逆プライマリ変換部253は、その逆プライマリ変換後の変換係数Coeff_IPを、予測残差D'として逆直交変換部214の外部に出力する(演算部215に供給する)。
以上のような構成の逆直交変換部214において、逆プライマリ変換部253は、導出部および逆直交変換部として、上述した本技術を適用した処理を行う。つまり、導出部は、第1の変換行列を用いて第2の変換行列を導出し、逆直交変換部は、その導出部により導出された第2の変換行列を用いて、逆セカンダリ変換結果に対して逆プライマリ変換を行う。したがって、このような逆プライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、上述のように逆プライマリ変換部253は、逆プライマリ変換として、逆プライマリ垂直変換と逆プライマリ水平変換とを行う。つまり、導出部は、垂直方向の逆1次元直交変換用の第2の変換行列と、水平方向の逆1次元直交変換用の第2の変換行列とを導出し、逆直交変換部は、逆プライマリ変換として、導出部により導出された垂直方向の逆1次元直交変換用の第2の変換行列を用いて、垂直方向の逆1次元直交変換を行い、さらに、導出部により導出された水平方向の逆1次元直交変換用の第2の変換行列を用いて、水平方向の逆1次元直交変換を行う。したがって、このような、垂直方向の逆1次元直交変換および水平方向の逆1次元直交変換が行われるプライマリ変換に必要なメモリ容量の増大を抑制することができる。
<画像復号処理の流れ>
次に、以上のような画像復号装置200により実行される各処理の流れについて説明する。最初に、図17のフローチャートを参照して、画像復号処理の流れの例を説明する。
画像復号処理が開始されると、蓄積バッファ211は、ステップS201において、画像復号装置200の外部から供給される符号化データ(ビットストリーム)を取得して保持する(蓄積する)。
ステップS202において、復号部212は、その符号化データ(ビットストリーム)を復号し、量子化変換係数レベルlevelを得る。また、復号部212は、この復号により、符号化データ(ビットストリーム)から各種符号化パラメータをパースする(解析して取得する)。
ステップS203において、逆量子化部213は、ステップS202の処理により得られた量子化変換係数レベルlevelに対して、符号化側で行われた量子化の逆処理である逆量子化を行い、変換係数Coeff_IQを得る。
ステップS204において、逆直交変換部214は、ステップS203の処理により得られた変換係数Coeff_IQに対して、符号化側で行われた直交変換処理の逆処理である逆直交変換処理を行い、予測残差D'を得る。
ステップS205において、予測部219は、ステップS202においてパースされた情報に基づいて、符号化側より指定される予測方法で予測処理を実行し、フレームメモリ218に記憶されている参照画像を参照する等して、予測画像Pを生成する。
ステップS206において、演算部215は、ステップS204の処理により得られた予測残差D'と、ステップS205の処理により得られた予測画像Pとを加算し、局所復号画像Rlocalを導出する。
ステップS207において、インループフィルタ部216は、ステップS206の処理により得られた局所復号画像Rlocalに対して、インループフィルタ処理を行う。
ステップS208において、並べ替えバッファ217は、ステップS207の処理により得られたフィルタ処理された局所復号画像Rlocalを用いて復号画像Rを導出し、その復号画像R群の順序を復号順から再生順に並べ替える。再生順に並べ替えられた復号画像R群は、動画像として画像復号装置200の外部に出力される。
また、ステップS209において、フレームメモリ218は、ステップS206の処理により得られた局所復号画像Rlocal、および、ステップS207の処理により得られたフィルタ処理後の局所復号画像Rlocalの内、少なくとも一方を記憶する。
ステップS209の処理が終了すると、画像復号処理が終了する。
以上のような流れの画像復号処理において、ステップS202の処理として、上述した本技術を適用した処理が行われる。また、ステップS204の処理として、上述した本技術を適用した処理が行われる。したがって、この画像復号処理を実行することにより、逆直交変換に必要なメモリ容量の増大を抑制することができる。
<逆直交変換の処理の流れ>
次に、図17のステップS204において実行される逆直交変換処理の流れの例を、図18のフローチャートを参照して説明する。逆直交変換処理が開始されると、スイッチ251は、ステップS231において、変換スキップフラグts_flagが2D_TS(2次元変換スキップのモード)(例えば1(真))である、または、変換量子化バイパスフラグtransquant_bypass_flagが1(真)である、か否かを判定する。変換スキップ識別子ts_idxが2D_TSである、または、変換量子化バイパスフラグが1(真)であると判定された場合、逆直交変換処理が終了し、処理は図17に戻る。この場合、逆直交変換処理(逆プライマリ変換や逆セカンダリ変換)が省略され、変換係数Coeff_IQが予測残差D'とされる。
また、ステップS231において、変換スキップ識別子ts_idxが2D_TSでない(2次元変換スキップ以外のモード)(例えば0(偽))であり、かつ、変換量子化バイパスフラグが0(偽)である、と判定された場合、処理はステップS232に進む。この場合、逆セカンダリ変換処理および逆プライマリ変換処理が行われる。
ステップS232において、逆セカンダリ変換部252は、変換係数Coeff_IQに対して、セカンダリ変換識別子st_idxに基づいて逆セカンダリ変換処理を行い、変換係数Coeff_ISを導出し、出力する。
ステップS233において、逆プライマリ変換部253は、変換係数Coeff_ISに対して逆プライマリ変換処理を行い、逆プライマリ変換後の変換係数Coeff_IP(予測残差D')を導出する。
ステップS233の処理が終了すると逆直交変換処理が終了する。
以上のような逆直交変換処理において、ステップS233の処理として、上述した本技術を適用した処理が行われる。したがって、この逆直交変換処理を実行することにより、逆プライマリ変換処理に必要なメモリ容量の増大を抑制することができる。
<2-2.実施例1-1>
<コンセプト>
次に、図10を参照して説明した各導出例について、より詳細に説明する。最初に、図10に示される表において、最上段の項目名の行を除き、上から1段目の例と2段目の例について説明する。
上述したように、上から1段目の例の導出は、第1の変換タイプの最低次行ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。この場合、導出部は、第1の変換行列をフリップして、第2の変換行列を導出する。つまり、導出部は、図19に示されるように、DST7の変換行列をベース変換行列Tbaseとし、それを行方向にフリップしてFlipDST7の変換行列を導出する。このFlipDST7の変換行列により、0次の行ベクトルの波形が類似する(減少型の)DCT8の変換行列を代替することができる。
この導出の具体的な例を図20の上側に示す。図20の上側に示されるように、この導出は、ベース変換行列Tbase(DST7)とフリップ行列Jとの行列積によって表すことができる。ここでフリップ行列J(Cross-Identity Matrixとも称する)は、N×Nの単位行列Iを左右反転したものである。
また、上から2段目の例の導出は、第1の変換タイプの最低次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。この場合、導出部は、第1の変換行列を転置して、第2の変換行列を導出する。つまり、導出部は、図19に示されるように、DST7の変換行列をベース変換行列Tbaseとし、それを転置してTrDST7の変換行列を導出する。このTrDST7の変換行列により、0次の行ベクトルの波形が類似する(山型の)DST1の変換行列を代替することができる。
この導出の具体的な例を図20の下側に示す。図20の下側に示されるように、この導出は、ベース変換行列Tbase(DST7)の転置によって表すことができる。
つまり、以上の2つの導出例はいずれも、1回の操作(フリップまたは転置)で第2の変換行列を導出することができる。また、その操作も容易である。つまり、容易に第2の変換行列を導出することができる。
また、以上の2つの導出例を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列およびDST1の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。
この場合、図21の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を3種類に低減させることができるので、LUTサイズの合計は約40KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
なお、上述したように、この場合も、導出された第2の変換タイプ(TrDST7やFlipDST7)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST1の変換行列やDCT8の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。
<プライマリ変換部>
次に、このような導出を行うための構成や処理等について説明する。図22は、この場合のプライマリ変換部152の主な構成例を示すブロック図である。図22に示されるように、プライマリ変換部152は、プライマリ変換選択部311、プライマリ水平変換部312、およびプライマリ垂直変換部313を有する。
プライマリ変換選択部311は、予測モード情報PInfo、コンポーネント識別子compID、適応プライマリ変換フラグapt_flag[compID]、およびプライマリ変換識別子pt_idx[compID]を入力とする。プライマリ変換選択部311は、それらの情報を参照して、プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよびプライマリ垂直変換の変換タイプ識別子TrTypeIdxVを導出する。プライマリ変換選択部311は、導出したプライマリ水平変換の変換タイプ識別子TrTypeIdxHをプライマリ水平変換部312に供給する。また、プライマリ変換選択部311は、導出したプライマリ垂直変換の変換タイプ識別子TrTypeIdxVをプライマリ垂直変換部313に供給する。
プライマリ水平変換部312は、予測残差D、プライマリ水平変換の変換タイプ識別子TrTypeIdxH、および変換ブロックのサイズに関する情報(図示せず)を入力とする。この変換ブロックのサイズに関する情報は、変換ブロックの水平方向または垂直方向の大きさ(係数の数)を示す自然数Nであってもよいし、変換ブロックの横幅を示すlog2TBWSize(横幅の対数値)であってもよい(N = 1 << log2TBWSize)。プライマリ水平変換部312は、予測残差Dに対して、変換タイプ識別子TrTypeIdxHと変換ブロックのサイズで定まるプライマリ水平変換Phorを実行し、プライマリ水平変換後の変換係数Coeff_Phorを導出する。プライマリ水平変換部312は、そのプライマリ水平変換後の変換係数Coeff_Phorをプライマリ垂直変換部313に供給する。
プライマリ垂直変換部313は、プライマリ水平変換後の変換係数Coeff_Phor、プライマリ垂直変換の変換タイプ識別子TrTypeIdxV、および変換ブロックのサイズに関する情報(図示せず)を入力とする。この変換ブロックのサイズに関する情報は、変換ブロックの水平方向または垂直方向の大きさ(係数の数)を示す自然数Nであってもよいし、変換ブロックの縦幅を示すlog2TBHSize(縦幅の対数値)であってもよい(N = 1 << log2TBHSize)。プライマリ垂直変換部313は、プライマリ水平変換後の変換係数Coeff_Phorに対して、変換タイプ識別子TrTypeIdxVと変換ブロックのサイズで定まるプライマリ垂直変換Pverを実行し、そのプライマリ垂直変換後の変換係数Coeff_Pverを導出する。プライマリ垂直変換部313は、そのプライマリ垂直変換後の変換係数Coeff_Pverを、プライマリ変換後の変換係数Coeff_Pとして、プライマリ変換部152の外部に出力する(セカンダリ変換部153に供給する)。
以上のような構成のプライマリ変換部152において、プライマリ水平変換部312およびプライマリ垂直変換部313は、それぞれ、導出部および直交変換部として、上述した本技術を適用した処理を行う。
つまり、プライマリ水平変換部312は、導出部として、水平方向の1次元直交変換用の第2の変換行列を導出し、さらに、直交変換部として、その導出部により導出された水平方向の1次元直交変換用の第2の変換行列を用いて、水平方向の1次元直交変換を行う。したがって、プライマリ水平変換部312は、水平方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
また、プライマリ垂直変換部313は、導出部として、垂直方向の1次元直交変換用の第2の変換行列を導出し、さらに、直交変換部として、その導出部により導出された垂直方向の1次元直交変換用の第2の変換行列を用いて、垂直方向の1次元直交変換を行う。したがって、プライマリ垂直変換部313は、垂直方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<プライマリ水平変換部>
図23は、図22のプライマリ水平変換部312の主な構成例を示すブロック図である。図23に示されるように、プライマリ水平変換部312は、変換行列導出部321、行列演算部322、スケーリング部323、およびクリップ部324を有する。
変換行列導出部321は、プライマリ水平変換の変換タイプ識別子TrTypeIdxHと、変換ブロックのサイズに関する情報を入力とし、そのプライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する、変換ブロックと同サイズの、プライマリ水平変換用の変換行列TH(水平方向の1次元直交変換用の変換行列TH)を導出する。変換行列導出部321は、その変換行列THを行列演算部322に供給する。
行列演算部322は、その変換行列導出部321から供給される変換行列THを用いて、入力データXin(すなわち予測残差Dの変換ブロック)に対する水平方向の1次元直交変換を行い、中間データY1を得る。この演算は以下の式(9)のように行列式で表すことができる。
行列演算部322は、その中間データY1をスケーリング部323に供給する。
スケーリング部323は、その中間データY1の各i行j列成分の係数Y1[i,j]を所定のシフト量SHでスケーリングし、中間データY2を得る。このスケーリングは、以下の式(10)のように表すことができる。以降、ある2次元行列(2次元配列)Xのi行j列成分((i,j)成分)をX[i,j]と表記する。
スケーリング部323は、その中間データY2をクリップ部324に供給する。
クリップ部324は、その中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、プライマリ水平変換後の変換係数Coeff_Phor)を導出する。この処理は、以下の式(11)のように表すことができる。
クリップ部324は、その出力データXout(プライマリ水平変換後の変換係数Coeff_Phor)をプライマリ水平変換部312の外部に出力する(プライマリ垂直変換部313に供給する)。
以上のような構成のプライマリ水平変換部312において、変換行列導出部321は、導出部として、上述した本技術を適用した処理を行う。また、行列演算部322は、直交変換部として、上述した本技術を適用した処理を行う。したがって、プライマリ水平変換部312は、水平方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列導出部>
図24は、図23の変換行列導出部321の主な構成例を示すブロック図である。図24に示されるように、変換行列導出部321は、変換行列LUT331、フリップ部332、および転置部333を有する。なお、図24においては、データの授受を示す矢印を省略しているが、変換行列導出部321は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT331は、プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよび変換ブロックのサイズNに対応する変換行列を保持(格納)するためのルックアップテーブルである。変換行列LUT331は、プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよび変換ブロックのサイズNが指定されると、それらに対応する変換行列を選択し、出力する。この導出例の場合、変換行列LUT331は、その変換行列をベース変換行列Tbaseとしてフリップ部332若しくは転置部333、または両方に供給する。
フリップ部332は、入力されるN行N列の変換行列Tをフリップし、フリップ後の変換行列Tflipを出力する。この導出例の場合、フリップ部332は、変換行列LUT331から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを行方向(水平方向)にフリップして、フリップ後の変換行列Tflipを、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
転置部333は、入力されるN行N列の変換行列Tを転置し、転置後の変換行列Ttransposeを出力する。この導出例の場合、転置部333は、変換行列LUT331から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを転置して、転置後の変換行列Ttransposeを、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
以上のように、変換行列導出部321は、フリップ部332や転置部333を有する。したがって、変換行列導出部321は、例えば、フリップ部332を用いて、図10に示される表の上から1段目の例の導出例を実現することができる。また、変換行列導出部321は、例えば、転置部333を用いて、図10に示される表の上から2段目の例の導出例を実現することができる。
<プライマリ垂直変換部>
図25は、図22のプライマリ垂直変換部313の主な構成例を示すブロック図である。図25に示されるように、プライマリ垂直変換部313は、変換行列導出部351、行列演算部352、スケーリング部353、およびクリップ部354を有する。
変換行列導出部351は、プライマリ垂直変換の変換タイプ識別子TrTypeIdxVと、変換ブロックのサイズに関する情報を入力とし、そのプライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する、変換ブロックと同サイズの、プライマリ垂直変換用の変換行列TV(垂直方向の1次元直交変換用の変換行列TV)を導出する。変換行列導出部351は、その変換行列TVを行列演算部352に供給する。
行列演算部352は、その変換行列導出部351から供給される変換行列TVを用いて、入力データXin(すなわちプライマリ水平変換後の変換係数Coeff_Phorの変換ブロック)に対する垂直方向の1次元直交変換を行い、中間データY1を得る。この演算は以下の式(12)のように行列式で表すことができる。
行列演算部352は、その中間データY1をスケーリング部353に供給する。
スケーリング部353は、その中間データY1の各i行j列成分の係数Y1[i,j]を所定のシフト量SVでスケーリングし、中間データY2を得る。このスケーリングは、以下の式(13)のように表すことができる。
スケーリング部353は、その中間データY2をクリップ部354に供給する。
クリップ部354は、その中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、プライマリ垂直変換後の変換係数Coeff_Pver)を導出する。この処理は、以下の式(14)のように表すことができる。
クリップ部324は、その出力データXout(プライマリ垂直変換後の変換係数Coeff_Pver)を、プライマリ変換後の変換係数Coeff_Pとして、プライマリ垂直変換部313の外部に出力する(セカンダリ変換部153に供給する)。
以上のような構成のプライマリ垂直変換部313において、変換行列導出部351は、導出部として、上述した本技術を適用した処理を行う。また、行列演算部352は、直交変換部として、上述した本技術を適用した処理を行う。したがって、プライマリ垂直変換部313は、垂直方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列導出部>
図26は、図25の変換行列導出部351の主な構成例を示すブロック図である。図26に示されるように、変換行列導出部351は、変換行列LUT361、フリップ部362、および転置部363を有する。なお、図26においては、データの授受を示す矢印を省略しているが、変換行列導出部351は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT361は、プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび変換ブロックのサイズNに対応する変換行列を保持(格納)するためのルックアップテーブルである。変換行列LUT361は、プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび変換ブロックのサイズNが指定されると、それらに対応する変換行列を選択し、出力する。この導出例の場合、変換行列LUT361は、その変換行列をベース変換行列Tbaseとしてフリップ部362若しくは転置部363、または両方に供給する。
フリップ部362は、入力されるN行N列の変換行列Tをフリップし、フリップ後の変換行列Tflipを出力する。この導出例の場合、フリップ部362は、変換行列LUT361から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを行方向(水平方向)にフリップして、フリップ後の変換行列Tflipを、変換行列TVとして、変換行列導出部351の外部に出力する(行列演算部352に供給する)。
転置部363は、入力されるN行N列の変換行列Tを転置し、転置後の変換行列Ttransposeを出力する。この導出例の場合、転置部363は、変換行列LUT361から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを転置して、転置後の変換行列Ttransposeを、変換行列TVとして、変換行列導出部351の外部に出力する(行列演算部352に供給する)。
以上のように、変換行列導出部351は、フリップ部362や転置部363を有する。したがって、変換行列導出部351は、例えば、フリップ部362を用いて、図10に示される表の上から1段目の例の導出例を実現することができる。また、変換行列導出部351は、例えば、転置部363を用いて、図10に示される表の上から2段目の例の導出例を実現することができる。
<プライマリ変換処理の流れ>
次に、上述した構成により行われる処理の流れの例等について説明する。この場合の、図14のステップS132において実行されるプライマリ変換処理の流れの例を、図27のフローチャートを参照して説明する。
プライマリ変換処理が開始されると、プライマリ変換部152のプライマリ変換選択部311(図22)は、ステップS301において、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(および該識別子で指定される変換タイプTrTypeH)と、プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(および該識別子で指定される変換タイプTrTypeV)とを、それぞれ、上述したように選択する。
ステップS302において、プライマリ水平変換部312は、ステップS301において得られたプライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応するプライマリ水平変換処理を予測残差Dに対して行い、プライマリ水平変換後の変換係数Coeff_Phorを導出する。
ステップS303において、プライマリ垂直変換部313は、ステップS301において得られたプライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応するプライマリ垂直変換処理をプライマリ水平変換結果(プライマリ水平変換後の変換係数Coeff_Phor)に対して行い、プライマリ垂直変換後の変換係数Coeff_Pver(プライマリ変換後の変換係数Coeff_P)を導出する。
ステップS303の処理が終了すると、プライマリ変換処理が終了し、処理は図14に戻る。
以上のようなプライマリ変換処理において、ステップS302やステップS303の処理として、上述した本技術を適用した処理が行われる。したがって、このプライマリ変換処理を実行することにより、プライマリ水平変換処理やプライマリ垂直変換処理に必要なメモリ容量の増大を抑制することができる。
<プライマリ水平変換処理の流れ>
図27のステップS302において実行されるプライマリ水平変換処理の流れについて、図28のフローチャートを参照して説明する。
プライマリ水平変換処理が開始されると、プライマリ水平変換部312の変換行列導出部321(図23)は、ステップS321において、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または、変換タイプTrTypeH)に対応する変換行列THを導出する。
ステップS322において、行列演算部322は、その導出された変換行列THを用いて入力データXin(予測残差D)に対して水平方向の1次元直交変換を行い、中間データY1を得る。この処理を行列式として表現すると、上述の式(9)のように表すことができる。また、この処理を要素毎の演算として表現すると、以下の式(15)のように表すことができる。
つまり、図29に示されるように、中間データY1のi行j列成分の係数Y1[i,j]には、入力データXinのi行目の行ベクトルXin[i,:]と、変換行列THのj行目の行ベクトルTH[j,:]の転置行列TH
T[:,j]との内積を設定する(j=0,・・・,M-1, i=0,・・・,N-1)。ここで、Mは、入力データXinのx方向のサイズであり、Nは、入力データXinのy方向のサイズである。MおよびNは、以下の式(16)のように表すことができる。
図28に戻り、ステップS323において、スケーリング部323は、ステップS322の処理により導出された中間データY1の各i行j列成分の係数Y1[i,j]をシフト量SHでスケーリングし、中間データY2を導出する。このスケーリングは、上述の式(10)のように表すことができる。
ステップS324において、クリップ部324は、ステップS323の処理により導出された中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、プライマリ水平変換後の変換係数Coeff_Phor)を得る。この処理は、上述の式(11)のように表すことができる。
ステップS324の処理が終了すると、プライマリ水平変換処理が終了し、処理は図27に戻る。
以上のようなプライマリ水平変換処理において、ステップS321やステップS322の処理として、上述した本技術を適用した処理が行われる。したがって、このプライマリ水平変換処理を実行することにより、水平方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列導出処理の流れ>
次に、図28のステップS321において実行される変換行列導出処理の流れの例を、図30のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS341において、変換タイプ識別子TrTypeIdxHに対応するベース変換タイプBaseTrTypeを、例えば、図31に示されるような対応表を参照して求める。なお、この処理を数式で表すと、例えば式(17)のように表現することができる。さらに、その求めたベース変換タイプのN行N列の変換行列を変換行列LUTより読み出し、以下の式(18)のように、それをベース変換行列Tbaseに設定する。
また、変換行列導出部321は、以下の式(19)のように、フリップフラグFlipFlagに、変換タイプ識別子TrTypeIdxHに対応する値を設定する。また、変換行列導出部321は、以下の式(20)のように、転置フラグTransposeFlagに、変換タイプ識別子TrTypeIdxHに対応する値を設定する。
ステップS342において、変換行列導出部321は、フリップフラグFlipFlagと転置フラグTransposeFlagとが以下の式(21)で表される条件(ConditionA1)を満たすか否かを判定する。
上述の条件(ConditionA1)を満たすと判定された場合(フリップフラグFlipFlagと転置フラグTransposeFlagとがともに偽(0)の場合)、処理はステップS343に進む。
ステップS343において、変換行列導出部321は、以下の式(22)に示されるように、ベース変換行列Tbaseを変換行列THへ設定する。
ステップS343の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。また、ステップS342において、上述の条件(ConditionA1)を満たさないと判定された場合(フリップフラグFlipFlagまたは転置フラグTransposeFlagが真(1)の場合)、処理はステップS344に進む。
ステップS344において、変換行列導出部321は、フリップフラグFlipFlagと転置フラグTransposeFlagとが以下の式(23)で表される条件(ConditionA2)を満たすか否かを判定する。
上述の条件(ConditionA2)を満たすと判定された場合(フリップフラグFlipFlagが偽(0)であり、かつ、転置フラグTransposeFlagが真(1)である場合)、処理はステップS345に進む。
ステップS345において、変換行列導出部321は、転置部333を介して、ベース変換行列Tbaseを転置して、変換行列THを得る。この処理は、以下の式(24)のように、行列式として表現することができる。
また、この処理を要素毎の演算として表現する場合、変換行列導出部321は、以下の式(25)のように、ベース変換行列Tbaseのi行j列成分((i,j)成分)を変換行列THの(j,i)成分に設定する。
ここで、N行N列の変換行列THのi行j列成分((i,j)成分)をTH[i,j]と表記する。また、2行目の「for i,j=0,...,N-1」は、iとjとが0乃至N-1の値を持つことを示す。つまり、TH[j,i]がN行N列の変換行列THの全ての要素を示すことを意味する。
このように、ステップS345の処理を、要素毎の演算として表現することにより、簡単な2次元配列へのアクセスで、転置操作を実現することできる。ステップS345の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
また、ステップS344において、上述の条件(ConditionA2)を満たさないと判定された場合(フリップフラグFlipFlagが真(1)である、または、転置フラグTransposeFlagが偽(0)である場合)、処理はステップS346に進む。
ステップS346において、変換行列導出部321は、フリップ部332を介して、ベース変換行列Tbaseをフリップして、変換行列THを得る。この処理は、以下の式(26)のように、行列式として表現することができる。
ここで、×は行列積を表す演算子である。また、フリップ行列J(Cross-Identity Matrix)は、N行N列の単位行列Iを左右反転したものである。
また、この処理を要素毎の演算として表現する場合、変換行列導出部321は、以下の式(27)のように、変換行列THのi行j列成分((i,j)成分)に、ベース変換行列Tbaseの(i, N-1-j)成分を設定する。
ここで、N行N列の変換行列THのi行j列成分((i,j)成分)をTH[i,j]と表記する。また2行目の「for i,j=0,...,N-1」は、iとjがそれぞれ0乃至N-1の値を持つことを示す。すなわち、TH[i,j]がN行N列の変換行列THの全ての要素を示すことを意味する。
このように、ステップS346の処理を、要素毎の演算として表現することにより、ベース変換行列Tbaseとフリップ行列Jとの行列演算をせずに、簡単な2次元配列へのアクセスで、転置操作を実現することできる。また、フリップ行列Jが不要になる。ステップS346の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
以上のような変換行列導出処理において、ステップS345やステップS346の処理として、上述した本技術を適用した処理が行われる。したがって、この変換行列導出処理を実行することにより、水平方向の1次元直交変換において、図10に示される表の上から1段目や2段目の例の導出例を実現することができる。したがって、必要なメモリ容量の増大を抑制することができる。
なお、ステップS344の処理とステップS346の処理との間に、以下に説明するような分岐をいれてもよい。つまり、そのステップにおいて、変換行列導出部321は、フリップフラグFlipFlagと転置フラグTransposeFlagとが以下の式(28)で表される条件(ConditionA3)を満たすか否かを判定する。
変換行列導出部321は、上述の条件(ConditionA3)を満たすと判定された場合(フリップフラグFlipFlagが真(1)であり、かつ、転置フラグTransposeFlagが偽(0)である場合)、処理はステップS346に進む。
また、上述の条件(ConditionA3)を満たさないと判定された場合(フリップフラグFlipFlagが偽(0)であるか、または、転置フラグTransposeFlagが真(1)である場合)、変換行列導出処理が終了し、処理は図28に戻る。
<プライマリ垂直変換処理の流れ>
次に、図27のステップS303において実行されるプライマリ垂直変換処理の流れについて、図32のフローチャートを参照して説明する。
プライマリ垂直変換処理が開始されると、プライマリ垂直変換部313の変換行列導出部351(図25)は、ステップS361において、変換行列導出処理を実行し、プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)に対応する変換行列TVを導出する。
この変換行列導出処理の流れは、図30のフローチャートを参照して説明したプライマリ水平変換の場合と同様であるのでその説明を省略する。例えば、プライマリ水平変換の変換タイプ識別子TrTypeIdxHをプライマリ垂直変換の変換タイプ識別子TrTypeIdxVに置き換えたり、導出されるプライマリ水平変換用の変換行列THを、プライマリ垂直変換用の変換行列TVに置き換えたりする等、図30を参照して行った説明の、水平方向に関する説明を垂直方向に置き換えればよい。
ステップS362において、行列演算部352は、その導出された変換行列TVを用いて入力データXin(プライマリ水平変換後の変換係数Coeff_Phor)に対して垂直方向の1次元直交変換を行い、中間データY1を得る。この処理を行列式として表現すると、上述の式(12)のように表すことができる。また、この処理を要素毎の演算として表現すると、以下の式(29)のように表すことができる。
つまり、この場合、図33に示されるように、中間データY1のi行j列成分の係数Y1[i,j]には、変換行列TVのi行目の行ベクトルTV[i,:]と入力データXinのj列目の列ベクトルXin[:,j]との内積を設定する(j=0,・・・,M-1, i=0,・・・,N-1)。
ステップS363において、スケーリング部353は、ステップS322の処理により導出された中間データY1の各i行j列成分の係数Y1[i,j]をシフト量SVでスケーリングし、中間データY2を導出する。このスケーリングは、上述の式(13)のように表すことができる。
ステップS364において、クリップ部354は、ステップS363の処理により導出された中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、プライマリ垂直変換後の変換係数Coeff_Pver)を得る。この処理は、上述の式(14)のように表すことができる。
ステップS364の処理が終了すると、プライマリ水平変換処理が終了し、処理は図27に戻る。
以上のようなプライマリ垂直変換処理において、ステップS361やステップS362の処理として、上述した本技術を適用した処理が行われる。したがって、このプライマリ垂直変換処理を実行することにより、垂直方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<逆プライマリ変換部>
次に、本実施例の場合の画像復号装置200の構成について説明する。図34は、この場合の逆プライマリ変換部253(図16)の主な構成例を示すブロック図である。図34に示されるように、逆プライマリ変換部253は、逆プライマリ変換選択部411、逆プライマリ垂直変換部412、および逆プライマリ水平変換部413を有する。
逆プライマリ変換選択部411は、予測モード情報PInfo、コンポーネント識別子compID、適応プライマリ変換フラグapt_flag[compID]、およびプライマリ変換識別子pt_idx[compID]を入力とする。逆プライマリ変換選択部411は、それらの情報を参照して、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxHを導出する。逆プライマリ変換選択部411は、導出した逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVを逆プライマリ垂直変換部412に供給する。また、逆プライマリ変換選択部411は、導出した逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHを逆プライマリ水平変換部413に供給する。
逆プライマリ垂直変換部412は、逆セカンダリ変換後の変換係数Coeff_IS、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxV、および変換ブロックのサイズに関する情報を入力とする。この変換ブロックのサイズに関する情報は、変換ブロックの水平方向または垂直方向の大きさ(係数の数)を示す自然数Nであってもよいし、変換ブロックの縦幅を示すlog2TBHSize(縦幅の対数値)であってもよい(N = 1 << log2TBHSize)。逆プライマリ垂直変換部412は、逆セカンダリ変換後の変換係数Coeff_ISに対して、変換タイプ識別子TrTypeIdxVと変換ブロックのサイズで定まる逆プライマリ垂直変換IPverを実行し、逆プライマリ垂直変換後の変換係数Coeff_IPverを導出する。逆プライマリ垂直変換部412は、その逆プライマリ垂直変換後の変換係数Coeff_IPverを逆プライマリ水平変換部413に供給する。
逆プライマリ水平変換部413は、逆プライマリ垂直変換後の変換係数Coeff_IPver、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxH、および変換ブロックのサイズに関する情報を入力とする。この変換ブロックのサイズに関する情報は、変換ブロックの水平方向または垂直方向の大きさ(係数の数)を示す自然数Nであってもよいし、変換ブロックの横幅を示すlog2TBWSize(横幅の対数値)であってもよい(N = 1 << log2TBWSize)。逆プライマリ水平変換部413は、逆プライマリ垂直変換部412から供給される逆プライマリ垂直変換後の変換係数Coeff_IPverに対して、変換タイプ識別子TrTypeIdxHと変換ブロックのサイズで定まる逆プライマリ水平変換IPhorを実行し、その逆プライマリ水平変換後の変換係数Coeff_IPhor(すなわち逆プライマリ変換後の変換係数Coeff_IP)を導出する。逆プライマリ水平変換部413は、その逆プライマリ水平変換後の変換係数Coeff_IPhorを予測残差D'として逆プライマリ変換部253の外部に出力する(演算部215に供給する)。
以上のような構成の逆プライマリ変換部253において、逆プライマリ垂直変換部412および逆プライマリ水平変換部413は、それぞれ、導出部および直交変換部として、上述した本技術を適用した処理を行う。
つまり、逆プライマリ垂直変換部412は、導出部として、垂直方向の逆1次元直交変換用の第2の変換行列を導出し、さらに、逆直交変換部として、その導出部により導出された垂直方向の逆1次元直交変換用の第2の変換行列を用いて、垂直方向の逆1次元直交変換を行う。したがって、逆プライマリ垂直変換部412は、垂直方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
また、逆プライマリ水平変換部413は、導出部として、水平方向の逆1次元直交変換用の第2の変換行列を導出し、さらに、直交変換部として、その導出部により導出された水平方向の逆1次元直交変換用の第2の変換行列を用いて、水平方向の逆1次元直交変換を行う。したがって、逆プライマリ水平変換部413は、水平方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<逆プライマリ垂直変換部>
図35は、図34の逆プライマリ垂直変換部412の主な構成例を示すブロック図である。図35に示されるように、逆プライマリ垂直変換部412は、変換行列導出部421、行列演算部422、スケーリング部423、およびクリップ部424を有する。
変換行列導出部421は、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVと、変換ブロックのサイズに関する情報を入力とし、その逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する、変換ブロックと同サイズの、逆プライマリ垂直変換用の変換行列TV(垂直方向の逆1次元直交変換用の変換行列TV)を導出する。変換行列導出部421は、その変換行列TVを行列演算部422に供給する。
行列演算部422は、その変換行列導出部421から供給される変換行列TVを用いて、入力データXin(すなわち逆セカンダリ変換後の変換係数Coeff_ISの変換ブロック)に対する垂直方向の逆1次元直交変換を行い、中間データY1を得る。この演算は以下の式(30)のように行列式で表すことができる。
行列演算部422は、その中間データY1をスケーリング部423に供給する。
スケーリング部423は、その中間データY1の各i行j列成分の係数Y1[i,j]を所定のシフト量SIVでスケーリングし、中間データY2を得る。このスケーリングは、以下の式(31)のように表すことができる。
スケーリング部423は、その中間データY2をクリップ部424に供給する。
クリップ部424は、その中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、逆プライマリ垂直変換後の変換係数Coeff_IPver)を導出する。この処理は、上述の式(11)のように表すことができる。
クリップ部424は、その出力データXout(逆プライマリ垂直変換後の変換係数Coeff_IPver)を逆プライマリ垂直変換部412の外部に出力する(逆プライマリ水平変換部413に供給する)。
以上のような構成の逆プライマリ垂直変換部412において、変換行列導出部421は、導出部として、上述した本技術を適用した処理を行う。また、行列演算部422は、直交変換部として、上述した本技術を適用した処理を行う。したがって、逆プライマリ垂直変換部412は、垂直方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列導出部>
図36は、図35の変換行列導出部421の主な構成例を示すブロック図である。図36に示されるように、変換行列導出部421は、変換行列LUT431、フリップ部432、および転置部433を有する。なお、図36においては、データの授受を示す矢印を省略しているが、変換行列導出部421は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT431は、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび変換ブロックのサイズNに対応する変換行列を保持(格納)するためのルックアップテーブルである。変換行列LUT431は、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび変換ブロックのサイズNが指定されると、それらに対応する変換行列を選択し、出力する。この導出例の場合、変換行列LUT431は、その変換行列をベース変換行列Tbaseとしてフリップ部432若しくは転置部433、または両方に供給する。
フリップ部432は、入力されるN行N列の変換行列Tをフリップし、フリップ後の変換行列Tflipを出力する。この導出例の場合、フリップ部432は、変換行列LUT431から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを行方向(水平方向)にフリップして、フリップ後の変換行列Tflipを、変換行列TVとして、変換行列導出部321の外部に出力する(行列演算部422に供給する)。
転置部433は、入力されるN行N列の変換行列Tを転置し、転置後の変換行列Ttransposeを出力する。この導出例の場合、転置部433は、変換行列LUT431から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを転置して、転置後の変換行列Ttransposeを、変換行列TVとして、変換行列導出部421の外部に出力する(行列演算部422に供給する)。
以上のように、変換行列導出部421は、フリップ部432や転置部433を有する。したがって、変換行列導出部421は、例えば、フリップ部432を用いて、図10に示される表の上から1段目の例の導出例を実現することができる。また、変換行列導出部421は、例えば、転置部433を用いて、図10に示される表の上から2段目の例の導出例を実現することができる。
<逆プライマリ水平変換部>
図37は、図34の逆プライマリ水平変換部413の主な構成例を示すブロック図である。図37に示されるように、逆プライマリ水平変換部413は、変換行列導出部451、行列演算部452、スケーリング部453、およびクリップ部454を有する。
変換行列導出部451は、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHと、変換ブロックのサイズに関する情報を入力とし、その逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する、変換ブロックと同サイズの、逆プライマリ水平変換用の変換行列TH(水平方向の逆1次元直交変換用の変換行列TH)を導出する。変換行列導出部451は、その変換行列THを行列演算部452に供給する。
行列演算部452は、その変換行列導出部451から供給される変換行列THを用いて、入力データXin(すなわち逆プライマリ垂直変換後の変換係数Coeff_IPverの変換ブロック)に対する水平方向の逆1次元直交変換を行い、中間データY1を得る。この演算は以下の式(32)のように行列式で表すことができる。
行列演算部452は、その中間データY1をスケーリング部453に供給する。
スケーリング部453は、その中間データY1の各i行j列成分の係数Y1[i,j]を所定のシフト量SIHでスケーリングし、中間データY2を得る。このスケーリングは、以下の式(33)のように表すことができる。
スケーリング部453は、その中間データY2をクリップ部454に供給する。
クリップ部454は、その中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、逆プライマリ水平変換後の変換係数Coeff_IPhor)を導出する。この処理は、上述の式(11)のように表すことができる。
クリップ部454は、その出力データXout(逆プライマリ水平変換後の変換係数Coeff_IPhor(逆プライマリ変換後の変換係数Coeff_IP))を、予測残差D'として、逆プライマリ水平変換部413の外部に出力する(演算部215に供給する)。
以上のような構成の逆プライマリ水平変換部413において、変換行列導出部451は、導出部として、上述した本技術を適用した処理を行う。また、行列演算部452は、逆直交変換部として、上述した本技術を適用した処理を行う。したがって、逆プライマリ水平変換部413は、水平方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<変換行列導出部>
図38は、図37の変換行列導出部451の主な構成例を示すブロック図である。図38に示されるように、変換行列導出部451は、変換行列LUT461、フリップ部462、および転置部463を有する。なお、図38においては、データの授受を示す矢印を省略しているが、変換行列導出部451は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT461は、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよび変換ブロックのサイズNに対応する変換行列を保持(格納)するためのルックアップテーブルである。変換行列LUT461は、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよび変換ブロックのサイズNが指定されると、それらに対応する変換行列を選択し、出力する。この導出例の場合、変換行列LUT461は、その変換行列をベース変換行列Tbaseとしてフリップ部462若しくは転置部463、または両方に供給する。
フリップ部462は、入力されるN行N列の変換行列Tをフリップし、フリップ後の変換行列Tflipを出力する。この導出例の場合、フリップ部462は、変換行列LUT461から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを行方向(水平方向)にフリップして、フリップ後の変換行列Tflipを、変換行列THとして、変換行列導出部451の外部に出力する(行列演算部452に供給する)。
転置部463は、入力されるN行N列の変換行列Tを転置し、転置後の変換行列Ttransposeを出力する。この導出例の場合、転置部463は、変換行列LUT461から供給されるN行N列のベース変換行列Tbaseを入力とし、そのベース変換行列Tbaseを転置して、転置後の変換行列Ttransposeを、変換行列THとして、変換行列導出部451の外部に出力する(行列演算部452に供給する)。
以上のように、変換行列導出部451は、フリップ部462や転置部463を有する。したがって、変換行列導出部451は、例えば、フリップ部462を用いて、図10に示される表の上から1段目の例の導出例を実現することができる。また、変換行列導出部451は、例えば、転置部463を用いて、図10に示される表の上から2段目の例の導出例を実現することができる。
<逆プライマリ変換処理の流れ>
次に、画像復号装置200の上述した構成により行われる処理の流れの例等について説明する。この場合の、図18のステップS233において実行される逆プライマリ変換処理の流れの例を、図39のフローチャートを参照して説明する。
逆プライマリ変換処理が開始されると、逆プライマリ変換部253の逆プライマリ変換選択部411(図34)は、ステップS401において、逆プライマリ変換選択処理を行い、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)と、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)とを、それぞれ選択する。
ステップS402において、逆プライマリ垂直変換部412は、ステップS401において得られた逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する逆プライマリ垂直変換処理を逆セカンダリ変換後の変換係数Coeff_ISに対して行い、逆プライマリ垂直変換後の変換係数Coeff_IPverを導出する。
ステップS403において、逆プライマリ水平変換部413は、ステップS401において得られた逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する逆プライマリ水平変換処理を逆プライマリ垂直変換後の変換係数Coeff_IPverに対して行い、逆プライマリ水平変換後の変換係数Coeff_IPhor(すなわち、逆プライマリ変換後の変換係数Coeff_IP(予測残差D'))を導出する。
ステップS403の処理が終了すると、逆プライマリ変換処理が終了し、処理は図18に戻る。
以上のような逆プライマリ変換処理において、ステップS402やステップS403の処理として、上述した本技術を適用した処理が行われる。したがって、この逆プライマリ変換処理を実行することにより、逆プライマリ垂直変換処理や逆プライマリ水平変換処理に必要なメモリ容量の増大を抑制することができる。
<逆プライマリ変換選択処理の流れ>
次に、図39のステップS401において実行される逆プライマリ変換選択処理の流れの例を、図40のフローチャートを参照して説明する。
逆プライマリ変換選択処理が開始されると、逆プライマリ変換選択部411は、ステップS421において、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]が真(1)であるか否かを判定する。コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]が真(1)であると判定された場合、処理はステップS422に進む。
ステップS422において、逆プライマリ変換選択部411は、予測モード情報Pinfoに基づいて変換セット群から、各方向の変換セットTrSetH、TrSetVを選択する。
ステップS423において、逆プライマリ変換選択部411は、変換セットTrSetHとプライマリ変換識別子pt_idx[compID]に基づいて、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHを導出する。この処理は、例えば、以下の式(34)のように表すことができる。
ステップS424において、逆プライマリ変換選択部411は、変換セットTrSetVと逆プライマリ変換識別子pt_idx[compID]に基づいて、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVを導出する。この処理は、例えば、以下の式(35)のように表すことができる。
ステップS424の処理が終了すると、逆プライマリ変換選択処理が終了し、処理は図39に戻る。
また、ステップS421において、コンポーネント識別子compIDの適応プライマリ変換フラグapt_flag[compID]が偽(0)であると判定された場合、処理はステップS425に進む。
ステップS425において、逆プライマリ変換選択部411は、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHに、所定の直交変換(例えばDCT2)を設定(選択)する。この処理は、例えば、以下の式(36)のように表すことができる。
ステップS426において、逆プライマリ変換選択部411は、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに、所定の直交変換(例えばDCT2)を設定(選択)する。この処理は、例えば、以下の式(37)のように表すことができる。
ステップS426の処理が終了すると、逆プライマリ変換選択処理が終了し、処理は図39に戻る。
<逆プライマリ垂直変換処理の流れ>
次に、図39のステップS402において実行される逆プライマリ垂直変換処理の流れについて、図41のフローチャートを参照して説明する。
逆プライマリ垂直変換処理が開始されると、逆プライマリ垂直変換部412の変換行列導出部421(図35)は、ステップS441において、変換行列導出処理を実行し、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する変換行列TVを導出する。
この場合の変換行列導出処理は、図30のフローチャートを参照して説明したプライマリ水平変換の場合と同様の流れで行われる。したがって、その説明を省略する。例えば、プライマリ水平変換の変換タイプ識別子TrTypeIdxHを逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに置き換えたり、導出されるプライマリ水平変換用の変換行列THを、逆プライマリ垂直変換用の変換行列TVに置き換えたりすることにより、図30を参照して行った説明を、この場合の変換行列導出処理の説明として適用することができる。
ステップS442において、行列演算部422は、その導出された変換行列TVを用いて入力データXin(つまり、逆セカンダリ変換後の変換係数Coeff_IS)に対して垂直方向の逆1次元直交変換を行い、中間データY1を得る。この処理を行列式として表現すると、上述の式(30)のように表すことができる。
ステップS443において、スケーリング部423は、ステップS442の処理により導出された中間データY1の各i行j列成分の係数Y1[i,j]をシフト量SIVでスケーリングし、中間データY2を導出する。このスケーリングは、上述の式(31)のように表すことができる。
ステップS444において、クリップ部424は、ステップS443の処理により導出された中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、逆プライマリ垂直変換後の変換係数Coeff_IPver)を得る。この処理は、上述の式(11)のように表すことができる。
ステップS444の処理が終了すると、逆プライマリ垂直変換処理が終了し、処理は図39に戻る。
以上のような逆プライマリ垂直変換処理において、ステップS441やステップS442の処理として、上述した本技術を適用した処理が行われる。したがって、この逆プライマリ垂直変換処理を実行することにより、垂直方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<逆プライマリ水平変換処理の流れ>
次に、図39のステップS403において実行される逆プライマリ水平変換処理の流れについて、図42のフローチャートを参照して説明する。
逆プライマリ水平変換処理が開始されると、逆プライマリ水平変換部413の変換行列導出部451(図37)は、ステップS461において、変換行列導出処理を実行し、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する変換行列THを導出する。
この場合の変換行列導出処理は、図30のフローチャートを参照して説明したプライマリ水平変換の場合と同様の流れで行われる。したがって、その説明を省略する。例えば、プライマリ水平変換を逆プライマリ水平変換に置き換える等すれば、図30を参照して行った説明を、この場合の変換行列導出処理の説明として適用することができる。
ステップS462において、行列演算部452は、その導出された変換行列THを用いて入力データXin(つまり、逆プライマリ垂直変換後の変換係数Coeff_IPver)に対して水平方向の逆1次元直交変換を行い、中間データY1を得る。この処理を行列式として表現すると、上述の式(32)のように表すことができる。
ステップS463において、スケーリング部453は、ステップS462の処理により導出された中間データY1の各i行j列成分の係数Y1[i,j]をシフト量SIHでスケーリングし、中間データY2を導出する。このスケーリングは、上述の式(33)のように表すことができる。
ステップS464において、クリップ部454は、ステップS463の処理により導出された中間データY2の各i行j列成分の係数Y2[i,j]の値をクリップし、出力データXout(つまり、逆プライマリ水平変換後の変換係数Coeff_IPhor)を得る。この処理は、上述の式(14)のように表すことができる。
ステップS464の処理が終了すると、逆プライマリ水平変換処理が終了し、処理は図39に戻る。
以上のような逆プライマリ水平変換処理において、ステップS461やステップS462の処理として、上述した本技術を適用した処理が行われる。したがって、この逆プライマリ水平変換処理を実行することにより、水平方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<2-3.実施例1-2>
<コンセプト>
次に、図10に示される表において、最上段の項目名の行を除き、上から3段目の例について説明する。
上述したように、上から3段目の例の導出は、対になるDCT/DST間の特性に着目したものである。より具体的には、対になるDCT/DST間(例えばDST7とDCT8)では、偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である点に着目している。この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、第2の変換行列を導出する。つまり、導出部は、図43に示されるように、DST7の変換行列を行方向にフリップし、さらに、奇数次の行ベクトルの符号を反転してロスレスでDCT8の変換行列を導出する。したがって、当然、その導出されたDCT8により、0次の行ベクトルの波形が同一の(減少型の)DCT8の変換行列を代替することができる。
この導出の具体的な例を図44に示す。図44に示されるように、この導出は、奇数次の行の要素が負の単位行列Dと、ベース変換行列Tbase(DST7)と、フリップ行列Jとの行列積によって表すことができる。
つまり、この導出例は、2回の操作(フリップと符号反転)で第2の変換行列を導出することができる。また、各操作も容易である。つまり、容易に第2の変換行列を導出することができる。
また、この導出例を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。
この場合、図45の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を4種類に低減させることができるので、LUTサイズの合計は約47KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
なお、上述したように、この場合、第2の変換タイプとして変換タイプDCT8の変換行列を得ることができるので、その第2の変換タイプの変換行列を用いて直交変換・逆直交変換を行うことにより、DCT8の変換行列を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
<変換行列導出部>
次に、このような導出を行うための構成や処理等について説明する。まず、画像符号化装置100が有する本実施の形態の技術構成について説明する。この場合のプライマリ変換部152、プライマリ水平変換部312、およびプライマリ垂直変換部313等の構成は、図22を参照して説明した<2-2.実施例1-1>の場合と同様であるのでその説明を省略する。
図46は、この場合の変換行列導出部321(プライマリ水平変換部312内の変換行列導出部321(図23))の主な構成例を示すブロック図である。図46に示されるように、この場合の変換行列導出部321は、変換行列LUT331、フリップ部332、および符号反転部501を有する。なお、図46においては、データの授受を示す矢印を省略しているが、変換行列導出部321は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT331およびフリップ部332は、図24の場合と同様である。
符号反転部501は、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例(実施例1-2)の場合、変換行列導出部321は、変換行列LUT331において選択したN行N列のベース変換行列Tbaseを、フリップ部332を介して水平方向にフリップし、さらに符号反転部501を介して奇数次行ベクトルの符号を反転し、変換行列TInvSignを変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
以上のように、変換行列導出部321は、フリップ部332および符号反転部501を用いて、図10に示される表の上から3段目の例の導出例を実現することができる。
<変換行列導出部>
図47は、この場合のプライマリ垂直変換部313が有する変換行列導出部351の主な構成例を示すブロック図である。図47に示されるように、この場合の変換行列導出部351は、変換行列導出部321と同様に、変換行列LUT361、フリップ部362、および符号反転部502を有する。なお、図47においては、データの授受を示す矢印を省略しているが、変換行列導出部351は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT361およびフリップ部362は、図26の場合と同様である。
符号反転部502は、符号反転部501と同様に、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例の場合、変換行列導出部351は、変換行列LUT361において選択したN行N列のベース変換行列Tbaseを、フリップ部362を介して水平方向にフリップし、さらに符号反転部502を介して奇数次行ベクトルの符号を反転し、変換行列TInvSignを変換行列TVとして、変換行列導出部351の外部に出力する(行列演算部352に供給する)。
以上のように、変換行列導出部351は、フリップ部362および符号反転部502を用いて、図10に示される表の上から3段目の例の導出例を実現することができる。
<変換行列導出処理の流れ>
この場合のプライマリ変換処理、プライマリ水平変換処理、プライマリ垂直変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われるので、これらの処理についての説明は省略する。
次に、図28のステップS321において、プライマリ水平変換部312内の変換行列導出部321により実行される、この場合の変換行列導出処理の流れの例を、図48のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS501において、変換タイプ識別子TrTypeIdxHに対応するベース変換タイプBaseTrTypeを、例えば、図49に示されるような対応表を参照して求める。なお、この処理を数式で表すと、例えば上述の式(17)のように表現することができる。さらに、変換行列導出部321は、その求めたベース変換タイプのN行N列の変換行列を変換行列LUTより読み出し、上述の式(18)のように、それをベース変換行列Tbaseに設定する。
また、変換行列導出部321は、上述の式(19)のように、フリップフラグFlipFlagに、変換タイプ識別子TrTypeIdxHに対応する値を設定する。また、変換行列導出部321は、以下の式(38)のように、符号反転フラグInvSignFlagに、変換タイプ識別子TrTypeIdxHに対応する値を設定する。
ステップS502において、変換行列導出部321は、フリップフラグFlipFlagと転置フラグTransposeFlagとが以下の式(39)で表される条件(ConditionB1)を満たすか否かを判定する。
上述の式(39)に示される条件を満たさないと判定された場合(すなわち、フリップフラグFlipFlagが偽(0)であるか、または、符号反転フラグInvSignFlagが偽(0)である、と判定された場合)、処理はステップS503に進む。
ステップS503において、変換行列導出部321は、ベース変換行列Tbaseを変換行列THに設定する。ステップS503の処理が終了すると、変換行列導出処理が終了し、処理は、図28に戻る。
また、ステップS502において、上述の式(39)に示される条件を満たすと判定された場合(すなわち、フリップフラグFlipFlagが真(1)であり、かつ、符号反転フラグInvSignFlagが真(1)であると判定された場合)、処理はステップS504に進む。
ステップS504において、変換行列導出部321は、フリップ部332を用いて、ベース変換行列Tbaseをフリップし、それを変換行列THに設定する。つまり、変換行列導出部321は、Flip(Tbase)の変換行列THを導出する。
ステップS505において、変換行列導出部321は、符号反転部501を用いて、変換行列THの奇数番目の行ベクトルの符号を反転して、変換行列THを再設定する。この処理は、以下の式(40)のように行列式として表現することができる。
ここで、×は行列積を表す演算子であり、符号反転行列Dは、Diag(1,-1,…,(-1)N-1)からなる対角行列である。
また、この処理は、以下の式(41)のように、要素毎の演算としても表現することができる。このようにすることにより、符号反転行列Dを持たなくても実現することができる。その場合、変換行列導出部321は、変換行列THのi行j列成分((i,j)成分)のうち、奇数行目(i%2==1)の成分の正負符号を反転する。
ここで、N行N列の変換行列THのi行j列成分((i,j)成分)をTH[i,j]と表記する。また、2行目の「for i,j=0,...,N-1 and i%2 == 1」は、jが0乃至N-1の値を持ち、iが0乃至N-1の範囲の奇数の値を持つことを示す。すなわち、TH[i,j]がN行N列の変換行列THの奇数行ベクトル(の各要素)を示すことを意味する。
ステップS505の処理が終了すると、変換行列導出処理が終了し、処理は、図28に戻る。
<変換行列導出処理の流れ>
なお、プライマリ垂直変換処理のステップS361(図32)において実行される変換行列導出処理の流れは、図48のフローチャートを参照して説明したプライマリ水平変換において実行される変換行列導出処理の場合と同様であるのでその説明を省略する。
<変換行列導出部>
次に、この場合の画像復号装置200の構成について説明する。この場合も画像復号装置200が有する逆プライマリ変換部253、逆プライマリ垂直変換部412、逆プライマリ水平変換部413等の構成は、<2-2.実施例1-1>の場合と同様であるのでその説明を省略する。
図50は、この場合の変換行列導出部421(逆プライマリ垂直変換部412が有する変換行列導出部421)の主な構成例を示すブロック図である。図50に示されるように、この場合の変換行列導出部421は、変換行列導出部321と同様に、変換行列LUT431、フリップ部432、および符号反転部511を有する。なお、図50においては、データの授受を示す矢印を省略しているが、変換行列導出部421は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT431およびフリップ部432は、図36の場合と同様である。符号反転部511は、符号反転部501と同様に、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例の場合、変換行列導出部421は、変換行列LUT431において選択したN行N列のベース変換行列Tbaseを、フリップ部432を介して水平方向にフリップし、さらに符号反転部511を介して奇数次行ベクトルの符号を反転し、変換行列TInvSignを変換行列TVとして、変換行列導出部421の外部に出力する(行列演算部422に供給する)。
以上のように、変換行列導出部421は、フリップ部432および符号反転部511を用いて、図10に示される表の上から3段目の例の導出例を実現することができる。
<変換行列導出部>
図51は、この場合の、逆プライマリ水平変換部413が有する変換行列導出部451の主な構成例を示すブロック図である。図51に示されるように、この場合の変換行列導出部451は、変換行列導出部421と同様に、変換行列LUT461、フリップ部462、および符号反転部512を有する。なお、図51においては、データの授受を示す矢印を省略しているが、変換行列導出部451は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT461およびフリップ部462は、図50の場合と同様である。符号反転部512は、符号反転部501と同様に、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例の場合、変換行列導出部451は、変換行列LUT461において選択したN行N列のベース変換行列Tbaseを、フリップ部462を介して水平方向にフリップし、さらに符号反転部512を介して奇数次行ベクトルの符号を反転し、変換行列TInvSignを変換行列TVとして、変換行列導出部451の外部に出力する(行列演算部452に供給する)。
以上のように、変換行列導出部451は、フリップ部462および符号反転部512を用いて、図10に示される表の上から3段目の例の導出例を実現することができる。
<変換行列導出処理の流れ>
なお、変換行列導出部421および変換行列導出部451は、図48のフローチャートを参照して説明した場合と同様の流れで、変換行列導出処理を行うので、その説明は省略する。
<2-4.実施例1-3>
<コンセプト>
次に、図10に示される表において、最上段の項目名の行を除き、上から4段目および5段目の例について説明する。
上述したように、上から4段目の例の導出は、上から1段目の場合と同様に、第1の変換タイプの最低次行ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。この場合、導出部は、第1の変換行列をフリップして、第2の変換行列を導出する。つまり、導出部は、図52に示されるように、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップして、FlipDCT8の変換行列を導出する。このFlipDCT8の変換行列により、0次の行ベクトルの波形が類似する(増加型の)DST7の変換行列を代替することができる。
また、上から5段目の例の導出は、第1の変換タイプの最高次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列を転置して、第2の変換行列を導出する。つまり、導出部は、図52に示されるように、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップし、さらに転置して、TrFlipDCT8の変換行列を導出する。このTrFlipDCT8の変換行列により、0次の行ベクトルの波形が類似する(山型の)DST1の変換行列を代替することができる。
つまり、以上の2つの導出例は、1回または2回の操作(フリップまたはフリップ+転置)で第2の変換行列を導出することができる。また、その操作も容易である。つまり、容易に第2の変換行列を導出することができる。
また、以上の2つの導出例を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列およびDST1の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。
この場合、図53の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を3種類に低減させることができるので、LUTサイズの合計は約40KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
なお、上述したように、この場合も、導出された第2の変換タイプ(FlipDCT8やTrFlipDCT8)の変換行列を用いて直交変換・逆直交変換を行うことにより、DST7の変換行列やDST1の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。
<構成>
この場合の画像符号化装置100および画像復号装置200の構成は、それぞれ、<2-2.実施例1-1>において説明したのと同様であるのでその説明を省略する。
<変換行列導出処理の流れ>
次に処理の流れについて説明する。変換行列導出処理以外の処理は<2-2.実施例1-1>等において上述した例と同様の流れで行われるので、それらの説明は省略する。
図28のステップS321において、プライマリ水平変換部312が有する変換行列導出部321により実行される変換行列導出処理の流れの例を、図54のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS521において、変換タイプ識別子TrTypeIdxHに対応するベース変換タイプBaseTrTypeを、例えば、図55に示されるような対応表を参照して求める。
また、変換行列導出部321は、図30のフローチャートのステップS341の場合と同様に、変換タイプ識別子TrTypeIdxHに対応するフリップフラグFlipFlagの値と、変換タイプ識別子TrTypeIdxHに対応する転置フラグTransposeFlagの値を設定する。
ステップS522において、変換行列導出部321は、フリップフラグFlipFlagが以下の式(42)で表される条件(ConditionC1)を満たすか否かを判定する。
上述の条件(ConditionC1)を満たさないと判定された場合(フリップフラグFlipFlagが偽(0)の場合)、処理はステップS523に進む。
ステップS523において、変換行列導出部321は、図30のステップS343の場合と同様に、ベース変換行列Tbaseを変換行列THに設定する。ステップS523の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
また、ステップS522において、上述の条件(ConditionC1)を満たすと判定された場合(フリップフラグFlipFlagが真(1)の場合)、処理はステップS524に進む。
ステップS524において、変換行列導出部321は、ベース変換行列Tbaseを水平方向にフリップし、そのフリップした変換行列Flip(Tbase)を変換行列Ttmpへ設定する。この処理は、以下の式(43)のように表すことができる。
ステップS525において、変換行列導出部321は、転置フラグTransposeFlagが以下の式(44)で表される条件(ConditionC2)を満たすか否かを判定する。
上述の条件(ConditionC2)を満たさないと判定された場合(転置フラグTransposeFlagが偽(0)の場合)、処理はステップS526に進む。
ステップS526において、変換行列導出部321は、変換行列Ttmpを変換行列THへ設定する。この処理は、以下の式(45)のように表すことができる。
ステップS526の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。また、ステップS525において上述の条件(ConditionC2)を満たすと判定された場合(転置フラグTransposeFlagが真(1)の場合)、処理はステップS527に進む。
ステップS527において、変換行列導出部321は、変換行列Ttmpを転置したTr(Ttmp)を変換行列THに設定する。この処理は、例えば以下の式(46)のように表すことができる。
ステップS527の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
以上のように変換行列導出処理を実行することにより、水平方向の1次元直交変換において、図10に示される表の上から4段目や5段目の例の導出例を実現することができる。したがって、必要なメモリ容量の増大を抑制することができる。
なお、以上においては、フリップと転置を順に行うように説明したが、フリップと転置を一括(1回の演算で)で行うようにしてもよい。例えば、図54のステップS522およびステップS525の判定をまとめて行い、両方が真(1)である場合、フリップと転置を一括して行うようにしてもよい。
例えば、このフリップおよび転置の操作は、要素毎の演算として表現すると、変換行列THのj行i列成分((j,i)成分)に、ベース変換行列Tbaseの(i,N-1-j)成分を設定することである。つまり、以下の式(47)のように表現することができる。
ここで、N行N列の変換行列THのi行j列成分((i,j)成分)をTH[i,j]と表記する。また2行目の「for i,j=0,...,N-1」は、iとjとがそれぞれ0乃至N-1の値を持つことを示す。すなわち、TH[i,j]がN行N列の変換行列THの全ての要素を示すことを意味する。
このようにすることにより、フリップと転置を1度の操作、それも、簡単な2次元配列へのアクセスで実現することができる。また、フリップ行列Jが不要であるので、その分メモリ容量の増大を抑制することができる。
なお、本実施例の場合、図32のステップS361において、プライマリ垂直変換部313が有する変換行列導出部351により実行される変換行列導出処理も、この図54のフローチャートと同様の流れで行われる。
また、本実施例の場合、図41のステップS441において、逆プライマリ垂直変換部412が有する変換行列導出部421により実行される変換行列導出処理も、この図54のフローチャートと同様の流れで行われる。
さらに、本実施例の場合、図42のステップS461において、逆プライマリ水平変換部413が有する変換行列導出部451により実行される変換行列導出処理も、この図54のフローチャートと同様の流れで行われる。
したがって、これらについての説明は省略する。
<2-5.実施例1-4>
<コンセプト>
次に、図10に示される表において、最上段の項目名の行を除き、上から6段目の例について説明する。
上述したように、上から6段目の例の導出は、上から3段目の場合(実施例1-2)と同様に、対になるDCT/DST間の特性に着目したものである。より具体的には、対になるDCT/DST間(例えばDCT8とDST7)では、偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である点に着目している。この場合、導出部は、第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、第2の変換行列を導出する。つまり、導出部は、図56に示されるように、DCT8の変換行列をベース変換行列Tbaseとし、それを行方向にフリップし、さらに、奇数次の行ベクトルの符号を反転してDST7の変換行列をロスレスに導出する。したがって、当然、その導出されたDST7の変換行列により、0次の行ベクトルの波形が同一の(増加型の)DST7の変換行列を代替することができる。
つまり、この導出例は、2回の操作(フリップ+符号反転)で第2の変換行列を導出することができる。また、その操作も容易である。つまり、容易に第2の変換行列を導出することができる。
また、この導出例を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。
この場合、図57の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を4種類に低減させることができるので、LUTサイズの合計は約47KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
また、この導出例の場合、第2の変換行列としてDST7の変換行列を導出することができるのであるから、この第2の変換行列を用いて直交変換・逆直交変換を行うことにより、当然、DST7の変換行列を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
<構成および処理の流れ>
この場合の画像符号化装置100および画像復号装置200の構成は、それぞれ、<2-3.実施例1-2>において説明したのと同様であるのでその説明を省略する。また、画像符号化装置100および画像復号装置200が行う処理も、<2-3.実施例1-2>において説明したのと同様であるのでその説明を省略する。
ただし、本実施例の場合は、変換行列導出処理において変換タイプ識別子TrTypeIdxHに対応するベース変換タイプを求める際に、例えば図58に示されるような対応表を参照して求める。それ以外は、図48のフローチャートを参照して説明した場合と同様の流れで行えば良い。
<2-6.実施例1-5>
<コンセプト>
次に、図10に示される表において、最上段の項目名の行を除き、上から7段目および8段目の例について説明する。
上述したように、上から7段目の例の導出は、上から1段目の場合と同様に、第1の変換タイプの最低次行ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。ただし、この場合、導出部は、第1の変換行列を転置して、第2の変換行列を導出する。つまり、導出部は、図59に示されるように、DCT2の変換行列をベース変換行列Tbaseとし、それを転置してDCT3の変換行列を導出する。このDCT3の変換行列により、0次の行ベクトルの波形が類似する(減少型の)DCT8の変換行列を代替することができる。
また、上から8段目の例の導出は、上から5段目の場合と同様に、第1の変換タイプの最高次列ベクトルの波形と代替する変換行列の変換タイプの最低次行ベクトルの波形との類似性に着目したものである。この場合、導出部は、第1の変換行列を転置し、転置後の第1の変換行列をフリップして、第2の変換行列を導出する。つまり、導出部は、図59に示されるように、DCT2の変換行列をベース変換行列Tbaseとし、それを転置し、さらに行方向にフリップして、FlipDCT3の変換行列を導出する。このFlipDCT3の変換行列により、0次の行ベクトルの波形が類似する(増加型の)DST7の変換行列を代替することができる。
つまり、以上の2つの導出例は、1回または2回の操作(転置または転置+フリップ)で第2の変換行列を導出することができる。また、その操作も容易である。つまり、容易に第2の変換行列を導出することができる。
また、以上の2つの導出例を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列およびDST7の変換行列を用意する必要が無くなる。つまり、固有変換タイプを削減することができる。
この場合、図60の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を3種類に低減させることができるので、LUTサイズの合計は約40KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
なお、上述したように、この場合も、導出された第2の変換タイプ(DCT3やFlipDCT3)の変換行列を用いて直交変換・逆直交変換を行うことにより、DCT8の変換行列やDST7の変換行列を直交変換・逆直交変換に用いる場合と同程度の符号化効率が得られる。
<構成>
この場合の画像符号化装置100および画像復号装置200の構成は、それぞれ、<2-2.実施例1-1>において説明したのと同様であるのでその説明を省略する。
<変換行列導出処理の流れ>
次に処理の流れについて説明する。変換行列導出処理以外の処理は<2-2.実施例1-1>等において上述した例と同様の流れで行われるので、それらの説明は省略する。
図28のステップS321において、プライマリ水平変換部312が有する変換行列導出部321により実行される変換行列導出処理の流れの例を、図61のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS541において、変換タイプ識別子TrTypeIdxHに対応するベース変換タイプBaseTrTypeを、例えば、図62に示されるような対応表を参照して求める。
また、変換行列導出部321は、図30のフローチャートのステップS341の場合と同様に、変換タイプ識別子TrTypeIdxHに対応するフリップフラグFlipFlagの値と、変換タイプ識別子TrTypeIdxHに対応する転置フラグTransposeFlagの値を設定する。
ステップS542において、変換行列導出部321は、転置フラグTransposeFlagが以下の式(48)で表される条件(ConditionD1)を満たすか否かを判定する。
上述の条件(ConditionD1)を満たさないと判定された場合(転置フラグTransposeFlagが偽(0)の場合)、処理はステップS543に進む。
ステップS543において、変換行列導出部321は、図30のステップS343の場合と同様に、ベース変換行列Tbaseを変換行列THに設定する。ステップS543の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
また、ステップS542において、上述の条件(ConditionD1)を満たすと判定された場合(転置フラグTransposeFlagが真(1)の場合)、処理はステップS544に進む。
ステップS544において、変換行列導出部321は、ベース変換行列Tbaseを水平方向に転置し、その転置した変換行列Tr(Tbase)を変換行列Ttmpへ設定する。この処理は、以下の式(49)のように表すことができる。
ステップS545において、変換行列導出部321は、フリップフラグFlipFlagが以下の式(50)で表される条件(ConditionD2)を満たすか否かを判定する。
上述の条件(ConditionD2)を満たさないと判定された場合(フリップフラグFlipFlagが偽(0)の場合)、処理はステップS546に進む。
ステップS546において、変換行列導出部321は、上述の式(45)のように、変換行列Ttmpを変換行列THへ設定する。
ステップS546の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。また、ステップS545において上述の条件(ConditionD2)を満たすと判定された場合(フリップフラグFlipFlagが真(1)の場合)、処理はステップS547に進む。
ステップS547において、変換行列導出部321は、変換行列TtmpをフリップしたFlip(Ttmp)を変換行列THに設定する。この処理は、例えば以下の式(51)のように表すことができる。
ステップS547の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
以上のように変換行列導出処理を実行することにより、水平方向の1次元直交変換において、図10に示される表の上から7段目や8段目の例の導出例を実現することができる。したがって、必要なメモリ容量の増大を抑制することができる。
なお、以上においては、転置とフリップを順に行うように説明したが、転置とフリップを一括(1回の演算で)で行うようにしてもよい。例えば、図61のステップS542およびステップS545の判定をまとめて行い、両方が真(1)である場合、転置とフリップを一括して行うようにしてもよい。
例えば、この転置およびフリップの操作は、要素毎の演算として表現すると、変換行列THのi行(N-1-j)列成分((i,(N-1-j))成分)に、ベース変換行列Tbaseの(j,i)成分を設定することである。つまり、以下の式(52)のように表現することができる。
ここで、N行N列の変換行列THのi行j列成分((i,j)成分)をTH[i,j]と表記する。また2行目の「for i,j=0,...,N-1」は、iとjとがそれぞれ0乃至N-1の値を持つことを示す。すなわち、TH[i,j]がN行N列の変換行列THの全ての要素を示すことを意味する。
このようにすることにより、転置とフリップを1度の操作、それも、簡単な2次元配列へのアクセスで実現することができる。また、フリップ行列Jが不要であるので、その分メモリ容量の増大を抑制することができる。
なお、本実施例の場合、図32のステップS361において、プライマリ垂直変換部313が有する変換行列導出部351により実行される変換行列導出処理も、この図61のフローチャートと同様の流れで行われる。例えば、図61のフローチャートにおいて、変換タイプ識別子TrTypeIdxHをTrTypeIdxVへ、変換行列THを変換行列TVへ置き換えて解釈すればよい。
また、本実施例の場合、図41のステップS441において、逆プライマリ垂直変換部412が有する変換行列導出部421により実行される変換行列導出処理も、この図61のフローチャートと同様の流れで行われる。例えば、図61のフローチャートにおいて、変換タイプ識別子TrTypeIdxHをTrTypeIdxVへ、変換行列THを変換行列TVへ置き換えて解釈すればよい。
さらに、本実施例の場合、図42のステップS461において、逆プライマリ水平変換部413が有する変換行列導出部451により実行される変換行列導出処理も、この図61のフローチャートと同様の流れで行われる。
したがって、これらについての説明は省略する。
<3.第2の実施の形態>
<3-1.共通コンセプト>
<予測残差の置換操作>
第1の実施の形態においては、変換行列を操作して他の変換行列を生成する旨を説明したが、変換行列だけでなく予測残差を操作するようにしてもよい。つまり、画像の予測残差を置換操作し、ベースとなる変換行列を用いて、置換操作された予測残差を直交変換し、その予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成するようにしてもよい。
例えば、画像処理装置において、画像の予測残差を置換操作する操作部と、ベースとなる変換行列を用いて、その操作部により置換操作された予測残差を直交変換する直交変換部と、その直交変換部により予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部とを備えるようにしてもよい。
このようにしても、第1の実施の形態の場合と等価の2次元直交変換を実現することができる。つまり、ある変換行列を用いた直交変換により、実質的に他の変換行列による直交変換を実現することができる。したがって、第1の実施の形態の場合と同様に、直交変換のために用意する変換行列の数の増大を抑制することができ、直交変換に必要なメモリ容量の増大を抑制することができる。また、第1の実施の形態の場合と比べて操作の回数を低減させることができるので、直交変換の処理量の増大を抑制することができる。
また、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、その得られた係数データを逆直交変換し、その得られた係数データの逆直交変換結果を置換操作するようにしてもよい。
例えば、画像処理装置において、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、その復号部により得られた係数データを逆直交変換する逆直交変換部と、その逆直交変換部により得られた係数データの逆直交変換結果を置換操作する操作部とを備えるようにしてもよい。
このようにしても、第1の実施の形態の場合と等価の逆2次元直交変換を実現することができる。つまり、ある変換行列を用いた逆直交変換により、実質的に他の変換行列による逆直交変換を実現することができる。したがって、第1の実施の形態の場合と同様に、逆直交変換のために用意する変換行列の数の増大を抑制することができ、逆直交変換に必要なメモリ容量の増大を抑制することができる。また、第1の実施の形態の場合と比べて操作の回数を低減させることができるので、逆直交変換の処理量の増大を抑制することができる。
より具体的に説明する。異なる2つの2次元直交変換(予測残差を含む)の空間対称性に着目すると、例えば、DST7の変換行列とそのDST7の変換行列をフリップしたFlipDST7の変換行列との間のように、ある方向(水平方向または垂直方向)において、1次元直交変換の間に軸対称がある場合がある。また、例えば、予測残差についても、予測残差(X)とその予測残差をフリップしたもの(X・J)との間に、ある方向(水平方向または垂直方向)において、予測残差の間に軸対称性がある場合がある。
このような場合、例えば図63に示されるように、元の予測残差をフリップしたものを、第1の変換行列を用いて直交変換することにより、第1の変換行列をフリップした第2の変換行列を用いたその元の予測残差の直交変換を代替することができる。
図63の例の場合、図中左側においては、以下の式(53)のように、元の予測残差に対して、第1の変換行列を用いた垂直方向の一次元直交変換と、フリップした第1の変換行列を用いた水平方向の一次元直交変換とが行われている。
これに対して、図中右側には、予測残差のフリップ(以下の式(54))と、そのフリップした予測残差に対する第1の変換行列を用いた垂直方向および水平方向の一次元直交変換(以下の式(55))が示されている。
このような2つの2次元直交変換には、空間対称性が生じる。したがって一方で他方を代替可能である。
換言するに、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、予測残差の直交変換に用いる変換行列との間に空間対称性が存在する場合、上述のように、予測残差をその空間対称性の方向にフリップし、そのフリップした予測残差をベースとなる変換行列により直交変換することにより、他の変換行列による直交変換(ベースとなる変換行列を用いて導出した変換行列を用いた、フリップする前の予測残差の直交変換)を代替することができる。
つまり、操作部が、予測残差を、1次元直交変換の間の空間対称性の方向にフリップし、直交変換部が、その操作部によりフリップされた予測残差を、ベースとなる変換行列を用いて直交変換するようにしてもよい。このようにすることにより、他の変換行列による直交変換と等価の直交変換を行うことができる。つまり、上述のように、実質的に他の変換行列による直交変換を実現することができる。したがって、直交変換のために用意する変換行列の数の増大を抑制することができ、直交変換に必要なメモリ容量の増大を抑制することができる。
このことは、逆直交変換についても同様である。つまり、ビットストリームを復号して得られた係数データを、ベースとなる変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果を、1次元直交変換の間の空間対称性の方向にフリップするようにしてもよい。このようにすることにより、実質的に他の変換行列による逆直交変換を実現することができるので、逆直交変換のために用意する変換行列の数の増大を抑制することができ、逆直交変換に必要なメモリ容量の増大を抑制することができる。
例えば、図64の左側には、予測残差Xに対して、DST7の変換行列をフリップしたFlipDST7を用いた水平方向の1次元直交変換と、DST7の変換行列を用いた垂直方向の1次元直交変換とを行う2次元直交変換が示される。また、図64の右側には、予測残差Xを水平方向にフリップした予測残差X'(= X・J)に対して、DST7の変換行列を用いた水平方向・垂直方向の1次元直交変換を行う2次元直交変換が示される。これらは互いに水平方向に対称性を有しており、等価である。したがって、例えば後者の2次元直交変換により、前者の2次元直交変換を代替することができる。なお、前者の2次元直交変換は以下の式(56)のように表現され、後者の2次元直交変換は以下の式(57)のように表現される。
つまり、例えば、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、予測残差の直交変換に用いる変換行列との間に水平方向の対称性が存在する場合、操作部が、予測残差を水平方向にフリップし、直交変換部が、その操作部により水平方向にフリップされた予測残差を、ベースとなる変換行列を用いて直交変換するようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による直交変換との間に水平方向の対称性が存在する他の変換行列による直交変換を実現することができる。
逆直交変換についても同様である。つまり、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、係数データの逆直交変換に用いる変換行列との間に水平方向の対称性が存在する場合、逆直交変換部が、ビットストリームを復号して得られた係数データを、ベースとなる変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果を、水平方向にフリップするようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による逆直交変換との間に水平方向の対称性が存在する他の変換行列による逆直交変換を実現することができる。
また例えば、図65の左側には、予測残差Xに対して、DST7の変換行列を用いた水平方向の1次元直交変換と、DST7の変換行列をフリップしたFlipDST7を用いた垂直方向の1次元直交変換とを行う2次元直交変換が示される。また、図65の右側には、予測残差Xを垂直方向にフリップした予測残差X'(= J・X)に対して、DST7の変換行列を用いた水平方向・垂直方向の1次元直交変換を行う2次元直交変換が示される。これらは互いに垂直方向に対称性を有しており、等価である。したがって、例えば後者の2次元直交変換により、前者の2次元直交変換を代替することができる。なお、前者の2次元直交変換は以下の式(58)のように表現され、後者の2次元直交変換は以下の式(59)のように表現される。
つまり、例えば、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、予測残差の直交変換に用いる変換行列との間に垂直方向の対称性が存在する場合、操作部が、予測残差を垂直方向にフリップし、直交変換部が、その操作部により垂直方向にフリップされた予測残差を、ベースとなる変換行列を用いて直交変換するようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による直交変換との間に垂直方向の対称性が存在する他の変換行列による直交変換を実現することができる。
逆直交変換についても同様である。つまり、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、係数データの逆直交変換に用いる変換行列との間に垂直方向の対称性が存在する場合、逆直交変換部が、ビットストリームを復号して得られた係数データを、ベースとなる変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果を、垂直方向にフリップするようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による逆直交変換との間に垂直方向の対称性が存在する他の変換行列による逆直交変換を実現することができる。
さらに例えば、図66の左側には、予測残差Xに対して、DST7の変換行列をフリップしたFlipDST7を用いた水平方向・垂直方向の1次元直交変換を行う2次元直交変換が示される。また、図66の右側には、予測残差Xを水平方向・垂直方向にフリップした予測残差X'(= J・X・J)に対して、DST7の変換行列を用いた水平方向・垂直方向の1次元直交変換を行う2次元直交変換が示される。これらは互いに水平方向・垂直方向の両方に対称性を有しており、等価である。したがって、例えば後者の2次元直交変換により、前者の2次元直交変換を代替することができる。なお、前者の2次元直交変換は以下の式(60)のように表現され、後者の2次元直交変換は以下の式(61)のように表現される。
つまり、例えば、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、予測残差の直交変換に用いる変換行列との間に水平方向および垂直方向の対称性が存在する場合、操作部が、予測残差を水平方向および垂直方向にフリップし、直交変換部が、その操作部により水平方向および垂直方向にフリップされた予測残差を、ベースとなる変換行列を用いて直交変換するようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による直交変換との間に水平方向および垂直方向の対称性が存在する他の変換行列による直交変換を実現することができる。
逆直交変換についても同様である。つまり、ベースとなる変換行列(変換タイプ)と、その変換行列を用いて導出した、係数データの逆直交変換に用いる変換行列との間に水平方向および垂直方向の対称性が存在する場合、逆直交変換部が、ビットストリームを復号して得られた係数データを、ベースとなる変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果を、水平方向および垂直方向にフリップするようにしてもよい。このようにすることにより、実質的に、ベースとなる変換行列による逆直交変換との間に水平方向および垂直方向の対称性が存在する他の変換行列による逆直交変換を実現することができる。
なお、上述の式(60)の場合、変換行列T1とT2をそれぞれフリップするので、操作が2回必要になる。これに対して、上述の式(61)の場合、予測残差のフリップ(J・X・J)は、置換行列Pと予測残差Xとの行列積に置換することができる。すなわち、1回の操作で行うことができる。したがって、上述の式(60)の場合(変換行列をフリップする場合)に比べて、操作の回数を低減させることができ、直交変換・逆直交変換の処理量の増大を抑制することができる(直交変換・逆直交変換をより容易に行うことができる)。すなわち、直交変換・逆直交変換の処理の負荷の増大を抑制することができる。また、直交変換・逆直交変換をより高速に行うことができる。
<変換行列の符号反転>
以上の予測残差の置換操作とともに、変換行列の操作も適用するようにしてもよい。例えば、導出部が第1の変換行列を用いて第2の変換行列を導出し、操作部が予測残差を1次元直交変換の間の空間対称性の方向にフリップし、直交変換部が、操作部によりフリップされた予測残差を、導出部により導出された第2の変換行列を用いて直交変換するようにしてもよい。このようにすることにより、実質的に他の変換行列による直交変換を実現することができる。したがって、直交変換のために用意する変換行列の数の増大を抑制することができ、直交変換に必要なメモリ容量の増大を抑制することができる。
逆直交変換についても同様である。例えば、導出部が第1の変換行列を用いて第2の変換行列を導出し、逆直交変換部が、導出部により導出された第2の変換行列を用いて、復号部により得られた係数データを逆直交変換し、操作部が、逆直交変換部により得られた係数データの逆直交変換結果を置換操作するようにしてもよい。このようにすることにより、実質的に他の変換行列による逆直交変換を実現することができる。したがって、逆直交変換のために用意する変換行列の数の増大を抑制することができ、逆直交変換に必要なメモリ容量の増大を抑制することができる。
なお、この直交変換または逆直交変換における第2の変換行列の導出の際、導出部が、第1の変換行列と行数および列数が同一の第2の変換行列を導出するようにしてもよい。行数および列数を変化させる場合、波形のタイプが意図せずに変化する可能性がある。したがって、行数および列数を第1の変換行列と同一とすることにより、波形のタイプの意図しない変化が生じる可能性を抑制することができ、第2の変換行列の導出をより容易に行うことができる。
また、その第2の変換行列の導出の際に、導出部が、第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、第2の変換行列を導出するようにしてもよい。このように導出した第2の変換行列を用いて、上述のように予測残差を置換操作した直交変換することにより、第1の変換行列に対して偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である他の変換行列による予測残差の直交変換を実現する(代替する)ことができる。また、このように導出した第2の変換行列を用いて逆直交変換し、その逆直交変換結果を上述のように置換操作することにより、第1の変換行列に対して偶数番目の行ベクトルが軸対称であり、奇数番目の行ベクトルが点対称である他の変換行列を用いた逆直交変換を実現する(代替する)ことができる。
<予測残差の操作例>
以上のような他の変換行列による直交変換・逆直交変換を代替するための予測残差の操作例の一覧を図67に示す。
図67に示される表において、最上段の項目名の行を除き、上から1段目の例の操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)に、1次元直交変換の間の軸対称があることに着目したものである。
この場合、操作部は、予測残差を、1次元直交変換の間の空間対称性の方向にフリップし、直交変換部は、その操作部によりフリップされた予測残差を、ベースとなる変換行列を用いて直交変換する。より具体的には、操作部が予測残差をフリップし、直交変換部がDST7の変換行列をベース変換行列Tbaseとし、フリップされた予測残差をそのDST7の変換行列を用いて直交変換する。このようにすることにより、FlipDST7の変換行列を用いたフリップされていない予測残差の直交変換を代替することができる。なお、予測残差のフリップの方向は、空間対称性の方向(水平方向若しくは垂直方向、またはその両方)に対応する。
逆直交変換の場合も同様である。逆直交変換部は、ビットストリームを復号して得られた係数データを、ベースとなる変換行列を用いて逆直交変換し、操作部は、その逆直交変換結果を、1次元直交変換の間の空間対称性の方向にフリップする。より具体的には、逆直交変換部が、DST7の変換行列を用いて係数データを逆直交変換し、操作部がその逆直交変換結果をフリップする。このようにすることにより、FlipDST7の変換行列を用いた係数データの逆直交変換を代替することができる。なお、逆直交変換結果のフリップの方向は、空間対称性の方向(水平方向若しくは垂直方向、またはその両方)に対応する。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてFlipDST7の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、このような予測残差(逆直交変換結果も含む)の操作を伴う直交変換・逆直交変換を行うことにより、FlipDST7の変換行列を用いる直交変換・逆直交変換の場合と同程度の符号化効率が得られる。
また、そのFlipDST7の変換行列を用いる直交変換・逆直交変換の場合と比較して、予測残差(逆直交変換結果も含む)に対する2次元のフリップ操作を一括した操作で行うことができるので、フリップ操作の回数を低減することができる。したがって、直交変換・逆直交変換の処理量の増大を抑制することができる(直交変換・逆直交変換をより容易に行うことができる)。すなわち、直交変換・逆直交変換の処理の負荷の増大を抑制することができる。また、直交変換・逆直交変換をより高速に行うことができる。
また、その1段下の(上から2段目の)例の操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)についての1次元直交変換の間の類似性に着目したものである。より具体的には、偶数番目の行ベクトルが軸対称性を持ち、奇数番目の行ベクトルが点対称性を持つことに着目している。
この場合、導出部が、第1の変換行列を用いて第2の変換行列を導出し、操作部が、画像の予測残差を置換操作し、直交変換部が、その操作部により置換操作された予測残差を、導出部により導出された第2の変換行列を用いて直交変換する。より具体的には、導出部が、DST7の変換行列の奇数番目の行ベクトルを符号反転し、操作部が、予測残差をフリップし、直交変換部が、フリップされた予測残差を、導出部により導出された、DST7の変換行列の奇数番目の行ベクトルを符号反転した変換行列を用いて直交変換する。このようにすることにより、DCT8の変換行列を用いたフリップされていない予測残差の直交変換を代替することができる。
なお、予測残差のフリップの方向は、空間対称性の方向(水平方向若しくは垂直方向、またはその両方)に対応する。また、変換行列への操作は奇数番目の行ベクトルに対する符号反転だけなので、導出部により導出される変換行列の行数および列数は、DST7の変換行列と同一である。
逆直交変換の場合も同様である。導出部が、第1の変換行列を用いて第2の変換行列を導出し、逆直交変換部が、ビットストリームを復号して得られた係数データを、その第2の変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果を、1次元直交変換の間の空間対称性の方向にフリップする。より具体的には、導出部が、DST7の変換行列の奇数番目の行ベクトルを符号反転し、逆直交変換部が、その奇数番目の行ベクトルが符号反転されたDST7の変換行列を用いて係数データを逆直交変換し、操作部がその逆直交変換結果をフリップする。このようにすることにより、DCT8の変換行列を用いた係数データの逆直交変換を代替することができる。
なお、逆直交変換結果のフリップの方向は、空間対称性の方向(水平方向若しくは垂直方向、またはその両方)に対応する。また、変換行列への操作は奇数番目の行ベクトルに対する符号反転だけなので、導出部により導出される変換行列の行数および列数は、DST7の変換行列と同一である。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。すなわち、LUTサイズの増大を抑制することができる。また、このような予測残差(逆直交変換結果も含む)の操作を伴う直交変換・逆直交変換を行うことにより、DCTの変換行列を用いる直交変換・逆直交変換の場合と同一の符号化効率が得られる。
また、その1段下の(上から3段目の)例の操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)に、1次元直交変換の間の軸対称があることに着目したものであり、上から1段目と同一の操作である。
ただし、この場合、DCT8の変換行列をベース変換行列Tbaseとしている。したがって、このようにすることにより、FlipDCT8の変換行列を用いたフリップされていない予測残差の直交変換を代替することができる。逆直交変換の場合も同様である。つまり、このようにすることにより、FlipDCT8の変換行列を用いた係数データの逆直交変換を代替することができる。
また、その1段下の(上から4段目の)例の操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)についての1次元直交変換の間の類似性(偶数番目の行ベクトルが軸対称性を持ち、奇数番目の行ベクトルが点対称性を持つこと)に着目したものであり、上から2段目と同一の操作である。
ただし、この場合、DCT8の変換行列をベース変換行列Tbaseとしている。したがって、このようにすることにより、DST7の変換行列を用いたフリップされていない予測残差の直交変換を代替することができる。逆直交変換の場合も同様である。つまり、このようにすることにより、DST7の変換行列を用いた係数データの逆直交変換を代替することができる。
なお、上述した各導出例は、それぞれ単独で実施するようにしてもよいし、複数の導出例を組み合わせて実施するようにしてもよい。また、上述した例では、ベース変換タイプ(第1の変換タイプ)の例として、DST7、あるいはDCT8を用いて説明したが、図8にある通り同型の波形形状を有する変換タイプに置き換えても実現することができる。例えば、DST7をDST4、DST8、DST3など同型の波形形状を有するその他の直交変換に置き換えてもよい。同様に、DCT8をDCT3、DCT7、DCT4など同型の波形形状を有するその他の直交変換に置き換えてもよい。
<構成および処理の流れ>
このような予測残差の置換操作を行う画像符号化装置100の構成は、第1の実施の形態の場合と同様である。そして、この画像符号化装置100において、直交変換部113は、操作部および直交変換部として、上述した本技術を適用した処理を行う。また、符号化部115は、符号化部として、上述した本技術を適用した処理を行う。さらに逆直交変換部118は、逆直交変換部および操作部として、上述した本技術を適用した処理を行う。したがって、画像符号化装置100は、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、直交変換部113の構成は、第1の実施の形態の場合と同様である。そして、この直交変換部113において、プライマリ変換部152は、操作部および直交変換部として、上述した本技術を適用した処理を行う。つまり、操作部は、画像の予測残差を置換操作し、直交変換部は、ベースとなる変換行列を用いて、その操作部により置換操作された予測残差に対するプライマリ変換を行う。したがって、プライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、上述のようにプライマリ変換部152は、プライマリ変換として、プライマリ水平変換とプライマリ垂直変換とを行う。つまり、操作部は、画像の予測残差を置換操作し、直交変換部は、その置換操作された予測残差に対して、プライマリ変換として、ベースとなる水平方向の1次元直交変換用の第2の変換行列を用いて、水平方向の1次元直交変換を行い、さらに、ベースとなる垂直方向の1次元直交変換用の第2の変換行列を用いて、垂直方向の1次元直交変換を行う。したがって、このような、水平方向の1次元直交変換および垂直方向の1次元直交変換が行われるプライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、画像符号化装置100により実行される画像符号化処理の流れは、第1の実施の形態の場合と同様である。つまり、以上のような流れの画像符号化処理において、ステップS106の処理として、上述した本技術を適用した処理が行われる。また、ステップS109の処理として、上述した本技術を適用した処理が行われる。さらに、ステップS113の処理として、上述した本技術を適用した処理が行われる。したがって、この画像符号化処理を実行することにより、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、その画像符号化処理のステップS106において実行される直交変換処理の流れは、第1の実施の形態の場合と同様である。つまり、以上のような流れの直交変換処理において、ステップS132の処理として、上述した本技術を適用した処理が行われる。したがって、この直交変換処理を実行することにより、プライマリ変換に必要なメモリ容量の増大を抑制することができる。
また、復号側も同様である。つまり、このような逆直交変換結果の置換操作を行う画像復号装置200の構成は、第1の実施の形態の場合と同様である。そして、この画像復号装置200において、逆直交変換部214は、逆直交変換部および操作部として、上述した本技術を適用した処理を行う。また、復号部212は、復号部として、上述した本技術を適用した処理を行う。したがって、画像復号装置200は、逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、逆直交変換部214の構成は、第1の実施の形態の場合と同様である。そして、この逆直交変換部214において、逆プライマリ変換部253は、逆直交変換部および操作部として、上述した本技術を適用した処理を行う。つまり、逆直交変換部は、ベースとなる変換行列を用いて、逆セカンダリ変換結果に対する逆プライマリ変換を行い、操作部は、得られた逆プライマリ変換結果を置換操作する。したがって、逆プライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、上述のように逆プライマリ変換部253は、逆プライマリ変換として、逆プライマリ垂直変換と逆プライマリ水平変換とを行う。つまり、逆直交変換部は、逆セカンダリ変換結果に対して、逆プライマリ変換として、ベースとなる垂直方向の逆1次元直交変換用の第2の変換行列を用いて、垂直方向の逆1次元直交変換を行い、さらに、ベースとなる水平方向の逆1次元直交変換用の第2の変換行列を用いて、水平方向の逆1次元直交変換を行う。したがって、このような、垂直方向の逆1次元直交変換および水平方向の逆1次元直交変換が行われるプライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、画像復号装置200により実行される画像復号処理の流れは、第1の実施の形態の場合と同様である。つまり、以上のような流れの画像復号処理において、ステップS202の処理として、上述した本技術を適用した処理が行われる。また、ステップS204の処理として、上述した本技術を適用した処理が行われる。したがって、この画像復号処理を実行することにより、逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、その画像復号処理のステップS204において実行される逆直交変換処理の流れは、第1の実施の形態の場合と同様である。つまり、以上のような流れの逆直交変換処理において、ステップS233の処理として、上述した本技術を適用した処理が行われる。したがって、この逆直交変換処理を実行することにより、逆プライマリ変換に必要なメモリ容量の増大を抑制することができる。
<3-2.実施例2-1>
<コンセプト>
次に、図67を参照して説明した各導出例について、より詳細に説明する。最初に、図67に示される表において、最上段の項目名の行を除き、上から1段目の例の操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)に、1次元直交変換の間の軸対称があることに着目したものである。
この場合、操作部は、予測残差をフリップする。直交変換部は、そのフリップされた予測残差を、ベース変換行列(DST7の変換行列)を用いて直交変換する。このようにすることにより、DST7の変換行列をフリップしたFlipDST7(<2-2.実施例1-1>参照)の変換行列を用いた予測残差の直交変換を代替することができる。
逆直交変換についても同様である。この場合、逆直交変換部は、係数データを、ベース変換行列(DST7の変換行列)を用いて逆直交変換し、操作部は、逆直交変換結果をフリップする。このようにすることにより、DST7の変換行列をフリップしたFlipDST7の変換行列を用いた係数データ(変換係数Coeff_IQ)の逆直交変換を代替することができる。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてFlipDST7の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。
この場合、図68の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を4種類に低減させることができるので、LUTサイズの合計は約47KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
また、そのFlipDST7の変換行列を用いる直交変換・逆直交変換の場合と比較して、予測残差(逆直交変換結果も含む)に対する2次元のフリップ操作を一括した操作で行うことができるので、フリップ操作の回数を低減することができる。したがって、直交変換・逆直交変換の処理量の増大を抑制することができる(直交変換・逆直交変換をより容易に行うことができる)。
また、このような予測残差(逆直交変換結果も含む)の操作を伴う直交変換・逆直交変換を行うことにより、FlipDST7の変換行列を用いる直交変換・逆直交変換の場合と同程度の符号化効率が得られる。
<プライマリ変換部>
次に、このような処理を行うための構成や処理等について説明する。図69は、この場合のプライマリ変換部152の主な構成例を示すブロック図である。図69に示されるように、この場合のプライマリ変換部152は、図22に示される構成に加え、予測残差置換操作部551を有する。
プライマリ変換選択部311は、導出したプライマリ水平変換の変換タイプ識別子TrTypeIdxHおよびプライマリ垂直変換の変換タイプ識別子TrTypeIdxVを予測残差置換操作部551にも供給する。
予測残差置換操作部551は、スイッチ151から供給される予測残差D、並びに、プライマリ水平変換の変換タイプ識別子TrTypeIdxHおよびプライマリ垂直変換の変換タイプ識別子TrTypeIdxVを入力とする。予測残差置換操作部551は、予測残差Dを、変換タイプ識別子TrTypeIdxHおよび変換タイプ識別子TrTypeIdxVに応じてフリップする。予測残差置換操作部551は、そのフリップ後の予測残差Dflipをプライマリ水平変換部312に供給する。
以上のような構成のプライマリ変換部152において、予測残差置換操作部551は、操作部として、上述した本技術を適用した処理を行う。プライマリ水平変換部312およびプライマリ垂直変換部313は、それぞれ、直交変換部として、上述した本技術を適用した処理を行う。
つまり、プライマリ水平変換部312は、直交変換部として、ベースとなる水平方向の1次元直交変換用の変換行列を用いて、フリップ後の予測残差Dflipに対して、水平方向の1次元直交変換を行う。したがって、プライマリ水平変換部312は、水平方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
また、プライマリ垂直変換部313は、直交変換部として、ベースとなる垂直方向の1次元直交変換用の変換行列を用いて、プライマリ水平変換後の変換係数Coeff_Phorに対して、垂直方向の1次元直交変換を行う。したがって、プライマリ垂直変換部313は、垂直方向の1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<プライマリ変換処理の流れ>
次に、上述した構成により行われる処理の流れの例等について説明する。この場合の、図14のステップS132において実行されるプライマリ変換処理の流れの例を、図70のフローチャートを参照して説明する。
プライマリ変換処理が開始されると、プライマリ変換部152のプライマリ変換選択部311は、ステップS561において、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)と、プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)とを、それぞれ選択する。
ステップS562において、予測残差置換操作部551は、予測残差置換操作処理を実行し、ステップS561において得られた変換タイプ識別子TrTypeIdxHおよび変換タイプ識別子TrTypeIdxVに応じて、予測残差Dをフリップし、フリップ後の予測残差Dflipを導出する。
ステップS563において、プライマリ水平変換部312は、プライマリ水平変換処理を行い、ステップS561において得られたプライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する変換行列を用いて、ステップS562において得られたフリップ後の予測残差Dflipに対してプライマリ水平変換を行う。
ステップS564において、プライマリ垂直変換部313は、プライマリ垂直変換処理を行い、ステップS561において得られたプライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する変換行列を用いて、ステップS563の処理により得られるプライマリ水平変換後の変換係数Coeff_Phorに対してプライマリ垂直変換を行う。
ステップS564の処理が終了するとプライマリ変換処理が終了し、処理は図14に戻る。
以上のようなプライマリ変換処理において、ステップS562乃至ステップS564の各処理として、上述した本技術を適用した処理が行われる。したがって、このプライマリ変換処理を実行することにより、プライマリ水平変換処理やプライマリ垂直変換処理に必要なメモリ容量の増大を抑制することができる。
<予測残差置換操作処理の流れ>
図70のステップS562において実行される予測残差置換操作処理の流れについて、図71のフローチャートを参照して説明する。
予測残差置換操作処理が開始されると、予測残差置換操作部551は、ステップS581において、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)に対応するフリップフラグFlipFlagHと、プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)に対応するフリップフラグFlipFlagVとを導出する。その際、予測残差置換操作部551は、例えば、図72に示されるような対応表(LUT_TrTypeIdxToFlipFlag)を参照してフリップフラグFlipFlagHとフリップフラグFlipFlagVとを求める。これらのフリップフラグの導出は、例えば、以下の式(62)および式(63)のように表すことができる。
ステップS582において、予測残差置換操作部551は、ステップS581において導出したフリップフラグFlipFlagHおよびフリップフラグFlipFlagVが以下の式(64)で示される条件を満たすか否かを判定する。
この条件を満たすと判定された場合、すなわち、FlipFlagHが真(1)であり、かつ、FlipFlagVが偽(0)であると判定された場合、処理はステップS583に進む。
ステップS583において、予測残差置換操作部551は、予測残差Dを水平方向にフリップしてフリップ後の予測残差Dflipを得る。この操作を行列表現すると以下の式(65)のように表すことができる。
ここで、×は行列積を表す演算子であり、FlipH(X)は、行列Xを水平方向へのフリップ操作を表す演算子であり、FlipV(・)に対応するフリップ行列Jは、N行N列の単位行列Iを左右反転したものである。また、この操作を要素毎の演算として表現する場合、予測残差置換操作部551は、以下の式(66)のように、フリップ後の予測残差Dflipのi行j列成分((i,j)成分)に、予測残差Dの(i,N-1-j)成分を設定する。
ただし、予測残差Dのサイズは横幅N、縦幅M(M行N列)である。このN、Mは、以下の式(67)および式(68)を満たす。
ステップS583の処理が終了すると、処理はステップS588に進む。また、ステップS582において、条件を満たさないと判定された場合、すなわち、FlipFlagHが偽(0)であるか、または、FlipFlagVが真(1)であると判定された場合、処理はステップS584に進む。
ステップS584において、予測残差置換操作部551は、ステップS581において導出したフリップフラグFlipFlagHおよびフリップフラグFlipFlagVが以下の式(69)で示される条件を満たすか否かを判定する。
この条件を満たすと判定された場合、すなわち、FlipFlagHが偽(0)であり、かつ、FlipFlagVが真(1)であると判定された場合、処理はステップS585に進む。
ステップS585において、予測残差置換操作部551は、予測残差Dを垂直方向にフリップしてフリップ後の予測残差Dflipを得る。この操作を行列表現すると以下の式(70)のように表すことができる。
ここで、×は行列積を表す演算子であり、FlipV(X)は、行列Xを垂直方向へのフリップ操作を表す演算子であり、FlipV(・)に対応するフリップ行列Jは、M行M列の単位行列Iを左右反転したものである。また、この操作を要素毎の演算として表現する場合、予測残差置換操作部551は、以下の式(71)のように、フリップ後の予測残差Dflipのi行j列成分((i,j)成分)に、予測残差Dの(M-1-i,j)成分を設定する。ただし、予測残差Dのサイズは横幅N、縦幅M(M行N列)であり、このN、Mは、上述の式(67)および式(68)を満たす。
ステップS585の処理が終了すると、処理はステップS588に進む。また、ステップS584において、条件を満たさないと判定された場合、すなわち、FlipFlagHが真(1)であるか、または、FlipFlagVが偽(0)であると判定された場合、処理はステップS586に進む。
ステップS586において、予測残差置換操作部551は、ステップS581において導出したフリップフラグFlipFlagHおよびフリップフラグFlipFlagVが以下の式(72)で示される条件を満たすか否かを判定する。
この条件を満たすと判定された場合、すなわち、FlipFlagHが真(1)であり、かつ、FlipFlagVが真(1)であると判定された場合、処理はステップS587に進む。
ステップS587において、予測残差置換操作部551は、予測残差Dを水平方向および垂直方向にフリップしてフリップ後の予測残差Dflipを得る。この操作を行列表現すると以下の式(73)のように表すことができる。
ここで、×は行列積を表す演算子であり、フリップ行列J1は、N行N列の単位行列Iを左右反転したものであり、フリップ行列J2はM行M列の単位行列Iを左右反転したものである。なお、フリップ行列Jは、転置してもフリップ行列Jと等価である(JT = J)。また、この操作を要素毎の演算として表現する場合、予測残差置換操作部551は、以下の式(74)のように、フリップ後の予測残差Dflipのi行j列成分((i,j)成分)に、予測残差Dの(M-i-1,N-j-1)成分を設定する。ただし、予測残差Dのサイズは横幅N、縦幅M(M行N列)であり、このN、Mは、上述の式(67)および式(68)を満たす。
ステップS587の処理が終了すると、処理はステップS588に進む。
ステップS588において、予測残差置換操作部551は、以下の式(75)のように、フリップ後の予測残差Dflipを予測残差Dとする。つまり、この予測残差D(フリップ後の予測残差Dflip)に対してプライマリ水平変換処理(図70のステップS563)が行われる。
ステップS588の処理が終了すると、予測残差置換操作処理が終了し、処理は図70に戻る。また、ステップS586において、条件を満たさないと判定された場合、すなわち、FlipFlagHが偽(0)であるか、または、FlipFlagVが偽(0)であると判定された場合、予測残差置換操作処理が終了し、処理は図70に戻る。
以上のように予測残差置換操作処理を行うことにより、予測残差置換操作部551は、2次元直交変換(予測残差を含む)が有する空間対称性の方向に(すなわち、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)およびプライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)に対応する方向に)予測残差をフリップさせることができる。
<逆プライマリ変換部>
次に、本実施例の場合の画像復号装置200の構成について説明する。図73は、この場合の逆プライマリ変換部253(図16)の主な構成例を示すブロック図である。図73に示されるように、この場合の逆プライマリ変換部253は、図34に示される構成に加え、予測残差置換操作部552を有する。
逆プライマリ変換選択部411は、導出した逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVおよび逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxHを予測残差置換操作部551にも供給する。また、逆プライマリ水平変換部413は、導出した逆プライマリ水平変換後の変換係数Coeff_IPhorを予測残差置換操作部552に供給する。
予測残差置換操作部552は、逆プライマリ水平変換部413から供給される逆プライマリ水平変換後の変換係数Coeff_IPhor、並びに、プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)およびプライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)を入力とする。予測残差置換操作部552は、逆プライマリ水平変換後の変換係数Coeff_IPhorを、変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)および変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)に応じてフリップする。予測残差置換操作部552は、そのフリップした変換係数Coeff_IPhor(逆プライマリ変換後の変換係数Coeff_IP)を、予測残差D'として、逆プライマリ変換部253の外部に出力する(演算部215に供給する)。
以上のような構成の逆プライマリ変換部253において、予測残差置換操作部552は、操作部として、上述した本技術を適用した処理を行う。逆プライマリ垂直変換部412および逆プライマリ水平変換部413は、それぞれ、逆直交変換部として、上述した本技術を適用した処理を行う。
つまり、逆プライマリ垂直変換部412は、逆直交変換部として、ベースとなる垂直方向の逆1次元直交変換用の変換行列を用いて、逆セカンダリ変換後の変換係数Coeff_ISに対して、垂直方向の逆1次元直交変換を行う。この変換係数が、その後、予測残差置換操作部552により上述のようにフリップされることにより、他の変換行列を用いた垂直方向の逆1次元直交変換を代替することができる。したがって、逆プライマリ垂直変換部412は、垂直方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
また、逆プライマリ水平変換部413は、逆直交変換部として、ベースとなる水平方向の逆1次元直交変換用の変換行列を用いて、逆プライマリ垂直変換後の変換係数Coeff_IPverに対して、水平方向の逆1次元直交変換を行う。この変換係数が、その後、予測残差置換操作部552により上述のようにフリップされることにより、他の変換行列を用いた水平方向の逆1次元直交変換を代替することができる。したがって、逆プライマリ水平変換部413は、水平方向の逆1次元直交変換に必要なメモリ容量の増大を抑制することができる。
<逆プライマリ変換処理の流れ>
次に、上述した構成により行われる処理の流れの例等について説明する。この場合の、図18のステップS233において実行される逆プライマリ変換処理の流れの例を、図74のフローチャートを参照して説明する。
逆プライマリ変換処理が開始されると、逆プライマリ変換部253の逆プライマリ変換選択部411は、ステップS601において、逆プライマリ変換選択処理を行い、逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxV(または変換タイプTrTypeV)と、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxH(または変換タイプTrTypeH)とをそれぞれ選択する。
ステップS602において、逆プライマリ垂直変換部412は、逆プライマリ垂直変換処理を行い、ステップS601において得られた逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVに対応する変換行列を用いて、逆セカンダリ変換後の変換係数Coeff_ISに対して垂直方向の逆1次元直交変換を行う。
ステップS603において、逆プライマリ水平変換部413は、逆プライマリ水平変換処理を行い、ステップS601において得られた逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHに対応する変換行列を用いて、ステップS602において導出された逆プライマリ垂直変換後の変換係数Coeff_IPverに対して水平方向の逆1次元直交変換を行う。
ステップS604において、予測残差置換操作部552は、予測残差置換操作処理を行い、ステップS601において得られた逆プライマリ垂直変換の変換タイプ識別子TrTypeIdxVと、逆プライマリ水平変換の変換タイプ識別子TrTypeIdxHとを用いて、ステップS603において導出された逆プライマリ水平変換後の変換係数Coeff_IPhorをフリップし、逆プライマリ変換後の変換係数Coeff_IP(予測残差D')を導出する。
この予測残差置換操作処理は、図71のフローチャートを参照して説明した例と同様の流れで行われる。したがって、図71に関する説明は、適宜、予測残差Dを変換係数Coeff_IPhorに置き換える等すれば、このステップS604の処理にも適用することができるので、その説明を省略する。
ステップS604の処理が終了すると逆プライマリ変換処理が終了し、処理は図18に戻る。
以上のような逆プライマリ変換処理において、ステップS602乃至ステップS604の各処理として、上述した本技術を適用した処理が行われる。したがって、この逆プライマリ変換処理を実行することにより、逆プライマリ垂直変換処理や逆プライマリ水平変換処理に必要なメモリ容量の増大を抑制することができる。
<3-3.実施例2-2>
<コンセプト>
次に、図67に示される表において、最上段の項目名の行を除き、上から2段目の例について説明する。この操作は、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)についての1次元直交変換の間の類似性に着目したものである。より具体的には、偶数番目の行ベクトルが軸対称性を持ち、奇数番目の行ベクトルが点対称性を持つことに着目している。
この場合、導出部は、第1の変換行列を用いて第2の変換行列を導出し、操作部は、予測残差を置換操作し、直交変換部は、その置換操作された予測残差を、第2の変換行列を用いて直交変換する。例えば、DST7の変換行列をベース変換行列とし、導出部が、そのDST7の変換行列の奇数番目の行ベクトルの符号を反転し、操作部が、予測残差をフリップし、直交変換部が、フリップした予測残差を、奇数番目の行ベクトルを符号反転したDST7の変換行列を用いて直交変換する。このようにすることにより、DST7の変換行列をフリップし、その奇数番目の行ベクトルを符号反転した変換行列(すなわち、DCT8(<2-3.実施例1-2>参照))を用いた予測残差の直交変換を代替することができる。
逆直交変換についても同様である。この場合、導出部は、第1の変換行列を用いて第2の変換行列を導出し、逆直交変換部は、係数データを、第2の変換行列を用いて逆直交変換し、操作部は、逆直交変換結果を置換操作する。例えば、DST7の変換行列をベース変換行列とし、導出部が、そのDST7の変換行列の奇数番目の行ベクトルの符号を反転し、逆直交変換部が、係数データを、奇数番目の行ベクトルを符号反転したDST7の変換行列を用いて逆直交変換し、操作部が、その逆直交変換結果をフリップする。このようにすることにより、DST7の変換行列をフリップし、その奇数番目の行ベクトルを符号反転した変換行列(すなわち、DCT8(<2-3.実施例1-2>参照))を用いた係数データ(変換係数Coeff_IQ)の逆直交変換を代替することができる。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDCT8の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。
この場合、図75の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を4種類に低減させることができるので、LUTサイズの合計は約47KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
<変換行列導出部>
この場合、プライマリ変換部152は、<3-2.実施例2-1>の場合と同様の構成を有する。また、プライマリ水平変換部312は、<3-2.実施例2-1>の場合と同様の構成を有する。また、プライマリ垂直変換部313は、<3-2.実施例2-1>の場合と同様の構成を有する。ただし、プライマリ水平変換部312が有する変換行列導出部321の内部の構成と、プライマリ垂直変換部313が有する変換行列導出部351の内部の構成とが、<3-2.実施例2-1>の場合と異なる。
図76は、この場合のプライマリ水平変換部312が有する変換行列導出部321の主な構成例を示すブロック図である。図76に示されるように、この場合の変換行列導出部321は、変換行列LUT331および符号反転部561を有する。なお、図76においては、データの授受を示す矢印を省略しているが、変換行列導出部321は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
符号反転部561は、符号反転部501(図46)と同様の処理部であり、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例(実施例2-2)の場合、変換行列導出部321は、符号反転部561を介して、変換行列LUT331において選択したN行N列のベース変換行列Tbaseの奇数次行ベクトルの符号を反転し、変換行列TInvSignを導出する。変換行列導出部321は、その変換行列TInvSignを、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
以上のように、変換行列導出部321は、符号反転部561を用いて、図67に示される表の上から2段目の例の、プライマリ水平変換における「ベース変換行列Tbaseの操作」を実現することができる。
<変換行列導出部>
図77は、この場合のプライマリ垂直変換部313が有する変換行列導出部351の主な構成例を示すブロック図である。図77に示されるように、この場合の変換行列導出部351は、変換行列導出部321の場合と同様に、変換行列LUT361および符号反転部562を有する。なお、図77においては、データの授受を示す矢印を省略しているが、変換行列導出部351は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
符号反転部562は、符号反転部502(図47)と同様の処理部であり、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例(実施例2-2)の場合、変換行列導出部351は、符号反転部562を介して、変換行列LUT361において選択したN行N列のベース変換行列Tbaseの奇数次行ベクトルの符号を反転し、変換行列TInvSignを導出する。符号反転部562は、その変換行列TInvSignを、変換行列TVとして、変換行列導出部351の外部に出力する(行列演算部352に供給する)。
以上のように、変換行列導出部351は、符号反転部562を用いて、図67に示される表の上から2段目の例の、プライマリ垂直変換における「ベース変換行列Tbaseの操作」を実現することができる。
<変換行列導出処理の流れ>
この場合のプライマリ変換処理は、<3-2.実施例2-1>の場合と同様の流れで行われる(図70のフローチャートと同様の流れで行われる)ので、その説明は基本的に省略する。
ただし、この場合、図70のステップS562において実行される予測残差置換操作処理(図71)のステップS581においては、予測残差置換操作部551が、図72に示される対応表の代わりに、図79に示される対応表(LUT_TrTypeIdxToFlipFlag)を参照してフリップフラグFlipFlagHとフリップフラグFlipFlagVとを求める。
また、この場合、図70のステップS563において実行されるプライマリ水平変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図28のフローチャートと同様の流れで行われる)が、図28のステップS321において実行される変換行列導出処理は、図30の例とは異なる流れで行われる。
この場合の、図28のステップS321において、プライマリ水平変換部312内の変換行列導出部321により実行される変換行列導出処理の流れの例を、図78のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS621において、例えば、図79に示される対応表(LUT_TrTypeIdxToFlipFlag)を参照し、変換タイプ識別子TrTypeIdxHに対応するベース変換タイプのベース変換行列Tbaseと、符号反転フラグInvSignFlagを導出する。
ステップS622において、変換行列導出部321は、ステップS621において導出した符号反転フラグInvSignFlagが真(1)であるか否かを判定する。符号反転フラグInvSignFlagが偽(0)であると判定された場合、処理はステップS623に進む。
ステップS623において、変換行列導出部321は、ステップS621において導出されたベース変換行列Tbase(DST7)を変換行列LUT331から読み出し、それを変換行列THに設定する。これを行列式で表すと以下の式(76)のようになる。
ステップS623の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。また、ステップS622において、符号反転フラグInvSignFlagが真(1)であると判定された場合、処理はステップS624に進む。
ステップS624において、変換行列導出部321は、ステップS621において導出されたベース変換行列Tbase(DST7)を変換行列LUT331から読み出し、符号反転部561を介してそのベース変換行列Tbase(DST7)の奇数番目の行ベクトルを符号反転し、それを変換行列THに設定する。これを行列式で表すと以下の式(77)のようになる。
ここで、×は行列積を表す演算子であり、符号反転行列Dは、Diag(1,-1,…,(-1)N-1)からなる対角行列である。
ステップS624の処理が終了すると、変換行列導出処理が終了し、処理は図28に戻る。
<変換行列導出処理の流れ>
なお、プライマリ垂直変換処理のステップS361(図32)において実行される変換行列導出処理の流れは、図78のフローチャートを参照して説明したプライマリ水平変換において実行される変換行列導出処理の場合と同様であるのでその説明を省略する。図78の説明において、適宜、変換タイプ識別子TrTypeIdxHを変換タイプ識別子TrTypeIdxVに置き換えたり、変換行列THを変換行列TVに置き換えたりすればよい。
<変換行列導出部>
次に、この場合の画像復号装置200の構成について説明する。この場合も画像復号装置200が有する逆プライマリ変換部253、逆プライマリ垂直変換部412、逆プライマリ水平変換部413等の構成は、<2-2.実施例1-1>の場合と同様であるのでその説明を省略する。
図80は、この場合の変換行列導出部421(逆プライマリ垂直変換部412が有する変換行列導出部421)の主な構成例を示すブロック図である。図80に示されるように、この場合の変換行列導出部421は、変換行列導出部321と同様に、変換行列LUT431および符号反転部571を有する。なお、図80においては、データの授受を示す矢印を省略しているが、変換行列導出部421は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT431は、図36の場合と同様である。符号反転部571は、符号反転部501と同様の処理部であり、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例(実施例2-2)の場合、変換行列導出部421は、符号反転部571を介して、変換行列LUT431において選択したN行N列のベース変換行列Tbaseの奇数次行ベクトルの符号を反転し、変換行列TInvSignを導出する。符号反転部571は、その変換行列TInvSignを、変換行列TVとして、変換行列導出部421の外部に出力する(行列演算部422に供給する)。
以上のように、変換行列導出部421は、符号反転部571を用いて、図67に示される表の上から2段目の例の、逆プライマリ垂直変換における「ベース変換行列Tbaseの操作」を実現することができる。
<変換行列導出部>
図81は、この場合の、逆プライマリ水平変換部413が有する変換行列導出部451の主な構成例を示すブロック図である。図81に示されるように、この場合の変換行列導出部451は、変換行列導出部421と同様に、変換行列LUT461および符号反転部572を有する。なお、図81においては、データの授受を示す矢印を省略しているが、変換行列導出部451は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
変換行列LUT461は、図80の場合と同様である。符号反転部572は、符号反転部571と同様の処理部であり、N行N列の変換行列Tを入力とし、その変換行列Tの所定箇所の符号を反転して、符号反転後の変換行列TInvSignを出力する。この導出例(実施例2-2)の場合、変換行列導出部451は、符号反転部572を介して、変換行列LUT461において選択したN行N列のベース変換行列Tbaseの奇数次行ベクトルの符号を反転し、変換行列TInvSignを導出する。符号反転部572は、その変換行列TInvSignを、変換行列THとして、変換行列導出部451の外部に出力する(行列演算部452に供給する)。
以上のように、変換行列導出部451は、符号反転部512を用いて、図67に示される表の上から2段目の例の、逆プライマリ垂直変換における「ベース変換行列Tbaseの操作」を実現することができる。
<変換行列導出処理の流れ>
なお、変換行列導出部421および変換行列導出部451は、図78のフローチャートを参照して説明した場合と同様の流れで、変換行列導出処理を行うので、その説明は省略する。
<3-4.実施例2-3>
<コンセプト>
次に、図67に示される表において、最上段の項目名の行を除き、上から3段目の例について説明する。この例は、上から1段目の例と同様に、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)に、1次元直交変換の間の軸対称があることに着目したものである。
この場合、操作部は、予測残差をフリップする。直交変換部は、そのフリップされた予測残差を、ベース変換行列(DCT8の変換行列)を用いて直交変換する。このようにすることにより、DCT8の変換行列をフリップしたFlipDCT8(<2-4.実施例1-3>参照)の変換行列を用いた予測残差の直交変換を代替することができる。
逆直交変換についても同様である。この場合、逆直交変換部は、係数データを、ベース変換行列(DCT8の変換行列)を用いて逆直交変換し、操作部は、逆直交変換結果をフリップする。このようにすることにより、DCT8の変換行列をフリップしたFlipDCT8の変換行列を用いた係数データ(変換係数Coeff_IQ)の逆直交変換を代替することができる。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてFlipDCT8の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。
ただし、この場合、予測残差置換操作処理(図71)においては、図72に示される対応表の代わりに、図82に示される対応表(LUT_TrTypeIdxToFlipFlag)が参照されるようにすればよい。
また、逆直交変換の場合も同様であり、直交変換の場合と同様の構成により、直交変換の場合と同様の処理を行えばよい。
<3-5.実施例2-4>
<コンセプト>
次に、図67に示される表において、最上段の項目名の行を除き、上から4段目の例について説明する。この例は、上から2段目の例と同様に、異なる2つの2次元直交変換において、ある方向(水平方向若しくは垂直方向、またはその両方)についての1次元直交変換の間の類似性(偶数番目の行ベクトルが軸対称性を持ち、奇数番目の行ベクトルが点対称性を持つこと)に着目したものであり、上から2段目と同一の操作である。
この場合、導出部は、第1の変換行列から第2の変換行列を導出し、操作部は、予測残差Dをフリップする。直交変換部は、そのフリップされた予測残差を、ベース変換行列(DCT8の変換行列)を符号反転したDST7の変換行列を用いて直交変換する。このようにすることにより、DCT8の変換行列をフリップして符号反転したDST7(<2-5.実施例1-4>参照)の変換行列を用いた予測残差の直交変換を代替することができる。
逆直交変換についても同様である。この場合、導出部は、DCT8の変換行列の奇数番目の行ベクトルを符号反転し、逆直交変換部は、係数データを、奇数番目の行ベクトルを符号反転されたDCT8の変換行列(すなわちDST7)を用いて逆直交変換し、操作部は、逆直交変換結果をフリップする。このようにすることにより、DCT8の変換行列をフリップして符号反転したDST7の変換行列を用いた係数データ(変換係数Coeff_IQ)の逆直交変換を代替することができる。
このような予測残差(逆直交変換結果も含む)に対する操作を適用することにより、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列を用意する必要が無くなる。つまり、第1の実施の形態の場合と同様に、固有変換タイプを削減することができる。
ただし、この場合、予測残差置換操作処理(図71)においては、図79に示される対応表の代わりに、図83に示される対応表(LUT_TrTypeIdxToFlipFlag)が参照されるようにすればよい。
また、逆直交変換の場合も同様であり、直交変換の場合と同様の構成により、直交変換の場合と同様の処理を行えばよい。
<4.第3の実施の形態>
<4-1.共通コンセプト>
<部分行列を用いた変換行列の導出>
第1の実施の形態においては、変換行列を用いて他の変換行列を導出する旨を説明したが、これに限らず、変換行列の一部である部分行列を用意し、その部分行列を用いて変換行列を導出するようにしてもよい。
つまり、変換行列の一部を構成する部分行列を用いてその変換行列を導出し、その導出された変換行列を用いて、画像の予測残差を直交変換し、予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成するようにしてもよい。
例えば、画像処理装置において、変換行列の一部を構成する部分行列を用いてその変換行列を導出する導出部と、その導出部により導出された変換行列を用いて、画像の予測残差を直交変換する直交変換部と、その直交変換部により予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部とを備えるようにしてもよい。
このようにすることにより、部分行列を保持しておけばよくなる(変換行列の全てを保持しておく必要がない)ので、直交変換に必要なメモリ容量の増大を抑制することができる。
また、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、変換行列の一部を構成する部分行列を用いてその変換行列を導出し、その導出された変換行列を用いて、得られた係数データを逆直交変換するようにしてもよい。
例えば、画像処理装置において、ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、変換行列の一部を構成する部分行列を用いてその変換行列を導出する導出部と、その導出部により導出された変換行列を用いて、復号部により得られた係数データを逆直交変換する逆直交変換部とを備えるようにしてもよい。
このようにすることにより、部分行列を保持しておけばよくなる(変換行列の全てを保持しておく必要がない)ので、逆直交変換に必要なメモリ容量の増大を抑制することができる。
<部分行列と変換行列全体との関係の例>
より具体的に説明する。例えば、図84に示されるように、DCT2の変換行列601の場合、その左部分の偶数番目の行ベクトルの波形と、右部分の偶数番目の行ベクトルの波形は、互いに軸対称の関係にある。また、その変換行列601の左部分の奇数番目の行ベクトルの波形は、互いに点対称の関係にある。
したがって、DCT2の変換行列601の左部分を構成する部分行列を、変換行列601の中心を通る列方向を軸として、水平方向(行方向)にフリップし、奇数番目の行ベクトルを符号反転することにより、DCT2の変換行列601の右部分を構成する部分行列を導出することができる。すなわち、DCT2の変換行列601は、その左部分を構成する部分行列から導出することができる。
また、例えば、DST7の変換行列602の場合、その左上三角部分の偶数番目の行ベクトルの波形と、右下三角部分の偶数番目の列ベクトルの波形は、互いに軸対称の関係にある。また、その変換行列602の左上三角部分の奇数番目の行ベクトルの波形と、右下三角部分の奇数番目の列ベクトルの波形とは、互いに点対称の関係にある。
したがって、DST7の変換行列602の左上三角部分を構成する部分行列を、変換行列602の右上端と左下端とを結ぶ対角線を軸として、左上右下の斜め方向にフリップし、奇数番目の列ベクトルを符号反転することにより、DST7の変換行列602の右下三角部分を構成する部分行列を導出することができる。すなわち、DST7の変換行列602は、その左上三角部分を構成する部分行列から導出することができる。
つまり、変換行列LUTには、変換行列全体を格納させる代わりに、その変換行列全体を導出可能な、その変換行列の部分行列を格納すればよい。例えば、導出部が、そのルックアップテーブル(変換行列LUT)に格納される部分行列を用いて、変換行列(全体)を導出するようにしてもよい。このようにすることにより、DCT2およびDST7の変換行列全体を格納する場合よりも、UTサイズの増大を抑制することができる。すなわち、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、この部分行列からの変換行列全体の導出のための操作として、上述したように、フリップを行うようにしてもよい。また、そのフリップの方向は任意である。例えば、導出部が、部分行列を、その変換行列の中心を通る所定の方向の軸を中心としてフリップしてその変換行列の残りの部分行列を導出することにより、変換行列を導出するようにしてもよい。このようにすることにより、簡易な操作により、部分行列から変換行列全体を導出することができる。
なお、このフリップの方向は任意である。例えば、導出部が、部分行列を行に平行な方向(行方向または水平方向とも称する)にフリップするようにしてもよい。また、例えば、導出部が、部分行列を列に平行な方向(列方向または垂直方向とも称する)にフリップするようにしてもよい。さらに、例えば、導出部が、部分行列を、その変換行列の中心を中心とする回転方向にフリップするようにしてもよい。また、例えば、導出部が、部分行列を、変換行列の対角線を軸とする斜め方向にフリップするようにしてもよい。
このようにすることにより、例えば、部分行列から、その部分行列に対して多様な方向に対称性を有する他の部分行列を、簡易な操作により導出することができる。
また、この部分行列からの変換行列全体の導出のための操作として、上述したように、符号反転を行うようにしてもよい。例えば、導出部が、さらに、フリップされた部分行列の要素の符号を反転して、変換行列を導出するようにしてもよい。このようにすることにより、簡単な操作により、部分行列からより多様な変換行列全体を導出することができる。
<導出例>
以上のような部分行列からの変換行列全体の導出例の一覧を図85に示す。なお、導出に用いる部分行列をベース部分行列とも称する。
図85に示される表において、最上段の項目名の行を除き、上から1段目の例の導出は、垂直軸に対する軸対称性に着目したものである。
この場合、部分行列は、変換行列の左半分の部分行列または右半分の部分行列であり、導出部は、その部分行列を変換行列の行方向にフリップし、さらに、フリップされた部分行列の奇数番目の行ベクトルの符号を反転して、その変換行列の右半分の部分行列または左半分の部分行列(つまり、変換行列の残りの部分行列)を導出することにより、変換行列全体を導出する。
例えば、図86に示されるように、導出部は、変換タイプがDCT2の変換行列601の左半分の部分行列601Aを、変換行列601の中心を通る列に平行な方向(列方向)の軸601Xを中心にフリップする(つまり、水平方向にフリップする)。導出部は、さらに、その奇数番目の行ベクトルの符号を反転する。このようにすることにより、その変換行列601の右半分の部分行列601Bが導出される。つまり、変換行列601全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(78)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDCT2の変換行列601全体を用意する必要が無くなる(その部分行列601Aを用意すればよい)。つまり、この候補の情報量を2分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DCT2の変換行列601を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、このような導出を適用する変換行列は、その要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDST2であってもよい。
また、以上においては、左半分の部分行列から右半分の部分行列(変換行列全体)を導出するように説明したが、これに限らず、例えば、右半分の部分行列から左半分の部分行列(変換行列全体)を導出するようにしてもよい。
また、その1段下の(上から2段目の)例の導出は、水平軸に対する軸対称性に着目したものである。
この場合、部分行列は、変換行列の上半分の部分行列または下半分の部分行列であり、導出部は、その部分行列を変換行列の列方向にフリップし、さらに、フリップされた部分行列の奇数番目の列ベクトルの符号を反転して、その変換行列の下半分の部分行列または上半分の部分行列(つまり、変換行列の残りの部分行列)を導出することにより、その変換行列全体を導出する。
例えば、図87に示されるように、導出部は、変換タイプがDST1の変換行列611の上半分の部分行列611Aを、変換行列611の中心を通る行に平行な方向(行方向)の軸611Xを中心にフリップする(つまり、垂直方向にフリップする)。導出部は、さらに、その奇数番目の列ベクトルの符号を反転する。このようにすることにより、その変換行列611の下半分の部分行列611Bが導出される。つまり、変換行列611全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(79)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDST1の変換行列611全体を用意する必要が無くなる(その部分行列611Aを用意すればよい)。つまり、この候補の情報量を2分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DST1の変換行列611を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、このような導出を適用する変換行列は、その要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDCT3、DCT1、またはDST3であってもよい。
また、以上においては、上半分の部分行列から下半分の部分行列(変換行列全体)を導出するように説明したが、これに限らず、例えば、下半分の部分行列から上半分の部分行列(変換行列全体)を導出するようにしてもよい。
また、その1段下の(上から3段目の)例の導出は、点対称性に着目したものである。
この場合、部分行列は、変換行列の上半分の部分行列または下半分の部分行列であり、導出部は、その部分行列を変換行列の中心を中心とする回転方向にフリップし、さらに、フリップされた部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、その変換行列の下半分の部分行列または上半分の部分行列(つまり、変換行列の残りの部分行列)を導出することにより、その変換行列全体を導出する。
例えば、図88に示されるように、導出部は、変換タイプがDST4の変換行列612の上半分の部分行列612Aを、変換行列612の中心612Xを中心とする回転方向にフリップする。導出部は、さらに、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転する。このようにすることにより、その変換行列612の下半分の部分行列612Bが導出される。つまり、変換行列612全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(80)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDST4の変換行列612全体を用意する必要が無くなる(その部分行列612Aを用意すればよい)。つまり、この候補の情報量を2分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DST4の変換行列612を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、このような導出を適用する変換行列は、その要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDCT4であってもよい。
また、以上においては、上半分の部分行列から下半分の部分行列(変換行列全体)を導出するように説明したが、これに限らず、例えば、下半分の部分行列から上半分の部分行列(変換行列全体)を導出するようにしてもよい。
また、その1段下の(上から4段目の)例の導出は、対角軸に対する対称性に着目したものである。
この場合、部分行列は、変換行列の右上三角部分の部分行列または左下三角部分の部分行列であり、導出部は、その部分行列を転置して、変換行列の左下三角部分の部分行列または右上三角部分の部分行列を導出することにより、その変換行列を導出する。
例えば、図89に示されるように、導出部は、変換タイプがDCT5の変換行列613の右上三角部分の部分行列613Aを、変換行列613の左上端と右下端とを結ぶ対角線を軸としてフリップする。このようにすることにより、その変換行列613の左下三角部分の部分行列613Bが導出される。つまり、変換行列613全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(81)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDCT5の変換行列613全体を用意する必要が無くなる(その部分行列613Aを用意すればよい)。つまり、この候補の情報量を2分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DCT5の変換行列613を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、図89に示されるように、転置は、変換行列の左上端と右下端とを結ぶ対角線を軸としてフリップすることと同義である。つまり、転置は、フリップに含まれる(フリップ操作の1つである)ものとする。
また、このような導出を適用する変換行列は、その要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDST5、DCT4、またはDCT8であってもよい。
また、以上においては、右上三角部分の部分行列から左下三角部分の部分行列(変換行列全体)を導出するように説明したが、これに限らず、例えば、左下三角部分の部分行列から右上三角部分の部分行列(変換行列全体)を導出するようにしてもよい。
また、その1段下の(上から5段目の)例の導出は、クロス位置の対角軸に対する対称性に着目したものである。
この場合、部分行列は、変換行列の左上三角部分の部分行列または右下三角部分の部分行列であり、導出部は、その部分行列を、変換行列の右上端と左下端を結ぶ対角線を軸とする斜め方向にフリップし、さらに、そのフリップされた部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、その変換行列の右下三角部分の部分行列または左上三角部分の部分行列を導出する。
例えば、図90に示されるように、導出部は、変換タイプがDST7の変換行列602の左上三角部分の部分行列602Aを、変換行列602の右上端と左下端とを結ぶ対角線を軸としてフリップする。導出部は、さらに、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転する。このようにすることにより、その変換行列602の右下三角部分の部分行列602Bが導出される。つまり、変換行列602全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(82)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDST7の変換行列602全体を用意する必要が無くなる(その部分行列602Aを用意すればよい)。つまり、この候補の情報量を2分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DST7の変換行列602を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、この場合の、変換行列の右上端と左下端を結ぶ対角線を軸とする斜め方向にフリップも、行と列とが入れ替わるので「転置」に含まれる(転置操作の1つである)ものとする。
なお、このような導出を適用する変換行列は、その要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDST6であってもよい。
また、以上においては、左上三角部分の部分行列から右下三角部分の部分行列(変換行列全体)を導出するように説明したが、これに限らず、例えば、右下三角部分の部分行列から左上三角部分の部分行列(変換行列全体)を導出するようにしてもよい。
また、その1段下の(上から6段目乃至8段目の)例の導出は、垂直軸に対する軸対称性、水平軸に対する軸対称性、および点対称性に着目したものである。
この場合、部分行列は、変換行列の左上4分の1の部分行列であり、導出部は、その部分行列を変換行列の行方向にフリップし、そのフリップされた部分行列の奇数番目の行ベクトルの符号を反転して、変換行列の右上4分の1の部分行列を導出し、また、部分行列を変換行列の列方向にフリップし、そのフリップされた部分行列の奇数番目の列ベクトルの符号を反転して、変換行列の左下4分の1の部分行列を導出し、さらに、部分行列を変換行列の中心を中心とする回転方向にフリップし、そのフリップされた部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、変換行列の右下4分の1の部分行列を導出する。
例えば、図91に示されるように、導出部は、変換タイプがDST1の変換行列614の左上4分の1の部分行列614Aを、変換行列614の中心を通る列に平行な方向(列方向)の軸614X-1を中心にフリップする(つまり、水平方向にフリップする)。導出部は、さらに、その奇数番目の行ベクトルの符号を反転する。このようにすることにより、その変換行列614の右上4分の1の部分行列614Bが導出される。
また、導出部は、変換タイプがDST1の変換行列614の左上4分の1の部分行列614Aを、変換行列614の中心を通る行に平行な方向(行方向)の軸614X-2を中心にフリップする(つまり、垂直方向にフリップする)。導出部は、さらに、その奇数番目の列ベクトルの符号を反転する。このようにすることにより、その変換行列614の左下4分の1の部分行列614Cが導出される。
さらに、導出部は、変換タイプがDST1の変換行列614の左上4分の1の部分行列614Aを、変換行列614の中心614X-3を中心とする回転方向にフリップする。導出部は、さらに、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転する。このようにすることにより、その変換行列614の右下4分の1の部分行列614Dが導出される。
つまり、変換行列614全体が導出される。このような導出を、導出する変換行列をN行N列の変換行列Tとし、導出に用いるその部分行列をCとして、要素毎の演算表現として表すと、以下の式(83)乃至式(85)のように表すことができる。
このような導出を適用することにより、部分行列からその変換行列の全体を導出することができるので、直交変換・逆直交変換に用いる変換行列の候補としてDST1の変換行列614全体を用意する必要が無くなる(その部分行列614Aを用意すればよい)。つまり、この候補の情報量を4分の1にすることができる。すなわち、LUTサイズの増大を抑制することができる。また、導出された変換行列を用いて直交変換・逆直交変換を行うことにより、DST1の変換行列614を直交変換・逆直交変換に用いる場合と同一の符号化効率が得られる。
なお、このような導出を適用する変換行列は、要素が上述のような対称性を有していればよく、変換タイプは、上述の例に限定されない。例えば、変換タイプはDCT1であってもよい。
また、以上においては、左上4分の1の部分行列から残りの部分行列を導出するように説明したが、これに限らず、例えば、右上4分の1の部分行列から残りの部分行列を導出するようにしてもよいし、左下4分の1の部分行列から残りの部分行列を導出るようにしてもよいし、右下4分の1の部分行列から残りの部分行列を導出するようにしてもよい。
<変換行列導出部>
このような部分行列からの変換行列の導出を行う画像符号化装置100の構成は、第1の実施の形態の場合と同様である。そして、この画像符号化装置100において、直交変換部113は、導出部および直交変換部として、上述した本技術を適用した処理を行う。また、符号化部115は、符号化部として、上述した本技術を適用した処理を行う。さらに逆直交変換部118は、逆直交変換部および導出部として、上述した本技術を適用した処理を行う。したがって、画像符号化装置100は、直交変換・逆直交変換に必要なメモリ容量の増大を抑制することができる。
また、直交変換部113の構成は、第1の実施の形態の場合と同様である。そして、この直交変換部113において、プライマリ変換部152は、導出部および直交変換部として、上述した本技術を適用した処理を行う。つまり、導出部は、変換行列の一部を構成する部分行列を用いて変換行列全体を導出し、直交変換部は、その導出部により導出された変換行列を用いて予測残差に対するプライマリ変換を行う。したがって、プライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、上述のようにプライマリ変換部152は、プライマリ変換として、プライマリ水平変換とプライマリ垂直変換とを行う。つまり、導出部は、水平方向の1次元直交変換用の前記変換行列と、垂直方向の1次元直交変換用の前記変換行列とを導出し、直交変換部は、プライマリ変換として、その導出部により導出された水平方向の1次元直交変換用の変換行列を用いて、その水平方向の1次元直交変換を行い、さらに、その導出部により導出された垂直方向の1次元直交変換用の変換行列を用いて、その垂直方向の1次元直交変換を行う。したがって、このような、水平方向の1次元直交変換および垂直方向の1次元直交変換が行われるプライマリ変換に必要なメモリ容量の増大を抑制することができる。
なお、この場合、プライマリ変換部152は、<2-2.実施例1-1>の場合と同様の構成を有する。また、プライマリ水平変換部312は、<2-2.実施例1-1>の場合と同様の構成を有する。また、プライマリ垂直変換部313は、<2-2.実施例1-1>の場合と同様の構成を有する。ただし、プライマリ水平変換部312が有する変換行列導出部321の内部の構成と、プライマリ垂直変換部313が有する変換行列導出部351の内部の構成とが、<2-2.実施例1-1>の場合と異なる。
図92は、この場合のプライマリ水平変換部312が有する変換行列導出部321の主な構成例を示すブロック図である。図92に示されるように、この場合の変換行列導出部321は、変換行列LUT331、水平方向フリップ部632、垂直方向フリップ部633、転置部634、および符号反転部635を有する。なお、図92においては、データの授受を示す矢印を省略しているが、変換行列導出部321は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
水平方向フリップ部632は、入力される部分行列を、変換行列の中心を通る列方向の直線を軸として水平方向(行方向)にフリップし、フリップ後の部分行列を出力する。垂直方向フリップ部633は、入力される部分行列を、変換行列の中心を通る行方向の直線を軸として垂直方向(列方向)にフリップし、フリップ後の部分行列を出力する。転置部634は、入力される部分行列を転置して(斜め方向にフリップして)、転置後の部分行列を出力する。符号反転部635は、入力される部分行列の一部の符号を反転し、符号反転後の部分行列を出力する。
例えば、図85に示される表の最上段の項目名の行を除き、上から1段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の左半分(または右半分)の部分行列を読み出し、水平方向フリップ部632を介して、その部分行列を行方向(水平方向)にフリップし、さらに、符号反転部635を介して、そのフリップされた部分行列の奇数番目の行ベクトルの符号を反転して、変換行列の残りの部分行列を導出する。これらの処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
また、例えば、図85に示される表の上から2段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の上半分(または下半分)の部分行列を読み出し、垂直方向フリップ部633を介して、その部分行列を列方向(垂直方向)にフリップし、符号反転部635を介して、そのフリップされた部分行列の奇数番目の列ベクトルの符号を反転して、変換行列の残りの部分行列を導出する。これらの処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
また、例えば、図85に示される表の上から3段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の上半分(または下半分)の部分行列を読み出し、水平方向フリップ部632を介してその部分行列を行方向(水平方向)にフリップし、垂直方向フリップ部633を介してその水平方向にフリップされた部分行列をさらに列方向(垂直方向)にフリップし、符号反転部635を介して、その導出した部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、変換行列の残りの部分行列を導出する。これらの処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
また、例えば、図85に示される表の上から4段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の右上三角部分(または左下三角部分)の部分行列を読み出し、転置部634を介して、変換行列の左上端と右下端とを結ぶ直線を軸として、その部分行列を転置して、変換行列の残りの部分行列を導出する。この処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
また、例えば、図85に示される表の上から5段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の左上三角部分(または右下三角部分)の部分行列を読み出し、転置部634を介して、変換行列の右上端と左下端とを結ぶ直線を軸として、その部分行列を転置し、符号反転部635を介して、その導出した部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転し、変換行列の残りの部分行列を導出する。これらの処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
さらに、例えば、図85に示される表の上から6段目の導出例の場合、変換行列導出部321は、変換行列LUT331から変換行列の左上4分の1の部分行列を読み出す。変換行列導出部321は、水平方向フリップ部632を介して、その部分行列を行方向(水平方向)にフリップし、さらに、符号反転部635を介して、そのフリップされた部分行列の奇数番目の行ベクトルの符号を反転して、変換行列の右上4分の1の部分行列を導出する。
また、変換行列導出部321は、垂直方向フリップ部633を介して、その左上4分の1の部分行列を列方向(垂直方向)にフリップし、さらに、符号反転部635を介して、そのフリップされた部分行列の奇数番目の列ベクトルの符号を反転して、変換行列の左下4分の1の部分行列を導出する。
また、変換行列導出部321は、水平方向フリップ部632を介してその左上4分の1の部分行列を行方向(水平方向)にフリップし、垂直方向フリップ部633を介してその水平方向にフリップされた部分行列をさらに列方向(垂直方向)にフリップし、符号反転部635を介して、その導出した部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、変換行列の右下4分の1の部分行列を導出する。
つまり、これらの処理により変換行列の全ての部分行列が得られる。つまり、変換行列全体が導出される。変換行列導出部321は、その導出した変換行列(全体)を、変換行列THとして、変換行列導出部321の外部に出力する(行列演算部322に供給する)。
以上のような構成を有するので、変換行列導出部321は、図85に示される表の各導出例を実現することができる。
<変換行列導出部>
図93は、この場合のプライマリ垂直変換部313が有する変換行列導出部351の主な構成例を示すブロック図である。図93に示されるように、この場合の変換行列導出部351は、変換行列導出部321の場合と同様に、変換行列LUT361、水平方向フリップ部642、垂直方向フリップ部643、転置部644、および符号反転部645を有する。なお、図93においては、データの授受を示す矢印を省略しているが、変換行列導出部351は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
水平方向フリップ部642は、水平方向フリップ部632と同様の処理部である。垂直方向フリップ部643は、垂直方向フリップ部633と同様の処理部である。転置部644は、転置部634と同様の処理部である。符号反転部645は、符号反転部635と同様の処理部である。
変換行列導出部351は、変換行列LUT361から変換行列の所定の部分行列を読み出し、水平方向フリップ部632乃至符号反転部635を適宜介して、図85の表に示される導出例のいずれかの方法で、その部分行列から残りの部分行列を導出する。つまり、変換行列全体が導出される。変換行列導出部351は、その導出した変換行列(全体)を、変換行列TVとして、変換行列導出部351の外部に出力する(行列演算部352に供給する)。
以上のような構成を有するので、変換行列導出部351は、図85に示される表の各導出例を実現することができる。
<変換行列導出処理の流れ>
この場合のプライマリ変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図27のフローチャートと同様の流れで行われる)ので、その説明は基本的に省略する。
また、この場合、図27のステップS302において実行されるプライマリ水平変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図28のフローチャートと同様の流れで行われる)が、図28のステップS321において実行される変換行列導出処理は、図30の例とは異なる流れで行われる。
この場合の、図28のステップS321において、プライマリ水平変換部312内の変換行列導出部321により実行される変換行列導出処理の流れの例を、図94のフローチャートを参照して説明する。
変換行列導出処理が開始されると、変換行列導出部321は、ステップS701において、例えば、図95に示される対応表を参照し、変換タイプ識別子TrTypeIdxHに対応する部分行列Cを変換行列LUT331より読み出す。
ステップS702において、変換行列導出部321は、水平方向フリップ部632乃至符号反転部635を適宜利用して、変換タイプ識別子TrTypeIdxHに対応する変換タイプの変換行列THを、部分行列Cから所定の導出方法(図85の表に示される導出方法のいずれか)に基づいて導出する。
ステップS702の処理が終了すると変換行列導出処理が終了し、処理は図28に戻る。
<変換行列導出処理の流れ>
なお、この場合、図27のステップS303において実行されるプライマリ垂直変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図32のフローチャートと同様の流れで行われる)。ただし、図32のステップS361において実行される変換行列導出処理は、図94のフローチャートの場合と同様の流れで行われる。したがって、その説明を省略する。図94の説明において、適宜、変換タイプ識別子TrTypeIdxHを変換タイプ識別子TrTypeIdxVに置き換えたり、変換行列THを変換行列TVに置き換えたりすればよい。
<変換行列導出部>
次に、この場合の画像復号装置200の構成について説明する。この場合も画像復号装置200が有する逆プライマリ変換部253、逆プライマリ垂直変換部412、逆プライマリ水平変換部413等の構成は、<2-2.実施例1-1>の場合と同様であるのでその説明を省略する。
つまり、逆直交変換部が、復号部により得られた係数データに対する逆セカンダリ変換を行い、さらに、導出部により導出された変換行列を用いて、その逆セカンダリ変換結果に対して逆プライマリ変換を行うようにしてもよい。
また、導出部が、水平方向の逆1次元直交変換用の変換行列と、垂直方向の逆1次元直交変換用の変換行列とを導出し、逆直交変換部が、逆プライマリ変換として、導出部により導出された水平方向の逆1次元直交変換用の変換行列を用いて、その水平方向の逆1次元直交変換を行い、さらに、導出部により導出された垂直方向の逆1次元直交変換用の変換行列を用いて、その垂直方向の逆1次元直交変換を行うようにしてもよい。
図96は、この場合の逆プライマリ垂直変換部412が有する変換行列導出部421の主な構成例を示すブロック図である。図96に示されるように、この場合の変換行列導出部421は、変換行列導出部321と同様に、変換行列LUT431、水平方向フリップ部652、垂直方向フリップ部653、転置部654、および符号反転部655を有する。なお、図96においては、データの授受を示す矢印を省略しているが、変換行列導出部421は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
水平方向フリップ部652は、水平方向フリップ部632と同様の処理部である。垂直方向フリップ部653は、垂直方向フリップ部633と同様の処理部である。転置部654は、転置部634と同様の処理部である。符号反転部655は、符号反転部635と同様の処理部である。
変換行列導出部421は、逆直交変換(逆プライマリ垂直変換)において、変換行列LUT431から変換行列の所定の部分行列を読み出し、水平方向フリップ部652乃至符号反転部655を適宜介して、図85の表に示される導出例のいずれかの方法で、その部分行列から残りの部分行列を導出する。つまり、変換行列全体が導出される。変換行列導出部421は、その導出した変換行列(全体)を、変換行列TVとして、変換行列導出部421の外部に出力する(行列演算部422に供給する)。
以上のような構成を有するので、変換行列導出部421は、図85に示される表の各導出例を実現することができる。
<変換行列導出部>
図97は、この場合の、逆プライマリ水平変換部413が有する変換行列導出部451の主な構成例を示すブロック図である。図97に示されるように、この場合の変換行列導出部451は、変換行列導出部421と同様に、変換行列LUT461、水平方向フリップ部662、垂直方向フリップ部663、転置部664、および符号反転部665を有する。なお、図97においては、データの授受を示す矢印を省略しているが、変換行列導出部451は、任意の処理部(処理ブロック)間で任意のデータを授受することができる。
水平方向フリップ部662は、水平方向フリップ部632と同様の処理部である。垂直方向フリップ部663は、垂直方向フリップ部633と同様の処理部である。転置部664は、転置部634と同様の処理部である。符号反転部665は、符号反転部635と同様の処理部である。
変換行列導出部451は、逆直交変換(逆プライマリ水平変換)において、変換行列LUT431から変換行列の所定の部分行列を読み出し、水平方向フリップ部662乃至符号反転部665を適宜介して、図85の表に示される導出例のいずれかの方法で、その部分行列から残りの部分行列を導出する。つまり、変換行列全体が導出される。変換行列導出部451は、その導出した変換行列(全体)を、変換行列TVとして、変換行列導出部451の外部に出力する(行列演算部452に供給する)。
以上のような構成を有するので、変換行列導出部451は、図85に示される表の各導出例を実現することができる。
<変換行列導出処理の流れ>
この場合の逆プライマリ変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図39のフローチャートと同様の流れで行われる)。また、図39のステップS401において実行される逆プライマリ変換選択処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図40のフローチャートと同様の流れで行われる)。また、図39のステップS402において実行される逆プライマリ垂直変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図41のフローチャートと同様の流れで行われる)。したがって、これらの処理についての説明は基本的に省略する。
ただし、その逆プライマリ垂直変換処理において実行される変換行列導出処理(図41のステップS441)は、図94のフローチャートの場合と同様の流れで行われる。したがって、その説明を省略する。
<変換行列導出処理の流れ>
なお、この場合、図39のステップS403において実行される逆プライマリ水平変換処理は、<2-2.実施例1-1>の場合と同様の流れで行われる(図42のフローチャートと同様の流れで行われる)。したがってその説明を省略する。
ただし、その逆プライマリ水平変換処理において実行される変換行列導出処理(図42のステップS461)は、図94のフローチャートの場合と同様の流れで行われる。したがって、その説明を省略する。
<5.第4の実施の形態>
<5-1.共通コンセプト>
<実施の形態の組み合わせ>
以上においては、第1の実施の形態乃至第3の実施の形態を説明したが、これらの各実施の形態を組み合わせて適用するようにしてもよい。例えば、非特許文献1に記載の方法に対して、実施例1-1において説明した方法と、第3の実施の形態において説明した方法とを組み合わせて適用するようにしてもよい。
つまり、導出部が、部分行列を用いて第1の変換行列を導出し、さらに、その導出した第1の変換行列を用いて第2の変換行列を導出し、直交変換部が、その導出部により導出された第2の変換行列を用いて、予測残差を直交変換するようにしてもよい。
その際、導出部は、第1の変換行列を用いて、第1の変換行列とは異なる変換タイプの第2の変換行列を導出するようにしてもよい。また、導出部は、第1の変換行列をフリップまたは転置して、第2の変換行列を導出するようにしてもよい。
その場合、図98の表に示されるように、非特許文献1に記載の技術の場合に5種類必要だった変換行列(図6のAの表参照)を3種類に低減させることができ、さらに、その3種類の変換行列についても、部分行列を用意すれば良いので、LUTサイズの合計は約20KBとすることができる。つまり、非特許文献1に記載の技術の場合に比べて(約53KB(図6のAの表))LUTのサイズを低減させることができる。すなわち、LUTのサイズの増大を抑制することができる。
<変換行列導出部>
この場合も画像符号化装置100および画像復号装置200の構成は、それぞれ、第1の実施の形態の場合と基本的に同様である。ただし、各変換行列導出部の構成のみ第1の実施の形態の場合と異なる。
例えば、この場合の、変換行列導出部321の主な構成例を図99に示す。図99に示されるように、この場合の変換行列導出部321は、実施例1-1の場合の構成(図24)と、第3の実施の形態の場合の構成(図92)との両方を有していればよい。つまり、この場合の変換行列導出部321は、変換行列LUT331、フリップ部332、転置部333、水平方向フリップ部632、垂直方向フリップ部633、転置部634、および符号反転部635を有する。
<変換行列導出処理の流れ>
この変換行列導出処理により、プライマリ水平変換処理において実行される変換行列導出処理の流れの例を、図100のフローチャートを参照して説明する。
変換行列導出処理が開始されると、ステップS721において、変換行列導出部321は、図101に示される対応表を参照し、変換タイプ識別子TrTypeIdxHに対応するベース部分行列Cを変換行列LUT331から読み出す。
ステップS722において、変換行列導出部321は、その対応表に基づいて、変換タイプ識別子TrTypeIdxHに対応するフリップフラグFlipFlagと転置フラグTransposeFlagとを導出する(値を設定する)。
ステップS723において、変換行列導出部321は、水平方向フリップ部632乃至符号反転部635を適宜用いて、変換タイプ識別子TrTypeIdxHに対応するベース変換行列Tbaseを、部分行列Cから所定の導出方法に基づいて生成する。
そして、変換行列導出部321は、ステップS724乃至ステップS728の各処理を、フリップ部332および転置部333を適宜用いて、図30のステップS342乃至ステップS346の各処理と同様に実行する。つまり、第1の変換行列を第2の変換行列に適宜変換する。
ステップS728の処理が終了すると、変換行列導出処理が終了し、処理は、図28に戻る。
なお、プライマリ垂直変換部313が有する変換行列導出部351、逆プライマリ垂直変換部412が有する変換行列導出部421、および、逆プライマリ水平変換部413が有する変換行列導出部451は、いずれも、図99を参照して説明した場合と同様の構成を有する。したがってそれらの説明は省略する。
また、プライマリ垂直変換処理において実行される変換行列導出処理、逆プライマリ垂直変換処理において実行される変換行列導出処理、および、逆プライマリ水平変換処理において実行される変換行列導出処理は、いずれも、図100のフローチャートを参照して上述した場合と同様の流れで実行される。したがってそれらの説明は省略する。
このようにすることにより、実施例1-1と第3の実施の形態の両方の効果を得ることができる。
なお、実施の形態(実施例)の組み合わせ方は任意であり、この例に限定されない。例えば、実施の形態3において説明した方法は、実施の形態1の各実施例と組み合わせることができる。また、実施の形態3において説明した方法は、実施の形態2において説明した方法とも組み合わせることができる。
<6.付記>
<コンピュータ>
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここでコンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータ等が含まれる。
図102は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。
図102に示されるコンピュータ800において、CPU(Central Processing Unit)801、ROM(Read Only Memory)802、RAM(Random Access Memory)803は、バス804を介して相互に接続されている。
バス804にはまた、入出力インタフェース810も接続されている。入出力インタフェース810には、入力部811、出力部812、記憶部813、通信部814、およびドライブ815が接続されている。
入力部811は、例えば、キーボード、マウス、マイクロホン、タッチパネル、入力端子などよりなる。出力部812は、例えば、ディスプレイ、スピーカ、出力端子などよりなる。記憶部813は、例えば、ハードディスク、RAMディスク、不揮発性のメモリなどよりなる。通信部814は、例えば、ネットワークインタフェースよりなる。ドライブ815は、磁気ディスク、光ディスク、光磁気ディスク、または半導体メモリなどのリムーバブルメディア821を駆動する。
以上のように構成されるコンピュータでは、CPU801が、例えば、記憶部813に記憶されているプログラムを、入出力インタフェース810およびバス804を介して、RAM803にロードして実行することにより、上述した一連の処理が行われる。RAM803にはまた、CPU801が各種の処理を実行する上において必要なデータなども適宜記憶される。
コンピュータ(CPU801)が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア821に記録して適用することができる。その場合、プログラムは、リムーバブルメディア821をドライブ815に装着することにより、入出力インタフェース810を介して、記憶部813にインストールすることができる。
また、このプログラムは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供することもできる。その場合、プログラムは、通信部814で受信し、記憶部813にインストールすることができる。
その他、このプログラムは、ROM802や記憶部813に、あらかじめインストールしておくこともできる。
<情報・処理の単位>
以上において説明した各種情報が設定されるデータ単位や、各種処理が対象とするデータ単位は、それぞれ任意であり上述した例に限定されない。例えば、これらの情報や処理が、それぞれ、TU(Transform Unit)、TB(Transform Block)、PU(Prediction Unit)、PB(Prediction Block)、CU(Coding Unit)、LCU(Largest Coding Unit)、サブブロック、ブロック、タイル、スライス、ピクチャ、シーケンス、またはコンポーネント毎に設定されるようにしてもよいし、それらのデータ単位のデータを対象とするようにしてもよい。もちろん、このデータ単位は、情報や処理毎に設定され得るものであり、全ての情報や処理のデータ単位が統一されている必要はない。なお、これらの情報の格納場所は任意であり、上述したデータ単位のヘッダやパラメータセット等に格納されるようにしてもよい。また、複数個所に格納されるようにしてもよい。
<制御情報>
以上の各実施の形態において説明した本技術に関する制御情報を符号化側から復号側に伝送するようにしてもよい。例えば、上述した本技術を適用することを許可(または禁止)するか否かを制御する制御情報(例えばenabled_flag)を伝送するようにしてもよい。また、例えば、上述した本技術を適用する対象(または適用しない対象)を示す制御情報を伝送するようにしてもよい。例えば、本技術を適用する(または、適用を許可若しくは禁止する)ブロックサイズ(上限若しくは下限、またはその両方)、フレーム、コンポーネント、またはレイヤ等を指定する制御情報を伝送するようにしてもよい。
<本技術の適用対象>
本技術は、任意の画像符号化・復号方式に適用することができる。つまり、上述した本技術と矛盾しない限り、変換(逆変換)、量子化(逆量子化)、符号化(復号)、予測等、画像符号化・復号に関する各種処理の仕様は任意であり、上述した例に限定されない。また、上述した本技術と矛盾しない限り、これらの処理の内の一部を省略してもよい。
また本技術は、複数の視点(ビュー(view))の画像を含む多視点画像の符号化・復号を行う多視点画像符号化・復号システムに適用することができる。その場合、各視点(ビュー(view))の符号化・復号において、本技術を適用するようにすればよい。
さらに本技術は、所定のパラメータについてスケーラビリティ(scalability)機能を有するように複数レイヤ化(階層化)された階層画像の符号化・復号を行う階層画像符号化(スケーラブル符号化)・復号システムに適用することができる。その場合、各階層(レイヤ)の符号化・復号において、本技術を適用するようにすればよい。
上述した実施形態に係る画像符号化装置100や画像復号装置200は、例えば、衛星放送、ケーブルTVなどの有線放送、インターネット上での配信、およびセルラー通信による端末への配信などにおける送信機や受信機(例えばテレビジョン受像機や携帯電話機)、または、光ディスク、磁気ディスクおよびフラッシュメモリなどの媒体に画像を記録したり、これら記憶媒体から画像を再生したりする装置(例えばハードディスクレコーダやカメラ)などの、様々な電子機器に応用され得る。
また、本技術は、任意の装置またはシステムを構成する装置に搭載するあらゆる構成、例えば、システムLSI(Large Scale Integration)等としてのプロセッサ(例えばビデオプロセッサ)、複数のプロセッサ等を用いるモジュール(例えばビデオモジュール)、複数のモジュール等を用いるユニット(例えばビデオユニット)、ユニットにさらにその他の機能を付加したセット(例えばビデオセット)等(すなわち、装置の一部の構成)として実施することもできる。
さらに、本技術は、複数の装置により構成されるネットワークシステムにも適用することもできる。例えば、コンピュータ、AV(Audio Visual)機器、携帯型情報処理端末、IoT(Internet of Things)デバイス等の任意の端末に対して、画像(動画像)に関するサービスを提供するクラウドサービスに適用することもできる。
なお、本技術を適用したシステム、装置、処理部等は、例えば、交通、医療、防犯、農業、畜産業、鉱業、美容、工場、家電、気象、自然監視等、任意の分野に利用することができる。また、その用途も任意である。
例えば、本技術は、観賞用コンテンツ等の提供の用に供されるシステムやデバイスに適用することができる。また、例えば、本技術は、交通状況の監理や自動運転制御等、交通の用に供されるシステムやデバイスにも適用することができる。さらに、例えば、本技術は、セキュリティの用に供されるシステムやデバイスにも適用することができる。また、例えば、本技術は、機械等の自動制御の用に供されるシステムやデバイスに適用することができる。さらに、例えば、本技術は、農業や畜産業の用に供されるシステムやデバイスにも適用することができる。また、本技術は、例えば火山、森林、海洋等の自然の状態や野生生物等を監視するシステムやデバイスにも適用することができる。さらに、例えば、本技術は、スポーツの用に供されるシステムやデバイスにも適用することができる。
<その他>
なお、本明細書において「フラグ」とは、複数の状態を識別するための情報であり、真(1)または偽(0)の2状態を識別する際に用いる情報だけでなく、3以上の状態を識別することが可能な情報も含まれる。したがって、この「フラグ」が取り得る値は、例えば1/0の2値であってもよいし、3値以上であってもよい。すなわち、この「フラグ」を構成するbit数は任意であり、1bitでも複数bitでもよい。また、識別情報(フラグも含む)は、その識別情報をビットストリームに含める形だけでなく、ある基準となる情報に対する識別情報の差分情報をビットストリームに含める形も想定されるため、本明細書においては、「フラグ」や「識別情報」は、その情報だけではなく、基準となる情報に対する差分情報も包含する。
また、符号化データ(ビットストリーム)に関する各種情報(メタデータ等)は、符号化データに関連づけられていれば、どのような形態で伝送または記録されるようにしてもよい。ここで、「関連付ける」という用語は、例えば、一方のデータを処理する際に他方のデータを利用し得る(リンクさせ得る)ようにすることを意味する。つまり、互いに関連付けられたデータは、1つのデータとしてまとめられてもよいし、それぞれ個別のデータとしてもよい。例えば、符号化データ(画像)に関連付けられた情報は、その符号化データ(画像)とは別の伝送路上で伝送されるようにしてもよい。また、例えば、符号化データ(画像)に関連付けられた情報は、その符号化データ(画像)とは別の記録媒体(または同一の記録媒体の別の記録エリア)に記録されるようにしてもよい。なお、この「関連付け」は、データ全体でなく、データの一部であってもよい。例えば、画像とその画像に対応する情報とが、複数フレーム、1フレーム、またはフレーム内の一部分などの任意の単位で互いに関連付けられるようにしてもよい。
なお、本明細書において、「合成する」、「多重化する」、「付加する」、「一体化する」、「含める」、「格納する」、「入れ込む」、「差し込む」、「挿入する」等の用語は、例えば符号化データとメタデータとを1つのデータにまとめるといった、複数の物を1つにまとめることを意味し、上述の「関連付ける」の1つの方法を意味する。
また、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
また、例えば、本技術は、装置またはシステムを構成するあらゆる構成、例えば、システムLSI(Large Scale Integration)等としてのプロセッサ、複数のプロセッサ等を用いるモジュール、複数のモジュール等を用いるユニット、ユニットにさらにその他の機能を付加したセット等(すなわち、装置の一部の構成)として実施することもできる。
なお、本明細書において、システムとは、複数の構成要素(装置、モジュール(部品)等)の集合を意味し、全ての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、および、1つの筐体の中に複数のモジュールが収納されている1つの装置は、いずれも、システムである。
また、例えば、1つの装置(または処理部)として説明した構成を分割し、複数の装置(または処理部)として構成するようにしてもよい。逆に、以上において複数の装置(または処理部)として説明した構成をまとめて1つの装置(または処理部)として構成されるようにしてもよい。また、各装置(または各処理部)の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置(または処理部)の構成の一部を他の装置(または他の処理部)の構成に含めるようにしてもよい。
また、例えば、本技術は、1つの機能を、ネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
また、例えば、上述したプログラムは、任意の装置において実行することができる。その場合、その装置が、必要な機能(機能ブロック等)を有し、必要な情報を得ることができるようにすればよい。
また、例えば、上述のフローチャートで説明した各ステップは、1つの装置で実行する他、複数の装置で分担して実行することができる。さらに、1つのステップに複数の処理が含まれる場合には、その1つのステップに含まれる複数の処理は、1つの装置で実行する他、複数の装置で分担して実行することができる。換言するに、1つのステップに含まれる複数の処理を、複数のステップの処理として実行することもできる。逆に、複数のステップとして説明した処理を1つのステップとしてまとめて実行することもできる。
なお、コンピュータが実行するプログラムは、プログラムを記述するステップの処理が、本明細書で説明する順序に沿って時系列に実行されるようにしても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで個別に実行されるようにしても良い。つまり、矛盾が生じない限り、各ステップの処理が上述した順序と異なる順序で実行されるようにしてもよい。さらに、このプログラムを記述するステップの処理が、他のプログラムの処理と並列に実行されるようにしても良いし、他のプログラムの処理と組み合わせて実行されるようにしても良い。
なお、本明細書において複数説明した本技術は、矛盾が生じない限り、それぞれ独立に単体で実施することができる。もちろん、任意の複数の本技術を併用して実施することもできる。例えば、いずれかの実施の形態において説明した本技術の一部または全部を、他の実施の形態において説明した本技術の一部または全部と組み合わせて実施することもできる。また、上述した任意の本技術の一部または全部を、上述していない他の技術と併用して実施することもできる。
なお、本技術は以下のような構成も取ることができる。
(1) 第1の変換行列を用いて第2の変換行列を導出する導出部と、
前記導出部により導出された前記第2の変換行列を用いて、画像の予測残差を直交変換する直交変換部と、
前記直交変換部により前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部と
を備える画像処理装置。
(2) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列とは異なる変換タイプの前記第2の変換行列を導出する
(1)に記載の画像処理装置。
(3) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列と行数および列数が同一の前記第2の変換行列を導出する
(1)または(2)に記載の画像処理装置。
(4) 前記導出部は、前記第1の変換行列の要素に対する操作により、前記第2の変換行列を導出する
(1)乃至(3)のいずれかに記載の画像処理装置。
(5) 前記操作は、要素の並び替えを含む
(4)に記載の画像処理装置。
(6) 前記導出部は、前記操作を複数回行うことにより、前記第2の変換行列を導出する
(4)または(5)に記載の画像処理装置。
(7) 前記導出部は、ルックアップテーブルに格納される前記第1の変換行列を用いて、前記第2の変換行列を導出する
(1)乃至(6)のいずれかに記載の画像処理装置。
(8) 前記直交変換部は、前記導出部により導出された前記第2の変換行列を用いて前記予測残差に対するプライマリ変換を行い、さらに、前記プライマリ変換の結果に対してセカンダリ変換を行う
(1)乃至(7)のいずれかに記載の画像処理装置。
(9) 前記導出部は、水平方向の1次元直交変換用の前記第2の変換行列と、垂直方向の1次元直交変換用の前記第2の変換行列とを導出し、
前記直交変換部は、前記プライマリ変換として、
前記導出部により導出された水平方向の1次元直交変換用の前記第2の変換行列を用いて、前記水平方向の1次元直交変換を行い、さらに、
前記導出部により導出された垂直方向の1次元直交変換用の前記第2の変換行列を用いて、前記垂直方向の1次元直交変換を行う
(8)に記載の画像処理装置。
(10) 前記導出部は、前記第1の変換行列をフリップして、前記第2の変換行列を導出する
(1)乃至(9)のいずれかに記載の画像処理装置。
(11) 前記導出部は、前記第1の変換行列を転置して、前記第2の変換行列を導出する
(1)乃至(10)のいずれかに記載の画像処理装置。
(12) 前記導出部は、前記第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、前記第2の変換行列を導出する
(1)乃至(11)のいずれかに記載の画像処理装置。
(13) 前記導出部は、前記第1の変換行列をフリップし、フリップ後の第1の変換行列を転置して、前記第2の変換行列を導出する
(1)乃至(12)のいずれかに記載の画像処理装置。
(14) 前記導出部は、前記第1の変換行列を転置し、転置後の第1の変換行列をフリップして、前記第2の変換行列を導出する
(1)乃至(13)のいずれかに記載の画像処理装置。
(15) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが所望のタイプの波形を有する前記第2の変換行列を導出する
(1)乃至(14)のいずれかに記載の画像処理装置。
(16) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルがフラット型の波形を有する前記第2の変換行列を導出する
(1)乃至(15)のいずれかに記載の画像処理装置。
(17) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが増加型の波形を有する前記第2の変換行列を導出する
(1)乃至(16)のいずれかに記載の画像処理装置。
(18) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが減少型の波形を有する前記第2の変換行列を導出する
(1)乃至(17)のいずれかに記載の画像処理装置。
(19) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが山型の波形を有する前記第2の変換行列を導出する
(1)乃至(18)のいずれかに記載の画像処理装置。
(20) 第1の変換行列を用いて第2の変換行列を導出し、
導出された前記第2の変換行列を用いて、画像の予測残差を直交変換し、
前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する
画像処理方法。
(21) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、
第1の変換行列を用いて第2の変換行列を導出する導出部と、
前記導出部により導出された前記第2の変換行列を用いて、前記復号部により得られた前記係数データを逆直交変換する逆直交変換部と
を備える画像処理装置。
(22) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列とは異なる変換タイプの前記第2の変換行列を導出する
(21)に記載の画像処理装置。
(23) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列と行数および列数が同一の前記第2の変換行列を導出する
(21)または(22)に記載の画像処理装置。
(24) 前記導出部は、前記第1の変換行列の要素に対する操作により、前記第2の変換行列を導出する
(21)乃至(23)のいずれかに記載の画像処理装置。
(25) 前記操作は、要素の並び替えを含む
(24)に記載の画像処理装置。
(26) 前記導出部は、前記操作を複数回行うことにより、前記第2の変換行列を導出する
(24)または(25)に記載の画像処理装置。
(27) 前記導出部は、ルックアップテーブルに格納される前記第1の変換行列を用いて、前記第2の変換行列を導出する
(21)乃至(26)のいずれかに記載の画像処理装置。
(28) 前記逆直交変換部は、前記係数データに対する逆セカンダリ変換を行い、さらに、前記導出部により導出された前記第2の変換行列を用いて、前記逆セカンダリ変換の結果に対して逆プライマリ変換を行う
(21)乃至(27)のいずれかに記載の画像処理装置。
(29) 前記導出部は、水平方向の逆1次元直交変換用の前記第2の変換行列と、垂直方向の逆1次元直交変換用の前記第2の変換行列とを導出し、
前記逆直交変換部は、前記逆プライマリ変換として、
前記導出部により導出された水平方向の逆1次元直交変換用の前記第2の変換行列を用いて、前記水平方向の逆1次元直交変換を行い、さらに、
前記導出部により導出された垂直方向の逆1次元直交変換用の前記第2の変換行列を用いて、前記垂直方向の逆1次元直交変換を行う
(28)に記載の画像処理装置。
(30) 前記導出部は、前記第1の変換行列をフリップして、前記第2の変換行列を導出する
(21)乃至(29)のいずれかに記載の画像処理装置。
(31) 前記導出部は、前記第1の変換行列を転置して、前記第2の変換行列を導出する
(21)乃至(30)のいずれかに記載の画像処理装置。
(32) 前記導出部は、前記第1の変換行列をフリップし、フリップ後の第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、前記第2の変換行列を導出する
(21)乃至(31)のいずれかに記載の画像処理装置。
(33) 前記導出部は、前記第1の変換行列をフリップし、フリップ後の第1の変換行列を転置して、前記第2の変換行列を導出する
(21)乃至(32)のいずれかに記載の画像処理装置。
(34) 前記導出部は、前記第1の変換行列を転置し、転置後の第1の変換行列をフリップして、前記第2の変換行列を導出する
(21)乃至(33)のいずれかに記載の画像処理装置。
(35) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが所望のタイプの波形を有する前記第2の変換行列を導出する
(21)乃至(34)のいずれかに記載の画像処理装置。
(36) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルがフラット型の波形を有する前記第2の変換行列を導出する
(21)乃至(35)のいずれかに記載の画像処理装置。
(37) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが増加型の波形を有する前記第2の変換行列を導出する
(21)乃至(36)のいずれかに記載の画像処理装置。
(38) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが減少型の波形を有する前記第2の変換行列を導出する
(21)乃至(37)のいずれかに記載の画像処理装置。
(39) 前記導出部は、前記第1の変換行列を用いて、最低次行ベクトルが山型の波形を有する前記第2の変換行列を導出する
(21)乃至(38)のいずれかに記載の画像処理装置。
(40) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、
第1の変換行列を用いて第2の変換行列を導出し、
導出された前記第2の変換行列を用いて、得られた前記係数データを逆直交変換する
画像処理方法。
(41) 画像の予測残差を置換操作する操作部と、
ベースとなる変換行列を用いて、前記操作部により置換操作された前記予測残差を直交変換する直交変換部と、
前記直交変換部により前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部と
を備える画像処理装置。
(42) 前記操作部は、前記予測残差を、1次元直交変換の間の空間対称性の方向にフリップし、
前記直交変換部は、前記操作部によりフリップされた前記予測残差を、前記変換行列を用いて直交変換する
(41)に記載の画像処理装置。
(43) 前記操作部は、前記予測残差を、水平方向にフリップし、
前記直交変換部は、前記操作部により水平方向にフリップされた前記予測残差を、前記変換行列を用いて直交変換する
(41)または(42)に記載の画像処理装置。
(44) 前記操作部は、前記予測残差を、垂直方向にフリップし、
前記直交変換部は、前記操作部により垂直方向にフリップされた前記予測残差を、前記変換行列を用いて直交変換する
(41)乃至(43)のいずれかに記載の画像処理装置。
(45) 前記操作部は、前記予測残差を、水平方向および垂直方向にフリップし、
前記直交変換部は、前記操作部により水平方向および垂直方向にフリップされた前記予測残差を、前記変換行列を用いて直交変換する
(41)乃至(44)のいずれかに記載の画像処理装置。
(46) 第1の変換行列を用いて第2の変換行列を導出する導出部をさらに備え、
前記直交変換部は、前記操作部によりフリップされた前記予測残差を、前記導出部により導出された前記第2の変換行列を用いて直交変換するように構成される
(41)乃至(45)のいずれかに記載の画像処理装置。
(47) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列と行数および列数が同一の前記第2の変換行列を導出する
(46)に記載の画像処理装置。
(48) 前記導出部は、前記第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、前記第2の変換行列を導出する
(46)または(47)に記載の画像処理装置。
(49) 前記直交変換部は、ベースとなる変換行列を用いて、前記操作部により置換操作された前記予測残差に対するプライマリ変換を行い、さらに、前記プライマリ変換結果に対してセカンダリ変換を行う
(41)乃至(48)のいずれかに記載の画像処理装置。
(50) 画像の予測残差を置換操作し、
ベースとなる変換行列を用いて、置換操作された前記予測残差を直交変換し、
前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する
画像処理方法。
(51) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、
前記復号部により得られた前記係数データを逆直交変換する逆直交変換部と、
前記逆直交変換部により得られた前記係数データの逆直交変換結果を置換操作する操作部と
を備える画像処理装置。
(52) 前記操作部は、前記逆直交変換結果を、1次元直交変換の間の空間対称性の方向にフリップする
(51)に記載の画像処理装置。
(53) 前記操作部は、前記逆直交変換結果を、水平方向にフリップする
(51)または(52)に記載の画像処理装置。
(54) 前記操作部は、前記逆直交変換結果を、垂直方向にフリップする
(51)乃至(53)のいずれかに記載の画像処理装置。
(55) 前記操作部は、前記逆直交変換結果を、水平方向および垂直方向にフリップする
(51)乃至(54)のいずれかに記載の画像処理装置。
(56) 第1の変換行列を用いて第2の変換行列を導出する導出部をさらに備え、
前記逆直交変換部は、前記導出部により導出された前記第2の変換行列を用いて、前記復号部により得られた前記係数データを逆直交変換するように構成され、
前記操作部は、前記逆直交変換部により得られた前記係数データの逆直交変換結果を置換操作するように構成される
(51)乃至(55)のいずれかに記載の画像処理装置。
(57) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列と行数および列数が同一の前記第2の変換行列を導出する
(56)に記載の画像処理装置。
(58) 前記導出部は、前記第1の変換行列のうち、奇数番目の行ベクトルの符号を反転して、前記第2の変換行列を導出する
(56)または(57)に記載の画像処理装置。
(59) 前記逆直交変換部は、前記復号部により得られた前記係数データに対する逆セカンダリ変換を行い、さらに、ベースとなる変換行列を用いて、前記逆セカンダリ変換結果に対して逆プライマリ変換を行い、
前記操作部は、前記逆直交変換部により得られた前記逆プライマリ変換結果を置換操作する
(51)乃至(58)のいずれかに記載の画像処理装置。
(60) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、
得られた前記係数データを逆直交変換し、
得られた前記係数データの逆直交変換結果を置換操作する
画像処理方法。
(61) 変換行列の一部を構成する部分行列を用いて前記変換行列を導出する導出部と、
前記導出部により導出された前記変換行列を用いて、画像の予測残差を直交変換する直交変換部と、
前記直交変換部により前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する符号化部と
を備える画像処理装置。
(62) 前記導出部は、ルックアップテーブルに格納される前記部分行列を用いて、前記変換行列を導出する
(61)に記載の画像処理装置。
(63) 前記直交変換部は、前記導出部により導出された前記変換行列を用いて前記予測残差に対するプライマリ変換を行い、さらに、前記プライマリ変換結果に対してセカンダリ変換を行う
(61)または(62)に記載の画像処理装置。
(64) 前記導出部は、水平方向の1次元直交変換用の前記変換行列と、垂直方向の1次元直交変換用の前記変換行列とを導出し、
前記直交変換部は、前記プライマリ変換として、
前記導出部により導出された水平方向の1次元直交変換用の前記変換行列を用いて、前記水平方向の1次元直交変換を行い、さらに、
前記導出部により導出された垂直方向の1次元直交変換用の前記変換行列を用いて、前記垂直方向の1次元直交変換を行う
(63)に記載の画像処理装置。
(65) 前記導出部は、前記部分行列を、前記変換行列の中心を通る所定の方向の軸を中心としてフリップして前記変換行列の残りの部分行列を導出することにより、前記変換行列を導出する
(61)乃至(64)のいずれかに記載の画像処理装置。
(66) 前記導出部は、前記部分行列を行に平行な方向にフリップする
(65)に記載の画像処理装置。
(67) 前記導出部は、前記部分行列を列に平行な方向にフリップする
(65)または(66)に記載の画像処理装置。
(68) 前記導出部は、前記部分行列を、前記変換行列の中心を中心とする回転方向にフリップする
(65)乃至(67)のいずれかに記載の画像処理装置。
(69) 前記導出部は、前記部分行列を、前記変換行列の対角線を軸とする斜め方向にフリップする
(65)乃至(68)のいずれかに記載の画像処理装置。
(70) 前記導出部は、さらに、フリップされた前記部分行列の要素の符号を反転して、前記変換行列を導出する
(65)乃至(69)のいずれかに記載の画像処理装置。
(71) 前記部分行列は、前記変換行列の左半分の部分行列または右半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の行方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の行ベクトルの符号を反転して、前記変換行列の右半分の部分行列または左半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(61)乃至(70)のいずれかに記載の画像処理装置。
(72) 前記部分行列は、前記変換行列の上半分の部分行列または下半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の列方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の列ベクトルの符号を反転して、前記変換行列の下半分の部分行列または上半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(61)乃至(71)のいずれかに記載の画像処理装置。
(73) 前記部分行列は、前記変換行列の上半分の部分行列または下半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の中心を中心とする回転方向にフリップし、さらに、フリップされた前記部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、前記変換行列の下半分の部分行列または上半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(61)乃至(72)のいずれかに記載の画像処理装置。
(74) 前記部分行列は、前記変換行列の右上三角部分の部分行列または左下三角部分の部分行列であり、
前記導出部は、前記部分行列を転置して、前記変換行列の左下三角部分の部分行列または右上三角部分の部分行列を導出することにより、前記変換行列を導出するように構成される
(61)乃至(73)のいずれかに記載の画像処理装置。
(75) 前記部分行列は、前記変換行列の左上三角部分の部分行列または右下三角部分の部分行列であり、
前記導出部は、前記部分行列を、前記変換行列の右上端と左下端を結ぶ対角線を軸とする斜め方向にフリップし、さらに、フリップされた前記部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、前記変換行列の右下三角部分の部分行列または左上三角部分の部分行列を導出することにより、前記変換行列を導出するように構成される
(61)乃至(74)のいずれかに記載の画像処理装置。
(76) 前記部分行列は、前記変換行列の左上4分の1の部分行列であり、
前記導出部は、
前記部分行列を、前記変換行列の行方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の行ベクトルの符号を反転して、前記変換行列の右上4分の1の部分行列を導出し、
前記部分行列を、前記変換行列の列方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の列ベクトルの符号を反転して、前記変換行列の左下4分の1の部分行列を導出し、
前記部分行列を、前記変換行列の中心を中心とする回転方向にフリップし、さらに、フリップされた前記部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、前記変換行列の右下4分の1の部分行列を導出することにより、
前記変換行列を導出するように構成される
(61)乃至(75)のいずれかに記載の画像処理装置。
(77) 前記導出部は、前記部分行列を用いて第1の変換行列を導出し、さらに、導出した前記第1の変換行列を用いて第2の変換行列を導出し、
前記直交変換部は、前記導出部により導出された前記第2の変換行列を用いて、前記予測残差を直交変換する
(61)乃至(76)のいずれかに記載の画像処理装置。
(78) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列とは異なる変換タイプの前記第2の変換行列を導出する
(77)に記載の画像処理装置。
(79) 前記導出部は、前記第1の変換行列をフリップまたは転置して、前記第2の変換行列を導出する
(77)または(78)に記載の画像処理装置。
(80) 変換行列の一部を構成する部分行列を用いて前記変換行列を導出し、
導出された前記変換行列を用いて、画像の予測残差を直交変換し、
前記予測残差が直交変換されて得られた係数データを符号化し、ビットストリームを生成する
画像処理方法。
(81) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得る復号部と、
変換行列の一部を構成する部分行列を用いて前記変換行列を導出する導出部と、
前記導出部により導出された前記変換行列を用いて、前記復号部により得られた前記係数データを逆直交変換する逆直交変換部と
を備える画像処理装置。
(82) 前記導出部は、ルックアップテーブルに格納される前記部分行列を用いて、前記変換行列を導出する
(81)に記載の画像処理装置。
(83) 前記逆直交変換部は、前記復号部により得られた前記係数データに対する逆セカンダリ変換を行い、さらに、前記導出部により導出された前記変換行列を用いて、前記逆セカンダリ変換結果に対して逆プライマリ変換を行う
(81)または(82)に記載の画像処理装置。
(84) 前記導出部は、水平方向の逆1次元直交変換用の前記変換行列と、垂直方向の逆1次元直交変換用の前記変換行列とを導出し、
前記逆直交変換部は、前記逆プライマリ変換として、
前記導出部により導出された水平方向の逆1次元直交変換用の前記変換行列を用いて、前記水平方向の逆1次元直交変換を行い、さらに、
前記導出部により導出された垂直方向の逆1次元直交変換用の前記変換行列を用いて、前記垂直方向の逆1次元直交変換を行う
(83)に記載の画像処理装置。
(85) 前記導出部は、前記部分行列を、前記変換行列の中心を通る所定の方向の軸を中心としてフリップして前記変換行列の残りの部分行列を導出することにより、前記変換行列を導出する
(81)乃至(84)のいずれかに記載の画像処理装置。
(86) 前記導出部は、前記部分行列を行に平行な方向にフリップする
(85)に記載の画像処理装置。
(87) 前記導出部は、前記部分行列を列に平行な方向にフリップする
(85)または(86)に記載の画像処理装置。
(88) 前記導出部は、前記部分行列を、前記変換行列の中心を中心とする回転方向にフリップする
(85)乃至(87)のいずれかに記載の画像処理装置。
(89) 前記導出部は、前記部分行列を、前記変換行列の対角線を軸とする斜め方向にフリップする
(85)乃至(88)のいずれかに記載の画像処理装置。
(90) 前記導出部は、さらに、フリップされた前記部分行列の要素の符号を反転して、前記変換行列を導出する
(85)乃至(89)のいずれかに記載の画像処理装置。
(91) 前記部分行列は、前記変換行列の左半分の部分行列または右半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の行方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の行ベクトルの符号を反転して、前記変換行列の右半分の部分行列または左半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(81)乃至(90)のいずれかに記載の画像処理装置。
(92) 前記部分行列は、前記変換行列の上半分の部分行列または下半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の列方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の列ベクトルの符号を反転して、前記変換行列の下半分の部分行列または上半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(81)乃至(91)のいずれかに記載の画像処理装置。
(93) 前記部分行列は、前記変換行列の上半分の部分行列または下半分の部分行列であり、
前記導出部は、前記部分行列を前記変換行列の中心を中心とする回転方向にフリップし、さらに、フリップされた前記部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、前記変換行列の下半分の部分行列または上半分の部分行列を導出することにより、前記変換行列を導出するように構成される
(81)乃至(92)のいずれかに記載の画像処理装置。
(94) 前記部分行列は、前記変換行列の右上三角部分の部分行列または左下三角部分の部分行列であり、
前記導出部は、前記部分行列を転置して、前記変換行列の左下三角部分の部分行列または右上三角部分の部分行列を導出することにより、前記変換行列を導出するように構成される
(81)乃至(93)のいずれかに記載の画像処理装置。
(95) 前記部分行列は、前記変換行列の左上三角部分の部分行列または右下三角部分の部分行列であり、
前記導出部は、前記部分行列を、前記変換行列の右上端と左下端を結ぶ対角線を軸とする斜め方向にフリップし、さらに、奇数番目の行ベクトルの符号を反転して、前記変換行列の右下三角部分の部分行列または左上三角部分の部分行列を導出することにより、前記変換行列を導出するように構成される
(81)乃至(94)のいずれかに記載の画像処理装置。
(96) 前記部分行列は、前記変換行列の左上4分の1の部分行列であり、
前記導出部は、
前記部分行列を、前記変換行列の行方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の行ベクトルの符号を反転して、前記変換行列の右上4分の1の部分行列を導出し、
前記部分行列を、前記変換行列の列方向にフリップし、さらに、フリップされた前記部分行列の奇数番目の列ベクトルの符号を反転して、前記変換行列の左下4分の1の部分行列を導出し、
前記部分行列を、前記変換行列の中心を中心とする回転方向にフリップし、さらに、フリップされた前記部分行列の、行番号および列番号がともに偶数である要素、および、行番号および列番号がともに奇数である要素の符号を反転して、前記変換行列の右下4分の1の部分行列を導出することにより、
前記変換行列を導出するように構成される
(81)乃至(95)のいずれかに記載の画像処理装置。
(97) 前記導出部は、前記部分行列を用いて第1の変換行列を導出し、さらに、導出した前記第1の変換行列を用いて第2の変換行列を導出し、
前記逆直交変換部は、前記導出部により導出された前記第2の変換行列を用いて、前記係数データを逆直交変換する
(81)乃至(96)のいずれかに記載の画像処理装置。
(98) 前記導出部は、前記第1の変換行列を用いて、前記第1の変換行列とは異なる変換タイプの前記第2の変換行列を導出する
(97)に記載の画像処理装置。
(99) 前記導出部は、前記第1の変換行列をフリップまたは転置して、前記第2の変換行列を導出する
(97)または(98)に記載の画像処理装置。
(100) ビットストリームを復号し、画像の予測残差が直交変換された係数データを得て、
変換行列の一部を構成する部分行列を用いて前記変換行列を導出し、
導出された前記変換行列を用いて、得られた前記係数データを逆直交変換する
画像処理方法。