在MATLAB中对大向量求平均的误差

时间:2018-06-29 19:41:24

标签: matlab average calculation

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

meanvalue = mean(I(:))

这在MATLAB的输出行中得到了平均值= 155.9335。

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

Ipt = I + 20;

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

meanvaluept = mean(Ipt(:))

和matlab吐出一个值meanvaluept = 175.8916。我不是数学向导,但我足够知道175.8916-20≠155.9335。

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

3 个答案:

答案 0 :(得分:2)

由于您指的是“灰度图像”,并且您具有0-255范围内的整数(您提到的256必须是一个错字),所以我猜测您的I的类型为{ {1}}。

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

这里是一个例子:

uint8

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

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

答案 1 :(得分:0)

您检查图像数据类型了吗?

是的,如果你的形象是我的意思,那么

meanvalue = mean(I(:)) = 155.9335

并且您为每个像素添加了20

Ipt = I + 20

您应该拥有的

meanept = mean(Ipt(:)) = meanvalue + 20 = 175.9335

但是,请不要忘记图片的数据类型为uint8,它将像素值限制为0-255 。这意味着如果将20加到一个像素上并且其值大于255,则其值将设置为255,如果减去某个值并且小于0,则该值将设置为255。

也许,某些像素通常限制为255,而通常情况下您会超过255。


例如:

我的向量X翻倍了

X = [1 1 1; ...
     1 1 1; ...
     1 1 240];

X的平均值是

mean(X(:)) = 27.5556

( 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 240)/9 = 27.5556

如果我为每个像素加20

X20 = X + 20
    = [(1 + 20) (1 + 20) (1 + 20); ...
       (1 + 20) (1 + 20) (1 + 20); ...
       (1 + 20) (1 + 20) (240 + 20)];
    = [21 21 21; ...
       21 21 21; ...
       21 21 255];

请注意,X20(3,3)是255,而不是260。这会导致

meanX20 = mean(X20(:)) = 47

但是如果我将X的数据类型更改为double

X_double = double(X)

并向每个像素添加20

X20_double = X_double + 20
           = [(1 + 20) (1 + 20) (1 + 20); ...
              (1 + 20) (1 + 20) (1 + 20); ...
              (1 + 20) (1 + 20) (240 + 20)];
           = [21 21 21; ...
              21 21 21; ...
              21 21 260];

X20_double的平均值为

X20_double_mean = mean(X20_double(:)) = 47.5556

看到区别了吗? 双X20的均值为47.5556,而uint8 X20的均值为47。 我希望这会有所帮助:)

答案 2 :(得分:-2)

您的问题中有一个非常重要的说明:

假设I = [2 3;4 9]

meanvalue = mean(I(:)) = 4.5

将20与I相加时,您将拥有:

Ipt = I + 20;

Ipt = [22 23; 24 29]

因此您将I中的所有元素加20,因此您的均值将增加20。