为了账号安全,请及时绑定邮箱和手机立即绑定

libvips 最近邻/双三次深度缩放金字塔创建

libvips 最近邻/双三次深度缩放金字塔创建

BIG阳 2022-07-12 10:06:38
我正在将我的一些代码从 openzoom.py 移到 Libvips 上,但不确定如何规定插值方法,这很重要。我至少需要能够在一种情况下使用双三次/双线性,在另一种情况下使用最近的邻居。我的旧代码如下:creator = deepzoom.ImageCreator(tile_size=128, tile_overlap=2, tile_format="png",                                        image_quality=0.8, resize_filter="nearest")creator.create(sourceFile, destFile)目前,使用 pyvips 我有以下image = pyvips.Image.new_from_file(sourceFile)image.dzsave(destFile, tile_size=128, overlap=2,                     suffix='.png[Q=80]')任何帮助将不胜感激 :)
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

默认情况下,dzsave将平均每个 2x2 像素块,相当于双线性。


有时,例如对于像素值代表标签而不是强度的图像,您需要非插值缩小。对于这些情况,您可以使用region_shrink参数来选择median或mode,这将保留标签值。


我会使用:


image = pyvips.Image.new_from_file(sourceFile, access='sequential')

image.dzsave(destFile,

             overlap=1,

             tile_size=126,

             region_shrink='mode',

             suffix='.png')

不要忘记设置access提示。对于不支持随机访问的大图像,它将为您提供速度和内存行为的巨大改进。


PNG Q 数字设置输出调色图像时的量化质量。也许你的意思是compression?libvips 默认为 6,PNG 标准。


你确定要overlap=2吗?deepzoom 标准是重叠 1。重叠 1 意味着每个图块的边缘周围有一个额外的像素,因此图像中心的图块将与其邻居共享每个边缘上的两个像素。设置overlap=2意味着您将有四个像素重叠,令人困惑。


同样,tile_size=128意味着您的大部分图块将是 132x132 像素。对 PNG 没关系,但 JPG 在轴上的倍数为 8 时效果最好。我会设置tile_size为(128 - 2 * 重叠),就像 deepzoom 默认设置的那样。


git master libvips 添加max,min和nearest(总是选择左上角的像素)。一个分支有lanczos3,但由于各种原因它从未被合并。


查看完整回答
反对 回复 2022-07-12
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信