Levels

Levels (clip, int input_low, float gamma, int input_high, int output_low, int output_high, bool "coring")

Фильтр Levelsрегулирует яркость, контрастность и величину гамма-коррекции (которая должна быть > 0). Параметры input_low и input_high определяют, какие входные пикселы считаются как полностью черные (низкое значение, low) и полностью белые(высокое значение, high), параметры output_low и output_high определяют выходные значения, соответствующие полностью черному и белому, и параметр gamma управляет уровнем нелинейности преобразования. Чтобы быть точным, функция преобразования:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low
Это один из тех фильтров, для которых было бы замечательно иметь графический пользовательский интерфейс. Т.к. я не могу предложить графический пользовательский интерфейс (по крайней мере в текущем виде AviSynth), я решил, что я хотя бы могу сделать этот фильтр совместимым с фильтром от VirtualDub когда клип в формате RGB. В этом случае можно взять числа из диалога Levels программы "VirtualDub" и ввести их как параметры для Levelsфильтра и получить аналогичные результаты. Однако, входные и выходные параметры могут быть больше 255.

При обработке информации в YUV режиме, Levelsделает гамма-коррекцию только информации по яркости, но не по цветности. Гамма-коррекция на самом деле является концепцией RGB формата и я не знаю как ее сделать правильно для YUV. Однако, если gamma=1.0, фильтр должен иметь одинаковый эффект в RGB и YUV режимах. Для регулирования яркости или контрастности лучше использовать Tweak или ColorYUV, потому что Levelsизменяет также и цветность клипа.

В v2.53 добавлено опциональное coring = true/false (true по умолчанию, что отражает поведение старых версий).
coring=true: входной диапазон яркости ограничивается значениями [16,235] (и цветность [16,240]), результат *масштабируется* из [16,235] в [0,255], выполняется преобразование согласно указанной выше формуле, и выход *масштабируется* обратно из [0,255] в [16,235].
coring=false: выполняется преобразование согласно указанной выше формуле.

# не изменяет [16,235] клип, но сжимает  (или ограничивает) [0,255] клип в [16,235]:

Levels(0, 1, 255, 0, 255)

# входная яркость масштабируется из [16,235] к [0,255],
# производится конверсия [0,255]->[16,235] согласно формуле,
# выход масштабируется обратно из [0,255] к [16,235].
# Например все значения яркости в пределах [0,16] конвертируются в 30
Levels(0, 1, 255, 16, 235)

# гамма-корректирует изображение для отображения в светлом окружении :
# пример: яркость 16 остается 16, 59 конвертируется в 79, и.т.д..
Levels(0, 1.3, 255,0, 255)

# инвертирует изображение (делает фото-негатив):
# пример: яркость 16 конвертируется в 235
Levels(0, 1, 255, 255, 0)

# не изменяет [0,255] клип; не изменяет [16,235]:
Levels(0, 1, 255, 0, 255, coring=false)

# масштабирует [0,255] клип в [16,235]:
Levels(0, 1, 255, 16, 235, coring=false)  # это то же что и ColorYUV(levels="PC->TV")

# масштабирует [16,235] клип в [0,255]:
Levels(16, 1, 235, 0, 255, coring=false)  # это то же что и ColorYUV(levels="TV->PC")

$English Date: 2005/11/15 21:23:11 $
Русский перевод 11.05.2005 Drakon Rider
Обновлен 17.12.2005 Fizick