目录
一、下载数据集
官网下载地址:http://www.cs.toronto.edu/~kriz/cifar.html
关于数据集的描述,可以参考 CIFAR10/CIFAR100 数据集介绍
.tar.gz 文件的解压,可以参考 Windows环境下如何解压.tar.gz压缩文件
二、数据读取
笔者下载的是 CIFAR100 的 Matlab 版本,这里以读取其中的数据为主,标签基本不用处理。
训练数据 - 一个 50000x3072 uint8 的矩阵。矩阵的每一行存储 32x32 彩色图像即每一行存储 32*32=3072 个数字信息。前 1024 个条目包含红色通道值,下一个 1024 个绿色,最后 1024 个蓝色。图像以行优先顺序存储,即数组的前 32 个条目是图像第一行的红色通道值。
1、以一张图片为例,将图片转换为 32*32*3 的格式,并显示
% 取第一行 -> 第一张图片的 RGB 数据
temp1 = data(1,:);
% 直接转换成 32*32*3 的形式,第一页是红色通道……
temp2 = reshape(temp1,32,32,3);
% 由于 reshape 转换时是按列存放数据,导致前图像第一行红色通道的值变到了第一列,
% 所以这里需要将每一页转置一下
im = permute(temp2,[2,1,3]);
2、将数据转换成图片存储
% 路径 + 文件名
pathdest = strcat('CIFAR-100\TEST\',fine_label_names{fine_labels(i)+1},'\',filenames{i});
% 储存图片
imwrite(im,pathdest,'png');
P.s.:图片的存储可以选择不要,记录这种方法,以便后续使用
三、总的程序代码
clc;
clear;
load('meta.mat');
% Create folders
for i=1:length(fine_label_names)
mkdir('CIFAR-100\TEST\',fine_label_names{i});
mkdir('CIFAR-100\TRAIN\',fine_label_names{i});
end
% Training images
load('train.mat');
trainY = double(fine_labels);
train = cell(50000,1);
for i=1:50000
% 转换成正常的图片数据格式
temp1 = data(i,:);
temp2 = reshape(temp1,32,32,3);
im = permute(temp2,[2,1,3]);
% 将图片转成灰度图像,并改变数据类型
train{i} = double(rgb2gray(im));
% 存储图片
pathdest = strcat('CIFAR-100\TRAIN\',fine_label_names{fine_labels(i)+1},'\',filenames{i});
imwrite(im,pathdest,'png');
end
% Test images
load('test.mat');
testY = double(fine_labels);
test = cell(10000,1);
for i=1:10000
temp1 = data(i,:);
temp2 = reshape(temp1,32,32,3);
im = permute(temp2,[2,1,3]);
test{i} = double(rgb2gray(im));
pathdest = strcat('CIFAR-100\TEST\',fine_label_names{fine_labels(i)+1},'\',filenames{i});
imwrite(im,pathdest,'png');
end
参考资料:
https://blog.csdn.net/u013555719/article/details/79343353/
https://www.mathworks.com/matlabcentral/answers/329597-save-cifar-100-images
http://www.cs.toronto.edu/~kriz/cifar.html
求助~ 感觉粘贴的 Matlab 代码显示不是很友好,颜色搭配很奇怪,代码类型又没法选 Matlab,有知道怎么处理的吗,麻烦告知一下,谢谢