MIP顾名思义就是对矩阵的运算,大体框架可见:H.266/VVC代码学习28:VTM5.0中的MIP技术。进行矩阵的运算就必然要有输入矩阵和输出矩阵,而输入矩阵和输出矩阵分别是哪部分呢?本文将解答这个问题。本篇博客主要以下图8*8的块为例:
文章目录
1 源码2 下采样后的边界3 下采样后的预测尺寸4 上采样边界尺寸5 预告
1 源码
void PredictorMIP
::initPredBlockParams(const Size
& block
)
{
m_blockSize
= block
;
m_numModes
= getNumModesMip(m_blockSize
);
if (m_blockSize
.width
> 4 || m_blockSize
.height
> 4)
{
m_reducedBoundarySize
= Size(4, 4);
}
else
{
m_reducedBoundarySize
= Size(2, 2);
}
if (m_blockSize
.width
<= 8 && m_blockSize
.height
<= 8)
{
m_reducedPredictionSize
= Size(4, 4);
}
else
{
m_reducedPredictionSize
= Size(std
::min
<SizeType
>(m_blockSize
.width
, 8), std
::min
<SizeType
>(m_blockSize
.height
, 8));
}
if (m_blockSize
.height
> m_blockSize
.width
)
{
m_boundarySizeForUpsampling
= Size(m_blockSize
.width
, m_reducedPredictionSize
.height
);
}
else
{
m_boundarySizeForUpsampling
= Size(m_reducedPredictionSize
.width
, m_blockSize
.height
);
}
m_upsmpFactorHor
= m_blockSize
.width
/ m_reducedPredictionSize
.width
;
CHECKD(m_reducedPredictionSize
.width
* m_upsmpFactorHor
!= m_blockSize
.width
, "Need integer horizontal upsampling factor.");
CHECKD((m_upsmpFactorHor
< 1) || ((m_upsmpFactorHor
& (m_upsmpFactorHor
- 1)) != 0), "Need power of two horizontal upsampling factor.");
m_upsmpFactorVer
= m_blockSize
.height
/ m_reducedPredictionSize
.height
;
CHECKD(m_reducedPredictionSize
.height
* m_upsmpFactorVer
!= m_blockSize
.height
, "Need integer vertical upsampling factor.");
CHECKD((m_upsmpFactorVer
< 1) || ((m_upsmpFactorVer
& (m_upsmpFactorVer
- 1)) != 0), "Need power of two vertical upsampling factor.");
}
2 下采样后的边界
在图中表示是下图画红色圈圈的这一部分: 从上面的代码看,下采样后的边界有两种:一种如上图所示,针对宽或高大于4的,采样为左边4个上边4个,另一种是针对4*4的块,采样成左边2个上边2个。这些最后排列成一维向量,作为输入矩阵的一部分。
3 下采样后的预测尺寸
在图中表示是下图画红色圈圈的这一部分: 从上面的代码看,预测主要有两种:一种如上图所示,针对宽或高小于等于8的,预测出4x4共16个像素值,另一种是针对宽或高大于8的块,预测出8x8共64个像素值。这些最后排列成一维向量,作为输出矩阵。此外对于4xA和Ax4的块有特殊操作,大体说来就是预测出8x8共64个像素值,然后抽取其中4行或4列,得到一个4x8或8x4的结果。
4 上采样边界尺寸
在图中表示是下图画红色圈圈的这一部分: 上采样边界尺寸即上采样时需要得到的一些像素值的尺寸。代码中可知,将短边直接全部拿来用于上采样(图中为左边),而长边(图中为)每隔x个点(x= 长边边长/长边下采样后边长)进行取值,随后进行上采样操作得到全部值。
5 预告
由于最近主要研究MIP,关于VTM5.0的帧内大体框架暂时告一段落。而贯穿本文全文的都是下采样和上采样,那么下一篇博客就准备深入探究一下下采样和上采样函数。最后,欢迎大家交流和指正!