有没有办法找到2维图像A,B(比如256 * 256 * 3的真实颜色)在matlab中的均方误差?对于一个矩阵的数学公式表示M1和M2是下如何在matlab中找到均方误差
mean sq err=1/n*n { summation (square[M1(i,j)-M2(i,j)])}
其中i表示行j代表
列有没有办法找到2维图像A,B(比如256 * 256 * 3的真实颜色)在matlab中的均方误差?对于一个矩阵的数学公式表示M1和M2是下如何在matlab中找到均方误差
mean sq err=1/n*n { summation (square[M1(i,j)-M2(i,j)])}
其中i表示行j代表
列好了,开始写!一次只吃一个字节的编程大象(即使是最小的)也是如此!
我们如何形成两个图像的差异?首先,将它们转换为双打以防万一它们是uint8图像,这很常见。做它!尝试一下!通过这样学会编写matlab代码,并且分段执行,这样你就可以按照你所做的事情做。
首先,你还没有告诉我们这是否是所有三个通道的MSE。你的公式说明我们应该针对红色,绿色和蓝色通道中的每一个最终得到不同的MSE。
double(M1) - double(M2)
现在,你将如何形成每个差异的平方?使用。^运算符。
(double(M1) - double(M2)).^2
接下来,均方误差意味着我们取所有行和列的平均值。一个简单的方法是使用平均函数。此调用采用行之间的均值。
mean((double(M1) - double(M2)).^2,2)
而下一个将平均值放在列的下方。
mean(mean((double(M1) - double(M2)).^2,2),1)
结果将是1x1x3向量。使用重塑函数将其转换为1x3向量。 (挤压作用会有所帮助。)包装它全部成一行,我们得到这个...
MSE = reshape(mean(mean((double(M1) - double(M2)).^2,2),1),[1,3]);
如果这看起来复杂,那么你最好身上拆分为几行,有评论这会提醒你以后做了什么。
但重点是,你在matlab中创建一个操作,将其分解为可管理的块。
编辑:
在许多情况下,人们希望RMSE(根均方误差),其中有单位相同,您原来的号码。这只是MSE的平方根。
均方误差为每个通道独立:
R1 = M1(:,:,1);
G1 = M1(:,:,2);
B1 = M1(:,:,3);
R2 = M2(:,:,1);
G2 = M2(:,:,2);
B2 = M2(:,:,3);
dR = int32(R1) - int32(R2);
dG = int32(G1) - int32(G2);
dB = int32(B1) - int32(B2);
mseR = mean(dR(:).^2);
mseG = mean(dG(:).^2);
mseB = mean(dB(:).^2);
如果这是一个图像配准算法的一部分,你可能要废除的平方项:
R1 = M1(:,:,1);
G1 = M1(:,:,2);
B1 = M1(:,:,3);
R2 = M2(:,:,1);
G2 = M2(:,:,2);
B2 = M2(:,:,3);
dR = int32(R1) - int32(R2);
dG = int32(G1) - int32(G2);
dB = int32(B1) - int32(B2);
errR = sum(abs(dR(:))); % 32bits sufficient for sum of 256x256 uint8 img.
errG = sum(abs(dG(:)));
errB = sum(abs(dB(:)));
sumErr = errR + errG + errB;
有关其他性能,您可能还需要考虑转换为单通道和空间下采样,尽管其效果取决于图像内容。
a % your array1
b %your array2
m1=0;
for i=1:N
m1=m1+(actual_effort(i)-Esti_effort1(i))^2;
end
RMSE1=sqrt((1/N)*m1);
disp('Root Mean Square Error for Equation1=')
RMSE1
% MSE & PSNR for a grayscale image (cameraman.tif) & its filtered versions
clear
clc
im=imread('cameraman.tif');
im=im2double(im);
h1=1/9*ones(3,3);
imf1=imfilter(im,h1,'replicate');% 'corr'
h2=1/25*ones(5,5);
imf2=imfilter(im,h2,'replicate');% 'corr'
MSE1=mean(mean((im-imf1).^2));
MSE2=mean(mean((im-imf2).^2));
MaxI=1;% the maximum possible pixel value of the images.
PSNR1=10*log10((MaxI^2)/MSE1);
PSNR2=10*log10((MaxI^2)/MSE2);
您是否尝试过统计或滤波器设计工具箱?'帮助' –
linuxuser27
2010-09-11 19:31:19