clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).num=zeros(20,1); name_list(i).num(i-2)=1; end %pathname = uigetdir; img_name1=importdata('E:/train.txt'); img_train_num=size(img_name1,1); num=0; for i=1:img_train_num img_name_char=cell2mat(img_name1(i)); label_1(i).name=extractBefore(cell2mat(img_name1(i)),'_'); %imgPath = [pathname,'\',label_1(i).name,'\',cell2mat(img_name1(i))]; imgPath = [pathname,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); train_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata1(:,num)=temp; end for i=1:img_train_num for j=1:20 if strcmp(name_list(j+2).name,label_1(i).name) label_1(i).num=name_list(j+2).num; end end train_y(:,i)=uint8(label_1(i).num); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %pathname = uigetdir; img_name1=importdata('test_30_32.txt'); img_test_num=size(img_name1,1); num=0; for i=1:img_test_num img_name_char=cell2mat(img_name1(i)); label_2(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_2(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); test_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata2(:,num)=temp; end for i=1:img_test_num for j=1:20 if strcmp(name_list(j+2).name,label_2(i).name) label_2(i).num=name_list(j+2).num; end end test_y(:,i)=uint8(label_2(i).num); end save('E:\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');书写程序与此程序原理相同,不过是直接从文件夹中提取图片
时间: 2024-02-07 12:02:20 浏览: 63
这是一个MATLAB程序,用于从指定路径下的文件夹中读取图片数据,然后将其存储为MATLAB的矩阵格式,以备后续机器学习模型的训练使用。程序首先通过uigetdir函数获取指定路径下的文件夹名,然后使用dir函数获取文件夹中的文件列表。接着,程序将这些文件按照一定规则(文件名中的前缀)进行分类,并赋予每个文件一个标签。程序使用imread函数读取每个文件的图像数据,并将其存储到train_x或test_x矩阵中。同时,程序还将每个文件的标签转换为数字形式,并存储到train_y或test_y矩阵中。最后,程序将训练数据和测试数据分别保存到MATLAB的.mat文件中,以备后续使用。
相关问题
clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).num=zeros(20,1); name_list(i).num(i-2)=1; end
这段代码的作用是获取用户选择的文件夹路径,然后遍历该文件夹下的所有文件和文件夹(除去当前目录和上一级目录),将每个文件名存入一个结构体数组中,并为每个文件名添加一个数字编号,编号从1开始,直到数组中存储的最后一个文件名。
具体来说,代码的执行流程如下:
1. 使用 `uigetdir` 函数获取用户选择的文件夹路径,该路径存储在 `pathname` 变量中。
2. 使用 `dir` 函数获取文件夹下的所有文件和文件夹,并将它们存储在 `name_list` 结构体数组中。
3. 循环遍历 `name_list` 数组中的每个元素,其中 `i` 取值范围为 3 到 22,即从第三个元素开始到最后一个元素。
4. 对于每个元素,将其 `num` 字段初始化为一个 20 行 1 列的零向量。
5. 将该元素的 `num` 向量中的第 `i-2` 个元素赋值为 1,表示该元素对应的文件的编号为 `i-2`。
总的来说,这段代码的目的是为文件名添加一个数字编号,以便后续处理和分析。
clear clc pathname = uigetdir; name_list=dir(pathname); for i=3:22 name_list(i).num=zeros(20,1); name_list(i).num(i-2)=1; end %pathname = uigetdir; img_name1=importdata('train_30_32.txt'); img_train_num=size(img_name1,1); num=0; for i=1:img_train_num img_name_char=cell2mat(img_name1(i)); label_1(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_1(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); train_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata1(:,num)=temp; end for i=1:img_train_num for j=1:20 if strcmp(name_list(j+2).name,label_1(i).name) label_1(i).num=name_list(j+2).num; end end train_y(:,i)=uint8(label_1(i).num); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %pathname = uigetdir; img_name1=importdata('test_30_32.txt'); img_test_num=size(img_name1,1); num=0; for i=1:img_test_num img_name_char=cell2mat(img_name1(i)); label_2(i).name=extractBefore(cell2mat(img_name1(i)),'_'); imgPath = [pathname,'\',label_2(i).name,'\',cell2mat(img_name1(i))]; temp = imread(imgPath); test_x(:,:,i)=temp; % temp = double(temp(:)); % num=num+1; % imagedata2(:,num)=temp; end for i=1:img_test_num for j=1:20 if strcmp(name_list(j+2).name,label_2(i).name) label_2(i).num=name_list(j+2).num; end end test_y(:,i)=uint8(label_2(i).num); end save('E:\\imgdata_uint8.mat', 'train_x','train_y','test_x','test_y');逐行解释
这段代码的作用是读取指定目录下的图像文件,将其转换为数据集用于深度学习训练。
首先,使用 `uigetdir` 函数让用户选择一个目录,然后使用 `dir` 函数获取该目录下所有文件的信息,存储在 `name_list` 数组中。接着,使用循环遍历前 20 个文件夹(`name_list` 中的前两个元素为 `.` 和 `..`),并为每个文件夹创建一个标签向量 `num`,其中第 `i-2` 个元素为 1,其余为 0,表示该文件夹对应的标签。
接下来,读取训练集图像文件。首先从一个文件中读取所有图像文件名,然后使用 `imread` 函数读取每个图像文件,并将其存储在 `train_x` 数组中。同时,将每个图像文件的标签与对应的标签向量 `num` 进行匹配,并将结果存储在 `train_y` 数组中。这样,`train_x` 和 `train_y` 就构成了训练集。
最后,读取测试集图像文件,方法与读取训练集图像文件类似。将读取得到的图像文件和标签信息存储在 `test_x` 和 `test_y` 数组中,构成测试集。最后,将训练集和测试集数据保存在 `imgdata_uint8.mat` 文件中。
需要注意的是,这段代码仅适用于特定的图像数据集,如果要将其应用于其他数据集,需要进行相应的修改。
阅读全文