【发布时间】:2018-10-29 17:14:44
【问题描述】:
将图像大小调整为 200% 会在 Pillow 和 pyvips 之间产生质量差异。
虽然 Pillow 的再现非常准确,但 vips 会夸大噪点和对比度。
我需要为非常大的图像使用 vip,但质量不能令人满意。知道如何从贵宾那里获得更好的升级吗? (从我收集到的文档中,升级对贵宾来说并不是那么重要,而且大多数想法都转向了降级)。
示例:
from PIL import Image
import pyvips
import numpy as np
#Vips
img = pyvips.Image.new_from_file("mypic.jpg", access='sequential')
out = img.resize(2, kernel = "linear")
out.write_to_file("mypic_vips_resized.tif")
#Pillow
img = np.array(Image.open("mypic.jpg"))
h, w = img.shape[:2]
out = Image.fromarray(img,mode="RGB")
out = out.resize((w*2,h*2), Image.BILINEAR)
out.save("mypic_PIL_resized.tif", format='TIFF', compression='None')
抽象示例(10*10 像素)
【问题讨论】:
-
您正在使用不同的升迁方法 ---
bilinear用于枕头,cubic用于 pyvips。尝试将 vip 设置为linear,它们应该匹配。您可以尝试使用其他 pyvips 内核:最近的、线性的、立方的、米切尔、lanczos2、lanczos3。 -
@jcupitt 图片实际上来自 vips 线性(我尝试了所有方法来获得最接近的匹配)只是我的缩写代码中的一个错误。
-
我使代码 sn-p 可行,如果您将原件另存为 mypic.jpg,您应该能够看到差异(但是我不知道 SO 是否与上传的 jpg 混淆)。无论如何,适用于任何图像。
-
你是对的,libvips
resize运算符使用简单的插值双线性进行高档,而 Pillow 使用三角形过滤器。您可以通过在放大之前进行模糊来获得三角形滤镜的效果。我会做出正确的回答。
标签: python python-imaging-library vips