无伪影的大因子图像下采样
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 也不能做到这一点,我会感到惊讶,但我对它的了解还不足以提供代码建议。
是否有一种 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 也不能做到这一点,我会感到惊讶,但我对它的了解还不足以提供代码建议。