PPM、PGM、PBM图像文件格式说明



    PPM、PGM、PBM三种都是图像文件格式:

    • PPM->Portable PixMap 支持真彩色图形,可以读上面所有格式,输出PPM图形
    • PGM->Portable GreyMap 支持灰度图形,能够读PBM图形和PGM图形,输出PGM图形
    • PBM->Portable BitMap 支持单色图(1个像素位)

    三种文件格式结构相同,都非常简单,没有压缩。由表头和图像数据两部分组成。表头数据各项之间用空格(空格键、制表键、回车键或换行键)隔开,表头由四部分组成:

    ① 文件描述子:指明文件的类型以及图像数据的存储方式;

    ② 图像宽度;

    ③ 图像高度;

    ④ 最大灰度值或颜色值.



    其中图像宽度、高度和最大值这三项是ASCII码十进制数. 注意,PBM格式的表头中最大值隐含为1.

    表头的下面是图像数据区,描述了"宽度×高度”个像素.图像数据有两种存储格式:ASCII和RAWBITS,在文件描述子中指定

    各图像数据之间可用空格隔开.规定每行不超过70个字符.图像数据内容是:

    ① PBM文件的图像数据是0和1二值数据,1代表黑色,0代表白色.

    ② PGM文件包括的是灰度级数据,0值代表黑色,最大值代表白色.

    ③ PPM文件包括的颜色数据,0值代表无此颜色,最大值代表颜色为最大.

    文件描述子 类型 编码
    P1 位图 ASCII
    P2 灰度图 ASCII
    P3 像素图 ASCII
    P4 位图 二进制
    P5 灰度图 二进制
    P6 像素图 二进制

    PPM文件格式

    包括两个部分,头部分和图象数据部分。第一行是P3或P6,说明是PPM 格式;第二行是图象的宽度和高度,用ASCII来表示;最后一部分是描述像素的最大颜色组成,这里允许描述超过一个字节(0-255)的颜色值。另外可以在上面三个部分的后面用#来追加注释,注释行是从#到该行末。

    下面是PPM头的例子:

    例子1:

    P6 1024 778 255

    例子2:

    P6
    1024 778
    255

    例子3:

    P6#PPM文件格式
    1024 778#宽度和高度
    # 注释
    255

    PPM图象数据的格式依赖于PPM自身的表示,如果是P3格式,数据将以ASCII文本来表示,每个像素的值从0到前面的最大值,每行不应该长于70个字符,如例子4:

    P3
    # example from the man page
    4 4
    15
    0 0 0 0 0 0 0 0 0 15 0 15
    0 0 0 0 15 7 0 0 0 0 0 0
    0 0 0 0 0 0 0 15 7 0 0 0
    15 0 15 0 0 0 0 0 0 0 0 0

    如果是P6格式,图象数据以字节格式存储,每个色彩成分(r,g,b)一个字节。仅仅在头部的最后一个字段的前面才能有注释,在头部的最后一个字段后面通常是一个回车或换行。P6图象文件比P3文件小,读起来更快。注意,P6文件仅仅用作单字节彩色。

    通常的习惯,图象从上到下,从左到右被存储。每个像素以一个字节来存储,0表示黑色,255表示白色。色彩成分按照通常的红-绿-蓝顺序来存储。

    PGM文件格式

    该格式文件存储灰度图形,也就是这里每个像素使用一个值来表示而不是3个(R,G,B)。同PPM唯一不同的是头部用P2和P5,分别表示用ASCII和字节码来表示数据。例如:

    P2
    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

    PBM文件格式

    使用ASCII的0或1方式来表示数据,0表示白色,1表示黑色。与PPM、PGM不同的头部是少了第三行,因为第三行的最大色彩值在这个模式下已经没有意义了。举例如下:

    P1
    # PBM example
    24 7
    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 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
    0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
    0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0
    0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 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

    参考资料:PPM / PGM / PBM 图象文件



    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《PPM、PGM、PBM图像文件格式说明
    分享:

已经有2 条评论抢在你前面了~

  1. 沙发
    凡尘飞扬 2010年12月21日 下午4:25

    什么系统下的图形格式?

    [回复]

    晴枫

    晴枫 回复:

    @凡尘飞扬, 不分系统,格式转换时的中转格式或在图像分析时用到

    [回复]

无觅相关文章插件,快速提升流量