精华内容
下载资源
问答
  • 2020-11-02 17:58:48

    数据压缩算法,考虑点:

    压缩比(压缩率的倒数)

    压缩/解压缩需要资源(内存)

    压缩/解压缩需要时间。

     

    常用:https://www.cnblogs.com/tommyli/p/4350672.html

     

    压缩:有损,无损,(可逆,非可逆)

    压缩解压:对称,非对称

     

    常见的图片格式,都是使用了特定压缩算法的应用。

    一般来说,JPEG格式的文件是非可逆压缩,因此还原后有部分图像信息比较模糊。GIF 是可逆压缩

    mpeg

    几种压缩算法的速度比较:https://blog.csdn.net/leilonghao/article/details/73200859

     

    常用的压缩算法:

    LZO一个开源的无损压缩C语言库,其优点压缩和解压缩比较迅速占用内存小等特点(网络传输希望的压缩和解压缩速度比较快,压缩率不用很高)。压缩率(0.5%~50%)

     

    说明:

    同一个压缩算法,(例如LZO),对于不同类型文件,压缩比范围很大(压缩比差异很大)。

    更多相关内容
  • 对于通量愈加庞大的物联网时序大数据存储,尽管标准压缩方法还能发挥其价值,但某些场景对时序数据压缩解压技术效率、性能提出了新的需求。本文介绍了现有的时序数据压缩解压技术,分类介绍了不同算法的特点和优劣势...

    简介: 目前,物联网、工业互联网、车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器、智能设备数量急剧增加,随之而来的海量时序监控数据存储、处理问题,也为时序数据库高效压缩、存储数据能力提出了更高的要求。对于通量愈加庞大的物联网时序大数据存储,尽管标准压缩方法还能发挥其价值,但某些场景对时序数据压缩解压技术效率、性能提出了新的需求。本文介绍了现有的时序数据压缩解压技术,分类介绍了不同算法的特点和优劣势。

    image.png

    作者 | 仁威
    来源 | 阿里技术公众号

    摘要:目前,物联网、工业互联网、车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器、智能设备数量急剧增加,随之而来的海量时序监控数据存储、处理问题,也为时序数据库高效压缩、存储数据能力提出了更高的要求。对于通量愈加庞大的物联网时序大数据存储,尽管标准压缩方法还能发挥其价值,但某些场景对时序数据压缩解压技术效率、性能提出了新的需求。本文介绍了现有的时序数据压缩解压技术,分类介绍了不同算法的特点和优劣势。

    时序数据普遍存在于IoT物联网、工业互联网、车联网等相关场景,物联网设备已遍布各种行业场景应用,从可穿戴设备到工业生产设备,都会或将会产生大量数据。比如,新型波音787客机每次飞行传感器产生的数据量都在500GB左右。在这些场景下,通常具备高并发写和高通量数据处理特点,选择时序数据压缩算法需要全方位考虑数据采集、存储、分析的需要。特别需要注意的是业务应用对时序数据当前和历史数据分析的方式,选择压缩算法不当将可能导致关键信息丢失,从而影响分析结果。对于业务来说,更直接使用时序数据压缩技术的应用就是时序数据库,对于时序数据库压缩解压是关键数据处理步骤,压缩算法性能直接影响时序数据库建设投入的ROI。

    一 时序数据压缩

    对于数据压缩算法,业界存在更普遍的解释,通常是针对通用场景和业务相关场景,比如视频、音频、图像数据流压缩。本文重点介绍时序数据库中常用的面向时序数据设计或可用于时序数据处理的通用压缩算法。我们选择分析的算法具备对更普遍场景下持续产生时序数据压缩处理的能力,并对IoT物联网场景传感器数据压缩的以下特点做了特殊设计:

    1、数据冗余(Redundancy):一些特定模式的时序数据经常性重复出现在一个或多个时间序列。

    2、函数估算(Approximability):某些传感器产生的时序数据生成模式可以根据预定义函数估算。

    3、趋势预测(Predictability):某些时序数据未来趋势可以通过算法预测,例如利用回归、深度神经网络等技术。

    image.png

    图 时序数据压缩算法分类

    本文重点总结了时序数据库和物联网IoT传感器管理常用压缩算法,并根据技术方法(dictionary-based, functional approximation, autoencoders, sequential等)和技术属性(adaptiveness, lossless reconstruction, symmetry, tuneability)对碎片化的压缩技术进行了分类,详细参考上图,并针对主要算法性能进行了对比分析。

    二 背景技术介绍

    在介绍压缩算法之前,我们先对时序数据、压缩和品质指数(quality indices)几个关键的概念进行定义。

    1 时序数据(Time Series)

    时序数据指数据元组根据时间戳(ti)升序排列的数据集合,可以被划分为:

    1、单变量时序(Univariate Time Series,UTS):每次采集的数据元组集合为单个实数变量。

    2、多变量时序(Multivariate Time Series ,MTS):每次采集的数据元组集合由多个实数序列组成,每个组成部分对映时序一个特征。

    比如,图2中股票价格在指定时间窗口的波动可以被定义为单变量时序数据,而每天交易信息(如:开盘、收盘价格,交易量等)则可以定义为多变量时序数据。

    image.png

    图 股票交易UTS时序数据样例

    用数学范式表达时序可以被定义为:

    image.png

    2 数据压缩

    数据压缩(又被称为源编码,source coding),根据David Salmon在《Data Compression: The Complete Reference》一书中的定义,可以简单描述为“将输入原始数据流转变为字符流(bit stream)或压缩流的体量更小的输出数据流的过程”。这个过程遵循J. G.Wolff提出的Simplicity Power(SP)理论,旨在尽量保持数据信息的前提下去除数据冗余。

    数据解压缩(又被称为源解码,source decoding),执行与压缩相反过程重构数据流以适应更高效数据应用层对数据表述、理解的需要。

    现有压缩算法根据实现原理的差异,可以被划分为以下几类:

    • 非适应/自适应(Non-adaptive/ adaptive):非适应算法不需要针对特殊数据流进行训练以提升效率,而适应算法则需要有训练过程。
    • 松散/非松散(Lossy/Lossless):松散算法不保障对原始数据压缩后的结果唯一,而非松散算法对同样原始数据的压缩结果唯一。
    • 对称/非对称(Symmetric/Asymmetric):对称算法对数据的压缩、解压缩使用相同的算法实现,通过执行不同的代码路径切换压缩解压缩过程;非对称算法则在数据压缩、解压缩过程分别使用不同的算法。

    对于具体的时序数据流压缩解压缩过程,一个压缩算法实例(encoder)输入s体量的时序数据流TS,返回压缩后的体量s′的时序数据流TS′,且s>s′包含一同压缩的时间戳字段E(TS) = TS′。解压缩算法实例(decoder)的执行过程则是从压缩数据流还源原始的时序数据流D(TS′) = TS,若TS = TSs则压缩算法是非松散的,否则就是松散的。

    3 品质指数(quality indices)

    为了度量时序数据压缩算法的性能,通常需要考虑三点特性:压缩率、压缩速度、精确度。

    1、压缩率:衡量压缩算法对原始时序数据压缩比率,可以定义为:

    ρ=s's

    其中,s′代表时序数据压缩后的体量,s为时序数据压缩前的原始体量。ρ的转置又被称为压缩因数,而品质指数(quality indices)则是被用来表述压缩收益的指标,其定义为:

    cg=100loge1ρ

    2、速度:度量压缩算法执行速度,通常用每字节压缩周期的平均执行时间(Cycles Per Byte,CPB)。

    3、精确度:又被称为失真度量(Distortion Criteria,DC),衡量被压缩算法重构后的时序数据保留信息可信度。为适应不同场景度量需要,可以用多种度量指标来确定,常用的指标有:

    Mean Squared Error:

    image.png

    Root Mean Squared Error:

    image.png

    Signal to Noise Ratio:

    image.png

    Peak Signal to Noise Ratio:

    image.png

    三 压缩算法

    目前常用的时序数据压缩算法主要有以下几种:

    1) Dictionary-Based (DB)

    1.1. TRISTAN
    1.2. CONRAD
    1.3. A-LZSS
    1.4. D-LZW

    2) Functional Approximation (FA)

    2.1. Piecewise Polynomial Approximation (PPA)
    2.2. Chebyshev Polynomial Transform (CPT)
    2.3. Discrete Wavelet Transform (DWT)

    3) Autoencoders:

    3.1. Recurrent Neural Network Autoencoder (RNNA)

    4) Sequential Algorithms (SA)

    4.1. Delta encoding, Run-length and Huffman (DRH)
    4.2. Sprintz
    4.3. Run-Length Binary Encoding (RLBE)
    4.4. RAKE

    5) Others:

    5.1. Major Extrema Extractor (MEE)
    5.2. Segment Merging (SM)
    5.3. Continuous Hidden Markov Chain (CHMC)

    1 Dictionary-Based (DB)

    DB算法实现理念是通过识别时序数据都存在的相同片段,并将片段定义为原子片段并以更精简的标识标记替代,形成字典供使用时以标识作为Key恢复,这种方式能够在保证较高数据压缩比的同时,降低错误率。此技术实现的压缩可能是无损的,具体取决于实现情况。此架构的主要挑战是:

    • 最大限度地提高搜索速度,以便在字典中查找时间系列片段;
    • 使存储在 dictionary 中的时间串段尽可能一般,以最大限度地缩短压缩阶段的距离。

    TRISTAN是基于DB策略实现的一种算法,TRISTAN算法把压缩划分为两个阶段处理,第一阶段适应性学习,第二阶段数据压缩。在学习阶段,TRISTAN字典表通过学习训练数据集来生成,或者结合专家经验定义特定模式的原子片段。有了字典表,在压缩阶段TRISTAN算法执行从以下公式中检索w的过程。

    s=w·D w ∈ {0,1}k

    其中,D是字典表,s为原子片段,K是压缩后的时序表征数据长度。TRISTAN解压过程则是通字典表D解释表征数据w得到原始时序数据的过程。

    CORAD算法在TRISTAN基础之上增加了自动数据关联信息,对两两时序数据片断进行基于Pearson相关系数的度量,以相邻矩阵M存储相关性,通过M与字典表D相结合的计算方式,进一步提升压缩比和数据解压精确度。

    Accelerometer LZSS(A-LZSS)算法是基于LZSS搜索匹配算法的DB策略实现,A-LZSS算法使用Huffman编码,以离线方式通过统计数据概率分布生成。

    Differential LZW (D-LZW)算法核心思想是创建一个非常大的字典表,它会随着时间的推移而增长。一旦字典表被创建,如果在字典表中发现缓冲区块,它就会被相应的索引替换,否则,新方块将插入字典作为新的条目。增加新的缓存区块是在保证非松散压缩的原则下实现,并不限制增加的数量,但随之而来的问题就是字典表有可能无限膨胀,这就导致D-LZW算法只适用于特定场景,比如输入时序数据流为有限词组或可枚举字符集组成。

    Zstandard(zstd)是一种基于Huffman编码Entropy coder实现的快速非松散DB压缩算法,字典表作为一个可选选项支撑参数控制开启关闭。算法实现由Facebook开源,支持压缩速度与压缩比之间的按需调整,能够通过牺牲压缩速度来换取更高压缩比,反之亦然。相比同类算法,zstd算法性能可参考下表数据。

    image.png

    表 zstd算法性能对比

    2 Function Approximation (FA)

    函数近似类时序压缩算法FA的主要设计思想是假设时间序列可以表示为时间函数。由于难以避免出现无法处理的新值,找出能够准确描述整个时间序列的函数是不可行的,因此我们可以将时间序列划分成多个片段,对每个段找到一个近似时间函数来描述。

    由于找到一个能完整描述时间序列的函数 f:T → X 是不可行的,因此实现上我们需要考虑找出一个函数簇,以及其对映的参数来描述分段时序数据相对可行,但这也使得压缩算法为松散的实现。

    相比之下,FA类算法优点是它不依赖于数据取值范围,因此不需要有基于样本数据集的训练阶段,如果采用回归算法,我们只需要单独考虑划分好的单个时间片段。

    Piecewise Polynomial Approximation (PPA)是FA类算法的常用实现,此技术将时间序列分为固定长度或可变长度的多个段,并尝试找到接近细分的最佳多项式表述。尽管压缩是有损的,但可以先于原始数据的最大偏差进行修复,以实现给定的重建精度。PPA算法应用贪婪的方法和三种不同的在线回归算法来近似恒定的函数、直线和多项式。

    Chebyshev Polynomial Transform (CPT)实现原理与PPA算法类似,只是改进了支持使用不同类型多项式的能力。Discrete Wavelet Transform (DWT)使用Wavelet小波转换对时序数据进行转换。Wavelet是描述起止值都为0,中间值在此之间波动的函数,

    3 Autoencoders

    Autoencoder是一种特殊的神经网络,被训练生成用来处理时序数据。算法架构由对称的两部分组成:编码器encoder和解码器decoder。在给定n维时序数据输入的前提下,Autoencoder的编码器输出m(m<n)维的输出。解码器decoder则可以将m维输出还原为n维输入。Recurrent Neural Network Autoencoder (RNNA)是Autoencoder的一种典型实现,通过RNN来实现对时序数据的压缩表述。

    image.png

    图 Autoencoder算法实现结构

    4 序列化算法Sequential Algorithms(SA)

    序列化算法SA实现原理是顺序融合多种简单压缩技术实现对时序数据压缩,常用技术有:

    • Huffman coding:编码器创建一个字典,将每个符号关联到二进制表示,并以相应的表示替换原始数据的每个符号。
    • Delta encoding:此技术对目标文件进行编码,以处理一个或多个参考文件。在时间系列的特定情况下,每个元素在 t 被编码为∆(xt,xt=1)。
    • Run-length encoding:在此技术中,每个运行(连续重复相同值的序列)都与对(vt, o)进行子图,其中vt是时间t值,o是连续发生次数。
    • Fibonacci binary encoding:此编码技术基于 Fibonacci 序列实现。

    Delta encoding, Run-length and Huffman (DRH)算法是一种融合了Delta encoding、Huffman coding、Run-length encoding和Huffman coding四种技术的压缩算法,算法实现是非松散的且计算复杂度相对较小,适合在边缘短实现对数据的压缩解压,也因此适合应用在物联网、工业互联网、车联网等需要边缘短采集处理时序数据的场景。

    Sprintz就是一种专门针对物联网场景设计的SA算法,在算法设计中考虑了对物联网场景中能源消耗、速度等时序指标波动规律因素,为以下需求而特别优化了算法设计:

    1)对较小片段数据的快速处理

    2)底计算复杂度的压缩、解压缩,以适应边缘端有限的计算资源

    3)对实时采集时序数据的快速压缩、解压缩

    4)非松散压缩

    为了在处理IoT物联网环境时序数据上取得更好的压缩效果,Sprintz算法通过预测数据生成趋势的方式来提升算法对数据的压缩性能,其主要实现的算法过程包括以下几部分:

    1)预测:基于delta encoding或FIRE算法通过统计历史时序数据,对新样本数据生成规律进行预测;

    2)Bit packing:打包预测错误信息数据和包头描述用来解压数据的信息;

    3)Run-length encoding:如果压缩过程中通过预测算法未发现任何错误信息,则略过bit packing过程的错误信息发送,并在下次发生错误时在打包预测错误信息的包头中记录略过的数据长度;

    4)Entropy coding:用Huffman coding对big packing生成的包文件进行编码。

    Run-Length Binary Encoding (RLBE)算法 也是一种为IoT物联网场景下数据压缩解压,适应物联网边缘端有限计算、存储资源环境的常用非松散SA时序数据压缩算法,RLBE算法融合了delta encoding,run-length encoding和Fibonacci coding三种技术,其执行过程如下图所示。

    image.png

    图 Run-Length Binary Encoding (RLBE)算法执行过程图示

    RAKE算法原理是通过检测时序数据稀疏性来实现对数据的压缩。RAKE为非松散压缩,执行过程包涵预处理和压缩两个主要过程。预处理过程中,RAKE算法设计由字典表来转换原始数据。压缩过程则对预处理的输出数据进行稀疏性检测,压缩相邻的相同数据。

    5 其他类型算法

    Major Extrema Extractor (MEE)算法通过统计指定时间段的时序数据最大、最小值来对数据进行压缩。Segment Merging (SM)算法则把时序数据抽象为时间戳和值及偏差组成的片段,可用元组(t,y,δ)表述,其中t为开始时间,y是数值常量标识,δ是数据片段偏差。Continuous Hidden Markov Chain (CHMC)算法则利用马尔可夫链概率模型来将时序数据定义为一系列有限状态节点集合S及链接节点的状态迁移概率边集合A。

    四 总结

    时序数据是物联网、工业互联网、车联网等场景下生成数据总量中占比最高的数据类型,有效的压缩算法不但可以降低数据存储成本,同时可以在边缘到中心,中心到云的数据传输过程中节约网带宽资源,降低数据同步时间。对于作为时序数据核心存储中枢的时序数据库,压缩算法性能更是至关重要。阿里云多模数据库Lindorm核心数据库引擎之一时序引擎Lindorm TSDB内置的自研、高效数据压缩算法针对物联网、工业互联网、车联网等智能、互联场景针对性优化,进一步提升了时序数据存储的ROI,新一代云原生智能互联系统提供必要支撑。

    原文链接
    本文为阿里云原创内容,未经允许不得转载。 

    展开全文
  • 栅格数据压缩

    千次阅读 2020-04-17 14:22:52
    栅格数据压缩   在栅格数据属性一文中,我们已经了解影像/栅格数据所占的空间可以通过像元深度和行列数推算出来。可是常常遇到的情况是我们在Windows的资源管理器里面看到的影像大小与计算出来的不等,这又是...

    栅格数据压缩

     

    栅格数据属性一文中,我们已经了解影像/栅格数据所占的空间可以通过像元深度和行列数推算出来。可是常常遇到的情况是我们在Windows的资源管理器里面看到的影像大小与计算出来的不等,这又是怎么一回事儿呢?

     

    之前我们说到的都叫未压缩大小(Uncompressed Size)。而在绝大多数情况下,影像的数据量都非常大,为了节省磁盘空间就需要把影像数据压缩一下,也就出现了上面所说的大小不等的情况。压缩影像的好处是显而易见的,不仅是节省了磁盘空间,在通过网络传输时也大大节省了带宽,提高了网络服务的性能。但是任何事物都有两面性,影像压缩也不例外。压缩影像是不能够直接在屏幕上显示出来的,都必须经历一个解压缩的过程。一般情况下,影像的压缩比率越大,解压缩的时间也就越长。也就是说,将影像压缩到非常小的时候,虽然节省了空间,但是在使用时会占用非常大的系统资源。要求快速显示的话,对CPU要求是非常高的。

     

    影像压缩算法分成两种,有损压缩和无损压缩。我们常见的JPEG,JPEG2000都属于有损压缩。而LZ77和Run-Length Encoding(RLE)则是无损压缩。

     


    这两种压缩有什么区别呢,从有损这个字眼也能够看出来图像会有损失。简单的说就是使用无损压缩的影像能够通过解压缩完全还原到影像压缩前的状态,而有损压缩则会造成影像的失真。

     

    ArcGIS中支持的压缩类型见下表:

     


    除了上面列出来的,影像压缩的算法可谓是琳琅满目,层出不穷。在这里一一说明白是不可能的了。所以特找出几个比较典型的压缩类型来简单说说,不涉及算法的代码。内容可能有点枯燥,觉得无聊的可以直接跳到小结部分。

     

    我们来看看RLE是怎样压缩影像的。

    假使我们有这样一张1bit的黑白影像,B表示1,W表示0。

    WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW

    在使用RLE压缩算法以后,我们得到的就是:

    12W1B12W3B24W1B14W。

    很显然,这种算法并没有改变影像的像元值,也就是进行了无损压缩。但是采用重新编码的方式能够压缩的幅度并不大。

     

     

    再来看看最常见的有损压缩JEPG。

    JPEG之所以在日常生活中被广泛的应用,肯定是因为其益处大大的好。好在哪里呢,当然就是其强大的压缩比率。对于一个常见的256色的8bit彩色影像,一般无损压缩能达到的压缩比率为1/2到1/3。但是同样的影像使用jpeg压缩,在保证视觉上无差异的情况下可以达到1/20 至1/40。如果对影像质量要求不高,象是用于缩略图或者索引图,更可以压缩到1/100。举个例子,如果一景影像使用Jpeg压缩,得到的影像大小仅与1/10大小的拇指图所占空间一样,但是这样却不妨碍压缩后的影像显示出比拇指图更多的细节。

     

    要实现如此大的压缩比率,显然通过编码的方式是行不通的。正如上面提到过的,jepg是保证视觉无差异的情况下进行的压缩。

    先讲个小知识。除了RGB的渲染方式外,颜色也可以通过YCbCr的方式进行渲染,其中Y代表亮度,Cb和Cr则代表色度、饱和度。由于人类的眼睛,至少是绝大多数人的眼睛对亮度的细微变化非常敏感,但是对色彩的改变就没那么在意。所以对一张图片/影像来说,相对Cb和Cr,Y值更重要一些。

    JPEG压缩的原理就是通过余弦变换的方式对Cb和Cr部分取值来增大压缩的程度。具体实现的算法也有很多种,这里就不深入的说了,有兴趣的童鞋可以自行google.

     


    另外还有一种就是GIS筒子们所喜闻乐见的MrSID格式了。

    这是一种基于离散小波变换的压缩模式,同jpeg2000和ecw格式。原理是将原始图像分割成多个不同分辨率下的小图像,然后再提取其主要信息。为啥专业人员更喜欢它呢,因为即使在1/100的压缩比率下,压缩后的影像仍然能够保证很小的视觉失真。是的,你没有看错,MrSID也会造成数据的损失。即使在较小的(1/20或1/30)的压缩比率下,压缩后的影像看上去完全没有视觉差异,但是像元值与原始数据仍然有差异,所以不建议对MrSID格式的数据进行分析。BUT,对于巨大的卫星影像来说,MrSID的格式仍然被广泛使用。因为MrSID可以实现更高效,压缩比率更大且视觉差异很小的压缩结果(与jpeg的压缩方式相比),而这样是非常方便网络传输的。并且,MrSID压缩与解压缩速度更快一些。

     

    在ArcGIS的老版本中(9.3和9.3.1),提供了Raster to MrSID的影像压缩功能。在ArcCatalog中一个为压缩大小不超过50M的影像上右键,可以看到这个选项。在ArcGIS 10的版本中,就不再有这个“测试版”的MrSID压缩功能了。但是呢,我们仍然可以借助强大的GDAL来实现大影像的MrSID格式的压缩。

     

    压缩质量的选择

     

    在ArcGIS中导出影像成JPEG或者TIFF格式的时候,会发现JPEG压缩还有不同的比例选择,Compression Quality (1-100)。这个值表示了啥呢?首先要说的是,这个数值并不代表压缩大小的比率,也不是保留的信息的比率,只体现了结果数据的质量。简单的说选择的数值越小,压缩的越多,图像质量越差。直观视觉感受见下图。


     


    另外呢,对于全彩色的影像,建议的最佳的选择是75%。这个值是在看不出差异的标准下能得到的最大的压缩比率。需要注意的一点是,由于jpeg对于亮度的压缩比率很小,和彩色的影像相比较,灰度图的压缩比率就很有限了。在人眼看不出差异的标准下,一般只能压缩10%-25%的大小。

     

     

    小结一下

    影像的质量与大小是鱼和熊掌不可兼得矣。如果需要更高的质量,那么就需要更多的磁盘空间。如果需要快速的看到影像,就需要损失一定的影像质量。这两者之间需要有一个取舍。

     

    经常发生这样一个情况,用作底图的是一个范围很大的数据,但是我们只会查看到某个部分的影像,而不是全图显示。对于这个一框选,就出来的需求我们要如何选择影像的存储格式呢?

     

    首先,和矢量一样,要通过索引快速定位到要返回的内容,原始影像得有内部分区。这样没有内部分区的JPG格式的就可以pass了。其次,不管是本地还是服务器上的数据,取的数据要小以便传输。这样,我们就需要做压缩。此外,除了影像传输要消耗时间,将压缩后的影像解压缩并显示出来也需要时间。综合上面这两点,建议在单张影像<300M (高程数据<100M)的时候,请一定使用75%jpeg压缩的Tiled Tiff。对于某些单张影像>1G的超大数据,如果只在较大比例尺先预览,可以考虑MrSID。

     

    最后就是,有损压缩适用于作为矢量背景图的影像,需要快速加载获取的影像。相对的呢,无损压缩适用于需要进行空间分析的影像/栅格,需要推导出新数据的影像/栅格。

    展开全文
  • 数据压缩第二周作业 TIFF格式概述 特点 组成 图像文件头(Image File Header - IFH) Byteorder Version Offest to first IFD 图像文件目录(Image File Directory - IFD) Directory Entry Count Directory Entry ...

    TIFF格式概述

    TIFF(Tagged Image File Format):标记文件格式,是一种灵活的位图格式,TIFF位图文件默认的文件扩展名是tif或者tiff。(注意,tif和tiff可以理解为文件格式相同)

    特点

    • 在刚开始,TIFF只支持二值图像,后来逐渐支持灰阶图像和彩色图像。现在可以将TIFF分为四种类型:TIFF-B,双色;TIFF-G,黑白灰度;TIFF-P,带调色板的彩色图形;TIFF-R,适合RGB色彩的图形。
    • 支持256色、24位真彩色、32位色、48位色等多种色彩位;
    • 支持RGB、CMYK以及YCbCr等多种色彩模式,支持多平台;
    • 最大位深为32bit
    • 支持压缩和不压缩两种类型,其中压缩支持多种压缩格式,变化较多。
    • 通常TIFF文件的格式如下:最常见的排列方式为:IFH-文件数据-IFD在这里插入图片描述

    组成

    TIF图一般由三个部分组成:文件头(简称IFH)、文件目录(简称IFD)以及图像数据。
    一个TIFF文件可以有多个IFH,但是只能有一个IFD。
    下面仔细介绍一下TIFF文件。
    (所有的标签都是以升序排列)

    在检索时,可以快速利用偏置位置迅速找到数据所在位置。


    图像文件头(Image File Header - IFH)

    由8个字节组成,以升序排列,IFH 包含 3 个成员:Byteorder、version、offset to first IFD。

    名称字节数数据类型
    Byteorder2整型
    Version2整型
    Offset4整型

    Byteorder

    字节顺序标志位,取值为4D4D(“MM”)或4949(“II”)。MM表示大字节在前,小字节在后,II表示小字节在前,大字节在后。

    Version

    TIFF标志位,值固定为 2A00(42)。可用于检验tiff文件

    Offest to first IFD

    偏置,第一个 IFD 相对于文件起始位置的偏移量(由于偏置必须以 Word 边界开始,因此值必须为2的整数倍)。

    注意:IFH后不一定紧接着就是IFD,通常有的时候会先有多个IFH,才会有IFD。


    图像文件目录(Image File Directory - IFD)

    和IFH一样,IFD同样包含三个元素:Directory Entry Count、Directory Entry以及Offset to next IFD。IFD用于标识一个图像的所有属性,具有图片属性也称为图片标签。

    • 一个 TIFF 文件可以包含多个 IFD,一个 IFD 标识一个图像的属性。
    名称字节数数据类型
    Directory Entry Count2整型
    Directory Entryn*12整型
    Offset to next IFD4Long

    Directory Entry Count

    DE(Directory Entry )个数,表示此IFD中包含多少个DE。假设此IFD具有n个DE。

    Directory Entry

    DE,每个DE标识图像的一个属性,图像具有n个属性则具有n个DE,一个DE占用12个字节,因此n个DE总共占用(n*12)个字节。

    Offset to next IFD

    距离下一个IFD相对于文件开始的偏移量。例如,如果一个TIF文件中只包含一张图片,则只有一个IFD,偏移量等于0。

    DE(图像属性)的详细说明

    一个 DE 记录一个图像的属性,例如图像的分辨率、是否进行压缩等。其存储结构如下所示:

    名称字节数数据类型
    Tag2整型
    Type2整型
    Length4Long
    Offset4Long
    • Tag:属性的标签编号,按升序排列。
    • Type:属性的数据类型
    • Length:该类型的数据个数(数量)
    • Offest:(有时没有offset) 是TagID代表的变量值相对文件开始处的偏移量,如果实际数据的字节数小于等于 4,则不需要设置偏移量,直接存储数据。

    Type类型:Rational:由两个Long组成,第一个位分数,第二个位偏移地址

    其中Tag属性根据一下表中数据判断:

    TagID属性名称type说明
    0100图像宽int(分辨率单位)
    0101图像高int(分辨率单位)
    0102颜色深度int1为单色,4为16色,8为256色;如果该类型数据个数>2个,说明是真彩图像
    0103图像数据是否压缩int05表示压缩
    0106图像是否采用反色显示int01表示反色,否则表示不反色
    011A水平分辩率偏移量Rational常用计量单位是:像素/英寸
    011B垂直分辩率偏移量Rational常用计量单位是:像素/英寸
    0132生成该图像的时间ASCII文本类型(7位ASCII码加1位二进制0)
    0140调色板偏移量int256色和16色图像才有此属性;而且有连续2个

    1、Rational指分数类型,由两个Long组成,第1个是分子,第2个是分母
    2、ASCII码:文本类型
    2、在Adobe官网我找到了TIFF详细的DE定义,附在参考文献中,供大家查询。



    图像数据

    TIFF支持多种数据存储格式(包括压缩未压缩、像素位存储或颜色面存储等),根据IFD中的设置进分析。TIFF支持的数据压缩类型可能比任何其他的图像文件格式都多。因此TIFF具有一个弊端,由于其压缩方式的多样性,许多有效的TIFF文件可能只能由个别程序进行识别。
    (不过实际中图像经常采用LZW压缩)

    在不缓冲整个文件的情况下,TIFF文件的流式传输在所有情况下都是不可能的。

    目前Adobe享有TIFF规范版权,用于TIFF格式的管理和维护。Adobe可以创建带有单层图层的TIFF文件,同时还可以选择使用图像金字塔保存TIFF。


    实例详解

    注意:在读写字节流时由于TIFF为小字节在前,要从右向左读。
    在这里插入图片描述

    PS:CSDN上上传不了tiff格式的图片,利用wechat截图给大家举一个例子;将tiff格式的图片利用Visual Studio 2019二进制编辑器打开。

    最终获得的二进制码如下:
    在这里插入图片描述

    逐次进行验证:
    1、IFH部分:
    在这里插入图片描述

    名称长度实例数据说明
    字节顺序249 49从小字节在前
    TIFF标志位200 2ATIFF固定值
    偏置48第一个IFD的偏移量
    图像数据

    (此图只有一张图片,故有且只有一个IFD)

    • 对偏移量做一点说明:偏移量08 (指向第1行,第8列)

    2、IFD部分:
    由IFH中偏移量得出:08为IFD开始处,有0x14,也就是十进制中20个DE(图片属性),每个DE占12个字节,20个DE共占240字节;

    对DE进行分析:请添加图片描述
    图中用不同颜色标记处不同的DE,从最开始深蓝色标注处的DEcount起,00FE为一个DE的名称…以此类推。

    序号TagTypeLengthValue/Offset说明
    1FE 00long10新子文件类型(New SubfileType)
    201 00int1303图片宽度:303(分辨率单位)
    301 01int1300图片长度:300(分辨率单位)
    401 02int3012c.H(偏移地址)3个int型,分别用3bit表示,此为24位真彩图
    501 03int11图片未经过压缩
    601 06int12图像为RGB图像,未反色(0表示黑,最大值表示白)
    701 11long14C6A.H(偏移地址)Strip Offset:每个条状数据在文件中的偏移量
    801 12int11第0行表示图像的可视顶部,第0列表示可视左侧(图像无隐藏部分)
    901 15int13RGB三通道
    1001 16int1012C.H(偏移地址)RowsPerStrip每个条带内图像的行数
    1101 17long104293C.H(偏移地址)StripByteCount 当采用某种压缩方式后,每个条带内包含的字节数
    1201 1ARational10104.H(偏移地址)宽度方向上每分辨率单位包含的像素个数
    1301 1BRational1010C.H(偏移地址)长度方向上每分辨率单位包含的像素个数
    1401 1Cint11每个像素的采样值连续存储,只有一个图像平面
    1501 28int12分辨率单位(inch英尺)
    1601 31ASCII310114.H(偏移地址)用于创建映像的软件包的名称和版本号
    1701 32ASCII200134.H(偏移地址)DateTime 图片创造的时间
    1802 BCbyte20148.H(偏移地址)未知
    1949 86byte5,382156.H(偏移地址)未知
    2069 87long1475A8.H(偏移地址)未知

    总结

    1、值得一提的是,在建立TIFF图片文件时,我最开始使用画板创建的tiff图片太宽,宽高太夸张,于是我就用PS对图片进行截取,最终获得了合适的图片。再利用PS进行图片保存过程时,选择储存图片方式位tiff会弹出这种提示窗,用户可以选择压缩或者不压缩两种格式。
    这也验证了TIFF图片存储具有多种方法,支持压缩也支持不压缩。
    2、TIFF的DE标签存储的内容很大,最开始练习读TIFF16进制数据的时候不太习惯,有的时候很容易找不到DE标签的位置。
    在这里插入图片描述
    参考资料:
    1、DE标签官方解释:https://www.awaresystems.be/imaging/tiff/specification/TIFF6.pdf
    2、TIFF文件格式详解:http://blog.sina.com.cn/s/blog_668aae7801017gr9.html
    3、tiff标签简单使用说明:http://t.csdn.cn/or5X6

    展开全文
  • hbase数据压缩

    千次阅读 2021-01-28 14:25:45
    使用了一段时间之后发现hbse的空间不足,需要对hbase进行数据压缩 hbase支持的压缩格式:GZ(GZIP),LZ0,LZ4,Snappy compact分为两类,一类叫Minor compact ,一类叫Major compact; 两者的区别在于:Minor compact...
  • 图像数据压缩方法

    千次阅读 2021-03-03 21:40:32
    数据压缩方法 数据能够进行压缩,是因为数据中存在或多或少的冗余信息,而对于视频和音频等多媒体信息,更可以利用人类自身的感知冗余(失真)特点来实现更高的压缩比例。衡量压缩算法的三个主要性能指标如下: ...
  • 深入解析数据压缩算法

    万次阅读 多人点赞 2018-05-06 10:30:45
    1、为什么要做数据压缩? 数据压缩的主要目的还是减少数据传输或者转移过程中的数据量。2、什么是数据压缩? 是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高传输、存储和处理效率的一种技术方法。或者...
  • 数据压缩的历史、常用算法原理

    万次阅读 2019-05-28 14:58:13
    数据压缩的概念相当古老,可以追溯到发明了摩尔斯码的19世纪中期。 摩尔斯码的发明,是为了使电报员能够通过电报系统,利用一系列可听到的脉冲信号传递字母信息,从而实现文字消息的传输。摩尔斯码的发明者意识到,...
  • json数据压缩

    千次阅读 2020-07-24 15:40:18
    同时为了提升性能、降低带宽,我们一般会对json数据进行压缩。今天我们就来谈谈各种压缩方法。 1、常规压缩: 默认的json数据是带有换行的,所以最简单的压缩方法是将json中的回车换行去掉,压缩成一行字符串。 ...
  • 数据压缩这是mapreduce的一种优化策略:通过压缩编码对mapper或者reducer的输出进行压缩,以减少磁盘IO,提高MR程序运行速度(但相应增加了cpu运算负担) Mapreduce支持将map输出的结果或者reduce输出的结果进行...
  • 从写入性能到查询性能均大幅满足现场实际需求,整体压缩率可以达到3/100。
  • Elasticsearch 响应数据压缩功能详解

    千次阅读 2021-03-22 14:21:42
    压缩非常奇妙,可以将数据压缩比原始大小更小。我们知道WinRaR,7Zip等压缩工具。Elasticsearch也提供压缩数据功能,可实现对在客户端和服务端节点之间传输数据的压缩。压缩对于处理大数据传输时可减少网络延迟,...
  • 基于哈夫曼树的数据压缩算法

    千次阅读 多人点赞 2019-05-13 13:14:40
    综合实验2 基于哈夫曼树的数据压缩算法 实验日期 2019.04.29 综合实验二 基于哈夫曼树的数据压缩算法 一、实验目的 1.掌握哈夫曼树的构造算法 2.掌握哈夫曼编码的构造算法 二、实验内容 输入一串字符串,根据给.....
  • 数据压缩算法该如何选择?

    万次阅读 多人点赞 2021-05-05 13:01:33
    写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,...大数据需要处理海量数据,此时数据压缩非常重要。 在企业中存在的许多场景中,通常,数据源来自多种文本格式(CSV、TS
  • 文章目录一 __init__() 创建一个类文件对象二 append() 内存数据添加到zip对象三 appendfile() ...传统方法需要多次磁盘IO,性能很低,如果跳过文件存储,直接将内存的数据压缩保存,会大大减少磁盘IO,提升性能。 不
  • 可以将编译器分析与数据压缩相结合,以发现超出传统压缩工具能力的大小优化。Superpack 突破了压缩的极限,实现了比现有压缩工具更好的压缩率。 Superpack 是一种非对称压缩器,解压速度快,但压缩速度慢。Superpack...
  • HBase数据压缩方式的介绍与实战

    千次阅读 2019-09-20 19:20:17
    1、HBase数据压缩方式的介绍 为了提高HBase存储的利用率,很多HBase使用者会对 HBase 表中的数据进行压缩。目前 HBase 可以支持的压缩方式有 GZ(GZIP)、LZO、LZ4 以及 Snappy。它们之间的区别如下: GZ:用于冷...
  • 数据压缩算法—2无损压缩算法

    千次阅读 2018-12-12 20:55:43
      字典算法是最为简单的压缩算法之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如:   有字典列表:   00=Chinese   01=People   02=...
  • 前端Vue2.6.10数据压缩(zlib/pako)和解压(zlib/pako),后端Python3.7数据压缩(zlib)和解压(zlib)
  • 数据压缩知识点整理

    千次阅读 2017-04-27 16:57:20
    数据压缩 是指在不丢失有用信息的前提下, 缩减数据量 以减少存储空间, 提高传输、存储和处理效率, 或按照一定的算法对数据进行重新组织, 减少数据的冗余和存储的空间的一种技术.
  • 浅析数据压缩算法

    千次阅读 2017-05-17 15:51:17
    数据压缩是减少信息传输量最经济直接的办法,所以这篇文章将讲解一些经典的数据压缩算法。 一 热身:基因组 对于生物学的基因研究中,A、C、T、G是是用来表示生物DNA的四种碱基,对基因序列的处理实际上是对这四种...
  • 对于通量愈加庞大的物联网时序大数据存储,尽管标准压缩方法还能发挥其价值,但某些场景对时序数据压缩解压技术效率、性能提出了新的需求。本文介绍了现有的时序数据压缩解压技术,分类介绍了不同算法的特点和优劣势...
  • 数据压缩算法,文本压缩算法 几种压缩算法原理介绍- https://blog.csdn.net/clevercode/article/details/46691645 文本压缩算法的对比和选择- https://blog.csdn.net/horkychen/article/details/75174035 数据压缩...
  • zstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。 在我们测试的文本日志压缩场景中,压缩率比gzip提高一倍,压缩性能与lz4、snappy相当甚至更好,是gzip的10倍以上。 zstd...
  • Hive的数据压缩与数据存储

    万次阅读 2019-12-12 15:22:01
    一、hive的数据压缩 MR支持的压缩编码 压缩配置参数 开启Map输出阶段压缩 开启Reduce输出阶段压缩 二、hive的数据存储格式 列式存储和行式存储 TEXTFILE格式 ORC格式 PARQUET格式 三、存储和压缩结合 一...
  • 无损数据压缩LZW算法——C++实现

    千次阅读 多人点赞 2017-11-04 01:16:22
    兹于2017年11月,应《多媒体技术基础》课程实验的要求,本人就基于无损数据压缩LZW算法做了较为深入的理解,用C++语言实现无损数据压缩LZW算法。无损数据压缩LZW算法一、实验目的1.掌握LZW算法的编码过程;2.掌握...
  • Hive 的数据压缩格式怎么选择?

    万次阅读 多人点赞 2021-06-20 23:57:49
    1 数据压缩说明 压缩模式评价 可使用以下三种标准对压缩方式进行评价 压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好 压缩时间:越快越好 已经压缩的格式文件是否可以再分割:可以分割的格式允许单一...
  • Hive的数据压缩介绍及使用

    千次阅读 2019-11-30 12:33:04
    在实际工作当中,hive当中处理的数据,一般都需要经过压缩,前期我们在学习hadoop的时候,已经配置过hadoop的压缩,我们这里的hive也是一样的,可以使用压缩来节省我们的MR处理的网络带宽。     ...
  • 数仓工具—Hive进阶之数据压缩(8)

    万次阅读 2021-01-13 21:19:12
    1. 数据压缩可以发生在哪些阶段 1 输入数据可以压缩后的数据 2 中间的数据可以压缩 3 输出的数据可以压缩 2. hive 仅仅是配置了开启压缩和使用哪种压缩方式,真正的配置是在hadoop 中配置的,而数据的压缩是在...
  • 第七章数据压缩技术

    千次阅读 2016-04-30 10:13:26
    第七章 数据压缩技术 转自:http://www.dataguru.cn/article-3856-1.html     本章导读 前面的章节已经介绍了海量数据的存储、查询、分区、容错等技术,这些技术对于海量数据的处理是必不可少的,但要进一步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 937,508
精华内容 375,003
关键字:

数据压缩