位图信息头BITMAPINFOHEADER结构与GOP

BITMAPINFOHEADER结构体中包含了设备无关位图关于颜色维度和色彩格式的信息, 其定义和描述如下:
机器视觉:位图信患头BITMAPINFOHEADER结构
重要成员参数解释:
BiBitCount指定存储每个像素使用的二进制數据位数,间接确定图像中可能存在的最 大颜色數目•可取:1、4、8* 16, 24、32,其含义见下文讲解.
BiSizelmage指定图像的大小(以字节为单位)• biSizelmage=biWidth x biHeight.其中》 biWidtlf是图像每行占用的字节数,与实际宽度biWidth不同,biWidth,必须是4的整數 倍,即大于或等于biWidth,最接近4的整倍数.例如,biWidth=400,则biWidth’-40 0 如果 biWidth=401,则 biWidth’=404。如果 biCompression 为 BIRGB该項可能为零.
biClrUsed成员指定位图图像中实际使用的颜色数目.如果biClrUsed成员被设里为零, 则图像中实际使用的颜色數目是和biBitCount成员中规定的值相同的最大數目,BITMAPINFOHEADER结构的biBitCount成员可用于确定位图图像中每个像素所占 的数据长度(单位是位)和图像中所包含的最多颜色数目.这个成员的取值可以有6种。分别对应BMP图像允许的6种颜色樸式.
BMP文件的色深(即存储每个像素使用的位数)有(单色)、4 (16色)、8 (256色)、(64K色,髙彩色)、24 (丨6M色,真彩色〉及32 (4096M色,增强型真彩色)6种。它 们与biBitCount之间的对应关系如下:
WBitCmmt=l,位图图像为单色,并且成员bmiColor索引表包含两个条目,位图图像数组中的每一个数据位代表一个像素。如果这个数据位是0,则此像素在显示时使用 bmiColors索引表中的第一种颜色:如果这个数据位是1.则此像素在显示时使用bmiColors索引表中的第二种颜色,biBitCount=4,位图图像最多包含16种颜色,并且成员bmiColors索引表中至多包含16个条目。此时位图图像数据区中的每一个像素条目长度是4位(0.5字节)„例如,如果位图图像数据区的第一个字节数值是OxlF,则这一字节表示2个像素的颜色,第一个像素是在索引表中的第二种颜色,第二个像素是在索引表中的第16种颜色。
biBitCount=8,位图图像最多包含256种颜色,并且成员bmiColors索引表中包含至 多256种颜色。在这种情况下,位图图像数据区中的每个字节代表一个像素的图像数据。
biBitCount=16,位图图像最多包含2* 16 * * * * * * *种颜色.并且BITMAPINFOHEADER的 biCompression成员取值必须为BI_BITFIELDS。此时bmiColors成员包含3个DWORD类型 的颜色掩码,分别用以指定每个€素的红、绿、蓝的颜色成分。
biBitCount=24,位图图像最多包含224 * * * * * * *种颜色,并且成员bmiColors索引表为空(NULL)。在位图图像数据区中的每个三比特组中的数据表示某个像素中红、绿、蓝颜色成 分的相对强度。
biBitCount=32 ,位图图像最多包含 232 种颜色,BITMAPINFOHEADER 的biCompression成员必须是BI_BITFIELDS, bmiColors成员包含3个DWORD类型的颜色掩码用以指定每个像素颜色中的红色、绿色和蓝色成分。

 

 

 

转载:https://www.sogou.com/link?url=DOb0bgH2eKg7Sf-koBXrEidQRoztLvNXxrxUOV-D89tiyQJFkpmQzYVhr0ewKjBDOHdl-hdEkGA.

 

 

GOP(Group of Pictures)策略影响编码质量:所谓GOP,意思是画面组,一个GOP就是一组连续的画面。MPEG编码将画面(即帧)分为I、P、B三种,I是内部编码帧,P是前向预测帧,B是双向内插帧。简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。没有I帧,P帧和B帧就无法解码,这就是MPEG格式难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。

 

  MPEG-2 帧结构

 

  MPEG-2压缩的帧结构有两个参数,一个是GOP(Group Of Picture)图像组的长度,一般可按编码方式从1-15;另一个是I帧和P帧之间B帧的数量,一般是1-2个。前者在理论上记录为N,即多少帧里面出现一次I帧;后者描述为多少帧里出现一次P帧,记录为M。

 

在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。

I表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

P表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

如果你明白P的意思,那么B就比较好理解了。

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些,有兴趣可以看看我上面提供的资料),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。

 

 

I帧:帧内编码帧 :

尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像;
P帧:前向预测编码帧: 
通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;
 B帧:双向预测内插编码帧
 既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;
一般地,I帧压缩效率最低,P帧较高,B帧最高。
 
I、p、B 帧编码的基本流程
2007-12-18 20:34

I 帧编码的基本流程为
[15]

(1) 进行帧内预测,决定所采用的帧内预测模式。
(2) 像素值减去预测值,得到残差。
(3) 对残差进行变换和量化。
(4) 变长编码和算术编码。
(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。


P 帧和 B 帧编码的基本流程为:
(1) 进行运动估计,计算采用帧间编码模式的率失真函数(节)值。P 帧
只参考前面的帧,B 帧可参考后面的帧。
*(2) 进行帧内预测,选取率失真函数值最小的帧内模式与帧间模式比较,确定
采用哪种编码模式。
(3) 计算实际值和预测值的差值。
(4) 对残差进行变换和量化。
(5) 熵编码,如果是帧间编码模式,编码运动矢量

MPEG压缩中的 I、B、P帧(转)

首先,MPEG-1压缩的基本思想:帧内压缩和帧间压缩。
其次,时间相关性的统计分析:统计的结果表明,在间隔1~2帧的图像中,各像素只有10%以下的点,其亮度差值变化超过2%,而色度差值的变化只有1%以下。

采用的压缩方法: 分组:把几帧图像分为一组(GOP),为防止运动变化,帧数不宜取多。
1.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
2.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
3.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

I帧:帧内编码帧
I帧特点:
1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;
3.I帧描述了图像背景和运动主体的详情;
4.I帧不需要参考其他画面而生成;
5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7.I帧不需要考虑运动矢量;
8.I帧所占数据的信息量比较大。

P帧:前向预测编码帧。
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
P帧特点:
1.P帧是I帧后面相隔1~2帧的编码帧;
2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
6.由于P帧是参考帧,它可能造成解码错误的扩散;
7.由于是差值传送,P帧的压缩比较高。

B帧:双向预测内插编码帧。
B帧的预测与重构
B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。
B帧特点
1.B帧是由前面的I或P帧和后面的P帧来进行预测的;
2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
3.B帧是双向预测编码帧;
4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
5.B帧不是参考帧,不会造成解码错误的扩散。

注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I帧,是随机的,一但确定了I帧,以后的各帧就严格按规定顺序排列。

 

 

 

基本概念:

I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧 又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来

DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

IPB帧的不同:

I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

两个I frame之间形成一个GOP,在x264中同时可以通过参数来设定bf的大小,即:I 和p或者两个P之间B的数量。

通过上述基本可以说明如果有B frame 存在的情况下一个GOP的最后一个frame一定是P.

DTS和PTS的不同:

DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.

例子:

下面给出一个GOP为15的例子,其解码的参照frame及其解码的顺序都在里面:

ibpdtspts

如上图:I frame 的解码不依赖于任何的其它的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame. 

 

转载:https://www.sogou.com/link?url=hedJjaC291OB0PrGj_c3jGvR24MAEJnkW79Jt021dEgm3Pojx-sH_PxgcKn6ZPTgJ38zJtoHnxM.

posted @   轻狂书生han  阅读(786)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示