温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - libvips Nearest Neighbor / Bicubic Deep Zoom Pyramid Creation
image-processing python deepzoom vips

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

发布于 2020-03-30 21:25:12

我正在将我的一些代码从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]')

任何帮助将不胜感激 :)

查看更多

提问者
Simon Warchol
被浏览
110
jcupitt 2020-01-31 16:50

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

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

我会用:

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编号在输出调色板图像时设置量化质量。也许你的意思是compressionlibvips默认为6,即PNG标准。

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

同样,这tile_size=128意味着您的大多数图块将为132x132像素。PNG无关紧要,但是JPG在轴上以8的倍数工作时效果最佳。我将设置tile_size为(128-2 *重叠),就像默认情况下deepzoom所做的那样。

GIT中主libvips增加maxminnearest(总是挑选左上角的像素)为好。分支具有lanczos3,但由于各种原因从未合并。