我目前正在进行PCA人脸识别项目,我想知道如何将多个图像读入矩阵,然后将其调整为50x50。我知道我需要使用Imread并传入图像,然后使用imresize。会不会像下面这样?
myFolder = 'C:\Users\X';
filePattern = fullfile(myFolder, '*.jpg');
jpegFiles = dir(filePattern);
for k = 1:length(jpegFiles)
baseFileName = jpegFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
imageArray50x50 = imread(fullFileName);
imageArray50x50New = imresize(imageArray50x50, [50 50]);
imshow(imageArray30x40New)
这是一个好方法吗?如何正确调整图像大小?
先谢谢你,马克
1条答案
按热度按时间zzoitvuj1#
从我所处理的内容来看,从文件中读取多个图像的唯一方法是通过
for
循环串行执行。你目前所拥有的确实是一个很好的方法,但是你需要确定如何在MATLAB中存储所有这些图像。两个最简单的选择是创建一个3D矩阵,其中每个切片是从文件中读取的50 x 50图像,或者创建一个单元阵列,其中每个单元都是50 x 50图像。如果你想做第一个选择,你会这样做:
要访问第k个映像,您需要执行以下操作:
上面的代码假设你所有的图片都是
uint8
类型。如果您的图像不是不同类型的情况,则首选单元阵列方法。所以这是第二种方法如果是这样的话,那就这样做吧:要访问第k个映像,您需要执行以下操作:
然而,如果你正在处理PCA,那么我建议你做的是创建一个2D矩阵,其中每个行是图像的展开版本,你会有尽可能多的行,因为你有图像。因此,每一行将是I X 2500强度向量。你想要这样的原因是因为如果你要在MATLAB中使用
pca
函数,每一行是一个数据点,而每一列是一个变量。因此,您可以这样做:因此,每一行将是表示为单个向量的图像。本声明:
imageArray50x50New(:).'
首先将50 x 50图像转换为列向量,然后将其转置,使其成为行向量。另外,请注意,我使图像矩阵双精度。我这样做是因为pca
最适合浮点数据,因此当我将每个图像转换为行向量时,我已经将数据转换为double
以便于此。