Мне приходится применять различные преобразования к разным тональным диапазонам 16-битных файлов TIFF в VIPS (и Python). Мне удалось это сделать, но я новичок в 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)
percent
три раза, по одному разу для каждого диапазона. Вместо этого сначала найдите гистограмму вашего изображения, а затем проанализируйте ее, чтобы получить процент для каждой полосы. Пожалуйста, опубликуйте крошечный, но полный пример, который мы можем попробовать запустить. edit: и, как вы говорите, конечно, вы также можете использовать LUT, что должно дать еще одно огромное ускорение. - person jcupitt   schedule 26.08.2016