日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二)

發(fā)布時(shí)間:2023/12/18 循环神经网络 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2.4?量化(quantization)

量化過程是一個(gè)將信號(hào)的幅度離散化的過程,離散信號(hào)經(jīng)過量化后變?yōu)閿?shù)字信號(hào)。

由于HVS對(duì)低頻信號(hào)更為敏感,所以對(duì)信號(hào)的低頻部分采用相對(duì)短的量化步長,對(duì)信號(hào)的高頻部分采用相對(duì)長的量化步長。這樣可以在一定程度上,得到相對(duì)清晰的圖像和更高的壓縮率。

2.5?Z字形編碼(zigzag scan)

按Z字形把量化后的數(shù)據(jù)讀出,例:

2.6?使用行程長度編碼(RLE)對(duì)交流系數(shù)(AC)進(jìn)行編碼

所謂游程長度編碼是指一個(gè)碼可以同時(shí)表示碼的值和前面有幾個(gè)零。這樣就發(fā)揮了Z字型讀出的優(yōu)點(diǎn),因?yàn)閆字型讀出,出現(xiàn)連零的機(jī)會(huì)比較多,特別到最后,如果都是零,在讀到最后一個(gè)數(shù)后,只要給出“塊結(jié)束”(EOB)碼,就可以結(jié)束輸出,因此節(jié)省了很多碼率。

例:圖中按Z字形抽取和游程編碼得到碼值為

(0,1,0)(1,2,0)(0,5,0)(0,4,0)(4,8,1)EOB

這樣一個(gè)4*4的矩陣用很少的數(shù)值就能表示!

2.7?熵編碼

常用的熵編碼有變長編碼,即哈夫曼編碼。

哈夫曼的編碼方法:對(duì)出現(xiàn)概率大的符號(hào)分配短字長的二進(jìn)制碼,對(duì)出現(xiàn)概率小的符號(hào)分配長字長的二進(jìn)制碼,得到符號(hào)平均碼長最短的碼。

哈夫曼編碼的步驟:(1). 把信源符號(hào)按概率大小順序排列, 并設(shè)法按逆次序分配碼字的長度。 (2). 在分配碼字長度時(shí),首先將出現(xiàn)概率最小的兩個(gè)符號(hào)的概率相加合成一個(gè)概率 (3). 把這個(gè)合成概率看成是一個(gè)新組合符號(hào)地概率,重復(fù)上述做法直到最后只剩下兩個(gè)符號(hào)概率為止。 (4). 完成以上概率順序排列后,再反過來逐步向前進(jìn)行編碼,每一次有二個(gè)分支各賦予一個(gè)二進(jìn)制碼,可以對(duì)概率大的賦為零,概率小的賦為1。

關(guān)于AC/DC系數(shù)的編碼

1.AC系數(shù)的Huffman編碼

經(jīng)過Z掃描和游程編碼后的非零AC系數(shù)被表述為符號(hào)A和符號(hào)B。符號(hào)A由(Runlength,Size)構(gòu)成,符號(hào)B(Amplitude)。

Runlength為非零AC系數(shù)前連續(xù)為0的AC系數(shù);

Size則是表示編碼Amplitude所需要的比特位數(shù);

Amplitude為AC系數(shù)的幅值。

實(shí)際操作時(shí),JPEG用一個(gè)8位的值RS來表示符號(hào)A,RS=RRRRSSSS,對(duì)于一個(gè)非零的AC系數(shù),高四位用來表示Runlength,低四位用來表示Size。(00000000)用來表示EOB。

對(duì)符號(hào)B進(jìn)行變字長整數(shù)(VLI)編碼,將符號(hào)B的VLI碼放在A后從而形成對(duì)A,B編碼的最終結(jié)果。

2.DC系數(shù)的Huffman編碼

對(duì)于DC系數(shù),與非零的AC系數(shù)類似,它將相鄰兩塊DC系數(shù)的差值(DIFF)描述如下的符號(hào)對(duì):符號(hào)A為(Size),符號(hào)B為(Amplitude)。

Size表示為編碼Amplitude所需要的位數(shù);

Amplitude表示DC系數(shù)的幅值。

在JPEG標(biāo)準(zhǔn)中,對(duì)符號(hào)A根據(jù)相應(yīng)的Huffman表進(jìn)行變字長編碼,對(duì)符號(hào)B進(jìn)行變字長整數(shù)編碼,而后將符號(hào)B 的VLI碼放在符號(hào)A的Huffman碼后,從而完成了對(duì)DIFF的編碼。

在JPEG標(biāo)準(zhǔn)中沒有定義缺省的Huffman表,用戶可以根據(jù)實(shí)際應(yīng)用自由選擇,可以預(yù)先定義一個(gè)通用的Huffman表,也可以針對(duì)一幅特定的圖像,在壓縮編碼前通過搜集其統(tǒng)計(jì)特性來計(jì)算Huffman表。

三,JPEG解碼的主要過程。

3.1?讀入文件的相關(guān)信息

按照J(rèn)PEG文件數(shù)據(jù)存儲(chǔ)方式,把要解碼的文件的相關(guān)信息一一讀出,為接下來的解碼工作做好準(zhǔn)備。參考方法是,設(shè)計(jì)一系列的結(jié)構(gòu)體對(duì)應(yīng)各個(gè)標(biāo)記,并存儲(chǔ)標(biāo)記內(nèi)表示的信息。其中圖像長寬、多個(gè)量化表和哈夫曼表、水平/垂直采樣因子等多項(xiàng)信息比較重要。以下給出讀取過程中的幾個(gè)問題。

1. 讀取文件的大體結(jié)構(gòu)

JFIF格式的JPEG文件(*.jpg)的一般順序?yàn)?#xff1a;

SOI(0xFFD8),APP0(0xFFE0),[APPn(0xFFEn)]可選,

DQT(0xFFDB),SOF0(0xFFC0),DHT(0xFFC4),SOS(0xFFDA),

壓縮數(shù)據(jù),EOI(0xFFD9)。

2. 讀取哈夫曼表數(shù)據(jù);

3. 建立哈夫曼樹。

在準(zhǔn)備好所有的圖片信息后,就可以對(duì)圖片數(shù)據(jù)進(jìn)行解碼了。

關(guān)于AC,DC系數(shù)的解碼

1. AC系數(shù)的解碼

通過查詢Huffman數(shù)據(jù)解出RS,從中的到Runlength和Size的值。因?yàn)榉?hào)B是通過VLI表來編碼的,所以通過查詢Size的值可以得到Amplitude。這樣就可以解出符號(hào)A和符號(hào)B的值了。

2. DC系數(shù)的解碼

同理,先查詢Huffman表解出Size的,通過Size解出DIFF,將其與上一個(gè)8*8塊的DC系數(shù)數(shù)值相加,最終得到該塊的DC系數(shù)。

3.2 MCU中顏色分量(Y,U,V)的解碼

圖像數(shù)據(jù)流是有MCU組成,而MCU是用數(shù)據(jù)單元和顏色分量構(gòu)成。圖像數(shù)據(jù)流是以位(bit)為單位存儲(chǔ)信息的。并且內(nèi)部的數(shù)據(jù)都是在編碼時(shí)通過正向離散余弦變換(FDCT)進(jìn)行時(shí)空域向頻率域變換而得到的結(jié)果,所以對(duì)于每個(gè)顏色分量單元都應(yīng)該由兩部分組成:1個(gè)直流分量和63個(gè)交流分量。

顏色分量單元內(nèi)部綜合運(yùn)用了RLE行程編碼和哈夫曼編碼來壓縮數(shù)據(jù)。每個(gè)像素的數(shù)據(jù)流由兩部分構(gòu)成:編碼和數(shù)值,并且兩者基本以互相隔開方式出現(xiàn)(除非該編碼的權(quán)值為零)。解碼的過程其實(shí)就是哈夫曼樹的查找過程。

3.3 直流系數(shù)的差分編碼

把所有的顏色分量單元按顏色分量(Y、Cr、Cb)分類。每一種顏色分量?jī)?nèi),相鄰的兩個(gè)顏色分量單元的直流變量是以差分來編碼的。也就是說,通過之前解碼出來的直流變量數(shù)值只是當(dāng)前顏色分量單元的實(shí)際直流變量減去前一個(gè)顏色分量單元的實(shí)際直流變量。也就是說,當(dāng)前直流變量要通過前一個(gè)顏色分量單元的實(shí)際(非解碼)直流分量來校正:

DCn=DCn-1+Diff

其中Diff為差分校正變量,也就是直接解碼出來的直流系數(shù)。但如果當(dāng)前顏色分量單元是第一個(gè)單元,則解碼出來的直流數(shù)值就是真正的直流變量。

3個(gè)顏色分量的直流變量是分開進(jìn)行差分編碼的。也就是說,為1張圖片解碼時(shí)應(yīng)設(shè)置3個(gè)獨(dú)立的直流校正變量。

3.4 反量化

反量化的過程比較簡(jiǎn)單。只需要對(duì)8*8的顏色分量單元的64個(gè)值逐一乘以對(duì)應(yīng)的量化表內(nèi)位置相同的值則可。圖像內(nèi)全部的顏色分量單元都要進(jìn)行反量化。

3.5 反Zig-zag編碼

3.6 反離散余弦變換

之前提到,文件中的數(shù)據(jù)是在編碼時(shí)通過正向離散余弦變換(FDCT)進(jìn)行時(shí)空域向頻率域變換而得到的結(jié)果,所以現(xiàn)在解碼就必須將其反向離散余弦變換(IDCT),就是把顏色分量單元矩陣中的頻率域數(shù)值向時(shí)空域轉(zhuǎn)換。并且,原來的頻率域的矩陣大小為8*8,則經(jīng)過反向離散余弦變換后,時(shí)空域的矩陣仍然是8*8。

3.7 YCrCb向RGB轉(zhuǎn)換

要在屏幕上顯示圖像,就必須以RGB模式表示圖像的顏色。所以,解碼時(shí)需要把YCrCb模式向RGB模式轉(zhuǎn)換。

另外,由于離散余弦變化要求定義域的對(duì)稱,所以在編碼時(shí)把RGB的數(shù)值范圍從[0,255]統(tǒng)一減去128偏移成[-128,127]。因此解碼時(shí)必須為每個(gè)分量加上128。具體公式如下:

R=?Y?+1.402*Cb?+128;

G=Y-0.34414*Cr?-0.71414*Cb?+128;

B=?Y?+1.772*Cb?+128;

還有一個(gè)問題,通過變換得出的R、G、B值可能超出了其定義域,所以要作出檢查。如果大于255,則截?cái)酁?55;如果小于0,則截?cái)酁?。

至此,每個(gè)MCU的解碼已經(jīng)完成。

原文作者:quennel

總結(jié)

以上是生活随笔為你收集整理的对普通文件 霍夫曼编解码 matlab,JPEG编解码过程详解(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。