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

差分合成関数 OverDiff5

function OverDiff5 (clip clip1,clip clip2,int "mode",int "top",int "bottom",int "left",int "right",int "smask",int "lmask",clip "c1",clip "c2",int "margin",bool "show") {
mode=default(mode,0)
top=default(top,0)
bottom=default(bottom,0)
left=default(left,0)
right=default(right,0)
smask=default(smask,40)
lmask=default(lmask,20)
margin=default(margin,0)
show=default(show,false)
c1=default(c1,clip1.crop(left,top,-right,-bottom).blur(0,1))
c2=default(c2,clip2.crop(left,top,-right,-bottom).blur(0,1))

check_diff=mt_lutxy(c1,c2,"x y - abs",chroma="process").mt_binarize(5).mt_inpand.mt_inpand.mt_inpand
over_mask=BlankClip(clip1,color=$ffffff).Letterbox(top,bottom,left,right).mt_binarize()
masked_1=mt_merge(clip1,clip2,over_mask,luma=true)
show_mask=Overlay(BlankClip(clip1),check_diff).Grayscale()
show_merge=merge(clip1,clip2)

clip_0=masked_1
clip_0=(show) ? merge(show_merge,over_mask) : clip_0
clip_1=ConditionalFilter(check_diff,clip1,masked_1,"AverageLuma","<","1.0",show=show)
clip_1_show=ConditionalFilter(check_diff,show_merge,show_merge,"AverageLuma","<","1.0",show=show)
clip_1=(show) ? StackVertical(merge(clip_1_show,over_mask),show_mask) : clip_1

c1=clip1.blur(0,1).Letterbox(top,bottom,left,right)
c2=clip2.blur(0,1).Letterbox(top,bottom,left,right)
small=mt_lutxy(c1,c2,"x y - abs",chroma="process").letterbox(0,0,2,2).mt_binarize(smask)
small_u=mt_lutxy(c1.UToY,c2.UToY,"x y - abs",chroma="process")
small_v=mt_lutxy(c1.VToY,c2.VToY,"x y - abs",chroma="process")
small_uv=mt_logic(small_u,small_v,mode="or").PointResize(c1.width,c1.height).letterbox(0,0,2,2).mt_binarize(smask)
small=(mode>=3) ? mt_logic(small,small_uv,mode="or") : small
small_e=mt_lutxy(c1,c2,"x y - abs",chroma="process").letterbox(2,2,2,2).mt_edge
small_e=(mode==4) ? small_e.mt_inpand : small_e
small=mt_logic(small_e,small,mode="or")
small=(margin==0) ? small : mt_logic(small,mt_logic(small.Loop(0,0,margin-1),small.Loop(margin+1,0,0),mode="or"),mode="or")
small=(mode>=4) ? small : small.mt_inpand

big=mt_lutxy(c1,c2,"x y - abs 1.5 ^",chroma="process")
big_u=mt_lutxy(c1.UToY,c2.UToY,"x y - abs 1.5 ^",chroma="process")
big_v=mt_lutxy(c1.VToY,c2.VToY,"x y - abs 1.5 ^",chroma="process")
big_uv=mt_logic(big_u,big_v,mode="or").PointResize(c1.width,c1.height)
big=(mode>3) ? mt_logic(big,big_uv,mode="or") : big
big=big.mt_binarize(lmask)

diff_mask=mt_hysteresis(small,big).mt_expand.mt_expand.mt_expand.mt_expand.mt_expand.mt_expand.mt_expand
masked_2=mt_merge(clip1,clip2,diff_mask,luma=true)
clip_2=ConditionalFilter(check_diff,clip1,masked_2,"averageluma","=","0",show=show)
clip_2_show=ConditionalFilter(check_diff,show_merge,show_merge,"averageluma","=","0",show=show)
clip_2=(show) ? StackVertical(merge(clip_2_show,diff_mask.Grayscale()),show_mask) : clip_2
return select(mode,clip_0,clip_1,clip_2,clip_2,clip_2)
}

clip1 : 元となるクリップ
clip2 : clip1に上書きする為のクリップ
mode : mode=0 無条件で上書きを行う。 / mode=1 clip1とclip2にある程度の差分が認められた場合に上書きを行う。 / mode=2 clip1とclip2の差分にマスクを作成し、その部分のみ上書きを行う。 / mode=3 mode=2に色差を追加する。 / mode=4 mode=2のマスクを拡大する。
top , bottom , left , right : 上下左右の差分を除外する。
smask : 基本となる差分マスク。smaskの範囲をlmaskで拡大し、最終的なマスクが作成される。
lmask : smaskを拡大する為のマスク。
c1 , c2 : clip1とclip2に差分があるかどうかを判定するための入力クリップ。OverlayやBlur等で加工したクリップを判定に使用できる。
margin : 前後フレームの差分マスクを重ねる。
show : 差分マスクの確認を行う。


使用例
#clip1とclip2の差分にclip2を上書きする
clip1=OverDiff5(clip1,clip2,2)

#ANIME+
checktelop=mt_lutxy(clip1,clip2,"x y - abs",chroma="process").crop(560,0,-600,-820).mt_binarize(20).mt_inpand(mode="horizontal")
clip1_ANIME=OverDiff5(clip1,clip2,1,0,820,100,1360)
clip1=ConditionalFilter(checktelop,clip1_ANIME,clip1,"averageluma","<","5")

#clip2の左右4pxをclip1に置き換える
clip2=OverDiff5(clip1,clip2,0,0,0,4,4)
※上記ではclip2の音声がclip1に入れ替わるので注意

#適用範囲を指定する
clip1=clip1.ApplyRange(0,1000,"OverDiff5",clip2,3,700,0,0,0)
※0-1000フレーム区間、上部700pxを除外
スポンサーサイト

コメント

コメントの投稿














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


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

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