2009年10月17日土曜日

縞縞まとめ その1

機能拡張版がこちらあります。


お詫び追記

一箇所試験用のままアップしてしまったため修正
TestDestripe中のsz → Lanczos4Resize

高画質なHV番宣が多く、本格的にHV化の流れになるかもと期待した今期も結局負け越した気分だったけれど、HVどころか相変わらず縞アニメも多い状況。縞の特徴からアプコンの種類について触れることもあるけれど、よくわからない表現だったので縞解消視点でまとめてみよう。

縞解消もある程度広く知られるようになり、いくつものアプローチも出てきているけれど、解像度の調査を含めて自分で作ったものの使いやすさから今回も独自路線。この機会に過去の実験の成果を踏まえ初のバージョンアップだけど、中で使うリサイズを変更しただけでというオチ。

変更点など

・画質を鮮明な方向に修正
・縦487などもパラメータの指定だけで対応
・縞解消効果を比較的容易に確認する手段の提案
・ResizeIntrと同じ結果になる互換性
・縞アニメの分類に用いるので主な設定値情報付き



function Destripe(
\ clip clip, int "hh", int "rt", int "sft1", int "sft2",
\ int "addb", int "mode") {
addb = default(addb, 0)
mode = default(mode, 1)
w = clip.width()
c = ((addb == 0) ? clip :
\ clip.AddBorders(0, 0, 0, addb)).Separatefields()
c = (mode == 0) ? c.BicubicResize(w, hh * rt) :
\ c.Spline36Resize(w, hh * rt)
ve = c.SelectEven().AddBorders(0, sft1, 0, rt + rt - sft1)
vo = c.SelectOdd().AddBorders(0, sft2, 0, rt + rt - sft2)
return Interleave(ve, vo).PointResize(w, hh + 2).
\ Crop(0, 1, w, hh).Weave()
}

function TestDestripe(
\ clip clip, int "hh", int "rt", int "sft1", int "sft2",
\ int "addb", int "mode") {
addb = default(addb, 0)
mode = default(mode, 1)
return Interleave(
\ clip.AddBorders(0, 0, 0, addb).
\ SubTitle("Original", size=32, align=5),
\ clip.Destripe(hh, rt, sft1, sft2, addb, mode).
\ Lanczos4Resize(clip.Width(), clip.Height() + addb).
\ SubTitle("Destripe", size=32, align=5))
}

function Zoom2(clip clip) {
w = clip.Width()
h = clip.Height()
return clip.PointResize(w, h, w / 4, h / 4, w / 2, h / 2)
}


必須なのは最初のDestripeのみで、他は解消効果確認用の補助。

アプコン処理で発生た縞以外の劣化は受け入れて縞解消だけを無理せず行なうという処理という実用よりはツール的な要素が強い感じになっています。相変わらず激重。

手法はResizeIntrから進化したところはなく、リサイズの変更を可能にしたのみですが、出力画質は特にHV1280-iで顕著な差があります。SD-ipでフレームで拡大されて縞のない部分の劣化がほぼ気にならないレベルになった気分。(当社比)

追加した設定値の意味


addb

画像の下に指定した幅の黒帯びを追加します。縦が奇数(や非整数)のフレームに縮小できないため、487のすたちゃアプコンなどで補正に使いいます。(例はその2にあります)。通常は省略。

mode

mode=0を指定するとResizeIntrと同じ結果になります。絵としては縦方向に少しボケが強くなります。

縞効果確認を容易にする方法

TestDestripeは、縞解消効果を確認しやすいように元フレーム、縞解消後のフレームを交互に表示させるようにしたもの。パラメータはDestripeとまったく同じです。

TestDestripe(243, 8, 3, 1)

とするとフレーム数が全体で2倍になり、オリジナル、Destripe後のフレームが交互に表示されるようになります。各フレームの中央に"Original"または"Destripe"の文字が表示されるので、フレームを移動するだけで解消効果が確認できる。

このままでは大半の24fpsアニメでフィールドで絵が異なる普通のコーミングがそのまま見えてしまうため、フレームで絵になっている部分を選ぶ必要がありますが、SD-ipで縞の出ているところと出ていないところでの差などを比較が容易になります。

チェックが目的なので、この処理の前に「適切なフィールドを合わせるだけ」のインターレース解除を行なうと24fpsアニメでもほぼすべてのフレームで確認できます。インタレ解除ではフィールド同士をブレンドしてしまうものもありますので、フィールドの入れ替えのみ行なう設定ができるものを使う方が安全。24fps化せず縞なし30にした方がこの用途では効率的かも。

さらに特徴を強調することで普通では見落としてしまうような変化を見やすくするしてもよし。

TestDestripe(243, 8, 3, 1)
#中央部分を倍に拡大して表示して微妙な違いを見る
Zoom2()

とかさらに

TestDestripe(243, 8, 3, 1)
#縦にシャープフィルタをかける
Blur(0, -1)

とすると縞解消は極めて効果的と錯覚できます。