2016-10-01 65 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

所以看起来你在这里有一个冗余变量:imall_im基本上都是sav e相同的信息。如果维度werent相同我会使用单元格数组,否则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矩阵。为了访问idx图像:

im(:,:,idx)