为什么DC和AC系数的符号与正常有符号二进制数相反?

时间:2017-03-30 23:20:58

标签: jpeg huffman-code

我在这里很困惑。以下是ITU T.81的一些摘录;

关于扫描数据中DC系数的附录F F.1.2.1.1节:

  

“当DIFF为正时,附加DIFF的SSSS低位。   当DIFF为负时,(DIFF - 1)的SSSS低位为   追加。请注意附加位的最高位   对于负差异,序列为0,对于正差异,序列为1   差异“。

对于扫描数据中AC系数的F.1.2.2.1节的相同附件F末端非常相似:

  

“附加位的格式与编码时的格式相同   DC系数。 SSSS的值给出了额外的数量   指定符号和精确幅度所需的位   系数。附加位是低位SSSS位   当ZZ(K)为正时ZZ(K)或ZZ(K)-1的低阶SSSS位   当ZZ(K)为负时。“

Q1:它表示“请注意,附加位序列的最高有效位为0表示负差异,1表示正差异”但与签名数字的工作方式不同?如果最高有效位为1表示我们有负数,否则我们有正数。但这里这个简单的规则是相反的!?

Q2。在这两种情况下,如果它是正的,我们写ZZ(K),如果它是负的,我们写ZZ(K)-1。如果ZZ(K)为负,我们为什么要写ZZ(K)-1?我无法从文档中理解这一点。

Q3。符号位本身实际上是否来自SSSS中指定的位数?

这三件事情让我很烦恼,如果你能回答我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

  

如果最高位为1表示我们有负数,否则我们有正数。但这里这个简单的规则是相反的!?

因为您正在处理可变长度数据,所以没有符号位。长度与位值一起使用。

如果长度= 1,则位= 1,结果值为1,就好像它是在完整的有符号字节中编码一样。该规则没有被撤销。

  

Q2。在这两种情况下,如果它是正的,我们写ZZ(K),如果它是负的,我们写ZZ(K)-1。如果ZZ(K)为负,我们为什么要写ZZ(K)-1?

这只是编码负数的选择方式。在正常的4字节编码-1中,您将获得二进制值

1111 1111 1111 1111 1111 1111 1111 1111

需要32位进行编码。

相反,它使用长度和单个位进行编码:长度= 1,位= 0。

对于零,你只需要长度= 0,位= 0。

在这种类型的可变长度编码中,必须翻转正值或负值以区分它们。他们碰巧选择了否定。

  

Q3。符号位本身实际上是否来自SSSS中指定的位数?

此编码中没有符号位。