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

为什么(A-B)。^2不等于(B-A)。^2在MATLAB中?,matlab,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 = sum(sum((I - Q)

假设我有一个量化函数,用于量化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 = sum(sum((I - Q) .^ 2, 1), 2) / numel(I);

这是不同的。谁能告诉我出了什么问题吗?

谢谢

问题在于矩阵的类型。您正在合并两个无符号矩阵。因此,如果
Q-II用样本代码测试它,它似乎是ok的Q=rand(4,3)I=rand(4,3)。*4mse=sum(sum((Q-I)。^2,1,2)/numel(I)mse=sum(sum((I-Q)。^2,1,2)/numel(I)你能提供一个3×3图像的可复制例子吗?这两个结果有什么不同?你能给我们展示一下Q&I@kkuilla我在熟悉的
poat.tif
图像上测试了这个函数,结果非常不同,但是
int8
的范围是-128到+127,我的图像的其中一个值可能是255pixels@ABFORCE我添加了新代码来使用uint8计算MSE。希望能有帮助
mse = sum(sum((Q - I) .^ 2, 1), 2) / numel(I);
%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);