Log in

View Full Version : Dotcrawls and Rainbows Oh My! (Need help)


chiu
13th February 2010, 00:26
I've been trying to figure out how to get rid of dotcrawl and rainbows lately and I can't for the life of me get the hang of it.
I've tried using Tcomb on these 2 samples here and I either get temporal smearing (but I get rid of the dotcrawl) and the rainbows don't dissapear at all.
I also tried some other filters and they did the same thing (funky smears in high motion)
I followed the Tcomb guide and I don't know what I'm doing wrong.

Dotcrawl sample
http://www.mediafire.com/?ivey0zzjbmj

Rainbow Sample
http://rapidshare.com/files/349504780/rainbows.VOB.html

Nightshiver
13th February 2010, 05:01
Why didn't you upload the rainbow sample to mediafire as well? Would have been much faster for downloading. Anyway, on to your problem. For the rainbows, don't know what you're talking about. A simple DeRainbow() worked just fine for me. Make sure that when you do it, you do it before you deinterlace/IVTC. Your dotcrawl's are another matter, found them to be quite stubborn.

checkmate(10)
tcomb(mode=0,fthreshL=5,othreshL=6)

StainlessS
13th February 2010, 05:16
I just created a MediaFire account a little earlier , and on trying to upload I got a
"User configuration file not found" (or something similar) and on trying
to access any of the help related links, it just was not accessable,
maybe they are suffering from some kind of site problem, hence
the second upload to RapidShare.
Anyway, have not looked at samples, but I like CNR2 on VHS caps.

*.mp4 guy
25th February 2010, 04:48
Hows this (I know this is a late reply)

http://www.mediafire.com/file/wmizktoz2nh/no%20dotcrawl.avi

It uses a really slow custom dotcrawl function, mvtools denoising, and some really slow halo reduction/sharpening. Imo, its probably not worth it.

mastrboy
3rd March 2010, 23:01
Hows this (I know this is a late reply)

http://www.mediafire.com/file/wmizktoz2nh/no%20dotcrawl.avi

It uses a really slow custom dotcrawl function, mvtools denoising, and some really slow halo reduction/sharpening. Imo, its probably not worth it.

Care to post your "code", currently looking for a good dotcrawl function (checkmate is making artifacts)

*.mp4 guy
4th March 2010, 06:05
function unbt(clip c, int "taps", int "strong"){

c = c

strong = default(strong, 1)

t2 = c
t1 = c.Trim(0, -1)+c.Trim(0, c.framecount-1)
t3 = c.Trim(1, 0)+c.Trim(c.framecount, 0)



t1s0 = t1
t2s0 = t2
t3s0 = t3

smix1 = t2s0.Mt_convolution( Horizontal = " 0 -1 4 -6 10 -17 28 -39 58 -155 618 512 -128 48 -32 23 -14 8 -5 3 -1 ", vertical = " 1 ", u=2, v=2)
smix2 = t2s0.Mt_convolution( Horizontal = " -1 3 -5 8 -14 23 -32 48 -128 512 618 -155 58 -39 28 -17 10 -6 4 -1 ", vertical = " 1 ", u=2, v=2)
smix3 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)
smix4 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " 0 -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)

BasicSpatial = strong >= 1 ? C.unbs(strong=1) : t2s0
tmix1 = average(t2s0, 0.5, t1s0, 0.5)
tmix2 = average(t2s0, 0.5, t3s0, 0.5)


interleave(smix1, smix2, smix3, smix4, tmix1, tmix2, BasicSpatial).medianblurt(radiusy=0, radiusu=0, radiusv=0, temporalradius=3, mc=false, calcborder=false, markscenechange=false)
selectevery(7, 3)

return(last)}





function unbs(clip c, int "taps", int "strong"){

c = c

strong = default(strong, 0)

t2 = c
t1 = c.Trim(0, -1)+c.Trim(0, c.framecount-1)
t3 = c.Trim(1, 0)+c.Trim(c.framecount, 0)



t1s0 = t1
t2s0 = t2
t3s0 = t3

smix1 = t2s0.Mt_convolution( Horizontal = " 0 -1 4 -6 10 -17 28 -39 58 -155 618 512 -128 48 -32 23 -14 8 -5 3 -1 ", vertical = " 1 ", u=2, v=2)
smix2 = t2s0.Mt_convolution( Horizontal = " -1 3 -5 8 -14 23 -32 48 -128 512 618 -155 58 -39 28 -17 10 -6 4 -1 ", vertical = " 1 ", u=2, v=2)
smix3 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)
smix4 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " 0 -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)

BasicSpatial = strong >= 1 ? c.ldd.ldd : t2s0

#tmix1 = average(t2s0, 0.5, t1s0, 0.5)
#tmix2 = average(t2s0, 0.5, t3s0, 0.5)


interleave(smix1, smix2, smix3, smix4, BasicSpatial).medianblurt(radiusy=0, radiusu=0, radiusv=0, temporalradius=3, mc=false, calcborder=false, markscenechange=false)
selectevery(5, 2)

return(last)}




function unbs_internal(clip c, int "taps", int "strong"){

c = c

strong = default(strong, 0)

t2 = c
t1 = c.Trim(0, -1)+c.Trim(0, c.framecount-1)
t3 = c.Trim(1, 0)+c.Trim(c.framecount, 0)



t1s0 = t1
t2s0 = t2
t3s0 = t3

smix1 = t2s0.Mt_convolution( Horizontal = " 0 -1 4 -6 10 -17 28 -39 58 -155 618 512 -128 48 -32 23 -14 8 -5 3 -1 ", vertical = " 1 ", u=2, v=2)
smix2 = t2s0.Mt_convolution( Horizontal = " -1 3 -5 8 -14 23 -32 48 -128 512 618 -155 58 -39 28 -17 10 -6 4 -1 ", vertical = " 1 ", u=2, v=2)
smix3 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)
smix4 = t2s0.Mt_convolution( Horizontal = " 1 ", vertical = " 0 -1 3 -5 8 -14 23 -32 48 -128 512 512 -128 48 -32 23 -14 8 -5 3 -1 ", u=2, v=2)

BasicSpatial = strong >= 1 ? c.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2) : t2s0

#tmix1 = average(t2s0, 0.5, t1s0, 0.5)
#tmix2 = average(t2s0, 0.5, t3s0, 0.5)


interleave(smix1, smix2, smix3, smix4, BasicSpatial).medianblurt(radiusy=0, radiusu=0, radiusv=0, temporalradius=3, mc=false, calcborder=false, markscenechange=false)
selectevery(5, 2)

return(last)}





Function LDD(clip c)
{

Prefiltered = C.unbs_internal#.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Prefiltered_Spatial_Position0 = Prefiltered
Prefiltered_Spatial_Position1 = Prefiltered.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", Vertical = " 1 ", u=2, v=2)
Prefiltered_Spatial_Position2 = Prefiltered.Mt_convolution( Horizontal = " 1 ", Vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Prefiltered_Temporal_Position_Previous = Prefiltered.Trim(0, -1)+c.Trim(0, c.framecount-1)
Prefiltered_Temporal_Position1_Next = Prefiltered.Trim(1, 0)+c.Trim(c.framecount, 0)

Prefiltered_Temporal_Filter = Average(Prefiltered_Temporal_Position_Previous, 0.25, Prefiltered_Temporal_Position1_Next, 0.25, Prefiltered, 0.25, Prefiltered, 0.25)


Spatial_Position0 = C
Spatial_Position1 = C.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", Vertical = " 1 ", u=2, v=2)
Spatial_Position2 = C.Mt_convolution( Horizontal = " 1 ", Vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Temporal_Position_Previous = C.Trim(0, -1)+c.Trim(0, c.framecount-1)
Temporal_Position1_Next = C.Trim(1, 0)+c.Trim(c.framecount, 0)

Temporal_Filter = Average(Temporal_Position_Previous, 0.25, Temporal_Position1_Next, 0.25, C, 0.25, C, 0.25)


Difference1 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position1, u=1, v=1)
Difference2 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position2, u=1, v=1)
Difference3 = mt_makediff(Prefiltered, Prefiltered_Temporal_Filter, u=1, v=1)
#Difference4 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position4, u=1, v=1)
#Difference5 = mt_makediff(Prefiltered, Prefiltered_Temporal_Position_Previous, u=1, v=1)
#Difference6 = mt_makediff(Prefiltered, Prefiltered_Temporal_Position1_Next, u=1, v=1)

Thresh=256

Compare1 = mt_merge(Spatial_Position1, Spatial_Position2, mt_lutxy(Difference1, Difference2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Compare1_Prefiltered = mt_merge(Prefiltered_Spatial_Position1, Prefiltered_Spatial_Position2, mt_lutxy(Difference1, Difference2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Difference_Step2_1 = mt_makediff(C, Compare1_Prefiltered, u=1, v=1)

Compare2 = mt_merge(Compare1, Temporal_Filter, mt_lutxy(Difference_Step2_1, Difference3, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Compare2_Prefiltered = mt_merge(Compare1_Prefiltered, Prefiltered_Temporal_Filter, mt_lutxy(Difference_Step2_1, Difference3, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Difference_Step2_2 = mt_makediff(C, Compare2_Prefiltered, u=1, v=1)

#Compare3 = mt_merge(Compare2, Spatial_Position4, mt_lutxy(Difference_Step2_2, Difference4, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare3_Prefiltered = mt_merge(Compare2_Prefiltered, Prefiltered_Spatial_Position4, mt_lutxy(Difference_Step2_2, Difference4, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_3 = mt_makediff(C, Compare3_Prefiltered, u=1, v=1)

#Compare4 = mt_merge(Compare3, Temporal_Position_Previous, mt_lutxy(Difference_Step2_3, Difference5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare4_Prefiltered = mt_merge(Compare3_Prefiltered, Prefiltered_Temporal_Position_Previous, mt_lutxy(Difference_Step2_3, Difference5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_4 = mt_makediff(C, Compare4_Prefiltered, u=1, v=1)

#Compare5 = mt_merge(Compare4, Temporal_Position1_Next, mt_lutxy(Difference_Step2_4, Difference6, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare5_Prefiltered = mt_merge(Compare4_Prefiltered, Prefiltered_Temporal_Position1_Next, mt_lutxy(Difference_Step2_4, Difference6, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_5 = mt_makediff(C, Compare5_Prefiltered, u=1, v=1)

return(mergechroma(Compare1, C, 1))}



Function LDD2(clip c)
{

Prefiltered = C.Unbt#.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Prefiltered_Spatial_Position0 = Prefiltered
Prefiltered_Spatial_Position1 = Prefiltered.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", Vertical = " 1 ", u=2, v=2)
Prefiltered_Spatial_Position2 = Prefiltered.Mt_convolution( Horizontal = " 1 ", Vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Prefiltered_Temporal_Position_Previous = Prefiltered.Trim(0, -1)+c.Trim(0, c.framecount-1)
Prefiltered_Temporal_Position1_Next = Prefiltered.Trim(1, 0)+c.Trim(c.framecount, 0)

Prefiltered_Temporal_Filter = Average(Prefiltered_Temporal_Position_Previous, 0.25, Prefiltered_Temporal_Position1_Next, 0.25, Prefiltered, 0.25, Prefiltered, 0.25)


Spatial_Position0 = C
Spatial_Position1 = C.Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 0 490 -107 26 -16 14 -9 5 -3 3 -1 ", Vertical = " 1 ", u=2, v=2)
Spatial_Position2 = C.Mt_convolution( Horizontal = " 1 ", Vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 0 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2)

Temporal_Position_Previous = C.Trim(0, -1)+c.Trim(0, c.framecount-1)
Temporal_Position1_Next = C.Trim(1, 0)+c.Trim(c.framecount, 0)

Temporal_Filter = Average(Temporal_Position_Previous, 0.25, Temporal_Position1_Next, 0.25, C, 0.25, C, 0.25)


Difference1 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position1, u=1, v=1)
Difference2 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position2, u=1, v=1)
Difference3 = mt_makediff(Prefiltered, Prefiltered_Temporal_Filter, u=1, v=1)
#Difference4 = mt_makediff(Prefiltered, Prefiltered_Spatial_Position4, u=1, v=1)
#Difference5 = mt_makediff(Prefiltered, Prefiltered_Temporal_Position_Previous, u=1, v=1)
#Difference6 = mt_makediff(Prefiltered, Prefiltered_Temporal_Position1_Next, u=1, v=1)

Thresh=256

Compare1 = mt_merge(Spatial_Position1, Spatial_Position2, mt_lutxy(Difference1, Difference2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Compare1_Prefiltered = mt_merge(Prefiltered_Spatial_Position1, Prefiltered_Spatial_Position2, mt_lutxy(Difference1, Difference2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Difference_Step2_1 = mt_makediff(C, Compare1_Prefiltered, u=1, v=1)

Compare2 = mt_merge(Compare1, Temporal_Filter, mt_lutxy(Difference_Step2_1, Difference3, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Compare2_Prefiltered = mt_merge(Compare1_Prefiltered, Prefiltered_Temporal_Filter, mt_lutxy(Difference_Step2_1, Difference3, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
Difference_Step2_2 = mt_makediff(C, Compare2_Prefiltered, u=1, v=1)

#Compare3 = mt_merge(Compare2, Spatial_Position4, mt_lutxy(Difference_Step2_2, Difference4, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare3_Prefiltered = mt_merge(Compare2_Prefiltered, Prefiltered_Spatial_Position4, mt_lutxy(Difference_Step2_2, Difference4, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_3 = mt_makediff(C, Compare3_Prefiltered, u=1, v=1)

#Compare4 = mt_merge(Compare3, Temporal_Position_Previous, mt_lutxy(Difference_Step2_3, Difference5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare4_Prefiltered = mt_merge(Compare3_Prefiltered, Prefiltered_Temporal_Position_Previous, mt_lutxy(Difference_Step2_3, Difference5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_4 = mt_makediff(C, Compare4_Prefiltered, u=1, v=1)

#Compare5 = mt_merge(Compare4, Temporal_Position1_Next, mt_lutxy(Difference_Step2_4, Difference6, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Compare5_Prefiltered = mt_merge(Compare4_Prefiltered, Prefiltered_Temporal_Position1_Next, mt_lutxy(Difference_Step2_4, Difference6, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1), u=3, v=3)
#Difference_Step2_5 = mt_makediff(C, Compare5_Prefiltered, u=1, v=1)

return(mergechroma(Compare2, C, 1))}

The one you want to call is unbt(). Also, I haven't made it work on interlaced stuff yet, but unlike other dot crawl removers, it works fine on stuff that has been through deinterlacing/IVTC. Just don't resize before you use it.


Here is the dotcrawl portion of the script I actually used, but I'm not sure if all the other stuff is doing much, its left over from a while ago, and I used it just to be sure I was using the most thorough script I had lying around.

MPEG2Source("E:\VTS_01_1.d2v", cpu=0, info=3).colormatrix(hints=true).crop(16, 72, -16, -56)

clip2=Yadif()
TFM(slow=2, clip2=clip2, d2v="E:\VTS_01_1.d2v", pp=7)
tdecimate()

s = last

t2s = last
t1s = last.Trim(0, -1)+last.Trim(0, last.framecount-1)
t3s = last.Trim(1, 0)+last.Trim(last.framecount, 0)
TAverages = Average(t2s, 0.5, t1s, 0.25, t3s, 0.25)



Mt_LutXY(unbs(strong=0), Mt_convolution( Horizontal = " -1 3 -3 5 -9 14 -16 26 -107 490 512 490 -107 26 -16 14 -9 5 -3 3 -1 ", vertical = " -1 2 -2 3 -6 9 -9 16 -80 384 512 384 -80 16 -9 9 -6 3 -2 2 -1 ", u=2, v=2), " X Y - Abs 1 * ", u=1, v=1)

t2 = last
t1 = last.Trim(0, -1)+last.Trim(0, last.framecount-1)
t3 = last.Trim(1, 0)+last.Trim(last.framecount, 0)
TAverage = Average(t2, 0.5, t1, 0.25, t3, 0.25)
TMedian = interleave(t1, t2, t3).medianblurt(radiusy=0, radiusu=0, radiusv=0, temporalradius=1, mc=false, calcborder=false, markscenechange=false).selectevery(3, 1)



mask1 = Mt_LutXY(TAverage, TMedian, " X Y - Abs 1 - 255 * ", u=1, v=1).mt_expand
mask2 = Mt_LutXY(mask1.expand(), mask1, " X Y -", u=1, v=1).tweak(sat=0)

proc = s.unbt(strong=1)

mt_merge(proc, proc.ldd2, mask1)