## Levels

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

Il filtro `Levels` regola luminositą (brightness), contrasto (contrast), e gamma (che deve essere > 0). I parametri input_low e input_high determinano quali valori del pixel di input sono trattati come nero puro o come bianco puro; I parametri output_low e output_high determinano i valori di output correspondenti al nero e al bianco ; e il parametro gamma controlla il livello di non linearitą nella conversione. Per essere precisi, la funzione di conversione č:

> output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low

Questo č uno di quei filtri per cui sarebbe veramente bello avere una GUI. Poichč questa GUI non c'č (almeno non nella versione corrente di AviSynth), si č deciso di rendere questo filtro almeno compatibile con quello di VirtualDub quando il clip è RGB. Si dovrebbe riuscire a prendere i valori dalla GUI Levels in VirtualDub e passarli come parametri al filtro `Levels` ed ottenere lo stesso risultato. Tuttavia, i parametri di input e di output possono essere maggiori di 255.

Quando si elaborano dati in YUY2,`Levels` corregge solo l'informazione luma, e non chroma. Gamma correction č in realtą un concetto RGB, e non si sa come realizzarlo in modo corretto in YUY2. Tuttavia, se gamma = 1.0, il filtro dovrebbe avere lo stesso effetto sia in RGB che in YUY2. Per correggere brightness o contrast è meglio usare Tweak o ColorYUV, perché `Levels` cambia anche il chroma del clip.

In v2.53 è stato aggiunto un parametro opzionale coring = true/false (true di default, che riflette il comportamento delle versioni precedenti ) . Impostato a true, significa che il range del luma è limitato a [16,235] sia in input che in output (il che vuol dire che [0,16] è mappato a 16, e [235,output_high] a 235). Impostato a false significa che il range del luma è limitato a [0,255] (il che vuol dire che l'output [255,output_high] è mappato 255).

    # Questo non fa nulla su un clip [16,235] , ma fissa un clip [0,255] a [16,235]:
    Levels(0, 1, 255, 0, 255)

    # luma è tagliato a [16,235] ed avviene la conversione [0,255]->[16,235]  :
    # example: i valori luma in [0,16] sono tutti convertiti in 30
    Levels(0, 1, 255, 16, 235)

    # gamma-correct image for display in a brighter environment:
    # example: luma of 16 stays 16, 59 is converted to 79, etc.
    Levels(0, 1.3, 255,0, 255)

    # invert the image (make a photo-negative):
    # example: luma of 16 is converted to 235
    Levels(0, 1, 255, 255, 0)

    # does nothing on a [0,255] clip; does nothing on a [16,235]:
    Levels(0, 1, 255, 0, 255, coring=false)

    # scales a [0,255] clip to a [16,235]:
    Levels(0, 1, 255, 16, 235, coring=false)  # this is the same as ColorYUV(levels="PC->TV")

    # scales a [16,235] clip to a [0,255]:
    Levels(16, 1, 235, 0, 255, coring=false)  # this is the same as ColorYUV(levels="TV->PC")

`$Date: 2004/09/29 21:58:56 $`