2010-09-11 63 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);