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



如何在 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);**

相关内容

  • 没有找到相关文章

最新更新