在将.pngs读入Matlab时,尺寸变得混乱

时间:2015-04-04 14:59:50

标签: matlab file-io

我正在使用以下代码从我计算机上的文件夹中将一系列.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时,它会显示一个完全正常的图像。这里有什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一张RGB (or Truecolor)图片。它们由3层堆叠在一起形成图像。在您的情况下,每个图层对应800x1024像素。

对于RGB图像,深度(第三维)始终为3.第一个平面包含图像的每个像素中的红色程度,第二个平面包含图像的每个像素中的绿色程度,第三个平面包含图像的每个像素中的绿色程度plane包含图像每个像素中的蓝色程度。

在matlab中,
第一维对应于图像中的行数。 第二维对应于图像中的列数。

但是在windows 中恰恰相反 第一维对应于列数,第二维对应于行数 这就是你让它们逆转的原因。