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

FlexibleMerge5
以前との変更点
・入力クリップの順番に関わらず最適な結果が得られるようにした。
・以前のweightに当たる変数を、2つのクリップのノイズ量の差に応じて変動するようにした。

・極力global変数を使わないよう修正

function FlexibleMerge5 (clip clip1,clip clip2,float "weight1",float "weight2",float "weight3",int "top",int "bottom",int "left",int "right",int "thr",float "nmax",int "mode",int "show") {

thr=default(thr,10)
weight1=default(weight1,0.5)
weight2=default(weight2,1.0)
weight3=default(weight3,0.0)
nmax=default(nmax,30.0)
mode=default(mode,2)
show=default(show,0)

top=default(top,0)
bottom=default(bottom,0)
left=default(left,0)
right=default(right,0)

blank1=BlankClip(clip1,color=$ffffff).Letterbox(top,bottom,left,right).mt_binarize()
mask1=CombMask(clip1, thY1 = thr, thY2 = thr)
mask2=CombMask(clip2, thY1 = thr, thY2 = thr)

nmask12=mt_logic(blank1,mt_logic(mask2,mask1,mode="andn"),mode="and")#clip1にノイズ、clip2はきれい
nmask21=mt_logic(blank1,mt_logic(mask1,mask2,mode="andn"),mode="and")#clip2にノイズ、clip1はきれい
nmaskA=mt_invert(mt_logic(mask1,mask2,mode="or"))#両方きれい
nmaskB=mt_logic(mask1,mask2,mode="and")#両方ノイズ
nmaskAB=mt_logic(blank1,mt_logic(nmaskA,nmaskB,mode="or"),mode="and")

clip1=(show==0) ? clip1 : clip1.subtitle("clip1",size=48)
clip2=(show==0) ? clip2 : clip2.subtitle("clip2",size=48,y=50)

global global_thr=thr
global global_nmax=nmax

clipA=Merge(clip1,clip2,weight1)
clipB=Merge(clip1,clip2,weight3)
clipAB=ScriptClip(Interleave(clip1,clip2),"Merge(SelectEven,SelectOdd,0.5/global_nmax*(averageluma(CombMask(SelectEven,thY1=global_thr,thY2=global_thr))-averageluma(CombMask(SelectOdd,thY1=global_thr,thY2=global_thr)))+0.5)")
clip12=Merge(clip1,clip2,weight2)
clip21=Merge(clip2,clip1,weight2)

clip_m0=mt_merge(clip1,clipA,nmaskA,luma=true)
clip_m0=mt_merge(clip_m0,clipB,nmaskB,luma=true)
clip_m1=mt_merge(clip1,clipAB,nmaskA,luma=true)
clip_m1=mt_merge(clip_m1,clipB,nmaskB,luma=true)
clip_m2=mt_merge(clip1,clipAB,nmaskAB,luma=true)

clip=select(mode,clip_m0,clip_m1,clip_m2)
clip=mt_merge(clip,clip12,nmask12,luma=true)
clip=mt_merge(clip,clip21,nmask21,luma=true)

show1=Combcheck(clip)
show2=StackHorizontal(Combcheck(clip1),Combcheck(clip2)).ReduceBy2.StackVertical(ReduceBy2(Combcheck(clip)).AddBorders(clip.width/4,0,clip.width/4,0))
show3=ConditionalFilter(Interleave(mask1,mask2),show2,show2,"averageluma(SelectEven)","<","averageluma(SelectOdd)",show=true)
clip=Select(show,clip,show1,show2,show3)
return clip
}


clip clip1 : ベースとなるクリップ

clip clip2 : ブレンドするクリップ

float "weight1" : clip1とclip2の両方にノイズがない部分をmergeする割合。mode=0のとき無効

float "weight2" : clip1とclip2の片方にノイズがない部分をmergeする割合。

float "weight3" : clip1とclip2の両方にノイズがある部分をmergeする割合。mode=0,1のとき無効

int "top" , "bottom" , "left" , "right" : 上下左右をマスキングする。マスキングした部分はclip1を保つ。

int "thr" : CombMaskの閾値

float "nmax" : weightを変動させるためのclip1とclip2のノイズ量の差の上限。clip1-clip2=-nmaxのときweight=0となりclip1は上書きされない。clip1-clip2=0のときweight=0.5。clip1-clip2=nmaxのときweight=1となりclip1はclip2に上書きされる。

int "mode" : weightの変動を適用するか否か。mode=0のとき変動しない。mode=1のときweight1のみ変動する。mode=2のときweight1とweight3が変動する。

int "show" : ノイズ量を視覚化する。show=0のとき無効。show=1のとき出力結果のノイズ量を視覚化する。show=2のときclip1,clip2,出力結果の3クリップを並べてノイズ量を視覚化する。show=3のときshow=2の出力と共にclip1,clip2のノイズ量を表示する。
スポンサーサイト


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