JPEG - 想法與實踐/簡介
JPEG 委員會希望該方法能夠以多種變體和擴充套件方式使用。
- 順序 DCT 操作模式,其中影像以與第一部分相同的方式掃描(但不是以我們的之字形方式,從左到右逐列掃描,而是從上到下逐行掃描,就像閱讀一樣)。
- 漸進式 DCT 操作模式,其中影像在位流傳輸的同時完全顯示,最初不完美,然後逐漸改善。
- 無損 操作模式,其中檔案僅被壓縮,沒有任何資料因餘弦變換或量化而丟失。
- 分層(DCT 或無損)操作模式,其中影像以多種解析度儲存以供不同用途(低解析度螢幕、高解析度印表機等),這樣低解析度影像以補充資料的形式儲存,這些資料可以根據需要新增以生成更高解析度的影像。
顏色值通常以位元組(8 位數字)測量,在這種情況下,計算中(實數)數字的精度設定為 11 位。
JPEG 還提供擴充套件精度,主要用於灰度影像,其中顏色值使用 12 位(範圍從 0 到 4095)而不是使用 8 位,並且計算精度增加到 15 位。擴充套件精度意味著哈夫曼表必須擴充套件到 DC 數字的 15 位(而不是 11 位)和 AC 數字的 14 位(而不是 10 位)。此外,量化表中的數字可以是字(從 0 到 65535)而不是位元組。由於這種可能性很少使用,我們這裡將忽略它。
對於基線順序 DCT 模式,即非擴充套件順序 DCT 模式,編碼方法是哈夫曼編碼,每個分量使用兩個表。對於擴充套件模式,您可以在使用兩個或四個表的哈夫曼編碼和算術編碼之間進行選擇。
儘管設計了四種模式,但只有基線順序 DCT 模式在廣泛應用中存活下來。
- 如今,漸進式和分層模式沒有太多意義,因為 JPEG 影像傳輸和顯示速度很快。
- 無損模式的好處似乎太小。算術編碼可以比哈夫曼編碼壓縮得更好,但它速度更慢,並且存在與專利相關的問題。
我們這裡所做的描述,就像我們在第一部分中所做的描述一樣,伴隨著一些程式的編寫。這次,這樣做只是為了確保我們正確理解了該過程。我們將展示用類似 Pascal 的語言編寫的這些程式的片段,這些片段應該易於理解。
我們首先製作了一個可以將 BMP 格式的影像轉換為 JPEG 格式的灰度影像的程式。當它正常工作後,我們將其擴充套件到彩色影像。這樣的程式,要在 JPEG 檔案的生產系統中使用,當然必須用匯編語言編寫,並且在變換中不使用協處理器(80 位數字)。但是,如果該程式只是為了演示,或者它是生成計算機圖形的程式的一部分,那麼它可以用高階語言編寫,並且可以使用浮點運算。我們能夠讀取 JPEG 檔案並繪製圖像的程式(針對基線順序 DCT 模式)是透過相同的方式製作的。由於已經存在許多這樣的程式,因此它不需要高效。相反,我們透過使用“setpixel”過程使其變得格外緩慢,因為這樣做更簡單——而且它會使繪製呈現出一種有趣的風格。
下面左側的影像是用我們第一部分中的程式製作的,右側的影像是用我們這部分中的程式製作的。質量大致相同。第一個佔 16.3 Kb,第二個佔 15.1 Kb(未壓縮時佔 228 Kb)
-
演示程式:16.3 Kb
-
真實程式:15.1 Kb
"連續色調靜止影像的數字壓縮和編碼 - 需求和指南/建議 T.81"(1992),也稱為 T.81,長達 180 頁。如果您只對使用哈夫曼編碼的基線順序 DCT 模式感興趣,則不必閱讀所有 180 頁。所需的數學和程式設計知識有限。您必須已經瞭解數學術語的含義,因為這些術語沒有解釋。
T.81 的目的是為該過程的核心設定一個通用標準。具體細節在實施標準中單獨描述。這些在標題為“JPEG 檔案交換格式,版本...”的附加文件中。我們所描述的內容中,只有顏色空間指定在這些實施文件中:RGB → YCbCr 變換。
第一部分中顯示的這種顏色變換公式可以在 1992 年的 1.02 版本(7 頁)中找到。T.81 只談到四個分量。隱含地,一個分量意味著影像為灰度,三個分量可以是 RGB 分量,最常見的是 YCbCr 分量,第四個分量用於透明度可能性。

