如何在matlab中找到均方误差

gav*_*hna 2 matlab

有没有办法在2个图像A,B(比如)的真实颜色256*256*3之间找到matlab中的均方误差?矩阵的数学公式表示M1和M2如下

mean sq err=1/n*n { summation (square[M1(i,j)-M2(i,j)])}
Run Code Online (Sandbox Code Playgroud)

其中我代表行,j代表列

小智 22

好吧,开始写作!一次一个字节地吃一个编程大象(即使是最小的大象)!

我们如何形成两个图像的差异?首先,将它们转换为双打,以防它们是uint8图像,这是常见的.做吧!试试吧!通过这样学习编写matlab代码,并将其分成几部分,这样你就可以按照自己的方式进行操作.

首先,你还没有告诉我们这是不是所有三个频道的MSE.你的公式说我们最终应该为每个红色,绿色和蓝色通道设置不同的MSE.

double(M1) - double(M2)
Run Code Online (Sandbox Code Playgroud)

现在,你将如何形成每个差异的平方?使用.^运算符.

(double(M1) - double(M2)).^2
Run Code Online (Sandbox Code Playgroud)

接下来,均方误差意味着我们取所有行和列的均值.一个简单的方法是使用mean函数.此调用采用行的平均值.

mean((double(M1) - double(M2)).^2,2)
Run Code Online (Sandbox Code Playgroud)

然后下一个采用平均值列.

mean(mean((double(M1) - double(M2)).^2,2),1)
Run Code Online (Sandbox Code Playgroud)

结果将是1x1x3向量.使用重塑功能将其转换为1x3矢量.(挤压功能也有帮助.)将它们全部打包成一行,我们得到了......

MSE = reshape(mean(mean((double(M1) - double(M2)).^2,2),1),[1,3]);
Run Code Online (Sandbox Code Playgroud)

如果这对你来说看起来很复杂,那么你最好将它分成几行,其中的注释会提醒你以后做了些什么.

但问题是,您可以在matlab中创建一个操作,将其分解为可管理的部分.

编辑:

在许多情况下,人们想要RMSE(均方根误差),其单位与原始数字相同.它只是MSE的平方根.