PGM格式图像详解
本⽂转⾃
NET framework框架类库中的Image类和Bitmap类提供了常⽤图像格式的解析读取和存储,这些常⽤格式包括
BMP,JEPG,GIF,PNG,EXIF,TIFF。但是可惜的是不⽀持PGM格式,但是只要知道了PGM格式的⽂件的组织结构,相信要解析他也不是难事了。
1. PGM图像详解
PGM 是便携式灰度图像格式(portable graymap file format),在⿊⽩超声图像系统中经常使⽤PGM格式的图像。⽂件的后缀名为”.pgm”,PGM格式图像格式分为两类:P2和P5类型。不管是P2还是P5类型的PGM⽂件,都由两部分组成,⽂件头部分和数据部分。
⽂件头部分
⽂件头包括的信息依次是:
1.PGM⽂件的格式类型(是P2还是P5);
2.图像的宽度;
3.图像的⾼度;
4.图像灰度值可能的最⼤值;
exif信息⽂件头的这四部分信息都是以ASCII码形式存储的,所以可以直接在将P2或P5格式的PGM⽂件在记事本中打开看到⽂件头的信息。
P5格式 的PGM⽂件在记事本中打开如下图所⽰:
P2格式 的PGM⽂件在记事本中打开如下图所⽰:
在P2或P5类型的PGM⽂件头的4个信息之间⽤分割符分开,PGM的合法分隔符包括:空格,TAB,回车符,换⾏符。PGM⽂件头的信息应该由合法分割符号分开,如上⾯两幅图所展。⽂件头的第4个信息,图像灰度值可能的最⼤值标明了⽂件数据部分可能出现的像素灰度值的最⼤值。上⾯两幅图都是指定的255,所以在数据区的像素数据取值范围在0到255。
数据部分
数据部分记录图像每个像素的灰度值,按照图像从上到下,从左到右的顺序依次存储每个像素的灰度值.对于像素灰度值的表⽰P2格式和P5格式有所不同.
P5格式
P5格式
P5格式的⽂件,每个像素⽤可以⽤⼆进制表⽰。⽐如有⼀幅P5格式图像,灰度值可能的最⼤值为255,它的第⼀⾏第⼀列像素值为100,那么该图像每个像素使⽤⼀个字节表⽰,第⼀⾏第⼀列为数值为100的⼆进制⼀个字节表⽰.如果这副图灰度值可能的最⼤值是65535,那么它的第⼀⾏第⼀列为数值为100的⼆进制两个字节表⽰(因为表⽰到65535需要两个字节)。每个像素数据之间没有间隔的连续存储,图像⼀⾏信息结束后从下⼀⾏第⼀列继续,两⾏图像数据之间也没有间隔的连强调内容续存储,直到将图像的所有信息表⽰完。因为是以⼆进制表⽰,所以数据部分在记事本中打开后看到的将会是乱码。
P2格式
P2格式的⽂件,每个像素使⽤字符串来表⽰,⽐如⼀副P2格式图像,灰度值可能的最⼤值为255,它的第⼀⾏第⼀列像素值为100,那么该图像图像每个像素使⽤3个ASCII字符表⽰,第⼀⾏第⼀列数据为ASII表⽰的”100”。不同于P5格式,每个像素数据之间需要⽤⼀个空格符分开存储,在图像的每⼀⾏数据结束时需要换⾏。还有⼀点需要注意,P2格式⽂件数据部分当数据超过70个字节的时候,会⾃动换⾏。也就是说图像的每⼀⾏数据末尾,或者存储时超过70个字节时,需要进⾏换⾏。
如下图所⽰,这是⼀个P2格式的PGM⽂件在Visual Studio中查看的效果。我们可以看到,每超过70个⾃⼰时候需要换⾏,在图像数据⼀⾏结束时候也需要换⾏(在0 1 1 1结束后,图像第⼀⾏数据结束换⾏)。