我正在使用以下代码将一系列.png图像从电脑上的文件夹中读取到matlab中:
datapath = dirname;
i = 1;
myFolder = dirname;
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
filePattern = fullfile(myFolder, '*.png');
pngFiles = dir(filePattern);
for k = 1:length(pngFiles)
baseFileName = pngFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
imageArray{i} = double(imread(fullFileName))/255;
%imshow(imageArray{i});
i = i+1;
end
我正在阅读的每个png是1024x800。然而,当我在使用调试器时将鼠标悬停在imageArray{I}上时,我被告知图像的尺寸为800x1024x3!首先,行和列是如何混淆的?其次,为什么我的2D图像被赋予了额外的维度?奇怪的是,当对imageArray{i}调用imshow时,它会显示一个看起来非常正常的图像。这是怎么回事?
谢谢!
这是一个RGB(或Truecolor)图像。它们由三层堆叠在一起形成一个图像。在您的情况下,每层对应800x1024像素。
对于RGB图像,深度(第三维度)始终为3。第一平面包含图像的每个像素中的红色程度,第二平面包含图像中的每个像素的绿色程度,第三平面包含图像每个像素的蓝色程度。
在matlab中,
第一个维度对应于图像中的行数。第二个维度对应于图像中的列数。
但是在windows中恰恰相反
第一个维度对应列的数量,第二个维度对应行的数量
这就是你把它们颠倒过来的原因。