フレーム間予測
フレーム間予測(フレームかんよそく)とは、動画像の圧縮符号化において高い圧縮効率を得るために、異なる時刻のフレームに基づいて予測画像を生成し、入力画像と予測画像の差分(誤差)画像を符号化する方式である。現在の動画像圧縮技術の基礎となる技術の一つである。
一般に、フレーム間予測では、さらに圧縮効率を高めるために動き補償[1](うごきほしょう、MC: Motion Compensation)と呼ばれる技術が同時に用いられる[2]。
概要
[編集]動画像の性質として、前のフレームと現在のフレームは良く似ている。フレーム間予測とは、動画像のこの性質を利用して、前のフレームから現在のフレームを予測する技術である。フレーム間予測を用いた圧縮では、入力画像と予測画像の差分だけを符号化すれば良いので、非常に高い圧縮率を達成できる。なお、フレーム間予測では、時間的に前のフレーム(多くの場合1つ前のフレーム)から予測する方法(前方向予測)だけではなく、後のフレームから予測する方法(後方向予測)や前後のフレームから予測する方法(両方向予測)がある。
Iフレーム (Intra-coded Frame)
- フレーム間予測を用いずに符号化されるフレーム。イントラフレームやキーフレームとも呼ばれる。
Pフレーム (Predicted Frame)
- 前方向予測のみを用いて符号化されるフレーム。
Bフレーム (Bi-directional Predicted Frame)
- 前方向予測、後方向予測、両方向予測のうちいずれかを選択して符号化されるフレーム。
動き補償
[編集]概要
[編集]フレーム間予測は、動き補償と呼ばれる技術と切り離せない関係にある。一般的な動画像では、前のフレームと現在のフレームとは全く同じわけではなく、フレーム中の物体が動いたり、カメラがパンをしたりすることにより、フレーム間で動きがある。動き補償とは、フレーム間予測においてこれらの動きを補うものである。具体的には、現在のフレームを予測する場合に、動きの分だけずらした位置の画像を用いるものである。動き補償を行うためには、画像の動き量を推定する動きベクトル探索(ME: Motion Estimation)が必要になる。符号化する場合には、この動きベクトル(MV: Motion Vector)も同時に符号化する。
また、カメラがパンした場合を除き、フレーム全体が同一方向に動く場合は少ない。フレーム内では物体により動きが異なる。よってフレームを複数の領域に分割し、小領域毎に動き補償を行う。MPEGでは、16×16画素単位の矩形ブロック(マクロブロック、Macroblock)を用いることが多い。
動き補償の精度
[編集]現在の動画像圧縮技術を作ったH.261では、1画素(フルペル)精度の動きを推定し動き補償を行っていたが、MPEG-1になって、半画素(ハーフペル)精度での動き補償が可能になった。物体の動きがちょうど整数画素単位になる確率は高くないため整数画素未満の精度(小数画素精度)での動きを利用することは非常に重要である。なお、小数画素単位でずれた位置の画像を生成するには、画素と画素の間の画素値を得る必要がある。この画素値は、フィルタリングにより画素を内挿して得る。なお、小数画素精度での動き補償では、このフィルタリングの持つローパスフィルタ効果によって、劣化していた予測に用いる画像のノイズが抑えられるという利点もある。
動きの精度は、MPEG-4ビジュアルのバージョン1までは半画素単位であったが、アドバンスドシンプルプロファイル(ASP)などを含むバージョン2では1/4画素(クォーターペル)精度が導入された。これは、H.264でも導入されている。特にゆっくりパンするような動画像において有効である。この精度になると動き情報だけで殆どの画像を再構成できる。
ところで、動きの精度を高めれば高めるほど予測画像の品質は向上するものの、同時に動きを符号化するのに必要な符号量も増える。そのため「どのレベルまで精度を高めると有効であるのか?」という議論がなされている。文献によれば、画像の種類にもよるが、1/8画素精度まで有効であることが理論的に明らかにされている。しかしながら、精度を上げると演算量が膨大になること、1/8画素と1/4画素とでの圧縮効率の違いは殆ど無いこと、また精度を上げると画像によっては圧縮効率が低下するという問題が無視できないことから、1/8画素精度が実用化されることは考えにくい。
動き補償の単位
[編集]動き補償の単位も重要である。通常MPEG-2までは16×16画素のブロック単位であった予測の単位も、H.263及びMPEG-4において8×8画素単位が導入され、H.264になると、4×4画素単位まで細分化された。しかしながら、画像の輪郭部分を除くと、通常の動画像では大きな領域が同じ方向に動くことが多い。そのため常に細分化するのは無駄であり、個々のブロック毎に動き情報を送る分だけ圧縮効率が低下する。そのためどの単位で分割するかを選択可能である。例えばH.264では、16×16、16×8、8×16、8×8、8×4、4×8、4×4から選択可能である。すなわち現在のフレーム間予測を用いた符号化では、領域分割情報と個々の領域毎の動き情報を必要とする。なお、領域をブロック単位ではなく、他の形状とすることも可能である。しかしながら、任意形状の場合には領域の形状情報の符号量が膨大になり、また三角形などは矩形との圧縮効率の差は殆どなく利用されていない。
グローバル動き補償
[編集]通常は16×16画素のマクロブロックを単位として動き補償を行うが、画面全体がパン、チルト、ズームのような動きを示す場合には、1つの動き情報で画面全体の動きを表現できる場合がある。そこで、MPEG-4バージョン2では、画面全体の動きをアフィン変換等で表現してフレーム単位での動き補償を行う、グローバル動き補償(GMC: Global Motion Compensation)が導入されている。グローバル動き補償は、マクロブロック単位の動き補償と併用して用いられる。
ワーピング予測
[編集]フレーム間予測を行う方法の一つにワーピング予測というものがある。ブロック単位でフレーム間予測を行う場合、どうしてもブロック間の境界にブロックノイズが生じてしまう。ワーピング予測はこの問題を解決するために開発された技術である。
両方向予測
[編集]両方向から予測すると予測の精度が高まる。予測の精度が高まると、画質が向上する上に、差分として符号化する符号量も低下するため非常に得である。一方、両方向予測を用いて符号化するには、2つの予測フレームとの間の動きベクトル予測を行う必要があるため、処理量が増大する。
脚注
[編集]- ^ 「動き補償」『ASCII.jpデジタル用語辞典』 。コトバンクより2022年2月5日閲覧。
- ^ “電子情報通信学会『知識の森』 2群-5編-4章”. 電子情報通信学会. 2022年2月1日閲覧。