我需要为RGB图像计算不同的IQM,例如MSE,PSNR,AD,NCC等。我的查询是:
转换为灰度后可以计算这些吗?即使用rgb2gray
?还是必须输入RGB图像?
例如:我正在使用以下方法计算MSE,
mse = immse(origImg,distImg) %Method 1 (These images are RGB)
和
origImg = rgb2gray(origImg); % Method 2
distImg = rgb2gray(distImg);
origImg = double(origImg);
distImg = double(distImg);
[M N] = size(origImg);
error = origImg - distImg;
MSE = sum(sum(error .* error)) / (M * N);
但是他们给出了不同的结果。为什么?
答案 0 :(得分:1)
除了Y.AL答案外,我还提出了另一种达到相同结果的方法。我认为这种方法更直观:
mse = mean((A(:)-B(:)).^2) %with A and B the two images to compare
A
和B
的数据类型为double,如果不需要,则需要转换这些变量。
我们看到MSE只是计算每个像素的平方差的平均值。
我们可以检查结果是否相同:
%Dummy data
A = rand(10,10,3);
B = rand(10,10,3);
%Custom vs built in MSE computation
MSE1 = mean((A(:)-B(:)).^2)
MSE2 = immse(A,B)
答案 1 :(得分:0)
因为方法1(immse)应用以下公式:immse = err = (norm(origImg(:)-distImg(:),2).^2)/numel(origImg);
,而方法2的错误计算不同,所以合理地得出不同的结果是合理的。
同样,您可以在RGB和灰度级上应用它们。