にわとり遊び
PC関連とエンコードの覚書き
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

フィールドの選択 or Mergeを自動で (その7)
function FlexibleMerge (clip clip1,clip clip2,int "level",int "level2",int "mode",int "x",int "y",int "thr",int "show")
同内容のclip1とclip2をブレンドする際、ノイズの検出箇所にマスクをかけて限定的にブレンドを行う関数です。

0_20141128121912c9e.png


clip1 - ベースのクリップです。
clip2 - clip1に重ねるクリップです。
level - clip1とclip2の両方にノイズが無い部分と両方にノイズが出ている部分に対してのオプションです。clip2をどの程度反映させるかを指定します。[default=128,min=0,max=256]
level2 - clip1にノイズがあり、clip2にノイズが無い部分に対してのオプションです。clip2をどの程度反映させるかを指定します。[default=230,min=0,max=256]
mode - clip1とclip2の大きさが違う場合や、座標指定を行う場合は1を指定してください。Overlayフィルタを用いて座標を固定します。
x,y - clip1に対するclip2の座標です。
thr - Anticombのpass1を指定します。小さいほどコーミングを検知しやすくなります。[default=16]
show - 0は通常の出力です。1は出力フレームに対してのコーミングチェックの結果を、2はclip1,clip2,出力フレームのコーミングチェック結果を並べて表示します。


function FlexibleMerge (clip clip1,clip clip2,int "level",int "level2",int "mode",int "x",int "y",int "thr",int "show") {
function Combcheck (clip clip,int "thr") {clip.ConvertToYUY2().anticomb(checkmode=true, pass1=thr).ConvertToYV12()}
thr=default(thr,16)
level=default(level,128)
level2=default(level2,230)
mode=default(mode,0)
cx=default(x,0)
cy=default(y,0)
show=default(show,0)
clip2=(mode==0) ? clip2 : Overlay(clip1,clip2,x=cx,y=cy)

n1=clip1.Grayscale()
nV1=Combcheck(n1,thr)
diff1=Overlay(n1, nV1, mode="difference").ConvertToRGB32()
Mask1=Colorkeymask(diff1,$828282,0).showalpha()
n2=clip2.Grayscale()
nV2=Combcheck(n2,thr)
diff2=Overlay(n2, nV2, mode="difference").ConvertToRGB32()
Mask2=Colorkeymask(diff2,$828282,0).showalpha()

MaskAdd1=Layer(Mask1.Levels(0, 1, 255, 255, 0),Mask2,op="subtract")#Mask1にノイズなし、Mask2にノイズなし
MaskAdd2=Layer(Mask1,Mask2,op="darken")#Mask1にノイズあり、Mask2にノイズあり
MaskAdd=Layer(MaskAdd1,MaskAdd2,op="lighten")#ありあり+なしなし
MaskSub=Layer(Mask1,Mask2,op="subtract")#Mask1にノイズあり、Mask2にノイズなし
CleanMask=Mask(clip2.ConvertToRGB32("Rec709"),MaskAdd)
NoiseMask=Mask(clip2.ConvertToRGB32("Rec709"),MaskSub)
clip=layer(clip1.ConvertToRGB32("Rec709"),CleanMask,op="add",level=level)
clip=layer(clip.ConvertToRGB32("Rec709"),NoiseMask,op="add",level=level2)
clip=(show==0) ? clip.ConvertToYV12(matrix="Rec709") :
\(show==1) ? Combcheck(clip,thr) : StackHorizontal(Combcheck(clip1,thr),Combcheck(clip2,thr)).ReduceBy2.StackVertical(ReduceBy2(Combcheck(clip,thr)).AddBorders(clip.width/4,0,clip.width/4,0))
return clip
}
スポンサーサイト

コメント

コメントの投稿














管理者にだけ表示を許可する


トラックバック
トラックバック URL
http://sasamisi.blog24.fc2.com/tb.php/298-0dfd351c
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。