mnist格式(ubyte)数据与jpg、png格式数据的相互转化

在学习深度学习的过程中,会发现教程中的模型大多都是用mnist和cifar这两个数据集来演示的。想要使用这些模型在自己的数据上看一下效果,就想到将自己的数据做成与mnist或者cifar格式一样的数据。这里,主要是总结一下自已通过一番百度和学习,如何实现mnist格式数据与jpg、png格式数据的相互转化。

一、MNIST数据集

MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分:
Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47 MB, 包含 60,000 个样本)
Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解压后 60 KB, 包含 60,000 个标签)
Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解压后 7.8 MB, 包含 10,000 个样本)
Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解压后 10 KB, 包含 10,000 个标签)

TEST SET IMAGE FILE (t10k-images-idx3-ubyte):
[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  10000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel

这是MNIST官网上对数据集的介绍,用8-bit (1 byte ) 来表示一个pixel 的灰度,0 表示纯白色,255表示纯黑色,共256个灰度级别。每张图片有28 * 28个pixel,所以每张图片占用 28 * 28=784个bytes。

第一个32-bit 是 magic number, 00 00 08 03 = 8 * 16^2 + 3 * 16^0=2051
前两个bytes 均为0, 第三个byte 表名数据类型, 0x08 表示 unsigned byte,第四个byte 是数据的维度信息,0x03 表示测试集有3 dimensions, 图片 * 图片行 * 图片列=10000 * 28 * 28。

第二个32-bit 是样本数量,10000。

第三个32-bit 是行数, 28。

第四个32-bit 是列数, 28。

后面每 28*28=784 bytes 为一张图片的二进制信息。

二、将mnist数据集转化成图片(matlab 实现)

(1)main.m
首先,将mnist格式数据转化成.mat文件,然后将.mat文件转化成jpg格式。

clear
clc
%% 首先将ubyte格式文件转化成常用的.mat文件格式

filename = './train-images.idx3-ubyte';
savename = './test_x'; 
FID = fopen(filename,'r');

MagicNumber=readint32(FID);
NumberofImages=readint32(FID);
rows=readint32(FID);
colums=
  • 24
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 30
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值