Возможно, неверная ошибка Matlab: «Несоответствие размера заданного присваивания» - PullRequest
0 голосов
/ 03 апреля 2011

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

1 Ответ

0 голосов
/ 04 апреля 2011

Если файл, который вы читаете, является цветным изображением, imread возвращает массив MxNx3.Вы не можете назначить массив 3D на вектор 1D без изменения его формы, даже если он содержит такое же количество элементов.Вероятно, поэтому вы получаете ошибку, когда пытаетесь присвоить вывод imread непосредственно testData.Однако, когда вы используете промежуточную переменную и сворачиваете ее в вектор-столбец, назначение работает, потому что теперь вы назначаете вектор 1D другому 1D вектору равного размера.не хотите использовать дополнительный шаг, попробуйте это

testData(2:end,i)=reshape(imread(fileName),32256,1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...