【问题标题】:What algorithms to use for image downsizing?图像缩小使用什么算法?
【发布时间】:2011-03-06 10:22:15
【问题描述】:

使用什么算法来缩小图像?

什么更快?

flash、silver player、html5等巨头对图片的大小调整(特别是从大600x600缩小到超小6x6)采用什么算法?

【问题讨论】:

  • 一个问题有很多问题。
  • 无论您最终做出何种选择,都应该小心谨慎地缩小图像尺寸。请记住:图像也有家庭。

标签: c++ c image-processing resize downsize


【解决方案1】:

有一种特殊情况:将 JPG 缩小 8 倍以上。可以对原始 JPG 数据进行直接 8 倍的重新缩放,而无需对其进行解压缩。 JPG 存储为 8x8 像素的压缩块,平均像素值在前。因此,从磁盘或网络读取文件所需的时间通常比缩减文件所需的时间要长。

【讨论】:

    【解决方案2】:

    双线性是使用最广泛的方法,可以使其运行速度与最近邻下采样算法一样快,这是最快但最不准确的算法。

    简单实现双线性采样的问题在于,如果您使用它来将图像缩小一半以上,那么您可能会遇到类似于最近邻时遇到的混叠伪影。对此的解决方案是使用基于金字塔的方法。基本上如果你想把 600x600 缩小到 30x30,你首先缩小到 300x300,然后 150x150,然后 75x75,然后 38x38,然后才使用双线性缩小到 30x30。

    当将图像减半时,双线性采样算法变得更加简单。基本上对于每个交替的像素行和列:

    y[i/2][j/2] = (x[i][j] + x[i+1][j] + x[i][j+1] + x[i+1][j+1]) / 4;
    

    【讨论】:

    • 你的意思是双线性应该只用在最后一步吗?
    【解决方案3】:

    The Code Project 上有一个出色的article,展示了各种图像滤镜的效果。

    为了缩小图像,我建议使用双三次算法;这具有自然的锐化效果,因此图像中的细节以较小的尺寸保留。

    【讨论】:

    • 我在该页面上收到 404 错误。我建议使用双三次来放大,但我坚持使用双线性来缩小。总而言之,这不会产生重大影响。
    • @Ben,链接已修复。我不同意;双线性具有平滑效果,可以在放大时消除锯齿,但在缩小尺寸时往往会洗掉细节。无论如何,看看这篇文章。
    【解决方案4】:

    通常我会坚持使用双线性过滤器进行缩小。但是,要将图像调整为 tiny 尺寸,您可能会很不走运。大多数图标都经过手工像素编辑,以使它们看起来最好。

    Here 是一个很好的资源,可以很好地解释这些概念。

    【讨论】:

      猜你喜欢
      • 2012-03-23
      • 2010-09-27
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 2012-06-24
      相关资源
      最近更新 更多