Exp-Golomb指数哥伦布码

Exp-Golomb指数哥伦布码

指数哥伦布码(Exponential-Golomb)属于熵编码,属于无损编码

H.264中使用的是0阶指数哥伦布编码,编码方式如下:

以待编码码号code_num = 3为例:

第一步:将code_num +1, 即3+1 = 4

第二步:将4写为二进制的形式:100

第三步:计算100的比特个数为3,在100前面写(3-1)个0,得到编码码字:00100

0阶指数哥伦布码如下所示:

0 => 1 => 1

1 => 10 => 010

2 => 11 => 011

3 => 100 => 00100

4 => 101 => 00101

5 => 110 => 00110

6 => 111 => 00111

7 => 1000 => 0001000

8 => 1001 => 0001001

 

以上是unsinged int的算法,对于singed int,要进行一个映射

映射关系:

  • x >= 0 时,MappedCode(x) = 2x
  • x < 0 时,MappedCode(x) = -2x - 1
int BitstreamReader::ReadSignedExponentialGolomb() {
  uint32_t unsigned_val = ReadExponentialGolomb();
  if ((unsigned_val & 1) == 0) {
    return -static_cast<int>(unsigned_val / 2);
  } else {
    return (unsigned_val + 1) / 2;
  }
}

 

posted @ 2024-06-05 15:40  AndyHu518  阅读(4)  评论(0编辑  收藏  举报