我需要在Matlab的Matrix Dimensions中帮助一些人, 我有两个由 imread 功能导入的图像:
im1 = imread('1.jpg');
im2 = imread('2.jpg');
im1是参考图像,而im2是噪声图像。
在工作区窗口中,Matlab显示im2 Dimensions,如下所示:768x1024x3 而im2显示为:768x1024
它们都是RGB,没有灰度图像, 实际上第二个图像是压缩图像(在其上执行压缩算法),而第一个图像是自然的JPEG图像,未触动
并且为了计算两个图像的MSE / PNSR,矩阵尺寸必须相同。
我需要将im1尺寸转换为3d,就像第一张图像(768x1024)
一样我尝试了这个功能(挤压,重塑)但没有成功
答案 0 :(得分:0)
您与repmat
走在了正确的轨道上。这是正确的语法:
im2 = repmat(im2, [1 1 3]);
这表示您希望沿第一维复制1次,沿第二维复制1次,沿第三维复制3次。
答案 1 :(得分:0)
你确定两者都是RGB图像,因为im2只有一个通道,它看起来是灰度的,但在这种情况下也可以是彩色图像试试
[im2, map] = imread('im2.jpg');
并查看地图变量中是否出现任何内容。如果图像确实是色彩映射图像,则映射变量的大小应为256 X 3。
donda建议重复灰度通道3次,使其尺寸为768x1024x3。另一种可能性是通过将RGB图像转换为灰度或通过拍摄RGB图像的绿色通道来创建噪声图像。在这种情况下验证图像的来源。
关于PSNR计算我觉得您的代码存在一些问题。我在下面给出了我的代码使用它,看看它是否有效。如果您遇到任何问题,请回复我。
function [Psnr_DB] = psnr(I,I_out)
I = double(I);
I_out = double(I_out);
total_error = 0;
for iterz = 1:size(I,3)
for iterx = 1:size(I,1)
for itery = 1:size(I,2)
total_error = total_error + (I(iterx,itery,iterz)-I_out(iterx,itery,iterz))^2;
end
end
end
MSE = total_error/numel(I);
Psnr = (255^2)/MSE;
Psnr_DB = 10*log10(Psnr) %#ok<NOPRT>