2013-09-22 5 views
0

я хочу использовать 2D массив для хранения всех значений Img1, Img2 и по сравнению vlaue из Img1 и Img2, Я хочу для того чтобы достигнуть алгоритма любит:MATLAB с использованием 2D массива

% read in the images from a folder one by one: 
    somefolder = 'folder'; 
    filelist = dir([somefolder '/*.jpg']); 
    s=numel(filelist); 
    C = cell(length(filelist), 1); 
    for k=1:s 
     C{k}=imread([somefolder filelist(k).name]); 
    end 
%choose any of the two images to compare 
    for t=1:(s-1) 
     for r=(t+1):s 
      img1=C{r}; 
      img2=C{t}; 
      ssim_value[num][1]=img1; % first img 
      ssim_value[num][2]=img2; % second img 
      ssim_value[num][3]=mssim; % ssim value of these two images 

     end 
    end 

Итак, есть ошибка в использовании 2D-массива (ssim_value), который я использовал, что является правильным способом его инициализации и как достичь цели, которая сохраняет значения, которые я хочу сохранить.

Не мог бы кто-нибудь помочь мне. Заранее спасибо.

+2

У вас есть питон фон? Дайте 'ssim_value' попытку без квадратных скобок. Попробуйте что-то вроде: 'ssim_value {num, 1}' – Schorsch

+0

Спасибо, я попробовал ваш метод, он может работать, мне нужно загрузить изображения всей папки, чтобы увидеть, как, tks. – user2753594

+3

Используйте команду 'fullfile' для создания строк для имен файлов/папок:' fullfile (somefolder, '* .jpg') 'лучше, чем' [somefolder '/ *. Jpg'] '. – Shai

ответ

1

Я предполагаю, что «num» - это номер, который вы будете поставлять, например, 5 или что-то еще. Вы не можете смешивать типы в массивах, как в Python. Кроме того, как отметил @Schorsch, вы используете скобки для индексирования массивов в Matlab.

Двумерный массив, который вы пытаетесь сформировать, должен быть массивом двумерных ячеек. Например:

a = {{"a",3},{"two",[1,2,3]}; 

В этом случае a {1,2} = 3 и a {2,1} = "two".

Возможно, вы не знаете заранее, сколько файлов находится в каталоге, поэтому предварительная инициализация массива ячеек может быть невозможна заранее. В любом случае массивы Matlab должны быть предварительно инициализированы по соображениям производительности, и вы можете легко найти информацию об инициализации массивов в Matlab.

В свете этого, я уверен, что вы пытаетесь сделать это:

%choose any of the two images to compare 
    ssim_value = {}; 
    for t=1:(s-1) 
     for r=(t+1):s 
      img1=C{r}; 
      img2=C{t}; 
      ssim_value{num,1}=img1; % first img 
      ssim_value{num,2}=img2; % second img 
      ssim_value{num,3}=mssim; % ssim value of these two images 

     end 
    end 
Смежные вопросы