压缩失真

**壓縮失真**（英語：**Compression artifact**），是媒體（包括圖像、音訊和影片）在使用破壞性資料壓縮之後產生的明顯失真，在圖像和視頻中也常將「artifact」譯作**偽像**。

破壞性資料壓縮在壓縮的過程中，為了使數據變得足夠簡化而能保存在一定的磁碟空間或是為了在一定的頻寬限制（即媒體傳輸或串流的數據速率或比特率）中傳輸，而捨棄了部分的資料。如果壓縮程序不能使用壓縮過的版本產生足夠的數據還原壓縮前的數據，便會導致品質減少或是產生失真。或者說，使用的壓縮算法可能不能足夠聰明的辨別某些小地方的失真，而這些往往會令人感覺討厭。

壓縮失真出現在許多的媒體中，例如 DVD，以及一些常見的電腦文件格式，如 JPEG、MP3 或 MPEG 文件，以及某些其他形式的光碟，例如索尼的 MiniDisc 格式。另外，一些未經過壓縮的媒體格式（諸如鐳射影碟、CDDA 以及 WAV 文件）或是非破壞性資料壓縮媒體（諸如 FLAC 或 PNG）不會有壓縮失真。

在設計一個破壞性資料壓縮算法時，儘量減少可察覺的失真是一個很關鍵的目標。然而，這些失真有時也被「有意」的應用在藝術相關目的，即一種被稱為故障藝術 或資料狂舞的藝術風格。

從技術上的角度來說，壓縮失真是一種特別類型的數據錯誤，這種錯誤通常是因為破壞性資料壓縮中的量化而產生的結果。

## 圖像

在使用基於區塊的編碼算法進行量化時，像是在使用 JPEG 壓縮的圖像中，有可能出現幾種類型的失真。

* 振鈴效應
* 輪廓
* 色調分離
* 沿著彎曲的邊緣有階梯狀的雜訊（混疊）
* 方塊效應

另外使用模式匹配來刪除重複或相似資料的破壞性資料壓縮算法應用在文字印刷時，很有可能產生難以檢測的印刷錯誤。例如：數字「6」和「8」可能會被算法誤換。這樣的現象曾經發在某一些使用 JBIG2 的影印機上。

### 方塊效應

在低比特率時，任何基於區塊的破壞性資料壓縮算法皆會在像素區塊與區塊之間的邊界上產生可見的失真。這些邊界可以是變換區塊邊界，預測區塊邊界，或是兩者皆是，也可能與宏區塊邊界同時發生。不論失真的原因是甚麼，_宏區塊_這一個詞很經常被使用。另外這個現象也被稱為平鋪 ，拼接，像素化，縫製，及西洋棋盤化。

方塊效應是過度的區塊變換編碼原則而產生的。將變換（例如離散餘弦變換）應用在一個區塊的像素上，並且為了實現破壞性資料壓縮，每一個區塊的轉換係數皆被量化。當我們使用越低的比特率時，這些係數就會被越粗略的儲存並且會有越多的係數被量化為零。據統計結果，圖像資料一般而言低頻率的成分比高頻率的成分多，因此在量化之後資料中低頻率的部分一般會有較多被保留下來，這個現象會導致模糊和低解析度分區的出現。在最極端的狀況下，只會有頻率為零（直流）的係數被保留下來（該直流係數就是這個分區的平均顏色），也就是說這個變換區塊在重建後只有一個單一的顏色。

因為這個量化的處理過程是被單獨的應用在每一個區塊，所以相鄰區塊係數的量化皆不同。這個現象導致在區塊邊界上出現不連續。這個現象在顏色變化平緩的地方最明顯，因為這些地方比較少有可以這蓋這個現象的圖像內容。

### 抑制圖像失真

已經有各種不同的方法被提出來解決圖像壓縮產生的影響，但因為了使用標準化的壓縮 / 解壓縮技術，並保留壓縮技術的優點（例如：較低的傳輸和儲存成本），這些方法當中大部分關注於圖像的「後處理」；也就是說，在觀看者收到或觀看圖像時進行圖像的處理。目前沒有任何一個後處理技術顯示出能在所有的情況下提高圖像的品質；因此，沒有一個方法被廣泛地接受，然而仍有一些方法被實作並應用在一些專有的系統中。例如在許多的照片編輯軟體中有內建專有抑制 JPEG 失真的算法。一些消費性產品中往往稱這些後處理程序為「MPEG 雜訊抑制」。

## 影片

當使用運動預測的方式進行壓縮時，如 MPEG-1、MPEG-2 或 MPEG-4，壓縮失真常常會停留在幾個解壓縮出來相依的幀上，並且會隨著圖像的光流移動，形成一種特別的效果，像是煤塵在畫面中隨著物體移動。

在已壓縮位元流中的數據錯誤，可能來自於傳輸錯誤，可以導致類似嚴重量化誤差的錯誤，甚至在短時間內完全的打斷數據串流的解析，造成圖片的崩潰。當嚴重的錯誤發生在位元流中，一段時間內解碼器仍然持續運作並更新受損的影像，便造成鬼影現象並持續解碼到下一個獨立壓縮的幀為止。在 MPEG 影像編碼中，這些獨立的幀被稱為「節點圖像」（I 畫格），其中的 I 表示 Intra。在下一個節點圖像到達以前，解碼器可以執行錯誤隱蔽。

### 運動補償區塊邊界失真

區塊邊界的不連續性可能發生在運動補償預測區塊的邊緣。在運動補償影像壓縮中，當前畫格是藉由前幾個已解碼的幀中移動的區塊來預測的。如果兩個鄰近的區塊使用不同的運動向量，則在這兩個區塊的邊緣之間就會出現不連續的現象。

### 蚊式噪聲

影像的壓縮失真包括靜態組成圖像壓縮的累積結果，例如振鈴效應或是其他邊緣失真（在連續的靜態影像中在邊緣附近產生連續閃爍模糊的小點），被稱為蚊式噪聲，因為它們就像蚊子蜂擁到該物體的周圍。

### 抑制影像失真

在區塊邊緣的失真可以透過去區塊濾波器抑制。而當在靜止圖像編碼中，我們也可以將去區塊濾波器應用在解碼器的輸出做為後處理。

在閉環預測的運動預測影像編碼中，編碼器使用解碼器的輸出作為對未來幾幀預測的參考。為此，這個編碼在概念上整合了一個解碼器。如果這個「解碼器」中進行去區塊的處理，則經過去區塊的畫格被使用為運動補償的參考畫格，如此可以藉由避免跨幀傳遞方塊效應來改善編碼效率。這樣的設計被稱為「在環去區塊濾波器」。標準中訂定使用在環去區塊濾波器的包括 VC-1，H.263 Annex J，H.264/AVC 和 H.265/HEVC。

## 音訊

破壞性音訊壓縮一般與心理聲學模型（人類聽覺模型）一起被使用。破壞性音訊壓縮通常涉及使用時域 / 頻域變換，例如改進的離散餘弦變換。基於心理聲學模型，我們可以利用遮蔽效應，像是頻域遮蔽及時域遮蔽，使得不會記錄到不會被注意到的聲音。例如，在一般情況下，人類不能察覺到一個與音量較大的聲音同時出現的微小聲音。破壞性壓縮技術可能可以識別出這個微小的聲音並嘗試將其移除。此外，量化噪聲也會因被其他更為明顯的聲音遮蓋而「隱藏」。在低壓縮率的時候，我們可以使用較保守的心理聲學模型及較小的區塊大小。

當心理聲學模型不準確時、變換區塊大小受限時、或使用積極的壓縮時，這些情況下可能會導致壓縮失真。在壓縮音訊中的壓縮失真通常表現為振鈴效應、預回聲、birdie artifacts、中斷、破損或是雜音。

要觀察音訊壓縮失真的一個好方法是聽在相對高度壓縮音訊檔案（例如 96kbps MP3）中的「觀眾喝采鼓掌聲」。在一般情況下，具有音樂性的聲音中有較多的重複波形和較容易預測的音量變化，然而鼓掌基本上是隨機的，因此難以被壓縮。因此可以在一個高度壓縮後的鼓掌聲中清楚地觀察到「metallic ringing」和其他的壓縮失真現象。

## 藝術上的應用

壓縮失真可以被刻意的用作一種視覺風格，有時也稱為故障藝術。例如在靜止的圖像使用刻意的 JPEG 失真作為圖片風格的基礎。一個例子是由德國攝影師托馬斯拉夫的 _Jpegs_，

在影像藝術中，一種技術是 datamoshing，其中是利用兩個不同的影片畫格交錯，以致於兩個畫格中間的幀是由兩個不同的影片來源內插出來的。另一種技術則是簡單地從一個有損影片格式轉碼至另一個，這個技術利用了不同的影片編碼器在對運動及色彩資訊處理上的差異。 這個技術被使用在藝術家 Bertrand Planes 在 2006 年與 Christian Jacquemin 合作；以及和 DivXPrime、 Sven König、Takeshi Murata、Jacques Perconte 和 Paul B. Davis 等人於 Paperrad 合作。最近也使用在 David OReilly 的作品，和 Chairlift 與 Kanye West 的音樂錄影帶。

## 參考資料

## 外部連結

* DivXPrime （頁面存檔備份，存於網際網路檔案館） First known experiments of datamoshing video software by Bertrand Planes & Christian Jacquemin (based on Xvid algorithm)
* Teaser for "Accouchement Sonique" a short movie directed by Jérome Blanquet, datamoshing effect by David Olivari, produced by [Metronomic].
* datamosher （頁面存檔備份，存於網際網路檔案館） A GPL video datamoshing software.
* Example of heavy video compression artefacts.
* JPEG Tutor, an interactive applet allowing you to investigate the effects of changing the quantization matrix.
* JPEG deringing and deblocking: Matlab software and Photoshop plug-in （頁面存檔備份，存於網際網路檔案館）
* Vernacular of File Formats, a guide to different compression artifacts from the most used file formats