我不确定您为什么要这样做....尤其是因为灰度图像和彩色图像在颜色值方面会完全不同。
你得到的错误很清楚。灰度图像只有一个通道,而 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);