我必须对 VIPS(和 Python)中 16 位 tiff 文件的不同色调范围应用各种转换。我已经设法做到了,但我是 VIPS 的新手,我不相信我正在以一种有效的方式做到这一点。这些图像每张都有数百兆字节,每减少一个多余的步骤可以为每张图像节省几秒钟的时间。
我想知道是否有更有效的方法来实现我从下面的代码中获得的相同结果,例如使用查找表(我无法真正弄清楚它们在 VIPS 中是如何工作的)。代码将红色通道中的阴影分开并通过转换传递它们。
im = Vips.Image.new_from_file("test.tiff")
# Separate the red channel
band = im[0]
# Find the tone limit for the bottom 5%
lim = band.percent(5)
# Create a mask using the tone limit
mask = (band <= lim)
# Convert the mask to 16 bits
mask = mask.cast(band.BandFmt, shift = True)
# Run the transformation on the image and keep only the shadow areas
new_shadows = (65535 * (shadows / lim * 0.1)) & mask
在为每个色调范围(高光、阴影、中间色调)运行或多或少相似的代码后,我将所有生成的图像加在一起以重建原始波段:
new_band = (new_shadows.add(new_highlights).add(new_midtones)).cast(band.BandFmt)