2016年3月17日木曜日

Repair

前回までRemoveGrainの解説をやったので、Repairもやっておくことにします。

Repairはあるフレームにフィルタをかけた場合に発生したアーティファクトを低減するためのフィルタです。
名前もRepair(修復)で、ストレートなところがいいですね。

・シンタックス
シンタックスは
Repair(clip A, clip B, int "mode", int "modeU", int "modeV", bool "planar")
です。
RemoveGrainと違ってクリップ2つを入力にとります。

・Repairの基本と実例
Repairの基本的な考え方は
・任意のフィルタをかける前のクリップBeforeと、フィルタをかけたあとのクリップAfterを用意する。
・After上のあるサンプルXaと同一座標にあるBefore上のサンプルXb及びXbの近傍8点N1~N8を用意する。
・mode及びXb、N1~N8の値に応じてXaを書き換える。
となります。

modeは例によってたくさんありますが、mode1であれば
minimum = min(N1, N2, N3, N4, N5, N6, N7, N8, Xb); // Xb及びN1~N8のうちの最小値
maximum = max(N1, N2, N3, N4, N5, N6, N7, N8, Xb); // Xb及びN1~N8のうちの最大値
Xa = clamp(Xa, minimum, maximum); // Xaをminimum~maximumの範囲内にclamp
という処理を行います。

こうすることで、なんらかのフィルタをかけた際に出力値が極端に変化しすぎてしまったもの(=アーティファクト)を、許容範囲内に収めてしまおうというわけです。

では実際にやってみましょう。

まず、あるクリップにアンシャープマスクをかけてみます。
src = something
blur = src.RemoveGrain(19).RemoveGrain(19)
sharpen = src.mt_adddiff(src.mt_makediff(blur, chroma="process"), chroma="process")
StackHorizontal(src.Subtitle("source"), sharpen.Subtitle("sharpen"))

で、ちょっとこれだと強すぎかな?帽子周りとか肩あたりとかhaloでてるし~ という場合にこうする。
src = something
blur = src.RemoveGrain(19).RemoveGrain(19)
sharpen = src.mt_adddiff(src.mt_makediff(blur, chroma="process"), chroma="process")
repair = Repair(sharpen, src, 1)
StackHorizontal(src.Subtitle("source"), sharpen.Subtitle("sharpen"), repair.Subtitle("repair"))
はい、「ちょっとシャープ強すぎ?」が「そこそこシャープ」になりました。便利ですね。

・Repairのmode
RepairもRemoveGrain同様、modeは1~24(+mode-1とmode0)が用意されています。
しかし、mode1以外を使っているスクリプトを自分は知りませんし、自分でも1以外を使った記憶がありません。
まあ、ものによっては1以外が有効なこともあるんでしょうが…。
興味のある方は色々なソースやフィルタで試してみてください。

ではRepair解説はこれで終了とします。

目次:
RemoveGrain解説 導入
RemoveGrainの基本事項
RemoveGrain mode1~mode4
RemoveGrain mode5~mode12
RemoveGrain mode13~mode16
RemoveGrain mode17~mode22
RmoveGrain mode23/mode24 及び総評
Repair
Clense
Clense 応用

0 件のコメント:

コメントを投稿