Matlab immse函数与教师MSE计算方法差异及正确性咨询
图像MSE计算:两种公式的等价性与差异原因
首先,标准均方误差(MSE)的正确定义是计算对应像素差值平方的平均值,也就是你老师使用的mean((x(:)-y(:)).^2),这和维基百科的定义完全一致,是行业通用的计算方式。
你提到的Matlab immse函数公式(norm(x(:)-y(:),2).^2)/numel(x),从数学逻辑上看和老师的公式完全等价:
norm(x(:)-y(:),2)计算的是差值向量的L2范数,其平方等于所有像素差值的平方和;- 除以
numel(x)(图像总像素数),本质就是平方和的平均值,和mean(...)的计算结果理应完全相同。
你遇到“老师的结果约为前者一半”的差异,大概率是实际操作中的失误导致:
- 数据类型问题:如果你的图像是
uint8等整数类型,直接手动计算(x(:)-y(:)).^2会发生溢出(比如负数差值会被截断为大整数),导致平方和计算错误;而immse函数会自动将输入转换为浮点类型(如double)进行精确计算,若你老师的代码也做了手动类型转换(比如double(x)),但你自己的计算没做,就会出现结果偏差。 - 计算笔误:比如你误将
numel(x)写成了2*numel(x),或是在计算norm时误用了其他参数(比如L1范数norm(...,1)),导致结果出现倍数差异。 - 图像维度处理错误:如果是彩色图像,若你误将单通道像素数当成总像素数(比如用
size(x,1)*size(x,2)代替numel(x)),不过这种情况会导致结果是正确值的3倍,而非一半,需要结合具体代码排查。
总结:标准MSE的计算应采用你老师的方式(或等价的Matlab immse函数),两者数学上完全等价,你遇到的差异是操作失误造成的,而非公式本身的问题。
内容的提问来源于stack exchange,提问作者albertopasqualetto
相关产品推荐
相关产品推荐

