freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

jpeg編碼解碼流程-資料下載頁(yè)

2024-11-07 12:33本頁(yè)面

【導(dǎo)讀】JPEG專(zhuān)家組開(kāi)發(fā)了兩種基本的壓縮算法、兩種熵編碼方法、四種編碼模式。無(wú)損的預(yù)測(cè)壓縮技術(shù);基于DCT的順序模式:編碼、解碼通過(guò)一次掃描完成;做解碼,放棄高分辨率信息;這樣的方式,被人們稱(chēng)為JPEG的基本系統(tǒng)。中間格式計(jì)算、AC系數(shù)的游程長(zhǎng)度編碼、AC系數(shù)的中間格式計(jì)算、熵編碼。一介紹這11個(gè)步驟的詳細(xì)原理和計(jì)算過(guò)程。YCrCb顏色空間中,Y代表亮度,Cr,Cb則代表。RGB和YCrCb之間的轉(zhuǎn)換關(guān)系如下所示:。以認(rèn)為Y分量要比Cb,Cr分量重要的多。值,用12個(gè)字節(jié)進(jìn)行存儲(chǔ)。人眼不太察覺(jué)到的范圍內(nèi)減小了數(shù)據(jù)的存儲(chǔ)量。把源圖象數(shù)據(jù)進(jìn)行分塊。素塊逐一進(jìn)行DCT操作。示了該種成分所占原圖像信號(hào)的份額大小。由于大多數(shù)圖像的高頻分量比較小,相應(yīng)的圖像高頻分量的DCT系數(shù)經(jīng)常接近于0,敏感,所以,可以考慮將這一些高頻成分予以?huà)仐?,從而降低需要傳輸?shù)臄?shù)據(jù)量。接受的,而且對(duì)這種微小的變換是不敏感的。

  

【正文】 著此數(shù)值用于譯碼; 需要說(shuō)明的是, JPEG 文件格式中,一個(gè)字( 16 位)的存儲(chǔ)使用的是 Motorola 格式,而不是 Intel 格式。也就是說(shuō),一個(gè)字的高字節(jié)(高 8 位)在數(shù)據(jù)流的前面,低字節(jié)(低 8位)在數(shù)據(jù)流的后面,與平時(shí)習(xí)慣的 Intel 格式有所不同。這種字節(jié)順序問(wèn)題的起 因在于早期的硬件發(fā)展上。在 8 位 CPU 的時(shí)代,許多 8 位 CPU 都可以處理 16 位的數(shù)據(jù),但它們顯然是分兩次進(jìn)行處理的。這個(gè)時(shí)候就出現(xiàn)了先處理高位字節(jié)還是先處理低位字節(jié)的問(wèn)題。以Intel 為代表的廠(chǎng)家生產(chǎn)的 CPU 采用先低字節(jié)后高字節(jié)的方式;而以 Motorola,IBM為代表的廠(chǎng)家生產(chǎn)的 CPU則采用了先高字節(jié)后低字節(jié)的方式。 Intel 的字節(jié)順序也稱(chēng)為 littleendian,而 Motorola 的字節(jié)順序就叫做 bigendian。而 JPEG/JFIF 文件格式則采用了 bigendian 格式。 下面的函數(shù),實(shí)現(xiàn)了從 intel 格式到 motolora 格式的轉(zhuǎn)換 USHORT Intel2Moto(USHORT val) { BYTE highBits = BYTE(val / 256)。 BYTE lowBits = BYTE(val % 256)。 return lowBits * 256 + highBits。 } JPEG 解碼算法流程詳解 薛曉利 ( 1) 讀入 JPEG/JFIF 文件的相關(guān)信息 按照 JFIF文件格式,將 JPEG文件相關(guān)的字段信息一一讀取出來(lái),并進(jìn)行相應(yīng)的解 析。例如,圖像的寬度、高度、量化表、 Huffman 表、水平 /垂直采樣因子等。一般而言, JFIF格式文件的讀取順序依次為: SOI 字段; APP0 字段; APPn 字段; DQT 字段; SOFO 字段; DHT 字段; SOS 字段; 壓縮數(shù)據(jù)字段; EOI 字段; 讀取 JPEG 文件相關(guān)信息的時(shí)候,有兩點(diǎn)需要特別注意: ( a) 由于 JPEG中以 0XFF 來(lái)做為特殊標(biāo)記符,因此,如果某個(gè)像素的取值為 0XFF,那么實(shí)際在保存的時(shí)候,是以 0XFF00 來(lái)保存的,從而避免其跟特殊標(biāo)記符 0XFF之間產(chǎn)生混淆。所以,在讀取文件信息的時(shí)候,如果 遇 0XFF00,就必須去除后面的 00;即,將 0XFF00當(dāng)做 0XFF; ( b) JPEG 文件中,一個(gè)字( 16 位)的存儲(chǔ)是采用了 Motorola 格式( bigendian),而不是我們常用的 Intel格式( littleendian)。因此,如果需要的話(huà),請(qǐng)?jiān)谔幚碇g進(jìn)行依次高低字節(jié)的轉(zhuǎn)換。 ( 2) 讀取 Huffman 表 在標(biāo)記碼 DHT 之后,包含了一個(gè)或者多個(gè) Huffman 表(通常是 4 個(gè)表)。對(duì)于一個(gè)Huffman 表而言,它包含了以下三部分內(nèi)容: ( a) 表 ID 和表類(lèi)型; 1 個(gè)字節(jié);僅有 4 個(gè)可選的取值, 0X00,0X01,0X10,0X11,分別表示 DC 直流 0 號(hào)表, DC 直流 1 號(hào)表, AC 交流 0 號(hào)表, AC 交流 1 號(hào)表; ( b) 不同位數(shù)的碼字?jǐn)?shù)量;前面提到 ,JPEG 中的 Huffman 編碼表是按照編碼長(zhǎng)度的位數(shù)以表格的形式保存的,而且, Huffman 編碼表的位數(shù)只能是 116 位,因此,這里用 16個(gè)字節(jié)來(lái)分別表示 116 位的每種位長(zhǎng)的編碼在 Huffman 樹(shù)中的個(gè)數(shù)。 ( c) 編碼內(nèi)容;該字段記錄了 Huffman 樹(shù)中各個(gè)葉子節(jié)點(diǎn)的權(quán)重,上一個(gè)字段(不同位數(shù)的碼字?jǐn)?shù)量)的 16 個(gè)數(shù)值之和,就是本字段的長(zhǎng)度,也就是 Huffman 樹(shù)中葉子節(jié)點(diǎn)的個(gè)數(shù)。 這里,我們不 妨以下面一段 Huffman 表的數(shù)據(jù)為例來(lái)說(shuō)明情況(均以 16 進(jìn)制表示): 11 00 02 02 00 05 01 06 01 00 00 00 00 00 00 00 00 00 01 11 02 21 03 31 41 12 51 61 71 81 91 22 13 32 以上數(shù)據(jù)串中第一行代表了 Huffman 表 ID、表類(lèi)型、不同位數(shù)的碼字?jǐn)?shù)量信息; 第一行的第一個(gè)字節(jié) 0X11 代表了表的 ID 和類(lèi)型是 AC 交流 1 號(hào)表; 第一行的第 2 到第 17 字節(jié)代表了不同位數(shù)碼字的數(shù)量。即,第 2 個(gè)字節(jié) 00 表示沒(méi)有位數(shù)為 1的編碼 ;第 3 個(gè)和第 4個(gè)字節(jié)的 02表示位數(shù)為 2和位數(shù)為 3的編碼各有兩個(gè);第5 個(gè)字節(jié)的 00 表示沒(méi)有位數(shù)為 5 的編碼。此外,通過(guò)這些數(shù)據(jù)我們發(fā)現(xiàn),此 Huffman樹(shù)有 0+2+2+0+5+1+6+1=17 個(gè)葉子節(jié)點(diǎn)。 第二行為編碼的內(nèi)容,表明 17個(gè)葉子節(jié)點(diǎn)按照從小到大的順序排列,即,權(quán)值依次為0,1,11,2,21,3,31,41... ( 3) 構(gòu)建 Huffman 樹(shù) 讀取到 Huffman 表的數(shù)據(jù)之后,就需要構(gòu)建 Huffman 樹(shù)了。其具體規(guī)則如下 ( a)第一個(gè)編碼的數(shù)字必定為 0;如果第一個(gè)編碼的位數(shù)為 1,就被編碼為 0; 如果第一個(gè)編碼的位數(shù)為 2,就被編碼為 00;如果第一個(gè)編碼的位數(shù)為 3,就被編碼為 000。 ( b)從第二個(gè)編碼開(kāi)始,如果它和它前面編碼具有相同的位數(shù),則當(dāng)前編碼是它前面的編碼加 1;如果它的編碼位數(shù)比它前面的編碼位數(shù)大,則當(dāng)前編碼時(shí)它前面的編碼加 1之后再在后面添加若干個(gè) 0,直到滿(mǎn)足編碼位數(shù)的長(zhǎng)度為止。 還是以上面的數(shù)據(jù)為例: 第一行的第 2 個(gè)字節(jié) 00 表示沒(méi)有位數(shù)為 1 的編碼; 第一行的第 3 個(gè)字節(jié) 02 表示位數(shù)為 2 的編碼有 2個(gè);由于沒(méi)有位數(shù)為 1的編碼,因此這里位數(shù)為 2 的編碼中的第一個(gè)為 00,第二個(gè)為 00+1=01; 第一行的第 4 個(gè)字節(jié) 02 表示位數(shù)為 3 的編碼有 2個(gè);因此,這里位數(shù)為 3 的編碼中的第一個(gè)為 01+1=10,然后添加 1 個(gè)“ 0”,得到 100;位數(shù)為 3 的編碼中的第二個(gè)為 100+1=101; 依次類(lèi)推,可以得到如下的 Huffman 樹(shù) 序號(hào) 碼字長(zhǎng)度 碼字 權(quán)值 1 2 00 0x00 2 2 01 0x01 3 3 100 0x11 4 3 101 0x02 5 5 11000 0x21 6 5 11001 0x03 7 5 11010 0x31 8 5 11011 0x41 9 5 11100 0x12 10 6 111010 0x51 11 7 1110110 0x61 12 7 1110111 0x71 13 7 1111000 0x81 14 7 1111001 0x91 15 7 1111010 0x22 16 7 1111011 0x13 17 8 11111000 0x32 特別提醒的是,如果中間有某個(gè)位數(shù)的編碼缺失,例如,沒(méi)有 4位的編碼,則應(yīng)該在 3位的編碼后面加 1,添加 2 個(gè)“ 00”補(bǔ)足 5 位,形成下一個(gè) 5 位編碼。 ( 4) DC 系數(shù)的 Huffman 解碼 JPEG 編碼階段 我們講到, DC 系數(shù)是以( A,B)的中間形式進(jìn)行編碼的。其中的 A代表了 B 的二進(jìn)制編碼位數(shù), B則利用 VLI 進(jìn)行編碼。另外, 8*8的圖像塊經(jīng)過(guò) DCT 變換之后得到的 8*8 的系數(shù)矩陣,經(jīng)過(guò) Huffman 編碼及 RLE 編碼之后,寫(xiě)入編碼數(shù)據(jù)的時(shí)候, DC系數(shù)也是被寫(xiě)在數(shù)據(jù)流最前面的。因此,解碼的時(shí)候, DC系數(shù)也是最先被讀取出來(lái),假設(shè),我們一次性讀入了若干個(gè)字節(jié)長(zhǎng)度的數(shù)據(jù)。其中的第一個(gè)字節(jié)代表了 DC 系數(shù)的 Huffman編碼,通過(guò)查找 DC 系數(shù)的 Huffman 表(亮度表或色度表),得到該 Huffman編碼所在的組編號(hào),該編號(hào)就是 DC 系數(shù)中間格式( A,B)中的 A,也就是 B 的位數(shù)。例如, A=2,就代表 B 采用 2 位二進(jìn)制數(shù)進(jìn)行編碼。這樣一來(lái),讀取接下來(lái)的 A 位二進(jìn)制數(shù),將其譯碼為十進(jìn)制,就得到了 DC 系數(shù)的差值。將該差值與上一個(gè) DC系數(shù)值相加,就得到了真正的當(dāng)前DC 系數(shù)的值。 ( 5) AC 系數(shù)的 Huffman 解碼 處理完 DC 系數(shù)之后,接下來(lái)進(jìn)行 AC 系數(shù)的譯碼工作,顯然,這里依然需要讀取一個(gè)Huffman 編碼,通過(guò)查找 AC 系數(shù)的 Huffman 編碼表,進(jìn)行解碼,我們得到 (A,B)的數(shù)據(jù)對(duì),其中的 A代表了 0的個(gè)數(shù),而 B則代表了后面數(shù)據(jù)的位數(shù)。例 如,( 2,3)就代表了當(dāng)前 AC系數(shù)之前有 2 個(gè) 0,下一個(gè)需要讀取的二進(jìn)制數(shù)據(jù)是 3 位。需要提醒的是,( 0,0)代表 EOB,即 8*8 塊的編碼結(jié)束。接著,讀取 B 位二進(jìn)制數(shù)據(jù),進(jìn)行譯碼,我們就得到了 AC 系數(shù)的值。如此反復(fù)循環(huán),直到遇到 EOB,或者讀取了 63 個(gè) AC 系數(shù),我們就完成了一個(gè) 8*8 塊的系數(shù)矩陣的譯碼工作。 ( 6) 反量化 在譯碼得到了 8*8的系數(shù)矩陣之后,我們需要進(jìn)行反量化工作。該步驟,就是將前一個(gè)步驟得到的 8*8 系數(shù)矩陣分別乘以 8*8 的量化矩陣即可。 ( 7) 反 Zigzag掃描 JPEG 編碼過(guò)程中,為了編碼方便, 采用了 Zigzag掃描,因此,這里需要進(jìn)行反 Zigzag掃描,重新排列 8*8的反量化系數(shù)矩陣。反 Zigzag掃描的輸入時(shí) 8*8 矩陣,輸出依然是 8*8矩陣,只不過(guò),數(shù)據(jù)的排列方式有所不同而已。 ( 8) DCT 逆變換 DCT 變換,將原始圖像變換到頻域,而 DCT 逆變換,就是要將數(shù)據(jù)從頻域變換回時(shí)域。 DCT 逆變換的計(jì)算公式為: DCT 逆變換的公式,可以 改寫(xiě)為: f=Aτ FA 其中 A 為矩陣: 對(duì)上面的公式進(jìn)行變形 Y =FA f =AT Y fT =(AT Y)T =YT A 其中 F為 數(shù)據(jù)塊。 經(jīng)分析可知,完成一次 DCT逆變換需要 4步: 1:壓縮數(shù)據(jù)塊( 88 ) F矩陣與矩陣 A( 88 )相乘,得到矩陣 Y( 88 ) ; 2:對(duì)矩陣 Y進(jìn)行轉(zhuǎn)秩得到( 88 ) YT 3: YT再與矩陣 A相乘得到 88 的矩陣 ft 4:對(duì) ft 進(jìn)行轉(zhuǎn)秩得到 f,這里的 f即為經(jīng)過(guò) DCT逆變換之后得到的時(shí)域的原始圖像 ; DCT逆變換的流程圖 如下 所示 : A矩陣乘法器的作用是實(shí)現(xiàn)輸入矩陣和 A矩陣的相乘。注意 A矩陣在乘法的右邊。 iDCT變換的對(duì)象是 8 8 的數(shù)據(jù)單元,既輸入數(shù)據(jù)共 64個(gè),按行輸入,每 8個(gè)數(shù)據(jù)為一行。每輸入一行數(shù)據(jù)就分別和 A矩陣的每一列進(jìn)行乘加運(yùn)算,每完成一次這樣的乘加運(yùn)算就輸出一次結(jié)果。比如,輸入第一行數(shù)據(jù),分別和 A矩陣的各列相乘,按順序輸出 8個(gè)結(jié)果,這 8個(gè)結(jié)果就是輸出矩陣的第一行;當(dāng)輸入第二行數(shù)據(jù)時(shí),同樣輸出 8個(gè)結(jié)果,這 8個(gè)結(jié)果是輸出矩陣的第二行。所以經(jīng)過(guò)第一次矩陣乘法之后得到的是 Y矩陣。 轉(zhuǎn)秩就是對(duì) 64個(gè)數(shù)據(jù)進(jìn)行重新排列 ,例如 ,對(duì)于矩陣 M而言,將其第一行第二列的數(shù)據(jù)M( 1,2)跟其第一列第二行的數(shù)據(jù) M( 2,1)進(jìn)行互換, 如下圖 所示 : 左邊為未轉(zhuǎn)秩的數(shù)據(jù)順序,右邊為轉(zhuǎn)秩之后的數(shù)據(jù)順序。 ( 9) 顏色模式轉(zhuǎn)換 BMP 圖片是以 RGB 顏色空間進(jìn)行保存的,因此,將 JPEG 解碼為 BMP 必須進(jìn)行顏色模式的轉(zhuǎn)換。另外,由于 DCT 要求的定義域?qū)ΨQ(chēng),所以,在編碼的時(shí)候?qū)?RGB 的數(shù)值范圍從 [0,255]統(tǒng)一減去 128,將數(shù)值范圍轉(zhuǎn)換到 [128,127]的范圍內(nèi)。因此,解碼的時(shí)候,必須為每個(gè)顏色分量加上 128。另外需要注意的是,通過(guò)解碼變換之后得到的 RGB 的值有可能超過(guò) 255 或者小于 0;如果小于 0,就截?cái)酁?0,如果大于 255,就截取為 255; ( 10)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1