MNIST数据集的gist特征提取(含所有实例代码下载地址)

这些天处理图像检索的一些benchmark数据集,今天处理了MNIST数据集,并对其进行了特征的提取。个人方法可能不必定是最优,可是按照这样的步骤来作,获得了我最后想要的特征数据结果。须要的朋友能够参考下。学习


(MNIST数据集介绍官网:http://yann.lecun.com/exdb/mnist/,若是对这个数据集中的数据形式不了解,建议能够看一下)测试


1. 首先,经过官网咱们知道MNIST这个数据集中的数据包含60000个训练数据和10000个测试数据,其图片数据形式是按行存储的,每一行是784=28*28像素点的一张图片,这里能够跟CIFAR-10的彩色图像RGB三通道的图片数据处理进行一下对比记忆。对于MNIST这样的灰度值图片数据,处理起来比彩色图片简单多了。spa


为了证明每一行是存储的一张图片,我写了一个m文件(下载资源中的export_Mnist_to_images.m,能够不用所有输出,能够设置只输出一部分查看结果便可,可是后面提取特征时候须要用到,因此最好仍是所有输出图片),在matlab中进行可视化,输出结果,证明了该结果。下图为截取的部分结果。.net

这里,中途遇到一个波折,一开始对于这些图片的命名时,是采用在该文件夹名字后面添加五位整数从00001-70000.jpg,可是后来在特征提取for循环中读取图片进行图片名字匹配的时候很不方便,因而我从新生成了一遍(这个过程比较快,大概几分钟就可以完成),直接使用循环自增参数i+‘.jpg’,这样以后特征提取的时候就直接使用strcat匹配构造出能够循环读取的图片名了。这个小小的技巧也分享一下。命令行

另外,这里插入说起一下对文件批量重命名的方法,可是我既然在这个过程当中使用了就一并分享一下。blog

这个例子针对一个文件夹中的大量图片文件,若是图片并无按照包含数字自增的区别或者比较混乱,或者自增,可是自增幅度不是1的时候,能够考虑对所有文件进行重命名。首先Ctrl+A选中所有文件,而后按键盘F2,以后对鼠标对第一个文件右键选择重命名,而后点击enter,接着文件就能够批量自增重命名文件了。举个栗子,若是对第一个文件的重命名为image1.jpg,总共有10,000张图片,那么最后批量重命名以后,这10,000张图片的文件名为image (1).jpg,image (2).jpg,...image (10000).jpg,注意image与后面的括号编号之间有一个空格,必定要当心,不然没法找到文件。图片



2.第二步,就是对获得的图片进行特征提取。资源

这里先引用了一个对彩色图像进行特征提取的实例,在其基础上,我进行了对以上黑白图片的特征提取,并先预先输出几个进行了测试。由于这个过程耗时较长,若是出错那么运行的几个小时时间可能就浪费了。get


测试正确以后就循环对70000张图片进行特征提取,并保存在一个矩阵中,这里要注意提取的是512维的特征,所以最后的到的数据矩阵大小为70000*512,注意数据维数的设置不要出错。it

特征提取的过程比起生成图片就慢多了,这个过程我花了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