3

Matlabのrgb2ycbcrのヘルプドキュメントには、

入力がuint8の場合、YCBCRはuint8です。ここで、Yは[16 235]の範囲にあり、CbとCrは[16240]の範囲にあります。

私が知っているように、RGBからYCbCrへの変換式は

Y   =     0.299  R + 0.587  G + 0.114  B
Cb  =   - 0.1687 R - 0.3313 G + 0.5    B + 128
Cr  =     0.5    R - 0.4187 G - 0.0813 B + 128

R = 0、G = 0、B = 0とすると、Y = 0になりますが、これは[16,235]の範囲ではありません。また、R = 255、G = 255、B = 0とすると、Cb = 0.5になりますが、これも[16、240]の範囲ではありません。

なぜrgb2ycbcrはYを[16,235]の範囲にし、Cb / Crを[16,240]の範囲にするのですか?

4

1 に答える 1

1

@jucestain が言ったように、ウィキペディアからの回答があります。

Y' 値は、[0, 255] のフル レンジ (フル スイングと呼ばれる) を使用するのではなく、通常、レンジ [16, 235] (スタジオ スイングと呼ばれる) にシフトおよびスケーリングされます。
この紛らわしい慣行は MPEG 標準に由来し、16 が Y' に追加される理由と、基本変換の Y' 係数の合計が 255 ではなく 220 になる理由を説明しています。それらを常にポジティブにするために。

于 2013-08-23T02:14:31.940 に答える