1

我试图在 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');

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

4

3 回答 3

3

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

例如

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

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

...

R = uint8(A / 8);

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

于 2012-04-09T15:28:07.807 回答
0

可能会更好:

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

这将避免饱和,并以正确的方式添加它们(使用的方式将是平均强烈加权,有利于图像 8)。

于 2012-04-09T15:30:25.320 回答
0

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

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

其中 R 是平均矩阵。

于 2017-06-06T19:26:19.357 回答