graphics - 图片调整大小 : what is a "filter"?

标签 graphics 2d image-scaling cg

我正在尝试了解图像大小调整的工作原理-请有人向我解释一下“过滤器”有什么用?

  • 过滤器是否计算源像素对目标像素的贡献?
  • 有像“box”和“gaussian”这样的过滤器,但是有没有一个叫做“bicubic”的过滤器?我是否在这里混合了两个概念,一个是“卷积滤波器”和......?
  • 是否可以对放大和缩小使用相同的过滤器? (很高兴看到这样的示例代码)
  • 是否需要先在一个维度上拉伸(stretch)图像,然后再在另一个维度上拉伸(stretch)?
  • 最佳答案

    在图像大小调整中,过滤器避免了一种称为 aliasing 的现象。 .如果您尝试在没有过滤器的情况下调整大小,则锯齿通常表现为令人讨厌的像素化效果,在动画时尤其明显......

    回答你的观点:

  • 过滤器会计算每个源像素对每个目标的贡献程度。对于调整大小,您需要一个线性过滤器,这非常简单:过滤器可以看作是一个小灰度图像;实际上,您将过滤器集中在与每个输出像素对应的位置上,将每个附近的像素乘以该位置的过滤器值,然后将它们相加以获得输出像素值。
  • 所有这些过滤器都是“卷积过滤器”,因为卷积是上述操作的数学名称。 “盒子”过滤器实际上看起来像一个盒子——盒子内的每个像素的权重都是相等的,而“高斯”过滤器是更圆的 Blob ,在边缘向零羽化。
  • 放大和缩小最重要的是为您的过滤器选择合适的尺寸。简而言之,您希望根据输入和输出中分辨率最低的任何一个来缩放过滤器。第二个最重要的事情是避免坏过滤器:“盒子”过滤器是您尝试调整大小而不过滤时通常得到的;计算机图形硬件提供的“双线性”过滤器产生平庸的放大,但提供的尺寸错误用于缩小。
  • 出于性能原因,希望先在一个维度上缩放图像,然后再在另一个维度上缩放图像。这意味着您的过滤器运行得更快:时间与过滤器宽度成正比,而不是与过滤器面积成正比。这里讨论的所有过滤器都是“可分离的”,这意味着您可以通过这种方式应用它们。

  • 如果您选择高质量的过滤器,确切的形式并不像您想象的那么重要。有两类好的滤波器:全正滤波器,如“gaussian”,倾向于模糊的一面,负波瓣滤波器,如“lanczos”,锐利,但可能会产生轻微的振铃效应。请注意,“双三次”过滤器是一个类别,其中包括全正的“B-spline”,以及具有负波瓣的“Mitchell”和“Catmull-Rom”。

    关于graphics - 图片调整大小 : what is a "filter"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455426/

    相关文章:

    Jquery/UI/Effects/Scale 插件不适用于图像

    java - 绘制多边形: unable to find error

    c# - 调整图像大小 降低图像质量

    java - 如何将 JButtons 合并到图形中?

    java - 在Java中组合两个图形对象

    android - Honeycomb (TF101) 上的 Canvas /位图和 alpha 混合性能问题

    c++ - 在 C++ 中循环访问 2D tic-tac-toe 数组的好方法?

    algorithm - 将 2D 平面转换为 3D 模型

    c# - 高质量图像缩放库

    ios - iPhone 6 和 6+ 的 ImageView 缩放