这个比较简单,分析如下:
输入:文件夹路径,名称eg: / 1.jpg
操作:RGB三维图像转换为灰度图,并将unit8格式转为double类型
输出:double类型的一维250*200的图像数据
% path指路径,filelist指读取出来的文件的信息,p,s分别指训练集的照片集和素描集
function [imp ims] = trainingImageRead(pPath,sPath,filelist_p,filelist_s)
if isempty(filelist_p)
error(['No images detected in ' pPath '!']);
end
if isempty(filelist_s)
error(['No images detected in ' sPath '!']);
end
if length(filelist_p) ~= length(filelist_s)
error(['The number of images in ' pPath ...
'should equals that in ' sPath]);
else
% 这里才是正常操作,之前的都是排除一系列不正常的情况
for iii = 1:length(filelist_p) %iii也类似于i,就是一个变量
if filelist_p(iii).name ~= filelist_s(iii).name
error('Images does not match!');
end
end
end
% 好吧,以上都是在匹配名字中
for kk = 1:length(filelist_p)
imp0 = imread(fullfile(pPath,filelist_p(kk).name));% 读入数据,imread将其表示为m*n*3维的矩阵形式,m表示行,m行是不是就是高,n表示列,n列是不是就是宽
ims0 = imread(fullfile(sPath,filelist_s(kk).name));
if size(imp0,3) == 3
% 第三个值为3的话,表示是RGB图像,它是有好几维的,把RGB图像转换为gray灰度图,单个矩阵形式
imp0 = rgb2gray(imp0);
end
if size(ims0,3) == 3
ims0 = rgb2gray(ims0);
end
imp(:,:,kk) = double(imp0);
ims(:,:,kk) = double(ims0);
end
测试一下功能:看一下第一张照片输入的变化:imp是imread读入数据;imp0是转换为灰度的数据,imp1是输出的double类型的结果。rgb2gray
函数是通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图。
imp = imread(fullfile(trpathphoto,filelist_p(1).name));
imp0 = rgb2gray(imp);
imp1(:,:,1) = double(imp0);
看一下值的区别:
这里是三者的数据内容,有转换的
转换为double类型好像变化不大 。=是的,转换为double类型只是为了计算精度问题