首页 > 其他分享 >HM变换系数修改

HM变换系数修改

时间:2024-01-20 15:57:16浏览次数:20  
标签:&& ctu 系数 string 变换 uiAbsSum pCtu HM pcCoeff

一. 边预测边修改:

(1)在 TEncCu::compressCtu中提取分块信息:

 // analysis of CU
  DEBUG_STRING_NEW(sDebug)

  xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 DEBUG_STRING_PASS_INTO(sDebug) );
  /*
      string ctu = to_string(pCtu->getCtuRsAddr());
      ofstream Tufile(ctu.c_str(), ios::in | ios::app);
      TComSlice* const pcSlice = pCtu->getSlice();
      const TComSPS& sps = *(pcSlice->getSPS());
      int iWidthInPart = sps.getMaxCUWidth() >> 2;

      for (int i = 0; i < pCtu->getTotalNumPart(); i++)
      {
          if (pCtu->getTransformSkip(i, COMPONENT_Y) == 0 && pCtu->getTransformIdx(g_auiRasterToZscan[i]) + pCtu->getDepth(g_auiRasterToZscan[i])==4)
              Tufile <<g_auiRasterToZscan[i] << " ";
      }
      Tufile.close();
      */
  DEBUG_STRING_OUTPUT(std::cout, sDebug)

  (2)在TEncSearch::xIntraCodingTUBlock中修改变换系数:

#if ADAPTIVE_QP_SELECTION
    pcArlCoeff,
#endif
    uiAbsSum, cQP
    );
  
  if (pcCoeff[0]!=0 && compID == 0  && uiLog2TrSize == 2) {
      pcCoeff[0] = pcCoeff[0] + 1;
      pcCoeff[2] = pcCoeff[2] - 1;
      pcCoeff[3] = pcCoeff[3] + 1;
      pcCoeff[8] = pcCoeff[8] - 1;
      pcCoeff[10] = pcCoeff[10] + 1;
      pcCoeff[11] = pcCoeff[11] - 1;
      pcCoeff[12] = pcCoeff[12] + 1;
      pcCoeff[14] = pcCoeff[14] - 1;
      pcCoeff[15] = pcCoeff[15] + 1;
      uiAbsSum = 0;
      for (int i = 0; i < 16; i++)uiAbsSum = abs(pcCoeff[i]) + uiAbsSum;
  }
  //--- inverse transform ---

#if DEBUG_STRING
  if ( (uiAbsSum > 0) || (DebugOptionList::DebugString_InvTran.getInt()&debugPredModeMask) )

(3)在TEncSearch::xIntraCodingTUBlock中修改cost:

ruiDist += m_pcRdCost->getDistPart( bitDepth, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight, compID );
  
  if (compID == 0 && uiLog2TrSize == 2) {
      fstream f;
      string ctu = to_string(pcCU->getCtuRsAddr());
      f.open(ctu.c_str(), ios::in);
      int x;
      while (f >> x) {
          if (x== uiZOrder ) {
              ruiDist = -999999; break;
          }
      }
      f.close();
  }

二. 熵编码之前修改变换系数

修改位置:TEncSbac::codeCoeffNxN

 if( uiWidth > sps.getMaxTrSize() )
  {
    std::cerr << "ERROR: codeCoeffNxN was passed a TU with dimensions larger than the maximum allowed size" << std::endl;
    assert(false);
    exit(1);
  }
#if ENC_DEC_TRACE
  if (pcCoef[0] != 0 && pcCoef[0] != -1 && compID == 0 && g_bJustDoIt && rTu.GetTransformDepthTotal() == 4) {
      pcCoef[0] = pcCoef[0] + 1;
      pcCoef[2] = pcCoef[2] - 1;
      pcCoef[3] = pcCoef[3] + 1;
      pcCoef[8] = pcCoef[8] - 1;
      pcCoef[10] = pcCoef[10] + 1;
      pcCoef[11] = pcCoef[11] - 1;
      pcCoef[12] = pcCoef[12] + 1;
      pcCoef[14] = pcCoef[14] - 1;
      pcCoef[15] = pcCoef[15] + 1;
  }
#endif
  // compute number of significant coefficients
  UInt uiNumSig = TEncEntropy::countNonZeroCoeffs(pcCoef, uiWidth * uiHeight);

 

标签:&&,ctu,系数,string,变换,uiAbsSum,pCtu,HM,pcCoeff
From: https://www.cnblogs.com/jhzj/p/17976538

相关文章

  • GYM102596L Yosupo's Algorithm【分治,支配对】
    给定平面上\(2n\)个点,每个点有坐标\((x_i,y_i)\),权值\(w_i\)及颜色\(c_i\)。所有点满足:若\(c_i=0\),则\(x_i<0\);若\(c_i=1\),则\(x_i>0\)。\(q\)次查询,每次给定\(L_i,R_i\),你需要选择两个点\(i,j\)满足如下条件:\(c_i=0,c_j=1\)。\(x_i<L,x_j>R\)或\(x_......
  • 【THM】Linux权限提升
    目录1、简介2、什么是权限提升“权限升级”是什么意思?为什么它如此重要?3、枚举hostname主机名Uname-a系统信息/proc/version进程、版本信息/etc/issueps命令env环境变量sudo-lls/etc/passwdhistoryifconfignetstatfind4、自动枚举工具5、权限提升:内核漏洞6、权限提升:Sudo......
  • OpenCV仿射变换+投射变换+单应性矩阵
    OpenCV仿射变换+投射变换+单应性矩阵本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~estimateRigidTransform():计算多个二维......
  • 神经网络优化篇:详解Adam 优化算法(Adam optimization algorithm)
    Adam优化算法在深度学习的历史上,包括许多知名研究者在内,提出了优化算法,并很好地解决了一些问题,但随后这些优化算法被指出并不能一般化,并不适用于多种神经网络,时间久了,深度学习圈子里的人开始多少有些质疑全新的优化算法,很多人都觉得动量(Momentum)梯度下降法很好用,很难再想出更好......
  • 《数据篇》HashMap
    简介参考链接:https://www.cnblogs.com/scxgy/p/15398631.htmlHashMap是一个散列表,它存储的内容是键值对(key-value)映射。它是无序的,不会记录插入的顺序。(散列表,英文hashtable)HashMap实现了Map接口,根据键的HashCode值存储数据,最多允许一条记录的键为null,不支持线程同步。HashMa......
  • 【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(下)
    承接上文在阅读了上篇文章《【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)》之后,相信您对HashMap的基本原理和基础结构已经有了初步的认识。接下来,我们将进一步深入探索HashMap的源码,揭示其深层次的技术细节。通过这次解析,您将更深入地理解HashMap的......
  • LinkedHashMao & LinkedHashSet源码阅读
    目录简介模型代码分析成员变量方法补充-LinkedHashSet总结参考链接本人的源码阅读主要聚焦于类的使用场景,一般只在java层面进行分析,没有深入到一些native方法的实现。并且由于知识储备不完整,很可能出现疏漏甚至是谬误,欢迎指出共同学习本文基于corretto-17.0.9源码,参考本文时......
  • HanLP — HMM隐马尔可夫模型 -- 维特比(Viterbi)算法 --完整示例代码
    完成代码importpicklefromtqdmimporttqdmimportnumpyasnpimportosdefmake_label(text_str):"""从单词到label的转换,如:今天---->BE麻辣肥牛:--->BMME的--->S"""text_len=len(text_str)iftext_len==1:......
  • HashMap & HashSet源码阅读
    目录简介模型代码分析成员变量方法参考链接本人的源码阅读主要聚焦于类的使用场景,一般只在java层面进行分析,没有深入到一些native方法的实现。并且由于知识储备不完整,很可能出现疏漏甚至是谬误,欢迎指出共同学习本文基于corretto-17.0.9源码,参考本文时请打开相应的源码对照,否则......
  • 【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)
    知识盲点概念介绍HashMap是基于Map接口构建的数据结构,它以键值对的形式存储元素,允许键和值都为null。由于键的唯一性,HashMap中只能有一个键为null。HashMap的特点是元素的无序性和不重复性。注意,HashMap并不是线程安全的。在多线程环境下,如果不进行适当的同步处理,可能会导致数据不......