HM代码阅读4:运动估计函数Void TEncSearch::xMotionEstimation()和全搜索Void TEncSearch::xPatternSearch()

本文主要是介绍HM代码阅读4:运动估计函数Void TEncSearch::xMotionEstimation()和全搜索Void TEncSearch::xPatternSearch(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HEVC中的运动估计采用的方法:
1、小范围内全搜索(主要用于B帧,第二次遍历计算出较小cost的MV)
2、大范围内菱形搜索(TZSearch)

全搜索
1、设置好搜索范围,获取当前PU在参考帧重建帧中的位置,获取重建帧的步幅(包含padding)
2、遍历完范围内的所有整数点,逐像素作差得到SAD,获取编码运动矢量的bit数,加在一起形成cost,如果当前SAD比之前最好的SAD小,那么将当前运动矢量x,y赋给rcMV,cost赋给ruiCost

/*
基于当前最优MVP做运动估计:
Input:
1、当前CU
2、当前原始图像的Yuv数据(对应CU大小)
3、当前PU的索引
4、参考图像列表
5、当前参考帧最优MVP(cMvPred[iRefList][iRefIdxTemp])
6、参考帧索引
7、cMvTemp[iRefList][iRefIdxTemp]的引用,对当前参考帧最优MV会存在这里
8、编码所需bit数、RDcost
9、是不是双向运动估计
Output:
1、针对当前帧最优MV
2、针对当前数据编码的bit数以及RDcost大小
*/
Void TEncSearch::xMotionEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, RefPicList eRefPicList, TComMv* pcMvPred, Int iRefIdxPred, TComMv& rcMv, UInt& ruiBits, Distortion& ruiCost, Bool bBi  )
{UInt          uiPartAddr; //当前PU的起始4x4块的位置Int           iRoiWidth;Int           iRoiHeight;TComMv        cMvHalf, cMvQter; //亚精度、1/4精度TComMv        cMvSrchRngLT; // MV搜索范围TComMv        cMvSrchRngRB;TComYuv*      pcYuv = pcYuvOrg;assert(eRefPicList < MAX_NUM_REF_LIST_ADAPT_SR && iRefIdxPred<Int(MAX_IDX_ADAPT_SR));m_iSearchRange = m_aaiAdaptSR[eRefPicList][iRefIdxPred]; //cfg文件中会写明Search RangeInt           iSrchRng      = ( bBi ? m_bipredSearchRange : m_iSearchRange ); //双向搜索范围:默认为4TComPattern   tmpPattern;TComPattern*  pcPatternKey  = &tmpPattern;Double        fWeight       = 1.0;pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );if ( bBi ) // Bipredictive ME,用于第二次对cost较大的参考图像列表再搜索获取最优MV{TComYuv*  pcYuvOther = &m_acYuvPred[1-(Int)eRefPicList];pcYuv                = &m_cYuvPredTemp;pcYuvOrg->copyPartToPartYuv( pcYuv, uiPartAddr, iRoiWidth, iRoiHeight ); //先把原始像素值拷贝到当前pcYuv中pcYuv->removeHighFreq( pcYuvOther, uiPartAddr, iRoiWidth, iRoiHeight, pcCU->getSlice()->getSPS()->getBitDepths()

这篇关于HM代码阅读4:运动估计函数Void TEncSearch::xMotionEstimation()和全搜索Void TEncSearch::xPatternSearch()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887118

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d