我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 帧内压缩 >

关于文件高压缩率的问题

归档日期:08-31       文本归类:帧内压缩      文章编辑:爱尚语录

  多年以前,本人也曾经不懈的探索过关于文件高压缩率的问题。因为硬盘的限制,或者有时候想把一些比较大的文件压缩后邮寄。可是一番明察暗访之后发现,其实真正的高压缩率的软件并不存...

  多年以前,本人也曾经不懈的探索过关于文件高压缩率的问题。因为硬盘的限制,或者有时候想把一些比较大的文件压缩后邮寄。可是一番明察暗访之后发现,其实真正的高压缩率的软件并不存在。所谓的高压缩率往往只适用于文本文档类的文件,而且效果也不是很令人满意。所以我放弃这样的探索已多年。

  然而,最近我发现的一个压缩文件又重新点燃我的好奇心。此压缩包里包含5个avi格式的视频文件,每个文件解压后有300M左右,总共1.4G大小,可是整个压缩包的大小只为60.6M。点击属性,其压缩率竞达到4%。我知道视频类的文件本身属于压缩性文件,对其压缩往往不会有好的效果。然而4%的压缩率确实让小弟表示震惊。

  小弟想问问各位大虾,究竟这个压缩是怎么得来的呢?现在真的有这么大压缩率的压缩软件吗?希望各位介绍一二,小弟不曾对这方面失去兴趣。

  这位叔叔的回答很有深度,只是小弟关心的不是这些深奥的压缩原理。我想知道的是,在现实中有什么软件可以做到这么高的压缩率,或者说我们如何去压缩文件从而得到高的压缩率。请各位介绍一二。展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部很简单。 MPEG=运动图像专家组(Moving Picture Experts Group)的简称。90年7月到94年11月,一群老头在国际标准化组织(ISO)和国际电工委员会(IEC)联合技术委员会(JTC)经过乏味而冗长的技术讨论后制定了这一标准。ISO授权发布,所以作为全球公认的行业标准得到业内遵守。

  实际上压缩要干的事情就是去除讯息源的3重冗余度。包括:空间冗余度、时间(动态)冗余度、结构(静态)冗余度

  同一帧讯源图像中相邻像素之间的幅度值相近,即同一行上的相邻像素之间幅值相近,相邻行之间同样位置上的像素幅值相近。这被称为图像的空间冗余度;

  相邻两帧讯源图像同一位置上像素幅度值相近,体现了讯源图像的时间(动态)冗余度;

  讯源图像上每个像素所用bit数的多少表示了比特结构,多用的比特数为冗余量,体现了静态(结构)冗余度。

  这3种计算的具体实现我等一下会讲到。现在你只需要明白,它们其实并不太复杂,至少不像它们的名字那样让人望而生畏

  人眼对构成图像的不同频率成分、物体的不同运动程度等具有不同的敏感度,这是由人眼的视觉生理特性所决定的,如人的眼睛含有对亮度敏感的柱状细胞1.8亿个,含有对色彩敏感的椎状细胞0.08亿个,由于柱状细胞的数量远大于椎状细胞,所以眼睛对亮度的敏感程度要大于对色彩的敏感程度。据此,可控制图像适合于人眼的视觉特性,从而达到压缩图像数据量的目的。例如,人眼对低频信号的敏感程度大于对高频信号的敏感程度,可用较少的bit数来表示高频信号;人眼对静态物体的敏感程度大于对动态物体的敏感程度,可减少表示动态物体的bit数;人眼对亮度信号的敏感程度大于对色度信号的敏感程度,可在行、帧方向缩减表示色度信号的bit数;人眼对图像中心信息的敏感程度大于对图像边缘信息的敏感程度,可对边缘信息少分配bit数;人眼对图像水平向及垂直向信息敏感于倾斜向信息,可减少表示倾斜向信息高频成分的bit数等。在实际工作中,由于眼睛对亮度、色度敏感程度不一样,故可将其分开处理。(这一段引用2003年度北京广播学院电视工程专业教材)

  所以我们将单元分量RGB改变为YUV(或YCrCb)全局分量,在编码时强调亮度信息,可去掉一些色度信息,如4:4:4变为4:2:2,这就意味着改变了视频的比特结构。去处掉的就是所谓的静态(比特结构)冗余度了。

  引用教才部分所说的这个办法,把结构冗余信息去除(RGB-YUV),就可以实现适度的压缩。去除结构冗余度对图像质量无影响,所以可以称作无损压缩。但是无损压缩的压缩比不高,压缩能力有限。为了提高压缩比,MPEG标准采用了对图像质量有损伤的有损压缩技术,即上面说的去除时间和空间的冗余度。这些是要付出代价的----但这个帐很划算

  仔细说说上面那几个算法吧~ 可能需要一点点离散数学/高等数学基础,您才能较好理解 不过就算不是很明白也无所谓,您只需要了解这些处理所起的作用就Ok了~

  首先说运动补偿预测。这个好像是这里和ccf的会员们最熟悉的一环了,懂得人多我更要小心描述了

  什么叫运动补偿呢?将前一图像帧的相应的块(microblock)按求得的运动矢量进行位移,这就是运动补偿过程。为了压缩视频信号的时间冗余度,MPEG采用了运动补偿预测(Motion Compensated Prediction)。

  运动补偿预测假定:通过把画面以一定的提前时间(pre)平移,可以局部地预测当前画面。这里的局部意味着在画面内的每个地方位移的幅度和方向可以是不相同的。采用运动估值的结果进行运动补偿,以便尽可能地减小预测误差。运动估值包括了从视频序列中提取运动信息的一套技术,该技术与所处理图像序列的特点决定着运动补偿性能的优劣。

  所谓预测,实际上是由前一(n-1)图像帧导出当前(n)帧所考虑像素的预测值,而后由运动矢量编码传输n帧的实际像素值与其预测值之间的差值。例如,设宏块(MB)为M×N的矩形块,将(n-1)帧的宏块与n帧的宏块进行比较。这实际上是一个进行宏块匹配的运动补偿过程,即将n帧中16×16像素的宏块与n-1帧中限定搜索区(SR)内全部16×16像素的宏块进行比较。这一过程试图判断在n-1帧的那个MB到n帧中运动到了哪里。若n-1帧图像亮度信号为f [n -1 (i , j)],n帧图像亮度信号为f [ n (i , j)],其中(i , j)为n帧的M×N宏块的任意位置,并将n帧中的一个M×N的宏块看作是从n-1帧中平移而来的,而且规定同一个宏块内的所有像素都具有同样的位移值(k,l) 。这样,通过在n-1帧限定搜索区(SR)内进行搜索,总可以搜索到某一宏块,使得该宏块与n帧中要匹配的宏块的差值的绝对值达到最小,并得到运动矢量的运动数据,在n-1帧和运动数据的控制下,获得n帧的一个相应的预测值。照此办理,直到n帧的M×N宏块的任意位置(i , j)的像素全部通过n-1帧的像素预测出来。大家都知道,不紧紧是n和n-1这样相邻的两帧可以进行MCP,实际上MPEG-1和MPEG-2可以当前帧之前若干帧的某一帧为基准进行MCP。

  为了改善预测效果,可以采用分场预测。这一点在silky sama的圣经里说的很清楚了。

  需要说明的是:MPEG定义了基于帧、基于场及双场的图像预测,也定义了16×8的运动补偿。

  对逐行扫描方式,可以采用基于帧的图像预测;隔行扫描方式,也可以采用基于场的图像预测。因此,MPEG-2编码器要对每个图像先判断是帧模式压缩还是场模式压缩。在隔行扫描方式下:运动少的场景时,采用基于帧的图像预测,因为基于帧的图像两相邻行间几乎没有位移,帧内相邻行间相关性强于场内相关性,从整个帧中去除的空间冗余度比从个别场中去除得多;剧烈运动的场景时,采用基于场的图像预测,因为基于帧的相邻两行间存在1场延迟时间,相邻行像素间位移较大,帧内相邻行间相关性会有较大下降,基于场的图像两相邻行间相关性强于帧内相邻行间相关性,在1帧内,场间运动有很多高频分量(silky重点提过),从场间去除的高频分量比从整个帧中去除的多。由上述可见,选择基于帧的图像预测还是基于场的图像预测的关键是行间相关性。所以,在进行DCT之前,要作帧DCT编码或场DCT编码的选择,对16×16 的原图像或亮度进行运动补偿后所获得的差值作帧内相邻行间和场内相邻行间相关系数的计算。若帧内相邻行间相关系数大于场内相邻行间相关系数,就选择帧DCT编码,反之选场DCT编码。

  MPEG采用了Ahmed(一个巨牛的数学家)等人于70年代提出的离散余弦变换(DCT-Discrete Cosine Transform)压缩算法,降低视频信号的空间冗余度。

  DCT将运动补偿误差或原画面信息块转换成代表不同频率分量的系数集,这有两个优点:其一,信号常将其能量的大部分集中于频率域的1个小范围内,这样一来,描述不重要的分量只需要很少的比特数;其二,频率域分解映射了人类视觉系统的处理过程,并允许后继的量化过程满足其灵敏度的要求。

  视频信号的频谱线幅视频图像内包含的大多数为低频频谱线,只在占图像区域比例很低的图像边缘的视频信号中才含有高频的谱线。因此,在视频信号数字处理时,可根据频谱因素分配比特数:对包含信息量大的低频谱区域分配较多的比特数,对包含信息量低的高频谱区域分配较少的比特数,而图像质量并没有可察觉的损伤,达到码率压缩的目的。然而,这一切要在低熵(Entropy)值的情况下,才能达到有效的编码。能否对一串数据进行有效的编码,取决于每个数据出现的概率。每个数据出现的概率差别大,就表明熵值低,可以对该串数据进行高效编码。反之,出现的概率差别小,熵值高,则不能进行高效编码。视频信号的数字化是在规定的取样频率下由A/D转换器对视频电平转换而来的,每个像素的视频信号幅度随着每层的时间而周期性地变化。每个像素的平均信息量的总和为总平均信息量,即熵值。由于每个视频电平发生几乎具有相等的概率,所以视频信号的熵值很高。熵值是一个定义码率压缩率的参数,视频图像的压缩率依赖于视频信号的熵值,在多数情况下视频信号为高熵值,要进行高效编码,就要将高熵值变为低熵值。怎样变成低熵值呢?这就需要分析视频频谱的特点。大多数情况下,视频频谱的幅度随着频率的升高而降低。其中低频频谱在几乎相等的概率下获得0到最高的电平。与此相对照,高频频谱通常得到的是低电平及稀少的高电平。显然,低频频谱具有较高的熵值,高频频谱具有较低的熵值。据此,可对视频的低频分量和高频分量分别处理,获得高频的压缩值。

  由上面的引用可见,码率压缩基于变换编码和熵值编码两种算法。前者用于降低熵值,后者将数据变为可降低比特数的有效编码方式。在MPEG标准中,变换编码采用的是DCT,变换过程本身虽然并不产生码率压缩作用,但是变换后的频率系数却非常有利于码率压缩。 实际上压缩数字视频信号的整个过程分为块取样、DCT、量化、编码4个主要过程进行-----首先在时间域将原始图像分成N(水平)×N(垂直)取样块,根据需要可选择4×4、4×8、8×8、8×16、16×16等块,这些取样的像素块代表了原图像帧各像素的灰度值,其范围在139-163之间,并依序送入DCT编码器,以便将取样块由时间域转换为频率域的DCT系数块。DCT系统的转换分别在每个取样块中进行,这些块中每个取样是数字化后的值,表示一场中对应像素的视频信号幅度值。

  当u,v = 0 时,离散余弦正变换(DCT)后的系数若为F(0,0)=1,则离散余弦反变换(IDCT)后的重现函数f(x,y)=1/8,是个常数值,所以将F(0,0)称为直流(DC)系数;当 u,v≠0时,正变换后的系数为F(u,v)=0,则反变换后的重现函数f(x,y)不是常数,此时正变换后的系数F(u,v)为交流(AC)系数。

  DCT转换的一个具体应用见下面这个图:(偶们作员工培训的一张幻灯片,刚好合适)

  看上图变换原理可察觉两点:其一,DCT后的64个DCT频率系数与DCT前的64个像素块相对应,DCT前后都是64个点,它只是1个本身没有压缩作用的无损变换过程。其二,单独1场图像的全部DCT系数块的频谱几乎都集中在最左上角的系数块中,仅从该块的频谱中就可以形成1幅压缩图像;DCT输出的频率系数矩阵最左上角的直流(DC)系数幅度最大,图中为315,由于代表了x轴和y轴上的DC分量,所以它表示了输入矩阵全部幅度的平均值;以DC系数为出发点向下、向右的其它DCT系数,离DC分量越远,频率越高,幅度值越小,图中最右下角为-0.11,即图像信息的大部分集中于直流系数及其附近的低频频谱上,离DC系数越来越远的高频频谱几乎不含图像信息,甚至于只含杂波。显然,DCT本身虽然没有压缩作用,却为以后压缩时的取、舍 奠定了必不可少的基础。

本文链接:http://theferrari348.com/zhengnayasuo/547.html