在没有伪影的情况下大范围进行图像下采样

时间:2019-03-01 09:30:18

标签: python image image-resizing

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

OpenCV图像大小调整算法(线性,双三次,lancsoz,面积等)不足,因为它们会产生大量伪像。也许像magic kernel method之类的东西?

1 个答案:

答案 0 :(得分:3)

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

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

enter image description here

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像素图像上运行会产生以下结果:

enter image description here

我炸开了中心区域:

enter image description here

您可以看到没有混叠,但是像Lanczos所希望的那样有轻微的振铃。

如果改用双线性尺寸缩小(枕头为此使用三角形滤镜),则外观会更柔和,但不会出现混叠和振铃。它可能更适合于ML输入。

enter image description here

如果OpenCV也不能做到这一点,我会感到很惊讶,但是我对它的建议并不十分了解。