1 本文词汇约定

  宏块:H264编码基本单元,16x16像素(或采样)构成

  块:   由8x8像素(或采样)构成的单位

  子块:   由4x4像素(或采样)构成的单位

  

2 帧内亮度预测模式

  H264规范中,宏块有4种帧内亮度预测模式,模式编号为0,1,2,3;块与子块分别有9种帧内亮度预测模式,模式编号从0至9,即0,1,2,.......,8。具体不细说了,可查H264标准。下文以子块为例说明其亮度预测模式如何编码进码流中的。

  

3 子块亮度预测模式编码的句法元素

  prev_intra4x4_pred_mode_flag:是否使用该子块的上左子块亮度预测模式编号的最小值,在计算出该子块的最佳亮度预测模式后,若基编号与该子块上左子块亮度预测模式编号的最小值相等,prev_intra4x4_pred_mode_flag为1,否则为0。

  rem_intra4x4_pred_mode:prev_intra4x4_pred_mode_flag为0时,指示计算出的该子块的最佳亮度预测模式编号或该子块的最佳亮度预测模式编号减1。

4 子块亮度预测模式编码的句法元素赋值的伪代码过程

  

  for( luma4x4BlkIdx=; luma4x4BlkIdx<; luma4x4BlkIdx++ ) {

    MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx] = (如果左边子块或上边子块不可用,比如跨片片界或为非帧内编码模式) ?  : Min(MinModeOfLeftSubBlock,MinModeOfUpSubBlock);
    BestMode[luma4x4BlkIdx] = 计算子块的最佳亮度预测模式();
    if(BestMode[luma4x4BlkIdx] == MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx]) 
    {
      prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] = ;
    }  
    else
    {
      prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] = ;
    }     if(!prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ])
    {
      if(BestMode[luma4x4BlkIdx] < MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx])
      {
        rem_intra4x4_pred_mode[ luma4x4BlkIdx ] = BestMode[luma4x4BlkIdx];
      }
      else
      {
        rem_intra4x4_pred_mode[ luma4x4BlkIdx ] = BestMode[luma4x4BlkIdx] - ;//标注4
      }
    }
  }

5 为什么要计算MinModeBetwennLeftAndUpSubBlock

  每个4×4 块帧内亮度预测模式编号必须编码传给解码器以便解码。该信息可能需大量比特表示,但邻
  的帧内模式通常是相关的。例如,A、B 、E 分别为左边、上边和当前块,如果 A 和B 预测模式
  式1 ,E 的最佳预测模式很可能也为模式 1 。所以通常利用这种关联性编码 4×4 帧内亮度预测模式编号。

6 体会H264之博大精深  

  帧内亮度预测模式有9种,其编号为0,1,......,8,其范围上界(8)用2进制数表示需要4位,通过标注4可将rem_intra4x4_pred_mode的值的范围的上界限定为7,从而3位即可表达。少了一位,H264就是通过这样的巧妙设计达到提升编码效率的目的的。

  

  

H264帧内预测模式编号的编码过程的更多相关文章

  1. x264 亮度信号8x8帧内预测模式

    1 该模式的8个预测方向与4x4帧内预测模式一样. 2 该模式只有High profile及更高的Profile的才有可能使用,Baseline.Main Profile.Preset为ultrafa ...

  2. [原]H264帧内预测

    帧内预测模块大小 说明 4x4(亮度) 预测方式9种 8x8(亮度) 预测方式9种.只有high profile才有 16x16(亮度) 预测方式4种,只依赖左,上数据. 8x8(色度) 预测方式4种 ...

  3. H.264学习笔记2——帧内预测

    帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...

  4. 【HEVC】4、HM-16.7编码一个CU(帧内部分) 3.帧内预测各种模式实现

    HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义.其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(IN ...

  5. 【HEVC】2、HM-16.7编码一个CU(帧内部分) 1.帧内预测相邻参考像素获取

    HEVC帧内预测的35中预测模式是在PU基础上定义的,实际帧内预测的过程则以TU为单位.PU以四叉树划分TU,一个PU内所有TU共享同一种预测模式.帧内预测分3个步骤: (1) 判断当前TU相邻像素点 ...

  6. H264提供了哪些帧内预测?

    H.264/AVC 提供了四种帧内预测方式:4x4 亮度块的帧内预测(Intra_4x4).16x16 亮度块的帧内预测(Intra_16x16).8x8 色度块的帧内预测(Intra_chroma) ...

  7. H.264 White Paper学习笔记(二)帧内预测

    为什么要有帧内预测?因为一般来说,对于一幅图像,相邻的两个像素的亮度和色度值之间经常是比较接近的,也就是颜色是逐渐变化的,不会一下子突变成完全不一样的颜色.而进行视频编码,目的就是利用这个相关性,来进 ...

  8. HM16.0帧内预测重要函数笔记

    Void TEncSearch::estIntraPredQT   亮度块的帧内预测入口函数 Void TComPrediction::initAdiPatternChType 获取参考样本点并滤波 ...

  9. x265,帧内预测代码分析

    void Analysis::compressIntraCU(const CUData& parentCTU, const CUGeom& cuGeom, uint32_t& ...

随机推荐

  1. 搜狗主页页面CSS学习小记

    1.边框的处理   要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言,sougou有很好的方法来 ...

  2. C Socket初探

    C Socket初探 前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下: 实现步骤: 1. Server端 #include <stdio.h> // ...

  3. C++输入一个字符串,把其中的字符按照逆序输出的两种方法

    用字符数组方法: 基本思路是,先判断字符的结束标志'\0',然后从该位置向前输出. 实现代码: #include<iostream> using namespace std; int ma ...

  4. [学习笔记] TensorFlow 入门之基本使用

    整体介绍 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  5. 使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数

    web.xml中配置: <listener>    <listener-class>com.mcm.listener.ServletContextListenerImpl< ...

  6. JAVA多线程suspend()、resume()和wait()、notify()的区别

    suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态.典型 ...

  7. linux apt-get 源配置

    linux中apt-get不能使用可能因为源不对,需要修改/etc/apt下的sources.list文件 apt-get源网上有很多,但是试了很多都不能用,以下提供一个我自己这边使用成功的源: de ...

  8. Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解

    osqueryd osqueryd(osquery daemon)是可以定期执行SQL查询和记录系统状态改变的驻守程序. osqueryd能够根据配置手机归档查询结果,并产生日志. 同时也可以使用系统 ...

  9. oracle数据库一些用户管理语句

    查询所有数据库用户 select * from dba_users 查看数据库名称 select name from v$database 查看权限 select * from user_sys_pr ...

  10. python爆破zip脚本

    最近在提高自己编程能力,拿一些实用的小工具练下.该脚本为python语言,主要涉及模块zipfile,threadings模块. 功能:暴力猜解zip解压密码 #coding: utf-8 impor ...