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 $