多媒體通信畢業論文_第1頁
多媒體通信畢業論文_第2頁
多媒體通信畢業論文_第3頁
多媒體通信畢業論文_第4頁
多媒體通信畢業論文_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 . PAGE39 / NUMPAGES39多媒體通信畢業設計論文目錄TOC o 1-3 h u HYPERLINK l _Toc3209 目錄 PAGEREF _Toc3209 1 HYPERLINK l _Toc23772 摘要 PAGEREF _Toc23772 2 HYPERLINK l _Toc14016 Abstract PAGEREF _Toc14016 3 HYPERLINK l _Toc7147 1. 設計要求 PAGEREF _Toc7147 4 HYPERLINK l _Toc22936 2. JPEG圖像壓縮原理 PAGEREF _Toc22936 5 HYPERLIN

2、K l _Toc18419 2.1圖像壓縮技術簡介 PAGEREF _Toc18419 5 HYPERLINK l _Toc31210 2.2JPEG圖像壓縮基本原理 PAGEREF _Toc31210 6 HYPERLINK l _Toc1438 2.1.1 顏色空間轉換以與圖像分量采樣 PAGEREF _Toc1438 6 HYPERLINK l _Toc19706 2.1.2離散余弦變換(DCT) PAGEREF _Toc19706 9 HYPERLINK l _Toc20176 2.2.3 系數量化 PAGEREF _Toc20176 10 HYPERLINK l _Toc11003

3、2.2.4 Zigzag掃描排序 PAGEREF _Toc11003 11 HYPERLINK l _Toc29988 2.2.5 DC系數調制編碼 PAGEREF _Toc29988 12 HYPERLINK l _Toc12189 2.2.6AC系數調制編碼 PAGEREF _Toc12189 13 HYPERLINK l _Toc22143 2.2.7 霍夫曼編碼 PAGEREF _Toc22143 15 HYPERLINK l _Toc15206 2.3 JPEG壓縮要求 PAGEREF _Toc15206 16 HYPERLINK l _Toc10943 2.4 JPEG解碼原理 P

4、AGEREF _Toc10943 16 HYPERLINK l _Toc17014 3. 基于MATLAB的算法實現 PAGEREF _Toc17014 21 HYPERLINK l _Toc19002 3.1 JPEG壓縮設計 PAGEREF _Toc19002 21 HYPERLINK l _Toc1443 3.2基于DCT變換系統設計 PAGEREF _Toc1443 22 HYPERLINK l _Toc23802 3.3 量化程序設計 PAGEREF _Toc23802 23 HYPERLINK l _Toc29998 3.4 Z掃描系統設計 PAGEREF _Toc29998 24

5、 HYPERLINK l _Toc24852 3.4 霍夫曼編碼設計 PAGEREF _Toc24852 25 HYPERLINK l _Toc4686 4. 仿真 PAGEREF _Toc4686 26 HYPERLINK l _Toc10385 5. 總結 PAGEREF _Toc10385 28 HYPERLINK l _Toc3558 6. 參考文獻 PAGEREF _Toc3558 29 HYPERLINK l _Toc13246 附錄1 PAGEREF _Toc13246 30 HYPERLINK l _Toc5666 附錄2 PAGEREF _Toc5666 33摘要圖像的數字化

6、表示使得圖像信號可以高質量地傳輸,并便于圖像的檢索、分析、處理和存儲。但是數字圖像的表示需要大量的數據,必須進行數據的壓縮。因此圖像壓縮編碼技術的研究顯得特別有意義,也正是由于圖像壓縮編碼技術與傳輸技術的不斷發展、更新,推動了現代多媒體技術應用的迅速發展。本設計在研究JPEG壓縮編碼對圖像數據壓縮的基本原理的基礎上,設計了JPEG仿真方案和程序實現流程,根據流程圖編寫了JPEG壓縮編碼的仿真程序,并利用MATLAB軟件對仿真程序進行了調試,驗證了JPEG壓縮編碼對圖像數據壓縮的可行性。通過運行JPEG仿真程序輸出了原圖像,重建圖像,以與二者的差值圖像,通過直觀比較,發現經過JPEG仿真程序壓縮

7、后的圖像仍有很好的視覺效果。通過對輸出的壓縮比,峰值信噪比等參數的研究,科學的論證了JPEG壓縮編碼對圖像數據巨大的壓縮效果以與良好的壓縮質量。實驗結果表明基于DCT 變換的JPEG 圖像壓縮方法簡單、方便,既能保證有較高的壓縮比,又能保證有較好的圖像質量,應用MATLAB仿真出來的結果較好的反應了其編碼算法原理。關鍵詞:JPEG,DCT,MATLAB,圖像壓縮AbstractDigital images that make high-quality image signal can be transmitted, and to facilitate image retrieval, anal

8、ysis, processing and storage. But the digital images that require large amounts of data, the data must be compressed. Therefore, image compression coding technology research is particularly meaningful, and because the image compression technology and transmission technology continues to develop, upd

9、ate and promote the application of modern multimedia technology to develop rapidly. I have JPEG compression in-depth study on the basic principles of image data compression based on JPEG emulator hands drawn flow chart, flow chart was prepared according to JPEG compression simulation program, and th

10、e simulation program using MATLAB software was debugged to verify the JPEG compression of image data compression is feasible. Simulation program by running the output of the original JPEG image, reconstructed image, and the difference between the two images, by visual comparison, found through simul

11、ation program compressed JPEG image is still very good visual effects. Compression ratio on the output peak signal to noise ratio and other parameters of the study, scientific proof of the JPEG image data compression coding of the great compression and good compression quality.Keywords:JPEG, Huffman

12、, DCT, quantization, MATLAB simulation設計要求圖像通信之前需要進行數據量壓縮,編程實現JPEG圖像壓縮標準的主要環節,完成壓縮和解壓過程,計算壓縮比。要求:將彩色圖像進行顏色空間轉換、對不同的顏色分量進行不同的采樣、對于3個分量進行88的DCT變換、對DCT系數矩陣按照JPEG推薦的量化表進行量化;對量化后的系數進行Z形掃描,最后進行熵編碼,形成碼流,計算比特數,和壓縮比。解壓從量化后的DCT系數表開始逆向進行。通過分析知道本次設計要求主要是對圖像進行壓縮處理,涉與了JPEG圖像壓縮的環節,掌握其過程原理。JPEG圖像壓縮原理2.1圖像壓縮技術簡介圖像壓縮

13、是減少表示數字圖像時需要的數據量圖像數據的壓縮基于兩點:(1)圖像信息存在著很大的冗余度,數據之間存在著相關性,如相鄰像素之間色彩的相關性等。(2)人眼是圖像信息的接收端。因此,可利用人的視覺對于邊緣急劇變化不敏感(視覺掩蓋效應),以與人眼對圖像的亮度信息敏感、對顏色分辨率弱的特點實現高壓縮比,而解壓縮后的圖像信號仍有著滿意的主觀質量。1.圖像壓縮的基本原理圖像數據之所以能被壓縮,就是因為數據中存在著冗余。圖像數據的冗余主要表現為:圖像中相鄰HYPERLINK :/baike.baidu /view/575.htm像素間的相關性引起的空間冗余;圖像序列中不同幀之間存在相關性引起的時間冗余;不同

14、彩色平面或頻譜帶的相關性引起的頻譜冗余。HYPERLINK :/baike.baidu /view/286827.htm數據壓縮的目的就是通過去除這些HYPERLINK :/baike.baidu /view/575274.htm數據冗余來減少表示數據所需的比特數。由于圖像數據量的龐大,在HYPERLINK :/baike.baidu /view/87682.htm存儲、傳輸、處理時非常困難,因此圖像數據的壓縮就顯得非常重要。信息時代帶來了“信息爆炸”,使數據量大增,因此,無論傳輸或存儲都需要對數據進行有效的壓縮。在遙感技術中,各種航天探測器采用壓縮編碼技術,將獲取的巨大信息送回地面。圖像壓縮

15、是HYPERLINK :/baike.baidu /view/1320634.htm數據壓縮技術在數字圖像上的應用,它的目的是減少圖像數據中的冗余信息從而用更加高效的格式存儲和傳輸數據。2.圖像壓縮基本方法圖像壓縮可以是HYPERLINK :/baike.baidu /view/583477.htm有損數據壓縮也可以是HYPERLINK :/baike.baidu /view/583473.htm無損數據壓縮。對于如繪制的技術圖、圖表或者漫畫優先使用HYPERLINK :/baike.baidu /view/156047.htm無損壓縮,這是因為HYPERLINK :/baike.baidu

16、/view/128147.htm有損壓縮方法,尤其是在低的HYPERLINK :/baike.baidu /view/1129.htm位速條件下將會帶來壓縮失真。如醫療圖像或者用于存檔的掃描圖像等這些有價值的容的壓縮也盡量選擇HYPERLINK :/baike.baidu /view/156047.htm無損壓縮方法。有損方法非常適合于自然的圖像,例如一些應用中圖像的微小損失是可以接受的(有時是無法感知的),這樣就可以大幅度地減小HYPERLINK :/baike.baidu /view/1129.htm位速。無損圖像壓縮方法有:HYPERLINK :/baike.baidu /view/16

17、24827.htm行程長度編碼HYPERLINK :/baike.baidu /view/2076005.htm熵編碼法如 LZW 這樣的自適應字典算法HYPERLINK :/baike.baidu /view/128147.htm有損壓縮方法有:將色彩空間化減到圖像中常用的顏色。所選擇的顏色定義在壓縮圖像頭的HYPERLINK :/baike.baidu /view/1120949.htm調色板中,圖像中的每個HYPERLINK :/baike.baidu /view/575.htm像素都用調色板中顏色索引表示。這種方法可以與 抖動(en:dithering)一起使用以模糊顏色邊界。HYPE

18、RLINK :/baike.baidu /view/411182.htm色度抽樣,這利用了人眼對于亮度變化的敏感性遠大于顏色變化,這樣就可以將圖像中的顏色信息減少一半甚至更多。HYPERLINK :/baike.baidu /view/3658770.htm變換編碼,這是最常用的方法。首先使用如HYPERLINK :/baike.baidu /view/391624.htm離散余弦變換(DCT)或者HYPERLINK :/baike.baidu /view/586841.htm小波變換這樣的傅立葉相關變換,然后進行量化和用HYPERLINK :/baike.baidu /view/207600

19、5.htm熵編碼法壓縮。HYPERLINK :/baike.baidu /view/893310.htm分形壓縮(en:Fractal compression)。2.2JPEG圖像壓縮基本原理輸入圖像色彩轉換圖像分塊Dct量化dc系數 ac系數塊間DPCMZ字型掃描Huffman編 碼Huffman編 碼DC哈夫曼表壓縮數據AC哈夫曼表解 碼碼 表反量化量化表IDCT恢復的圖像數據量化表圖2-1JPEG圖像壓縮基本原理圖2.1.1 顏色空間轉換以與圖像分量采樣工具箱用RGB圖像中直接描述顏色,或者在索引圖像中間接描述顏色,此時,彩色映射使用RGB格式來儲存。然而,還有其他的色彩空間(又稱彩色模

20、型),他們的應用有時會更加方便或更加恰當。其中包括NTSC、YCbCr、HSV、CMY、CMYK和YUV色彩空間。NTSC色彩空間:NTSC彩色制式在美國用于電視系統。這種形式的有點是灰度信息和彩色信息是分離的,所以同一個信號既可以用于彩色電視,又可以用于黑白電視機。在NTSC制式中,圖像數據是有三部分組成的:亮度Y、色調I和飽和度Q,其中字母YIQ選擇常常是按照慣例進行的。亮度分量描述灰度信息的,其他倆個分量攜帶電視信號的彩色信息。YIQ這幾個分量都是利用如下變換從一副RGB分量中得到的:Y=0.229R+0.587G+0.114BI=0.596R-0.274G-0.322BQ=0.211R

21、-0.523G+0.312B (式2-1)根據以上可以得到rgb2ntsc可執行這樣的變換yiq_image=rgb2ntsc(rgb_image)同上理:IPT函數ntsc2rgb用于實現ntsc轉換為RGB:rgb_image=ntsc2rgb(yiq_image)YCbCr彩色空間:YCbCr1Cb是藍色分量和一個彩色空間廣泛用于數字電視。在這種格式中,亮度信息單個分量Y來表示,彩色信息用倆個色差Cb和Cr來儲存。分量Cb是藍色分量和一個參考值的差,分量Cr是紅色分量和一個參考值的差。JPEG采用的是YCrCb顏色空間,而BMP采用的是RGB顏色空間,要想對BMP圖片進行壓縮,首先需要進

22、行顏色空間的轉換。YCrCb顏色空間中,Y代表亮度,Cr,Cb則代表色度和飽和度(也有人將Cb,Cr兩者統稱為色度),三者通常以Y,U,V來表示,即用U代表Cb,用V代表Cr。RGB和YCrCb之間的轉換關系如下所示: Y = 0.299R+0.587G+0.114B Cb = -0.1687R-0.3313G+0.5B+128Cr = 0.5R=0.418G-0.0813B+128 (式2-2) 一般來說,C 值 (包括 Cb Cr) 應該是一個有符號的數字, 但這里通過加上128,使其變為8位的無符號整數,從而方便數據的存儲和計算。 R = Y+1.402(Cr-128) G = Y-0.

23、34414(Cb-128)-0.71414(Cr-128)B = Y+1.772(Cb-128) (式2-3)通過以上的算法可以得到轉換函數ycbcr_image=rgb2ycbcr(rgb_iage)輸入的圖像可以是uint8類、uint16類或者double類。輸出圖像和輸出圖像是一樣類別。YUV色彩空間:YUV色彩空間和YCrCb類似,其計算方法如下:Y = 0.299*R + 0.587*G + 0.114*B;U = -0.147*R - 0.289*G + 0.436*B;V = 0.615*R - 0.515*G - 0.100*B; (式2-4)數據分塊采樣:在彩色圖像中,JP

24、EG分別壓縮圖像的每個彩色分量。雖然JPEG可以壓縮通常的紅綠藍分量,但在YCbCr空間的壓縮效果會更好。這是因為人眼對色彩的變化敏感,因而對色彩的編碼可以比對亮度的編碼粗糙些。這主要體現在不同的采樣頻率和量化精度上,因此,編碼前一般先將圖像從RGB空間轉換到YCbCr空間。研究發現,人眼對亮度變換的敏感度要比對色彩變換的敏感度高出很多。因此,我們可以認為Y分量要比Cb,Cr分量重要的多。在BMP圖片中,RGB三個分量各采用一個字節進行采樣,也就是我們常聽到的RGB888的模式;而JPEG圖片中,通常采用兩種采樣方式:YUV411和YUV422,它們所代表的意義是Y,Cb,Cr三個分量的數據取

25、樣比例一般是4:1:1或者4:2:2(4:1:1含義就是:在2x2的單元中,本應分別有4個Y,4個U,4個V值,用12個字節進行存儲。經過4:1:1采樣處理后,每個單元中的值分別有4個Y、1個U、1個V,只要用6個字節就可以存儲了)。這樣的采樣方式,雖然損失了一定的精度但也在人眼不太察覺到的圍減小了數據的存儲量。當然,JPEG格式里面也允許將每個點的U,V值都記錄下來;由于后面的DCT變換是是對8x8的子塊進行處理的,因此,在進行DCT變換之前必須把源圖象數據進行分塊。源圖象中每點的3個分量是交替出現的,先要把這3個分量分開,存放到3表中去。然后由左與右,由上到下依次讀取8x8的子塊,存放在長

26、度為64的表中,即可以進行DCT變換。注意,編碼時,程序從源數據中讀取一個8x8的數據塊后,進行DCT變換,量化,編碼,然后再讀取、處理下一個8*8的數據塊。1 2 5 63 4 7 8Y矩陣 Cb Cr1 2 3 8 16 M 8 M/2 8 M/2 8M/2 8M/2圖2-2矩陣分塊圖2.1.2離散余弦變換(DCT)DCT(Discrete Cosine Transform,離散余弦變換),是碼率壓縮中常用的一種變換編碼方法。任何連續的實對稱函數的傅里葉變換中只含有余弦項,因此,余弦變換同傅里葉變換一樣具有明確的物理意義。DCT是先將整體圖像分成N*N的像素塊,然后針對N*N的像素塊逐一進

27、行DCT操作。需要提醒的是,JPEG的編碼過程需要進行正向離散余弦變換,而解碼過程則需要反向離散余弦變換。正向離散余弦變換計算公式:反向離散余弦變換計算公式:DCT編碼屬于正交變換編碼方式,用于去除圖像數據的空間冗余。變換編碼就是將圖像光強矩陣(時域信號)變換到系數空間(頻域信號)上進行處理的方法。在空間上具有強相關的信號,反映在頻域上是在某些特定的區域能量常常被集中在一起,或者是系數矩陣的分布具有某些規律。我們可以利用這些規律在頻域上減少量化比特數,達到壓縮的目的。圖像經DCT變換以后,DCT系數之間的相關性就會變小。而且大部分能量集中在少數的系數上,因此,DCT變換在圖像壓縮中非常有用,是

28、有損圖像壓縮國際標準JPEG的核心。從原理上講可以對整幅圖像進行DCT變換,但由于圖像各部位上細節的豐富程度不同,這種整體處理的方式效果不好。為此,發送者首先將輸入圖像分解為8*8或16*16塊,然后再對每個圖像塊進行二維DCT變換,接著再對DCT系數進行量化、編碼和傳輸;接收者通過對量化的DCT系數進行解碼,并對每個圖像塊進行的二維DCT反變換。最后將操作完成后所有的塊拼接起來構成一幅單一的圖像。對于一般的圖像而言,大多數DCT系數值都接近于0,所以去掉這些系數不會對重建圖像的質量產生較大影響。因此,利用DCT進行圖像壓縮確實可以節約大量的存儲空間。在實驗中,先將輸入的原始lena圖像分為8

29、*8塊,然后再對每個塊進行二維DCT變換。MATLAB圖像處理上具箱中提供的二維DCT變換與DCT反變換函數如下。dct2實現圖像的二維離散余弦變換。其語法格式為:(1)B=dct2(A) 返回圖像A的二維離散余弦變換值,其大小與A一樣且各元素為離散余弦變換的系數B(K1,k2)。(2)B=dct2(A,in,n)或B=dct2(A,m,n) 如果m和n比圖像A大,在對圖像進行二維離散余弦變換之前,先將圖像A補零至m*n如果m和n比圖像A小。則進行變換之前,將圖像A剪切。idct2可以實現圖像的二維離散余弦反變換,其語法格式為:B=idct2(A);B=idct2(A,m,n)或B=idct2

30、(A,m,n)。圖像數據塊分割后,即以MCU為單位順序將DU進行二維離散余弦變換。對以無符號數表示的具有P位精度的輸入數據,在DCT前腰減去2P-1 ,轉換成有符號數;而在IDCT后,應加上2P-1,轉換成無符號數。對每個 88的數據塊DU進行DCT后,得到的64個系數代表了該圖像塊的頻率成分,其中低頻分量集中在左上角,高頻分量分布在右下角。系數矩陣左上角的稱為直流(DC)系數,它代表了該數據塊的平均值;其余63個稱為交流(AC)系數。2.2.3 系數量化圖像數據轉換為DCT頻率系數之后,還要進行量化階段,才能進入編碼過程。量化階段需要兩個8*8量化矩陣數據,一個是專門處理亮度的頻率系數,另一

31、個則是針對色度的頻率系數,將頻率系數除以量化矩陣的值之后取整,即完成了量化過程。當頻率系數經過量化之后,將頻率系數由浮點數轉變為整數,這才便于執行最后的編碼。不難發現,經過量化階段之后,所有的數據只保留了整數近似值,也就再度損失了一些數據容。在JPEG算法中,由于對亮度和色度的精度要求不同,分別對亮度和色度采用不同的量化表。前者細量化,后者粗量化。 下圖給出JPEG的亮度量化表和色度量化表,該量化表是從廣泛的實驗中得出的。當然,你也可以自定義量化表。表2- SEQ 表格 * ARABIC 1 亮度量化值表1611101624405161 12 1214192658605514131624405

32、769561417222951878062182237566810910377243555648110411392496478871031211201017292959811210010399表2- SEQ 表格 * ARABIC 2 色度量化值表17182447999999991821266699999999242656999999999947669999999999999999999999999999999999999999999999999999999999999999999999999999這兩表依據心理視覺閥制作, 對 8bit 的亮度和色度的圖象的處理效果不錯。量化表是控制 JPE

33、G 壓縮比的關鍵,這個步驟除掉了一些高頻量, 損失了很多細節信息。但事實上人眼對高頻信號的敏感度遠沒有低頻信號那么敏感。所以處理后的視覺損失很小,從上面的量化表也可以看出,低頻部分采用了相對較短的量化步長,而高頻部分則采用了相對較長的量化步長,這樣做,也是為了在一定程度上得到相對清晰的圖像和更高的壓縮率。另一個重要原因是所有的圖片的點與點之間會有一個色彩過渡的過程,而大量的圖象信息被包含在低頻率空間中,經過DCT處理后, 在高頻率部分, 將出現大量連續的零。2.2.4 Zigzag掃描排序DCT系數量化后,用Z(zigzag)形掃描將其變成一維數列,這樣做的目的是有利于熵編碼,Z形掃描的順序如

34、圖2-2 所示:圖2-2 zig-zag掃描示意圖DCT 將一個 8x8 的數組變換成另一個 8x8 的數組. 但是存里所有數據都是線形存放的, 如果我們一行行的存放這 64 個數字, 每行的結尾的點和下行開始的點就沒有什么關系, 所以 JPEG 規定按如下圖中的數字順序依次保存和讀取64 個DCT的系數值。表3-3DCT系數值這樣數列里的相鄰點在圖片上也是相鄰的了。不難發現,這種數據的掃描、保存、讀取方式,是從8*8矩陣的左上角開始,按照英文字母Z的形狀進行掃描的,一般將其稱之為Zigzag掃描排序。如下圖所示:圖2-3 z掃描示意圖2.2.5 DC系數調制編碼在做DC編碼之前,還必須對DC

35、值進行脈沖差值運算,88圖像塊經過DCT變換之后得到的DC直流系數有兩個特點,一是系數的數值比較大,二是相鄰88圖像塊的DC系數值變化不大。根據這個特點,才使用了差分脈沖調制編碼(DPCM)技術,對相鄰圖像塊之間量化DC系數的差值(Delta)進行編碼,DeltaDC(0, 0)k-DC(0, 0)k-1具體做法是在Y、Cb、Cr頻率系數矩陣中,后一個88塊的DC值減去前一個88塊的DC作為后一個88塊新的DC值,并保留后一個88塊的DC原值,用于后一個88塊的差值DC運算,亦即每次后一個88塊的DC值減去的是第一個88塊的原來DC值,而不是經運算后的差值。DC編碼哈夫曼識別碼(或稱標志碼)D

36、C差值二進制代碼 表3-4、3-5給出了Y、Cb Cr矩陣的DC差值霍夫曼編碼表。表3-4 Y矩陣DC差值參考表DC差值二進制碼的碼長Huffman識別碼的碼長Huffman識別碼0200130102301133100431015311064111075111108611111097111111010811111110119111111110表3-5 Cb、Cr矩陣DC差值參考表二進制碼的碼長Huffman識別碼的碼長Huffman識別碼0200120122103311044111055111106611111077111111088111111109911111111010101111111

37、11011112.2.6AC系數調制編碼由于霍夫曼編碼的對象是整數,所以在做霍夫曼編碼之前,還得對量化后的DCT系數矩陣進行取整。經過取整以后,每一個88塊中,有大量的AC系數的值為0。為了把盡可能多的其值為0的AC系數串在一起,以利于第四步的AC編碼與提高壓縮比,還必須把YcbCr矩陣中的每一個88塊中的64個元素進行“Z”字形排序,這樣就可以做到把盡可能多的0串在一起。AC編碼的原理和方法跟DC相似,所不同的是AC編碼中多了一項RLE壓縮編碼,前面說到經過量化取整以后,有許多AC值為0,并經過“Z”字形排序,把原可能多的0串行在一起。在這里RLE壓縮編碼的就是用一個數值表示為0的AC值前有

38、幾個AC值為0。例如,在M,N這一組RLE編碼中,N表示不為0的AC值,M則表示在這不為0的AC值,N之前0的個數,M最多只能為15,如果AC數據值N之前有17個AC值為0,則先以15,0代表有16個值為0,再以1,N表示N前有一個值為0,如果在某個AC數據值之后(該值不為0),所有AC值皆為0,則這串數據可以用0,0表示。做完RLE壓縮后,再對不為0的AC值進行霍夫曼編碼,跟DC值一樣進行,只不過用的是另兩哈夫曼編碼表,完整的AC編碼如圖2-4: eq oac(,1) eq oac(,2) eq oac(,3)AC編碼碼串圖2-4完整AC編碼圖完整的AC編碼碼串包括三部分:(1)的位置記錄“

39、0”的個數;(2)的位置為霍夫曼識別碼;(3)的位置的AC值的二進制代碼值這樣的一個碼串才算是一個完整的AC霍夫曼碼串。將直流元素轉換成與上一個之差之后,接下來將DCT塊重新排序成ZigZag序列,再后,JPEG用一個熵編碼機制送出元素,輸出帶有建立在其中的RLE,它是編碼機制的主要部分,基本上,熵編碼輸出包括三個單詞的序列,不斷重復直到塊結束,三個單詞如下:1.行程長度DCT輸出矩陣中,當前元素之前的連續0 的個數2.位計數 后面跟著的幅度值所用的位數3.幅度 DCT系數的幅度行程長度和位計數這兩個值的組合,形成了輸出的代碼。位計數是將幅度可變長度整型編碼所使用的位數目。可變長度整型數編碼利

40、用了DCT的輸出應該由大多數較小的數值所組成的事實,因此我們想用較少的位數目進行編碼。下面是位計數與用這個數目編碼的系數幅度: 位計數 幅度 1 1,12 3到2, 2到33 7到4, 4到74 15到8, 8到155 31到16,16到316 63到32,32到637 127到63,64到1278 255到128,128到2559 511到256,256到51110 1023到512,512到1023要注意的是每一個位計數編碼高低值的對稱序列,中間跳過的值用表中從1位開始的較小的位計數進行編碼。2.2.7 霍夫曼編碼Huffman編碼過程的幾個步驟:l)將信號源的符號按照出現概率遞減的順序排

41、列。(注意,一定要遞減)2)將最下面的兩個最小出現概率進行合并相加,得到的結果作為新符號的出現概率。3)重復進行步驟1和2直到概率相加的結果等于1為止。4)在合并運算時,概率大的符號用編碼0表示,概率小的符號用編碼1表示。5)記錄下概率為1處到當前信號源符號之間的0,l序列,從而得到每個符號的編碼。 下面我舉個簡單例子: 一串信號源Ss1,s2,s3,s4,s5對應概率為p40,30,15,10,5,(百分率)按照遞減的格式排列概率后,根據第二步,會得到一個新的概率列表,依然按照遞減排列,注意:如果遇到一樣概率,合并后的概率放在下面!最后概率最大的編碼為0,最小的編碼為1,所以,編碼結果為:

42、s1=1 s2=00 s3=010 s4=0110 s5=0111霍夫曼編碼的特點:1 編出來的碼都是異字頭碼,保證了碼的唯一可譯性。2 由于編碼長度可變。因此譯碼時間較長,使得霍夫曼編碼的壓縮與還原相當費時。3編碼長度不統一,硬件實現有難度。4 對不同信號源的編碼效率不同,當信號源的符號概率為2的負冪次方時,達到100的編碼效率;若信號源符號的概率相等,則編碼效率最低。5 由于0與1的指定是任意的,故由上述過程編出的最佳碼不是唯一的,但其平均碼長是一樣的,故不影響編碼效率與數據壓縮性能。限于篇幅原因,在此就不再詳述。2.3 JPEG壓縮要求1 達到或接近當前壓縮比與圖像保真度的技術水平,與原

43、始圖像相比,人的視覺難以區分2 能適用于任何種類的連續色調的圖像,且長寬比都不受限制,同時也不受限于景物容、圖像復雜度。3 壓縮以后的數據,對于圖像數據的存儲來說,節省了存儲空間,使得原有的存儲設備, 能夠用來存儲更多的信息。而對圖像的傳輸而言,則減少了傳輸率,節省了傳輸時間,解決了數據量大和帶寬有限的問題。2.4 JPEG解碼原理1.讀入文件按照JFIF文件格式,將JPEG文件相關的字段信息一一讀取出來,并進行相應的解析。例如,圖像的寬度、高度、量化表、Huffman表、水平/垂直采樣因子等。一般而言,JFIF格式文件的讀取順序依次為:SOI字段;APP0字段;APPn字段;DQT字段;SO

44、FO字段;DHT字段;SOS字段;壓縮數據字段;EOI字段;讀取JPEG文件相關信息的時候,有兩點需要特別注意:由于JPEG中以0XFF來做為特殊標記符,因此,如果某個像素的取值為0XFF,那么實際在保存的時候,是以0XFF00來保存的,從而避免其跟特殊標記符0XFF之間產生混淆。所以,在讀取文件信息的時候,如果遇0XFF00,就必須去除后面的00;即,將0XFF00當做0XFF;JPEG文件中,一個字(16位)的存儲是采用了Motorola格式(big-endian),而不是我們常用的Intel格式(little-endian)。因此,如果需要的話,請在處理之間進行依次高低字節的轉換。2.霍

45、夫曼碼構建在標記碼DHT之后,包含了一個或者多個Huffman表(通常是4個表)。對于一個Huffman表而言,它包含了以下三部分容:表ID和表類型;1個字節;僅有4個可選的取值,0X00,0X01,0X10,0X11,分別表示DC直流0號表,DC直流1號表,AC交流0號表,AC交流1號表;不同位數的碼字數量;前面提到,JPEG中的Huffman編碼表是按照編碼長度的位數以表格的形式保存的,而且,Huffman編碼表的位數只能是1-16位,因此,這里用16個字節來分別表示1-16位的每種位長的編碼在Huffman樹中的個數。編碼容;該字段記錄了Huffman樹中各個葉子節點的權重,上一個字段(

46、不同位數的碼字數量)的16個數值之和,就是本字段的長度,也就是Huffman樹中葉子節點的個數。這里,我們不妨以下面一段Huffman表的數據為例來說明情況(均以16進制表示):11 00 02 02 00 05 01 06 01 00 00 00 00 00 00 00 0000 01 11 02 21 03 31 41 12 51 61 71 81 91 22 13 32以上數據串中第一行代表了Huffman表ID、表類型、不同位數的碼字數量信息;第一行的第一個字節0X11代表了表的ID和類型是AC交流1號表;第一行的第2到第17字節代表了不同位數碼字的數量。即,第2個字節00表示沒有位數

47、為1的編碼;第3個和第4個字節的02表示位數為2和位數為3的編碼各有兩個;第5個字節的00表示沒有位數為5的編碼。此外,通過這些數據我們發現,此Huffman樹有0+2+2+0+5+1+6+1=17個葉子節點。第二行為編碼的容,表明17個葉子節點按照從小到大的順序排列,即,權值依次為0,1,11,2,21,3,31,41.讀取到Huffman表的數據之后,就需要構建Huffman樹了。其具體規則如下 (a)第一個編碼的數字必定為0;如果第一個編碼的位數為1,就被編碼為0;如果第一個編碼的位數為2,就被編碼為00;如果第一個編碼的位數為3,就被編碼為000。 (b)從第二個編碼開始,如果它和它前

48、面編碼具有一樣的位數,則當前編碼是它前面的編碼加1;如果它的編碼位數比它前面的編碼位數大,則當前編碼時它前面的編碼加1之后再在后面添加若干個0,直到滿足編碼位數的長度為止。還是以上面的數據為例:第一行的第2個字節00表示沒有位數為1的編碼;第一行的第3個字節02表示位數為2的編碼有2個;由于沒有位數為1的編碼,因此這里位數為2的編碼中的第一個為00,第二個為00+1=01;第一行的第4個字節02表示位數為3的編碼有2個;因此,這里位數為3的編碼中的第一個為01+1=10,然后添加1個“0”,得到100;位數為3的編碼中的第二個為100+1=101;以此類推。特別提醒的是,如果中間有某個位數的編

49、碼缺失,例如,沒有4位的編碼,則應該在3位的編碼后面加1,添加2個“00”補足5位,形成下一個5位編碼。3.系數解碼DC系數是以(A,B)的中間形式進行編碼的。其中的A代表了B的二進制編碼位數,B則利用VLI進行編碼。另外,8*8的圖像塊經過DCT變換之后得到的8*8的系數矩陣,經過Huffman編碼與RLE編碼之后,寫入編碼數據的時候,DC系數也是被寫在數據流最前面的。因此,解碼的時候,DC系數也是最先被讀取出來,假設,我們一次性讀入了若干個字節長度的數據。其中的第一個字節代表了DC系數的Huffman編碼,通過查找DC系數的Huffman表(亮度表或色度表),得到該Huffman編碼所在的

50、組編號,該編號就是DC系數中間格式(A,B)中的A,也就是B的位數。例如,A=2,就代表B采用2位二進制數進行編碼。這樣一來,讀取接下來的A位二進制數,將其譯碼為十進制,就得到了DC系數的差值。將該差值與上一個DC系數值相加,就得到了真正的當前DC系數的值。處理完DC系數之后,接下來進行AC系數的譯碼工作,顯然,這里依然需要讀取一個Huffman編碼,通過查找AC系數的Huffman編碼表,進行解碼,我們得到(A,B)的數據對,其中的A代表了0的個數,而B則代表了后面數據的位數。例如,(2,3)就代表了當前AC系數之前有2個0,下一個需要讀取的二進制數據是3位。需要提醒的是,(0,0)代表EO

51、B,即8*8塊的編碼結束。接著,讀取B位二進制數據,進行譯碼,我們就得到了AC系數的值。如此反復循環,直到遇到EOB,或者讀取了63個AC系數,我們就完成了一個8*8塊的系數矩陣的譯碼工作。4.反量化 反Zig-zag掃描 DCT逆變換在譯碼得到了8*8的系數矩陣之后,我們需要進行反量化工作。該步驟,就是將前一個步驟得到的8*8系數矩陣分別乘以8*8的量化矩陣即可。JPEG編碼過程中,為了編碼方便,采用了Zig-zag掃描,因此,這里需要進行反Zig-zag掃描,重新排列8*8的反量化系數矩陣。反Zig-zag掃描的輸入時8*8矩陣,輸出依然是8*8矩陣,只不過,數據的排列方式有所不同而已。D

52、CT變換,將原始圖像變換到頻域,而DCT逆變換,就是要將數據從頻域變換回時域。DCT逆變換的計算公式為:DCT逆變換的公式,可以改寫為:f=AFA 其中A為矩陣: 對上面的公式進行變形Y =FAf =AT YfT =(AT Y)T =YT A其中F為數據塊。經分析可知,完成一次DCT逆變換需要4步:1:壓縮數據塊(88)F矩陣與矩陣A(88)相乘,得到矩陣Y(88);2:對矩陣Y進行轉秩得到(88)YT3:YT再與矩陣A相乘得到88的矩陣ft4:對ft 進行轉秩得到f,這里的f即為經過DCT逆變換之后得到的時域的原始圖像; DCT逆變換的流程圖如下所示:圖2-5 DCT逆變換A矩陣乘法器的作用

53、是實現輸入矩陣和A矩陣的相乘。注意A矩陣在乘法的右邊。 iDCT變換的對象是8 8的數據單元,既輸入數據共64個,按行輸入,每8個數據為一行。每輸入一行數據就分別和A矩陣的每一列進行乘加運算,每完成一次這樣的乘加運算就輸出一次結果。比如,輸入第一行數據,分別和A矩陣的各列相乘,按順序輸出8個結果,這8個結果就是輸出矩陣的第一行;當輸入第二行數據時,同樣輸出8個結果,這8個結果是輸出矩陣的第二行。所以經過第一次矩陣乘法之后得到的是Y矩陣。 轉秩就是對64個數據進行重新排列,例如,對于矩陣M而言,將其第一行第二列的數據M(1,2)跟其第一列第二行的數據M(2,1)進行互換,如下表所示:左邊為未轉秩

54、的數據順序,右邊為轉秩之后的數據順序。5.顏色轉換BMP圖片是以RGB顏色空間進行保存的,因此,將JPEG解碼為BMP必須進行顏色模式的轉換。另外,由于DCT要求的定義域對稱,所以,在編碼的時候將RGB的數值圍從0,255統一減去128,將數值圍轉換到-128,127的圍。因此,解碼的時候,必須為每個顏色分量加上128。另外需要注意的是,通過解碼變換之后得到的RGB的值有可能超過255或者小于0;如果小于0,就截斷為0,如果大于255,就截取為255。基于MATLAB的算法實現3.1 JPEG壓縮設計開 始輸入一幅原始圖像根據量化表,對變換系數進行量化分成8*8像素塊,分別做DCT變換對經掃描

55、得到的DC和AC系數分別進行Huffman熵編碼得到整個圖像編碼后的比特序列,并計算壓縮比特率對DC和AC系數分別進行Huffman熵編碼結 束對量化后的變化系數進行ZigZag掃描簡單說明:要將一幅彩色圖像進行壓縮編碼,首先將圖像RGB 分量轉化為亮度分量和色差分量,然后將圖像分成88的象素塊,用正向二維DCT 把每個塊轉變成64 個DCT 系數值,其中1 個數值是直流(DC)系數,即88 空域圖像子塊的平均值,其余的63 個是交流(AC)系數,接下來對DCT 系數進行Zig-Zag 掃描和Huffman 編碼,實現了圖像壓縮。3.2基于DCT變換系統設計開 始載入原始圖像是YUV?RGB-

56、YUV設置壓縮比設置原始圖像已對原始圖像進行8*8分塊?對圖像進行分塊顯示壓縮后的圖像進行DCT反變換重排系數塊設置壓縮比保留系數求出DCT系數的排列矩陣進行DCT變換結 束NYYN此部分可分為三個過程:原始圖像的載入,顏色模式轉換與采樣以與DCT變換3.3 量化程序設計開 始結 束計算矢量距離的子函數進行分塊處理設置碼書的大小設置碼字的大小求出圖像像素的行數和列數裝入和顯示原始圖像圖像文件的顯示。 在MATLAB中,可以調用image函數來顯示圖像,其語法格式為: Image(C)image是用來顯示附標圖像,即顯示的圖像上有x、y坐標軸的顯示,可以看到圖像的像素大小。量化過程是控制 JPE

57、G 壓縮比的關鍵。 這個步驟除掉了一些高頻量, 損失了很高細節。 但事實上人眼對高空間頻率遠沒有低頻敏感。所以處理后的視覺損失很小。另一個重要原因是所有的圖片的點與點之間會有一個色彩過渡的過程。 大量的圖象信息被包含在低空間頻率中。 經過量化處理后, 在高空間頻率段, 將出現大量連續的零。3.4 Z掃描系統設計開 始產生順序遞增地址數據寫入數據存儲器是否寫滿一個數據塊?掃描地址表輸出符合Zig-Zag順序的地址數據按掃描順序輸出數據結 束NY矢量中有許多連續的 0,可以使用 RLE 來壓縮掉這些 0。假設有一組矢量(64 個的后 63 個,已按z字形掃描得到) 是57,45,0,0,0,0,2

58、3,0,-30,-16,0,0,1,0,0,0, 0 , 0 ,0 , 0,0經過 RLC 壓縮后就是(0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-16) ; (2,1) ; EOB,EOB 是一個結束標記, 表示后面都是 0 了,用 (0,0) 表示 EOB.但是, 如果這組數字不以 0 結束, 那么就不需要 EOB。3.4 霍夫曼編碼設計開 始結 束裝入Huffman數據使左分支編碼為1,右分支編碼為0將消息添加到隊列的最后為N-1消息重新進行排列做準 備遍歷至原始消息,即葉子節點,輸出讀碼字分別遍歷左右分支節點獲得Huffman碼字將最后兩個出現概率最

59、小的消息合成一個消息將N個消息進行排序初始化原始消息數排序列表初始化碼字初始化為0霍夫曼編碼部分:for i=1:numresi=blanks(260);cd=blanks(260);start=num;c=i;p=ht(c).pare;while(p0)if(ht(p).lch=c)cd(start)=0;Else cd(start)=1;end c=p;p=ht(c).pare;start=start-1;end仿真總結運行JPEG仿真程序結果顯示,JPEG壓縮編碼對圖像數據確實可以做到大幅度的壓縮,而且壓縮后的圖片質量尚可。通過本次仿真,我們可以發現JPEG壓縮編碼在對靜態圖像處理中的表

60、現非常優秀,這也正是JPEG之所以具有強大生命力的原因所在。本設計主要介紹了JPEG的編碼。該程序的編碼部分能把一BMP格式的圖象進行JEPG編碼,壓縮成以二進制形式保存的文件。論文敘述的圖像壓縮編碼算法,采用了JPEG的核心離散余弦變換算法。DCT是正交變換,它可以將8*8圖像的空間表達式轉換為頻率域,只需要用少量的數據點表示圖像;DCT產生的系數很容易被量化,因此能獲得好的塊壓縮;DCT算法的性能很好,它有快速算法,因此它在軟件中容易實現;而且DCT算法是對稱的,所以利用逆DCT算法可以用來解壓縮圖像。在這次課程設計的整個過程中,收獲主要有以下幾點:1)開始編程前,一定要了解系統意圖,做好

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論