Scroll to navigation

pgm(5) File Formats Manual pgm(5)

NAZWA

pgm - przenośny format szarej bitmapy

OPIS

Format PGM jest najmniejszym wspólnym mianownikiem plików w formacie odcieni szarości. Został zaprojektowany, aby był niezmiernie łatwy do nauczenia i pisania programów jego obsługi. (Jest tak prosty, że większość ludzi po prostu zastosuje inżynierię odwrotną ponieważ jest to prostsze niż czytanie tej dokumentacji).

Obraz PGM reprezentuje graficzny obraz w odcieniach szarości. Istnieje wiele formatów pseudo-PGM, różniących się od opisanego tutaj znaczeniem poszczególnych wartości pikseli. Dla większości celów obraz PGM można sobie wyobrazić jako tablicę dowolnych liczb typu integer, i wszystkie programy świata, które myślą, że przetwarzają obraz w odcieniach szarości, mogą być prosto oszukane, by procesować cokolwiek innego.

Jednym z oficjalnych wariantów PGM jest maska przezroczystości. W bibliotece netpbm maska przezroczystości jest reprezentowana przez obraz PGM, który zamiast intensywności pikseli ma zapisane wartości nieprzezroczystości. Patrz niżej.

Definicja formatu jest następująca:

Plik PGM składa się z sekwencji jednego lub więcej obrazów PGM. Nie występują żadne inne dane, separatory i wyrównania przed obrazami, po nich ani między nimi.

W skład każdego obrazu PGM wchodzą:

  • "Numer magiczny", identyfikujący rodzaj pliku. Numerem magicznym pliku pgm są dwa znaki: "P5".
  • Biała spacja (spacje, tabulacje, CR, LF).
  • Szerokość, sformatowana jako dziesiętne ASCII.
  • Biała spacja.
  • Wysokość, znów jako dziesiętne ASCII.
  • Biała spacja.
  • Maksymalna wartość szarości (maxval), znów jako dziesiętne ASCII. Musi być mniejsza od 65536.
  • Znak nowej linii lub inny znak białej spacji.
  • Raster o rozmiarze szerokość * wysokość wartości szarości, przetwarzany w normalnym porządku czytania tekstu. Każda wartość szarości jest liczbą od zera do pewnej wartości maksymalnej, gdzie 0 oznacza czerń, a wartość maksymalna - biel. Każda wartość szarości jest reprezentowana binarnie albo na jednym bajcie albo na dwóch bajtach. Jeśli wartość maksymalna jest mniejsza niż 256, będzie to jeden bajt. W przeciwnym wypadku są używane dwa bajty. Najbardziej znaczący bajt jest podawany pierwszy.
  • Każda wartość szarości jest numerem proporcjonalnym do intensywności piksela, wyrównanej przez funkcję transferu gamma CIE Rec. 709. (Ta funkcja transferu określa numer gamma jako 2.2 i ma liniową sekcję dla niskich intensywności). Wartość 0 oznacza czerń. Maksymalna wartość reprezentuje kolor biały CIE D65 i najbardziej intensywny kolor w obrazie i w jakimkolwiek innym obrazie, z którym można by porównać bieżący obraz.
  • Proszę zauważyć, że zwyczajową wariacją formatu PGM jest "liniowe" wymienianie wartości szarości, tj. tak jak podano powyżej, z wyjątkiem braku wyrównania gamma. pnmgamma potrafi przyjąć plik PGM w takim wariancie na wejściu i wyprodukować prawdziwy plik PGM na wyjściu.
  • W wariacji PGM zawierającej maskę przezroczystości wartość reprezentuje poziom nieprzejrzystości. Jest proporcjonalna do ułamka intensywności piksela, który by się pojawił zamiast podstawowego piksela, z zaaplikowaną taką samą funkcją transferu gamma, jak opisana powyżej. Tak więc to, co normalnie oznacza kolor biały, oznacza tu całkowitą nieprzezroczystość, a to co normalnie oznacza czerń, reprezentuje całkowitą przezroczystość. Pomiędzy tymi wartościami należy sobie obliczyć intensywność piksela złożonego z pikseli "poniżej" i "powyżej". używając wzoru: poniżej * 1 (1-(alpha/alpha_maxval)) + powyżej * (alpha/alpha_maxval).
  • Znaki od "#" do znaku końca linii, przed linią maxval są ignorowane jako komentarze.

Proszę zauważyć, że można użyć pnmdepth do konwersji pomiędzy formatami używającymi 1 bajtu na wartość szarości i 2 bajtów na wartość szarości.

Istnieje także jeszcze jedna, dość rzadko spotykana, wersja formatu PGM: "czysty" format PGM. Format opisany powyżej, który generalnie uważa się za zwykły format, jest znany jako format "surowy" PGM. pbm(5) zawiera komentarze na temat relacji pomiędzy formatem czystym a surowym.

Różnice formatu czystego to:

  • Plik zawiera dokładnie jeden obraz.
  • "Magiczny numer" to "P2" zamiast "P5".
  • Każda piksel w rastrze jest reprezentowany jako numer dziesiętny ASCII (dowolnego rozmiaru).
  • Każdy piksel w rastrze ma biały znak przed i po. Pomiędzy dwoma dowolnymi pikselami musi występować przynajmniej jeden biały znak, ale nie ma górnego ograniczenia na liczbę białych znaków.
  • Żadna z linii nie powinna być dłuższa niż 70 znaków.

Oto przykład małego obrazka w tym formacie:

P2
# feep.pgm
24 7
15
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  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  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

Programy, które odczytują ten format powinny być jak najwyrozumialsze, akceptując wszystko, co z daleka wygląda jak mapa szarości.

ZGODNOŚĆ

Przed kwietniem 2000 roku, plik w surowym formacie PGM nie mógł mieć maksymalnej wartości większej niż 255. Dlatego nie mógł przechowywać więcej niż jednego bajtu na próbkę. Stare programy mogą od tego zależeć.

Przed lipcem 2000 roku plik PGM mógł zawierać tylko jeden obraz. W wyniku tego większość narzędzi przetwarzających pliki PGM ignoruje (nie czyta) danych po pierwszym obrazie.

ZOBACZ TAKŻE

fitstopgm(1), fstopgm(1), hipstopgm(1), lispmtopgm(1), psidtopgm(1), rawtopgm(1), pgmbentley(1), pgmcrater(1), pgmedge(1), pgmenhance(1), pgmhist(1), pgmnorm(1), pgmoil(1), pgmramp(1), pgmtexture(1), pgmtofits(1), pgmtofs(1), pgmtolispm(1), pgmtopbm(1), pnm(5), pbm(5), ppm(5)

AUTOR

Copyright (C) 1989, 1991 Jef Poskanzer.

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <pborys@dione.ids.pl> i Robert Luberda <robert@debian.org>.

Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 10.0 oryginału.

12 listopada 1991