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


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#code(){{
Levels(clip input, int input_low, float gamma, int input_high, int output_low, int output_high, bool coring)
#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

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

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

v2.53において、coring = true/falseが、オプションとして追加されました(デフォルトはtrueで、古いバージョンにおける挙動を反映します)。coring = true: 入力の輝度は[16,235]に(そして色差は[16,240]に)縮められます(cla,p)。この結果は、[16,235]から[0,255]へ*拡大(scaled)*されます。その変換は、上記の公式によって行われます。そして、出力は、[0,255]から[16,235]へ*縮小(scaled)*し直されます。coring = 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(){{
# [16,235]のクリップには何もしないが、[0,255]のクリップを[16,235]に縮める(または丸める):
#pre{{
# [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に変換される)
# 入力は [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")と同じ
# [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]] を参照してください。