【问题标题】:Interpreting JPEG Chroma Subsampling read from file解释从文件中读取的 JPEG Chroma Subsampling
【发布时间】:2015-03-11 05:01:09
【问题描述】:

我正在尝试找出图片是由哪个 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像素单片机。

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

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

【问题讨论】:

    标签: jpeg sampling subsampling


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 最小编码单元大于 8x8 的 DCT 怎么样?量化表总是 8x8。这是否意味着对于单个 MCU,Y 被转换和量化为 2 或 4 个块?
    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多