如何在matlab中平均多个图像?

时间:2011-04-16 21:09:56

标签: matlab image-processing

我试图从1000帧获得平均图像。

  • 每张图片的尺寸为512 x 512像素。我从实验中得到的文件是一个tiff单元16数据。
  • tiff文件包含相同位置的1000帧。

我在想写一个m文件,我从tiff文件读出1000帧,然后平均它们,但它似乎会非常快地耗尽内存。

获得这1000帧的平均图像的更好方法是什么。如果唯一的方法是在将所有帧加载到matlab后平均它们,我应该如何平均超过1000帧? 谢谢。

5 个答案:

答案 0 :(得分:3)

尝试以下方法:

a=zeros(512);
for i=1:1000
    a=a+frame(i);
end
a=a/1000;

a是帧的平均值。

答案 1 :(得分:2)

在读取每个图像后,您可以将其累积在临时变量中,即在每个步骤将当前图像添加到此变量。读取所有图像后,累加器将存储所有图像的总和。最后,将其除以图像数量,您将获得最终图像。

但重要的是图像通常存储为uint8(无符号8位整数)。如果总结一下,就会发生溢出。为了防止这种累积,应该例如uint32或double。如果您希望最终图像为uint8,则需要显式转换。

答案 2 :(得分:1)

% slight modiifcations to the last answer
if the files are named image1.tif, image2.tif,....image1000.tif)
im = imread('image1.tif');
for i = 2:1000
im = imadd(im,imread(sprintf('image%d.tif',i)));
end
im = im/1000;
imshow(im,[]);

当你有像image00001,image00002,.... image00010,... image00100,....这样的问题变得有趣时,这里只读取2-10中的一个循环11-99,所以如此。 ..希望它有帮助

答案 3 :(得分:1)

source = 'D:\file_path\'; %'
im_number=262; % image number should not exceed 16 843 009 images
sum=uint32(imread([source,'image1.bmp'],'bmp')); % converts image array to Unsigned 32-bit integer to escape overflow
  for n=2:im_number;
      sum=imadd(sum,uint32(imread([source,'image', num2str(n),'.bmp'],'bmp'))); % perform addition without overflow
%      using images specific function imadd
  end;
  sum = imdivide(sum,im_number); % performing normalization of addition using images specific function imdivide
  imshow(uint8(sum),[]); % displais the image converted back to Unsigned 8-bit integer
  imwrite(uint8(sum),[source,'sum_image.bmp'],'bmp');  % saves the averaged image

答案 4 :(得分:0)

% assuming there are files named: '1.tif','2.tif',...'1000.tif'
im = imread('1.tif');
for i = 2:1000
 im = imadd(im,imread(sprintf('%d.tif',i)));
end
im = im/1000;
imshow(im,[]);