2016-10-01 3 views
1

Я относительно новичок в MATLAB и обработке изображений, поэтому поймите меня. Я работаю в эксперименте по обработке изображений, и на моем текущем этапе мне нужно 1) прочитать некоторые изображения (около 100 изображений одинакового размера) 2) сохранить их в переменной (либо ячейке, вектор или структуре) 3) Найти дисперсию каждого пикселя в каждом изображении 4) Сформировать новую матрицу для хранения каждого вычисленного дисперсиюКак найти дисперсию нескольких изображений в MATLAB

Вот мой код, но я не уверен, что он решает эту проблему не выдержать, что я получаю результат

clc; 
im_File = dir('*.bmp'); 
files = {im_File.name}; 

for k=1:numel(files) 

    im{k} = imread(files{k}); 

    %# Get the number of dimensions for your arrays 
    dim = ndims(im{k});      

    all_images = cat(dim+1,im{:}); 

    % Use linear combine to acquire all the images 
    Linear_comb_im = imlincomb(1,all_images,'uin'); 

    %get the variance of all images 
    computed_variance = var(double(Linear_comb_im),1,dim+1); 

end 
+0

Почему вы называете 'imlincomb'? Вы должны просто объединиться вдоль «dim + 1», как вы это делали (хотя и перемещаете это за пределы цикла), и вычислять дисперсию вдоль измерения «dim + 1» (как вы это сделали). – Suever

ответ

1

Итак, у вас есть избыточная переменная здесь: im и all_im в основном sav e та же информация. если бы размеры были такими же, я бы использовал массив ячеек, иначе matlab лучше подходит для матриц.

Кроме того, я не уверен, почему вы выполняете линейную комбинацию.

Я хотел бы сделать следующее:

clc; 
im_File = dir('*.bmp'); 
files = {im_File.name}; 

for k=1:numel(files) 

    im(:,:,k) = imread(files{k}); % to save time you should initialize im begore the loop i.e. im = zeros(m,n,numerl(files)), where m,n are the size of the images 

end 

%get the variance of all images 
computed_variance = var(double(im),1,3); 

так im здесь является матрица, содержащая 3D изображения в 3-м измерении. Чтобы получить доступ к изображению idx:

im(:,:,idx)