Portable Graymap Format (.pgm)
Netpbm 標準Portable Graymap Format (PGM)是 Netpbm 系列的灰階圖片規格,廣泛應用於電腦視覺、機器人技術、光學檢測和數位影像處理演算法中。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 PGM 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 PGM 檔案:
十六進位簽章(偏移量 0):
50 32 / 50 35ASCII 表示法: P2 / P5
標準化: Netpbm 程式庫標準
技術規格
| 容器架構 | ASCII (P2) 或二進位 (P5) Netpbm 格式,包含寬度、高度、最大灰階值和像素串流 |
| 壓縮 | 未壓縮的原始二進位位元組或人類可讀的 ASCII 文字數字 |
| 位元組序 | 大端序(適用於 P5 模式中的 16 位元二進位取樣) |
| 色彩空間 | 線性灰階或 sRGB 灰階 |
| 色版與結構 | 1 通道灰階(8 位元或 16 位元精度) |
| 最大尺寸 | 實際上無限制(支援任意 64 位元座標空間) |
| 透明度 | 無 |
| 串流與漸進式 | 循序逐行串流播放 |
技術比較矩陣:PGM 對比競爭格式
| 技術屬性 | PGM (目前) | PBM | PPM | PNG |
|---|---|---|---|---|
| 色彩模式 | 灰階(8 位元 / 16 位元) | 1 位元單色 | RGB 真實色彩(24 位元 / 48 位元) | 灰階、RGB、RGBA |
| Netpbm 家族 | PGM (Portable Graymap) | PBM (Portable Bitmap) | PPM (Portable Pixmap) | 非 Netpbm 的 W3C 標準 |
| 檔案簽章(magic bytes) | P2 (ASCII) / P5 (二進位) | P1 (ASCII) / P4 (二進位) | P3 (ASCII) / P6 (二進位) | ‰PNG.... |
| 壓縮 | 未壓縮 | 未壓縮 | 未壓縮 | 無損 Deflate |
常見損壞模式與十六進位修復指南
圖片顯示顛倒或完全過曝成一片白色。
根本原因: 標頭中的「maxval」參數不符(例如 maxval 宣告為 1 而非 255)。
修復: 修正 maxval 標頭行,或使用 File2File.app Netpbm 轉換器進行轉檔。
安全性分析與解析器攻擊向量
PGM 解碼器必須仔細驗證解析出的像素數量是否符合宣告的尺寸,以防止緩衝區溢位。
已知攻擊向量
- 在寬度 * 高度 * (maxval > 255 ? 2 : 1) 緩衝區配置期間發生整數溢位。
- 讀取格式錯誤的 ASCII 數字記號時發生緩衝區過度讀取。
- 透過偽造的標頭尺寸觸發大量記憶體配置,導致阻斷服務。
防禦最佳實務: 在讀取像素串流之前,先設定允許的最大尺寸與記憶體配置上限。
歷史起源與里程碑
200016 位元深度(最大值高達 65535)在二進位 P5 模式中標準化,用於科學影像處理。
1993納入 Netpbm 工具組中,作為標準的中間灰階格式。
1989Jef Poskanzer 建立 PGM 以補足 PBM,提供完整的 256 階灰階支援。
主要優勢與優點
- 精簡的 PGM 結構使基本讀取器的實作相對簡單,不過處理取樣深度、標頭和異常輸入仍須格外留意。
- 原生 16 位元灰階支援使其成為高度圖、深度圖和熱成像的理想選擇。
- ASCII 模式 (P2) 允許在標準文字編輯器中直接檢查和操作原始像素值。
技術限制與缺點
- 無壓縮:與 PNG 等壓縮格式相比,檔案佔用空間較大。
- 缺乏實體尺寸、色彩空間或地理定位的中繼資料。
- 嚴格的單通道:無法儲存色彩資料或 alpha 透明度。
有趣的技術冷知識
- OpenCV、ROS(機器人作業系統)和機器視覺系統經常將 PGM 用於 SLAM 導航地圖。
- 遊戲開發者經常使用 16 位元 PGM 檔案作為地形高度圖,因為原始高程資料未經壓縮且易於載入。
- 標頭中的「maxval」參數定義了最大亮度值(8 位元通常為 255,16 位元通常為 65535)。
常見技術問題
PGM 格式是用來做什麼的?
PGM 主要用於電腦視覺 (OpenCV)、機器人學(ROS 地圖檔案)、科學造影以及 3D 地形高度圖生成。
P2 與 P5 PGM 檔案有什麼差別?
P2 是純 ASCII 文字,其中每個像素都是寫出來的數字,而 P5 則是以精簡的二進位位元組儲存像素。
如何將 PGM 轉換為 JPG 或 PNG?
PGM 儲存的是灰階取樣。若需要多數檢視器都能開啟的無損圖片,請轉換為 PNG;若較重視相片風格的小檔案,則轉換為 JPEG。此轉換器會在您的瀏覽器中執行。