Matlab给我的错误是“订阅分配维度不匹配”,但我不认为应该存在问题。代码如下,但基本上我有一个模拟另一个矩阵testData(实际上是它的一个子集)的维度的临时矩阵。我可以将imread的输出分配给临时矩阵,但不能分配给具有相同尺寸的testData子集。我甚至可以使用尺寸函数来证明它们是相同的尺寸但是一个有效,一个没有。所以我设置temp = imread然后testData = temp并且它可以工作。但我为什么要这样做?
fileNames = dir('Testing\*.pgm'); numFiles = size(fileNames, 1); testData = zeros(32257, numFiles); temp = zeros(32256, 1); for i = 1 : numFiles, fileName = fileNames(i).name; % Extracts some info from the file's name and stores it in the first row testData(1, i) = str2double(fileName(6:7)); % Here temp has the same dimensions as testData(2:end, i) % yet testData(2:end, i) = imread(fileName) doesn't work % however it works if I use temp as a "middleman" variable temp(:) = imread(fileName); testData(2:end, i) = temp(:); end
答案 0 :(得分:0)
如果您正在阅读的文件是彩色图像,imread
会返回MxNx3
数组。您不能将3D
数组分配给1D
向量而不对其进行重新整形,即使它包含相同数量的元素。当您尝试将imread
的输出直接分配给testData
时,这可能就是您收到错误的原因。但是,当您使用中间变量并将其折叠为列向量时,分配有效,因为现在您将1D
向量分配给另一个大小相等的1D
向量。
如果您不想使用其他步骤,请尝试使用
testData(2:end,i)=reshape(imread(fileName),32256,1);