【问题标题】:PSNR of two images of different size in matlabmatlab中两张不同大小图像的PSNR
【发布时间】:2014-10-23 17:57:12
【问题描述】:

我对 256*256 的图像(img)进行了双三次插值

 dest = interp2(img,'bicubic')

我得到了 511 * 511 图像。我想计算 512 * 512 图像(原始)和“目标”图像的 PSNR,如下所示

original = double(original);
dest = double(dest);
[M N] = size(original);
error = original - dest;
MSE = sum(sum(error .* error)) / (M * N);

if(MSE > 0)
PSNR = 10*log(255*255/MSE) / log(10);
disp(['PSNR = ', num2str(PSNR)])
else
PSNR = 99;
disp(['PSNR = ', num2str(PSNR)])
end 

但由于矩阵尺寸不匹配而出现错误。如何避免此错误。是否可以计算不同尺寸图像的 PSNR?请帮助

【问题讨论】:

  • 你确定你必须插值然后计算PSNR吗?也许您可以在图像中添加噪声,然后计算 PSNR。根据wiki,PSNR 是针对没有插值的噪声和无噪声图像计算的。
  • @Kamtal - 缩小图像然后调整其大小可能被视为噪声信号。增加图像大小时会出现插值伪影。在比较不同的图像插值算法时,这实际上是很常见的事情,在这些算法中,您故意缩小和调整图像大小并查看重建与原始图像的接近程度。有些算法的重建质量很差,而有些则更好。

标签: matlab image-processing matrix interpolation


【解决方案1】:

我相信您想要做的是将图像的大小减小 2 倍,然后进行插值,以便恢复原始图像大小。您想通过计算它们之间的 PSNR 来检查此重建的质量。

但是,我强烈建议不要使用 interp2 调整图像大小。 interp2 适用于一般 2D 信号。如果要调整图像大小,请改用imresize。它专为调整图像大小而设计,并处理诸如尝试对超出范围的像素进行插值以及其他在interp2 中使用起来会令人头疼的边缘情况。

使用imresize,您可以准确指定所需的尺寸。在这种情况下,您可以将尺寸增加 2 倍,也可以直接指定 512 x 512。这样,您就不会出现 511 x 511 不一致的图像尺寸错误,并且能够正常计算 PSNR,因为两个图像的尺寸相同。

假设 dest 是 256 x 256 的缩小图像,你应该这样做:

%// Cast for precision
original = double(original);
dest = double(dest);

%// Increase size of image
dest_resized = imresize(dest, [512 512], 'bicubic');

%// Compute your stuff
[M N] = size(original);
err = original - dest_resized;
MSE = sum(sum(err .* err)) / (M * N);
PSNR = 10*log(255*255/MSE) / log(10);

小提示:您的 PSNR 不太正确。您不需要那里的log(10) 部门。更多详细信息请参阅 PSNR 定义:http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio


但是,如果您死心塌地使用interp2,如果您想恢复原始大小,则需要根据@ 的原始图像大小定义一个坐标网格,步长为 0.5 987654332@。这样,您将获得 512 x 512 的图像。但是,在某些情况下,您可能会尝试插入未在网格中定义的值。因此,您需要用推算值替换任何无效的值......比如0

因此,您需要这样做:

[X,Y] = meshgrid(1:size(dest,2), 1:size(dest,1));
[X2,Y2] = meshgrid(0.5:0.5:size(dest,2), 0.5:0.5:size(dest,1));
dest = double(dest);
dest_resized = interp2(X, Y, dest, X2, Y2, 'bicubic');
dest_resized(isnan(dest_resized)) = 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多