Allt om PGM-filer
ett enkelt format för gråskalebilder
PGM är gråskalversionen i PBM-familjen. Medan PBM endast har svart och vitt, möjliggör PGM upp till 65 535 nyanser mellan dessa två ytterligheter. Varje pixel beskrivs av ett enda numeriskt värde: 0 är svart, det maximala värdet är vitt. PGM står för "Portable Gray Map" och utvecklades i slutet av 1988 av Jef Poskanzer som en utvidgning av PBM. För historiken om hela formatfamiljen, se min artikel om PBM.
TLDR:
PGM är gråskaleformatet i Netpbm-familjen. Det fungerar som PBM, men med fler än två ”färger” – nämligen gråskalor. PGM används fortfarande inom bildbehandling, utbildning och som mellanformat i pipes. Den som känner till PBM-artikeln känner till principen, PGM gör det helt enkelt gråare. Den färgglada varianten är ju PPM.
Den tekniska uppbyggnaden
En PGM-bild skiljer sig från PBM genom exakt en extra rad i rubriken: maximivärdet (Maxval). Detta anger hur många gråskalor bilden använder. Även med PGM är det möjligt att rita en bild på "rutpapper". Istället för att fylla i rutor används här siffror i varje ruta som representerar en ljusstyrka.
| Beståndsdel | Exempel | Betydelse |
|---|---|---|
| Magiskt nummer | P2 |
Plain PGM (ASCII-variant) |
| Kommentar | # mein bild |
Valfritt, inleds med # inleds |
| Bredd Höjd | 24 7 |
Dimensioner i pixlar |
| Maxvärde | <15 |
Maximal gråskala (1-65535) |
| Rasterdata | 0 2 4 6 ... |
Gråvärden per pixel |
Det klassiska FEEP-exemplet ser ut så här i PGM, varje bokstav får sin egen ljusstyrka. (För bättre visning med monospace-typsnitt har jag valt ett Maxval på 8)
P2 # feep.pgm 24 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 0 0 4 4 4 4 0 0 6 6 6 6 0 0 8 8 8 8 0 0 2 0 0 0 0 0 4 0 0 0 0 0 6 0 0 0 0 0 8 0 0 8 0 0 2 2 2 0 0 0 4 4 4 0 0 0 6 6 6 0 0 0 8 8 8 8 0 0 2 0 0 0 0 0 4 0 0 0 0 0 6 0 0 0 0 0 8 0 0 0 0 0 2 0 0 0 0 0 4 4 4 4 0 0 6 6 6 6 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Texten FEEP är läsbar precis som i PBM-exemplet, men bokstäverna blir ljusare från vänster till höger: F är mörkgrå (2), E är mellangrå (4 och 6), P är vit (8).
Maxval: den avgörande skillnaden mellan PBM och PGM
Maxval bestämmer bildens färgdjup. Med Maxval 1 beter sig PGM för övrigt precis som PBM. Med Maxval 255 har man 256 gråskalor, vilket motsvarar en klassisk 8-bitars gråskalebild. Värden över 255 är möjliga (upp till 65535), men används sällan i praktiken.
Plain vs. Raw: P2 och P5
Precis som med PBM finns det även för PGM en ASCII- och en binär variant:
| Egenskap | Plain PGM (P2) |
Raw PGM (P5) |
|---|---|---|
| Pixeldata | ASCII-decimaltal | Binärt, 1 eller 2 byte per pixel |
| Läsbar för människor | Ja, fullständigt | Endast rubriken |
| Lagringsutrymme per pixel | Variabelt (siffror + mellanslag) | 1 byte (Maxvärde ≤ 255) eller 2 byte |
| Max. radlängd | 70 tecken rekommenderas | Ingen gräns |
Raw-varianten (P5) är standard för Netpbm-verktyg. VID ett Maxval över 255 används två byte per pixel, Big-Endian.
Typiska användningsområden
PGM används överallt där det är det rena ljusstyrkevärdet per pixel som är viktigt och färg inte spelar någon roll:
– Vetenskap och medicin: Röntgenbilder, MR-skanningar och mikroskopbilder bearbetas ofta som gråskalebilder. PGM lämpar sig för detta tack vare sin enkelhet och förlustfria lagring.
– Datorseende: Kantdetektorer (Sobel, Canny), tröskelvärdesmetoder och histogramanalyser arbetar med gråskaledata. PGM levererar dessa utan overhead.
– Höjdkartor och terrängmodeller: Varje pixel representerar en höjd – ett användningsfall som passar perfekt till PGM:s logik med ”ett värde per pixel”.
– Transparensmasker: I Netpbm används PGM även som transparensmask. Här står vitt för full täckning och svart för fullständig transparens.
– Undervisning: Precis som PBM är PGM utmärkt för att förmedla grunderna i bildbehandling (inte bildredigering).
Gamma och färgrymd
Enligt specifikationen är gråvärdena inte linjära, utan följer gammaöverföringsfunktionen enligt ITU-R BT.709 (gamma 2,2). I praktiken följer dock många program inte detta och skriver ut linjära värden. Netpbm-verktyget pnmgamma kan konvertera mellan de båda varianterna. Även den numera vanligare sRGB-överföringsfunktionen avviker något från BT.709 och i verkligheten använder de flesta program helt enkelt sRGB och kallar resultatet PGM.
Källor
Netpbm PGM-formatspecifikation
PBM-artikel med historik över formatfamiljen
.b0 { color: #ccc; }
.b2 {color: #222; }
.b4 {color:#444;}
.b6 {color:#666;}
.b8 { color: #888; }
const el = document.getElementById('pgm');
el.innerHTML = el.textContent.replace(/([0-9])/g, '<span class="b$1">$1</span>');
Konvertera, öppna och redigera PGM-filer
Uppgifter om PGM-filer
- Programvara för att öppna PGM-filer
- IrfanView
- XnView
- GIMP
- ImageMagick
- Programvara för att redigera PGM-filer
- GIMP
- ImageMagick
- Paint.NET
- MIME-typ för PGM
- image/x-portable-graymap
- image/x-pgm
Inga kommentarer