P2/P5 文件结构与灰度语义

用小文件理解 PGM 头部、像素数量、最大灰度值以及地图加载时的语义。

pgmXT 站点维护 · 更新:2026 年 10 月 14 日

PGM 文件里有什么

PGM 是灰度图格式,不自带米制坐标,也没有“墙”或“可通行”的定义。文本版本以 P2 开头,二进制版本以 P5 开头。宽、高与最大灰度值写在头部;以 # 开头的注释可以出现在头部允许的位置。

P2
# 3 columns, 2 rows
3 2
255
0 205 254
254 205 0

这个示例有 3×2=6 个像素,按从上到下、从左到右排列。P2 的数字是文本;P5 的像素是二进制样本。maxval=255 时每像素 1 字节,所以同尺寸 P5 的数据段应是 6 字节,不能用“254”三个字符代替一个灰度字节。

为什么看起来正常却打不开

现象核对项处理方向
只显示一部分或报长度错误头部宽高与数据段数量重新导出,避免手工改变头部
二进制文件被文本软件损坏换行、编码或字节被替换回到原文件,用图像工具处理
maxval 大于 255每样本需要 2 字节,大端存储先转为 8 位单通道再在本站测试
改名为 .pgm 仍失败文件实际格式不是 PGM执行真正的格式转换

地图颜色与阈值

在常见 8 位、negate=0 的地图配置中,0 是黑色,254 是近白色。灰度 205 经常用来保存未知区域,但不是 PGM 的保留值,也不是所有配置都固定把它解释为未知。

trinary 地图按占用量与阈值生成 free=0、occupied=100、unknown=-1。中间灰度落在阈值之间时为未知;它不会自动变成代价地图里的某个连续概率。更改阈值或 negate 会改变相同像素的语义。

安全查看文件头

head -c 80 map.pgm | xxd
# 查格式、尺寸和位深(需要 ImageMagick)
identify map.pgm

查看二进制地图时不要把整个文件作为文本输出。P5 文件头后的第一个数据字节也可能恰好是空白字节,解析器不能无限跳过它。本站示例提供标准 8 位 P5;实际文件是否可处理应以导入结果为准。

将图片转为 PGM 前保留原图,避免抗锯齿、色彩调整或有损压缩引入新的灰度。导航地图的像素值是数据,外观“更平滑”并不代表语义更正确。

参考资料

继续阅读