首页 > 解决方案 > 在 MATLAB 中平均大向量的误差

问题描述

如何在 MATLAB 中准确地取大量整数的平均值?我正在处理两个大向量(尺寸为 2672x4008),每个向量都是图像中像素的结果。因此,结果向量填充了 0 到 256 的值,所有整数。我的问题是我想要这些灰度图像的平均强度的准确值。为此,我使用了这条线

meanvalue = mean(I(:))

这在 MATLAB 的输出行中产生了 meanvalue = 155.9335 的值。

接下来,我为向量的每个值添加了 20,如下所示(如果我理解正确,这应该会提高整个图像的强度)。

Ipt = I + 20;

然后我取了这个新向量的平均值,Ipt

meanvaluept = mean(Ipt(:))

matlab 吐出一个 meanvaluept = 175.8916 的值。我不是数学天才,但我知道175.8916 - 20 ≠ 155.9335。

任何帮助将不胜感激,无论是数学上(如何提高 MATLAB 的精度),还是程序上(MATLAB 有一些内置函数可以找到强度)。

标签: matlabaveragecalculation

解决方案


由于您指的是“灰度图像”,并且您有 0-255 范围内的整数(您提到的 256 一定是错字),我猜您I的类型是uint8.

在这种情况下,MATLAB 使用饱和加法,其中大于 255 的结果被限制为 255。您描述的效果是由这种饱和加法引起的。

这是一个例子:

>> I = uint8(randi(255,1000,1000));
>> mean( I(:)+20 )
ans =
  147.1954
>> mean(I(:)) + 20
ans =
  148.0151

解决方案是先转换为双打:

>> mean( double(I(:)) + 20 )
ans =
  148.0151

推荐阅读