【问题标题】:Best way to Upsampling and Downsampling Image对图像进行上采样和下采样的最佳方法
【发布时间】:2014-05-04 05:12:06
【问题描述】:

我的图像尺寸为 300x300。为了更快的计算时间,我使用了下采样

 I=imresize(originalImage,0.5);

之后,我想恢复它

 outputImage=imresize(I,2);

但我看到输出图像与原始图像不相似。在matlab中上下采样的最佳方法是什么?它将返回原始图像和输出图像之间的最小误差(下采样和上采样后) 非常感谢

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    您不应该期望完全恢复较大的图像。如果这是可能的,我们可以通过存储下采样图像并放大它们来无损压缩图像。但是,当图像被下采样时,一些信息会丢失,这些信息根本无法恢复。如果出于运行时原因需要对图像进行下采样,请确保在需要时保留原始图像的副本。 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】:

      如果您专注于下采样一半(上采样 2)的特殊情况,请使用impyramid

      I1 = impyramid(I0, 'reduce');
      Ix = impyramid(I1, 'expand');
      

      【讨论】:

      • 效果不错。但检查它不会恢复相同大小的原始图像。您可以在 matlab 中查看此代码:>> I0=[1 2 3 4;5 6 6 6; 7 6 5 6; 2 4 6 8];>>I1 = impyramid(I0, 'reduce'); >> Ix = impyramid(I1, '展开'); Ix 尺寸仅为 3x3。它看起来不像 I0 尺寸 4x4。如何解决?谢谢楼主
      • @user3336190 老实说,我只使用过reduce,所以我从未在文档中注意到expand 提供(2*M-1)-by-(2*N-1)。不确定是否有解决方法,抱歉。
      • Chappjc:没问题。您对小误差的上下采样有什么想法吗?我只知道一种方法是 imresize() 函数
      • @user3336190 imresize 是一个好方法,但请注意,下采样时的抗锯齿可能会或可能不会对错误有益。作为参考,如果您想手动进行采样(使用interp2),请参阅my resizeim function from a previous post。除了边缘在imresize 中得到特殊处理外,输出等效于imresize 禁用抗锯齿。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      相关资源
      最近更新 更多