Matlab实现图像识别(一)

我们采用的是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实现图像识别(一)_第1张图片
紧接着,我们希望能读取到所有图像,首先我们能获取到每个图像的名字,就是它们文件夹的名字,我们先获取这个名字。

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

这样就可以得到正确的输出。接下来处理图片。


 

你可能感兴趣的:(机器学习)