我正在尝试在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');
有没有办法解决这个平均方案? 谢谢!
答案 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是平均矩阵。