【问题标题】:How to find MSE for color images?如何找到彩色图像的 MSE?
【发布时间】:2015-05-10 16:03:41
【问题描述】:

我正在处理彩色和灰度图像,我发现了灰度的均方误差,但不知道如何找到彩色图像的均方误差。

我为灰度图像做了这个:

 acc = sum( (data_gray(:)- reconstructData(:)).^2 ); 
 mse = acc / numel(data_gray);

对于彩色图像,以下代码不起作用,并给我如下错误: 错误使用 - 整数只能与同一类的整数或双精度标量组合。 finalCompress 中的错误(第 60 行) accRC = sum( (RC(:) - recRC(:)).^2 );

彩色图像 MSE 代码:

 accRC = sum( (RC(:) - recRC(:)).^2 ); 
 accGC = sum( (GC(:)- recGC(:)).^2 );
 accBC = sum( (BC(:)- recBC(:)).^2 );
 mse = accRC+accGC+accBC / numel(combineColorChannels);

combineColorChannels 是由(recRC,recGC,recBC) 组成的彩色图像

【问题讨论】:

  • 我的理解是 MSE 是图像质量的衡量标准。因此,您需要比较 2 张图像才能获得 MSE 值。如果您对灰度进行了处理,则应用于彩色图像应该没有问题。此外,您还应该提供您已经做过的事情的代码,以提高获得好答案的机会。
  • @brodroll 我更新了帖子 :) 现在你可以查看了。

标签: matlab image-processing signal-processing


【解决方案1】:

错误很明显。您正在尝试在两个不同类型的图像之间实现算术运算。 MATLAB 抱怨不同的类型。

因为我不知道哪一组通道是不同的类型,所以最好在运行您的代码之前将它们全部转换为double

%// Change
RC = double(RC); 
GC = double(GC);
BC = double(BC);
recRC = double(recRC);
recGC = double(recGC);
recBC = double(recBC);

%// Your code
accRC = sum( (RC(:) - recRC(:)).^2 ); 
accGC = sum( (GC(:)- recGC(:)).^2 );
accBC = sum( (BC(:)- recBC(:)).^2 );
mse = accRC+accGC+accBC / numel(combineColorChannels);

如果您将所有适当的频道投射到double,上面的代码现在应该可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多