本発明は,フレーム間符号化とフレーム内符号化との両符号化方式を有する映像符号化方式において,少ない演算コストでより効率のよい符号化方式の選択を行う技術に関するものである。
例えば,H.264映像符号化方式では,フレーム内の情報のみを用いて符号化を行うフレーム内符号化と,符号化済みフレームから残差電力が小さい領域を探索し,その領域との差分を符号化する動き補償付きフレーム間符号化の2つの符号化方式がある(例えば,非特許文献1参照)。主要な映像符号化方式の多くが,これら2つの符号化方式を組み合わせたものである。
フレームをマクロブロック単位に区切り,それぞれのマクロブロックについてフレーム内符号化とフレーム間符号化のうち効率の良い方を選択する場合には,両符号化方式の符号化コストを見積もり,よりコストの低い符号化方式を選択する。
図15は,従来の符号化予測モード決定処理フローチャートである。処理が開始されると,まず,符号化対象マクロブロックについてフレーム内符号化予測モードのコスト計算を行い,コストが最小となる予測モードを求め,その最小コストを min_Intra に代入する(ステップS200)。
次に,符号化対象マクロブロックについてフレーム間符号化予測モードのコスト計算を行い,コストが最小となる予測モードと動きベクトルとを求め,そのときのコストを min_Inter に代入する(ステップS201)。
min_Intra と min_Inter とを求めた後,その大小を比較する(ステップS202)。 min_Inter の方が小さいならば,符号化予測モードをフレーム間符号化に設定し,フレーム間符号化の予測モード情報を出力する(ステップS203)。それ以外ならば,符号化予測モードをフレーム内符号化に設定し,フレーム内符号化の予測モード情報を出力する(ステップS204)。
このように符号化予測モードを決定することで,符号量が最も小さくなると期待される符号化予測モードを選択できる。
図16は,従来の符号化予測モード決定装置の構成例を示す図である。符号化予測モード決定装置200は,フレーム内符号化予測モード決定部201,フレーム間符号化予測モード決定部202,コスト判定部203から構成される。
フレーム内符号化予測モード決定部201は,マクロブロック番号が入力されると,そのマクロブロックに関してフレーム内符号化予測モードのコスト計算を行い,コストが最小となる予測モードを求め,フレーム内符号化の予測モード情報を出力し,その最小となるコストをコスト判定部203に送信する。
フレーム間符号化予測モード決定部202は,マクロブロック番号が入力されると,そのマクロブロックに関してフレーム間符号化予測モードのコスト計算を行い,コストが最小となる予測モードと動きベクトルとを求め,フレーム間符号化の予測モード情報を出力し,その最小となるコストをコスト判定部203に送信する。
コスト判定部203は,フレーム内符号化予測モード決定部201から送られてくるコストと,フレーム間符号化予測モード決定部202から送られてくるコストとを受信すると,それらのコストの大小を比較し,コストが小さい方をフレーム内/フレーム間判定信号として出力する。
この符号化予測モード決定装置200の動作は,以下のようになる。符号化予測モード決定装置200に予測すべき符号化対象マクロブロックのマクロブロック番号が入力されると,そのマクロブロック番号は,フレーム内符号化予測モード決定部201とフレーム間符号化予測モード決定部202とに入力される。
フレーム内符号化予測モード決定部201では,マクロブロック番号を受信すると,そのマクロブロックで最もコストが小さくなる予測モードを求め,フレーム内符号化の予測モード情報を出力し,そのときのコストをコスト判定部203に送信する。
フレーム間符号化予測モード決定部202では,マクロブロック番号を受信すると,そのマクロブロックで最もコストが小さくなる予測モードと動きベクトルとを求め,フレーム間符号化の予測モード情報を出力し,そのときのコストをコスト判定部203に送信する。
コスト判定部203では,これら2つのコストを受信すると,その値の大小を比較し,フレーム内符号化かフレーム間符号化かを決定する。そして,選択された符号化方式をフレーム内/フレーム間判定信号として送信する。
このような仕組みを用いることで,各マクロブロックごとに最も符号化効率がよいと予想される符号化方式が選択される。
フレーム内符号化とフレーム間符号化とから,最も符号化効率がよいと予想される符号化方式を選択する技術として,例えば,非特許文献2に記載された技術や,非特許文献3に記載された技術などがある。
恒川 賢二,「H.264の概要」,PIONEER R&D Vol.13 NO.1
安田 浩 ,渡辺 裕,"ディジタル画像圧縮の基礎",日経BP出版センター,pp.118(1996)
清水 智行 他,「H.264符号化処理におけるIntra/Inter モード判定に関する一検討」,2004年電子情報通信学会総合大会,D-11-51
H.264映像符号化方式では,MPEG−1やMPEG−2などを始めとする従来の映像符号化方式とは違い,フレーム内符号化でも予測画像を利用して符号化効率の向上を図っている。したがって,符号化方式を決定するためには,上記の手順で示したように,フレーム内符号化とフレーム間符号化とのそれぞれのコストを計算し,その結果から符号化方式を選択するという方法が取られる。しかし,両方の符号化方式のコストを計算しなければならないため,非常に計算コストがかかるという問題がある。
H.264のフレーム内符号化の予測モード決定の際には,13種類の予測モードに対応する予測画像を生成し,それぞれのコストを求めることになるため,非常に重い処理が必要となる。また,フレーム間符号化では動きベクトルを求める必要があるため,この際にも多くの演算量が必要とされる。
これに対して,例えば非特許文献3において提案されている方法では,フレーム間符号化予測モードでのコストを計算し,ブロック内の隣接画素の差分値の分散を計算し,その2つの値を比較し,その結果によってはフレーム内予測を省略するという方法により,計算コストの削減を図っている。
しかし,非特許文献3の方法では,フレーム間符号化でのコスト計算終了後にフレーム内予測をするかどうかの判断を行っているため,フレーム間予測を必ず行う必要があるという問題がある。
本発明の目的は,少ない演算コストでフレーム間/フレーム内符号化の要・不要の判定を行うことができる技術を提供することである。
本発明は,上記の課題を解決するために,例えばフレーム内符号化とフレーム間符号化の両方式を有する映像符号化方式において,参照フレームの動きベクトルを符号化対象フレームに外挿/内挿したベクトルを生成する手段と,そのベクトルに従って動いたマクロブロックの各画素の座標を求める手段と,前記手段によって求めた座標が画面内かを判定する手段と,前記手段によって求めた座標と画素の座標が一致する回数を各画素毎にカウントする手段と,参照フレームの動き予測誤差の大きさの大小を判定する手段と,前記手段によって求めたカウント数の信頼度を,参照フレームの各画素の動き予測残差の大きさと,その画素が所属するマクロブロックの外挿/内挿ベクトルを用いて推定する手段と,符号化対象マクロブロック内の各画素のカウント数からそのマクロブロックのフレーム内符号化およびフレーム間符号化の要/不要を判定する手段とを有し,不要な予測モード決定は行わないことを特徴とする。
また,前記外挿/内挿ベクトルを,参照フレームの動きベクトルをもとに,符号化対象フレームと,参照フレームと,その動きベクトルが所属するマクロブロックが参照する参照フレームの相対距離の比から算出する手段を有することを特徴とする。
また,前記カウント数が1以上である画素の個数を各マクロブロック毎に求める手段を有し,その個数からフレーム内符号化およびフレーム間符号化の要/不要判定を行うことを特徴とする。
また,前記内挿/外挿ベクトルに従って動いた先が同一の座標になる画素の動き予測誤差を,カウント数の信頼度とすることを特徴とする。
また,前記フレーム内符号化およびフレーム間符号化の要/不要を,前記手段によって求めた個数と,予め定めた閾値との大小から決定することを特徴とする。
本発明によれば,フレーム内符号化とフレーム間符号化の2つの符号化方式を用いる映像符号化方式での符号化予測モード決定において,符号化効率の低下を最小限に留めながら,フレーム内符号化かフレーム間符号化かの判定を行う部分の計算コストを削減するという効果が得られる。
本発明は,符号化済みフレームの動きベクトルの情報から,符号化対象フレームのマクロブロックのそれぞれについて,フレーム間符号化で効率よく符号化が行えるかを判定する。そのため,本発明では,まず,参照フレームのマクロブロックの動きベクトルを,符号化対象フレームに内挿/外挿したベクトルを求める。
図1は,内挿/外挿ベクトルの計算の例を説明する図である。参照フレームの動きベクトルをV,符号化対象フレーム番号をi,参照フレーム番号をj,マクロブロックが参照する先の参照フレーム番号をkとする。このとき,内挿/外挿ベクトルVrは,フレーム間隔(i−j)と(j −k)とから,次式,
Vr =−(i−j)V/(j−k)
により求める。
近接したフレーム間では,動作が連続している可能性が高い。したがって,参照フレームの動きベクトルを符号化対象フレームに内挿/外挿することで,参照フレームのマクロブロックが符号化対象フレームのどの部分に移動するのかを推定することができる。
次に,このベクトルによって参照フレームの各マクロブロックが移動する先の座標を算出する。また,符号化対象フレームの各画素ごとに,移動したマクロブロックの画素と重なる回数を求める。
図2は,重なり回数の計算の例を説明する図である。この例では,マクロブロックのサイズを4×4としている。図2(A)において,実線は符号化対象フレームのマクロブロックの境界を表し,点線で示した3つのブロックは参照フレームの各マクロブロックの移動位置を表している。この例では,図2(A)の太枠で示したマクロブロック内の各画素の重なり回数は,図2(B)に示すようになる。
マクロブロックを動かしたときに重なる部分については,フレーム間予測を行ったときに予測残差電力が小さい部分が存在すると予想されるため,そのマクロブロックは,フレーム間符号化で効率よく符号化することができる。逆に,参照フレームのマクロブロックを内挿/外挿した動きベクトルの方向に動かしたときに全く重ならない領域については,フレーム間予測の予測残差が大きくなると予想されるため,そのマクロブロックはフレーム内符号化を行う必要性が高いと考えられる。
このように,参照フレームの動きベクトル情報を用いることで,フレーム内符号化とフレーム間符号化との必要・不必要を判定することが可能となる。
また,図1の例で求めたベクトルVrの信頼度を示す評価値として,前フレームの動き予測の際に求めた各画素の差分値を利用する。
図3は,ベクトルVrの信頼度を評価する評価関数の計算の例を説明する図である。図3(A)は,参照フレームの各画素の動き予測残差の絶対値を示している。簡単のため同一ブロック内の各画素の予測残差は同一の値にしているが,実際には各画素ごとの予測誤差の値を用いる。
図3(A)の各ブロックが内挿/外挿ベクトルVrによって移動する先の座標を求め,その座標に対応する配列に予測誤差の値を格納する。このとき,一つの座標に複数の値がくる場合には,それらの値の中で最も小さなものを採用するものとする。また,一枚もマクロブロックが重ならない画素に関しては,図3(B)に示してあるように,予測誤差の取りうる最大値Mを格納する。
映像の中で動き補償の符号化効率が悪い領域では,動きベクトルの向きがばらつく現象が起こる。この場合,フレーム間での動きベクトルの連続性が期待できないため,このような動きベクトルを判定の材料に用いると判定精度が悪化する。そこで,動き予測誤差の大きさをもとに,連続性が期待できないベクトルを判別することで,判定精度を向上させることができる。
その後,重なり回数(図2参照)と予測誤差(図3参照)とをもとに,例えば実施例として後述する方法により,各マクロブロックのスコアを計算し,このスコアからフレーム内符号化およびフレーム間符号化の要/不要の判定を行う。
図4は,スコア計算処理フローチャートである。初期段階では,重なり回数S(x,y)のすべての要素を0,残差情報Tr(x,y)のすべての要素を予測誤差の最大値Mとする。
処理を開始すると,初めに,フレーム間符号化予測モード情報保存バッファから,予測に使われないフレームの情報を削除する(ステップS10)。ここで削除する情報は,例えば次のステップS11で使用する情報以外の情報であり,予測に不要な情報である。この削除処理は必須ではなく,省略してもよい。
次に,フレーム間符号化予測モード情報保存バッファから,1つの動き補償ブロックについて,以下の情報を1組取得する(ステップS11)。
・ブロックが所属する参照フレーム番号j
・動きベクトルV=(a,b)
・動き補償ブロックのサイズ(dx ,dy )
・ブロックの左上の画素の座標(xmb,ymb)
・ブロックが参照する先の参照フレーム番号k
・ブロックの各画素の動き予測誤差R(x,y)
また,取り出したベクトルについて,符号化対象フレームiへの内挿/外挿ベクトルVrを,次式によって計算する(ステップS12)。
Vr=−(i−j)V/(j−k)
求めた内挿/外挿ベクトルVrによって,左上の座標が(xmb,ymb)であり,サイズが(dx ,dy )である動き補償ブロックの各画素(x0 ,y0 )〔ただし,x0 =0〜dx ,y0 =0〜dy 〕が動いた先の座標(xt(x0 ),yt(y0 ))を,ブロックのすべての画素について求める(ステップS13)。このxt(x0 ),yt(y0 )は,具体的には以下の式で表される。
xt(x0 )=−(i−j)a/(j−k)+xmb+x0 (x0 =0〜dx )
yt(y0 )=−(i−j)b/(j−k)+ymb+y0 (y0 =0〜dy )
このようにして求めた座標(xt(x0 ),yt(y0 ))について,その座標が画面内の座標であるかどうかを判定し,画面内の座標であるならば,重なり回数S(xt(x0 ),yt(y0 ))の値を1増やす(ステップS14)。
また,(xt(x0 ),yt(y0 ))が画面内のものについて残差情報Tr(xt(x0 ),yt(y0 ))を取り出し,Tr(xt(x0 ),yt(y0 ))とR(x0 ,y0 )とを比較して,R(x0 ,y0 )<Tr(xt(x0 ),yt(y0 ))であれば,Tr(xt(x0 ),yt(y0 ))の値をR(x0 ,y0 )で置き換えて更新する(ステップS15)。
すべての動き補償ブロックの処理が終了したかを判定し(ステップS16),他にもフレーム間符号化予測モード情報保存バッファに動き補償ブロックが存在するならば,そのブロックについてステップS11〜S15の処理による操作を繰り返す。
以上の操作をすべての動き補償ブロックについて施した後,各画素の重なり回数S(x,y)と残差情報Tr(x,y)とを使って次フレームの全マクロブロックのスコアを計算し,Sb(MB)(MBはマクロブロック番号)に代入する(ステップS17)。
計算終了後,重なり回数S(x,y)をすべての(x,y)について0で初期化する(ステップS18)。また,残差情報Tr(x,y)をすべての(x,y)について予測誤差が取りうる最大値Mで初期化する(ステップS19)。以上の手順により,次フレームの各マクロブロックのスコア計算が行われる。
次に,求められたスコアSb(MB)を利用してフレーム内符号化予測とフレーム間符号化予測の要/不要判定を行うマクロブロックの符号化予測モード決定方法を,図5に従って説明する。図5は,本発明の実施の形態における符号化予測モード決定処理フローチャートである。マクロブロック番号MBの符号化予測モード決定処理が開始されると,まず,このマクロブロックMBのスコアSb(MB)を判定関数Ch(Sb(MB))に代入し,フレーム内符号化コスト計算の要/不要,フレーム間符号化コスト計算の要/不要の決定を行う(ステップS20)。その詳細を図6に示す。
図6は,判定関数Ch(Sb(MB))によるフレーム内符号化コスト計算/フレーム間符号化コスト計算の要/不要判定処理フローチャートである。図6において,Th_Intra はあらかじめ設定されたフレーム内符号化に関する閾値,Th_Inter はあらかじめ設定されたフレーム間符号化に関する閾値である。
まず,スコアSb(MB)とフレーム内符号化に関する閾値Th_Intra とを比較し(ステップS40),Sb(MB)がTh_Intra 以上であれば,フレーム内符号化コスト計算を不要に設定する(ステップS41)。Sb(MB)がTh_Intra より小さければ,フレーム内符号化コスト計算を必要に設定する(ステップS42)。
次に,スコアSb(MB)とフレーム間符号化に関する閾値Th_Inter とを比較し(ステップS43),Sb(MB)がTh_Inter 以下であれば,フレーム間符号化コスト計算を不要に設定する(ステップS44)。Sb(MB)がTh_Inter より大きければ,フレーム間符号化コスト計算を必要に設定する(ステップS45)。
再び図5において,まず,フレーム内符号化コスト計算の必要性から分岐し(ステップS21),必要ならば,フレーム内符号化のコスト計算ルーチンによって,フレーム内符号化のコスト計算を行う(ステップS22)。必要ないならば,フレーム内符号化のコストの最小値 min_Intra を十分大きな値に設定する(ステップS23)。
次に,フレーム間符号化コスト計算の必要性から分岐し(ステップS24),必要ならば,フレーム間符号化のコスト計算ルーチンによって,フレーム間符号化のコスト計算を行う(ステップS25)。必要ないならば,フレーム間符号化のコストの最小値 min_Inter を十分大きな値に設定する(ステップS26)。
このようにして求めたコスト min_Intra と min_Inter との大小を比較する(ステップS27)。 min_Inter の方が小さいならば,符号化予測モードをフレーム間符号化に設定し,フレーム間符号化予測モード情報を出力する(ステップS28)。また,そのフレーム間符号化予測モード情報を,フレーム間符号化予測モード情報保存バッファに格納する(ステップS29)。
min_Intra が min_Inter 以下の場合には,符号化予測モードをフレーム内符号化に設定し,予測モード情報を出力する(ステップS30)。
その後,マクロブロック番号MBがフレームの最後かどうかを判定し(ステップS31),最後ならば,図4のフローチャートに示すスコア計算処理を行い,次フレームの各マクロブロックのスコアを求める(ステップS32)。
以上の処理を行うことで,符号化効率の低下を抑えながら符号化予測モード決定時の計算コストを削減することが可能となる。
図7は,本発明における符号化予測モード決定装置の構成例を示す図である。符号化予測モード決定装置1は,符号化予測モード制御部10,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30,コスト判定部40から構成される。
図7におけるフレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30,コスト判定部40は,それぞれ,図16におけるフレーム内符号化予測モード決定部201,フレーム間符号化予測モード決定部202,コスト判定部203と同等の機能を有するものとする。ただし,フレーム内符号化予測モード決定部20およびフレーム間符号化予測モード決定部30は,マクロブロック番号として−1が入力された場合に,何も処理をしないで十分大きな値をコストとしてコスト判定部40に送信するものとする。
図8は,符号化予測モード制御部の構成例を示す図である。符号化予測モード制御部10は,フレーム番号カウンタ100,フレーム間符号化予測モード情報保存バッファ101,移動先推定部102,重なり回数カウント部103,重なり回数保存メモリ104,スコアSb計算部105,マクロブロックスコアデータ保存メモリ106,判定関数Ch計算部107,予測残差移動先処理部108,予測残差情報保存メモリ109から構成される。
フレーム番号カウンタ100は,符号化対象フレームの番号を保持し,マクロブロック番号として0が入力される度に,保持しているフレーム番号を1増やす。また,フレーム番号をフレーム間符号化予測モード情報保存バッファ101と移動先推定部102とに送信する。
フレーム間符号化予測モード情報保存バッファ101は,フレーム内/フレーム間判定信号としてフレーム間符号化が入力されたときに,その時点で入力されているフレーム番号,マクロブロック番号,フレーム間符号化予測モード情報を,1組として保存する。マクロブロック番号として0が入力された場合には,保持しているフレーム間符号化予測モード情報のうち,フレーム間予測に使われないフレーム番号の情報をすべて削除する。マクロブロック番号として最後の番号が入力された場合には,フレーム内/フレーム間判定信号とフレーム間符号化予測モード情報とを受信した後に,バッファ内に保持しているフレーム間符号化予測モード情報を,逐次,移動先推定部102に送信する。
移動先推定部102は,フレーム間符号化予測モード情報として参照フレーム番号j,動きベクトルV=(a,b),動き補償ブロックのサイズ(dx ,dy ),そのブロックの左上の座標の画像(xmb,ymb),そのブロックが参照する先の参照フレーム番号k,ブロックの各画素の予測残差R(x,y)が入力されると(ここで,x=0〜dx ,y=0〜dy ),フレーム番号カウンタ100から送信されるフレーム番号iを用いて内挿/外挿ベクトルVr=−(i−j)V/(j−k)を計算する。
求めた内挿/外挿ベクトルVrによって,動き補償ブロックが動いた先の座標(xt(x),yt(y))を,ブロックすべての画素(x,y)について求める。また,各画素の予測残差R(x,y)と,その移動先座標(xt(x),yt(y))との組を,予測残差移動先処理部108に順次送信する。また,移動先座標(xt(x),yt(y))については,重なり回数カウント部103にも同時に送信する。すべての動き補償ブロックについて上記の操作が完了すると,スコアSb計算部105に計算開始信号を送信する。
重なり回数カウント部103は,移動先推定部102から座標が送られてくる度に,その座標のカウント数を重なり回数保存メモリ104から取り出し,それに1を加えて同じ場所に保存する。ただし,指定された座標が画面外の座標である場合には,その処理は行わない。
重なり回数保存メモリ104は,各画素に対応する値を保持し,重なり回数カウント部103とスコアSb計算部105とにデータを送信する。また,スコアSb計算部105からリセット信号を受信すると,メモリの内容をすべて0で初期化する。
スコアSb計算部105は,移動先推定部102から計算開始信号を受信すると,重なり回数保存メモリ104に格納されたデータと,予測残差情報保存メモリ109に格納されたデータとをもとに,各マクロブロックのスコア計算を行う。計算結果は,マクロブロックスコアデータ保存メモリ106に格納する。計算終了後,予測残差情報保存メモリ109と重なり回数保存メモリ104とにリセット信号を送り,これらの内容を初期化する。
マクロブロックスコアデータ保存メモリ106は,各マクロブロックのスコアSbを保持する。また,そのスコアSbを判定関数Ch計算部107に送信する。
判定関数Ch計算部107は,マクロブロック番号を受信すると,そのマクロブロックのスコアをマクロブロックスコアデータ保存メモリ106から取得する。そしてそれを判定関数Chに代入して計算を行い,フレーム内符号化コスト計算の必要性の有無,フレーム間符号化コスト計算の必要性の有無を判定する。判定した結果により,以下の情報を出力する。
・フレーム内符号化コスト計算が必要な場合には,フレーム内符号化予測モード決定部20にマクロブロック番号を出力する。必要がない場合には,−1を出力する。
・フレーム間符号化コスト計算が必要な場合には,フレーム間符号化予測モード決定部30にマクロブロック番号を出力する。必要がない場合には,−1を出力する。
予測残差移動先処理部108は,移動先推定部102から送られてくる各画素の予測残差とその移動先座標とを受信すると,まず,移動先座標が画面内の座標であるかどうかを判定する。画面内の座標であるならば,その座標に対応する値を予測残差情報保存メモリ109から取り出し,移動先推定部102から受信した残差と比較する。そして,値の小さい方を予測残差情報保存メモリ109に格納する。
予測残差情報保存メモリ109は,全画素数と同数の配列を持ち,予測残差移動先処理部108から送られてくる予測残差の値を保持する。また,スコアSb計算部105からリセット信号を受信すると,すべての値を予測残差が取りうる最大値Mで初期化する。
以上の図7,図8の例に示した符号化予測モード決定装置1を用いることにより,図4,図5,図6のフローチャートに示された処理を実行することができる。以上の実施の形態の作用は,以下のとおりである。
近接したフレーム間では,動作が連続している可能性が高い。したがって,参照フレームの動きベクトルを符号化対象フレームに内挿/外挿することで,参照フレームのマクロブロックが符号化対象フレームのどの部分に移動するのかを推定することができる。このようにマクロブロックを動かしたときに重なる部分については,フレーム間予測を行ったときに予測残差電力が小さい部分が存在すると予想されるため,そのマクロブロックは,フレーム間符号化で効率よく符号化することができる。逆に,参照フレームのマクロブロックを内挿/外挿した動きベクトルの方向に動かしたときに全く重ならない領域については,フレーム間予測の予測残差が大きくなると予想されるため,そのマクロブロックはフレーム内符号化を行う必要性が高いと考えられる。
このように,参照フレームの動きベクトル情報を用いることで,フレーム内符号化とフレーム間符号化との必要・不必要を判定することが可能となる。
また,映像の中で動き補償の符号化効率が悪い領域では,動きベクトルの向きがばらつく現象が起こる。この場合,フレーム間での動きベクトルの連続性が期待できないため,このような動きベクトルを判定の材料に用いると判定精度が悪化する。そこで,動き予測誤差の大きさをもとに,連続性が期待できないベクトルを判別することで,判定精度を向上させることができる。
なお,図8の例では,重なり回数カウント部103と重なり回数保存メモリ104とを用いて,各画素に対応する重なり回数をカウントし,そのカウント値を記憶しているが,重なり回数保存メモリ104の代わりに,各画素に対応するフラグを持つ重なり位置保存メモリを用い,重なり回数が1以上の場合にフラグ値を“1”,重なり回数が0の場合にフラグ値を“0”として画素位置を記憶するような実施も可能である。
以上の符号化予測モード決定の処理は,コンピュータとソフトウェアプログラムとによっても実現することができ,そのプログラムをコンピュータ読み取り可能な記録媒体に記録して提供することも,ネットワークを通して提供することも可能である。
図9は,本発明の実施例1における符号化予測モード決定処理フローチャートである。本実施例1では,参照フレームは常に1フレーム前のものとし,フレーム間符号化における予測モードは,1種類のみと仮定する。また,動き予測誤差を用いた信頼度の判定は省略する。
処理が開始されると,まず,符号化対象マクロブロックMBのスコアSb(MB)を判定関数Ch(Sb(MB))に代入し,その判定関数の結果によって,そのマクロブロックのフレーム内符号化コスト計算の必要性,フレーム間符号化コスト計算の必要性を求める(ステップS50)。
フレーム内符号化コスト計算の必要性から分岐し(ステップS51),必要ならば,フレーム内符号化のコスト計算ルーチンによって,フレーム内符号化のコスト計算を行う(ステップS52)。必要ないならば,フレーム内符号化のコストの最小値 min_Intra を十分大きな値に設定する(ステップS53)。
また,フレーム間符号化コスト計算の必要性から分岐し(ステップS54),必要ならば,フレーム間符号化のコスト計算ルーチンによって,フレーム間符号化のコスト計算を行う(ステップS55)。必要ないならば,フレーム間符号化のコストの最小値 min_Inter を十分大きな値に設定する(ステップS56)。
このようにして求めたコスト min_Intra と min_Inter との大小を比較する(ステップS57)。 min_Inter の方が小さいならば,符号化予測モードをフレーム間符号化に設定し,フレーム間符号化予測モード情報として最適動きベクトルMVを出力する(ステップS58)。そして,以下の図10のフローチャートに示すスコア計算用前処理を行う(ステップS59)。
図10は,本実施例1におけるスコア計算用前処理フローチャートである。図10において,dx はマクロブロックの幅を表し,dy はマクロブロックの高さを表す。
まず,求めた最適動きベクトルMV=(a,b)を次の符号化対象フレーム方向に外挿したベクトルVr=(−a,−b)を計算する(ステップS70)。次に,マクロブロックMBの左上の座標を(xmb,ymb)とおく(ステップS71)。ループに使う変数jを0に初期化し(ステップS72),マクロブロックのすべての点について,以下のステップS73〜S80の処理を行う。
ループに使う変数iを0に初期化し(ステップS73),マクロブロックMB内の上からj番目,左からi番目の画素に対し,ベクトルVr方向に動いた先の座標(xt,yt)を,以下の式で計算する(ステップS74)。
xt=xmb+i−a
yt=ymb+j−b
算出された座標(xt,yt)が画面内の座標であるかどうかを判定し(ステップS75),画面内の座標であるならば,その座標(xt,yt)に対応するメモリS(xt,yt)の値を1増やす(ステップS76)。
iを1増やして(ステップS77),一つ右の画素に移る。右の画素がマクロブロックMB内の画素であるかどうかを判定し(ステップS78),マクロブロック内の画素であるならば,その座標についての移動先座標計算処理(ステップS74)へ戻る。
右の画素がマクロブロック内の画素でないならば,jを1増やして(ステップS79),一つ下の画素に移る。j<dy かどうか,すなわち下の画素がマクロブロックMB内の画素であるかどうかを判定し(ステップS80),マクロブロック内の画素であるならば,iを0にして(ステップS73),その行の一番左の画素から順に,上記の処理(ステップS74〜S80)を繰り返す。
このようにして,マクロブロック内のすべての画素について移動先の座標を計算し,画素の重なり回数のカウントを行う。以上の処理が,図9のステップS59のスコア計算用前処理である。
図9のステップS57において, min_Intra が min_Inter 以下であった場合には,符号化予測モードをフレーム内符号化に設定し,予測モード情報を出力する(ステップS60)。
その後,マクロブロック番号MBがフレーム内の最後の番号かを判定し(ステップS61),最後の番号でないならば,処理を終了する。
最後のマクロブロック番号MBならば,次フレームの各画素の重なり回数を保持した配列S(x,y)の値から,次フレームの各マクロブロックのスコアを求め,Sbに代入する(ステップS62)。スコアの計算が終了したら,スコア計算用配列を初期化する(ステップS63)。ここでは,重なり回数を保持する配列S(x,y)の全成分を0で初期化する。
以上のような手法を用いることで,符号化効率の低下を抑えつつ,フレーム内符号化とフレーム間符号化を選択する際の演算コストを削減することが可能となる。
以上の本実施例1における処理を実現するための符号化予測モード決定装置の構成例は,図7に示す符号化予測モード決定装置1の構成例と同様である。符号化予測モード決定装置1は,符号化予測モード制御部10,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30,コスト判定部40から構成される。
また,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30,コスト判定部40は,それぞれ図16におけるフレーム内符号化予測モード決定部201,フレーム間符号化予測モード決定部202,コスト判定部203と同等の機能を有するものとする。ただし,フレーム間符号化予測モード決定部30が使用する参照フレームは1フレーム前のみに限定され,また,予測モードは1種類のみであるものとする。
図11は,本実施例1における符号化予測モード制御部の構成例を示す図である。符号化予測モード制御部10は,移動先推定部102,重なり回数カウント部103,重なり回数保存メモリ104,スコアSb計算部105,マクロブロックスコアデータ保存メモリ106,判定関数Ch計算部107から構成される。
重なり回数カウント部103,重なり回数保存メモリ104,マクロブロックスコアデータ保存メモリ106,判定関数Ch計算部107の機能は,図8で説明したとおりである。
移動先推定部102は,フレーム内/フレーム間判定信号としてフレーム間符号化の判定信号が入力されると,フレーム間符号化予測モード情報として動きベクトルMV=(a,b)を取得し,外挿ベクトルVr=(−a,−b)を求める。また,マクロブロック番号から左上の画素の座標を計算し,それらのデータからマクロブロック内の各画素の移動先の座標を計算する。計算した移動先座標を重なり回数カウント部103に送信する。このとき,入力されたマクロブロック番号が最後のものであるならば,すべての座標データを送信した後,スコアSb計算部105に計算開始信号を送信する。
スコアSb計算部105は,移動先推定部102から計算開始信号を受信すると,重なり回数保存メモリ104から,各画素の重なり回数を取り出す。そして,重なり回数からマクロブロックのスコアを計算し,マクロブロックスコアデータ保存メモリ106に送信する。また,計算終了後,重なり回数保存メモリ104にリセット信号を送信する。
このような符号化予測モード制御部10の動作は,次のようになる。まず,マクロブロック番号MBが入力されると,判定関数Ch計算部107は,マクロブロックスコアデータ保存メモリ106から対応するスコアを取り出し,判定関数によりフレーム内符号化予測の要/不要,フレーム間符号化予測の要/不要を決定し,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30に,そのマクロブロック番号もしくは−1を送信する。
移動先推定部102にフレーム内/フレーム間判定信号としてフレーム間符号化が入力されると,フレーム間符号化予測モード情報として動きベクトルMVを取得する。移動先推定部102は,そのマクロブロックのすべての画素の移動先座標を計算し,重なり回数カウント部103に送信する。重なり回数カウント部103は,受信した移動先座標が画面内の座標であるかを判定し,重なり回数をカウントして重なり回数保存メモリ104に保存する。
入力されたマクロブロック番号MBが最後のものならば,移動先推定部102は,移動先座標計算終了後,計算開始信号をスコアSb計算部105に送信する。スコアSb計算部105は,計算開始信号を受信すると,重なり回数保存メモリ104から各画素の重なり回数を取り出して次のフレームの各マクロブロックのスコアを計算して,マクロブロックスコアデータ保存メモリ106に送信し,重なり回数保存メモリ104にリセット信号を送信して重なり回数保存メモリ104の内容を0で初期化する。
本実施例における符号化予測モード決定装置1の動作は,次のようになる。まず,符号化予測モード制御部10にマクロブロック番号MBが入力されると,判定関数Ch(Sb(MB))を計算し,フレーム内符号化予測の要/不要,フレーム間符号化予測の要/不要の判定を行う。
判定の結果,フレーム内符号化予測が必要な場合には,フレーム内符号化予測モード決定部20にマクロブロック番号を出力する。不必要の場合には,−1を出力する。同様に,判定の結果,フレーム間符号化予測が必要な場合には,フレーム間符号化予測モード決定部30にマクロブロック番号を出力する。不必要の場合には,−1を出力する。
フレーム内符号化予測モード決定部20は,入力されたマクロブロック番号が−1の場合には,十分大きな値をコストとしてコスト判定部40に送信する。それ以外の場合には,その番号のマクロブロックのフレーム内符号化予測モードを決定し,その番号を出力すると同時に,コストをコスト判定部40に送信する。
フレーム間符号化予測モード決定部30は,入力されたマクロブロック番号が−1の場合には,十分大きな値をコストとしてコスト判定部40に送信する。それ以外の場合には,その番号のマクロブロックの動きベクトルを決定し,その動きベクトル情報を出力すると同時に,コストをコスト判定部40に送信する。
コスト判定部40は,2つのコストを受信すると,その大小を判定する。そしてコストが小さい方をそのマクロブロックの符号化予測モードと決定し,その結果をフレーム内/フレーム間判定信号として出力する。
入力されたマクロブロック番号が最後の番号であった場合には,これらの処理終了後に次フレームの各マクロブロックのスコアの計算を行う。
以上のような符号化予測モード決定装置1を用いることで,図9,図10のフローチャートに示す処理を実現することができる。
次に,コスト関数Sbと判定関数Chの具体的な例について述べる。まず,コスト関数Sbであるが,例えば,マクロブロックに含まれる全画素の重なり回数を取り出し,各画素について0回ならば0,1回以上ならば1としてその値をマクロブロックで合計したものを考える。この値は,前マクロブロックが動いたものと重なる画素が1マクロブロック中に何画素あるかを示している。
H.264映像符号化方式を用いて従来法で符号化したものについて,上記のコスト関数Sbを適用した場合の傾向を,図12に示す。図12は,スコアの分布とフレーム内予測が選択される割合の例を示している。横軸はスコアを表しており,曲線のグラフはそのスコアを取るマクロブロックの個数,棒グラフはその区間のスコアを取るマクロブロックでフレーム内符号化が選択された割合を表している。
この結果から,スコアの値が大きいマクロブロックほどフレーム間符号化が採用される可能性が高く,またその個数も多いことが分かる。逆に,スコアの値が小さいマクロブロックでは,フレーム内符号化が採用される可能性が高いことが分かる。
そこで,例えば,判定関数Chとして,「スコアがマクロブロック内の全画素数の4/5以上ならばフレーム内符号化の予測は不要」,逆に「スコアが1/15以下のマクロブロックならばフレーム間符号化の予測は不要」というものを考える。そうすると,多くのマクロブロックでフレーム内/フレーム間符号化予測の処理が省略することができる。
この例では,「スコアがマクロブロック内の全画素数の4/5以上ならばフレーム内符号化の予測は不要」とするという判定関数Chにおける「4/5」という閾値は,実験によって得られた図12のグラフから,従来方法による符号化予測モードの決定において,フレーム内予測が選択される割合が10%以下であるスコアの値から決定している。
また,「スコアが1/15以下のマクロブロックならばフレーム間符号化の予測は不要」とするという判定関数Chにおける「1/15」という閾値は,実験によって得られた図12のグラフから,従来方法による符号化予測モードの決定において,フレーム内予測が選択される割合が85%以上であるスコアの値から決定している。
本実施例2では,参照フレームは常に1フレーム前のものとし,フレーム間符号化における予測モードは1種類のみとする。また,予測誤差の最大値Mは255とする。
なお,符号化予測モード決定処理フローチャートの流れは,前述の実施例1と同様に図9に示すものとなる。ただし,スコア計算用前処理(ステップS59)は,図13のフローチャートに示す処理となる。また,スコア計算用配列の初期化(ステップS63)では,重なり回数を保持するメモリS(x,y)のすべての要素を0で初期化すると同時に,予測誤差情報を保持するメモリTr(x,y)のすべての要素を255で初期化する。
図13は,本実施例2におけるスコア計算用前処理フローチャートである。図13において,dx はマクロブロックの幅を示し,dy はマクロブロックの高さを示す。
まず,求めた最適動きベクトルMV=(a,b)を,次の符号化対象フレーム方向に外挿したベクトルVr=(−a,−b)を計算する。また,マクロブロックMBの左上の座標を(xmb,ymb)とおく(ステップS90)。ループに使う変数jを0に初期化し(ステップS91),マクロブロックのすべての点について,以下のステップS92〜S101の処理を行う。
ループに使う変数iを0に初期化し(ステップS92),マクロブロックMB内の上からj番目,左からi番目の画素に対し,ベクトルVr方向に動いた先の座標(xt,yt)を以下の式で計算する(ステップS93)。
xt=xmb+i−a
yt=ymb+j−b
算出された座標(xt,yt)が画面内の座標であるかどうかを判定し(ステップS94),画面内の座標であるならば,その座標(xt,yt)に対応するメモリS(xt,yt)の値を1増やす(ステップS95)。
次に,その点(xmb+i,ymb+j)の動き予測残差R(i,j)と,その画素が動いた先の座標(xt,yt)に対応するメモリTr(xt,yt)の値とを比較し(ステップS96),R(i,j)がTr(xt,yt)より小さければ,Tr(xt,yt)の値をR(i,j)で置き換えて更新する(ステップS97)。
iを1増やして(ステップS98),一つ右の画素に移る。iとdx との大小比較により,右の画素がマクロブロックMB内の画素であるかどうかを判定し(ステップS99),マクロブロック内の画素であるならば,その座標についての移動先座標計算処理(ステップS93)へ戻る。
右の画素がマクロブロック内の画素でないならば,jを1増やし(ステップS100),一つ下の画素に移る。jとdy との大小比較により,下の画素がマクロブロックMB内の画素であるかを判定し(ステップS101),マクロブロック内の画素であるならばiを0にして(ステップS92),その行の一番左の画素から順に,上記の処理(ステップS92〜S101)を繰り返す。
このようにして,マクロブロック内のすべての画素について移動先の座標を計算し,画素の重なり回数と予測残差に関する処理を行う。以上の処理が,本実施例2におけるスコア計算用前処理である。
このような手法を用いることで,符号化効率の低下を抑えつつ,フレーム内符号化とフレーム間符号化を選択する際の演算コストを削減することが可能となる。
以上の本実施例2における処理を実現するための符号化予測モード決定装置の構成例は,図7に示す符号化予測モード決定装置1の構成例と同様である。符号化予測モード決定装置1は,符号化予測モード制御部10,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30,コスト判定部40から構成される。
図14は,本実施例2における符号化予測モード制御部の構成例を示す図である。符号化予測モード制御部10は,移動先推定部102,予測残差移動先処理部108,予測残差情報保存メモリ109,重なり回数カウント部103,重なり回数保存メモリ104,スコアSb計算部105,マクロブロックスコアデータ保存メモリ106,判定関数Ch計算部107から構成される。
予測残差移動先処理部108,予測残差情報保存メモリ109,重なり回数カウント部103,重なり回数保存メモリ104,マクロブロックスコアデータ保存メモリ106,判定関数Ch計算部107の機能は,図8で説明したとおりである。
移動先推定部102は,フレーム内/フレーム間判定信号としてフレーム間符号化の判定信号が入力されると,フレーム間符号化予測モード情報から動きベクトルMV(a,b)と予測残差R(x,y)を取り出し,外挿ベクトルVr(−a,−b)を求める。また,マクロブロック番号から左上の画素の座標を計算し,それらのデータからマクロブロックの各画素の移動先の座標を計算し,各画素の予測残差とその移動先座標とを順次出力する。このとき,入力されたマクロブロック番号が最後のものならば,すべての座標データを送信後,スコアSb計算部105に計算開始信号を送信する。
スコアSb計算部105は,移動先推定部102から予測開始信号を受信すると,重なり回数保存メモリ104に格納されたデータと,予測残差情報保存メモリ109に格納されたデータとをもとに,各マクロブロックのスコア計算を行う。計算結果は,マクロブロックスコアデータ保存メモリ106に格納する。計算終了後,予測残差情報保存メモリ109と重なり回数保存メモリ104とにリセット信号を送り,これらの内容を初期化する。
符号化予測モード制御部10の動作は,次のようになる。まず,マクロブロック番号MBが入力されると,判定関数Ch計算部107は,マクロブロックスコアデータ保存メモリ106から対応するスコアを取り出し,判定関数によりフレーム内符号化予測の要/不要,フレーム間符号化予測の要/不要を決定し,フレーム内符号化予測モード決定部20,フレーム間符号化予測モード決定部30に,そのマクロブロック番号もしくは−1を送信する。
移動先推定部102にフレーム内/フレーム間判定信号としてフレーム間予測が入力されると,フレーム間符号化予測モード情報から動きベクトルMVと予測残差R(x,y)とを取得する。移動先推定部102は,そのマクロブロックのすべての画素の移動先を計算し,画素の予測残差とその移動先座標とを一組として,同時に送信する。
予測残差移動先処理部108は,予測残差とその移動先座標の情報を受け取ると,移動先座標が画面内の座標であるならば,予測残差情報保存メモリ109から対応する座標のデータを取り出し,受け取った予測残差と比較して小さい方を格納する。重なり回数カウント部103は,受信した移動先座標が画面内の座標であるかを判定し,重なり回数をカウントして重なり回数保存メモリ104に保存する。
入力されたマクロブロックが最後のものであるならば,移動先推定部102は,移動先座標計算終了後,計算開始信号をスコアSb計算部105に送信する。スコアSb計算部105は,計算開始信号を受信すると,重なり回数保存メモリ104と予測残差情報保存メモリ109とから各画素の情報を取り出し,次フレームの全マクロブロックのスコア計算を行う。そして,計算結果をマクロブロックスコアデータ保存メモリ106に送信し,予測残差情報保存メモリ109と重なり回数保存メモリ104とにリセット信号を送信し,予測残差情報保存メモリ109を255で,重なり回数保存メモリ104を0で初期化する。
以上の符号化予測モード決定装置1を用いることで,図9,図13のフローチャートに示す処理を実現することができる。
次に,本実施例2に示したコスト関数Sbの具体例について述べる。例えば,前述の実施例1と同様に,まず,各マクロブロックに含まれる全画素の重なり回数を取り出し,各画素について0回ならば0,1回以上ならば1として,この値をマクロブロックで合計したものが考えられる。
この合計を取る際に,予測残差情報保存メモリ109から各マクロブロックに含まれる全画素の残差情報を取り出し,例えば,「残差がM/5以上の画素については信頼度が低いものとして重なり回数が1回以上であっても0とする」という処理を加えることが考えられる。ここでMは,予測誤差の取りうる最大値である。このような判定を行うことで,より信頼度の高いデータのみをスコアの計算に使用することができる。
以上の実施例1,2では,コスト関数Sbの具体例として,各マクロブロックに含まれる全画素の重なり回数を取り出し,各画素について0回ならば0,1回以上ならば1として,この値をマクロブロックで合計したものを用いた。スコアの計算方法としては,これに限らず,他の方法を用いることもできる。例えば,各画素の重なり回数をマクロブロック毎に合計することでスコアとすることもできる。この場合もスコアが高いほどフレーム間符号化が選択される確率が高く,スコアが低いほどフレーム内符号化が選択される確率が高くなる。そこで同様に,スコアを判別する閾値を上下に設け,フレーム間符号化の要/不要,フレーム内符号化の要/不要を決定することができる。
内挿/外挿ベクトルの計算の例を説明する図である。
重なり回数の計算の例を説明する図である。
評価関数の計算の例を説明する図である。
スコア計算処理フローチャートである。
本発明の実施の形態における符号化予測モード決定処理フローチャートである。
判定関数Ch(Sb(MB))によるフレーム内符号化コスト計算/フレーム間符号化コスト計算の要/不要判定処理フローチャートである。
本発明における符号化予測モード決定装置の構成例を示す図である。
符号化予測モード制御部の構成例を示す図である。
実施例1における符号化予測モード決定処理フローチャートである。
実施例1におけるスコア計算用前処理フローチャートである。
実施例1における符号化予測モード制御部の構成例を示す図である。
スコアの分布とフレーム内予測が選択される割合の例を示す図である。
実施例2におけるスコア計算用前処理フローチャートである。
実施例2における符号化予測モード制御部の構成例を示す図である。
従来の符号化予測モード決定処理フローチャートである。
従来の符号化予測モード決定装置の構成例を示す図である。
符号の説明
1 符号化予測モード決定装置
10 符号化予測モード制御部
20 フレーム内符号化予測モード決定部
30 フレーム間符号化予測モード決定部
40 コスト判定部
100 フレーム番号カウンタ
101 フレーム間符号化予測モード情報保存バッファ
102 移動先推定部
103 重なり回数カウント部
104 重なり回数保存メモリ
105 スコアSb計算部
106 マクロブロックスコアデータ保存メモリ
107 判定関数Ch計算部
108 予測残差移動先処理部
109 予測残差情報保存メモリ