MNIST数据集的gist特征提取(含全部实例代码下载地址)(转
原文来源:http://blog.csdn.net/ying_xu/article/details/50555534
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
这些天处理图像检索的一些benchmark数据集,今天处理了MNIST数据集,并对其进行了特征的提取。我的方法可能不一定是最优,但是按照这样的步骤来做,得到了我最后想要的特征数据结果。需要的朋友可以参考下。
(MNIST数据集介绍官网:http://yann.lecun.com/exdb/mnist/,如果对这个数据集中的数据形式不了解,建议可以看一下)
1. 首先,通过官网我们知道MNIST这个数据集中的数据包含60000个训练数据和10000个测试数据,其图片数据形式是按行存储的,每一行是784=28*28像素点的一张图片,这里可以跟CIFAR-10的彩色图像RGB三通道的图片数据处理进行一下对比记忆。对于MNIST这样的灰度值图片数据,处理起来比彩色图片简单多了。
为了证实每一行是存储的一张图片,我写了一个m文件(下载资源中的export_Mnist_to_images.m,可以不用全部输出,可以设置只输出一部分查看结果即可,但是后面提取特征时候需要用到,所以最好还是全部输出图片),在matlab中进行可视化,输出结果,证实了该结果。下图为截取的部分结果。
这里,中途遇到一个波折,一开始对于这些图片的命名时,是采用在该文件夹名字后面添加五位整数从00001-70000.jpg,但是后来在特征提取for循环中读取图片进行图片名字匹配的时候很不方便,于是我重新生成了一遍(这个过程比较快,大概几分钟就能够完成),直接使用循环自增参数i+‘.jpg’,这样之后特征提取的时候就直接使用strcat匹配构造出可以循环读取的图片名了。这个小小的技巧也分享一下。
另外,这里插入提及一下对文件批量重命名的方法,但是我既然在这个过程中使用了就一并分享一下。
这个例子针对一个文件夹中的大量图片文件,如果图片并没有按照包含数字自增的区别或者比较混乱,或者自增,但是自增幅度不是1的时候,可以考虑对全部文件进行重命名。首先Ctrl+A选中全部文件,然后按键盘F2,之后对鼠标对第一个文件右键选择重命名,然后点击enter,接着文件就可以批量自增重命名文件了。举个栗子,如果对第一个文件的重命名为image1.jpg,总共有10,000张图片,那么最后批量重命名之后,这10,000张图片的文件名为image (1).jpg,image (2).jpg,...image (10000).jpg,注意image与后面的括号编号之间有一个空格,一定要小心,否则无法找到文件。
2.第二步,就是对得到的图片进行特征提取。
这里先引用了一个对彩色图像进行特征提取的实例,在其基础上,我进行了对以上黑白图片的特征提取,并先预先输出几个进行了测试。因为这个过程耗时较长,如果出错那么运行的几个小时时间可能就浪费了。
测试正确之后就循环对70000张图片进行特征提取,并保存在一个矩阵中,这里要注意提取的是512维的特征,因此最后的到的数据矩阵大小为70000*512,注意数据维数的设置不要出错。
特征提取的过程比起生成图片就慢多了,这个过程我花了2个小时50分钟左右(从下午15:14到18:01)。另外就是,对于程序的运行,这种暂无输出而又比较长的运行过程,可以在每次迭代之后考虑在命令行窗口输出一行信息,类似于fprintf('the %d iter is finished.\n', i),这样可以使得程序运行过程更明了,并且出错的话也能够很快查找。
虽然这个过程看似比较简单,但是一开始摸索的时候还是遇到一些困难的。也学习了一些细节的东西,比如如何将灰度图直接画出来(这里用的是imshow,跟RGB图片的输出不同)等。自己要一步一步做这个工作。
这里分享一下完成该过程的所有代码和初始数据集,希望对做此研究的朋友有帮助,少走弯路。
下载地址为http://download.csdn.net/detail/ying_xu/9413394。
由于最后生成的特征数据集文件太大,因此放置到百度云盘,下载链接为http://pan.baidu.com/s/1gdQP3Ab。
版权声明:本文为博主原创文章,未经博主允许不得转载。