如果这是相同尺寸256 * 200的RGB图像A,B的MSE公式,那么如何获得每个像素的线图,x轴代表像素,y轴代表MSE值
MSE =重塑(平均值(平均值((双(A) - 双(B))。^ 2,2),1),[1,3])
只有两张图像A,B。该图应说明A和B的每个像素之间的变化,这是MSE的意思。
答案 0 :(得分:1)
如果你想在“每个像素之间”显示更改,那么你所展示的内容不再是均值平方误差 - 没有平均值。 (除非你打算在三个颜色平面上进行平均,否则我不建议:R,G,B的变化对人类视觉系统不同。如果你真的必须这样做,你可能想要加权它们比方说,2:4:1更具代表性,但这仍然是临时性的,不太可能准确地了解看起来最大的差异。)
当然,想要查看每像素错误是完全合理的,但我不建议使用线图来显示它们;它可能会令人困惑而不是提供信息。而是将它们显示为图像:
errs = (double(A)-double(B)).^2;
image(errs / max(errs(:)));
axis image;
然后您可以通过A
和B
进行比较,以查看哪些图片区域/功能/ ...对应更差的错误。每个像素的亮度和颜色表示误差量以及它在R,G和B平面上的分布情况。
另一方面,您实际需要的可能是图像的各个行或列的平均误差。在这种情况下,如上所述创建errs
后,使用mean
计算行或列均值;这将给你一个256×1×3的图像或1×200×3的图像;现在我建议分别绘制R,G,B曲线,除非你(我认为可能是愚蠢的,如上所述)坚持对平面进行平均。
row_errs = mean(errs,2); % this is now of size [n,1,3]
现在row_errs(:,:,1)
是MS跨行红色错误的向量,row_errs(:,:,2)
是MS跨行绿色错误的向量,等等。您可以将这些错误提供给plot