有沒有辦法找到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