niiyan's blog

niiyanの個人ブログ。

あやや

AYaYa

なるほどフィールド分離してからカラーノイズ除去って感じなのかな?他のカラーノイズ除去プラグインでも試してみる価値はあるかも。

でも名前が名前だけに紹介するかどうか悩むところ(笑)

2009-03-16 追記: Avisynthを絶賛ιょぅょ Part15 にあります。

DeRainbow(by sh0dan)

クロスカラー除去なら、こういうのもありますよ。

function DeRainbow(clip org, int "thresh")
{
assert(org.isYV12(),"DeRainbow() requires YV12 input!")
thresh = default(thresh, 10)

org_u = utoy(org)
org_v = vtoy(org)

msharpen(org, threshold = thresh, mask=true)
reduceby2()
greyscale()
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false).blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)

filtered_u = org_u.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="strong", scalefactor=0.5)
filtered_v = org_v.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="strong", scalefactor=0.5)

u_final = MaskedMerge(org_u, filtered_u, uv)
v_final = MaskedMerge(org_v, filtered_v, uv)

return ytouv(u_final, v_final, org)
}

↓はYUY2版(といっても内部でYV12に変換している模様)。

# YUY2 function DeRainbowYUY2(clip org, int "thresh")
{
assert(org.isyuy2(),"DeRainbowYUY2() requires YUY2 input!")
thresh = default(thresh, 10)

org_yv12 = org.converttoyv12()
org_u = utoy(org).converttoyv12()
org_v = vtoy(org).converttoyv12()

msharpen(org_yv12, threshold = thresh, mask=true)
bilinearresize(last.width/2, last.height)
greyscale()
uv = blur(1.5).levels(0,2.0,255,0,255, coring=false).blur(1.5).blur(1.5).levels(50,2.0,255,0,255, coring=false)

filtered_u = org_u.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="superstrong", scalefactor=0.5)
filtered_v = org_v.mipsmooth(spatial=255, temporal=255, scenechange=3, show=false, method="superstrong", scalefactor=0.5)

u_final = MaskedMerge(org_u, filtered_u, uv).converttoyuy2()
v_final = MaskedMerge(org_v, filtered_v, uv).converttoyuy2()

return ytouv(u_final, v_final, org)
}

使い方は、

DeRainbow(10) #MSharpenのしきい値

みたいな感じらしいです。

使ったことはないので効果のほどは不明です。

MSharpen,MipSmooth,MaskToolsを利用。
基本的にYV12。

他にはmfRainbowとかもクロスカラー除去なのかな?
http://mf.creations.nl/avs/
※Function includesから。