在Matlab中平均TIFF图像?

时间:2012-04-09 15:24:36

标签: image matlab tiff average

我正在尝试在Matlab中平均8个TIFF图像,但我一直无法获得正确的结果。如果我读入图像并除以固定数字(读取的图像数量),我最终会得到一个非常暗的图像,而不是具有均匀亮度的“平均图像”。我使用的代码如下:

i = 0;
R = 0;
A=imread('1.tif');
B=imread('2.tif');
R = imdivide((imadd(A,B)),2);

for i = 3:8
    TEMP = imadd(R,imread(sprintf('%d.tif' ,i)));
    R = imdivide(TEMP,8);
end

imshow(R);
imwrite(R,'AVG.tif','tif');

有没有办法解决这个平均方案? 谢谢!

3 个答案:

答案 0 :(得分:2)

你的问题是对图像求和导致溢出(Richante是正确的,imadd在发生溢出时使用饱和算术)。您需要更改为能够保持金额而不会丢失的数据类型。

e.g。

A = double(imread('1.tif'));

for i = 2:8
    A = A + double(imread(sprintf('%d.tif' ,i)));
end

...

R = uint8(A / 8);

当然,您需要转换回原始数据类型。

答案 1 :(得分:0)

可能会做得更好:

R = imdivide(imread('1.tif'), 8);
for i = 2:8
    R = imadd(R,imdivide(imread(sprintf('%d.tif' ,i)), 8));
end

这样可以避免饱和度,并且会以正确的方式添加它们(使用方式的平均加权方式有利于图像8)。

答案 2 :(得分:0)

更简单,假设 X = [X1; X2; X3 ... X8]是一个维度(行,列,8)的数组,其中:

X1 = imread('1.tif');
X1 = double(X1);
...
X = cat(3,X1 X2 X3 X4 X5 X6 X7 X8);
R = mean(X,3);

其中R是平均矩阵。