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

2つのソースからノイズの無い部分を選んでブレンドする (FlexibleMerge) その2
※Combcheckの記述ミスってたので訂正。入力クリップそのまま返してました。影響があるのはshow=1,2でノイズ量を目視確認するときだけなので、必要なければスルーでいいです。使うときは↓赤字で書いたclip=を書き足してやってください。

FlexibleMergeに機能を追加
exc - [default=0] 0 無効。以前と同じ。/1 NoiseExcludeを使う。ノイズの差がnmax以上の場合はclip1を返す。/2 NoiseExcludeを使う。ノイズの差がnma以上の場合、clip1とclip2のうちノイズ量が少ないクリップを返す。
nmax - [default=30] excが1,2で有効。2つのクリップのノイズ量の差がこの値以上ならMergeしない。
show - [default=0] 0 通常の出力。/1 出力クリップのノイズを強調。/2 入出力クリップを3つ並べてノイズを強調。/3 excが有効の場合、2つのクリップのノイズ差と出力結果を表示する。

function NoiseExclude
2つのクリップのノイズ量を比較して、差が設定(nmax)より大きい場合は片方のクリップのみを返す関数。
FlexibleMerge内部で使用。


function FlexibleMerge (clip clip1,clip clip2,float "weight",float "weight2",int "mode",int "x",int "y",int "thr",int "show",int "exc",int "nmax") {
thr=default(thr,10)
weight=default(weight,0.5)
weight2=default(weight2,0.9)
mode=default(mode,0)
cx=default(x,0)
cy=default(y,0)
show=default(show,0)
exc=default(exc,0)
clip2=(mode==0) ? clip2 : Overlay(clip1,clip2,x=cx,y=cy)

Mask1=CombMask(clip1, thY1 = thr, thY2 = thr)
Mask2=CombMask(clip2, thY1 = thr, thY2 = thr)
mask3=mt_invert(mask2)#2がきれい
mask4=mt_logic(mask2,mask1,mode="andn")#1にノイズ、2はきれい

clip3=Merge(clip1,clip2,weight)
clip4=Merge(clip1,clip2,weight2)
clip=mt_merge(clip1,clip3,mask3,luma=true)
clip=mt_merge(clip,clip4,mask4,luma=true)

clip=(exc>0) ? NoiseExclude(clip,clip1,clip2,mode=exc,thr=nmax,showi=show) : clip

clip=(show==1) ? Combcheck(clip) :
\(show==2) ? StackHorizontal(Combcheck(clip1),Combcheck(clip2)).ReduceBy2.StackVertical(ReduceBy2(Combcheck(clip)).AddBorders(clip.width/4,0,clip.width/4,0)) : clip
return clip
}

function NoiseExclude (clip clip,clip clip1,clip clip2,int "mode",int "thr",int "showi") {
mode=default(mode,1)
thr=default(thr,30)
showi=default(showi,0)
global thr=thr
show=(showi==3) ? true : false
c1=CombMask(clip1, thY1 = 10, thY2 = 10)
c2=CombMask(clip2, thY1 = 10, thY2 = 10)
clip1=(show) ? clip1.Subtitle("1") : clip1
clip2=(show) ? clip2.Subtitle("2") : clip2
clipSelect=conditionalfilter(interleave(c1,c2),clip1,clip2,"AverageLuma(SelectEven)","<","AverageLuma(SelectOdd)")
clip=(mode==1) ? ConditionalFilter(interleave(c1,c2),clip,clip1,"abs(AverageLuma(SelectEven)-AverageLuma(SelectOdd))","<","thr",show)
\ : ConditionalFilter(interleave(c1,c2),clip,clipSelect,"abs(AverageLuma(SelectEven)-AverageLuma(SelectOdd))","<","thr",show)
return clip
}

function Combcheck (clip clip) {
clip=mt_merge(Grayscale(clip),ColorYUV(Grayscale(clip),gain_u=100,gain_v=100),CombMask(clip,thY1=16,thY2=16),luma=true)
return clip
}
スポンサーサイト

コメント

コメントの投稿














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


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

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