HEVC的Availability计算过程
2016-04-22 10:07
513 查看
HEVC的intra预测和inter预测等等都要用的邻块的Availability信息。在文章HEVC的帧内预测(1)中已经写到了有关available的内容了,但是不够完整,把这部分内容归到intra预测中也不是很合适,所以单独写一篇文章描述这个过程,也正好对应标准6.4
Availability processes的内容。
首先介绍计算MinTbAddrZs的方法
数组MinTbAddrZs表示以最小块(minimum blocks)为单位的z-scan 顺序地址,最小块的尺寸由变量Log2MinTrafoSize决定。
由以下公式得到:
其中:CtbLog2SizeY为ctb(coding tree block)的尺寸对数,MinTbLog2SizeY为最小的Tb(transform block变换块)的尺寸对数。ctbAddrRs为当前ctb的raster扫描地址,CtbAddrRsToTs[
ctbAddrRs ]就是将ctbAddrRs转化为了Ts(tiles)扫描地址(详见HEVC标准中的图像分割(1))。
其实这公式表达的意思就是当前以最小块为单位的坐标(x,y)的地址,此地址的寻址顺序在CTB内部为z-scan,在跨越CTB时为tile扫描顺序。举个例子,如图:
在图(1)中,黄色块代表当前的ctb,粗黑线标出了tile的边界,小方块代表ctb,黄色块代表(x,y)所在的ctb,即当前ctb,虚线箭头就是ts扫描的方向。则根据公式,当前ctb的ts扫描地址为24。
图(2)中,大的黄色块代表当前ctb,阴影块代表(x,y)所在的tb,假设CtbLog2SizeY = 4,MinTbLog2SizeY = 3,一个ctb中包含4个tb。(x,y)在当前ctb的地址为2。
所以MinTbAddrZs = 24 + 2 = 26吗?错!!!
因为前面扫描过的ctb都有4个tb,所以MinTbAddrZs = 24*4 + 2 = 98.
当前块左上角像素坐标(xCurr, yCurr),由以上MinTbAddrZs步骤计算出其最小块地址minBlockAddrCurr。
再计算左上角坐标为(xNbY, yNbY)的相邻块的最小块地址,minBlockAddrN
当相邻块位于图像范围外时,minBlockAddrN为-1,否则根据MinTbAddrZs方法进行计算。
如果有一个或者多个下列条件为真时,availableN 为FALSE
1. minBlockAddrN 小于0
2. minBlockAddrN 比 minBlockAddrCurr大
3. 相邻块所在的slice segment对应的SliceAddrRs和当前块所在的slice segment对应的SliceAddrRs不同。
4. 相邻块和当前块处于不同的tile。
否则, availableN为TRUE。
intra预测中用到的available信息用这一部分内容计算就可以得到了。
引入变量sameCb,如果相邻预测块和当前预测块处于同一个Cb,则sameCb为TRUE,否则为FALSE。
设当前预测块的availability为 availableN,如果sameCb为FALSE,以( xPb, yPb )(当前块地址)和( xNbY, yNbY )(邻块地址)为输入,代入第1部分计算得到的z-scanorder block availability即为availableN。
否则,当sameCb为TRUE时,如果当前coding block分为4个等大小的prediction block,当前prediction block的序号为1的时候,序号为2的prediction block的availableN为FALSE(标准中用了很长的一段条件描述,我概括了一下,应该是这个意思)。
除了此种情况外,availableN为TRUE。
最后,如果邻块的预测方式为intra,则availableN为FALSE。
Availability processes的内容。
1.z-scan order block availability
z-scan order block availability,就是在Z顺序扫描下的availability。首先介绍计算MinTbAddrZs的方法
数组MinTbAddrZs表示以最小块(minimum blocks)为单位的z-scan 顺序地址,最小块的尺寸由变量Log2MinTrafoSize决定。
由以下公式得到:
其中:CtbLog2SizeY为ctb(coding tree block)的尺寸对数,MinTbLog2SizeY为最小的Tb(transform block变换块)的尺寸对数。ctbAddrRs为当前ctb的raster扫描地址,CtbAddrRsToTs[
ctbAddrRs ]就是将ctbAddrRs转化为了Ts(tiles)扫描地址(详见HEVC标准中的图像分割(1))。
其实这公式表达的意思就是当前以最小块为单位的坐标(x,y)的地址,此地址的寻址顺序在CTB内部为z-scan,在跨越CTB时为tile扫描顺序。举个例子,如图:
在图(1)中,黄色块代表当前的ctb,粗黑线标出了tile的边界,小方块代表ctb,黄色块代表(x,y)所在的ctb,即当前ctb,虚线箭头就是ts扫描的方向。则根据公式,当前ctb的ts扫描地址为24。
图(2)中,大的黄色块代表当前ctb,阴影块代表(x,y)所在的tb,假设CtbLog2SizeY = 4,MinTbLog2SizeY = 3,一个ctb中包含4个tb。(x,y)在当前ctb的地址为2。
所以MinTbAddrZs = 24 + 2 = 26吗?错!!!
因为前面扫描过的ctb都有4个tb,所以MinTbAddrZs = 24*4 + 2 = 98.
当前块左上角像素坐标(xCurr, yCurr),由以上MinTbAddrZs步骤计算出其最小块地址minBlockAddrCurr。
再计算左上角坐标为(xNbY, yNbY)的相邻块的最小块地址,minBlockAddrN
当相邻块位于图像范围外时,minBlockAddrN为-1,否则根据MinTbAddrZs方法进行计算。
如果有一个或者多个下列条件为真时,availableN 为FALSE
1. minBlockAddrN 小于0
2. minBlockAddrN 比 minBlockAddrCurr大
3. 相邻块所在的slice segment对应的SliceAddrRs和当前块所在的slice segment对应的SliceAddrRs不同。
4. 相邻块和当前块处于不同的tile。
否则, availableN为TRUE。
intra预测中用到的available信息用这一部分内容计算就可以得到了。
2.prediction block availability
prediction block availability就是说在预测过程用到的available信息,其实是特指inter预测中的available信息,不包括intra预测。引入变量sameCb,如果相邻预测块和当前预测块处于同一个Cb,则sameCb为TRUE,否则为FALSE。
设当前预测块的availability为 availableN,如果sameCb为FALSE,以( xPb, yPb )(当前块地址)和( xNbY, yNbY )(邻块地址)为输入,代入第1部分计算得到的z-scanorder block availability即为availableN。
否则,当sameCb为TRUE时,如果当前coding block分为4个等大小的prediction block,当前prediction block的序号为1的时候,序号为2的prediction block的availableN为FALSE(标准中用了很长的一段条件描述,我概括了一下,应该是这个意思)。
除了此种情况外,availableN为TRUE。
最后,如果邻块的预测方式为intra,则availableN为FALSE。
相关文章推荐
- HDU 1021 Fibonacci Again
- vSphere-01 Joining your ESXi host to a Windows Domain
- HoloLens开发手记-硬件细节 Hardware Detail
- 人工智能60年:全球人工智能技术大会今日召开,谁在外面“流口水“(即”流哈喇子“)?
- POJ 1995 Raising Modulo Numbers(快速幂取模)
- Rain
- <a> Email
- AIDL
- 在MainActivity 中,获取控件的宽 高
- HDU1848 Fibonacci again and again(SG函数的应用)
- waitKey()
- SDUT 2877:angry_birds_again_and_again
- LightOJ 1076 Get the Containers
- 【Light】[1076 ]Get the Containers
- 阶梯博弈(Staircase Nim)
- Dispatcher initialization failed:Unable to load configuration
- light oj 1076 - Get the Containers
- 哈佛大学研究新人工智能系统 速度媲美人类大脑
- HDU 2820 Permutaion
- Fibonacci Again