将图片存为.mat文件
原因 :由于做深度学习相关研究的时候,需要将图片存为.mat作为网络的输入,故写了该程序。
有时候我们会有将图片与标签存为一个.mat文件,做到一一对应的效果。例如做
fcn
分割的时候图片与mask。我们的做法是首先将img和mask加载到工作空间,然后用img=imread('000.jpg'); mask = imread('000.jpg'); save('mydata.mat','img','mask') % 这样就将你的两个文件存为了"mydata.mat"这个名字,下次要用直接 load mydata % 就好了
当然本文要讲的不是这,本文要将的是将
FCN
中的单通道的标签Label
制作为.mat
文件。
程序如下clc clear % im=imread('C:\Users\Administrator\Desktop\1.png'); %单张图片测试 dirction='E:\3Dircadb\liver'; %图片存放文件夹 Path=dir(fullfile(dirction,'*.jpg')); %保存的图片格式为.jpg格式 for k=1:numel(Path) imPath=fullfile(dirction,Path(k).name); im=imread(imPath); [row col]=size(im); %图片的尺寸 bd=cell(1,33); bd(:)={logical(sparse(row,col))}; %在一个元胞数组中预载33个全零稀疏矩阵,背景0不算 N=unique(im); %图片分成多少类 if N(1)==0 %排除背景像素 N=N(2:numel(N),1); end for i=1:numel(N) [x y]=find(im==N(i)); %找到图片中标号为一类的所有坐标 flog=1; for t=1:numel(x) if ((x(t)-1)==0)||((y(t)-1)==0)||((x(t)+1)>row)||((y(t)+1)>col) %找到边界线点,排除他 continue; else if (im(x(t)-1,y(t))~= N(i))||(im(x(t)+1,y(t))~= N(i))||(im(x(t),y(t)-1)~= N(i))||(im(x(t),y(t)+1)~= N(i)) %找到一类图像上的边框点 X(flog)=x(t); Y(flog)=y(t); flog=flog+1; end end end val=zeros(row,col); %创建输入图像大小的全零矩阵 val((Y-1)*row+X)=1; %将其一类图像的的边框存入全零矩阵 bd(N(i))={logical(sparse(val))}; %将这个带有图像边框的矩阵以稀疏矩阵的方式存入元胞数组对应的边框分类中 X=zeros(0);Y=zeros(0); % X,Y矩阵归零处理,方便下次重新存储坐标 end GTcls.Boundaries=bd; GTcls.Segmentation=im; GTcls.CategoriesPresent=N; save_path=fullfile('E:\my\pic_mat',strcat(Path(k).name(1:5),'.mat')); %保存文件夹 save(save_path,'GTcls'); end
至此,我们的label 就转化为
.mat
文件了,就可以作为你的实验数据了。根据你自己的数据中类别数目修改上述的数字。结束!欢迎留言交流!