Opencl 什么';s JPEG'中组件标识符的用途;s帧(SOF)头的开始?

Opencl 什么';s JPEG'中组件标识符的用途;s帧(SOF)头的开始?,opencl,jpeg,lossless,Opencl,Jpeg,Lossless,我目前正在为无损JPEG(DNG、CR2等)开发OpenCL解码器。该标准对组件的布局(交错与平面)几乎没有限制,这与相当死板的OpenCL内核相冲突 尤其是组件标识符的概念似乎过于复杂,因此我想知道我是否正确理解了它们: SOF3报头(第3帧开始,非差分,哈夫曼编码,无损(顺序))包含关于每个组件的一些信息。这些是: i(隐式):组件的索引 C_i:组件标识符 H_i/V_i:水平/垂直采样因子 Tq\u i:量化表目标选择器 每个帧可以由包含至少一个颜色分量的编码图像数据的多个扫描组成。

我目前正在为无损JPEG(DNG、CR2等)开发OpenCL解码器。该标准对组件的布局(交错与平面)几乎没有限制,这与相当死板的OpenCL内核相冲突

尤其是组件标识符的概念似乎过于复杂,因此我想知道我是否正确理解了它们:

SOF3报头(第3帧开始,非差分,哈夫曼编码,无损(顺序))包含关于每个组件的一些信息。这些是:

  • i
    (隐式):组件的索引
  • C_i
    :组件标识符
  • H_i
    /
    V_i
    :水平/垂直采样因子
  • Tq\u i
    :量化表目标选择器
每个帧可以由包含至少一个颜色分量的编码图像数据的多个扫描组成。每个SOS标题(扫描开始)声明哪些组件将成为特定扫描的一部分。对于每个组件,一个先前声明的标识符(
C_i
)用作反向参考(
Cs_j
,扫描组件选择器)。标准中的限制很少(B.2.3扫描头语法):

规则1:

每个
Cs_j
应匹配帧头中指定的
C_i
值之一,扫描头中的顺序应遵循帧头中的顺序。如果
Ns
>1,则MCU中交织组件的顺序为
Cs_1
第一,
Cs_2
第二,等等

规则2:

Cs_j
的值应不同于
Cs_1
Cs_j-1
的值

我的问题是:

  • 规则1不允许对组件进行重新排序(例如,帧中为R | g | B,扫描中为B | g | R)。是否允许创建多个扫描,每个扫描包含一个组件(平面配置),同时使用扫描-B、扫描-G、扫描-R的顺序,而不是扫描-R、扫描-G、扫描-B
  • 是否可以跳过扫描中的组件?e、 在帧中声明g.R | g | B,然后是scan-R | B,然后是scan | g
  • 为什么扫描中的组件是由其标识符(
    C_i
    )引用的,而不是帧头中的索引(
    i
    )引用的?除了唯一性之外,标识符是否有任何限制,或者声明R:C_0=255,G:C_1=3,B:C_2=250是否真的有效

  • 您的问题的答案可能在文件格式标准中找到。正如您所注意到的,JPEG标准是不明确的。JPEG标准甚至没有定义它使用RGB。事实上,对于顺序和渐进式JPEG,通常使用YCbCr。我在标准中没有找到解释-这就是为什么我要问这个问题。我没有把标准称为“模棱两可”——我只是希望有更多的限制和/或一些我可能错过的解释,以保持解码器的复杂性合理。RGB只是一个例子。在CR2和DNG中,JPEG分量(2或4)甚至与具有操纵图像尺寸的拜耳CFA的交替分量相对应-只有提取样本值的数量和顺序才有意义。色度解释由随附标准进行。JPEG本身是“色盲”的,标准不明确。这就是为什么有各种各样的文件格式来填补标准的空白。我不熟悉无损标准,因为无损JPEG模式很少使用。