x.v.colorとは結局どういうものなのか?の続き

前回のおさらい

前回の話をまとめると以下のような感じ

  • BT.709とかsRGBとかadobe RGBなどの色空間とは、「実世界の色(を数値で表したもの)」と「デジタル画像上で色を表現する数値」との対応関係を1対1に定義するものである
  • 色空間の色域はRGB三原色のxy色度(と白の色度)で定義され、その色空間では、xy色度図上で三原色の色度点を結んだ三角形の内側の色しか表現することができない。
  • x.v.color(=xvYCC)の三原色の色度はBT.709と同じだが、RGBの数値がマイナスの値と1以上の値をとっても良い、とルール変更することで、扱える色域をBT.709よりも広げている
  • RGBの数値がマイナスの値と1以上の値をとると、計算上BT.709の外側の色も扱うことができるようになる
  • YUV形式とRGB形式の値のとる範囲の違いから、YUV→RGBの変換をするときに、RGBがマイナスの値と1以上の値になることがある
  • 従来は、RGBがマイナスの値と1以上の値になるようなYUVの値は使わないことになっていたが、x.v.colorでは使って良いことにした

結局x.v.colorとは、「YUVの値の取り得る範囲のうち、今まで使ってなかった領域も使ってよいことにした」事によって、表現できる色域をBT.709以上に広げたものである、といえる。
というわけで、x.v.colorの定義は他の色空間と比べて非常にややこしくて分かりにくい。いったいなぜそんなややこしい定義をしているのか?

x.v.colorの定義がややこしいのはなぜか?

普通、色空間の色域は、三原色の色度がどうなっているかをみれば色域の広さが理解できる。が、x.v.colorは三原色の色度を見ても色域の広さは分からない、ややこしい定義になっている。そうなっている理由は、結論から言うと「従来の機器との互換性を維持するため」である。
これまでで説明したように、x.v.colorではYUVの値のとりうる範囲が従来より広い。が、YUV→RGBに変換するための計算式は従来(BT.709)と同じである。これは、三原色の色度がBT.709と同じと決められているため。もし三原色の色度を変更してしまうと、この変換式も変更しないといけなくなるが、一方RGB値がマイナスや1以上の値をとることがないように変換式を作れるのでわかりやすくなる。
この変換式が変更されるかどうかによって、x.v.colorに対応していないディスプレイにx.v.colorの映像を入力したときの動作に違いが出る。変換式が従来と同じな場合は、YUV→RGB変換後に値がマイナスや1以上になる場合がある。この値を、マイナスの場合は0に、1以上の場合は1にクリッピングしてしまえば、従来どおりのBT.709色空間で問題なく色再現が可能になる。もちろんx.v.colorで新たに扱えるようになった領域の色は再現できないが、それ以外の色は従来どおりの色で正しく再現できる。ただし実際どうなるかは現状出回っているディスプレイのYUV→RGB変換の実装に依存している。0以下と1以上をクリッピングするようになっていれば何の問題もなく表示でき、互換性が保たれる。
一方、変換式を従来から変更した場合。こちらはYUV→RGB変換後に値がマイナスや1以上になることはない。が、こういう定義にした場合、x.v.colorに対応していないディスプレイにx.v.colorの映像を入力すると、間違った変換式でYUV→RGB変換が行われることになる。結果として色再現がおかしくなり、正しい色よりも薄い色で表示されてしまうはずだ。従来と同じ狭い領域の色しか扱えないところに、広い色域の映像信号を入力したため、全体的に色が薄くなる方向に圧縮されるようなイメージだ。これではx.v.color非対応のディスプレイとの互換性が保てない。
また、BT.709の色域にあわせて作られた映像コンテンツをx.v.color対応ディスプレイに表示する場合、YUV→RGB変換式が従来と同じであれば、特に何の色変換処理も必要なくそのまま表示すれば正しい色で表示できる。が、YUV→RGB変換式が変更されている場合、従来の色域のコンテンツは正しい色で表示することができず、色変換の処理が必要になってしまう。
というわけで、x.v.colorの定義はややこしくなっているが、そのおかげで従来の機器、コンテンツとの互換性が確保されている。

なんで互換性を保つ必要があるのか? これはたとえば、もしもデジタル放送がある日を境に「x.v.colorに対応します」となったときに移行がスムーズになるからだと思われる。x.v.color対応のテレビを持っている人は広色域の映像を楽しめるし、持ってない人も変な色になってしまうことなく今までどおりの色再現で映像を見ることができる。
実際、デジタル放送をx.v.colorにするには、今まで使ってなかったYUVの領域も使うようにすればいいだけ。放送局側に対応機器を導入するコストはかかるが、受信側は急いで対応機器を導入する必要はないので、デジタル放送がx.v.color対応になるのはあり得ない話ではないと思う。デジタル放送だけでなく、次世代DVDの映像などに関しても同じことが言える。そのあたりを考えて互換性を保った仕様になっているのだろう。

結論

結局、x.v.color(xvYCC)とはどういうものなのか?というと、

  • RGB三原色はBT.709と同じとし、YUV→RGB変換式もBT.709と同じとした
  • YUVの値の取り得る範囲のうち、BT.709で使ってなかった領域も使ってよいことにした

という2点によって、従来の機器との互換性を保ったまま、BT.709よりも広い色域の色を扱えるようにした色空間、となる。


で、x.v.colorの色域は結局どのくらい広いのか?だが、「人間の目が認識できる物体色のほとんどをカバーしている」らしいが、xy色度図上だとどうなるのかはちょっとよく分からない。計算したら出せるかもしれないが…大変そうだ。
ともかく、x.v.colorによって、BT.709と互換性を保ったまま、BT.709よりずっと広い色域の色を扱えるようになるのは確かだ。


以上、前回と今回とで自分なりの理解の範囲でx.v.color(xvYCC)について説明してみた。簡単のためにガンマに関する部分の説明は省いたが、x.v.colorがどういう色空間かについてはだいたい説明できていると思う。


参考資料
JEITAによるxvYCCの説明資料