Log in

View Full Version : What denoiser is the worst ? Objective test attempt


Pages : 1 [2]

Backwoods
25th August 2006, 07:52
Do you have a download link for DCTFun7?

Fizick
25th August 2006, 20:17
http://forum.doom9.org/showthread.php?p=864535#post864535

Soulhunter
26th August 2006, 00:18
It's coming...
Same goes for DCTFun7! ^^


Bye

frednerk33
26th August 2006, 07:31
Is it wrong to post a link to http://forum.doom9.org/showthread.php?p=868048#post868048 which has visual results but not objective per above ? (I am not smart enough to do the above, but someone else here might be.)

DryFire
26th August 2006, 07:37
What if you all used the lossless version of elphant's dream as a starting source? I'd suggest the 640x360 one, unless you just feel like playing with 20gb's worth of hd png's (the is the same source from saggatire's hd comparison test):
http://orange.blender.org/blog/original-lossless-source-available/

Or some other, clean predefined clip.

Fizick
8th September 2006, 19:32
O.K., now I have secret weapon (bt=5) too ;)

interleave(\
mvcompensate(noisy,vf2,idx=1,thSCD1=600)\
, mvcompensate(noisy,vf,idx=1,thSCD1=600)\
, noisy\
, mvcompensate(noisy,vb,idx=1,thSCD1=600)\
, mvcompensate(noisy,vb2,idx=1,thSCD1=600))
FFT3Dfilter(sigma=3.6, bt=5, bw=8, bh=8, ow=4, oh=4)
denoised=selectevery(5,2)

Average SSIM= 91.75

But fft3d is still the worst of secret filters.

cwk
8th September 2006, 22:21
O.K., now I have secret weapon (bt=5) too

Should we be expecting FFT3dFilter v 1.8.6??????

Didée
8th September 2006, 23:16
O.K., now I have secret weapon (bt=5) too ;)
Pfffft.:) There was already bt=7 (http://forum.doom9.org/showthread.php?p=862342#post862342) in use.

Well okay, [(bt=4)+(bt=4)]*0.5 is not exactly bt=7 ... just what a poor scripter can do. ;)

frednerk
9th September 2006, 02:23
O.K., now I have secret weapon (bt=5) too ;)

Er, bt=5 gives me an error message saying values must be -1,0,1,2,3,4 ... am using FFT3Dfilter Version 1.8.5 - 4 December 2005.

Am using
ConvertToYV12(interlaced=FALSE)
#http://forum.doom9.org/showthread.php?p=873307#post873307
#O.K., now I have secret weapon (bt=5) too
noisy = LAST
vf1=noisy.mvanalyse(pel=2,blksize=8,isb=false,idx=1,overlap=4,sharp=2,truemotion=true)
vf2=noisy.mvanalyse(pel=2,blksize=8,isb=false,idx=1,delta=2,overlap=4,sharp=2,truemotion=true)
vb1=noisy.mvanalyse(pel=2,blksize=8,isb=true,idx=1,overlap=4,sharp=2,truemotion=true)
vb2=noisy.mvanalyse(pel=2,blksize=8,isb=true,idx=1,delta=2,overlap=4,sharp=2,truemotion=true)
interleave(\
mvcompensate(noisy,vf2,idx=1,thSCD1=600)\
, mvcompensate(noisy,vf1,idx=1,thSCD1=600)\
, noisy\
, mvcompensate(noisy,vb1,idx=1,thSCD1=600)\
, mvcompensate(noisy,vb2,idx=1,thSCD1=600))
FFT3Dfilter(sigma=3.6, plane=4, bt=5, bw=8, bh=8, ow=4, oh=4)
selectevery(5,2)

Can you share the secret here ? I won't pass it on. :)

Fizick
9th September 2006, 07:44
v.1.9.2 is coming somedays ...

EDIT:
Released for public.

CruNcher
31st August 2007, 10:29
almost 1 year has passed now (1 year in dev time is like a century) so don't you think it's time again to take out the newest denoisers and show some results again ;)
*bump*

Soulhunter
31st August 2007, 15:39
Wow, almost 1 year already? Unfortunately there are no new denoisers from pruned... Afaik he mainly worked on his own programming language [and floods us with code nobody except him understands, lol] and some GUI stuff... Well, actually I think he spend most of his free time for watching anime, playing games n being lazy! :D


Bye

Terka
28th November 2007, 13:53
is there a link to DCTFun7?

tritical
11th April 2009, 23:40
Gonna dig up this old thread :). I wanted to do some tests using dfttest v1.5 to see how it compares.

Script:

noisy = source.addgrain(25,0,0)

sclip = noisy.msuper()
vf1=manalyse(sclip,isb=false,delta=1,overlap=4)
vf2=manalyse(sclip,isb=false,delta=2,overlap=4)
vb1=manalyse(sclip,isb=true,delta=1,overlap=4)
vb2=manalyse(sclip,isb=true,delta=2,overlap=4)

mcomp5 = interleave(\
mcompensate(noisy,sclip,vf2,thSCD1=600)\
, mcompensate(noisy,sclip,vf1,thSCD1=600)\
, noisy\
, mcompensate(noisy,sclip,vb1,thSCD1=600)\
, mcompensate(noisy,sclip,vb2,thSCD1=600))

denoised = mcomp5.dfttest_dfttest(tbsize=5,ftype=1,sbsize=8,sosize=7,sigma=110).selectevery(5,2).mergechroma(source)

c1 = SSIM(source.trim(2,27),denoised.trim(2,27),"ssim_per_frame_results.txt","ssim_overall_result.txt",lumimask=0).crop(0,0,16,16)
c2 = compareYV12(denoised.trim(2,27),source.trim(2,27),"YUV","psnr_results.txt").crop(0,0,16,16)
c3 = SSIM(source,denoised,"ssim_per_frame_results_f.txt","ssim_overall_result_f.txt",lumimask=0).crop(0,0,16,16)
c4 = compareYV12(denoised,source,"YUV","psnr_results_f.txt").crop(0,0,16,16)
stackhorizontal(c1,c2,c3,c4)

Results on flower with noise variance of 25.

SSIM PSNR: Y-min,Y-avg,Y-max
Frames [2-27]: 92.68554702 (37.8624,38.3406,38.8413)
Frames [0-29]: 92.39688068 (37.4715,38.2938,38.8413)


Results with variance of 25 but sosize=6 instead of 7 in dfttest (3-4 times faster):

SSIM PSNR: Y-min,Y-avg,Y-max
Frames [2-27]: 92.53761670 (37.7406,38.2574,38.7435)
Frames [0-29]: 92.23917376 (37.3694,38.2109,38.7435)

Results on flower with noise variance of 100.

SSIM PSNR: Y-min,Y-avg,Y-max
Frames [2-27]: 82.54926547 (33.1546,33.9058,34.4971)
Frames [0-29]: 81.47632380 (32.4489,33.7999,34.4971)


Those results really need to be averaged over multiple trials, but I didn't take the time. The variance of the ssim/psnr numbers from trial to trial is definitely much higher for noise variance 100 than 25.

MadRat
15th April 2009, 02:41
Suburb post tritical, it brings up questions for me: If I were to use dfttest+emc and fft3dfilter+emc as actual denoisers what would the script code be? How does the above dfttest+emc with the latest version of dfttest and optimized settings compare to fft3dfilter+emc with the latest version of fft3dfilter and optimized settings? How do the results from artificial noise compare to real world noise say from broadcast video? Does dfttest+emc and fft3dfilter+emc work equally as well on live action as they do for animation?

tritical
15th April 2009, 04:37
1.) The code would be the same as that in my previous post. Just replace the 'noisy' clip with your source, and dfttest with fft3dfilter.

What that script is doing is using mvtools to move neighboring frames forward or backward in time so that they line up with the current frame. With tbsize=5 and tmode=0 in dfttest, or bt=5 in fft3dfilter, you are centering a temporal window of length 5 on each frame. Thus, the window includes the two previous frames and the two next frames. To get the best result you want the previous and next frames to be aligned in time with the center frame. To do that, the script spaces the original frames out: [0,1,2,...] -> [2,7,12,...] and then fills in the two frames to either side with the motion compensated versions of the previous and next frames. It then calls dfttest on this padded sequence, and then the selectevery(5,2) call at the end picks out the original frames.

2.) The main differences (those contributing most to the metric difference) are that dfttest is using hard thresholding while fft3dfilter uses wiener filter (with spectral subtraction as signal estimate), and that dfttest is using 75+% overlap while fft3dfilter is only using 50% (which is the max that it supports).

3.) It is hard to say since broadcast video has many possible types of noise. What I can say is dfttest operates based on four assumptions:

a.) The noise is zero mean.
b.) The noise is additive (y(n) = s(n) + d(n))... so in the frequency domain the power spectrum of the noisy signal y(n) is equal to the sum of the power spectrum of the signal s(n) and the power spectrum of the noise d(n).
c.) The signal and noise are uncorrelated.
d.) The noise is stationary (power spectrum doesn't change based on frame number or x/y position in a frame).

Additive zero mean gaussian white noise (as added by addgrain(x,0,0)) meets all of these assumptions. Also, when you specify a single sigma value to dfttest(), you are basically telling it that the noise power spectrum is flat and equal to sigma everywhere. A flat power spectrum equal to sigma is the power spectrum of white noise with power=sigma. So removing the noise added by addgrain(x,0,0) is the best case scenario for dfttest.

dfttest is able to remove noise that doesn't have a flat spectrum by either using the nfile parameter to have it estimate the noise spectrum or by using sfile to enter it yourself. How well removing the noise will work depends on how closely it meets the four assumptions above. Of those four assumptions, c and d are the ones that real world noise usually doesn't conform to. Most of the time, it is correlated with the signal at least a little, and it is not stationary.

4.) It is more a matter of the type of noise than the type of video. I guess you could ask on which type does the filtering look better when some of the assumptions about signal/noise are not met, but I really don't know as I haven't tested it much on non anime.

Varies
19th April 2009, 22:06
Hi!
Can i use this metod for anime ?
Script:

----------------------------------------------------------
mcomp5.dfttest_dfttest(tbsize=5,ftype=1,sbsize=8,sosize=7,sigma=4).selectevery(5,2)
-------------------------------------------
Additional filters, same as:
awarpsharp()
LimitedSharpenFaster()
etc.
or
----------------------------------------------------------
mcomp5.dfttest_dfttest(tbsize=5,ftype=1,sbsize=8,sosize=7,sigma=4)
awarpsharp()
LimitedSharpenFaster()
etc.
selectevery(5,2)
-------------------------------------------

Sagekilla
20th April 2009, 02:16
Yes, that's correct. I don't know how sigma works off hand with dfttest, but that sounds like you're going to kill off any semblance of detail.

Varies
20th April 2009, 03:47
I just copy it for example from tritical's post )))))

PS: point (add), 1st or 2nd part is correct? ^ ^'

Sagekilla
20th April 2009, 14:13
Yes, doing mcomp().denoise().selectevery().filtering() == mcomp().denoise().filtering().selectevery().

Generally speaking it's best to remove your mo'comped frames right after you're doing with all temporal processing (dfttest.selectevery(), in this case).

Varies
20th April 2009, 15:44
Thx! I'll try this in real battle ^ ^))