數字圖像入門 圖像的壓縮
夏昆岡 于 2012.02.15 10:21:24 | 源自:www.soomal.com | 版權:原創 | 平均/總評分:09.36/103

雖然存儲成本在持續減低,但圖像的壓縮還是非常有必要。舉個實例,一張1600萬畫素的數位照片,采用壓縮格式JPG保存,它可能只需要6M左右的存儲空間,而使用無壓縮的BMP格式,它需要45M+的存儲空間。上一篇我們提到矢量圖像的一大優點就是尺寸小,但數字圖像不可能都矢量化,要節約存儲空間,圖像壓縮技術必不可少,圖像對節約網路傳輸頻寬也有重要意義,網頁中的圖像,大部分都是壓縮后的。壓縮又分為有損于無損的兩大類,這里簡單介紹一下幾種常見的壓縮編碼。

行程長度編碼

  • 假設某張圖像一共有三種顏色,分別為A/B/C三個值,排列為AAAAAABBCCCC,這種記錄方法浪費空間,它需要12個單位的記錄空間,如果使用A6B2C4這樣的記錄方式,它只需要6個單位的空間,這就是行程長度編碼,這是一種無損的壓縮方式。行程長度編碼對應的英文是Run- Length Encoding,縮寫為RLE,相信很多搞圖像處理的讀者對RLE應該比較眼熟。

    RLE有派生出很多分支算法,例如PCX行程編碼、BI_RLE8、BI_RLE4等方法,根據RLE8又發展出了緊縮位[Packbits]壓縮方法。這些方法針對不同的圖像設計,有各自的局限[RLE8最高只支援256色的圖像],但有一點是肯定的,它們都是可以進行逆運算的編碼,即無損的編碼方案。行程長度編碼以及其衍生編碼,是無損編碼中非常重要的一支,很多重要的圖像格式都采用它,例如BMP、TIFF、PCX等。

    LWZ編碼

  • LWZ,全稱Lempel-Ziv-Welch Encoding,這也是一種無損編碼的方法。它的基本原理是將頻繁出現的序列用一個短的字串來替代,例如示意圖中AAAAAABBCCCC,用αβ代替,這樣就節省了大量的存儲空間,這有點類似于用π來表示無窮盡不循環的圓周率一樣。原始數據中某數據重復頻率越高時,壓縮率就越大,這種算法可逆運算,也是無損編碼。TIFF格式中也運用了該編碼。因為存在替換,編碼過程會創建自適應字典。

    霍夫曼編碼

  • 這是通過霍夫曼編碼“this is an example of a huffman tree”句子得到的字母頻率并來建構霍夫曼樹。此圖來自維基百科。
  • 霍夫曼編碼[Huffman Coding]也是一種常見的編碼,有時也被翻譯成哈夫曼算法,這是一種對數據頻率進行評估的一種算法,高頻的數據采用短數據替代,從而實現壓縮,示意圖中,顯示了對“this is an example of a huffman tree”這個句子進行分析,并得到各個字母的出現次數的結果,這種分析結構叫霍夫曼樹。 這些無損算法被廣泛適用于各類圖像格式當中,它也被適用于一般性文檔的壓縮當中。當然,我們并不是數學高手也不是程式員,對于這類算法,我們沒必要了解到非常深入,只要知道一點就行,無損算法是可逆的,它對圖像不會產生任何畫質的影響。無損算法也不僅限于這些,還有一些其他的,不同的算法也可以組合使用,例如TIFF格式的就用到了多種無損編碼。

    JPEG

    JPEG即Joint Photographic Experts Group[聯合圖像專家小組],這種編碼與我們的生活很近,JPEG其實分為無損和有損兩種算法,但無損算法并沒有流行,而有損算法則被廣泛使用。因此我們的印象當中,JPEG是有損的,這并沒錯,只是不夠全面。JPEG還可以是基于JPEG編碼的圖像,常見的擴展名即jpg,幾乎所有的數位相機都支援將照片保存為jpg圖像 Soomal的文章配圖都是jpg的,這是一種運用非常廣泛的圖像類型。

    它的簡單流程是,首先將RGB色彩體系轉換成YUV色彩體系,Y表示畫素亮度,UV一起表示色調與飽和度。然后利用人眼對亮度的敏感程度高于對于色彩敏感程度的特點,進行縮減取樣,即減少UV的數據量,從而實現數據的壓縮。根據采樣的縮減量會產生不同的壓縮率,JPEG在高壓縮率會丟失大量數據而產生馬賽克。

    關于圖像的壓縮,我們就簡單的介紹這些,要說得再深入一些,我們也無能為力了,這篇文章讀起來相當枯燥,其實,寫這篇文章的目的并不是讓各位發奮研究算法,而是告訴大家,圖像的壓縮有無損與有損多種,壓縮不等于一定會產生畫質損失,而使用JPEG時,應該注意設定壓縮率,避免畫質損失過大,也應該回避反復編輯,多次打開、編輯、存儲的過程會讓有損編碼造成的損失累計為明顯可察覺的程度。

    請評分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    03
    最愛這類科普文章了,再多一些配圖來舉例子就更贊了,或者給出一些參考文獻來源鏈接,供有興趣的讀者繼續學習
    發表于2014.03.10 15:49:00
    42
    060.028.122.***
    060.028.122.***
    發表于2012.10.25 13:53:30
    40
    03
    “而使用JPEG時,應該注意設定壓縮率,避免畫質損失過大,也應該回避反復編輯,多次打開、編輯、存儲的過程會讓有損編碼造成的損失累計為明顯可察覺的程度。”
    發表于2012.02.20 19:31:53
    39
    03
    對算法的研究博大精深。
    發表于2012.02.18 21:04:03
    38
    03
    發表于2012.02.18 13:29:06
    36
    221.205.098.***
    221.205.098.***
    發表于2012.02.17 17:07:27
    35
    03
    發表于2012.02.17 11:57:34
    34
    125.085.249.***
    125.085.249.***
    發表于2012.02.17 02:13:05
    32
    03
    發表于2012.02.17 02:12:50
    31
    03
    長知識了……
    發表于2012.02.16 22:32:10
    30
    03
    發表于2012.02.16 20:15:42
    29
    03
    發表于2012.02.16 20:13:28
    28
    111.161.046.***
    111.161.046.***
    發表于2012.02.16 16:11:35
    27
    058.247.171.***
    058.247.171.***
    發表于2012.02.16 13:36:55
    26
    03
    不知道png是屬于哪種無損壓縮格式?
    發表于2012.02.16 13:34:12
    25
    03
    發表于2012.02.16 00:29:02
    24
    116.113.237.***
    116.113.237.***
    發表于2012.02.15 22:14:16
    23
    提示
    本貼不可匿名回復,回復等級為:1 ,您現在正處在潛水狀態
    回復
    驗證碼
    9285 為防止廣告機貼垃圾,不得已而為之
    表情
    正文
    京ICP備11010137號 京ICP證110276號 京公網安備110114000469號