【问题标题】:Dimensions getting mixed up when reading .pngs into Matlab将 .pngs 读入 Matlab 时尺寸混淆
【发布时间】:2015-04-04 14:59:50
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: matlab file-io


    【解决方案1】:

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

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

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

    在 Windows 中却恰恰相反。
    第一个维度对应于列数,第二个维度对应于行数。
    这就是你把它们颠倒过来的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 2012-01-20
      相关资源
      最近更新 更多