SVNH数据(.mat格式)转为图像(.png)matlab代码

文章介绍了如何获取Stanford房屋数字数据集(SVNH)的两个格式,并详细阐述了如何将.mat格式的数据转换为.png图像,以便于后续使用如ImageFolder的处理。转换过程涉及到创建训练集和测试集的文件结构,以及将原始标签中的10(表示0)进行调整,以保持与MNIST数据集的一致性。
摘要由CSDN通过智能技术生成
一、获取SVNH数据

数据集集地址-http://ufldl.stanford.edu/housenumbers/

提供两种格式的数据:

1.Format 1,图像形式,压缩包包括train.tar.gz和test.tar.gz。

Format 1 是一些原始的未经处理的彩色图片,如下图所示(不含有蓝色的边框),下载的数据集含有 PNG 的图像和 digitStruct.mat 的文件,其中包含了边框的位置信息,很多图片上有好几个数字

2.Format 2, .mat格式的数据,包括train_32x32.mat和 test_32x32.mat

·10 classes, 1 for each digit. Digit '1' has label 1, '9' has label 9 and '0' has label 10.

(注意0的标签是10,在后续处理需要修改为0,保持与mnist数据集一致方便使用。)

·73257 digits for training, 26032 digits for testing, and 531131 additional, somewhat less difficult samples, to use as extra training data。4-D数据格式对应(width, height, channels, samples),大小为(32*32*3*73257)。

·Comes in two formats:

1. Original images with character level bounding boxes.

2. MNIST-like 32-by-32 images centered around a single character (many of the images do contain some distractors at the sides).

二、将.mat形式数据转换为'.png'图像

图像分别存在1-10命名的10个文件夹中,并以原始的序号命名。10在保存完图后改为0。

注:这步的操作主要是为了方便后续dataset.ImageFolder处理,其要求数据存储的文件路径格式为

├── svhn

├── trainset

│ ├── subfolders for 1 ~ 10

├── testset

具体转换的matlab代码如下:

%将SVHN数据的.mat形式转换为图像并分别存在trainset和testset文件夹下
%这两个文件夹中分别包含1-10命名的10个文件夹,其中存图像
clear;clc;
%1.创建trainset和testset文件夹
train_filename = 'trainset';
if exist(train_filename)==0 %该文件夹不存在,则直接创建
    mkdir(train_filename);
end
test_filename = 'trainset';
if exist(test_filename)==0 %该文件夹不存在,则直接创建
    mkdir(test_filename);
end
% mkdir('trainset');
% mkdir('testset');

%2.分别在trainset和testset文件夹下创建1-10命名的文件夹,用于存图
load train_32x32.mat;
labels = unique(y);
fileNums = length(labels);
savepath = './trainset';
makefile(fileNums, savepath);

savepath = './testset';
makefile(fileNums, savepath);

% 3.分别在对应标签的文件夹下存图
% for traindata
load train_32x32.mat;
savepath = './trainset/';
img_num = length(y);%size(X,4);
for i = 1:img_num
    img = X(:,:,:,i);
    imshow(img);
    n = y(i);
    choosensaveimg(img,n,i,savepath);
end

% for testdata
load test_32x32.mat;
savepath = './testset/';
img_num = length(y);%size(X,4);
for i = 1:img_num
    img = X(:,:,:,i);
    imshow(img);
    n = y(i);
    choosensaveimg(img,n,i,savepath);
end


% fun2:在文件1-10保存图片
function choosensaveimg(img,n,i,savepath)
switch n
    case 1
        imwrite(img,strcat(savepath,'1/',num2str(i),'.png'));
    case 2
        imwrite(img,strcat(savepath,'2/',num2str(i),'.png'));%该数据集本身是.png.mnist是'.jpg'
    case 3
        imwrite(img,strcat(savepath,'3/',num2str(i),'.png'));
    case 4
        imwrite(img,strcat(savepath,'4/',num2str(i),'.png'));
    case 5
        imwrite(img,strcat(savepath,'5/',num2str(i),'.png'));
    case 6
        imwrite(img,strcat(savepath,'6/',num2str(i),'.png'));
    case 7
        imwrite(img,strcat(savepath,'7/',num2str(i),'.png'));
    case 8
        imwrite(img,strcat(savepath,'8/',num2str(i),'.png'));
    case 9
        imwrite(img,strcat(savepath,'9/',num2str(i),'.png'));
    case 10 %原始数据 0 的标签是 10,将转换的图像存在文件夹0,相当于标签转化成 0
        imwrite(img,strcat(savepath,'0/',num2str(i),'.png'));
end
end

% fun1:创建1-10的文件夹
function makefile(fileNums, savepath)
for i=1:fileNums
    file_name = sprintf('%s',num2str(i));
    file_path_name_ = strcat(savepath,'/',file_name,'');
    if exist(file_path_name_)==0 %该文件夹不存在,则直接创建
        mkdir(file_path_name_);
    else %该文件夹存在,则先删除再创建
        rmdir(file_path_name_, 's'); %该文件夹中有没有文件均可
        mkdir(file_path_name_);
    end
end
end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值