Dokumentacja formatu PGM(5)

NAZWA

pgm - format obrazu Netpbm w skali szarości

OPIS

Program jest częścią Netpbm(1).

Format PBM jest najmniejszym wspólnym mianownikiem dla monochromatycznego formatu pliku. 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.

Nazwa „PGM” jest akronimem, pochodzącym od słów „przenośna mapa szarości” („Portable Gray Map”).

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.

FORMAT

Definicja formatu jest jak następuje. Można skorzystać z biblioteki podprogramu C libnetpbm(1), aby łatwo i dokładnie odczytywać i interpretować format.

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 znaki ASCII.

•   Biała spacja.

•   Wysokość, sformatowana jako dziesiętne znaki ASCII.

•   Biała spacja.

•   Maksymalna wartość szarości (maxval), znów jako dziesiętne ASCII. Musi być mniejsza od 65536 i większa od zera.

•   Pojedynczy znak białej spacji (zwykle znak nowego wiersza).

•   Raster o Wysokości wierszy, w kolejności od góry do dołu. Każdy wiersz składa się z Szerokości wartości szarości, w kolejności od lewej do prawej. 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.

    Wiersz jest poziomy. Kolumna jest pionowa. Piksele w obrazie są kwadratowe i ciągłe.

    Każda wartość szarości jest numerem proporcjonalnym do intensywności piksela, wyrównanej przez funkcję transferu gamma ITU-R Recommendation BT.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.

    Zakres BT.709 wartości kanałów (16-240) jest bez znaczenia w PGM.

    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.

    Inną popularną odmianą PGM jest zamiana BT.709 nowszą funkcją transferu sRGB. Można korzystać z pnmgamma do konwersji pomiędzy tą odmianą a prawdziwym PGM.

    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. 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). Proszę zauważyć, że w masce przezroczystości brak jest funkcji transferu gamma.

Łańcuchy zaczynające się od znaku „#” mogą być komentarzami, tak samo jak w PBM(1).

Note that you can use pamdepth to convert between the format with 1 byte per gray value and the one with 2 bytes per gray value.

Wszystkie znaki, o których tu mowa są zakodowane w ASCII. Znak nowego wiersza, odnosi się do znaku nowego wiersza ASCII (LF). Biały znak to spacja, powrót karetki (CR), znak nowego wiersza (LF), tabulator (TAB), tabulator pionowy (VT) lub wysuw strony (FF) — tj. to, co funkcja isspace() standardu C ANSI nazywa białym znakiem.

  Prosty PGM

Istnieje także jeszcze jedna, dość rzadko spotykana, wersja formatu PGM: "prosty" format PGM. Format opisany powyżej, który generalnie uważa się za zwykły format, jest znany jako format "surowy" PGM. pbm(1) zawiera komentarze na temat relacji pomiędzy formatem prostym a surowym i informacje o sposobie ich użycia.

Różnice w prostym formacie są następujące:

•   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.

•   Linia nie powinna być dłuższa niż 70 znaków.

Oto przykład małego obrazu w formacie prostego PGM:

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

Na końcu każdego wiersza znajduje się znak nowego wiersza.

Programs that read this format should be as lenient as possible, accepting anything that looks remotely like a PGM image.

IDENTYFIKATOR INTERNETOWY (MIME)

Dla formatu PGM nie zarejestrowano internetowego identyfikatora formatu danych (Internet Media Type — MIME) w IANA, lecz konwencjonalna jest wartość image/x-portable-graymap.

Proszę zauważyć, że image/x-portable-anymap dotyczy też PNM.

NAZWA PLIKU

Nie ma wymagań odnośnie nazwy pliku PGM, lecz przyjęło się rozszerzenie „pgm”. Konwencjonalne jest również „pnm” w przypadkach, gdy nie jest wygodne rozróżnianie pomiędzy danymi podformatami PNM.

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
pnm(1) , pbm(1) , ppm(1) , pam(1) , libnetpbm(1) , programs that process PGM(1)

AUTOR

Copyright (C) 1989, 1991 Jef Poskanzer.

ŹRÓDŁO DOKUMENTU
Niniejszą stronę podręcznika wygenerowano za pomocą narzędzia Netpbm „makeman” ze źródeł HTML. Główna dokumentacja jest dostępna pod adresem

    http://netpbm.sourceforge.net/doc/pgm.html

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.