机器学习中人脸识别程序中要用到的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.图像灰度值可能 的最大值;

文件头的这四部分信 息都是以ASCII码形式存储的,所以可以直接在将P2或P5格式的PGM文件在记事本中打开看到文件头的信息.

P5格式的PGM文 件在记事本中打开(如下图)

P2格式的PGM文 件在记事本中打开(如下图)

在P2或P5类型的 PGM文件头的4个信息之间用分割符分开,PGM的合法分隔符包括:空格,TAB,回车符,换行符.PGM文件头的信息应该由合法分割符号分开,如上面两 幅图所展.文件头的第4个信息,图像灰度值可能的最大值标明了文件数据部分可能出现的像素灰度值的最大值.上面两幅图都是指定的255,所以在数据区的像 素数据取值范围在0到255.

数 据部分

数据部分记录图像每 个像素的灰度值,按照图像从上到下,从左到右的顺序依次存储每个像素的灰度值.对于像素灰度值的表示P2格式和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结束后,图像第一行数据结束换行).

pgm图像修改java_【转】 PGM图像处理方法详解相关推荐

  1. php 批量改文件名后缀名_php 实现批量修改文件后缀名的方法详解

    这篇文章主要介绍了PHP实现批量修改文件后缀名的方法,涉及php针对文件的递归遍历及重命名的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP实现批量修改文件后缀名的方法.分享 ...

  2. android 程序更换字体,Android修改自己程序字体的方法详解

    Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体可以采用and ...

  3. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...

    此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...

  4. 【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法

    转自:​​​​​​CT图像重构方法详解--傅里叶逆变换法.直接反投影法.滤波反投影法_Absolute Zero-CSDN博客_反投影法 绪 在做CT图像处理的时候遇到很多问题,对于滤波反变换有许多细 ...

  5. python修改xml标签的值_对python修改xml文件的节点值方法详解

    这是我的xml文件结构 <?xml version='1.0' encoding='utf-8'?> JPEGImages train_2018-05-08_1000.jpg D:\all ...

  6. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  7. php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解

    这篇文章主要介绍了修改WordPress中文章编辑器的样式的方法详解,同时文中也推荐了两款取代默认文章编辑器的插件,需要的朋友可以参考下 自定义文章编辑器的样式每一个 WordPress 主题的文章样 ...

  8. python字典键盘添加元素_对python字典元素的添加与修改方法详解

    1.字典中的键存在时,可以通过字典名+下标的方式访问字典中改键对应的值,若键不存在则会抛出异常.如果想直接向字典中添加元素可以直接用字典名+下标+值的方式添加字典元素,只写键想后期对键赋值这种方式会抛 ...

  9. mc服务器怎么修改浮空字,我的世界可点击的浮空字怎么做 可点击的浮空字制作方法详解...

    麦块我的世界盒子3.1.0.0 官方最新版 类型:游戏其他大小:7.1M语言:中文 评分:7.4 标签: 立即下载 我的世界可点击的浮空字怎么做?可点击的浮空字在游戏中可以说是非常好玩的一件事,玩家可 ...

  10. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解

    摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...

最新文章

  1. 如何在1分钟内CSDN收益1000万,走上人生巅峰?!
  2. oc-29-可变数组
  3. SQLMAP注入教程-11种常见SQLMAP使用方法
  4. simple java mail
  5. 转:UNITY,如何为你的游戏选择正确的网络类型
  6. Python 使用 itchat+pillow 实现微信消息自动回复
  7. 最小路径覆盖,最小点覆盖,最大独立点集(转)
  8. linux proc进程,linux 下 /proc/进程号/ 重要进程文件的内容解析
  9. JavaScript中的语言结构知识点总结(附实例、图解)
  10. DL_C1_week_2_2(Logistic Regression)
  11. h3c trunk口改access_关于h3c的trunk模式
  12. 计算机xp画板在哪找,xp画图工具 xp画图工具在哪里 | 帮助信息-动天数据
  13. 如何在HTML标题中添加或改变图片
  14. 特征图谱字典_空间数据图谱为特征
  15. 禁止浏览器返回登入页面
  16. Metis异常检测初体验
  17. 说说short s = 1; s = s + 1;有没有问题?如果有怎么解决?
  18. notepad html5 mac,用notepad++将DPL格式转为通用格式
  19. html静态登录、注册页面
  20. 下载 RealPlayer 失败

热门文章

  1. Grasshopper 二次开发 (C#) Part 1 - Introductions to the C# Coding in Grasshopper
  2. [一起来做动图吧]Animate制作简单动图,包教包会,不会举报
  3. 从一条微博揭秘专黑大V名人的定向攻击
  4. php更改文件为只读,word只读模式怎么修改
  5. 介绍现有三大前端框架-思想
  6. Ubuntu下载与安装
  7. Lua_第28章 资源管理(下)
  8. 基金暴跌年轻人为什么躲不过被割?
  9. FileZilla查看站点隐藏文件
  10. thinkpad x1e 隐士进入bios