图像通过大因子下采样而没有人工制品

问题描述 投票:0回答:1

是否有一个python图像大小调整算法,可以通过最大限度的人工制品来缩放彩色图像?例如,从1234x1234到32x32。目标是能够从非常大的图像中生成高质量的32x32图像,如CIFAR-10中的图像。

OpenCV图像大小调整算法(线性,双三次,lancsoz,区域等)是不够的,因为它们产生大量的人工制品。也许像magic kernel method

python image image-resizing
1个回答
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的期望。

如果你用双线性缩小尺寸(Pillow使用三角滤波器),你会看到更柔和的外观,但没有锯齿和没有响铃。它可能更适合ML输入。

enter image description here

如果OpenCV也不能这样做,我会感到惊讶,但我不太清楚它建议代码。

© www.soinside.com 2019 - 2024. All rights reserved.