无伪影的大因子图像下采样

Image Downsampling by Large Factor without Artefacts

是否有一种 python 图像大小调整算法可以在最大程度上以最少的伪像缩放彩色图像?例如,从 1234x1234 到 32x32。目标是能够从非常大的图像中生成像 CIFAR-10 中那样的高质量 32x32 图像。

OpenCV 图像大小调整算法(线性、双三次、lancsoz、面积等)不够充分,因为它们会产生大量伪影。也许像 magic kernel method?

pillow 使用 Image.LANCZOS 调整大小将使用大内核并且不会出现锯齿。

例如,维基百科有这样的芝加哥天际线:

https://en.wikipedia.org/wiki/File:Chicago_Skyline_Hi-Res.jpg

这是一张大图,纵横比很复杂,平坦区域很大,并且有很多重复的精细细节。

这个节目:

import sys
from PIL import Image

im = Image.open(sys.argv[1])
target_size = 256.0
horizontal_scale = im.size[0] / target_size
vertical_scale = im.size[1] / target_size
scale = max(horizontal_scale, vertical_scale)
new_size = (int(im.size[0] / scale), int(im.size[1] / scale))
im = im.resize(new_size, Image.LANCZOS)
im.save(sys.argv[2])

运行 在原始 14696x1779 像素图像上得出以下结果:

我把中心区域放大了:

您可以看到没有锯齿,但有轻微的振铃,正如您对 Lanczos 的期望。

如果您改为使用双线性缩小尺寸(Pillow 为此使用三角形过滤器),您会得到更柔和的外观,但没有混叠和振铃。它可能更适合 ML 输入。

如果 OpenCV 也不能做到这一点,我会感到惊讶,但我对它的了解还不足以提供代码建议。