在MATLAB中使用RGB和灰度图像计算MSE - 图像处理

时间:2015-05-12 03:36:21

标签: image matlab image-processing matrix

如何在MATLAB中使用RGB和灰度图像计算MSE?我在这里写了一些代码:

I = imread('iris.jpg);
Gray = rgb2gray(I);
n = size(I);
M = n(1);
N = n(2);
MSE = sum(sum(I-Gray).^2))/(M*N);
fprintf('\nMSE:%7.2f',MSE);

但是,当我运行此代码时,我收到此错误:

  

使用错误 - Matrix维度必须同意。

如何解决此错误?

3 个答案:

答案 0 :(得分:2)

我不确定你为什么要这样做....特别是因为灰度和彩色图像在颜色值方面会完全不同。

您收到的错误非常清楚。灰度图像只有一个通道,而RGB图像有三个通道。您试图减去不兼容尺寸的图像,从而得到该错误。

但是,如果此MSE计算确实是您想要的,则需要确保您的灰度图像有三个颜色通道。灰度图像的红色,绿色和蓝色组件都相同,因此使用repmat进行简单修复就可以了。我们可以使用它来复制多个通道上的灰度图像以模拟彩色图像。

在计算MSE之前,请对git commit变量执行此操作:

Gray

因此,你真的会这样做。顺便说一句,你的第一行有一个拼写错误。你忘记了一个结束引号。您还有一个额外的右括号,用于进行MSE计算。

Gray = repmat(Gray, [1 1 3]);

警告您可能会获得高MSE,因为灰度值与原始RGB值完全不同。

作为旁注,如果你不喜欢I = imread('iris.jpg'); Gray = rgb2gray(I); %// Change Gray = repmat(Gray, [1 1 3]); n = size(I); M = n(1); N = n(2); MSE = sum(sum(I-Gray).^2)/(M*N); fprintf('\nMSE:%7.2f',MSE); ,你可以通过bsxfun实现同样的目的,它可以自动在多个频道上播放灰度图像:

repmat

答案 1 :(得分:0)

您在文件名iris.jpg之后缺少一个近距离引用,并且在MSE =

开始的行中有一个额外的括号

错误很明显;矩阵维度不一致。

您的输入图像是RGB,它是一个3D矩阵 您的灰度图像是2D矩阵

您可以从t矩阵中减去2D矩阵

答案 2 :(得分:0)

E = imread('');
E = imz;
% choose your image directory
after apply some segmentation techniques to you image
that image save in img
imz = double(imz(:));
img=double(img(:));
ima=max(img(:));
imi=min(img(:));
m1=std(img(:));
 s1=20*log10((ima-imi)./m1);
 A = E.*E;
B = bgm.*bgm;
l2rat = sqrt(sum(B(:))/ sum(A(:)));
absd = abs(bgm);
AS = absd.^2;
maxerr = round(max(AS(:)));
% Measure Peak SNR
[peaksnr1, snr] = psnr(E, bgm);
fprintf('\n The Peak-SNR value is %0.4f', peaksnr1);
fprintf('\n The SNR value is %0.4f \n', s1);
fprintf('\n The MSE value is %0.4f \n', m1);
fprintf('\n The L2rat value is %0.4f \n', l2rat);
fprintf('\n The maxerr value is %0.4f \n', maxerr);**