程序源码:http://download.csdn.net/detail/jsgaobiao/9456641

Ø  【作业要求】

1. Get your matlab platform ready. Payspecial attention to the image processing toolbox.

2.Use matlab functions to convert the attached image from .jpg to binary .ppm format. Save it as greens.ppm.

3. Write your own imread(‘*.ppm’) functioncode to read the newly generated .ppm file.

4. Submit your code, result, and report.

选做:尝试设计你的 .pgm和.pbm读写程序。

Ø  【文件说明】

jpg2ppm.m:

Use matlab functions to convert theattached image from .jpg to binary .ppm format. Save it as greens.ppm

imread_pxm.m:

Myown imread() function code to read .ppm/.pgm/.pbm file which can beencoding ineither ASCII or Binary.

imwrite_pxm.m:

Myown imwrite() function code to write.ppm/.pgm/.pbm file which canbe encoding ineither ASCII or Binary.

test_imread_pxm.m:

Use imread_pxm() to readgreens.ppm/.pgm/.pbm && greens1.ppm/.pgm/.pbm, then show them to checkthe correctness of function imread_pxm().

test_imwrite_pxm.m:

Use imwrite_pxm to write .ppm/.pgm/.pbmencoding in ASCII/Binary mode, then show them to check the correctness offunction imwrite_pxm().

greens.ppm/.pbm/.pgm(Encoding in Binary) :

Images for imread_pxm() function to load.

greens1.ppm/.pbm/.pgm(Encoding in ASCII) :

Images for imread_pxm() function to load.

Ø  【作业思路】

一、          将jpg文件转化成二进制编码的.ppm文件

通过MATLAB自带的函数imread()载入jpg的图像数据部分,再使用imwrite()将上一步的结果写成.ppm文件,’encoding’选项可以选择’rawbits’和’ASCII’分别是二进制和ASCII编码。

二、          手写imread()实现读取.ppm/.pgm/.pbm图像的功能

我的imread_pxm()函数可以读取二进制或ASCII编码的.ppm/.pgm/.pbm文件。主要思路和注意点如下:

1、 图像的头部统一处理,都是由ASCII编码的图像类型(P1..P6)、宽、高和像素值范围。其中.pbm没有最后一个像素值范围(因为.pbm的像素值只可能是0/1);

2、 根据图像类型(P1..P6)读取图像的数据部分,全部按uint8的类型读入。需要注意P3和P6每个像素都有RGB信息,所以需要存入3维矩阵,其他类型存入二维矩阵;

3、 每种类型的图像读入后的矩阵具有不同的数据类型,fread读入的结果默认是doublele类型,所以保存时需要强制转换:.pgm/.ppm的数据转换为uint8,.pbm的数据转换为logical;

4、 ASCII编码的数据要处理数据间的空格和换行符;

5、 .pbm的图像数据在保存时需要0/1取反,否则显示出来的结果会反色;

6、 .pbm的二进制编码数据每行会按照8bit对齐,每行最后一个8bit数据的末尾会用0补齐,需要注意处理一下。

使用test_imread_pxm.m脚本可以测试P1..P6的图像读入并显示,以检测imread_pxm()函数的正确性,结果如下图:

三、          手写imwrite()实现将像素值矩阵写成.ppm/.pgm/.pbm图像的功能

我的imwrite_pxm(im, ptype, filename)函数可以将图像数据矩阵im写入二进制或ASCII编码的.ppm/.pgm/.pbm文件,ptype指定了图像和编码的类型(P1..P6),filename指定了保存文件名,例如imwrite_pxm(im,6, ‘output.ppm’).

实现的主要思路和注意点如下:

1、 统一处理图像的头部,写入ASCII编码的图像类型(P1..P6)、宽、高和像素值范围。其中.pbm没有最后一个像素值范围(因为.pbm的像素值只可能是0/1);

2、 根据图像类型(P1..P6)写入图像的数据部分,以’wb’格式打开输出文件后,直接使用fwrite()函数写入即可。需要注意P3和P6每个像素都有RGB信息,所以需要写入3维矩阵,其他类型写入二维矩阵;

3、 .pbm的图像数据在保存时需要0/1取反,否则显示出来的结果会反色;

4、 .pbm的图像数据是由0/1组成的,但是在写入时,需要将它们合成8bit的数后,再写入文件。和上文中提到的一样,要特殊处理每行最后8bit的对齐。

使用test_imwrite_pxm.m脚本可以测试P1..P6的图像写出并显示,以检测imwrite_pxm()函数的正确性,结果如下图:

Ø  【问题】

在手写imread()函数中处理.pbm二进制编码的图像时,我首先尝试了使用fread(fid, 1, ‘ubit1’),每次读入1bit,这样可以直接获取0/1的数据而不需要每次读一个uint8,再拆成8个0/1。

但是,我发现在读入的过程中,每8个bit数据的开头一个bit的读入结果都是空(0*0的矩阵)。当我忽略空的结果后,总的数据量比正确结果要少——也就是说1bit为单位读入会丢失部分数据,而8bit为单位读入就没问题。

我查阅了一些资料并没有找到原因。记录在此,希望日后可以解决。

上期谜语:日行七千里(二字数字图像术语)—— 量化

matlab 读取.pgm,【数字图像处理】pbm/pgm/ppm图片的读写(Matlab)相关推荐

  1. matlab读取感光度,数字图像处理实验(MATLAB版)

    图1.2 数码相机原理图 数码摄像机的感光器件也即数码摄像机感光成像的部件,能把光线转变成电荷,通过模数转换器芯片转换成数字信号.目前数码摄像机的核心成像部件有两种:一种是广泛使用的CCD(电荷藕合) ...

  2. 数字图像恢复matlab结论,matlab模糊图像恢复数字图像处理

    matlab模糊图像恢复数字图像处理 实验六 模糊图像恢复一.实验目的本实验是一个综合性实验,要求学生巩固学习多个知识点和内容,主要有:1.理解掌握运动图像的退化模型:2.掌握维纳滤波法的原理和实现方 ...

  3. 基于matlab的gui设计与实现,毕业设计基于MATLAB GUI的数字图像处理的设计与实现(V2.1)...

    <[毕业设计]基于MATLAB GUI的数字图像处理的设计与实现.doc>由会员分享,可在线阅读全文,更多相关<毕业设计基于MATLAB GUI的数字图像处理的设计与实现(V2.1) ...

  4. matlab 霍特林变换,数字图像处理(第3版面向CS2013计算机专业规划教材)

    导语 内容提要 姚敏编著的<数字图像处理(第3版面向CS2013计算机专业规划教材)>详细介绍了数字图像处理的基本理论.主要技术和最新进展.全书共分13章,内容主要包括图像获取.图像变换. ...

  5. 实验1 数字图像处理的MATLAB基础,《数字图像处理(实验部分)》实验1_数字图像处理中MATLAB使用基础...

    <数字图像处理(实验部分)>教案 实验一:数字图像处理中MATLAB使用基础实验 一. MATLAB软件安装 二. 进入MATLAB运行环境 三. MATLAB编程基础 3.1.变量 预定 ...

  6. 数字图像处理学习笔记之一 DIP绪论与MATLAB基础

    写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...

  7. matlab gui素材,数字图像处理配套MATLAB代码及图片素材

    [实例简介] 数字图像处理配套MATLAB代码及图片素材,下载解压即可 仅作学习交流使用 如有问题请私信 [实例截图] [核心代码] b6a060d9-a607-47e1-a1fa-84fc0145e ...

  8. 领域平均法matlab代码实验,数字图像处理邻域平均法滤波实验报告matlab实现.doc...

    数字图像处理邻域平均法滤波实验报告matlab实现 数字图像处理 实验报告 实验三 邻域平均法滤波 学号 姓名 实验三 邻域平均法滤波 一.实验内容 选取噪声较明显的图像,分别采用3*3.5*5.7* ...

  9. 基于matlab的gui图像处理,基于matlab GUI的数字图像处理系统毕业论文+开题报告+程序+设计文献...

    摘  要 数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.在数字图像处理过程中,输入的是质量低的图像 ...

  10. 基于MATLAB GUI的数字图像处理系统

    中文摘要 本文以MATLAB软件的图形用户界面(GUI)开发环境和图像处理工具箱为平台设计了数字图像增强处理系统,可实现灰度变换.图像增强和图像滤波等图像处理方法,应用这种手段的设计图像处理系统可以激 ...

最新文章

  1. [转]使用target_system进行erlang应用的发行
  2. 使用postman发送json数据报错400
  3. 如何使用_如何使用Excel播放音乐
  4. python中与0xf2相等的是_python中__str__与__repr__
  5. 王道 —— 进程通信
  6. 怎么在html中加入相对链接,html直接跳转超链接 html中怎么实现同一页面超级链接...
  7. 用Prettier和ESlint来统一提交代码
  8. spring引入properties变量报错
  9. 那些小城里的分析大师们为什么发不了财?
  10. 返回顶部 模仿天猫的返回顶部代码 HTML JQuery CSS JavaScript
  11. cadence学习笔记(2)-PCB封装库制作
  12. 笔记|使用边框和背景(应用边框样式)
  13. phalapi 数据库锁_PhalApi:[1.15] 数据库操作:基于NotORM的使用及优化-Go语言中文社区...
  14. 修改服务器端口后防火墙要设置吗,服务器设置完防火墙需要重启吗
  15. root用户被提示:Operation not permitted
  16. 控制台抓包和requests.post()发送请求
  17. 什么是敏捷性能合弄结构(APH)?
  18. android 空包写入签名(OPPO、VIVO、小米等)
  19. 邮件群发平台哪个好,什么是群发单显怎么操作?
  20. 谷粒商城VUE模板设置

热门文章

  1. 《心灵捕手》经典台词
  2. 泰坦尼克 (有剧透)
  3. AMD R9 280x tri-x vapor-x OC 刷新BIOS来节能降温
  4. B2C模式电商案例分享
  5. 02虚幻编辑器各部分功能详解
  6. IBM AIX初级培训总结
  7. 或许再过两年,ASML将可以自由给中国供应EUV光刻机
  8. 举个栗子!Tableau 技巧(109):用 LOD 计算产品销售周期
  9. 面试时被问有没有别家offer,回答没有,面试总是挂!回答有,就说我是面试选手,欺骗公司!...
  10. 【AGC031E】Snuke the Phantom Thief(费用流)