2010-09-11 241 views
2

有没有办法找到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代表

+0

您是否尝试过统计或滤波器设计工具箱?'帮助' – linuxuser27 2010-09-11 19:31:19

回答

22

好了,开始写!一次只吃一个字节的编程大象(即使是最小的)也是如此!

我们如何形成两个图像的差异?首先,将它们转换为双打以防万一它们是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的平方根。

+1

感谢很多..也鼓励。 – gavishna 2010-09-12 03:29:52

+0

为什么平均值((double(M1) - double(M2))。^ 2,2)中除了平方项之外的指数2代表行?我的意思是在matlab中,1代表行,2代表列或反之亦然?请澄清。 – gavishna 2010-09-14 17:30:19

+0

好问题。我的措辞可能是误导性的。如果X是形状NxMxP的矩阵,则sum(X,2)形成X的列(即X的第二维)上的和,产生形状为Nx1xP的结果。 – 2010-09-15 13:14:05

4

均方误差为每个通道独立:

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; 

有关其他性能,您可能还需要考虑转换为单通道和空间下采样,尽管其效果取决于图像内容。

+0

也谢谢你的这种方法。是否有必要将MSe的结果除以采样点数量?就像在实际数学公式中除以n平方那样,其中n =随机选择的采样点数量。 – gavishna 2010-09-14 17:26:22

+0

即使你的回答是正确的,但不知何故,我无法选择两个答案作为正确的!!可能在这个论坛,我们不能接受2个答案在同一时间,我认为。 – gavishna 2010-09-18 05:29:11

+0

该部门发生在“意味”的呼叫中。 > I.e. mean ==(sum(delta。^ 2)/ nPoints) – 2010-09-20 13:30:47

1
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 
3
% 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);