首页 > 编程知识 正文

.jpg是什么文件(真相图说)

时间:2023-05-05 20:42:32 阅读:87987 作者:3162

原文作者,David Austin,大峡谷州立大学。

翻译者,小涟,哆啦A梦数学网翻译小组的成员。

校对,333。

Wechat (哆啦A梦的数学网每天得到更多的数学趣闻

新浪微博: http://weibo.com/duodaa

下面的图像以矩阵形式包含3871488像素。 每个像素的颜色由红、绿、蓝分量决定,每个颜色占1字节的内存。 当然,您可能会认为这个图像会占用11614464字节的内存,但这个JPEG文件实际上只占用734268字节的内存,约为1/16。 下面将介绍由JPEG (联合专家组)开发的高效图像压缩算法。

与只使用红、绿、蓝三种颜色的成分相比,用其他三种不同的成分进行描述更容易表现:度y,与颜色的亮度密切相关; C_b、C_r是蓝、红的色度成分,它们可以大致决定一种颜色。 上述两种表示方法可以通过可逆仿射变换进行相互变换。 例如,要重新获取红、绿、蓝分量的值,请使用以下表达式:

可以看出,亮度具有与3个基本颜色成分相同的作用。 为了使该变换可视化,保持亮度恒定并混合各色度值得以下的颜色

该算法将图像分割成8*8个可单独处理的图像块,这是一个样本模块。

在我们的样本模块中,(y、C_b、C_r )的3个成分的分布如下,明亮的区域对应着更大的值。

可以看到亮度值y生成了原始图表的灰度。 心理可视化实验表明,人眼对亮度变化最敏感,因此在颜色转换时可以将最重要的信息压缩为单一成分。 通过使用类似彩色电视机的彩色模型,即使是黑白电视机也能有效地播放具有彩色效果的图像。

理由将在后面说明,现在我们要求使用几个频率越来越阻塞的余弦函数的线性组合来表示各成分值。 例如,如果Y_ x、y表示图像块的第x行、第y列的四边形的亮度,则可以表示如下

归一化常数C_u、v不需要太关注; 系数F_u,v通过二维离散余弦变换(DCT )获得,其有效计算可以使用快速傅立叶变换) FFT )。

因为大多数图像块的分量值不会急剧变化,人眼对这些变化不太敏感,所以高频率的DCT变换系数很小,即使忽略也可能不会影响图像的感知。 这样的观察或许可以启发我们,以整数的形式量化和保存DCT的系数。

量化过程涉及两个因素。 第一个是参数,由用户选择,控制压缩的程度和画质。 值越大,文件越小,图像质量也越差。

第二个因素是8*8的矩阵Q=[Q_u,v],其中的系数是将F_u、v /Q_u、v整数化后的值,根据经验选择Qu、v时,会减弱高频的影响,因此通常对高频部分赋予较大的值例如,对亮度从DCT系数偏离进行量化的矩阵

考虑到亮度具有更重要的视觉信息,将描述亮度的系数和描述色相的系数用不同的矩阵进行了量化。 用中间值处理样本图像块,量化后的亮度系数如下

量化系数按箭头方向排序,低频靠前。

样本的亮度分量的量化系数为数列7、-2、4、1、0、1、0、1、-1和55个0。 与存储这样数量的零相比,通过直接记录零的数量,大大降低了存储要求。 之后的压缩必须通过霍夫曼编码实现系数数列的有效存储。

的重构可以通过逆过程实现。 量化系数给出了F_u、v的近似值,它们相反地给出了y、C_b、C_r和r、g、b分量的值。 下图左图为原图,右图为重建后的图。

由于DFT容易计算,所以似乎比DCT更容易使用。 但是我们认为

选择了DCT,这是因为我们希望把信息尽量集中到频率较低的系数上。以8*8模块中的某一行Y_x的值为例, DFT方法将Y_x表示为一些周期为8的函数的线性组合,并由此给出了Y_x的一个周期延拓。但该变换非常不必要地将 y_7 与 y_8 = y_0之间的变化也记录下来了,这就导致了高频分量的加入以及由此产生的显著影响。在下面的图中,Y_x 值用黑色表示,而由傅立叶变换的三个最低频项所给出的近似值是用红色表示的。

与之相比,DCT方法将Yx表示为一些周期为16且关于x=7.5对称的函数的线性组合。这使得Y_x的近似延拓更为平滑,从而减少了对高频分量的依赖。下图是DCT所给出的近似值,注意到近似效果得到了显著改善。

因为这些8*8图像块都是被独立处理,所以这就导致了在高压缩率的情况下边缘部分的不连续性变得十分明显。除此之外,我们通常还希望用中等分辨率就能高效重建图像。这些因素以及一些其他原因,促使了JPEG2000压缩算法的产生。在诸多不同点中,JPEG2000还采用离散小波变换代替了DCT

JPEG2000算法把图像分割为尺寸更加精细的图像块,比如256*256。为了演示小波变换,取图像块中的一行像素并令y_x 代表该行中的某一个值。现在求小波系数。

h_x为能够检测到高频变化的高通系数,l_x为低通系数。按照低通系数在前高通系数在后的顺序进行排序,对列也做相同处理后,可得小波系数的数表。

位于LL子块中的系数是通过对所有2*2的邻近像素点取平均值得到的因此代表了一个低分辨率的图像。另外三个子块描述了当重建高分辨率图像时所必要的变换。我们对LL子块重复之前的处理,从而实现以越来越低的分辨率存储图像。

量化的过程会检测数值变化不明显的区域,从而可以安全地忽略高通系数。和之前介绍的小波变换求取两个相邻值的平均值不同的是,JPEG2000算法使用Cohen-Daubechies Feauveau (9, 7) 小波变换,它可实现取邻近九个值的平均值,这样可令图像更加平滑。

JPEG2000的算法复杂度比JPEG高一个数量级,而且在中、低压缩率时,图像质量并没有优化多少。但是在高压缩率情况下,JPEG算法采用的8*8图像块会导致图片质量严重下降,而JPEG2000的效果此时会明显更好。

因为JPEG2000在获取同等质量图像时更为费劲,所以它对JPEG来说并没有明显优势。事实上,目前只有少数网站支持显示JPEG2000图像。它的优势在于,当处于增加算法复杂度不再是问题的环境下,可以为图像提供灵活的格式。

例如利用小波变换能以不同分辨率有效重组图像,用户可肉眼迅速大量搜索低分辨率的图片。JPEG2000允许用户指定区域以高分辨率展示,通常是出于医学成像的需要。最后,它也使得数码图像能以JPEG2000的格式存储在相机内存卡中,这样在拍照后,图片会以低分辨率存储起来以减少内存使用。在JPEG面世约十年后,JPEG2000才出现。它还拥有一些其他的功能特性,比如事后图像加密的功能。

关注微信:哆嗒数学网 每天获得更多数学趣文

新浪微博:http://weibo.com/duodaa

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。