登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

图像、帧、片、NALU  

2011-05-30 11:56:53|  分类: H264 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

图像、帧、片、NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论:


H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:
(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了,即我们提到的“帧”通常就是指不分场的图像;
(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组;
(3)、如果不使用多个片,则一个片组只有一个片;
(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU,一个 NALU 也就是一个片。否则,一个片由三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于一个片);
(5)、以上所述的片和 NALU 的大小关系并不是抽象概念上的从属关系。从概念的从属关系上来看,NALU其实又是片的一个集合概念,例如:标准“表7-1”中 nal_unit_type 值为 5 的 NALU 包括 I 片或者 SI 片。

一幅图像根据组成它的片类型来分,可以分为标准“表7-5”中的 8 种类型。我们平常应用中所最常见到的其实是这些类型的特例。例如:我们平常所谓的“I 帧”和“IDR 帧”,其实是 primary_pic_type 值为 0 的图像,我们平常所谓的“P帧”其实是 primary_pic_type 值为 1 的图像的特例,我们平常所谓的“B帧”其实是 primary_pic_type 值为 2 的图像的特例。

一幅图像根据概念来分可以分为两种:IDR 图像和非 IDR 图像。一幅图像是否是 IDR 图像是由组成该图像的 NALU 决定的,如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的 NALU,则该图像为 IDR 图像,否则为非 IDR 图像。这里也有几点值得说明:
(1)、nal_unit_type 值为 5 的 NALU 只会出现在 IDR 图像中,而 IDR 图像中的所有 NALU 都是nal_unit_type 值为 5 的 NALU;
(2)、我们以组成一幅图像的片的类型来区分该图像是否是 IDR 图像是错误的。例如:一幅图像中的所有片都是 I 片并不代表这幅图像就是 IDR 图像。因为 I 片也可以从属于 nal_unit_type 值为 1 的 NALU。只不过我们平常最常见到的形式是:所有片都是 I 片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。

一幅图像由 1~N 个片组组成,而每一个片组又由一个或若干个片组成。图像解码过程中总是按照片进行解码,然后按照片组将解码宏块重组成图像。从这种意义上讲,片实际是最大的解码单元。而一个片又包含哪些类型的宏块呢?标准“表7-10”做了最好的说明。一个 I 宏块又分为哪些类型呢?标准“表7-11”做了最好的说明。一个 P 宏块又分为哪些类型呢?标准“表7-13”做了最好的说明。一个 B 宏块又分为哪些类型呢?标准“表7-14”做了最好的说明。一个 P 宏块的亚宏块又分为哪些类型呢?标准“表7-17”做了最好的说明。一个 B 宏块的亚宏块又分为哪些类型呢?标准“表7-18”做了最好的说明。

=======================================

 

图像、帧、片、NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论:
     H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:
(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了,即我们提到的“帧”通常就是指不分场的图像;
(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组;
(3)、如果不使用多个片,则一个片组只有一个片;
(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU,一个 NALU 也就是一个片。否则,一个片由三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于一个片);
(5)、以上所述的片和 NALU 的大小关系并不是抽象概念上的从属关系。从概念的从属关系上来看,NALU其实又是片的一个集合概念,例如:标准“表7-1”中 nal_unit_type 值为 5 的 NALU 包括 I 片或者 SI 片。
    一幅图像根据组成它的片类型来分,可以分为标准“表7-5”中的 8 种类型。我们平常应用中所最常见到的其实是这些类型的特例。例如:我们平常所谓的“I 帧”和“IDR 帧”,其实是 primary_pic_type 值为 0 的图像,我们平常所谓的“P帧”其实是 primary_pic_type 值为 1 的图像的特例,我们平常所谓的“B帧”其实是 primary_pic_type 值为 2 的图像的特例。
    一幅图像根据概念来分可以分为两种:IDR 图像和非 IDR 图像。一幅图像是否是 IDR 图像是由组成该图像的 NALU 决定的,如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的 NALU,则该图像为 IDR 图像,否则为非 IDR 图像。这里也有几点值得说明:
(1)、nal_unit_type 值为 5 的 NALU 只会出现在 IDR 图像中,而 IDR 图像中的所有 NALU 都是nal_unit_type 值为 5 的 NALU;
(2)、我们以组成一幅图像的片的类型来区分该图像是否是 IDR 图像是错误的。例如:一幅图像中的所有片都是 I 片并不代表这幅图像就是 IDR 图像。因为 I 片也可以从属于 nal_unit_type 值为 1 的 NALU。只不过我们平常最常见到的形式是:所有片都是 I 片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。
一幅图像由 1~N 个片组组成,而每一个片组又由一个或若干个片组成。图像解码过程中总是按照片进行解码,然后按照片组将解码宏块重组成图像。从这种意义上讲,片实际是最大的解码单元。而一个片又包含哪些类型的宏块呢?标准“表7-10”做了最好的说明。一个 I 宏块又分为哪些类型呢?标准“表7-11”做了最好的说明。一个 P 宏块又分为哪些类型呢?标准“表7-13”做了最好的说明。一个 B 宏块又分为哪些类型呢?标准“表7-14”做了最好的说明。一个 P 宏块的亚宏块又分为哪些类型呢?标准“表7-17”做了最好的说明。一个 B 宏块的亚宏块又分为哪些类型呢?标准“表7-18”做了最好的说明。
——天之骄子·firstime——
     2007年11月17日
=================================================================
10#
可是论文里经常用到帧,在这里是什么概念?
=================================================================
11#
楼上还是没看明白哈。例如一帧 CIF 图像尺寸为 352*288;不分场时可以叫图像,也可以叫帧,其大小为 352*288;分场后其中一半也可以叫图像,也可以叫顶场,其大小为 352*144,另一半也可以叫图像,也可以叫低场,其大小为 352*144。各个论文中提到的帧一般都是指不分场时候的图像。
——(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了
=================================================================
34#
有点不清楚的地方,前面有说到:“我们平常所谓的“I 帧”和“IDR 帧”,其实是 primary_pic_type 值为 0 的图像,”而后面又有说到:“如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的 NALU,则该图像为 IDR 图像,否则为非 IDR 图像。”一个“IDR图像”一个“IDR帧”,这有什么不一样吗?如果是一样的,那么primary_pic_type 与nal_unit_type 之间又有什么关系呢?
=================================================================
35#
根据 200503 版标准表 7-5,primary_pic_type = 0 的图像中的所有片都是 I 片。而如果一个 NALU 的 nal_unit_type = 5,则它一定是 I 片。IDR 图像中所有NALU 的 nal_unit_type 都等于 5

  评论这张
 
阅读(1157)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018