图像质量测度计算

时间:2019-07-09 08:24:56

标签: matlab image-processing

我需要为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);

但是他们给出了不同的结果。为什么?

2 个答案:

答案 0 :(得分:1)

除了Y.AL答案外,我还提出了另一种达到相同结果的方法。我认为这种方法更直观:

mse = mean((A(:)-B(:)).^2) %with A and B the two images to compare

AB的数据类型为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和灰度级上应用它们。