两步跨分量预测模式(TSCPM,Two Step Cross-component Prediction Mode)通过探索不同分量之间的线性关系去除分量间冗余。TSCPM分为两个步骤执行,首先使用Co-located luma块通过参数α和β生成尺寸相同的临时预测块,第二步再进行下采样,得到色度分量的预测值,如图1。
AVS3的TSCPM仅用于intra模式中,类似于VVC中的CCLM。其中TSCPM的关键是计算线性模型的参数alpha和beta。整个过程分为两步,第一步计算alpha和beta,当得到alpha和beta后,根据亮度和色度之间的线性关系,得到重构亮度像素,第二步对重构的亮度像素进行下采样得到色度预测值。计算alpha和beta需要使用4个可用的像素点对,据相邻块像素的可用性分为了3种情况来得到这4个可用的像素点,过程如下:在选取4对可用像素点时,需要考虑上侧像素和左侧像素的可用性,分为以下3种情况:1. 如果当前块的正上侧和正左侧像素均可用,则2个像素点从上侧选择,另外2个像素点从左侧选择(0,-1),(W-max(1,r),-1),(-1,0),(-1,H-max(1,r))。H、W是宽高,r是长宽比。
2. 如果当前块只有上侧可用,则4个像素点均从正上侧选择,选择的位置宽度为:0/4,1/4,2/4,3/43. 如果当前块只有左侧像素可用,则4个像素点均从正左侧选择,选择的位置为高度的:0/4,1/4,2/4,3/4
得到4个点后即可计算alpha和beta,计算方式和CCLM类似,不过其中计算aplha过程中的除法通过查表代替以减少复杂度。
minIndex[2] = {0, 2}
maxIndex[2] = {1, 3}
if (x[minIndex[0]] > x[minIndex[1]]) {
Exchange(minIndex[0], minIndex[1])
}
if (x[maxIndex[0]] > x[maxIndex[1]]) {
Exchange(maxIndex[0], maxIndex[1])
}
if (x[minIndex[0]] > x[maxIndex[1]]) {
Exchange (minIndex[0], maxIndex[0])
Exchange (minIndex[1], maxIndex[1])
}
if (x[minIndex[1]] > x[maxIndex[0]]) {
Exchange (minIndex[1], maxIndex[0])
}
xMin = (x[minIndex[0]] + x[minIndex[1]] + 1) >> 1
yMin = (y[minIndex[0]] + y[minIndex[1]] + 1) >> 1
xMax = (x[maxIndex[0]] + x[maxIndex[1]] + 1) >> 1
yMax = (y[maxIndex[0]] + y[maxIndex[1]] + 1) >> 1
diffX = xMax – xMin
diffY = yMax – yMin
if (diffX > 64) {
shift = (BitDepth > 8) ? BitDepth – 6 : 2
add = 1 << (shift – 1)
alphaX = (diffY * TscpmTable[((diffX+add)>>shift)-1] + add) >> shift
betaX = yMin – ((alphaX * xMin) >> iShiftX)
}
else if (diffX > 0) {
alphaX = diffY * TscpmTable[diffX-1]
betaX = yMin – ((alphaX * xMin) >> iShiftX)
}
else {
alphaX = 0
betaX = yMin
}
作者:寒衣 | 来源:公众号—— Video Coding
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。