当前位置:文档之家› 帧内预测

帧内预测

HEVC学习1—总框架与程序结构 要开始学术了。 我的研究方向是视频编解码,主要研究领域为HEVC,目前新手小白一枚。 这里通过博客的方式记录一下自己的学习过程,顺便也给与我一样的人一个参考。

一、HEVC简介 要对HEVC的总体架构有所了解(百度百科什么的其实一大堆),建议参考这两篇文章,具体可以谷歌学术,找到pdf下载 1.Overview of the High Efficiency Video Coding (HEVC) Standard 这篇文章便是传说中的 HEVC overview 官方文档啦 想看中文翻译是怎么样的,可以看看这篇文章《解读下一代视频压缩标准HEVC (H.265)》 2. High Performance, Low Complexity Video Coding and the Emerging HEVC Standard 这篇文章介绍了HEVC的发展历史,以及HEVC中采用的一些重要技术。 其他的文章还包括有,我现在也在慢慢地看。 列表如下: 3. A Hybrid Video Coder Based on Extended Macroblock Sizes, Improved Interpolation, and Flexible Motion Representation 4. Video Coding Using a Simplified Block Structure and Advanced Coding Techniques 5. Video Compression Using Nested Quadtree Structures, Leaf Merging, and Improved Techniques for Motion Representation and Entropy Coding

6. Improved Video Compression Efficiency Through Flexible Unit Representation and Corresponding Extension of Coding Tools 7. Comparison of the Coding Efficiency of Video Coding Standards—Including High Efficiency Video Coding (HEVC) 8. HEVC Complexity and Implementation Analysis 9. Block Partitioning Structure in the HEVC Standard 10. Quadtree Based Nonsquare Block Structure for Inter Frame Coding in High Efficiency Video Coding 11. Block Merging for Quadtree-Based Partitioning in HEVC

12. Decoder-Side Motion Vector Derivation for Block-Based Video Coding 13. HEVC Deblocking Filter 14. Sample Adaptive Offset in the HEVC Standard 15. Transform Coefficient Coding in HEVC 16. Comparative Rate-Distortion-Complexity Analysis of HEVC and AVC Video Codecs 17. High Throughput CABAC Entropy Coding in HEVC 18. Intra Coding of the HEVC Standard 19. Adaptive Global Motion Temporal Filtering for High Efficiency Video Coding 20. Parallel Scalability and Efficiency of HEVC Parallelization Approaches 21. HEVC Lossless Coding and Improvements 22. Rate-Distortion Optimized Reference Picture Management for High Efficiency Video Coding 23. Performance and Computational Complexity Assessment of High-Efficiency Video Encoders

HEVC的官方详细文档见这里:phenix.it-sudparis.eu/jct/doc_end_user/current_document.php?id=7243

二、HM HEVC的官方测试程序为HM。HM的代码见:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/ 大家可以下载一个svn,Windows下的请搜索 TortoiseSVN,使用方法可以参考这篇博客 TortoiseSVN使用方法:http://www.cnblogs.com/blsong/archive/2010/09/02/1816124.html 关于HM的使用和参数配置参考了这篇文章: http://blog.csdn.net/hevc_cjl/article/details/8169182 这位博主很不错,分享了大量的代码注释,并讲解了一些重要的概念和代码。 测试中主要使用的工程为 TAppEncoder 和 TAppDecoder,前者为编码器,后者为解码器。 编码器的输入参数为-c "cfg/encoder_randomaccess_main.cfg" -c "cfg/per-sequence/BQSquare_416x240_60.cfg" 加引号的目的是使得引号内的内容作为一个参数传递(避免路径中的空格带来的影响) 如图所示: 建议release版本编译运行,除非是自己要调试错误采用debug,毕竟编码过程比较慢。 运行的结果一般是 str.bin 和 rec.yuv两个文件, 会放在指定的工作目录中(上图中的“工作目录参数”指定的目录下) 其中str.bin就是编码的结果,即HEVC格式的视频文件, 而 rec.yuv 是编码中重建的视频(和原始输入yuv文件相比会有些不同)。

TAppDecoder是解码器的工程, 运行这个工程的参数为 -b str.bin -o rec2.yuv 其中 -b 参数指定了 HEVC编码文件,而 -o 指定了解码器的输出。 这里输出设置为 rec2.yuv 主要是为了和编码器编码重建的 rec.yuv 对比开来。 这两个文件在代码无误的情况下应该内容完全一致,否则说明你改动的代码出现了问题, 导致了解码出现了错误。

如何对比两个yuv文件是否一致,推荐使用 YUVplayer,自己百度可以下载到, 界面比较小巧,也比较易于使用。这里就不做详细介绍了。

明白了这些之后,再开始新的学习吧,一步一步学习新的算法概念, 并且尝试将自己想的算法添加到代码中,或者替换部分代码把。 HEVC学习(一) —— HM的使用 从今天开始,会陆续发表HEVC学习过程中的一些总结,主要目的是与大家一起交流学习,由于水平有限,恳请大家能够不吝赐教。 由于这是第一次写博客,而且学习也是个循序渐进的过程,第一篇文章就简单介绍下如何使用HEVC的官方标准测试模型HM吧。其实如果之前学习过H.264的话,肯定也是用过JM的,HM的使用方法与JM基本上是相同的,只是配置文件的内容有所不同罢了。好了,不多说,马上进入正题。

首先自然是先把这个测试模型下载下来,链接地址如下:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/,这个网址下有各个版本的HM,到目前为止,最新版本是HM 9.0,可以根据自己的实际需求进行选择。这里需要注意的是,下载时需要使用SVN,如windows下的TortoiseSVN 。

其次,最好附带下载HM的reference software manual即参考软件手册,这个手册的主要内容包括HM的下载地址和使用方法,更重要的是,里面包含了对配置文件各个参数的详细解释,可以说是使用HM的必备手册。

最后,就是真正地编译HM工程了。从运行环境来讲,既可以在linux系统下使用makefile对HM进行编译,也可以在windows系统下使用IDE如VS对HM进行编译。我个人是用VS2008作为开发环境,因此,这里也只介绍使用VS编译HM。关于linux下如何进行,请参看前面提到的参看软件手册吧。

打开下载下来的HM文件夹,工程存放在build目录下,工程名为HM_VC9(对VS2008而言)。右击“Solution 'HM_VC9'(7 projects)”->“build solution”。正常的话,等待片刻所有工程都能得到正确的编译,并最终在HM文件夹下生成bin目录,在目录xxx\bin\vc9\Win32\Debug下,最终会生成两个可执行文件,TAppEncoder.exe和TAppDecoder.exe,分别问编码和解码的可执行文件,到了这一步,表明你之前的步骤都是正确的。接下来就能进入到编解码器的使用当中来了。

先说编码器的使用:右击“TAppEncoder”->“Set as Startup Project”, 接着,再次右击“TAppEncoder”->“Properties”->“Configuration Properties”->“Debugging”,在弹出的右窗口中有这么两行需要关注:“Command Arguments“和“Working Directory”。前者用于输入运行时的命令参数,后者用于指定工程的工作目录。先说工作目录,将其设置为xxx\bin\vc9\Win32\Debug,即上一步中编译生成的可执行文件的绝对路径。接下来,为了方便起见,我们可以把需要使用到的配置文件、yuv测试序列复制到该目录下。与JM有所

相关主题