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

2つのクリップの差分にマスクをかけて上書きする - OverDiff3 (その5)
1_2015050423291612f.png
OverDiff3(clip1,clip2,left=1380,top=300,bottom=100,uv=true,inpand=false,show=true)

function OverDiff3 (clip clip1,clip clip2,int "top",int "bottom",int "left",int "right",clip "c1",clip "c2",bool "uv",bool "inpand",int "mode",int "margin",bool "clamp",bool "show") {
show=default(show,false)
top=default(top,0)
bottom=default(bottom,0)
left=default(left,2)
right=default(right,6)
margin=default(margin,0)
clamp=default(clamp,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))
uv=default(uv,false)
inpand=default(inpand,true)
mode=default(mode,2)

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",show=show)
clip_1_show=ConditionalFilter(check_diff,show_merge,show_merge,"AverageLuma","<","1",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)
c1u=c1.UToY.PointResize(c1.width,c1.height)
c2u=c2.UToY.PointResize(c2.width,c2.height)
c1v=c1.VToY.PointResize(c1.width,c1.height)
c2v=c2.VToY.PointResize(c2.width,c2.height)
small_0=mt_lutxy(c1,c2,"x y - abs",chroma="process").mt_binarize(40)
small_u=mt_lutxy(c1u,c2u,"x y - abs",chroma="process").mt_binarize(40)
small_v=mt_lutxy(c1v,c2v,"x y - abs",chroma="process").mt_binarize(40)
small_0=(uv) ? mt_logic(small_0,mt_logic(small_u,small_v,mode="or"),mode="or") : small_0
small=(margin==0) ? small_0 : mt_logic(small_0.Loop(0,0,margin-1),small_0.Loop(margin+1,0,0),mode="or")
small=(clamp) ? mt_logic(small_0,small,mode="or") : small
small=(inpand) ? small.mt_inpand : small
big=mt_lutxy(c1,c2,"x y - abs 1.5 ^",chroma="process").mt_binarize(20)
big_u=mt_lutxy(c1u,c2u,"x y - abs 1.5 ^",chroma="process").mt_binarize(20)
big_v=mt_lutxy(c1v,c2v,"x y - abs 1.5 ^",chroma="process").mt_binarize(20)
big=(uv) ? mt_logic(big,mt_logic(big_u,big_v,mode="or"),mode="or") : big
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)
}


clip1 - 差分を上書きしたいクリップ
clip2 - 上書きに用いるクリップ
top,bottom,left,right - 指定した外周を除外し、部分的なマスクを作成する
c1,c2 - 比較に用いるクリップ。指定した場合、c1とc2の差分から判定を行う。クリップの一部分だけを比較する場合に使う。
mode - [default=2]
0:差分の有無に関わらず、指定した部分マスクで上書きをする。
1:差分が認められた場合のみ、指定した部分マスクで上書きをする。
2:差分が認められた箇所に自動的にマスクを作成し、上書きをする。
margin - [default=0] 入力数値の前後フレームを参照してマスクをかける (フェードイン・アウトに有効)
clamp - [default=false] margin利用時に前後フレームだけでなく現在のフレームを反映させる (流れるテロップ以外では不要)
show - [default=false] 適用するマスクを透過表示し、差分判定を合わせて表示する

inpand - [default=true] 通常動作で消える微細な差分をマスクに適用する
uv - [default=false] 差分マスクに色差を加える

※前回からの変更
inpandとuv。有効にしなければ前回と同じ動作。
スポンサーサイト

コメント

コメントの投稿














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


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

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