我试图从1000帧获得平均图像。
我在想写一个m文件,我从tiff文件读出1000帧,然后平均它们,但它似乎会非常快地耗尽内存。
获得这1000帧的平均图像的更好方法是什么。如果唯一的方法是在将所有帧加载到matlab后平均它们,我应该如何平均超过1000帧? 谢谢。
答案 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,[]);