圖像為什么非壓縮不可?
圖像和視頻的壓縮技術應用廣泛,每天刷微博的圖片,盜版回來的小電影,無一不用壓縮技術。
壓縮的必要性
某天陳老師要錄動作大片,經過長期艱苦奮斗,他制成了這樣一段視頻:畫面大小 1000×1000pixel,24 位真彩色,每秒 30 幀,時長 2 小時。
如果不進行任何壓縮,存儲這段視頻需要 1000*1000*24*30*60*120=5.184 ×1012 bit ≈ 648GB 的空間。(2014 年 4 月 5 日,500GB 硬盤最低價格是 299 元~)
用 4M 寬帶下載這部大片,最少需要 360 小時 = 15 天。
可見,要保障人民群眾的切身利益,壓縮技術非常有必要。
壓縮的可能性
就單幅圖像而言,壓縮的可能性是顯而易見的。
如上面三幅小圖,圖a每個形狀里面都填充著相同的顏色,圖b每一行的顏色是相同的,更過分的圖c整幅圖只填充了一種顏色。
壓縮前:第 1 個點灰色,第 2 個點灰色,第 3 個點灰色,第 4 個點灰色,第 5 個點灰色,第 6 個點灰色......第 89 個點灰色,第 90 個點黑色......
最簡單的壓縮后:第 1 到 89 個點灰色,第 90 個點黑色。
常見的壓縮標準
JPEG 是廣泛使用的照片存儲格式,它適應人的視覺,用更多的數據來存儲人眼敏感的圖像低頻部分,用很少的數據存儲人眼不關心的高頻部分。維基百科有很詳盡的講解 http://zh.wikipedia.org/wiki/JPEG
JPEG 2000 是基于小波變換的圖像壓縮標準,可以獲得比 JPEG 更大的壓縮比,通常它被認為是未來取代 JPEG 的標準。
圖像壓縮的基本套路
圖像壓縮基本按照以下流程進行:
原圖像 -> 映射 -> 量化 -> 符號編碼 -> 存儲/傳輸 -> 符號解碼 -> 反映射 -> 圖像
映射(Mapper):對原圖像進行變換,使之更容易被壓縮。(比如傅里葉變換)
量化(Quantizer):量化是壓縮的主要圖像,主要也是它引入誤差的。比如有一個以 2 為單位的量化器,看到原圖像值是 17,將它除 2 向下取整,量化得到8;圖像還原的時候,用8×2=16 得到還原值,與真實值相差了1。
符號編碼(Symbol encoder):圖像已經變換量化完了,該為存儲和傳輸作準備了。符號編碼可以進一步地壓縮文件大小:
將重復出現次數多的數據,用簡短的符號進行編碼;出現次數少的數據,用較長的符號進行編碼;后面的哈夫曼(Huffman)編碼會詳細講到~
JPEG 的壓縮套路
鑒于圖像壓縮的每個步驟都能有不同的方法,所以有必要制定統一的標準,使得圖像在每臺電腦每部手機中都能正常使用。
JPEG 是其中一個標準,它的壓縮套路如下:
原圖像 -> 分解成一個個小圖像 -> 變換 -> 量化 -> 符號編碼 -> 壓縮后的圖像
分解圖像:JPEG 會將一幅大圖像分解成8×8 的小圖像。至于為什么是8×8 呢,嗯,歡迎各位同學劇透;
變換:JPEG 使用 DCT 變換(離散余弦變換),類似傅里葉變換,不過它是取實部。(不由感慨,學好“信號與系統”也是很有必要的...)
量化:JPEG 通過各種除法來進行量化,不過對于不同重要程度的信息,它所除的數的大小會有所不同;
符號編碼:JPEG 使用常見的哈夫曼(Huffman)編碼。
圖像還原,就是反過來進行這些步驟。
JPEG 的實現方法比較簡單,小朋友們在家也能模仿。也因為簡單高效,所以 JPEG 的應用范圍相當廣泛。
<span id="shareA4" class="fl"> </span>