---本文出自 ELT.ZIP 团队,ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英。
成员:上海工程技术大学大二在校生
合肥师范学院大二在校生
清华大学大二在校生
成都信息工程大学大一在校生
我们是来自4个地方的同学,我们在OpenHarmony成长计划啃论文俱乐部里,通过啃论文方式学习操作系统技术...
目录
入门指北
- 压缩编码概览
有趣玩件
轻松上手
- 《 伟大的计算原理 》
正式开始之初,我们便很轻易地从欧sir推荐的书目《 伟大的计算原理 》中获得了“ 文件压缩 ”的相关信息,通俗地阐述了各类不同压缩方法的简单实现原理,非常适合于作为对初学者的引入。 |
Analysis 从标题可知,这是一篇从数据质量、编码方案、数据类型和应用角度解读数据压缩技术的综述。 摘要部分是通常性的对文章发表背景及目的的叙述:“ 数字世界中数据的爆炸性增长导致了需要高效的技术来存储和传输数据。由于资源有限,数据压缩(DC)技术被提出,以最小化被存储或通信的数据的大小。由于DC概念能够有效利用可用存储区域和通信带宽,因此在几个方面发展了许多方法。为了分析DC技术及其应用程序是如何发展的,我们对许多现有的DC技术进行了详细的调查,以满足目前在数据质量、编码方案、数据类型和应用程序方面的要求。还进行了比较分析,以确定所审查的技术在其特征、基本概念、实验因素和局限性方面的贡献。最后,本文深入探讨各种开放问题和研究方向,探索未来发展的前景。” 从简单的一段摘要中,我们轻松获得了文章即将涵盖的技术领域,给读者提供了合适的技术背景铺垫,明确了定义:数据压缩技术是为了最小化数据大小来应对不断爆炸性增长的数据的存储传输。 接下来,是文章的目录结构: |
目录是对一篇文章整体框架的梳理,便于读者掌握文章组织安排方式和迅速找到想发掘的点。 |
进入正文,首先,介绍部分不光是对开头摘要内容的拓展延伸,更多的是声明了后文中即将出现的专业概念词汇,强调基本的领域知识储备,避免读者在后续遇到困难。由于入门指北已经奠定了一定基础,文字内容可以简单浏览了解;图表部分则具有很大价值,初学者很大程度上分辨不清各相关概念之间的区别与联系,而图表则提供了良好的解决方案,如: |
第一张图就以文章标题所述的方式对不同压缩技术按照相应类别进行了分类,因此后文会以这样的编排方式进行解读:
第二张表从多方面比较了不同压缩技术的特点,详见其中。 纵览全文,通用衡量各压缩技术性能使用的主要是Compression Ratio(CR)、Peak Signal to Noise Ratio(PSNR)两项指标,即压缩比和峰值信噪比,这是一个重点。压缩比比较好理解,就是数据压缩后的大小比上压缩前的大小,所以理论上压缩比越小,某种压缩算法一定程度上越占优势;那什么是峰值信噪比呢?这个概念从简单的字面意思上也能有个大致的感觉,我们不妨去搜索一下,在百度百科中得到了官方的定义:“ 峰值信噪比是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值的工程术语。由于许多信号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。” 什么意思呢?其实这里的“噪声”既非指日常生活中的“噪声”也非指物理学上的“噪声”,结合信息学或前文《 伟大的计算原理 》中的相关内容,我们得到以下理论:噪声是通信模型中的一个重要元素。任何在传输通道中改变信号,从而导致解码出错误消息的干扰都是噪声。如雾气和黑暗干扰了船只之间的信号通信;电报站之间过长的距离减弱了信号的强度;雷电干扰了调频广播的传输;DVD上的划痕会导致读取失败等,因此PSNR的值越高越好。 |
由于本文是一篇综述,因此有很多技术点可供我们发掘,下面以有限的篇幅介绍图像压缩的相关技术原理与研究方向
小波变换(Wavelet transform)
小波变换是目前比较流行的图像压缩算法,也是近30年来一个迅速发展的新领域。我们知道,JPEG图像压缩通过舍弃部分人眼基本会忽略的颜色信息位,以减小原始图像的大小,由于无法恢复原始的图像位,因此,常用的JPEG算法是一种有损压缩算法。而小波变换能够巧妙地将空间域和频域特性相结合,从而实现图像的无损压缩,所以小波变换是图像领域的重点和难点。小波变换用于图像压缩的核心是系数编码,压缩的实质是对系数的量化压缩。
小波变换原理
- 寻求空间L(R)上的标准正交小波基
- 将信号在小波基上分解,便于进行分析和处理
- 可通过分解系数重建原来的信号
由于小波变换的多方面特点,导致其在数字信号的处理上不方便,因此实际应用常采用离散小波变换(DWT),同时小波变换也要跟随图像的性质从一维推广到二维。任何图像都可以分为低频和高频部分,低频包含了图像的主要信息,高频主要是图像的细节纹理。
将一副图像根据二维小波变换算法进行变换后,将会得到一系列不同分辨率的图像。低频部分部分是表现一幅图像最主要的部分,如果只保留低频部分丢弃高频部分,图像数据便可压缩。
</参考代码>
#include <stdio.h>
#include <math.h>
#include <gsl/gsl_sort.h>
#include <gsl/gsl_wavelet.h>
int main (int argc, char **argv)
{
(void)(argc); /* avoid unused parameter warning */
int i, n = 256, nc = 20;
double *orig_data = malloc (n * sizeof (double));
double *data = malloc (n * sizeof (double));
double *abscoeff = malloc (n * sizeof (double));
size_t *p = malloc (n * sizeof (size_t));
FILE * f;
gsl_wavelet *w;
gsl_wavelet_workspace *work;
w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4);
work = gsl_wavelet_workspace_alloc (n);
f = fopen (argv[1], "r");
for (i = 0; i < n; i++)
{
fscanf (f, "%lg", &orig_data[i]);
data[i] = orig_data[i];
}
fclose (f);
gsl_wavelet_transform_forward (w, data, 1, n, work);
for (i = 0; i < n; i++)
{
abscoeff[i] = fabs (data[i]);
}
gsl_sort_index (p, abscoeff, 1, n);
for (i = 0; (i + nc) < n; i++)
data[p[i]] = 0;
gsl_wavelet_transform_inverse (w, data, 1, n, work);
for (i = 0; i < n; i++)
{
printf ("%g %g\n", orig_data[i], data[i]);
}
gsl_wavelet_free (w);
gsl_wavelet_workspace_free (work);
free (data);
free (orig_data);
free (abscoeff);
free (p);
return 0;
}
研究方向
<