Matlab 对图像进行上采样和下采样的最佳方法

Matlab 对图像进行上采样和下采样的最佳方法,matlab,image-processing,Matlab,Image Processing,我有一张300x300的图片。为了加快计算速度,我使用了 I=imresize(originalImage,0.5); 在那之后,我想找回它 outputImage=imresize(I,2); 但我看到输出图像与原始图像不相似。在matlab中,哪种方法是上下采样的最佳方法?它将返回原始图像和输出图像之间的最小误差(向下和向上采样后) 非常感谢您不应该期望准确地恢复较大的图像。如果可能的话,我们可以通过存储降采样图像并对其进行放大来无损地压缩图像。但是,当图像降采样时,某些信息会丢失,

我有一张300x300的图片。为了加快计算速度,我使用了

 I=imresize(originalImage,0.5);
在那之后,我想找回它

 outputImage=imresize(I,2);
但我看到输出图像与原始图像不相似。在matlab中,哪种方法是上下采样的最佳方法?它将返回原始图像和输出图像之间的最小误差(向下和向上采样后)
非常感谢

您不应该期望准确地恢复较大的图像。如果可能的话,我们可以通过存储降采样图像并对其进行放大来无损地压缩图像。但是,当图像降采样时,某些信息会丢失,这是无法恢复的。如果出于运行时原因需要降采样图像,如果需要,请确保保留原始图像的副本。 matlab imresize函数提供了许多执行插值的方法。可以测试特定内核的下采样/上采样操作产生的错误:

I = int8(imread('rice.png'));

J = imresize(imresize(I,0.5,'box'),2,'box');
mean(abs(J(:) - I(:)))
使用不同的内核类型运行此代码会产生:

box
4.132904052734375
triangle
4.843124389648438
cubic
4.094940185546875
lanczos2
4.088195800781250
lanczos3
3.948623657226562

Lanczos3似乎对此图像的错误最小,这并不令人惊讶。它也可能是最慢的。

如果您关注的是一半下采样(2上采样)的特殊情况,请使用:


它显示了很好的结果。但是检查它并不能恢复原始图像的大小。您可以在matlab中检查以下代码:>>I0=[1 2 3 4;5 6 6;7 6 6;2 4 6 8];>>I1=impyramid(I0,'reduce');>>Ix=impyramid(I1,'expand'));Ix尺寸只有3x3。它看起来不像I0尺寸4x4。如何修复它?谢谢sir@user3336190老实说,我只使用过
reduce
,所以在文档中我从来没有注意到
expand
给出了
(2*M-1)-(2*N-1)
。抱歉,我不确定是否有解决方法。Chappjc:没问题。你知道小错误下采样和上采样的方法吗?我只知道一种方法是imresize() function@user3336190
imresize
是一种很好的方法,但请注意,向下采样时的抗混叠可能对错误有好处,也可能对错误没有好处。作为参考,如果您想手动进行采样(使用
interp2
),请参见。除了在
imresize
中得到特殊处理的边缘外,输出相当于禁用抗锯齿的
imresize
I1 = impyramid(I0, 'reduce');
Ix = impyramid(I1, 'expand');