如何在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维度必须同意。
如何解决此错误?
答案 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);**