一种运动估计方法及装置与流程

文档序号:15221923发布日期:2018-08-21 17:34阅读:175来源:国知局

本发明涉及视频编码技术领域,特别涉及一种运动估计方法及装置。



背景技术:

随着多媒体应用中视频业务的不断发展以及视频云计算需求的不断提高,现有的网络传输带宽和存储资源愈来愈难以支撑数据量庞大的原始视频信源,这一现状使得视频编码逐渐成为国内外研究和应用的热点之一。

至今,国内外标准化组织已相继制定了多种不同的视频编码标准。自h.261视频编码标准以来,主流的视频编码标准均采用“基于块的预测和变换”的混合编码框架,输入的视频信号经过编码器中预测、变换、量化、扫描、熵编码等编码技术处理后,去除视频图像数据中的冗余信息,以减少传输带宽和存储空间。其中,视频编码中的预测技术一般分为两种,即帧内预测和帧间预测,i帧仅采用帧内预测,p、b帧既可采用帧内预测也能使用帧间预测。

其中,帧间预测用于减少时域冗余,它是利用相邻帧之间的相关性进行预测编码,即当前待编码的图像使用其它已编码并重构的图像作为参考帧,当前待编码块在参考帧中搜索相似块作为预测块。帧间预测中的关键技术包括运动估计(motionestimation)、运动补偿(motioncompensation)技术。其中,运动估计是在一定数量的参考帧中搜索最佳参考帧中的最佳预测块的过程,最佳参考帧内的最佳预测块与当前编码块的相对位置信息用运动矢量(motionvector,mv)来表示。帧间预测由于相邻图像之间存在一定相关性,能搜索到更为匹配的预测块,使得残差值更小,因此可以用较少的编码比特编码视频信息,而由于需要从所有参考帧中以不同的搜索方式搜索最佳预测块,并进行后期运动补偿,其编码复杂度也随之增加。

运动估计技术试图在当前待编码图像的参考帧集合中所有参考帧的有效搜索区域内搜索一个大小相同的预测块,因此,运动估计最为关键的是预测块的搜索过程。现有的运动估计技术关于搜索预测块的搜索方法有全搜索、三步法、四步法、菱形搜索(diamondsearch,ds)、六边形搜索(hexagonsearch,hex)、umh(unevenmulti-hexagon-grid)搜索、epzs(enhancedpredictivezonalsearch)搜索等,其中,umh搜索结合了全局搜索和局部搜索,可以有效地避免陷入局部最小陷阱,且编码性能较高,但是该搜索存在大量冗余的搜索点,导致编码速度较慢。



技术实现要素:

本发明实施例的目的在于提供一种运动估计方法及装置,以提高编码速度。具体技术方案如下:

为达到上述目的,本发明实施例公开了一种运动估计方法,所述方法包括:

确定目标编码块的初始运动矢量;

根据所述初始运动矢量,调整所述目标编码块的初始搜索范围,得到目标搜索范围;

在所述目标搜索范围内,利用搜索模板对所述目标编码块进行运动搜索,获得第一最佳运动矢量及所述第一最佳运动矢量对应的第一编码代价;

判断所述第一编码代价是否小于第一预设阈值;

如果是,将所述第一最佳运动矢量确定为所述目标编码块的目标运动矢量。

可选的,所述搜索模板为局部搜索模板。

可选的,在判断出所述第一编码代价不小于所述第一预设阈值的情况下,所述方法还包括:

在所述目标搜索范围内,基于所述第一最佳运动矢量,利用全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

在所述目标搜索范围内,基于所述第二最佳运动矢量,利用局部搜索模板对所述目标编码块进行运动搜索,获得第三最佳运动矢量;

将所述第三最佳运动矢量确定为所述目标编码块的目标运动矢量。

可选的,所述利用全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量,包括:

判断所述第一编码代价是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值;

如果否,采用第一局部搜索模板对所述目标编码块进行运动搜索,获得第四最佳运动矢量,再基于所述第四最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

如果是,利用第二全局搜索模板对所述目标编码块进行运动搜索,获得第五最佳运动矢量,再基于所述第五最佳运动矢量,利用第一局部搜索模板对所述目标编码块进行运动搜索,获得第六最佳运动矢量,再基于所述第六最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量。

可选的,所述基于所述第二最佳运动矢量,利用局部搜索模板对所述目标编码块进行运动搜索,获得第三最佳运动矢量,包括:

获得所述第二最佳运动矢量对应的第二编码代价,判断所述第二编码代价是否大于所述第一预设阈值;

如果是,设置起始最佳运动矢量为所述第二最佳运动矢量,以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索,得到最佳运动矢量,当所得到的最佳运动矢量的指向位置不是所述第二局部搜索模板的中心时,将所述起始最佳运动矢量更新为所得到的最佳运动矢量,返回所述以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索的步骤,直至所得到的最佳运动矢量的指向位置为所述第二局部搜索模板的中心,并将当前最佳运动矢量确定为第三最佳运动矢量;

如果否,以所述第二最佳运动矢量的指向位置作为第三局部搜索模板的中心进行运动搜索,获得第三最佳运动矢量。

可选的,所述确定目标编码块的初始运动矢量,包括:

根据已完成编码的编码块的运动矢量,构建所述目标编码块的针对运动矢量的预测候选集合;

按照预设的运动矢量选择顺序,从所述预测候选集合中确定两个中间运动矢量;

确定所述中间运动矢量对应的编码代价,并将编码代价最小的中间运动矢量确定为备选运动矢量;

根据所述备选运动矢量,确定所述目标编码块的初始运动矢量。

可选的,所述根据已完成编码的编码块的运动矢量,构建所述目标编码块的针对运动矢量的预测候选集合,包括:

依次判断所述目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块、第一编码块的右下相邻块、所述第一编码块的中心所在块是否存在且其预测模式不是帧内预测,其中,所述第一编码块为:在所述目标编码块的参考帧中的位置与所述目标编码块在当前编码帧的位置相同的编码块;

如果相邻块存在且其预测模式不是帧内预测,将该块的运动矢量及该块的运动矢量缩放后的运动矢量加入到所述预测候选集合中;

将零向量加入到所述预测候选集合中。

可选的,所述方法还包括:

当所述目标编码块所在编码单元存在父编码单元和/或子编码单元时,将所述父编码单元的运动矢量和/或子编码单元的运动矢量加入到所述预测候选集合中。

可选的,所述按照预设的运动矢量选择顺序,从所述预测候选集合中确定两个中间运动矢量,包括:

当所述预测候选集合中存在第一子集合时,按照第一优先级顺序,从所述第一子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第一子集合由所述左下相邻块对应的第一运动矢量和/或所述左相邻块对应的第二运动矢量确定,所述第一优先级顺序为:所述第一运动矢量的优先级大于所述第二运动矢量的优先级;

当所述预测候选集合中存在第二子集合时,按照第二优先级顺序,从所述第二子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第二子集合由所述右上相邻块对应的第三运动矢量和/或所述上相邻块对应的第四运动矢量和/或所述左上相邻块对应的第五运动矢量确定,所述第二优先级顺序为:所述第三运动矢量的优先级大于所述第四运动矢量的优先级、所述第四运动矢量的优先级大于所述第五运动矢量的优先级;

判断所述中间运动矢量的数量是否等于2;

如果不是,当所述预测候选集合中存在第三子集合时,按照第三优先级顺序,从所述第三子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第三子集合由所述第一编码块的右下相邻块对应的第六运动矢量和/或所述第一编码块的中心所在块对应的第七运动矢量确定,所述第三优先级顺序为:所述第六运动矢量的优先级大于所述第七运动矢量的优先级;

判断所述中间运动矢量的数量是否等于2;

如果不是,将所述预测候选集合中的零向量确定为中间运动矢量。

可选的,所述根据所述备选运动矢量,确定所述目标编码块的初始运动矢量,包括:

判断所述目标编码块所在编码单元是否存在父编码单元和/或子编码单元;

如果是,确定所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价,并将所述备选运动矢量、所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价最小的运动矢量确定为初始运动矢量;

如果否,将所述备选运动矢量确定为初始运动矢量。

可选的,所述根据所述初始运动矢量,调整所述目标编码块的初始搜索范围,包括:

将起始运动矢量设置为预设顺序中第一个运动矢量,其中,所述预设顺序为:左下相邻块的运动矢量、左下相邻块的运动矢量经缩放后的运动矢量、左相邻块的运动矢量、左相邻块的运动矢量经缩放后的运动矢量、右上相邻块的运动矢量、右上相邻块的运动矢量经缩放后的运动矢量、上相邻块的运动矢量、上相邻块的运动矢量经缩放后的运动矢量、左上相邻块的运动矢量、左上相邻块经缩放后的运动矢量、第一编码块的右下相邻块的运动矢量、第一编码块的右下相邻块的运动矢量经缩放后的运动矢量、第一编码块的中心所在块的运动矢量、第一编码块的中心所在块的运动矢量经缩放后的运动矢量;

判断所述起始运动矢量是否为零向量;

若为否,计算所述起始运动矢量和所述初始运动矢量的差值的绝对值,更新所述起始运动矢量为所述预设顺序中下一个运动矢量,跳转至执行所述判断所述起始运动矢量是否为零向量的步骤;

若为是,统计计算得到的差值的绝对值的个数k,判断k是否不小于第三预设阈值;若不小于,根据计算得到的差值的绝对值,调整所述目标编码块的初始搜索范围。

为达到上述目的,本发明实施例还公开了一种运动估计装置,所述装置包括:

第一确定模块,用于确定目标编码块的初始运动矢量;

调整模块,用于根据所述初始运动矢量,调整所述目标编码块的初始搜索范围,得到目标搜索范围;

第一搜索模块,用于在所述目标搜索范围内,利用搜索模板对所述目标编码块进行运动搜索,获得第一最佳运动矢量及所述第一最佳运动矢量对应的第一编码代价;

判断模块,用于判断所述第一编码代价是否小于第一预设阈值;

第二确定模块,用于在所述判断模块判断出所述第一编码代价小于第一预设阈值时,将所述第一最佳运动矢量确定为所述目标编码块的目标运动矢量。

可选的,所述搜索模板为局部搜索模板。

可选的,所述装置还包括:

第二搜索模块,用于在所述判断模块判断出所述第一编码代价不小于所述第一预设阈值的情况下,基于所述第一最佳运动矢量,在所述目标搜索范围内,利用全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

第三搜索模块,用于基于所述第二最佳运动矢量,在所述目标搜索范围内,利用局部搜索模板对所述目标编码块进行运动搜索,获得第三最佳运动矢量;

第三确定模块,用于将所述第三最佳运动矢量确定为所述目标编码块的目标运动矢量,结束针对所述目标编码块的运动估计。

可选的,所述第二搜索模块,包括:

第一判断子模块,用于在所述判断模块判断出所述第一编码代价不小于所述第一预设阈值的情况下,判断所述第一编码代价是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值;

第一搜索子模块,用于在所述第一判断子模块判断出所述第一编码代价不大于第二预设阈值时,基于所述第一最佳运动矢量,在所述目标搜索范围内,采用第一局部搜索模板对所述目标编码块进行运动搜索,获得第四最佳运动矢量,再基于所述第四最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

第二搜索子模块,用于在所述第一判断子模块判断出所述第一编码代价大于第二预设阈值时,基于所述第一最佳运动矢量,在所述目标搜索范围内,利用第二全局搜索模板对所述目标编码块进行运动搜索,获得第五最佳运动矢量,再基于所述第五最佳运动矢量,利用第一局部搜索模板对所述目标编码块进行运动搜索,获得第六最佳运动矢量,再基于所述第六最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量。

可选的,所述第三搜索模块,包括:

第二判断子模块,用于获得所述第二最佳运动矢量对应的第二编码代价,判断所述第二编码代价是否大于所述第一预设阈值;

第三搜索子模块,用于在所述第二判断子模块判断出所述第二编码代价大于所述第一预设阈值时,在所述目标搜索范围内,设置起始最佳运动矢量为所述第二最佳运动矢量,以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索,得到最佳运动矢量,当所得到的最佳运动矢量的指向位置不是所述第二局部搜索模板的中心时,将所述起始最佳运动矢量更新为所得到的最佳运动矢量,返回所述以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索的步骤,直至所得到的最佳运动矢量的指向位置为所述第二局部搜索模板的中心,并将当前最佳运动矢量确定为第三最佳运动矢量;

第四搜索子模块,用于在所述第二判断子模块判断出所述第二编码代价不大于所述第一预设阈值时,在所述目标搜索范围内,以所述第二最佳运动矢量的指向位置作为第三局部搜索模板的中心进行运动搜索,获得第三最佳运动矢量。

可选的,所述第一确定模块,包括:

构建子模块,用于根据已完成编码的编码块的运动矢量,构建所述目标编码块的针对运动矢量的预测候选集合;

第一确定子模块,按照预设的运动矢量选择顺序,从所述预测候选集合中确定两个中间运动矢量;

第二确定子模块,用于确定所述中间运动矢量对应的编码代价,并将编码代价最小的中间运动矢量确定为备选运动矢量;

第三确定子模块,用于根据所述备选运动矢量,确定所述目标编码块的初始运动矢量。

可选的,所述构建子模块,包括:

第一判断单元,用于依次判断所述目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块、第一编码块的右下相邻块、所述第一编码块的中心所在块是否存在且其预测模式不是帧内预测,其中,所述第一编码块为:在所述目标编码块的参考帧中的位置与所述目标编码块在当前编码帧的位置相同的编码块;

第一加入单元,用于在所述第一判断单元判断出某一个相邻块存在且其预测模式不是帧内预测,将该块的运动矢量及该块的运动矢量缩放后的运动矢量加入到所述预测候选集合中;

第二加入单元,用于将零向量加入到所述预测候选集合中。

可选的,所述装置还包括:

第三加入单元,用于当所述目标编码块所在编码单元存在父编码单元和/或子编码单元时,将所述父编码单元的运动矢量和/或子编码单元的运动矢量加入到所述预测候选集合中。

可选的,所述第一确定子模块,包括:

第一确定单元,用于当所述预测候选集合中存在第一子集合时,按照第一优先级顺序,从所述第一子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第一子集合由所述左下相邻块对应的第一运动矢量和/或所述左相邻块对应的第二运动矢量确定,所述第一优先级顺序为:所述第一运动矢量的优先级大于所述第二运动矢量的优先级;

第二确定单元,用于当所述预测候选集合中存在第二子集合时,按照第二优先级顺序,从所述第二子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第二子集合由所述右上相邻块对应的第三运动矢量和/或所述上相邻块对应的第四运动矢量和/或所述左上相邻块对应的第五运动矢量确定,所述第二优先级顺序为:所述第三运动矢量的优先级大于所述第四运动矢量的优先级、所述第四运动矢量的优先级大于所述第五运动矢量的优先级;

第二判断单元,用于判断所述中间运动矢量的数量是否等于2;

第三确定单元,用于在所述第二判断单元判断出所述中间运动矢量的数量不等于2的情况下,当所述预测候选集合中存在第三子集合时,按照第三优先级顺序,从所述第三子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第三子集合由所述第一编码块的右下相邻块对应的第六运动矢量和/或所述第一编码块的中心所在块对应的第七运动矢量确定,所述第三优先级顺序为:所述第六运动矢量的优先级大于所述第七运动矢量的优先级;

第三判断单元,用于判断所述中间运动矢量的数量是否等于2;

第四确定单元,用于在所述第三判断单元判断出所述中间运动矢量的数量不等于2的情况下,将所述预测候选集合中的零向量确定为中间运动矢量。

可选的,所述第三确定子模块,包括:

第四判断单元,用于判断所述目标编码块所在编码单元是否存在父编码单元和/或子编码单元;

第五确定单元,用于在所述第四判断单元判断出所述目标编码块所在编码单元存在父编码单元和/或子编码单元时,确定所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价,并将所述备选运动矢量、所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价最小的运动矢量确定为初始运动矢量;

第六确定单元,用于在所述第四判断单元判断出所述目标编码块所在编码单元不存在父编码单元和/或子编码单元时,将所述备选运动矢量确定为初始运动矢量。

可选的,所述调整模块,包括:

设置子模块,用于将起始运动矢量设置为预设顺序中第一个运动矢量,其中,所述预设顺序为:左下相邻块的运动矢量、左下相邻块的运动矢量经缩放后的运动矢量、左相邻块的运动矢量、左相邻块的运动矢量经缩放后的运动矢量、右上相邻块的运动矢量、右上相邻块的运动矢量经缩放后的运动矢量、上相邻块的运动矢量、上相邻块的运动矢量经缩放后的运动矢量、左上相邻块的运动矢量、左上相邻块经缩放后的运动矢量、第一编码块的右下相邻块的运动矢量、第一编码块的右下相邻块的运动矢量经缩放后的运动矢量、第一编码块的中心所在块的运动矢量、第一编码块的中心所在块的运动矢量经缩放后的运动矢量;

第三判断子模块,用于判断所述起始运动矢量是否为零向量;

计算子模块,用于在所述第三判断子模块判断出所述起始运动矢量不是零向量时,计算所述起始运动矢量和所述初始运动矢量的差值的绝对值,更新所述起始运动矢量为所述预设顺序中下一个运动矢量,并触发所述第三判断子模块;

调整子模块,用于在所述第三判断子模块判断出所述起始运动矢量是零向量时,统计计算得到的差值的绝对值的个数k,判断k是否不小于第三预设阈值;若不小于,根据计算得到的差值的绝对值,调整所述目标编码块的初始搜索范围,得到目标搜索范围。

可见,应用本发明实施例提供的运动估计方法及装置,首先调整目标编码块的搜索范围,在调整后的搜索范围内,利用搜索模板进行运动搜索,获得第一最佳运动矢量,根据第一最佳运动矢量对应的编码代价判断是否可以结束针对目标编码块的运动估计,以提前终止对目标编码块的运动搜索,这种方式可以避免搜索过多的冗余点,减少计算量,提高编码速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术的八种搜索模板示意图;

图2(a)和图2(b)分别为当前编码块的空域相邻块、时域相邻块的示意图;

图3为本发明实施例提供的一种运动估计方法的流程示意图;

图4为本发明实施例提供的图3中s301的一种实施方式的流程示意图;

图5为本发明实施例提供的一种运动估计装置的结构示意图;

图6为本发明实施例提供的图5中第一确定模块501的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

先对本申请文件中涉及到的技术用语进行简单介绍。

运动估计:视频编码过程中,通常将图像划分成编码块,在参考图像中搜索当前编码块的相似块,并确定与相似块之间的空间位置相对偏移,上述空间位置相对偏移的偏移量又被称之为运动矢量,简而言之,运动估计即获取运动矢量的过程。

覆盖运动矢量,即覆盖于当前编码块所在编码单元范围的父编码单元的运动矢量,也称为父运动矢量(fathermv)。

继承运动矢量,即继承于当前编码块所在编码单元的子编码单元的运动矢量,也称为子运动矢量(submv);获取子运动矢量的方法包括但不仅限于在当前编码块的编码单元范围内采用一个子编码单元的运动矢量或多个子编码单元的运动矢量的中值、平均值、最值等。

图1示出了八种搜索模板的示意图,其中,图1(a)为步长为1的小菱形模板,也称为dia1模板;图1(b)为大菱形模板,也称为dia2模板;图1(c)为十字型模板,也称为cross模板,即在水平方向和垂直方向以相同的起始点和步长进行搜索,但水平方向和垂直方向的搜索范围可以一致也可以不一致,一般情况下,分为水平方向搜索范围等于垂直方向搜索范围的对称十字型模板,和水平方向搜索范围是垂直方向搜索范围的两倍的非对称十字型模板;图1(d)为八边形模板,也称为oct模板;图1(e)为步长为2的小菱形模板,也称为dia3模板;图1(f)为多层次大六边形模板,也称为hex16模板;图1(g)为小六边形模板,也称为hex模板;图1(h)为正方形模板,也称为square模板。

本领域技术人员可以理解的是,dia1模板、dia2模板、oct模板、dia3模板、hex模板、square模板均为局部搜索模板,cross模板和hex16模板为全局搜索模板。

图2(a)示出了当前编码块的空域相邻块,其中,较大的正方形块表示为当前编码块,a0、a1、b0、b1、b2所在的正方形分别表示为当前编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块。

图2(b)示出了当前编码块的时域相邻块,其中,较大的正方形块表示为在参考帧中位置与当前编码块在当前编码帧中位置相同的编码块,当前编码帧为当前正在编码的视频帧,为描述方便,下文将图2(b)中较大的正方形表示的编码块称之为第一编码块;t0、t1所在的正方形分别表示为第一编码块的右下相邻块、第一编码块的中心所在块。需要说明的是,t1所表示的块与t0所表示的块的大小相同,并且t1所表示的块处在第一编码块的中心位置。

下面首先对本发明实施例提供的一种运动估计方法进行说明。需要说明的是,本发明实施例所提供的一种运动估计方法的执行主体可以为一种视频编码装置,如:视频编码器。其中,该视频编码装置可以为现有视频编码软件中的插件,或者,独立的功能软件,这都是合理的。并且,该视频编码装置可以应用于终端中,也可以应用于服务器中。

图3为本发明实施例提供的一种运动估计方法的流程示意图,该方法包括:

s301,确定目标编码块的初始运动矢量。

在一种较佳的实施方式中,可以根据已完成编码的编码块的运动矢量来确定目标编码块的初始运动矢量。其中,已完成编码的编码块的运动矢量取自于包括但不限于:从目标编码块的空域相邻块预测得到的运动矢量、从时域相邻块预测得到的运动矢量、对上述相邻块的运动矢量进行缩放处理后得到的运动矢量、覆盖于目标编码块所在编码单元范围的父编码单元的运动矢量、继承于目标编码块所在编码单元的子编码单元的运动矢量、以及零向量等。

已完成编码的编码块的运动矢量可以通过以下的图像信息获得:目标编码块所在图像的索引号、目标编码块的参考帧的索引号、目标编码块的位置信息、目标编码块的空域相邻块的信息、目标编码块在参考帧中的时域相邻块的信息、目标编码块所在编码单元的信息,等等,当然,还可以根据其他的图像信息获得,本实施例对此不做限定。

具体的,如图4所示,上述确定目标编码块的初始运动矢量的步骤,可以包括:

s3011,根据已完成编码的编码块的运动矢量,构建目标编码块的针对运动矢量的预测候选集合。

实际应用中,已完成编码的编码块可以是目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块,也可以是第一编码块的右下相邻块、第一编码块的中心所在块。可以理解的,这些编码块与目标编码块之间的相关性较大,因此可以作为目标编码块的预测候选。

根据已完成编码的编码块的运动矢量,可以按照一定的顺序构建目标编码块的针对运动矢量的预测候选集合。

加入预测候选集合的预测候选来自于但不局限于目标编码块的空域相邻块(如图2(a)所示的a0、a1、b0、b1、b2位置的块)对应的运动矢量、时域相邻块(如图2(b)所示的t0、t1位置的块)对应的运动矢量、以及对上述相邻块的运动矢量进行缩放处理后得到的运动矢量、以及零向量、以及覆盖于当前编码块对应的编码单元范围的父编码单元的运动矢量和/或继承于目标编码块对应的编码单元的子编码单元的运动矢量等。其中,上述缩放处理可以采用但不限于采用基于位置距离线性缩放的处理方式。

具体的,根据已完成编码的编码块的运动矢量,构建目标编码块的针对运动矢量的预测候选集合的步骤,可以包括:

依次判断目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块、第一编码块的右下相邻块、第一编码块的中心所在块是否存在且其预测模式不是帧内预测,其中,第一编码块为:目标编码块在参考帧中的位置与目标编码块在当前待编码帧中的位置相同的编码块;

如果相邻块存在且其预测模式不是帧内预测,将该块的运动矢量及该块的运动矢量缩放后的运动矢量加入到预测候选集合中;

将零向量加入到所述预测候选集合中。

如果某一个相邻块存在且预测模式不是帧内预测,可以理解为该块有效,那么,当一个块不存在或者预测模式是帧内预测,则可以理解为该块无效,同时,该块的运动矢量也是无效的。可以理解的,当一个块无效时,也就不需要对该块的运动矢量进行缩放处理,即该块的运动矢量经过缩放处理后的运动矢量也是无效的。

进一步的,上述目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块、第一编码块的右下相邻块、第一编码块的中心所在块所对应的运动矢量以及各个运动矢量经缩放后得到的运动矢量均可以视为预测候选,但是,在实际应用中,上述预测候选并不都是有效的。因此,在构建预测候选集合时,只需要将有效的预测候选加入到预测候选集合中。

按照各个块与目标编码块的位置关系,可以对各个块对应的运动矢量进行划分,具体为:

空域预测候选,包括但不限于左下相邻块的运动矢量、左相邻块的运动矢量、右上相邻块的运动矢量、上相邻块的运动矢量、左上相邻块的运动矢量;

时域预测候选,包括但不限于第一编码块的右下相邻块的运动矢量、第一编码块的中心所在块的运动矢量;

缩放预测候选,包括空域预测候选、时域预测候选根据一定缩放规则操作后得到的运动矢量。

示例性的,构建预测候选集合的过程如下:首先检测空域预测候选,对于左相邻的预测候选,按照左下相邻块a0、左相邻块a1的顺序,依次将所有有效的预测候选加入到预测候选集合中,例如,如果左下相邻块a0、左相邻块a1均有效,则将a0的运动矢量、a0的运动矢量缩放后的运动矢量、a1的运动矢量、a1的运动矢量缩放后的运动矢量加入到预测候选集合中,如果a0有效而a1无效,则只将a0的运动矢量、a0的运动矢量缩放后的运动矢量加入到预测候选集合中;对于上相邻的预测候选,按照b0、b1、b2的顺序,依次将所有有效的预测候选加入到预测候选集合中;然后,检测时域预测候选,按照t0、t1的顺序检测,依次将所有有效的预测候选加入到预测候选集合中;最后,还需要补充零向量至预测候选集合中,由于本实施例需要从预测候选集合中确定两个中间运动矢量,因此为了避免上述空域预测候选和时域预测候选均无效的情况,可以补充两个零向量至预测候选集合中。

需要说明的是,本实施例需要从预测候选集合中确定两个中间运动矢量,因为这种方式的计算量较小,并且经过后续的处理可以得到较为准确的初始运动矢量。

实际应用中,可以视为预测候选集合中的各个预测候选项是按照加入顺序依次排列的,也可以视为各个预测候选项是无序排列的,本实施例对此不做限定。

可以理解的,由于父编码单元覆盖了编码块所在编码单元的范围,可以说父编码单元与编码块所在编码单元之间具有较大的相关性,同样的,子编码单元是编码块所在编码单元的一部分,可以说子编码单元与编码块所在编码单元之间也具有较大的相关性。因此,还可以将父编码单元的运动矢量和子编码单元的运动矢量作为预测候选加入到预测候选集合中。

具体的,构建预测候选集合还可以包括:当目标编码块所在编码单元存在父编码单元和/或子编码单元时,将父编码单元的运动矢量和/或子编码单元的运动矢量加入到预测候选集合中。

s3012,按照预设的运动矢量选择顺序,从预测候选集合中确定两个中间运动矢量。

对于左相邻的预测候选,按照a0、a1的顺序,从预测候选集合中选择第一个有效的运动矢量作为中间运动矢量;对于上相邻的预测候选,按照b0、b1、b2的顺序,选择第一个有效的运动矢量作为中间运动矢量。如果当前中间运动矢量的数量不为2,即左相邻预测候选和上相邻预测候选中至少有一个不存在有效的运动矢量,此时,可以继续判断时域预测候选,按照t0、t1的顺序,选择第一个有效的运动矢量作为中间运动矢量。如果当前中间运动矢量的数量仍然不为2,则将零向量作为中间运动矢量。可以理解的,为保证算法的正确执行,对于上述空域预测候选和时域预测候选均无效的情况,可以使与测候选集合中的两个零向量作为中间运动矢量,以使中间运动矢量的数量为2。

具体的,按照预设的运动矢量选择顺序,从预测候选集合中确定两个中间运动矢量的步骤,可以包括:

当在预测候选集合中存在第一子集合时,按照第一优先级顺序,从第一子集合中选择一个运动矢量确定为中间运动矢量,其中,第一子集合由左下相邻块对应的第一运动矢量和/或左相邻块对应的第二运动矢量确定,第一优先级顺序为:第一运动矢量的优先级大于第二运动矢量的优先级;

当在预测候选集合中存在第二子集合时,按照第二优先级顺序,从第二子集合中选择一个运动矢量确定为中间运动矢量,其中,第二子集合由右上相邻块对应的第三运动矢量和/或上相邻块对应的第四运动矢量和/或左上相邻块对应的第五运动矢量确定,第二优先级顺序为:第三运动矢量的优先级大于第四运动矢量的优先级、第四运动矢量的优先级大于第五运动矢量的优先级;

判断中间运动矢量的数量是否等于2;

如果不是,当在预测候选集合中存在第三子集合时,按照第三优先级顺序,从第三子集合中选择一个运动矢量确定为中间运动矢量,其中,第三子集合由第一编码块的右下相邻块对应的第六运动矢量和/或第一编码块的中心所在块对应的第七运动矢量确定,第三优先级顺序为:第六运动矢量的优先级大于第七运动矢量的优先级;

判断中间运动矢量的数量是否等于2;

如果不是,将预测候选集合中的零向量确定为中间运动矢量。

s3013,确定中间运动矢量对应的编码代价,并将编码代价最小的中间运动矢量确定为备选运动矢量。

其中,编码代价的计算方式包括但不仅限于率失真代价、亮度分量的率失真代价或亮度分量的失真代价、色度分量的率失真代价、色度分量的失真代价等计算方式。

s3014,根据备选运动矢量,确定目标编码块的初始运动矢量。

具体的,根据备选运动矢量,确定目标编码块的初始运动矢量的步骤,可以包括:

判断目标编码块所在编码单元是否存在父编码单元和/或子编码单元;

如果是,确定父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价,并将备选运动矢量、父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价最小的运动矢量确定为初始运动矢量;

如果否,将备选运动矢量确定为初始运动矢量。

可以理解的,编码代价有多种计算方式,在本实施例中,确定父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价,所利用的计算方式与确定备选运动矢量的编码代价的计算方式是相同的。

示例性的,基于率失真准则,比较两个中间运动矢量的编码代价,选择编码代价较小的中间运动矢量作为备选运动矢量。若目标编码块所在编码单元存在父编码单元,则比较备选运动矢量与父编码单元的运动矢量的编码代价,选择编码代价较小的运动矢量作为初始运动矢量。若目标编码块所在编码单元存在子编码单元,则比较备选运动矢量与子编码单元的运动矢量的编码代价,选择编码代价较小的运动矢量作为初始运动矢量。若目标编码块所在编码单元同时存在父编码单元和子编码单元,则从备选运动矢量、父编码单元的运动矢量和子编码单元的运动矢量中,选择编码代价较小的运动矢量作为初始运动矢量。

s302,根据初始运动矢量,调整目标编码块的初始搜索范围,得到目标搜索范围。

其中,初始搜索范围可以由用户在视频编码装置的配置文件中设置,也可以采用视频编码装置的默认值。

具体的,根据初始运动矢量,调整目标编码块的初始搜索范围,得到目标搜索范围,可以包括:

将起始运动矢量设置为预设顺序中第一个运动矢量,其中,预设顺序为:左下相邻块的运动矢量、左下相邻块的运动矢量经缩放后的运动矢量、左相邻块的运动矢量、左相邻块的运动矢量经缩放后的运动矢量、右上相邻块的运动矢量、右上相邻块的运动矢量经缩放的运动矢量、上相邻块的运动矢量、上相邻块的运动矢量经缩放后的运动矢量、左上相邻块的运动矢量、左上相邻块的运动矢量经缩放后的运动矢量、第一编码块的右下相邻块的运动矢量、第一编码块的右下相邻块的运动矢量经缩放后的运动矢量、第一编码块的中心所在块的运动矢量、第一编码块的中心所在块的运动矢量经缩放后的运动矢量;

判断起始运动矢量是否为零向量;

若为否,计算起始运动矢量和初始运动矢量的差值的绝对值,更新起始运动矢量为预设顺序中下一个运动矢量,跳转至执行判断起始运动矢量是否为零向量的步骤;

若为是,统计计算得到的差值的绝对值的个数k,判断k是否不小于第三预设阈值;若不小于,根据计算得到的差值的绝对值,调整目标编码块的初始搜索范围。

实际应用中,起始运动矢量和初始运动矢量的差值的绝对值的计算方式包括但不限于采用绝对差值、均方差差值、平方差值等方式。

示例性的,以绝对差值的计算方式为例,将初始运动矢量与上述预设顺序中的块的运动矢量依次进行比较,计算初始运动矢量与每一个块的运动矢量的x分量、y分量的绝对差值,设初始运动矢量为mv(x,y),起始运动矢量为mv(x’,y’),则绝对差值d=max(|x-x’|,|y-y’|)。

当起始运动矢量为零向量时跳出该过程,此时,比较过的运动矢量个数记为k,因此,当k大于等于第三预设阈值时,对搜索范围(l,h)调整,否则仍采用初始搜索范围(l0,h0)。

进一步的,从已经计算得到的绝对差值d中,还可以确定一个最大的绝对差值dmax,并根据该最大绝对差值,来调整目标编码块的初始搜索范围。具体的:当dmax大于一定阈值th1,说明图像可能产生了剧烈运动,因此,需要相应扩大搜索范围,即如果初始搜索范围较小,则需要调大,但是如果初始搜索范围已经足够大,则不必调整;如果dmax小于一定阈值th2(其中th1大于等于th2),说明运动相对平缓,因此,初始搜索范围应尽可能缩小。其中,调整的方法包括但不局限于同时调整初始搜索范围的上限和下限,即对上限和下限同时增加或减小一定数量,或者分别调整初始搜索范围的上限和下限;或者仅调整初始搜索范围的上限,或者仅调整初始搜索范围的下限。

需要说明的是,上述初始搜索范围的上限和下限分别指的是初始搜索范围的l0和h0。假设目标编码块最左点的位置为(k,l),那么根据初始搜索范围与目标编码块的位置关系,可以得到l0=k-d,h0=l+d,d为初始搜索范围的大小。扩大搜索范围,就是减小l增大h,缩小搜索范围,就是增大l减小h。

s303,在目标搜索范围内,利用搜索模板对目标编码块进行运动搜索,获得第一最佳运动矢量及第一最佳运动矢量对应的第一编码代价。

实际应用中,可以基于上述确定的初始运动矢量,也就是以所确定的初始运动矢量的指向位置为搜索起始点,在目标搜索范围内,利用搜索模板对目标编码块进行运动搜索。

具体的,可以利用全局搜索模板对目标编码块进行运动搜索,但是利用全局搜索模板进行搜索可能会搜索到较多冗余的搜索点,因此为了减少冗余搜索点,提高编码速度,在一种较佳的实施方式中,可以利用局部搜索模板对目标编码块进行运动搜索。

实际应用中,全局搜索模板包括但不限于采用十字型模板(如图1(c))、多层次大六边形模板(如图(f))等,局部搜索模板包括但不限于采用小菱形模板(如图1(a)、图1(e))、正方形模板(如图1(h))、小六边形模板(如图1(g))等。

本领域技术人员可以理解的是,在运动搜索时,无论是利用局部搜索模板做局部搜索,还是利用全局搜索模板做全局搜索,通常都是以当前的最佳运动矢量的指向位置作为搜索模板的中心进行运动搜索的。

利用局部搜索模板对目标编码块进行运动搜索时,在一种实现方式中,为了减小计算量,可以仅采用该局部搜索模板做一次运动搜索,从所搜索的点中确定编码代价最小的点,并将该点所对应的运动矢量作为第一最佳运动矢量;在另一种实现方式中,可以采用该局部搜索模板进行运动搜索,如果所搜索到的最优点不是该局部搜索目标的中心点,则再次以所搜索到的最优点为该局部搜索模板的中心进行运动搜索,直到搜索到的最优点为该局部搜索目标的中心点,此时,将该最优点对应的运动矢量作为第一最佳运动矢量。

其中,本步骤中计算编码代价的方式,可以与上述确定备选运动矢量的编码代价的计算方式相同,也可以不同,在此不做限定。

s304,判断第一编码代价是否小于第一预设阈值;如果是,执行s305。

实际应用中,对于不同大小的编码块,对应的第一预设阈值可以相同,也可以不同,本实施例对此不做限定。

s305,将第一最佳运动矢量确定为目标编码块的目标运动矢量。

本领域技术人员可以理解的,确定了目标编码块的目标运动矢量,也就意味着结束了针对目标编码块的运动估计。

进一步的,在上述利用局部搜索模板对目标编码块进行运动搜索,获得第一最佳运动矢量及第一最佳运动矢量对应的第一编码代价的情况下,如果判断出第一编码代价不小于第一预设阈值,则该方法还可以包括:

在目标搜索范围内,基于第一最佳运动矢量,利用全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量;

在目标搜索范围内,基于第二最佳运动矢量,利用局部搜索模板对目标编码块进行运动搜索,获得第三最佳运动矢量;

将第三最佳运动矢量确定为目标编码块的目标运动矢量。

同样的,将第三最佳运动矢量确定为目标编码块的目标运动矢量,也意味着结束了针对目标编码块的运动估计。

在一种较佳的实现方式中,利用全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量,可以包括:

判断第一编码代价是否大于第二预设阈值,其中,第二预设阈值大于第一预设阈值;

如果否,采用第一局部搜索模板对目标编码块进行运动搜索,获得第四最佳运动矢量,再基于第四最佳运动矢量,采用第一全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量;

如果是,利用第二全局搜索模板对目标编码块进行运动搜索,获得第五最佳运动矢量,再基于第五最佳运动矢量,利用第一局部搜索模板对目标编码块进行运动搜索,获得第六最佳运动矢量,再基于第六最佳运动矢量,在目标搜索范围内,采用第一全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量。

可以理解的,在一种实施方式中,当第一编码代价不大于第二预设阈值时,可以基于第一最佳运动矢量,在目标搜索范围内,采用第一局部搜索模板对目标编码块进行运动搜索,获得第四最佳运动矢量,再基于第四最佳运动矢量,在目标搜索范围内,采用第一全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量;

并且,当第一编码代价大于第二预设阈值时,可以基于第一最佳运动矢量,在目标搜索范围内,利用第二全局搜索模板对目标编码块进行运动搜索,获得第五最佳运动矢量,再基于第五最佳运动矢量,在目标搜索范围内,利用第一局部搜索模板对目标编码块进行运动搜索,获得第六最佳运动矢量,再基于第六最佳运动矢量,在目标搜索范围内,采用第一全局搜索模板对目标编码块进行运动搜索,获得第二最佳运动矢量。

实际应用中,上述第一局部搜索模板可以为hex模板,第一全局搜索模板可以为hex16模板,第二全局搜索模板可以为cross模板,其中cross模板可以采用但不限于采用非对称十字型模板或者对称十字型模板,本实施例对使用的具体模板均不作限定。

与第一预设阈值的设定方法相同,对于不同大小的编码块,对应的第二预设阈值可以相同,也可以不同,本实施例对此不做限定。

可以理解的,当第一编码代价小于第二预设阈值时,表示当前所确定的第一最佳运动矢量可能为较优的预测值,因此在目标搜索范围内,可以先使用局部搜索模板来搜索最优点,再以该最优点为中心,采用全局搜索目标搜索最佳点,得到第二最佳运动矢量;当第一编码代价不小于第二预设阈值时,说明当前所确定的第一最佳运动矢量并不是较优的预测值,为了提高编码性能,在目标搜索范围内,需要先采用全局搜索模板搜索出较优的预测值,再以该较优的预测值的指向位置为中心使用局部搜索模板来搜索最优点,然后以该最优点为中心,采用全局搜索模板搜索最佳点,得到第二最佳运动矢量。

在得到第二最佳运动矢量后,为保证编码性能,还可以再次进行局部搜索,以获得最佳运动矢量。

具体的,在一种实现方式中,为提高编码速度,可以直接在目标搜索范围内,以第二最佳运动矢量的指向位置为局部搜索模板中心进行运动搜索,获得第三最佳运动矢量。

在第二种实现方式中,为提高编码性能,可以在目标搜索范围内,先以第二最佳运动矢量的指向位置作为局部搜索模板中心进行运动搜索,如果搜索得到的最优运动矢量的指向位置不是局部搜索模板中心,再以该最优运动矢量的指向位置作为局部搜索模板中心再次进行运动搜索,直到最终得到的最优运动矢量的指向位置为局部搜索模板中心,则将此时的最优运动矢量作为第三运动矢量。这种搜索方式可以理解为使用局部搜索模板进行扩展局部搜索。

当然,为了提高编码速度,同时不过多地损失编码性能,在第三种实现方式中,基于第二最佳运动矢量,利用局部搜索模板对目标编码块进行运动搜索,获得第三最佳运动矢量,可以包括;

获得第二最佳运动矢量对应的第二编码代价,判断第二编码代价是否大于第一预设阈值;

如果是,设置起始最佳运动矢量为第二最佳运动矢量,以起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索,得到最佳运动矢量,当所得到的最佳运动矢量的指向位置不是第二局部搜索模板的中心时,将起始最佳运动矢量更新为所得到的最佳运动矢量,返回以起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索的步骤,直至所得到的最佳运动矢量的指向位置为第二局部搜索模板的中心,并将当前最佳运动矢量确定为第三最佳运动矢量;

如果否,以第二最佳运动矢量的指向位置作为第三局部搜索模板的中心进行运动搜索,获得第三最佳运动矢量。

可以理解的,较佳的,当第二编码代价大于第一预设值时,可以在目标搜索范围内,设置起始最佳运动矢量为第二最佳运动矢量,以起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索,得到最佳运动矢量,当所得到的最佳运动矢量的指向位置不是第二局部搜索模板的中心时,将起始最佳运动矢量更新为所得到的最佳运动矢量,返回以起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索的步骤,直至所得到的最佳运动矢量的指向位置为第二局部搜索模板的中心,并将当前最佳运动矢量确定为第三最佳运动矢量;

并且,当第二编码代价不大于第一预设值时,可以在目标搜索范围内,以第二最佳运动矢量的指向位置作为第三局部搜索模板的中心进行运动搜索,获得第三最佳运动矢量。

示例性的,在第二编码代价大于第一预设阈值的情况下,可以采用小六边形模板或者小菱形模板按照上述搜索方式进行扩展局部搜索,为了提高编码性能,也可以先采用小六边形模板进行扩展局部搜索,再使用小菱形模板进行扩展局部搜索,都是合理的,本实施例对此不做限定。

可以理解的是,第二编码代价的计算方式应当与上述第一编码代价的计算方式相同。

实际应用中,上述运动估计过程为整像素级运动估计,获得的目标运动矢量为整像素级运动矢量。若编码器支持分像素运动估计,则基于整像素级运动矢量,对目标编码块进行分像素级运动估计,可以获得分像素级运动矢量;然后,根据整像素级运动矢量或分像素级运动矢量,获得目标编码块的运动矢量。

具体的,整像素级别的运动估计,即在目标搜索范围内,从初始运动矢量所指向的位置开始,依据搜索模板,搜索能使得编码代价最小的运动矢量,该运动矢量即为整像素级的最优运动矢量。进一步的,若编码器还支持分像素搜索,则再以整像素级的最优运动矢量为初始运动矢量,遍历周围所有分像素点找出编码代价最小的分像素最优点,完成分像素级的运动估计,从而获得最优的运动矢量。

需要说明的是,因为利用本实施例所提供的方案,可以生成符合现有视频编码标准的视频码流,所以生成的视频码流可以直接被常用播放器解码播放。

综上,本实施例提供的运动估计方法,首先确定目标编码块的初始运动矢量,根据初始运动矢量,调整目标编码块的初始搜索范围得到目标搜索范围,基于初始运动矢量,在目标搜索范围内,利用搜索模板进行运动搜索,获得第一最佳运动矢量及第一最佳运动矢量对应的第一编码代价,判断第一编码代价是否小于第一预设阈值;如果是,将第一最佳运动矢量作为目标编码块的目标运动矢量,结束针对目标编码块的运动估计。

可见,应用本实施例提供的运动估计方法,首先调整目标编码块的搜索范围,在调整后的搜索范围内,利用搜索模板进行运动搜索,获得第一最佳运动矢量,根据第一最佳运动矢量对应的编码代价判断是否可以结束针对目标编码块的运动估计,以提前终止对目标编码块的运动搜索,这种方式可以避免搜索过多的冗余点,减少计算量,提高编码速度。

本实施例所提供的运动估计方法的基本原理是确定搜索初始点的位置并自适应调整搜索范围,采用多种搜索模板并判断是否提前终止搜索,从而减少所计算的搜索点的个数,降低运动估计模块的计算复杂度以节省总体编码时间,因此可以节省非全i帧编码的视频编码时间,同时编码性能损失较小。

具体的,表1表明了本实施例所提供的方案对比multicore-x265中的umh搜索方式所带来的编码时间节省,表中y、u、v和yuv分别表示y、u、v以及yuv合并质量下的码率节省(负值表示节省,正值表示增加);编码器复杂度的计算方式如(1)所示,δfps表示编码加速,其中fpsanchor表示编码器使用原有umh方式编码视频序列的帧率fps,fpsproposed表示同一编码器采用本实施例所提供的方案编码视频序列的帧率fps。表1中正值表示加速,负值表示减速。由表1可知,本实施例所提供的方案平均带来13%左右的加速,且几乎不影响编码效率。

表1

与上述的运动估计方法相对应,本发明实施例还提供了一种运动估计装置。

与图3所示的方法实施例相对应,图5为本发明实施例提供的一种运动估计装置的结构示意图,该装置可以包括:

第一确定模块501,用于确定目标编码块的初始运动矢量;

调整模块502,用于根据所述初始运动矢量,调整所述目标编码块的初始搜索范围,得到目标搜索范围;

第一搜索模块503,用于在所述目标搜索范围内,利用搜索模板对所述目标编码块进行运动搜索,获得第一最佳运动矢量及所述第一最佳运动矢量对应的第一编码代价;

判断模块504,用于判断所述第一编码代价是否小于第一预设阈值;

第二确定模块505,用于在所述判断模块504判断出所述第一编码代价小于第一预设阈值时,将所述第一最佳运动矢量确定为所述目标编码块的目标运动矢量。

具体的,所述搜索模板可以为局部搜索模板。

具体的,所述装置还可以包括:

第二搜索模块(图中未示出),用于在所述判断模块判断出所述第一编码代价不小于所述第一预设阈值的情况下,基于所述第一最佳运动矢量,在所述目标搜索范围内,利用全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

第三搜索模块(图中未示出),用于基于所述第二最佳运动矢量,在所述目标搜索范围内,利用局部搜索模板对所述目标编码块进行运动搜索,获得第三最佳运动矢量;

第三确定模块(图中未示出),用于将所述第三最佳运动矢量确定为所述目标编码块的目标运动矢量。

具体的,所述第二搜索模块,可以包括:

第一判断子模块(图中未示出),用于在所述判断模块判断出所述第一编码代价不小于所述第一预设阈值的情况下,判断所述第一编码代价是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值;

第一搜索子模块(图中未示出),用于在所述第一判断子模块判断出所述第一编码代价不大于第二预设阈值时,基于所述第一最佳运动矢量,在所述目标搜索范围内,采用第一局部搜索模板对所述目标编码块进行运动搜索,获得第四最佳运动矢量,再基于所述第四最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量;

第二搜索子模块(图中未示出),用于在所述第一判断子模块判断出所述第一编码代价大于第二预设阈值时,基于所述第一最佳运动矢量,在所述目标搜索范围内,利用第二全局搜索模板对所述目标编码块进行运动搜索,获得第五最佳运动矢量,再基于所述第五最佳运动矢量,利用第一局部搜索模板对所述目标编码块进行运动搜索,获得第六最佳运动矢量,再基于所述第六最佳运动矢量,采用第一全局搜索模板对所述目标编码块进行运动搜索,获得第二最佳运动矢量。

具体的,所述第三搜索模块,可以包括:

第二判断子模块(图中未示出),用于获得所述第二最佳运动矢量对应的第二编码代价,判断所述第二编码代价是否大于所述第一预设阈值;

第三搜索子模块(图中未示出),用于在所述第二判断子模块判断出所述第二编码代价大于所述第一预设阈值时,在所述目标搜索范围内,设置起始最佳运动矢量为所述第二最佳运动矢量,以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索,得到最佳运动矢量,当所得到的最佳运动矢量的指向位置不是所述第二局部搜索模板的中心时,将所述起始最佳运动矢量更新为所得到的最佳运动矢量,返回所述以所述起始最佳运动矢量的指向位置作为第二局部搜索模板的中心进行运动搜索的步骤,直至所得到的最佳运动矢量的指向位置为所述第二局部搜索模板的中心,并将当前最佳运动矢量确定为第三最佳运动矢量;

第四搜索子模块(图中未示出),用于在所述第二判断子模块判断出所述第二编码代价不大于所述第一预设阈值时,在所述目标搜索范围内,以所述第二最佳运动矢量的指向位置作为第三局部搜索模板的中心进行运动搜索,获得第三最佳运动矢量。

具体的,如图6所示,所述第一确定模块501,可以包括:

构建子模块5011,用于根据已完成编码的编码块的运动矢量,构建所述目标编码块的针对运动矢量的预测候选集合;

第一确定子模块5012,按照预设的运动矢量选择顺序,从所述预测候选集合中确定两个中间运动矢量;

第二确定子模块5013,用于确定所述中间运动矢量对应的编码代价,并将编码代价最小的中间运动矢量确定为备选运动矢量;

第三确定子模块5014,用于根据所述备选运动矢量,确定所述目标编码块的初始运动矢量。

具体的,所述构建子模块5011,可以包括:

第一判断单元(图中未示出),用于依次判断所述目标编码块的左下相邻块、左相邻块、右上相邻块、上相邻块、左上相邻块、第一编码块的右下相邻块、所述第一编码块的中心所在块是否存在且其预测模式不是帧内预测,其中,所述第一编码块为:在所述目标编码块的参考帧中的位置与所述目标编码块在当前编码帧的位置相同的编码块;

第一加入单元(图中未示出),用于在所述第一判断单元判断出某一个相邻块存在且其预测模式不是帧内预测,将该块的运动矢量及该块的运动矢量缩放后的运动矢量加入到所述预测候选集合中;

第二加入单元(图中未示出),用于将零向量加入到所述预测候选集合中。

具体的,所述构建子模块5011还可以包括:

第三加入单元(图中未示出),用于当所述目标编码块所在编码单元存在父编码单元和/或子编码单元时,将所述父编码单元的运动矢量和/或子编码单元的运动矢量加入到所述预测候选集合中。

具体的,所述第一确定子模块5012,可以包括:

第一确定单元(图中未示出),用于当所述预测候选集合中存在第一子集合时,按照第一优先级顺序,从所述第一子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第一子集合由所述左下相邻块对应的第一运动矢量和/或所述左相邻块对应的第二运动矢量确定,所述第一优先级顺序为:所述第一运动矢量的优先级大于所述第二运动矢量的优先级;

第二确定单元(图中未示出),用于当所述预测候选集合中存在第二子集合时,按照第二优先级顺序,从所述第二子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第二子集合由所述右上相邻块对应的第三运动矢量和/或所述上相邻块对应的第四运动矢量和/或所述左上相邻块对应的第五运动矢量确定,所述第二优先级顺序为:所述第三运动矢量的优先级大于所述第四运动矢量的优先级、所述第四运动矢量的优先级大于所述第五运动矢量的优先级;

第二判断单元(图中未示出),用于判断所述中间运动矢量的数量是否等于2;

第三确定单元(图中未示出),用于在所述第二判断单元判断出所述中间运动矢量的数量不等于2的情况下,当所述预测候选集合中存在第三子集合时,按照第三优先级顺序,从所述第三子集合中选择一个运动矢量确定为中间运动矢量,其中,所述第三子集合由所述第一编码块的右下相邻块对应的第六运动矢量和/或所述第一编码块的中心所在块对应的第七运动矢量确定,所述第三优先级顺序为:所述第六运动矢量的优先级大于所述第七运动矢量的优先级;

第三判断单元(图中未示出),用于判断所述中间运动矢量的数量是否等于2;

第四确定单元(图中未示出),用于在所述第三判断单元判断出所述中间运动矢量的数量不等于2的情况下,将所述预测候选集合中的零向量确定为中间运动矢量。

具体的,所述第三确定子模块5014,可以包括:

第四判断单元(图中未示出),用于判断所述目标编码块所在编码单元是否存在父编码单元和/或子编码单元;

第五确定单元(图中未示出),用于在所述第四判断单元判断出所述目标编码块所在编码单元存在父编码单元和/或子编码单元时,确定所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价,并将所述备选运动矢量、所述父编码单元的运动矢量和/或子编码单元的运动矢量对应的编码代价最小的运动矢量确定为初始运动矢量;

第六确定单元(图中未示出),用于在所述第四判断单元判断出所述目标编码块所在编码单元不存在父编码单元和/或子编码单元时,将所述备选运动矢量确定为初始运动矢量。

具体的,所述调整模块502,可以包括:

设置子模块(图中未示出),用于将起始运动矢量设置为预设顺序中第一个运动矢量,其中,所述预设顺序为:左下相邻块的运动矢量、左下相邻块的运动矢量经缩放后的运动矢量、左相邻块的运动矢量、左相邻块的运动矢量经缩放后的运动矢量、右上相邻块的运动矢量、右上相邻块的运动矢量经缩放后的运动矢量、上相邻块的运动矢量、上相邻块的运动矢量经缩放后的运动矢量、左上相邻块的运动矢量、左上相邻块经缩放后的运动矢量、第一编码块的右下相邻块的运动矢量、第一编码块的右下相邻块的运动矢量经缩放后的运动矢量、第一编码块的中心所在块的运动矢量、第一编码块的中心所在块的运动矢量经缩放后的运动矢量;

第三判断子模块(图中未示出),用于判断所述起始运动矢量是否为零向量;

计算子模块(图中未示出),用于在所述第三判断子模块判断出所述起始运动矢量不是零向量时,计算所述起始运动矢量和所述初始运动矢量的差值的绝对值,更新所述起始运动矢量为所述预设顺序中下一个运动矢量,并触发所述第三判断子模块;

调整子模块(图中未示出),用于在所述第三判断子模块判断出所述起始运动矢量是零向量时,统计计算得到的差值的绝对值的个数k,判断k是否不小于第三预设阈值;若不小于,根据计算得到的差值的绝对值,调整所述目标编码块的初始搜索范围,得到目标搜索范围。

可见,应用本实施例提供的运动估计装置,首先调整目标编码块的搜索范围,在调整后的搜索范围内,利用搜索模板进行运动搜索,获得第一最佳运动矢量,根据第一最佳运动矢量对应的编码代价判断是否可以结束针对目标编码块的运动估计,以提前终止对目标编码块的运动搜索,这种方式可以避免搜索过多的冗余点,减少计算量,提高编码速度。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1