Operator PackbitsRLE

Operator Library: Prototype

[注意] 免責聲明

函式庫:Prototype

此模組屬於 Prototype 函式庫的一部分。 目前仍處於極為初步的階段,未來可能會進行大幅修改,甚至被移除。 因此,此模組絕不可用於正式設計。 其納入僅供測試之用。

PackbitsRLE 運算子會針對輸入鏈路 I 上的影像串流,使用 packbits 演算法進行跑長編碼(RLE)壓縮。 Packbits 最初由 Apple 提出,是可用於 TIFF 檔案無損壓縮的 RLE 壓縮演算法之一。

Packbits 演算法

柵格影像檔案由一個標頭(包含影像尺寸、色彩深度等資訊) 以及描述每個像素顏色的資料所組成。 這些資料是以順序方式寫入的,也就是說,像素顏色資訊必須從左至右、 從上至下,依像素行來解讀。

在未壓縮模式下,n 個相同顏色的相鄰像素的色彩資訊會被寫入 n 次。這會造成冗餘。

範例:

該圖示為一張 4 像素 × 4 像素的黑白圖像。 在未壓縮格式下,像素的表示方式如下(B=黑色,W=白色): BBWWWBBBBBBWWWWW 這種冗餘性可透過 packbits 壓縮技術加以減少。

packbits 資料流由一組封包組成,每個封包包含一個一位元組的標頭,後接資料。 該標頭為一個帶符號的位元組。

該資料以一個位元組來描述每個像素。若標頭包含一個值 n(範圍為 -127 至 -1),則標頭後面的那個位元組 會在解壓縮後的輸出中重複出現 -n+1 次。 因此,冗餘資訊(相同的像素顏色)僅儲存一次,並搭配一個計數器(標頭)。 例如,BBBBBB 將被儲存為 -6B。 當出現第一個不同顏色的像素時,便會產生一個新的標頭。

若標頭包含值 n {0 至 127},則標頭後接的 n+1 個位元組將保持未壓縮狀態(原樣複製)。

可壓縮的最長像素序列由 128 位元組組成。

經過 packbits 壓縮後,上方的範例圖像(BBWWWBBBBBBWWWWW)變成 -2B-3W-6B-5W,也就是說, 只需 8 個符號(位元組)即可表示,而非 16 個。

[重要] 有效性

Packbits 適用於灰階、色盤及二值圖像。 相同顏色的連續像素數量越多,該運算子就能越有效地壓縮資料。 二值圖像(例如黑白圖像)可獲得最佳的壓縮效果。

(相當簡單的)packbits 演算法的優勢在於其速度,以及 對記憶體(256 位元組)和處理能力的消耗極為有限。

I/O Properties

Property Value
Operator Type M
Input Link I,資料輸入
Output Link O,資料輸出

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [4, 12] as I
Arithmetic {unsigned, signed} as I
Parallelism 1 as I
Kernel Columns any as I
Kernel Rows any as I
Img Protocol VALT_IMAGE2D as I
Color Format any as I
Color Flavor any as I
Max. Img Width any as I1
Max. Img Height any as I

1

輸出影像寬度不得超過 2^31 - 1。

Parameters

無

Examples of Use

以下範例展示了 PackbitsRLE 運算子的使用方式: