跳至內容

應用說明:JPEG 壓縮#

本應用說明闡述了 Basler JPEG 壓縮運算子的使用方法(應用說明 SAN013)。

您將了解各運算子的功能。透過 Visual Applets 設計,展示了一個 JPEG 壓縮應用程式。文中介紹了一個可產生 JPEG 資料檔案的 SDK 專案。

在VisualApplets 中進行 JPEG 壓縮時,需要兩個運算子。它們分別是 ImageBuffer_JPEG_Gray 及 JPEG_Encoder_Gray. 影像緩衝區用於將影像資料緩衝至幀擷取卡的記憶體中,並用於對像素進行特定的重新排序。JPEG 編碼器則負責執行 JPEG 壓縮本身。

由於 JPEG 壓縮採用 8×8 像素的壓縮區塊,因此必須重新排列像素順序。下圖說明了這種重新排列的過程。

像素重新排序方案

重新排序後的影像將呈現如下所示。該運算子會保留原始影像的尺寸。

像素重新排序的範例

重新排序後,可使用運算子執行 JPEG 壓縮 JPEG_Encoder_Gray. 此運算子的輸出為不含 JPEG 標頭的霍夫曼資料流。壓縮率取決於所選的量化表,且該量化表可在執行期間變更。霍夫曼編碼採用標準亮度量化表。

操作員手冊

有關參數、輸入連結及運算子功能的詳細說明,請參閱《運算子參考手冊》。

JPEG 壓縮設計範例#

以下設計範例將展示一個執行 JPEG 壓縮的 Visual Applets 設計。該設計須符合以下規格:

  • 從 Camera Link 基礎區域攝影機擷取影像。
  • 將影像資料暫存至緩衝區,並執行 JPEG 壓縮。
  • 透過軟體在圖片中加入 JPEG 標頭,並將選定的圖片寫入檔案。
  • 相機的影像高度並非恆定不變。必須將影像高度的變化值加入 JPEG 標頭中。

VisualApplets 設計#

以下設計是用來符合規格要求的。

VisualApplets JPEG 壓縮的設計

此簡易設計已足以滿足所有規格要求。影像由基區攝影機操作員擷取。接著,影像被分為兩條處理路徑。第一條路徑會將影像緩衝,並透過操作員 ImageBuffer_JPEG_Gray 執行像素重新排序。隨後使用 JPEG_Encoder_Gray 進行 JPEG 壓縮。 JPEG 資料流會透過 DMA 通道傳輸至主機電腦的記憶體中。在第二條路徑中,原始影像資料會先緩衝,再透過第二條 DMA 通道傳輸至主機電腦。

視覺小程式的設計模擬#

此設計可進行全面模擬。透過在資料鏈路上放置模擬來源與探針,即可監控 JPEG 壓縮的各個步驟。下圖顯示了包含模擬模組的設計。如圖所示,原始影像的像素(simModule0)會被重新排序(simModule1),並產生 JPEG 資料流(simModule2)。

JPEG 壓縮設計的模擬

檢視 JPEG 資料時,可以確定資料流的長度(參見下圖)。若變更 JPEG 編碼器的畫質設定,資料長度也會隨之變化。

SimProbe 中的 JPEG 資料

microDisplay 中的執行時測試#

任何包含 JPEG 編碼器的 Applet 皆可直接在 microDisplay 中使用。以本例而言,該 Applet 會針對每個 DMA 通道顯示一個影像視窗。DMA 通道 1 顯示原始擷取的影像,而第一個 DMA 通道則顯示經編碼的影像資料及其 DMA 長度。

microDisplay 中的 JPEG 小程式

用於產生 JPEG 檔案的 SDK 專案#

該範例的設計檔案以及 SDK 範例專案可於以下資料夾中找到 examples\processing\advanced\JPEG\JPEG_gray 位於VisualApplets 安裝路徑中。

此 SDK 專案基本上會擷取原始影像與 JPEG 資料。原始影像會直接輸出至顯示裝置。系統會產生一個 JPEG 標頭,並將其加入 JPEG 資料中,藉此完成 JPEG 檔案的生成。使用者可將 JPEG 快照寫入檔案。此外,編碼後的 JPEG 資料會透過簡單的 C 語言解碼器進行解碼。 nanojpeg. 解碼後的影像隨即顯示。

使用者可以調整圖片大小、變更 JPEG 畫質、寫入 JPEG 快照檔案,或寫入 JPEG 資料的十六進位檔案轉儲。

請注意,此處的標頭產生僅為範例。使用 Visual Applets JPEG 運算子的使用者應根據自身應用需求,自行編寫適合的標頭產生程式。

JPEG 解碼器資訊:

NanoJPEG -- KeyJ's Tiny Baseline JPEG Decoder

Version 1.0 (2009-04-29)

by Martin J. Fiedler <martin.fiedler@gmx.net>