假设我有一个量化函数来量化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);
是不同的。谁能指出我的问题是什么? 感谢
答案 0 :(得分:9)
问题是矩阵的类型。您正在组合两个 无符号 矩阵。因此,如果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);