是否有python图像调整大小算法,可以以最小的伪像以较大的比例缩放彩色图像?例如,从1234x1234到32x32。目标是能够从非常大的图像中生成像CIFAR-10中的高质量32x32图像。
OpenCV图像大小调整算法(线性,双三次,lancsoz,面积等)不足,因为它们会产生大量伪像。也许像magic kernel method之类的东西?
答案 0 :(得分:3)
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所希望的那样有轻微的振铃。
如果改用双线性尺寸缩小(枕头为此使用三角形滤镜),则外观会更柔和,但不会出现混叠和振铃。它可能更适合于ML输入。
如果OpenCV也不能做到这一点,我会感到很惊讶,但是我对它的建议并不十分了解。