## 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 drakan.ru
Обновлен 17.12.2005 Fizick`