以前有人问我,为什么用一种特定的编码,比如哥伦布编码,之后数据位数明显变多了,为什么还要编码?
呵呵, 这就是没明白二值化的实质, 二值化的的目的就是要那些syntax elements的值为非二进制的情况,转化为二进制或者二进制串,这样才能进行下面的算术编码。
为什么要这样?可以参考惠普(HP)写的一本叫做二进制编码算法的书,里面讲的非常清楚。这也是一位北航的前辈的推荐的,在这里感谢下
纵观CABAC过程的syntax elements 的二值化过程表,大部分都是FL(Fixed length ) 编码,就是固定长度编码, 一部分是Truncated Rice ,只有一个是哥伦布,其他单独各自定义的情况,标准书里有详细说明。
几个主要的二值化过程被应用到HEVC中,下面是几个例子:
| N | Unary | TU(cMax=7) | EGk(k=0) | FL(cMax=7) |
| 0 | 0 | 0 | 1 | 000 |
| 1 | 10 | 10 | 010 | 001 |
| 2 | 110 | 110 | 011 | 010 |
| 3 | 1110 | 1110 |

本文探讨了二值化在编码过程中的作用,旨在解释为何将非二进制的syntax elements转化为二进制串,以便进行算术编码。通过引用惠普的二进制编码算法书籍,阐述了这一过程的重要性。CABAC(Context-Adaptive Binary Arithmetic Coding)在HEVC中的应用中,大部分syntax elements采用固定长度编码,部分使用Truncated Rice编码,而哥伦布编码则较少见。理解二值化对于掌握编码技术至关重要。
最低0.47元/天 解锁文章
6847

被折叠的 条评论
为什么被折叠?



