Как мне переместить изображение в ячейку в Matlab? - PullRequest
0 голосов
/ 11 марта 2019

Я построил 1 * 5 ячейку с именем N и мне нужно скопировать матрицу изображения (img) в каждую запись в ней, что мне делать? Это то, что я придумал, но это не работает .... Я пытаюсь избежать циклов, поэтому мой код будет быстрее.

function newImgs = imresizenew(img,scale)  %scale is an array contains the scaling factors to be upplied originaly an entry in a 16*1 cell
    N = (cell(length(scale)-1,1))'; %scale is a 1*6 vector array
      N(:,:) = mat2cell(img,size(img),1); %Now every entry in N must contain img, but it fails
    newImgs =cellfun(@imresize,N,scale,'UniformOutput', false); %newImgs must contain the new resized imgs 
end

1 Ответ

0 голосов
/ 12 марта 2019

Из того, что я понял из вашего вопроса, и, соглашаясь с Крисом Луенго в части цикла, вот что я бы предложил. Я предполагаю, что scale(1) = 1 или что-то в этом роде, потому что вы инициализируете N = (cell(length(scale) - 1, 1))', поэтому я думаю, что одно из значений в scale не важно.

function newImgs = imresizenew(img, scale)

  % Initialize cell array.
  newImgs = cell(numel(scale) - 1, 1);

  % Avoid copying of img and using cellfun by directly filling 
  % newImgs with properly resized images.
  for k = 1:numel(newImgs)
    newImgs(k) = imresize(img, scale(k + 1));
  end

end

Небольшой тестовый скрипт:

% Input
img = rand(600);
scale = [1, 1.23, 1.04, 0.84, 0.5, 0.1];

% Call own function.
newImgs = imresizenew(img, scale);

% Output dimensions.
for k = 1:numel(newImgs)
  size(newImgs{k})
end

Выход:

ans =
   738   738

ans =
   624   624

ans =
   504   504

ans =
   300   300

ans =
   60   60
...