一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

統(tǒng)計(jì)壓縮編碼機(jī)理分析(下篇)

共熵服務(wù)中心 ? 來源:未知 ? 2022-12-26 22:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

58784fd8-8529-11ed-bfe3-dac502259ad0.png

文章轉(zhuǎn)發(fā)自51CTO【ELT.ZIP】OpenHarmony啃論文俱樂部——《統(tǒng)計(jì)壓縮編碼機(jī)理分析》

上篇回顧:《統(tǒng)計(jì)壓縮編碼機(jī)理分析(上篇)》

6.算術(shù)編碼

《上篇》中第五章的“哈夫曼編碼”方法建立在符號(hào)和碼字相對應(yīng)的基礎(chǔ)上。若對信源單符號(hào)進(jìn)行編碼,則符號(hào)間的相關(guān)性就無法考慮:若將 m 個(gè)符號(hào)合起來編碼,第一是會(huì)增加設(shè)備復(fù)雜度,第二是 m+1 個(gè)符號(hào)間以及組間符號(hào)的相關(guān)性還是無法考慮。這就使信源編碼的匹配原則不能充分滿足,編碼效率就有所折損。為了克服這種局限性,研究了非分組碼的編碼方法。

算術(shù)編碼是一種非分組碼,其基本原理是將編碼的消息表示成實(shí)數(shù)0和1之間的一個(gè)間隔,消息越長,編碼表示它的間隔就越小,表示這一間隔所需的二進(jìn)制位就越多。

算數(shù)編碼是一種在有損壓縮與無損壓縮算法中都經(jīng)常使用的一種算法,主要應(yīng)用于圖像壓縮。算數(shù)編碼與其它統(tǒng)計(jì)編碼不同,其它的統(tǒng)計(jì)編碼通常是把輸入的消息分割成符號(hào)后對其進(jìn)行編碼,而算數(shù)編碼則將輸入的字符劃分成若干個(gè)子區(qū)間來代表一個(gè)字符,計(jì)算其概率,進(jìn)行編碼。

6.1基本機(jī)理

算術(shù)編碼的背后是深刻的數(shù)學(xué)思想,簡單來說,它做了這樣一件事情:

58ce5ad6-8529-11ed-bfe3-dac502259ad0.png

58e9778a-8529-11ed-bfe3-dac502259ad0.png

  1. 假設(shè)有一段數(shù)據(jù)需要編碼,統(tǒng)計(jì)里面所有的字符和出現(xiàn)的次數(shù)

  2. 將區(qū)間 [0,1) 連續(xù)劃分成多個(gè)子區(qū)間,每個(gè)子區(qū)間代表一個(gè)上述字符, 區(qū)間的大小正比于這個(gè)字符在文中出現(xiàn)的概率 p。概率越大,則區(qū)間越大。所有的子區(qū)間加起來正好是 [0,1)

  3. 編碼從一個(gè)初始區(qū)間 [0,1) 開始,設(shè)置:

  4. 不斷讀入原始數(shù)據(jù)的字符,找到這個(gè)字符所在的區(qū)間,例如 [ L, H ),更新:

  5. 最后將得到的區(qū)間 [low, high)中任意一個(gè)小數(shù)以二進(jìn)制形式輸出即得到編碼的數(shù)據(jù):

6.2編碼過程

給出下面一段十分簡單的原始數(shù)據(jù):

ARBER

像所有統(tǒng)計(jì)編碼一樣,統(tǒng)計(jì)各字符出現(xiàn)的次數(shù)與概率:

字符 次數(shù) 概率
A 1 0.2
B 1 0.2
E 1 0.2
R 2 0.4

將這幾個(gè)字符的區(qū)間在 [0,1) 上按照概率大小連續(xù)一字排開,我們得到一個(gè)劃分好的 [0,1)區(qū)間:

590151ca-8529-11ed-bfe3-dac502259ad0.png

開始編碼,初始區(qū)間是 [0,1)。注意這里又用了區(qū)間這個(gè)詞,不過這個(gè)區(qū)間不同于上面代表各個(gè)字符的概率區(qū)間 [0,1)。這里我們可以稱之為編碼區(qū)間,這個(gè)區(qū)間是會(huì)變化的,確切來說是不斷變小。我們將編碼過程用下圖完整地表示出來:

591bb7cc-8529-11ed-bfe3-dac502259ad0.png

我們對其進(jìn)行步驟拆解

5941c84a-8529-11ed-bfe3-dac502259ad0.png

5959b7fc-8529-11ed-bfe3-dac502259ad0.png

59746e8a-8529-11ed-bfe3-dac502259ad0.png

5990b496-8529-11ed-bfe3-dac502259ad0.png

  1. 剛開始編碼區(qū)間是 [0,1),即:

  2. 第一個(gè)字符A的概率區(qū)間是 [0,0.2),則 L = 0,H = 0.2,更新:

  3. 第二個(gè)字符R的概率區(qū)間是 [0.6,1),則 L = 0.6,H = 1,更新:

  4. 第三個(gè)字符B的概率區(qū)間是 [0.2,0.4),則 L = 0.2,H = 0.4,更新:

我們可以看到一個(gè)不斷變化的小數(shù)編碼區(qū)間。每次編碼一個(gè)字符,就在現(xiàn)有的編碼區(qū)間上,按照概率比例取出這個(gè)字符對應(yīng)的子區(qū)間。例如一開始A落在0到0.2上,因此編碼區(qū)間縮小為 [0,0.2),第二個(gè)字符是R,則在 [0,0.2)上按比例取出R對應(yīng)的子區(qū)間 [0.12,0.2),以此類推。每次得到的新的區(qū)間都能精確無誤地確定當(dāng)前字符,并且保留了之前所有字符的信息,因?yàn)樾碌木幋a區(qū)間永遠(yuǎn)是在之前的子區(qū)間。最后我們會(huì)得到一個(gè)長長的小數(shù),這個(gè)小數(shù)即神奇地包含了所有的原始數(shù)據(jù),不得不說這真是一種非常巧妙的思想。

6.3解碼過程

如果理解了編碼的原理,那么解碼的方法顯而易見,就是編碼過程的逆推。從編碼得到的小數(shù)開始,不斷地尋找小數(shù)落在了哪個(gè)概率區(qū)間,就能將原來的字符一個(gè)個(gè)地找出來。例如得到的小數(shù)是0.14432,則第一個(gè)字符顯然是A,因?yàn)樗湓诹?[0,0.2)上,接下來再看0.14432落在了 [0,0.2)區(qū)間的哪一個(gè)相對子區(qū)間,發(fā)現(xiàn)是 [0.6,1), 就能找到第二個(gè)字符是R,依此類推。在此不再贅述具體步驟。

6.4算法實(shí)現(xiàn)

#include 
#include 
#include 
#include 


char inStr[100], chSet[20]; //輸入字符串和字符集
float P[20];                    //每個(gè)字符的概率
float pZone[20];              //概率區(qū)間
int strLen;         //輸入字符串長度
int chNum;          //字符集中字符個(gè)數(shù)
int binary[100];
float infoLen;          //信息量大小


void compress();        //編碼函數(shù)
void uncompress();      //解碼函數(shù)


int main()
{
    
    int i,j;
            
    printf("input the length of char set:
");
    scanf("%d", &chNum);
    getchar();


    printf("input the char and its p
");
    for (i=0; i < chNum; i++) {
        printf("input char: ");
        scanf("%c", &chSet[i]);
            
        getchar();
        //printf("sssss%c  ", chSet[i]); 
        printf("
input its p: ");
        scanf("%f",&P[i]);
        getchar();
        printf("
");
    }
    /* test
    for (i = 0; i < chNum; ++i)
         printf("%c<-------------->%f
", chSet[i], P[i]);
    */


    // 計(jì)算概率區(qū)間
    pZone[0] = 0;
    for (i=1; i < chNum; ++i)
        pZone[i] = pZone[i-1] + P[i-1];


    printf("input the string 
");
    fgets(inStr, 100, stdin);
    strLen = strlen(inStr);
    /************* test ***************/
    printf("the string is: 
");
    puts(inStr);


    printf("*********** compress **************
");
    compress();
    printf("
*********** uncompress **************
");
    uncompress();
    return 0; 


}


void compress()
{
    float low = 0, high = 1;
    float L, H, zlen = 1;
    float cp;       //輸入字符的概率
    float result;       //結(jié)果
    int i, j;


    for (i=0; i < strLen; i++) {
        for (j=0; j < chNum; j++) {
            if (inStr[i] == chSet[j]) {
                
                //cp = P[j];
                //L = pZone[j];
                low = low + zlen * pZone[j];
                zlen *= P[j]; 
                break;
            }
        }
        //low = low + zlen * L;
        //zlen *= cp; 
        
    }
    result = low;
    
    printf("the result is %f
", result);
    
    infoLen = log(1/zlen) / log(2);     //計(jì)算香農(nóng)信息量


    if(infoLen > (int)infoLen)
        infoLen = (int)infoLen + 1;
    else
        infoLen = (int)infoLen;


    for (i=0; i < infoLen; i++) {
        result *= 2;
        
        if (result > 1) {
            result = result - 1;
            binary[i] = 1;


        } else if (result < 1) {
                binary[i] = 0;


        } else {
            break;
        }


    }


    if (i >= infoLen) {
        for (j=i; j >= 1; j--) {        
            binary[j-1] = (binary[j-1]+1)%2;
            if (binary[j-1] == 1)
                break;  
        }
    }


    printf("****************** the compress result*****************
");
    for (j=0; j < i; j++)
        printf("%d ", binary[j]);
}


void uncompress()
{ 
    int i,j;
    float w = 0.5;
    float deResult=0;
    
    float newLow,newLen;
    float low=0,zlen=1;


    for (i=0; i < infoLen; i++) {
        deResult += w*binary[i];
        w *= 0.5;
    }
    printf("uncompress to ten:%f
", deResult);


    printf("uncompress result:
");
    for (i=0; i < strLen; i++) {
        for (j=chNum; j > 0; j--) {
            newLow = low;
            newLen = zlen;
                newLow += newLen * pZone[j-1];      
            newLen *= P[j-1];   
            if (deResult >= newLow) {
                low=newLow;
                zlen=newLen;
                printf("%c ",chSet[j-1]);
                break;
            }
        }
    }
    
}
6.5與哈夫曼編碼的比較我們首先回顧一下哈夫曼編碼,換一組數(shù)據(jù)并統(tǒng)計(jì)字符的出現(xiàn)次數(shù),生成哈夫曼樹,我們可以得到以下字符編碼集:
字符 次數(shù) 編碼
a 3 0
b 3 1
c 2 10
d 1 110
e 2 111
仔細(xì)觀察編碼所表示的小數(shù),從0.0到0.111,其實(shí)就是構(gòu)成了算數(shù)編碼中的各個(gè)概率區(qū)間,并且概率越大,所用的bit數(shù)越少,區(qū)間則反而越大。如果用哈夫曼編碼一段數(shù)據(jù)abcde,則得到:000110110111

如果點(diǎn)上小數(shù)點(diǎn),把它也看成一個(gè)小數(shù),其實(shí)和算數(shù)編碼的形式很類似,不斷地讀入字符,找到它應(yīng)該落在當(dāng)前區(qū)間的哪一個(gè)子區(qū)間,整個(gè)編碼過程形成一個(gè)不斷收攏變小的區(qū)間。

由此我們可以看到這兩種編碼,或者說熵編碼的本質(zhì)。概率越小的字符,用更多的bit去表示,這反映到概率區(qū)間上就是,概率小的字符所對應(yīng)的區(qū)間也小,因此這個(gè)區(qū)間的上下邊際值的差值越小,為了唯一確定當(dāng)前這個(gè)區(qū)間,則需要更多的數(shù)字去表示它。我們?nèi)砸允M(jìn)制來說明,例如大區(qū)間0.2到0.3,我們需要0.2來確定,一位足以表示;但如果是小的區(qū)間0.11112到0.11113,則需要0.11112才能確定這個(gè)區(qū)間,編碼時(shí)就需要5位才能將這個(gè)字符確定。其實(shí)編碼一個(gè)字符需要的bit數(shù)就等于 -log ( p ),這里是十進(jìn)制,所以log應(yīng)以10為底,在二進(jìn)制下以2為底,也就是香農(nóng)公式里的形式。

哈夫曼編碼的不同之處就在于,它所劃分出來的子區(qū)間并不是嚴(yán)格按照概率的大小等比例劃分的。例如上面的d和e,概率其實(shí)是不同的,但卻得到了相同的子區(qū)間大小0.125;再例如c,和d,e構(gòu)成的子樹,c應(yīng)該比d,e的區(qū)間之和要小,但實(shí)際上它們是一樣的都是0.25。我們可以將哈夫曼編碼和算術(shù)編碼在這個(gè)例子里的概率區(qū)間做個(gè)對比:

59a74e9a-8529-11ed-bfe3-dac502259ad0.png

這說明哈夫曼編碼可以看作是對算數(shù)編碼的一種近似,它并不是完美地呈現(xiàn)原始數(shù)據(jù)中字符的概率分布。也正是因?yàn)檫@一點(diǎn)微小的偏差,使得哈夫曼編碼的壓縮率通常比算數(shù)編碼略低一些?;蛘哒f,算數(shù)編碼能更逼近香農(nóng)給出的理論熵值。

7.數(shù)據(jù)壓縮的定義、背景與分類

首先我們要知道什么是數(shù)據(jù)壓縮。數(shù)據(jù)壓縮是指在不丟失有用信息的前提下,縮減數(shù)據(jù)量以減少儲(chǔ)存空間,提高其傳輸、儲(chǔ)存和處理效率,或按照一定的算法對數(shù)據(jù)重新組織,減少數(shù)據(jù)的冗余和存儲(chǔ)空間的一種技術(shù)方法。

那么為什么會(huì)出現(xiàn)數(shù)據(jù)壓縮這門技術(shù)呢?一門技術(shù)的快速發(fā)展必然有其背景,有其誕生的必要性。

數(shù)據(jù)壓縮背景摘要:在信息儲(chǔ)存和數(shù)據(jù)傳輸日益增長的今天,數(shù)據(jù)壓縮變得越來越重要,數(shù)據(jù)壓縮是一種用來減小數(shù)據(jù)大小的技術(shù)。當(dāng)一些巨大的文件必須通過網(wǎng)絡(luò)傳輸存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備上,且其大小超過數(shù)據(jù)存儲(chǔ)的容量或?qū)⑾拇罅康木W(wǎng)絡(luò)傳輸帶寬時(shí),這是非常有用的。隨互聯(lián)網(wǎng)和資源有限的移動(dòng)設(shè)備的出現(xiàn),數(shù)據(jù)壓縮變得更加重要。它可以有效地用于節(jié)省儲(chǔ)存空間和帶寬,從而減少了下載時(shí)間.

數(shù)據(jù)壓縮算法發(fā)展至今,已經(jīng)有了相當(dāng)多的算法,按數(shù)據(jù)質(zhì)量可分為有損壓縮和無損壓縮兩大類。無損算法可以從壓縮的信息中精確地重構(gòu)原始消息,有損算法只能近似地重構(gòu)原始消息。

8.游程編碼(RLE)

設(shè)想一下,一旦一個(gè)像素呈現(xiàn)出一種特定的顏色(黑色或白色),下面的像素極有可能也是相同的顏色。因此,與其單獨(dú)編碼每個(gè)像素的顏色,我們可以簡單地編碼每個(gè)顏色的運(yùn)行長度。RLE是一種非常簡單的數(shù)據(jù)壓縮形式,其中數(shù)據(jù)序列(稱為游程,重復(fù)的字符串)存儲(chǔ)在兩個(gè)部分:單個(gè)數(shù)值和計(jì)數(shù)。這對于包含許多這樣的運(yùn)行的數(shù)據(jù)是最有用的,例如,簡單的圖形圖像,如圖標(biāo)、線條圖和動(dòng)畫。但它對于運(yùn)行次數(shù)不多的文件是沒有用的,因?yàn)樗赡軙?huì)大大增加文件的大小。

例如:純白色背景上的純黑色文本,b 代表一個(gè)黑色像素,w 代表一個(gè)白色像素:wwwwwbwwwwwbbbwwwwwbwwwww 用RLE表示為:5w1b5w3b5w1b5w

由于游程編碼執(zhí)行無損數(shù)據(jù)壓縮,它非常適合基于調(diào)色板的圖像,如紋理。但通常不應(yīng)用于現(xiàn)實(shí)的圖像,如照片。另外,游程編碼用于傳真機(jī)非常高效,因?yàn)榇蠖鄶?shù)傳真文件都有很多空白,偶爾會(huì)有黑色的干擾。

9.Lempel-Ziv算法

lempel-Ziv 算法是一種基于字典的編碼算法,而以往的算法往往基于概率編碼,它是文件無損壓縮的首選方法。這主要是由于它對不同文件格式的適應(yīng)性但是對于小文件,字典的長度可能會(huì)超過原始文件的長度,但是對于大文件,這種方法是非常有效的。

Ziv 和 Lempel 在1977年和1978年的兩篇獨(dú)立論文中描述了該算法的兩個(gè)主要變體,通常被稱為 LZ77和 LZ78。

LZ77 算法基于滑動(dòng)窗口的思想,該算法只在距離當(dāng)前位置固定距離內(nèi)的窗口查找匹配項(xiàng)。而 LZ78 算法基于一種更保守的方法向字典中添加字符串。

lempel-ziv-welch(LZW) 是目前使用最多的 Lempel-Ziv 算法。它是在 LZ77 和 LZ78 壓縮算法的基礎(chǔ)上改進(jìn)的。編碼器建立一個(gè)自適應(yīng)字典來表示變長字符串,不需要任何先驗(yàn)概率信息。解碼器根據(jù)接收到的代碼動(dòng)態(tài)地在編碼器中構(gòu)建相同的字典。

現(xiàn)在 LZW 應(yīng)用于 GIF 圖像,UNIX 壓縮等。

基本步驟:

  1. 初始化字典。

  2. 將輸入數(shù)據(jù)的符號(hào)按順序組合到緩沖區(qū)中,直到在字典中找到最長的字符串

  3. 在緩沖區(qū)中發(fā)送表示的代碼。

  4. 將緩沖區(qū)中的字符串與下一個(gè)空代碼中的下一個(gè)符號(hào)結(jié)合保存到字典中。

  5. 清空緩沖區(qū),然后重復(fù)步驟 2~5,直到全部數(shù)據(jù)結(jié)束。

59c5340a-8529-11ed-bfe3-dac502259ad0.png

表3是一個(gè)LZW的例子,輸入字符串為ABABBABCABABBA,初始碼為1、2、3,分別表示A、B、C。

編碼后的字符串為“124523461”。14個(gè)字符壓縮為9個(gè)字符。因此壓縮比為14/9=1.56。

9.1LZ編碼的應(yīng)用

在LZ的變體中,最流行的是LZW算法然而,LZW最初是實(shí)用最多的算法,專利問題導(dǎo)致越來越多的使用LZ算法。LZ算法最受歡迎的實(shí)現(xiàn)是Phil Katz最初設(shè)計(jì)的deflate算法。Deflate是一種無損數(shù)據(jù)壓縮算法,使用了LZ算法和哈夫曼算法的組合,下面列舉LZ算法的主要應(yīng)用:

9.1.1文件壓縮 UNIX 壓縮

UNIX compress 命令是LZW最早的應(yīng)用之一。字典的大小是自適應(yīng)的。當(dāng)字典被填滿時(shí),大小逐漸增加一倍。代碼字的最大大小bmax可以由用戶設(shè)置為9到16之間,16位是默認(rèn)值。而一旦字典包含2bmax條目,壓縮就會(huì)成為一種靜態(tài)字典編碼技術(shù),此時(shí)算法監(jiān)視壓縮比。如果壓縮比低于閾值,則將刷新字典,并重新啟動(dòng)字典構(gòu)建過程。這樣一來,字典總是能反映源的地方特征。

9.1.2圖像壓縮 gif 格式

圖形交換格式(GIF)是 Compuserve 信息服務(wù)公司開發(fā)的圖形圖像編碼格式。它是 LZW 算法的另一種實(shí)現(xiàn),與 Unix 中的 compress 命令非常相似,正如我們在前面的應(yīng)用程序中提到的那樣。

9.1.3圖像壓縮 png 格式

PNG 標(biāo)準(zhǔn)是互聯(lián)網(wǎng)上最早開發(fā)的標(biāo)準(zhǔn)之一。1994 年12 月,Unisys 公司(該公司從 Sperry 那里獲得了 LZW的專利)和 CompuServe 公司宣布,他們將開始向支持GIF 的軟件的作者收取版稅。該公告導(dǎo)致了數(shù)據(jù)壓縮領(lǐng)域的一場革命,行成了Usenet組comp.compression的核心。社區(qū)決定開發(fā)一種無專利的 GIF 替代品,三個(gè)月內(nèi) PNG 誕生了。Modem sV.42 上的壓縮ITU-T 建議 V.42 之二是為通過電話網(wǎng)絡(luò)使用而制定的壓縮標(biāo)準(zhǔn),并附有 C CITT 建議 V.42 中所述的糾錯(cuò)程序。該算法用于連接計(jì)算機(jī)和遠(yuǎn)程用戶的調(diào)制解調(diào)器。該算法有兩種運(yùn)行模式和壓縮模式。在透明模式下,數(shù)據(jù)以不壓縮的形式傳輸,在壓縮模式下,數(shù)據(jù)使用LZW算法進(jìn)行壓縮。

10.多媒體壓縮JPEG和MPEG

10.1背景

媒體圖像已經(jīng)成為日常生活中一個(gè)至關(guān)重要且無處不在的組成部分。圖像中編碼的信息量是相當(dāng)大的。即使有了帶寬和儲(chǔ)存能力的進(jìn)步,如果圖像不被壓縮,許多應(yīng)用程序的成本將會(huì)太高。

10.2圖像壓縮:JPEG壓縮算法

JPEG用于靜態(tài)圖像,圖像壓縮是減少表示數(shù)字圖像所需的數(shù)據(jù)量的過程,這是通過刪除所有冗余或不必要的信息來實(shí)現(xiàn)的。一個(gè)未壓縮的圖像需要大量的數(shù)據(jù)來表示。

編碼算法:

1、顏色空間轉(zhuǎn)換

如果顏色分量是獨(dú)立的(不相關(guān)的),則可以獲得最好的 壓縮結(jié)果,例如在YCbCr中,大部分信息集中在亮度上,而色度上的信息較少。RGB顏色分量可以通過線性變換轉(zhuǎn)換為YCbCr分量,如下式:

5a11600a-8529-11ed-bfe3-dac502259ad0.png

2、色度下降采樣

使用YCbCr顏色空間,我們還可以通過壓縮Cb和Cr分量的分辨率來節(jié)省空間。它們是色度分量,我們可以減少它們以使用圖像壓縮。由于亮度對眼睛的重要性,我們不需要色度像亮度一樣頻繁,所以我們可以對其進(jìn)行下降采樣。因此可以除去部分Cb和Cr的元素。因此,例如將RGB44格式轉(zhuǎn)換為YCbCr42的格式,這樣就可以獲得一個(gè)1:5的數(shù)據(jù)壓縮比,不過此步驟是一個(gè)可選的過程。

3、離散余弦變換(DCT)

在這一步,每88塊的分量(Y,Cb,Cr)被轉(zhuǎn)換成頻域表示。DCT方程是一個(gè)相當(dāng)復(fù)雜的方程,有兩個(gè)余弦系數(shù)。細(xì)節(jié)參考JPEG標(biāo)準(zhǔn)。

4、量化

對人眼來說,亮度比色度更重要。對眼睛來說,在大范圍內(nèi)看到亮度的微小差異比高頻亮度變化的確切強(qiáng)度更容易分辨。利用這一特性,我們可以大大減少高頻成分中的信息。JPEG編碼通過簡單地將頻率域中的每個(gè)分量除以該分量中的一個(gè)常數(shù),然后四舍五入到最近的整數(shù)來實(shí)現(xiàn)這一點(diǎn)。因此,許多高頻分量被四舍五入到零,其余大部分分量變成了小的正數(shù)或負(fù)數(shù),占用更少的比特來儲(chǔ)存。

5、熵編碼

熵編碼是一種無損數(shù)據(jù)壓縮的方法。在這里,我們將圖像組件排序?yàn)殇忼X形,然后使用游程編碼(RLE)算法,將相似的頻率連接在一起,以壓縮序列。

6、哈夫曼算法

應(yīng)用前面的步驟,我們得到的數(shù)據(jù)就是DCT系數(shù)序列。這一步即是最后一步,我們用哈夫曼編碼或者算數(shù)壓縮算法來壓縮這些系數(shù)。該方案主要采用Huffman壓縮,將其視為第二次無損壓縮。

5a2fda8a-8529-11ed-bfe3-dac502259ad0.png

10.3視頻壓縮:MPEG壓縮算法

MPEG壓縮算法的基本思想是將離散樣本流轉(zhuǎn)換為符號(hào)的比特流。以減少占用空間,理論上,視頻流是一組離散圖像。MPEG使用這種連續(xù)幀之間的特殊或時(shí)間關(guān)系來壓縮視頻流。在一段數(shù)據(jù)中,利用這些關(guān)系的技術(shù)越有效,對數(shù)據(jù)的壓縮就越有效。

5a5189f0-8529-11ed-bfe3-dac502259ad0.png

在MPEG編碼算法中,我們只對視頻序列中的新部分和視頻中運(yùn)動(dòng)部分的信息進(jìn)行編碼。例如,考慮圖9,上面的三張圖。對于壓縮我們只需考慮新的部分,如圖9,我們只需要考慮底部的三個(gè)序列。視頻壓縮的基本原理是圖像對圖像的預(yù)測。一組圖像中的第一個(gè)圖像是i幀。這些幀顯示開始一個(gè)心得場景,因此不需要被壓縮,因?yàn)樗麄儧]有依賴于該圖像之外。但其他幀可以使用第一張圖片的一部分作為參考。從一個(gè)參考圖像預(yù)測的圖像稱為p幀,從兩個(gè)其他參考圖像雙向預(yù)測的圖像稱為B幀。因此,總的來說,我們將有以下幀MPEG編碼:

  • I-frames:獨(dú)立的;不需要參考幀預(yù)測

  • P幀:從最后一個(gè)I或P參考幀預(yù)測

  • B-frames:雙向:從兩個(gè)參考幀預(yù)測,一個(gè)在過去,一個(gè)在未來,將考慮最佳匹配。

5a8d88ce-8529-11ed-bfe3-dac502259ad0.png

MPEG應(yīng)用程序:MPEG在現(xiàn)實(shí)世界中有很多的應(yīng)用。我們在此列舉其中一些:

1、有限電視。一些電視系統(tǒng)通過有線電視線路發(fā)送MPEG-II節(jié)目

2、直接廣播衛(wèi)星。MPEG視頻流被跌形/解碼器接收,它提取的數(shù)據(jù)為標(biāo)準(zhǔn)NTSC電視信號(hào)。

3、媒體的金庫。Silicon Graphics、Storage Tech和其他供應(yīng)商正在生產(chǎn)按需視頻系統(tǒng),在一個(gè)安裝上有兩萬個(gè)文件MPEG編碼的電影。

4、實(shí)時(shí)編碼,這仍是專業(yè)人士的專屬領(lǐng)域。結(jié)合特殊用途的并行硬件,實(shí)時(shí)編碼器的成本可達(dá)2萬至5萬美元。

11.今天的數(shù)據(jù)壓縮:應(yīng)用程序和問題

11.1網(wǎng)絡(luò)

今天隨著用戶數(shù)量的增加和遠(yuǎn)程辦公,以及使用云計(jì)算的應(yīng)用程序部署模型的出現(xiàn),更多正在傳輸?shù)臄?shù)據(jù)對網(wǎng)絡(luò)連接的壓力導(dǎo)致了額外的問題。

數(shù)據(jù)壓縮重要的作用之一是將其應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)。然而,在帶寬有限的網(wǎng)絡(luò)環(huán)境下,實(shí)現(xiàn)高的壓縮比是提高應(yīng)用程序性能的必要條件,如果壓縮比過低,網(wǎng)絡(luò)將保持飽和,性能增益將非常小。同樣,如果壓縮速度過低,壓縮機(jī)也會(huì)成為瓶頸。許多網(wǎng)絡(luò)數(shù)據(jù)的傳輸優(yōu)化解決方案都只關(guān)注網(wǎng)絡(luò)層的優(yōu)化。這些解決方案不僅缺乏靈活性,而且沒有包含能夠進(jìn)一步增強(qiáng)通過網(wǎng)絡(luò)鏈接傳輸數(shù)據(jù)的應(yīng)用程序性能的優(yōu)化。

11.2基于報(bào)文或會(huì)話的壓縮

許多網(wǎng)絡(luò)壓縮系統(tǒng)是基于數(shù)據(jù)包的?;跀?shù)據(jù)包的壓縮系統(tǒng)使用解壓器緩沖發(fā)送到遠(yuǎn)程網(wǎng)絡(luò)的數(shù)據(jù)包。然后,這些數(shù)據(jù)包在單個(gè)時(shí)間內(nèi)或作為一個(gè)組被壓縮,然后發(fā)送到解壓器,在那里這個(gè)過程被逆轉(zhuǎn)。

當(dāng)壓縮數(shù)據(jù)包時(shí),這些系統(tǒng)必須在將小數(shù)據(jù)包寫入網(wǎng)絡(luò)和執(zhí)行額外的工作來聚合和封裝多個(gè)數(shù)據(jù)包寫入網(wǎng)絡(luò)和執(zhí)行額外的工作來聚合和封裝多個(gè)數(shù)據(jù)包之間做出選擇,這兩種選擇都不會(huì)產(chǎn)生最佳效果。向網(wǎng)絡(luò)寫入小數(shù)據(jù)包會(huì)增加TCP/IP報(bào)頭的開銷,而聚合和封裝數(shù)據(jù)包會(huì)增加流的封裝報(bào)頭。

11.3字典壓縮大小

幾乎所有壓縮實(shí)用程序的一個(gè)共同限制是有限的儲(chǔ)存空間。

與對網(wǎng)絡(luò)的請求相似,并不是所有在網(wǎng)絡(luò)上傳輸?shù)淖止?jié)都以相同的頻率重復(fù)。一些字節(jié)模式出現(xiàn)的頻率很高,因?yàn)樗麄兪橇餍形臋n或公共網(wǎng)絡(luò)協(xié)議的一部分。其他字節(jié)模式只出現(xiàn)一次,并且永遠(yuǎn)不重復(fù)。經(jīng)常重復(fù)的字節(jié)序列和不經(jīng)常重復(fù)的字節(jié)序列之間的關(guān)系可以在Zipfs定律中看到。

11.4基于塊或基于字節(jié)的壓縮

基于塊的壓縮系統(tǒng)儲(chǔ)存先前在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)片段。當(dāng)?shù)诙斡龅竭@些塊時(shí),對這些網(wǎng)塊的引用被傳輸?shù)竭h(yuǎn)程設(shè)備,然后遠(yuǎn)程設(shè)備重新構(gòu)建原始數(shù)據(jù)。

基于塊的系統(tǒng)的一個(gè)關(guān)鍵缺點(diǎn)是,重復(fù)的數(shù)據(jù)幾乎從不與塊的長度完全相同。因此,匹配通常只是部分匹配,不壓縮一些重復(fù)的數(shù)據(jù)。如圖12說明了使用256字節(jié)塊的系統(tǒng)試圖壓縮512自治街的數(shù)據(jù)時(shí)會(huì)發(fā)生什么。

5ac767e2-8529-11ed-bfe3-dac502259ad0.png

11.5能源效率

能源效率領(lǐng)域,尤其是無線傳感器網(wǎng)絡(luò)是當(dāng)今世界最熱門的網(wǎng)絡(luò)研究領(lǐng)域之一。無線傳感器網(wǎng)絡(luò)由分布在空間上的傳感器組成,用于檢測物理或環(huán)境條件,如溫度、聲音、振動(dòng)、壓力、運(yùn)動(dòng)或污染物,并協(xié)同將他們的數(shù)據(jù)通過網(wǎng)絡(luò)傳遞到主要位置。而傳感器的大小和成本限制導(dǎo)致了資源的限制,如能源、內(nèi)存、計(jì)算速度和通信帶寬。巨大共享傳感器之間的數(shù)據(jù)需要能量高效、低延遲和高精度。

目前,如果傳感器系統(tǒng)設(shè)計(jì)者想要壓縮獲得的數(shù)據(jù),他們必須卡法特定于應(yīng)用程序的壓縮算法,或者使用非為資源所限的傳感器節(jié)點(diǎn)設(shè)計(jì)的現(xiàn)成算法。

主要的嘗試是實(shí)現(xiàn)一種專門為傳感器網(wǎng)絡(luò)設(shè)計(jì)的傳感器Lempel-Ziv(S-LZW)壓縮算法。針對無線傳感網(wǎng)絡(luò)中設(shè)計(jì)高效數(shù)據(jù)壓縮算法的趨勢,Vidhyapriyal和P.Vanathi設(shè)計(jì)并實(shí)現(xiàn)了兩種集成了最短路徑路由技術(shù)的無損數(shù)據(jù)壓縮算法,以減少原始數(shù)據(jù)的大小,并在傳感器網(wǎng)絡(luò)中實(shí)現(xiàn)速率、能量和精度之間的最佳權(quán)衡。

12.總結(jié)

在數(shù)據(jù)存儲(chǔ)和信息傳輸量不斷增長的今天,數(shù)據(jù)壓縮技術(shù)發(fā)揮著重要作用。即使在帶寬和存儲(chǔ)能力方面有了進(jìn)步,如果數(shù)據(jù)沒有被壓縮,許多應(yīng)用程序的成本將太高,用戶無法使用他們。本文我們嘗試介紹了無損壓縮和有損壓縮兩種壓縮類型,以及數(shù)據(jù)壓縮中的一些主要概念、算法和方法,并討論了他們的不同應(yīng)用和工作方式,然后我們探討了兩個(gè)主要的日常應(yīng)用;以JPEG為例進(jìn)行圖像壓縮,以MPEG為例進(jìn)行了視頻壓縮。最后我們討論了當(dāng)今數(shù)據(jù)壓縮的主要應(yīng)用和存在的問題。

< 本文完>

ELT.ZIP是誰?

ELT<=>Elite(精英),.ZIP為壓縮格式,ELT.ZIP即壓縮精英。

成員:

上海工程技術(shù)大學(xué)大二在校生閆旭

合肥師范學(xué)院大二在校生楚一凡

清華大學(xué)大二在校生趙宏博

成都信息工程大學(xué)大一在校生高云帆

黑龍江大學(xué)大一在校生高鴻萱

山東大學(xué)大三在校生張智騰

5af9e596-8529-11ed-bfe3-dac502259ad0.png

ELT.ZIP是來自6個(gè)地方的同學(xué),在OpenHarmony成長計(jì)劃啃論文俱樂部里,與來自華為、軟通動(dòng)力、潤和軟件、拓維信息、深開鴻等公司的高手一起,學(xué)習(xí)、研究、切磋操作系統(tǒng)技術(shù)...

寫在最后

OpenHarmony 成長計(jì)劃—“啃論文俱樂部”(以下簡稱“啃論文俱樂部”)是在 2022年 1 月 11 日的一次日?;顒?dòng)中誕生的。截至 3 月 31 日,啃論文俱樂部已有 87 名師生和企業(yè)導(dǎo)師參與,目前共有十二個(gè)技術(shù)方向并行探索,每個(gè)方向都有專業(yè)的技術(shù)老師帶領(lǐng)同學(xué)們通過啃綜述論文制定技術(shù)地圖,按“降龍十八掌”的學(xué)習(xí)方法編排技術(shù)開發(fā)內(nèi)容,并通過專業(yè)推廣培養(yǎng)高校開發(fā)者成為軟件技術(shù)學(xué)術(shù)級人才。

啃論文俱樂部的宗旨是希望同學(xué)們在開源活動(dòng)中得到軟件技術(shù)能力提升、得到技術(shù)寫作能力提升、得到講解技術(shù)能力提升。大學(xué)一年級新生〇門檻參與,已有俱樂部來自多所高校的大一同學(xué)寫出高居榜首的技術(shù)文章。

如今,搜索“啃論文”,人們不禁想到、而且看到的都是我們——OpenHarmony 成長計(jì)劃—“啃論文俱樂部”的產(chǎn)出。

5b63cd08-8529-11ed-bfe3-dac502259ad0.jpg

5bafa57a-8529-11ed-bfe3-dac502259ad0.jpg

5bce522c-8529-11ed-bfe3-dac502259ad0.jpg

OpenHarmony開源與開發(fā)者成長計(jì)劃—“啃論文俱樂部”學(xué)習(xí)資料合集

1)入門資料:啃論文可以有怎樣的體驗(yàn)

https://docs.qq.com/slide/DY0RXWElBTVlHaXhi?u=4e311e072cbf4f93968e09c44294987d

2)操作辦法:怎么從啃論文到開源提交以及深度技術(shù)文章輸出https://docs.qq.com/slide/DY05kbGtsYVFmcUhU

3)企業(yè)/學(xué)校/老師/學(xué)生為什么要參與 & 啃論文俱樂部的運(yùn)營辦法https://docs.qq.com/slide/DY2JkS2ZEb2FWckhq

4)往期啃論文俱樂部同學(xué)分享會(huì)精彩回顧:

同學(xué)分享會(huì)No1.成長計(jì)劃啃論文分享會(huì)紀(jì)要(2022/02/18)https://docs.qq.com/doc/DY2RZZmVNU2hTQlFY

同學(xué)分享會(huì)No.2 成長計(jì)劃啃論文分享會(huì)紀(jì)要(2022/03/11)https://docs.qq.com/doc/DUkJ5c2NRd2FRZkhF

同學(xué)們分享會(huì)No.3 成長計(jì)劃啃論文分享會(huì)紀(jì)要(2022/03/25)

https://docs.qq.com/doc/DUm5pUEF3ck1VcG92?u=4e311e072cbf4f93968e09c44294987d

現(xiàn)在,你是不是也熱血沸騰,摩拳擦掌地準(zhǔn)備加入這個(gè)俱樂部呢?當(dāng)然歡迎啦!啃論文俱樂部向任何對開源技術(shù)感興趣的大學(xué)生開發(fā)者敞開大門。

5bebb8d0-8529-11ed-bfe3-dac502259ad0.png

掃碼添加 OpenHarmony 高校小助手,加入“啃論文俱樂部”微信群

后續(xù),我們會(huì)在服務(wù)中心公眾號(hào)陸續(xù)分享一些 OpenHarmony 開源與開發(fā)者成長計(jì)劃—“啃論文俱樂部”學(xué)習(xí)心得體會(huì)和總結(jié)資料。記得呼朋引伴來看哦。


原文標(biāo)題:統(tǒng)計(jì)壓縮編碼機(jī)理分析(下篇)

文章出處:【微信公眾號(hào):開源技術(shù)服務(wù)中心】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 開源技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    389

    瀏覽量

    8172
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3851

    瀏覽量

    18576

原文標(biāo)題:統(tǒng)計(jì)壓縮編碼機(jī)理分析(下篇)

文章出處:【微信號(hào):開源技術(shù)服務(wù)中心,微信公眾號(hào):共熵服務(wù)中心】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    第十五章 DAC (下篇)

    本篇文章為第十五章DAC(下篇),介紹三個(gè)例程:DAC_OutDMASineWave用DMA輸出正弦波,DAC_OutNoiseWave輸出噪聲波,DAC_OutTriangleWave生成三角波,均有初始化、波形配置及串口調(diào)試功能。
    的頭像 發(fā)表于 05-28 15:39 ?513次閱讀
    第十五章 DAC (<b class='flag-5'>下篇</b>)

    電機(jī)驅(qū)動(dòng)用長電纜破壞機(jī)理分析及防護(hù)

    有效地保護(hù)電纜絕緣。純分享帖,需要者可點(diǎn)擊附件獲取完整資料~~~*附件:電機(jī)驅(qū)動(dòng)用長電纜破壞機(jī)理分析及防護(hù).pdf 【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 04-26 01:14

    毫米波設(shè)計(jì)白皮書系列 | 優(yōu)化射頻壓縮安裝連接器的性能 下篇

    /前言 接上文:毫米波設(shè)計(jì)白皮書系列 | 優(yōu)化射頻壓縮安裝連接器的性能 中篇 基于建模和測量數(shù)據(jù),本白皮書調(diào)查了錯(cuò)位和針腳壓縮如何影響實(shí)際設(shè)計(jì)。它還解釋了如何檢測和避免問題,以優(yōu)化性能并完成成功
    發(fā)表于 03-26 16:08 ?277次閱讀
    毫米波設(shè)計(jì)白皮書系列 | 優(yōu)化射頻<b class='flag-5'>壓縮</b>安裝連接器的性能 <b class='flag-5'>下篇</b>

    詳解半導(dǎo)體集成電路的失效機(jī)理

    半導(dǎo)體集成電路失效機(jī)理中除了與封裝有關(guān)的失效機(jī)理以外,還有與應(yīng)用有關(guān)的失效機(jī)理。
    的頭像 發(fā)表于 03-25 15:41 ?689次閱讀
    詳解半導(dǎo)體集成電路的失效<b class='flag-5'>機(jī)理</b>

    封裝失效分析的流程、方法及設(shè)備

    本文首先介紹了器件失效的定義、分類和失效機(jī)理統(tǒng)計(jì),然后詳細(xì)介紹了封裝失效分析的流程、方法及設(shè)備。
    的頭像 發(fā)表于 03-13 14:45 ?860次閱讀
    封裝失效<b class='flag-5'>分析</b>的流程、方法及設(shè)備

    編碼器常見的故障問題及案例分析

    編碼器作為自動(dòng)化控制系統(tǒng)中的重要組件,負(fù)責(zé)將機(jī)械位移轉(zhuǎn)換為電信號(hào),以供上位機(jī)、PLC或驅(qū)動(dòng)器等設(shè)備讀取和處理。然而,在使用過程中,編碼器可能會(huì)遇到多種故障。以下是對編碼器常見故障及案例的詳細(xì)
    的頭像 發(fā)表于 03-07 11:05 ?1561次閱讀

    神經(jīng)網(wǎng)絡(luò)壓縮框架 (NNCF) 中的過濾器修剪統(tǒng)計(jì)數(shù)據(jù)怎么查看?

    無法觀察神經(jīng)網(wǎng)絡(luò)壓縮框架 (NNCF) 中的過濾器修剪統(tǒng)計(jì)數(shù)據(jù)
    發(fā)表于 03-06 07:10

    ESD對于電子器件的破壞機(jī)理分析

    詳細(xì)分析ESD對電子器件的破壞機(jī)理及其后果。1.ESD破壞的基本機(jī)理ESD破壞通常是由瞬態(tài)高壓和大電流引發(fā),主要通過以下幾種方式對電子器件造成影響:1.1熱破壞ES
    的頭像 發(fā)表于 01-14 10:24 ?1415次閱讀
    ESD對于電子器件的破壞<b class='flag-5'>機(jī)理</b><b class='flag-5'>分析</b>

    Minitab 在統(tǒng)計(jì)分析中的應(yīng)用

    在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的世界中,統(tǒng)計(jì)分析成為了一個(gè)不可或缺的工具。Minitab作為一款功能強(qiáng)大的統(tǒng)計(jì)軟件,它能夠幫助用戶進(jìn)行數(shù)據(jù)探索、假設(shè)檢驗(yàn)、回歸分析等多種統(tǒng)計(jì)分析。 1. 數(shù)據(jù)管理 Mi
    的頭像 發(fā)表于 12-02 15:23 ?1343次閱讀

    Lua語法基礎(chǔ)教程(下篇

    今天我們繼續(xù)學(xué)習(xí)Lua語法基礎(chǔ)教程,下篇。 九、函數(shù) 9.1 初識(shí)函數(shù) 函數(shù)是指一段在一起的、可以做某一件事兒的程序,也叫做子程序。 在前面的內(nèi)容中,我們已經(jīng)接觸過了函數(shù)的調(diào)用,這個(gè)函數(shù)就是前面用到
    的頭像 發(fā)表于 10-26 11:41 ?655次閱讀
    Lua語法基礎(chǔ)教程(<b class='flag-5'>下篇</b>)

    Huffman壓縮算法概述和詳細(xì)流程

    Huffman壓縮算法是一種基于字符出現(xiàn)頻率的編碼算法,通過構(gòu)建Huffman樹,將出現(xiàn)頻率高的字符用短編碼表示,出現(xiàn)頻率低的字符用長編碼表示,從而實(shí)現(xiàn)對數(shù)據(jù)的
    的頭像 發(fā)表于 10-21 13:48 ?896次閱讀

    音頻信號(hào)的無損壓縮編碼是什么

    音頻信號(hào)的無損壓縮編碼是一種在不損失音頻質(zhì)量的前提下,減少音頻文件大小的技術(shù)。這種技術(shù)對于存儲(chǔ)和傳輸音頻數(shù)據(jù)非常有用,尤其是在帶寬有限或存儲(chǔ)空間有限的情況下。無損壓縮編碼技術(shù)可以應(yīng)用于各種音頻格式
    的頭像 發(fā)表于 09-25 14:10 ?1147次閱讀

    視頻編碼器與解碼器的應(yīng)用方案

    視頻解碼器和視頻編碼器是數(shù)字信號(hào)處理中常用的設(shè)備,它們在數(shù)據(jù)的傳輸和轉(zhuǎn) 換中發(fā)揮著重要作用。概述與應(yīng)用 它是將模擬信號(hào)或數(shù)字信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的編碼設(shè)備,將輸入的視音頻信號(hào)源 進(jìn)行壓縮采集并轉(zhuǎn)換
    發(fā)表于 09-10 16:04 ?1次下載

    示波器統(tǒng)計(jì)曲線和故障分析pass/fail測試

    虛擬示波器可以應(yīng)用在工業(yè)自動(dòng)化檢測中,除了常規(guī)的檢測波形和測量值參數(shù)以外,由多個(gè)行業(yè)客戶定制和驗(yàn)證的統(tǒng)計(jì)曲線和故障分析(pass/fail)功能也為工業(yè)自動(dòng)化檢測帶來極大的便利。(一)故障分析
    發(fā)表于 08-30 10:19

    LOTO示波器統(tǒng)計(jì)曲線和故障分析pass/fail測試

    虛擬示波器可以應(yīng)用在工業(yè)自動(dòng)化檢測中,除了常規(guī)的檢測波形和測量值參數(shù)以外,由多個(gè)行業(yè)客戶定制和驗(yàn)證的統(tǒng)計(jì)曲線和故障分析(pass/fail)功能也為工業(yè)自動(dòng)化檢測帶來極大的便利。(一)故障分析
    的頭像 發(fā)表于 08-30 10:07 ?790次閱讀
    LOTO示波器<b class='flag-5'>統(tǒng)計(jì)</b>曲線和故障<b class='flag-5'>分析</b>pass/fail測試