我们采用的是101_ObjectCategories这个数据集(这里是其主页,你也可以在这里获得数据集以及我的代码),这个数据集是加州理工的一个数据集,里面有101个文件夹,每个文件夹的名字是一个物体,文件夹内有几十张上百张这个物体的图像,每个图像的大小不尽相同,总共才100多MB,比较好训练,有一个同类的数据集,它还有有200多个物体的一个数据集,但是有几个G,所以不太适合了。相对于MNIST数据集来说,用matlab的话,MNIST数据集显得更难读取了,因此也不选用MNIST数据集。
需要注意的是,这个101_ObjectCategories数据集好像有102个文件夹,我删去了一个文件夹BACKGROUND_Google,顾名思义是Google的背景,但是里面的图片非常杂乱,根本看不出有什么联系,所以这个文件夹应该被删除。
首先要能读取这个图像,采用下面语句:
img = imread('101_ObjectCategories/accordion/image_0001.jpg');
image(img);
就可以显示图像了:
紧接着,我们希望能读取到所有图像,首先我们能获取到每个图像的名字,就是它们文件夹的名字,我们先获取这个名字。
matlab里有dir函数,这么用:
namelist = dir('101_ObjectCategories');
首先你得确保这个文件夹跟这个脚本放在一起,不放在一起也没关系,写成绝对路径就成。
读取后namelist 的格式为
* name -- filename
* date -- modification date
* bytes -- number of bytes allocated to the file
* isdir -- 1 if name is a directory and 0 if not
然后我们获取这些物体名:
for i = 1:length(namelist)
namelist(i).name
end
所以你看,我们得到了这些名字,然后我们就可以读取里面的图像了。
但是有一个 小问题是,隐藏文件夹'.'和'..'都会被读取到,因此我们需要判断一下输出:
for i = 1:length(namelist)
if namelist(i).name ~= '.' || namelist(i).name ~= '..'
namelist(i).name
end
end
这样就可以得到正确的输出。接下来处理图片。