Levels のバックアップの現在との差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#code(nonumber)<<EOF
Levels(clip input, int input_low, float gamma, int input_high, int output_low,int output_high, bool coring)
EOF
#pre{{
Levels (clip, int input_low, float gamma, int input_high, int output_low, int output_high, bool "coring")
}}

Levelsフィルタは、明るさとコントラストとガンマを調整します。input_lowとinput_highパラメータは、いかなる入力ピクセル値が、純粋な黒と純粋な白として扱われるかを決定します。the output_lowとoutput_highパラメータは、黒と白に一致する出力値を決定します。そして、gammaパラメータは、変換における非線形性の程度を制御します。正確に言うと、変換に使われる関数は、以下の通りです:
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 
 output = [(input - input_low) / (input_high - input_low)]^(1/gamma) * (output_high - output_low) + output_low

これは、GUI((訳者註: グラフィカル・ユーザー・インターフェイス(Graphical User Interface)の略。([[参考 - IT用語辞典 e-Words:http://e-words.jp/w/GUI.html]])))があれば本当に素晴らしいフィルタの1つです。私はGUIを提供することができないので(少なくとも、AviSynthの現行の形式においてはできません)、このフィルタを、少なくとも、VirtualDubのLevelsフィルタと互換性があるようにすることを決めました。VirtualDubのLevelsフィルタのダイアログから数字を受け取り、それらの値を(AviSynthの)Levelsフィルタにパラメータとして渡せば、同じ結果を得ることができるでしょう。
これは、GUI((訳者註: グラフィカル・ユーザー・インターフェイス(Graphical User Interface)の略。参考: [[IT用語辞典 e-Words:http://e-words.jp/w/GUI.html]])) があれば本当に素晴らしいフィルタの 1 つです。(少なくとも AviSynth の現行の形式においては) GUI を提供できないため、clip が RGB のときは、少なくともこのフィルタと VirtualDub の Levels フィルタに互換性を持たせることに決めました。その場合、VirtualDub の Levels フィルタのダイアログから数値を取って、パラメータとして(AviSynth の) Levels フィルタに渡せば、同じ結果が得られるはずです。しかし、入出力パラメータは、255 より大きくすることが可能です。

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

v2.53において、coring = true/falseが、オプションとして追加されました(デフォルトはtrueで、古いバージョンにおける挙動を反映します)。trueに設定すると、輝度(Y)は[16,235]にクリップされます。falseに設定すると、輝度は影響を受けません。
v2.53 で、オプションとして '''coring''' = '''true/false''' (デフォルトは true。古いバージョンの挙動を反映する)が追加されました。~
'''coring''' = true: 入力輝度値は [16,235]((訳者註: [m,n] は値の範囲を表しています。[16,235] なら、16 から 235 までという意味です。)) に(色差は [16,240] に)切り詰められ、結果は [16,235] から [0,255] に *伸張* されます。変換は上述の公式に従って行われます。そして、出力は [0,255] から [16,235] に *圧縮* されます。~
'''coring''' = false: 変換は上述の公式に従って行われます。

''例'':((訳者註: 文中の[m,n]は値の範囲を示す。))

#code(nonumber)<<EOF
# [16,235]のクリップには何もしないが、[0,255]のクリップを[16,235]にclip(切り落とす)(または"clamp(縮める)")する:
#pre{{
# [16,235] のクリップには何も行わないが、[0,255] のクリップを [16,235] に切り詰める(または丸める):
Levels(0, 1, 255, 0, 255)

# 輝度は[16,235]にクリップされ、[0,255]->[16,235]変換が起こる:
# 例: [0,16]の範囲内の輝度の値が、すべて30に変換される
# 入力は [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に変換される、など
# より明るい環境のディスプレイ向けに画像をガンマ補正する:
# 例: 輝度 16 は 16 のまま、59 は 79 に変換される、など。
Levels(0, 1.3, 255, 0, 255)

# 画像を反転する(写真のネガを作成):
# 例: 16の輝度は235に変換される
# 例: 輝度 16 は 235 に変換される
Levels(0, 1, 255, 255, 0)

# [0,255]のクリップには何もせず、かつ、[16,235]のクリップにも何もしない:
# [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")と同じ
# [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")と同じ
EOF
# [16,235] のクリップを [0,255] に伸張する:
Levels(16, 1, 235, 0, 255, coring=false)  # ColorYUV(levels="TV->PC") に同じ
}}

#br
#hr
註: このページは、http://www.avisynth.org/Levelsの日本語訳です。

註: このページは、AviSynth 2.5.8 RC3 に同梱されている英語版ヘルプの日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/levels.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。詳しくは、[[AboutLicense]] を参照してください。