remove
powerd by nog twitter


色空間とYC伸張と補間(2004/02/08更新)



  色空間はデジタル動画を扱う場合には切っても切れない存在です。
  ある程度無視しても綺麗な動画は出来ますが、厳密に知っておくと更に綺麗に動画を作るきっかけになると思います。
  また、YC伸張のルールを覚えれば、色が薄い動画や白飛び黒つぶれ色つぶれ動画などのミスが無くなります。
  更に補間ができれば、リサイズやフィルタリングが必要な場合に良い結果が得られる事があると思います。



  1、 色空間フォーマットとピクセルフォーマット

  デジタル動画のピクセルは、RGBやYUVといった2つの色空間があります。
  RGBはPCが得意とするもので、光の三原色のRed、Green、Blueを混ぜることにより、色を作ります。
  YUVは、Y(輝度)CbCr(色差)により色を作るものです。昔の白黒TVはY成分のみであったようです。
  それに2つの色差成分のCbCr信号をつけて、カラーTVになったようです。

  この2つは相互関係があり、決まった計算式でRGB→YUV、YUV→RGBと変化させることができます。
  RGB24→ YCbCr (CCIR601)
  Y = 0.299R+0.587G+0.114B
  Cb=-0.172R-0.339G+0.511B
  Cr= 0.511R-0.428G-0.083B
  YCbCr → RGB24 (CCIR601)
  R = Y+1.371Cr
  G = Y-0.698Cr-0.336Cb
  B = Y+1.732Cb
  両方の式はYUV→RGBにおいて非可逆となっています(小数点のデータは存在できないみたいです)。
  つまり、YUV→RGB→YUV→RGB→YUV・・・という、変換を繰り返すのはあまり好ましいとは思えません。

  YUVには、ピクセルフォーマットというものがあります。(YUVのピクセルフォーマットの例→YUV4:4:4、YUV4:2:2、YUV4:1:1、YUV4:2:0など)
  ピクセルフォーマットとは、ピクセルを格納する方法です。(DWORDの32 bit単位らしいです)
  例で紹介した4種類の、ピクセルフォーマットのピクセルデータの配列は下のようになっていると思われます。
  (すみません、もりのみやこさんのところのパクリかもしれない)

  YUV4:4:4はこのように4ピクセルが並んでいると思われます。
  全てのピクセルがYUVの値を独立で持っています。1ピクセルあたり24bitです。
  (Y成分が1ピクセルあたり8bit、横に4つで8×4=32bitとかで格納されてるのかなぁ・・・)
  


  YUV4:2:2はこのように4ピクセルが並んでいると思われます。
  2つのピクセルが色差を共有してデータを減らす方式です。1ピクセルあたり16bitになります。
  (この場合は、Y成分が横に4つで8×4=32bit、色差成分4つで32bit格納かなぁ・・・)
  


  YUV4:1:1はこのように4ピクセルが並んでいると思われます。
  横方向に4つのピクセルが色差を共有します。1ピクセルあたり12bitになります。
  (隣の4ピクセルと合体して32bit格納されてるかも。全部足しても32bitにならないなぁ・・・)
  


  YUV4:2:0はこのように8ピクセルが並んでいると思われます。
  2×2ピクセルの4ピクセルで色差を共有します。情報量は1ピクセルあたり12bitになります。
  (輝度4つで32bit×2、色差8×4で32bitかなぁ・・・)
  


  カッコの中に、32bitの数え方がありますが、正確ではありません(汗
  なぜわざわざ書いてあるかというと、「32bitの格納のしかた」によって、YUV4:2:2をYUY2と呼んだり、YUV4:2:0をYV12と呼んだりします。
  YUV4:2:2とYUY2は色差の共有方法は同じあって、32bitの格納のされ方が違うため名称が違うといった感じです。

  色差成分を共有することで色数が減りますが、人間の目は輝度には敏感ですが、色にはすこし鈍感らしいです。
  よってこのような間引き方をしても、人間にとっては画質の劣化が少なく見えると思われます。
  また輝度は全て1ピクセル独立データで8ビットですので、YUV4:2:0でも綺麗に感じられると思います。

  注意:これは、DCT圧縮やその他非可逆圧縮の無いピクセルフォーマットコーデックを用いた話です。
  圧縮ノイズなどの別の原因で、ピクセルの色情報は失われる場合があります。配列は同じようですが(汗



  2、 YC伸張・圧縮のルール(YCbCr伸張・圧縮)

  TV用のデジタル動画などは、ITU-R BT.601に従って格納されている事が多いです。
  このITU-R BT.601は、アナログ信号をデジタルデータに変換する時の国際規格です。
  ITU-R BT.601では、Yは16〜235の値をとると規定されています(220諧調)。
  色差は128を中心に225諧調の値を取るとされています。

  このITU-R BT.601のルールは、キャプチャの時に大きくかかわってきます。
  しかし、ほとんど気にする事は無いと思われます。キャプチャカードはよほどの事が無い限り、
  業務用機器によって調整されているからです。(古いキャプチャカードは別)

  問題は、キャプチャした後の処理だと思います。
  ITU-R BT.601に調整がされている場合で、MPEG2でキャプチャする場合は出来たデータが、
  Yは16〜235程度で、色差も16〜240のにまとまって格納されているからです。
  これは、PC用のAVI動画にするなら、YC伸張をします。その場合のRGBへ変換式は
  R = 1.164(Y-16) + 1.596(Cr-128)
  G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128)
  B = 1.164(Y-16) + 2.018(Cb-128)
  となり、RGBは0〜255の間を取るように綺麗に伸張されます。
  この伸張された状態で、PC用のAVI(WMV9VCMやVP6)に出力すれば問題ありません。
  また、TMPGEncを使ってエンコードするときも、CCRI601として出力すれば、
  0〜255のRGBデータをY16〜235、CbCr16〜240の範囲のデータに圧縮しながらMPEG2に出力してくれます。

  ストレートの場合は、YC伸張と圧縮をしないで済む分、ロスが少なくて済むので良いのですが、
  PC用のAVIなのに、ストレートのまま出力すると、色が薄いものになります。
  (ただし、プレビューを見ながら自分で0-255にしてからAVIに出力するならもちろんOK)
  ストレート変換の場合はTMPGEncに「Basic YCbCr」として出力すればロスが少ないです。
  PC上でプレビューを見ると、灰色がかって薄い色なので直そうと思って色を変えたりすると、
  Yが16〜235、CbやCrが16〜240の範囲を激しくオーバーしてしまい、白飛びや黒つぶれや色が濃くなりすぎて、
  ダメなMPEG2になる場合があります。
  (データとしては存在できますが、オーバーの具合によっては白飛び黒つぶれ色つぶれします)

  PC用でもTV用でもDVD-VideoのMPEG2は、Y16〜235、CbCr16〜240の範囲のデータにしておけばよいと思われます。
  PCで再生する時にMPEG2のデコーダは伸張して再生するのが普通だからです。
  もちろん、TVに出力する際はYの値が16でもちゃんと黒を表現できます。
  DVキャプチャ、ハードウェアMPEG2キャプチャソースの場合はストレートで色劣化を抑えMPEG2にするのか、
  伸張して色を補正してCCRI601に出力してMPEG2にするのかを考えてください。
  PC用のAVIの場合は、0〜255の範囲にしておけば不都合は無いと思います。



  3、 補間について

  YUVピクセルフォーマットの色差を共有する4:2:2や4:1:1や4:2:0などの動画を編集する際、
  高度な拡大縮小フィルタリングする場合などに用います。特に、4:1:1の場合は横4ピクセルもの色差を共有するため、
  補間せずに4:2:0のMPEG2にするなどの処理を行った場合、色差が均一になりすぎて色ブロックが現れる事があります。
  これを防ぐために、4:1:1→4:4:4補間をすれば、諧調が滑らかになりブロック化を押さえる効果があるようです。
  DVソースを扱ってMPEG2にしている場合は、4:1:1→4:4:4補間に注意すると良い結果が得られると思います。



  4、 参考リンクURL

  もりのみやこ

  まるも製作所「ITU-R BT.601 について」

  www.fourcc.org



  


もどる



Internet Explorer5以上、横解像度800以上でのの閲覧を推奨します
jumper