我对MATLAB和图像处理比较陌生,所以请跟我理解。我正在进行图像处理实验,而我目前的阶段,我需要 1)读取一些图像(大约100个相同尺寸的图像) 2)将它们存储在变量(单元格数组,向量或结构)中 3)找出每个图像中每个像素的方差 4)形成一个新的矩阵来存储每个计算的方差
这是我的代码,但我不确定它是否解决了这个问题,而不是因为我得到了结果
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 :(得分:1)
所以看起来你在这里有一个冗余变量:im
和all_im
基本上都保存了相同的信息。如果尺寸不相同我将使用单元格数组,否则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)