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 パラメータは、どの入力ピクセル値が純粋な黒と純粋な白として扱われるかを決定します。output_low パラメータと output_high パラメータは、純粋な黒と純粋な白に一致する出力値を決定します。そして、gamma パラメータは、変換における非線形性の度合いをコントロールします。正確には、変換関数は以下の通りです:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low
これは、GUI*1 があれば本当に素晴らしいフィルタの 1 つです。(少なくとも AviSynth の現行の形式においては) GUI を提供できないため、clip が RGB のときは、少なくともこのフィルタと VirtualDub の Levels フィルタに互換性を持たせることに決めました。その場合、VirtualDub の Levels フィルタのダイアログから数値を取って、パラメータとして(AviSynth の) Levels フィルタに渡せば、同じ結果が得られるはずです。しかし、入出力パラメータは、255 より大きくすることが可能です。

YUV モードでデータを処理するとき、Levels は、色差ではなく、輝度情報のみをガンマ補正します。ガンマ補正は、本来、RGB の概念であり、YUV でこれを適切に行う方法についてはわかりません。しかし、gamma = 1.0 なら、RGB モードと YUV モードで同じ効果が得られるはずです。明るさやコントラストを調整するには、TweakColorYUV を使用した方がいいです。なぜなら、Levels はクリップの色差も変更するからです。

v2.53 で、オプションとして coring = true/false (デフォルトは true。古いバージョンの挙動を反映する)が追加されました。
coring = true: 入力輝度値は [16,235]*2 に(色差は [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") に同じ

# scales a [16,235] clip to [0,255]:
Levels(16, 1, 235, 0, 255, coring=false)  # ColorYUV(levels="TV->PC") に同じ

原文 Date: 2005/11/15 21:23:11
日本語訳 $Date: 2008/06/22 07:41:16 $