如何在 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);
但是,当我运行此代码时,出现此错误:
使用 - 矩阵维度必须一致时出错。
如何修复此错误?
我不确定你为什么要这样做....特别是因为灰度和彩色图像在颜色值方面将完全不同。
你得到的错误很清楚。灰度图像只有一个通道,而 RGB 图像有三个通道。您正在尝试减去尺寸不兼容的图像,因此出现该错误。
但是,如果此MSE计算确实是您想要的,则需要确保灰度图像具有三个颜色通道。灰度图像的红色、绿色和蓝色分量都是相等的,因此使用repmat
进行简单的修复应该可以解决问题。我们可以使用它在多个通道上复制灰度图像以模拟彩色图像。
在计算 MSE 之前,对Gray
变量执行以下操作:
Gray = repmat(Gray, [1 1 3]);
因此,您真的会这样做。顺便说一句,你的第一行有一个错字。您忘记了右引号。您还有一个额外的右大括号,用于进行 MSE 计算。
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);
请注意,您可能会获得较高的 MSE,因为灰度值与原始 RGB 值完全不同。
作为旁注,如果您不喜欢repmat
,您可以通过bsxfun
自动在多个通道上为您广播灰度图像来实现相同的目标:
I = imread('iris.jpg');
Gray = rgb2gray(I);
n = size(I);
M = n(1);
N = n(2);
MSE = sum(sum(bsxfun(@minus, I, Gray).^2))/(M*N); %// Change
fprintf('nMSE:%7.2f',MSE);
文件名 iris 后缺少右引号.jpg并且以 MSE= 开头的行中有一个额外的括号
错误很明显;矩阵维度不一致。
您的输入图像是RGB,它是一个3D矩阵 灰度图像是 2D 矩阵
您可以;t 从 3D 矩阵中减去 2D 矩阵
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);**