是否有一个python图像大小调整算法,可以通过最大限度的人工制品来缩放彩色图像?例如,从1234x1234到32x32。目标是能够从非常大的图像中生成高质量的32x32图像,如CIFAR-10中的图像。
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也不能这样做,我会感到惊讶,但我不太清楚它建议代码。