HEVC ME之 H.264论文综述与代码实现
2014-07-17 17:13
92 查看
论文题目:Fast integer-peland fractional-pel motion estimation for H.264 AVC
摘要:
这篇论文是一篇综述性的介绍H.264中运动估计中整像素与分像素搜索的快速算法。
整像素搜索:介绍了UMHexagonS算法,非对称十字-多层六边形网格搜索
提出了CBFPS算法,中心偏移的子像素搜索算法
讨论了ET,提前截止
Introduction:
(1)整像素部分
TSS(三步)、FSS(四步)、HEXBS(基于六边形的)、DS(钻石)、EPZS,局限于较小的搜索范围和图像尺寸。而且在运动量大和尺寸大的视频,比如Bus、Stefan视频中,HEXBS等算法会陷入局部最优。也有很多方法来避免局部最优,比如用相邻帧的匹配块或者当前块的邻居块的运动矢量来预测,但是这也可能预测错误,比如说参考帧中的匹配块们的运动并不相同(好像有点不准确)。实验证明,这些算法在强烈和不规则运动会导致1-2dB的失真。
为了避免陷入全局最优,主题思想是,全局搜索(global search)与局部(local search)搜索相结合,全局搜索用粗糙网格(coarse grid)/稀疏网格(sparse grid)的搜索,局部的搜索用精细网格(fine search)的搜索。典型例子HEMGS(水平与复合的网格搜索,论文中引用[10])。
提出UMHexagonS算法,该算法后面仔细讲。大体分四步,可以节省90%的时间。
(2)分像素部分
过去的算法见论文引用[21][22]。提出CBFPS算法,该算法被JVTproposals采用。可以减少50%的1/4和1/8像素搜索的计算量,虽然264不包含1/8像素的搜索。
(3)提前截止部分
在UMHexagonS算法和CBFPS算法中添加了提前截止部分。关于SAD的统计模型可以帮助提前截止部分,做到视频质量和计算复杂度的较好权衡。
2、对于运动向量和SAD分布的统计分析
运动向量的统计分析有利于起始点的选择,SAD分布的统计有利于提前截止的阈值选择。
要充分利用时域和空域的相关性。其中,空域的相关性包括两方面:邻居块的之间的相关性以及同一块的相邻模式之间的相关性(感觉理解起来有点模糊P268上边一段中);时域的相关性包括相邻图片之间的相关性以及相邻参考帧之间的相关性。
2.1MV分布的统计分析
MP预测:中值预测,是当前块的左边块A、上边块B、左上块C三个MV的中值作为MP预测。
UP预测:上层预测,一个上层块划分成更小的下层块,当前块的上一层的块的预测模式作为UP预测。
CP预测:相关块预测,在自然运动的连续运动对象视频中,除了场景切换(scene change occurs)的情况,用过去帧中与此块相关的块的运动矢量作为CP预测。(疑问:都找到相关块了不就能算出运动向量了么?还是说过去帧并不是参考帧。)
NRP预测:邻居参考帧预测。相邻参考帧的当前位置的MV。感觉很扯。
2.2MV预测的有关分析
在本节,定义了几个变量进行统计。MVpred表示以上预测方法得到的运动向量,MVbest表示通过全搜索获得的实际的最佳运动向量,MVdiff表示二者之差,即预测与最优的差距,用Pmax表示二者相等的概率,Pcenter表示二者x、y坐标均小于等于2的概率,Pcenter_x,Pcenter_y分别表示二者的x坐标小于等于2、y的坐标小于等于2的概率。
统计结果来看,得出两个结论:UP预测是最准的,NRP预测最不准;MP预测随着块尺寸变小而更准确,邻居间的相关性随着块变小而提高。
2.3SAD分布的统计分析
MP预测:min(SADVx_median,SADVy_median)
UP预测:SADUpLayer/2
CP预测
NRP预测
2.4SAD预测的有关分析:
这里定义了一种运算NSD=(SADpred-SADbest)/SADpred
分析结果:NRP的SAD分析与best相差最小,即分析的最准确,ET(提前截止)的阈值应该用NRP预测的SAD;NSD(尤其NRP)与QP成线性关系,ET的阈值在不同块大小下便于修正。
对四中预测的重要性排序:SADpred_NRP、SADpred_CP、SADpred_UP、SADpred_MP
3、快速整像素和分像素预测
3.1 快速整像素预测-UMHexagonS
这是一种复合的搜索方法,包括四种模板,构成四步搜索:(1)非对称十字搜索、(2)小矩形全搜索、(3)不均匀六边形网格搜索、(4)扩展的基于六边形的搜索
3.1.1 起始点的选取
大多数运动估计算法是基于匹配误差随着靠近最佳点距离的减小而衰减的假定,这个假定说明误差平面是一个单峰的曲面。为了避免局部最优,我们采用上一节中的四种MV预测加上(0,0)构成一个集合,并且定义了一种运算Φ,表示当前点的上下左右四个点。我们在上述的集合中加上Φ(0,0)和Φ(MVMP)的点。在这个集合中选取代价最小点作为起始点。
3.1.2非对称十字搜索
水平方向运动强于垂直方向运动。
先在水平方向以步长为2在搜索范围W下选最佳点,再一选定点为起点,以步长为2做垂直方向W/2的搜索。
3.1.3 小矩形全搜索
以起始点做全搜索。
3.1.4 不均匀的六边形网格搜索
不均匀是应用水平运动强于垂直运动,六边形中水平方向的点多余垂直方向的点。
采用一个16点六边形模板(16-HP)
3.1.5 扩展的基于六边形的搜索
根据搜索窗的大小不同,该搜索的最终准确度也会不同,因为要保证预测点在搜索窗的内部,尤其是当十字搜索的最佳点可能靠近搜索窗的边缘。如果搜索窗很小是4*4的,那么可以直接跳过十字搜索,而直接进行该步。
具体的搜索过程就是用六点的六边形和四点的小钻石以最佳起点不断搜索,直到最佳点就是中心点时结束。
3.2 快速分像素运动估计-CBFPS
CBFPS算法是对PPFPS(抛物面预测分像素搜索,论文引用[21][22][28])算法的改进,都是应用了单峰误差曲面的假设。但是PPFPS算法需要最佳整数点的周围钻石搜索的四个点都是可行的,但当局部cost计算仍在继续时将不能奏效,JM就是如此(不懂什么意思,可能是那个算法没有看的原因吧)。
3.2.1 分像素起始点选择
只有两个,一个是(0,0),一个是根据MP预测点得出的,MP是左、上、右上、左上四个点的中值,然后MVpred_FP=(MVpred_MP-MV)%β
1/4像素搜索时β=4,1/8像素搜索时β=8
3.2.2 CBFPS算法
做四点的钻石搜索
Step-1计算中值起点
Step-2对两个起点都做钻石搜索,选取最佳点
Step-3对最小点进行钻石搜索,直到最小代价点是中心点,则存储为MV,否则一直迭代。
5、提前截止
目的:越早结束搜索越好,结果越接近最佳值越好。
关于ρ,很多的公式,没有看下去。
H.264实现简单介绍
(pmx,pmy) 预测点坐标
(bmx,bmy) 最佳点坐标
(omx,omy) 起始点坐标
第1步、起始点选择
(x,y)=(0,0); m->mvc;
这两个点的周围四个点的钻石搜索
第2步、3*3的矩形全搜索找更好的起点
第3步、
3.1 在搜索范围内向左向右步长为2做水平搜索
在搜索范围内向上向下做步长为2的垂直搜索
3.2、 搜索范围右移一位
最佳搜索步长不为2,做八边形的搜索
然后做步长为1向外扩张的八边形的三点(+0,+1,+2)的搜索,找到更优的break
3.3 再求精,做4点钻石搜索,然后再做以1为步长钻石搜索的三点搜索,找到的最优解break
第4步、 保存最优解mv,cost
摘要:
这篇论文是一篇综述性的介绍H.264中运动估计中整像素与分像素搜索的快速算法。
整像素搜索:介绍了UMHexagonS算法,非对称十字-多层六边形网格搜索
提出了CBFPS算法,中心偏移的子像素搜索算法
讨论了ET,提前截止
Introduction:
(1)整像素部分
TSS(三步)、FSS(四步)、HEXBS(基于六边形的)、DS(钻石)、EPZS,局限于较小的搜索范围和图像尺寸。而且在运动量大和尺寸大的视频,比如Bus、Stefan视频中,HEXBS等算法会陷入局部最优。也有很多方法来避免局部最优,比如用相邻帧的匹配块或者当前块的邻居块的运动矢量来预测,但是这也可能预测错误,比如说参考帧中的匹配块们的运动并不相同(好像有点不准确)。实验证明,这些算法在强烈和不规则运动会导致1-2dB的失真。
为了避免陷入全局最优,主题思想是,全局搜索(global search)与局部(local search)搜索相结合,全局搜索用粗糙网格(coarse grid)/稀疏网格(sparse grid)的搜索,局部的搜索用精细网格(fine search)的搜索。典型例子HEMGS(水平与复合的网格搜索,论文中引用[10])。
提出UMHexagonS算法,该算法后面仔细讲。大体分四步,可以节省90%的时间。
(2)分像素部分
过去的算法见论文引用[21][22]。提出CBFPS算法,该算法被JVTproposals采用。可以减少50%的1/4和1/8像素搜索的计算量,虽然264不包含1/8像素的搜索。
(3)提前截止部分
在UMHexagonS算法和CBFPS算法中添加了提前截止部分。关于SAD的统计模型可以帮助提前截止部分,做到视频质量和计算复杂度的较好权衡。
2、对于运动向量和SAD分布的统计分析
运动向量的统计分析有利于起始点的选择,SAD分布的统计有利于提前截止的阈值选择。
要充分利用时域和空域的相关性。其中,空域的相关性包括两方面:邻居块的之间的相关性以及同一块的相邻模式之间的相关性(感觉理解起来有点模糊P268上边一段中);时域的相关性包括相邻图片之间的相关性以及相邻参考帧之间的相关性。
2.1MV分布的统计分析
MP预测:中值预测,是当前块的左边块A、上边块B、左上块C三个MV的中值作为MP预测。
UP预测:上层预测,一个上层块划分成更小的下层块,当前块的上一层的块的预测模式作为UP预测。
CP预测:相关块预测,在自然运动的连续运动对象视频中,除了场景切换(scene change occurs)的情况,用过去帧中与此块相关的块的运动矢量作为CP预测。(疑问:都找到相关块了不就能算出运动向量了么?还是说过去帧并不是参考帧。)
NRP预测:邻居参考帧预测。相邻参考帧的当前位置的MV。感觉很扯。
2.2MV预测的有关分析
在本节,定义了几个变量进行统计。MVpred表示以上预测方法得到的运动向量,MVbest表示通过全搜索获得的实际的最佳运动向量,MVdiff表示二者之差,即预测与最优的差距,用Pmax表示二者相等的概率,Pcenter表示二者x、y坐标均小于等于2的概率,Pcenter_x,Pcenter_y分别表示二者的x坐标小于等于2、y的坐标小于等于2的概率。
统计结果来看,得出两个结论:UP预测是最准的,NRP预测最不准;MP预测随着块尺寸变小而更准确,邻居间的相关性随着块变小而提高。
2.3SAD分布的统计分析
MP预测:min(SADVx_median,SADVy_median)
UP预测:SADUpLayer/2
CP预测
NRP预测
2.4SAD预测的有关分析:
这里定义了一种运算NSD=(SADpred-SADbest)/SADpred
分析结果:NRP的SAD分析与best相差最小,即分析的最准确,ET(提前截止)的阈值应该用NRP预测的SAD;NSD(尤其NRP)与QP成线性关系,ET的阈值在不同块大小下便于修正。
对四中预测的重要性排序:SADpred_NRP、SADpred_CP、SADpred_UP、SADpred_MP
3、快速整像素和分像素预测
3.1 快速整像素预测-UMHexagonS
这是一种复合的搜索方法,包括四种模板,构成四步搜索:(1)非对称十字搜索、(2)小矩形全搜索、(3)不均匀六边形网格搜索、(4)扩展的基于六边形的搜索
3.1.1 起始点的选取
大多数运动估计算法是基于匹配误差随着靠近最佳点距离的减小而衰减的假定,这个假定说明误差平面是一个单峰的曲面。为了避免局部最优,我们采用上一节中的四种MV预测加上(0,0)构成一个集合,并且定义了一种运算Φ,表示当前点的上下左右四个点。我们在上述的集合中加上Φ(0,0)和Φ(MVMP)的点。在这个集合中选取代价最小点作为起始点。
3.1.2非对称十字搜索
水平方向运动强于垂直方向运动。
先在水平方向以步长为2在搜索范围W下选最佳点,再一选定点为起点,以步长为2做垂直方向W/2的搜索。
3.1.3 小矩形全搜索
以起始点做全搜索。
3.1.4 不均匀的六边形网格搜索
不均匀是应用水平运动强于垂直运动,六边形中水平方向的点多余垂直方向的点。
采用一个16点六边形模板(16-HP)
3.1.5 扩展的基于六边形的搜索
根据搜索窗的大小不同,该搜索的最终准确度也会不同,因为要保证预测点在搜索窗的内部,尤其是当十字搜索的最佳点可能靠近搜索窗的边缘。如果搜索窗很小是4*4的,那么可以直接跳过十字搜索,而直接进行该步。
具体的搜索过程就是用六点的六边形和四点的小钻石以最佳起点不断搜索,直到最佳点就是中心点时结束。
3.2 快速分像素运动估计-CBFPS
CBFPS算法是对PPFPS(抛物面预测分像素搜索,论文引用[21][22][28])算法的改进,都是应用了单峰误差曲面的假设。但是PPFPS算法需要最佳整数点的周围钻石搜索的四个点都是可行的,但当局部cost计算仍在继续时将不能奏效,JM就是如此(不懂什么意思,可能是那个算法没有看的原因吧)。
3.2.1 分像素起始点选择
只有两个,一个是(0,0),一个是根据MP预测点得出的,MP是左、上、右上、左上四个点的中值,然后MVpred_FP=(MVpred_MP-MV)%β
1/4像素搜索时β=4,1/8像素搜索时β=8
3.2.2 CBFPS算法
做四点的钻石搜索
Step-1计算中值起点
Step-2对两个起点都做钻石搜索,选取最佳点
Step-3对最小点进行钻石搜索,直到最小代价点是中心点,则存储为MV,否则一直迭代。
5、提前截止
目的:越早结束搜索越好,结果越接近最佳值越好。
关于ρ,很多的公式,没有看下去。
H.264实现简单介绍
(pmx,pmy) 预测点坐标
(bmx,bmy) 最佳点坐标
(omx,omy) 起始点坐标
第1步、起始点选择
(x,y)=(0,0); m->mvc;
这两个点的周围四个点的钻石搜索
第2步、3*3的矩形全搜索找更好的起点
第3步、
3.1 在搜索范围内向左向右步长为2做水平搜索
在搜索范围内向上向下做步长为2的垂直搜索
3.2、 搜索范围右移一位
最佳搜索步长不为2,做八边形的搜索
然后做步长为1向外扩张的八边形的三点(+0,+1,+2)的搜索,找到更优的break
3.3 再求精,做4点钻石搜索,然后再做以1为步长钻石搜索的三点搜索,找到的最优解break
第4步、 保存最优解mv,cost
相关文章推荐
- H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)
- 论文"Gradient Domain Guided Image Filtering" matlab实现代码
- 从零开始,如何阅读一篇人工智能论文,及构建论文与代码的实现
- H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)
- CMU & Facebook论文解读 | 非局部神经网络(附代码实现)
- 不可错过的 GAN 资源:教程、视频、代码实现、89 篇论文下载
- H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)
- 音视频数据处理(21)--- H.264视频码流解析代码实现
- 视频h.264 解码出YUV分量代码实现
- CNN入门讲解:从论文到代码,实现Resnet
- 从零开始,如何阅读一篇人工智能论文,及构建论文与代码的实现
- "Bilateral texture filtering"论文 matlab实现代码
- Accurate, Dense, and Robust Multi-View Stereopsis论文分析与代码实现(一)
- 深度学习论文-神经网络的代码实现(python版本)
- DeepMind推出最新强化学习环境「Gridworlds」,剑指AI安全 | 附论文&代码实现
- 徒手实现CNN:综述论文详解卷积网络的数学本质
- 推荐系统的近期综述+经典论文及其实现
- (转) AI突破性论文及代码实现汇总
- "Gradient Domain Guided Image Filtering"论文中边缘权重函数matlab实现代码
- 记我向某德国boy要论文实现代码的经历