matlab - 为什么 (A - B) .^ 2 在 MATLAB 中不等于 (B - A) .^ 2?

标签 matlab

假设我有一个量化 8 位灰度图像的量化函数:

function mse = uni_quan(I, b)
   Q = I / 2 ^ (8 - b);
   Q = uint8(Q);
   Q = Q * 2 ^ (8 - b);
   mse = sum(sum((I - Q) .^ 2, 1), 2) / numel(I);
end

这个函数对I图像进行均匀量化,转换成b位图,然后在0-255范围内缩放,现在我要计算MSE (Mean Square Error)这个过程

但是结果为

mse = sum(sum((I - Q) .^ 2, 1), 2) / numel(I);

mse = sum(sum((Q - I) .^ 2, 1), 2) / numel(I);

是不同的。谁能指出我的问题是什么?
谢谢

最佳答案

问题是矩阵的类型。您正在组合两个无符号 矩阵。所以如果Q-I<0则结果为 0,与 I-Q 不同。

为了使用uint8 ,您可以分两步计算 MSE:

%Compute the absolute difference, according to the sign
difference = Q-I;
neg_idx = find(I>Q);
difference(neg_idx) = I(neg_idx)-Q(neg_idx);

%Compute the MSE
mse = sum(sum((difference) .^ 2, 1), 2) / numel(I);

关于matlab - 为什么 (A - B) .^ 2 在 MATLAB 中不等于 (B - A) .^ 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22219523/

相关文章:

linux - 如何在 Windows 中运行 Matlab 中的 Unix 命令?

algorithm - 在 MATLAB 中查找具有公共(public)重叠区域的多个圆

matlab - 如何在 Matlab 图形中添加工具提示或叠加文本

matlab - 频率:在MATLAB中使用FFT的分贝图

matlab - 为什么 Matlab 在评估数组时错误地返回 0,但在评估标量时正确返回 NaN?

c - 在mex文件matlab中使用magma_dysevd

matlab - 如何在MATLAB中编写相对路径?

C++ - MATLAB : updating a Sparse Matrix blockwise

python - 从 Python 数据中去除尖峰噪声

matlab - 如何比较多个向量(不同大小)中的元素?