我的图片尺寸为300x300。为了更快的计算时间,我使用
进行下采样 I=imresize(originalImage,0.5);
之后,我想恢复它
outputImage=imresize(I,2);
但是我看到输出图像与原始图像不相似。哪个是matlab上下采样的最佳方法?它将返回原始图像和输出图像之间的最小误差(在向下和向上采样之后) 非常感谢你
答案 0 :(得分:10)
您不应该期望准确地恢复较大的图像。如果这是可能的,我们可以通过存储下采样图像并对其进行放大来无损压缩图像。但是,当图像是缩减采样时,某些信息会丢失,而这些信息根本无法恢复。如果由于运行原因需要对图像进行缩减采样,请确保在需要时保留原始图像的副本。 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似乎对此图像的误差最小,这并不太令人惊讶。它也可能是最慢的。
答案 1 :(得分:3)
如果您专注于下采样一半的特殊情况(并且上采样2),请使用impyramid
:
I1 = impyramid(I0, 'reduce');
Ix = impyramid(I1, 'expand');