解释从文件中读取的JPEG色度子采样

时间:2015-01-13 09:28:01

标签: jpeg sampling subsampling

我试图找出哪个MCU(8x8,16x8和16x16)是由哪些图片组成的。为此,我解析了帧开始(SOFn)标记,其中存储了色度子采样因子。 我找到了以下内容:

Number of Img components = 3
Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)

我对如何解释这一点很困惑。阅读this我开始相信1x1代表4:4:4采样,因此导致8x8像素MCU,2x1代表4:2:2 - > 16x8像素MCU和2x2用于4:2:0 - > 16x16 pixl MCU。

每个采样率决定了组件如何存储在熵编码数据中,从而导致MCU。但现在每个组件(Y,Cb,Cr)都有自己的子采样率。

如何解读我从JPEG标记读取的日期,以判断整个图像中是否使用了MCU?

1 个答案:

答案 0 :(得分:0)

在JPEG中,不同的组件通常采用不同的方式进行采样。这是因为人眼对亮度的变化比对颜色(色度)更敏感。

在您的示例中,亮度以全频率采样(与JPEG一样),而两个色度分量都被二次采样2x2(如果您愿意,可以水平和垂直二次采样)。这意味着对于每个色度样本,有4个亮度样本。

类似(C = Cb,c = Cr):

YCcY  YCcY...
Y  Y  Y  Y... 
YCcY  YCcY...
Y  Y  Y  Y... 
.  .  .  .
.  .  .  .

(这些是像素,样本可能会在流中存储为YYYYCcYYYYCc...

所以,你的问题:所有组件的最大子采样因子将决定MCU的大小。在你的情况下16x16。