您的位置:首页 > 编程语言 > MATLAB

pgm格式文件及其在matlab中的读取存储方法(1)

2015-10-17 09:08 281 查看
今天在实验室项目中,对2014年的一篇个人认为较为经典的聚类算法论文的复现时,遇到了这样一个问题。这篇论文叫做“Clustering by fast search and find of density peaks”,我打算做的是人脸图片聚类的复现,其数据来源是the Olivetti Face Database。

说到这里,我想对正在从事研究项目的本科生和经验不多的研究生分享一下经验。先要真正学点什么,最好还是看SCI和EI,IEEE等等这些国际知名的大型期刊,因为这些论文都很“实在”。国内的中文核心,很多时候都能做出一个很好的效果,但前提是:1.实验数据太特殊了,数学语言就是“条件太强了”;2.很多时候不给例程,就是说,我们知道他做的很好,但是想复现,还是自己从头做一个比较快。而前文提到的那些国际期刊则很少出现这些问题(可能我刚开始,没遇到),程序给的很全(虽然有的小地方可能跟论文不一样,这篇就是),而且数据的来源完全可以轻松找到,或者可以跟作者联系,也能很容易获得。而对于这篇文章,每一个检测的例子,数据都在文章中可以找得到,对我的复现工作有极大帮助。

当下载好数据后,发现这是一些pgm格式的文件。之前我是从来没有接触过这种格式的,对于这样的情况,我喜欢用fopen来进行读取。

其函数格式如下:

FID = fopen(FILENAME,PERMISSION)

其中filename是文件名称,需包含扩展名并用双引号包起来,而permission是该函数的一些参数。参数内容如下:

‘r’ open file for reading 打开只读文件,但该文件必须存在

‘w’ open file for writing; discard existing contents 打开只写文件,但抛弃现有内容,写的时候如果文件存在,会被清空,从头开始写。【1】

‘a’ open or create file for writing; append data to end of file 打开或创建只写的文件。若原来存在该文件,则新增内容附在文件后面;若不存在,则创建该文件。跟’w’区别是不会覆盖原来存在的文件,或创建原来不存在的文件,更加灵活。

以下是在原来的基础上增强了一些功能:

‘r+’ open (do not create) file for reading and writing 打开可读写文件,但该文件必须存在

‘w+’ open or create file for reading and writing; discard existing contents 打开可读写文件,但抛弃现有内容,写的时候如果文件存在,会被清空,从头开始写。

‘a+’ open or create file for reading and writing; append data to end of file 打开或创建只写的文件。(其余跟a相同)

在2015a的matlab里面又增加了一些新的参数,这也是我重点在本文中提到的:大写的W和大写的A。在matlab函数说明时候有这样一句:The ‘W’ and ‘A’ permissions do not automatically perform a flush of the current output buffer after output operations.“W”和“A”不会自动在执行输出操作后刷新当前的输出缓冲区。

‘W’ open file for writing without automatic flushing 功能与w基本相同但不会自动刷新

‘A’ open file for appending without automatic flushing 功能与a基本相同但不会自动刷新

默认的参数是’r’,就是说如果不去写这个参数是什么,matlab自动生成的是只读的文件。(若是在pc端,像我一样,用txt格式打开一个文件,还要再加一个‘t’,示例:’rt’,’w+t’。)

对于2015a的matlab版本确实在很多基本的函数里面增加了不少功能,而回归正题,在2015a之前的版本似乎对pgm格式的文件,处理方法见 【2】 【3】,这里就不贴代码了,有兴趣的看官可以按这个链接找到。

而实际使用的时候,则是各种奇葩问题出现。。。。。。这两个方法一个都不行!!!

不过,既然有人曾经成功过,也就不得不贴出来了。

而且,我很怀疑是对fopen,fscanf,fgetl这些函数的使用不清楚导致的。

至于pgm究竟是什么,如何导入并处理这种数据呢?我将在第二篇中展示matlab2015a里面imread新增加功能对pgm格式文件的介绍。

【1】fopen中r+和w+的区别 http://blog.163.com/y845766643@126/blog/static/17104630220101123113029840/

【2】matlab读写pgm文件 http://hejinshou.blog.sohu.com/37494856.html

【3】matlab论坛 http://www.ilovematlab.cn/thread-73744-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  clustering 经验 matlab