matlab - 在 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 有一些内置函数可以找到强度)。
解决方案
由于您指的是“灰度图像”,并且您有 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
推荐阅读
- string - 如何格式化数字以显示至少 n 个小数
- kotlin - Kotlin Enum 类不能有类型参数
- javascript - 将数组中的所有对象项与 JavaScript 中的动态属性相加
- javascript - 在 Nextjs 中将 styled-component 导出到外部 css 文件
- reactjs - 我想使用 react hook 'useState' 来保存从 API 获取的信息并显示在屏幕上。但是,我不能在课堂上使用,我该怎么办?
- swift - 从另一个可观察对象创建可观察对象
- javascript - 计数功能和数量
- angular - 单击网格外部的外部按钮后,角度 ag 网格更新/设置列搜索特定列的“agTextColumnFilter”
- kotlin - Kotlin `toInt()` 二进制补码
- android-studio - 在 gradle 终端中运行命令时出现错误 206