在 MATLAB 中使用 RGB 和灰度图像计算 MSE - 图像处理
Calculating the MSE with a RGB and grayscale image in MATLAB - Image Processing
如何在 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);
但是,当我 运行 这段代码时,我得到这个错误:
Error using - Matrix dimension must agree.
如何修复此错误?
我不确定您为什么要这样做...特别是因为灰度图像和彩色图像在颜色值方面彼此完全不同。
您遇到的错误很明显。灰度图像只有一个通道,而 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矩阵
您的灰度图像是二维矩阵
您不能从 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);**
如何在 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);
但是,当我 运行 这段代码时,我得到这个错误:
Error using - Matrix dimension must agree.
如何修复此错误?
我不确定您为什么要这样做...特别是因为灰度图像和彩色图像在颜色值方面彼此完全不同。
您遇到的错误很明显。灰度图像只有一个通道,而 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矩阵 您的灰度图像是二维矩阵
您不能从 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);**