我正在尝试了解图像调整大小的工作原理-请有人向我解释一下“过滤器”有什么用?
过滤器是否计算源像素对目标像素的贡献?
有像“box”和“gaussian”这样的过滤器,但是有没有一个叫做“bicubic”的过滤器?我是否在这里混合了两个概念,一个是“卷积滤波器”和......?
是否可以对放大和缩小使用相同的过滤器?(很高兴看到这样的示例代码)
是否需要先在一个维度上拉伸图像,然后再在另一个维度上拉伸?
我正在尝试了解图像调整大小的工作原理-请有人向我解释一下“过滤器”有什么用?
过滤器是否计算源像素对目标像素的贡献?
有像“box”和“gaussian”这样的过滤器,但是有没有一个叫做“bicubic”的过滤器?我是否在这里混合了两个概念,一个是“卷积滤波器”和......?
是否可以对放大和缩小使用相同的过滤器?(很高兴看到这样的示例代码)
是否需要先在一个维度上拉伸图像,然后再在另一个维度上拉伸?
在图像大小调整中,过滤器避免了一种称为混叠的现象。如果您尝试在没有过滤器的情况下调整大小,则锯齿通常表现为令人讨厌的像素化效果,在动画时尤其明显......
回答你的观点:
过滤器会计算每个源像素对每个目标的贡献程度。对于调整大小,您需要一个线性过滤器,这非常简单:过滤器可以看作是一个小灰度图像;实际上,您将过滤器集中在与每个输出像素对应的位置上,将每个附近的像素乘以该位置的过滤器值,然后将它们相加以获得输出像素值。
所有这些过滤器都是“卷积过滤器”,因为卷积是上述操作的数学名称。“盒子”过滤器实际上看起来像一个盒子——盒子内的每个像素的权重都是相等的,而“高斯”过滤器是更圆的斑点,在边缘向零羽化。
放大和缩小最重要的是为您的过滤器选择合适的尺寸。简而言之,您希望根据输入和输出中分辨率最低的任何一个来缩放过滤器。第二个最重要的事情是避免坏过滤器:“盒子”过滤器是您尝试调整大小而不过滤时通常得到的;计算机图形硬件提供的“双线性”过滤器产生平庸的放大,但提供的尺寸错误用于缩小。
出于性能原因,希望先在一个维度上缩放图像,然后再在另一个维度上缩放图像。这意味着您的过滤器运行得更快:时间与过滤器宽度成正比,而不是与过滤器面积成正比。这里讨论的所有过滤器都是“可分离的”,这意味着您可以通过这种方式应用它们。
如果您选择高质量的过滤器,确切的形式并不像您想象的那么重要。有两类好的滤波器:全正滤波器,如“gaussian”,倾向于模糊的一面,负波瓣滤波器,如“lanczos”,锐利,但可能会产生轻微的振铃效应。请注意,“双三次”过滤器是一个类别,其中包括全正的“B-spline”,以及具有负波瓣的“Mitchell”和“Catmull-Rom”。