DGDenoise

These CUDA filters are packaged into DGDecodeNV, which is part of DGDecNV.
Post Reply
Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

DGDenoise

Post by Selur » Sat Aug 20, 2016 7:53 am

using:

Code: Select all

SetMemoryMax(768)
SetMTMode(5,8) # change MT mode
LoadCPlugin("G:\Hybrid\AVISYN~1\ffms2.dll")
LoadPlugin("G:\Hybrid\AVISYN~1\DGDENO~1.DLL")
# loading source: F:\TestClips&Co\Test-AC3-5.1.avi
FFVideoSource("F:\TESTCL~1\TEST-A~1.AVI",cachefile="H:\Temp\avi_54a4199c1a3d3b1476ea1d15dc267332_4827_1_0.ffindex",fpsnum=25)
# denoising using DGDenoise
SetMTMode(2) # change MT mode
ConvertToRGB32(interlaced=false)
DGDenoise()
return last
I get:

Code: Select all

DGDenoise: could not start the denoise server!
Any idea what I could look into? Or what info I should/could provide to help to find the problem,..

Cu Selur

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 10:39 am

Hi Selur,

Of course I'd love to help my good buddy Selur to get this working. First please redownload DGDenoise.rar and update all the files. Be sure to use the proper 32 or 64 bit files. Suppose you have 32-bit, then put all the 32-bit files into a directory.

Now make sure that there is no stuck DenoiseServer.exe running in the Task Manager.

Then for the first test, move to that directory, open a CMD window, and type 'DenoiseServer'. It should start without error. If it doesn't please tell me what is printed. If it does start OK, then kill it in the Task Manager and try this simple script:

loadplugin("DGDenoise.dll") # all the files must be here with this DLL
BlankClip().ConverttoRGB32
DGDenoise()

Then report.

We'll continue based on your results. Thank you for helping me. For me, it is working as good as KNLMeansCL but much faster.

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 10:44 am

A few more things... Please search your system and see if you have an opencl.dll anywhere. Finally, what OS, avisynth version, nVidia card, and nVidia driver?

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 11:11 am

Downloaded and extracted the content of the new DGDenoise.rar, overwriting the old files.
Double clicking or alternatively starting DenoiseServer.exe works without a problem. No error messages or similar and the running program is show inside the task manager.

Still opening the script produces the error,no matter whether DenoiseServer was already running or not.

regarding the opencl.dll:
got one in the same folder as DGDecode (came with KNLMeansCL; removing it from the folder didn't change a thing
got one inside the Windows/System32 folder; removing it from the folder didn't change a thing
got one inside the Windows/_SysWOW64 folder; removing it from the folder didn't change a thing
(tried all combinations)

also got opencl.dll inside:

Code: Select all

C:\Windows\WinSxS\wow64_microsoft-windows-r..xwddmdriver-wow64-c_31bf3856ad364e35_10.0.14393.0_none_de9cd86dc2ec8d588
(didn't touch that one)

btw. I'm using the 32bit version of the files together with Avisynth MT on a 64bit Windows 10 pro system.

Cu Selur

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 11:19 am

OK, you have everything you need to start the server and run the CUDA code. Never try to start a script with the DenoiseServer already running. I know you tried both ways but just warning you.

So we must have an issue in the Avisynth filter itself. Strange, because all it does is query the path for DGDenoiseServer.exe and then start it with ShellExecute().

Maybe the MT stuff and 32-bit stuff on 64 is a problem. Would it be too hard to run Avs+ 64 2085 (with no MT enabled) and the 64-bit filter just to test? If so, please try it. Meanwhile I will make a version of the filter that pops up the ShellExecute() error that is encountered. Stand by for that.

Thanks for your testing.

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 11:23 am

Will look into Avisynth+ and the 64bit version (will take some time).

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 11:27 am

OK, I uploaded the modified filters. Maybe try that first to get the error data.

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 12:09 pm

Updated the files, now I get the message:

Code: Select all

DGDenoise: could not start the denoise server G:\Hybrid\dynamic\DenoiseServer.exe, error 2!
Also as a side note:
I did a quick test with the 64bit version and Vapoursynth R33 RC1 using:

Code: Select all

# Imports
import vapoursynth as vs
core = vs.get_core()
# Loading Plugins
core.avs.LoadPlugin(path="G:/Hybrid/Vapoursynth/vapoursynth64/plugins/DenoiseFilter/DGDenoise/DGDenoise.dll")
core.std.LoadPlugin(path="G:/Hybrid/Vapoursynth/vapoursynth64/plugins/SourceFilter/LSmashSource/vslsmashsource.dll")
# Loading F:\TestClips&Co\test.avi using LWLibavSource
clip = core.lsmas.LWLibavSource(source="F:/TestClips&Co/test.avi", cache=0)
# adjusting color space from YUV420P8 to RGB32
clip = core.resize.Bicubic(clip=clip, format=vs.RGB, matrix_in_s="470bg")
# denoising using DGDenoise
clip = core.avs.DGDenoise(clip=clip)
# convert to YUV color space for preview
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16)
# Output
clip.set_output()
Gave me:

Code: Select all

Python exception: Avisynth Loader: failed to load module
Traceback (most recent call last):
  File "src\cython\vapoursynth.pyx", line 1491, in vapoursynth.vpy_evaluateScript (src\cython\vapoursynth.c:26905)
  File "h:\Temp\tempPreviewVapoursynthFile19_05_15_064.vpy", line 5, in <module>
    core.avs.LoadPlugin(path="G:/Hybrid/Vapoursynth/vapoursynth64/plugins/DenoiseFilter/DGDenoise/DGDenoise.dll")
  File "src\cython\vapoursynth.pyx", line 1383, in vapoursynth.Function.__call__ (src\cython\vapoursynth.c:25212)
vapoursynth.Error: Avisynth Loader: failed to load module
thought that it should be possible to use the filter in Vapoursynth due to 'Avisynth interface version 5'.

Cu Selur

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 12:21 pm

Let's worry about Vapoursynth later.

Well, the error says that it can't find the file DenoiseServer.exe at this place:

G:\Hybrid\dynamic\DenoiseServer.exe

Does it live there? All the following files must be there:

DGDenoise.dll
DenoiseServer.exe
freeglut.dll
glew32.dll
cuda32_60.dll

And your script must load DGDenoise.dll from that directory. Is this all true?

I see your first script did not specify this directory so something is fishy. Is hybrid moving stuff around or some other nonsense? Also, what's up with the short filenames in your script? I can't tell if you are trying to use the plugins dir, etc. Get all the files out of the plugins dir and load DGDenoise.dll manually with all the other files in the same location. I don't know why hybrid is even involved at this point. We can try to get it working later.

Everything should work fine if you get things installed correctly.

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 12:32 pm

Does it live there?
No!

"G:\Hybrid\dynamic\avsViewer.exe" is the Viewer I use to open the Avisynth script with.
DGDenoise.dll
DenoiseServer.exe
freeglut.dll
glew32.dll
cuda32_60.dll
are all located inside the "G:\Hybrid\avisynthPlugins"-folder
(what I simply did is extract the content of the x64 folder inside the avisynthPlugins folder, which seemed like the proper way to 'install' the filter,..)

-> Seems like the filter isn't looking relative to DGDenoise.dll but relative to the viewer (or the avisynth.dll used by the viewer) for the DenoiseServer.exe.

---
the 8.3 file names are used since Avisynth can't handle unicode properly. (a lot of plugins and programs have problems if for example Chinese characters are used inside file or folder names, which why I normally stick to 8.3 filenames on Windows systems)

Cu Selur
Last edited by Selur on Sat Aug 20, 2016 1:40 pm, edited 1 time in total.

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 12:38 pm

Hybrid must be moving things to dynamic on the fly. Can we get it working without hybrid first? The DGDenoise DLL is definitely being executed from dynamic and I query that, not the location of the viewer. I don't know how hybrid works to tell you what it is doing. It sounds like it copies the DLL to dynamic and runs it from there (makes sense given the name 'dynamic'). If so, it would also have to copy the other files. Maybe you can put all the files there yourself.

For example, I run my scripts in VirtualDub and its executable location is irrelevant, the location of the executed DGDenoise.dll is used. Maybe you can try with VirtualDub and after that we try to figure out hybrid and Vapoursynth.

Thank you for your debugging assistance, Selur! :bravo:

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 12:57 pm

*gig* got it :D normally Hybrid changes the working directory of the environment to restrict malicious programs. :)
Running the script inside a normal command prompt works.
-> seems like a problem with Hybrid calling the tools (just removing the work directory adjustments I normally to, doesn't help, but I'll figure out a workaround)

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 1:07 pm

Sweet! Che figata.

You should be able to get hybrid and Vapoursynth working with appropriate engineering. Please advise what you find necessary so I can advise other users. Also, feedback on the actual filtering would be helpful (e.g., versus KNLMeansCL). There are a lot of cool things I can do with this framework, not just denoising. So I'm really grateful for you taking the time to make sure I am shipping what is needed to allow things to work on users' systems. This is my first foray into OpenGL/CUDA runtime stuff (DGIndexNV uses very basic CUDA driver API calls without textures or picture buffer objects). The server framework can allow other filters/applications to invoke the functionality as well. I would have to publish the interface of course. It's pretty simple: start the server, open some shared memory and events, and away you go! I'll release source code at some point. Right now I am focused on surpassing KNLMeansCL for denoising. If that is not possible, why bother? ;)

Technically, I implemented the nVidia imageDenoising sample code (with my tweaks) and enhanced it with Sobel edge protection. It appears to be qualitatively similar to KNLMeansCL (with appropriate parameter settings), but it runs much faster. If I can fully eliminate branching in my kernel, I may be able to squeeze out another 10% in performance, but it's already very fast. To be honest, KNLMeansCL source code is opaque to me. Some better commenting in the code might be helpful.

No need to add, my executables are never malicious. I have ony the users' best interests at heart. You know it. :wow:

Thank you again for your testing and may your projects achieve brilliant success!

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 1:37 pm

btw. there is still something 'fishy' with your code.

using:

Code: Select all

LoadCPlugin("G:\Hybrid\AVISYN~1\ffms2.dll")
LoadPlugin("G:\Hybrid\AVISYN~1\DGDENO~1.DLL")
# loading source: F:\TestClips&Co\test.avi
FFVideoSource("F:\TESTCL~1\test.avi",cachefile="H:\Temp\avi_0197468a3716844ade54f3f30f60eeda_4827_1_0.ffindex",fpsnum=25)
# denoising using DGDenoise
ConvertToRGB32(interlaced=false)
DGDenoise()
gives me

Code: Select all

Avisynth open failure:
DGDenoise: could not start the denoise server C:\Program Files (x86)\VirtualDub\DenoiseServer.exe, error 2!
(H:\Temp\test.avs, line 7)
not using 8.3 filenames:

Code: Select all

LoadCPlugin("G:\Hybrid\avisynthPlugins\ffms2.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
# loading source: F:\TestClips&Co\test.avi
FFVideoSource("F:\TestClips&Co\test.avi",cachefile="H:\Temp\avi_0197468a3716844ade54f3f30f60eeda_4827_1_0.ffindex",fpsnum=25)
# denoising using DGDenoise
ConvertToRGB32(interlaced=false)
DGDenoise()
the preview works,...
-> seems like your filter can't handle 8.3 file names :)

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 1:43 pm

Oh, I hate making fishy stuff. :roll:

I've been drinking too much Scotch to look into that right now (hey, it's Saturday, give me a break), but I will. Enlighten me, why do you need 8.3 file names?

Any feedback on results versus KNLMeansCL? That's what I'm really interested in.

Ciao, my good friend Selur.

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 1:57 pm

I need 8.3 file names because a bunch of Avisynth filters (especially source and subtitle filters) have problems handling for example Chinese, Russian, Korean, Greek,.. characters inside file or folder names.
(btw. DGDecNV and DGindex both can't handle such files, but have no problem with 8.3 file names; mplayer, mencoder and a lot of other older tools have that problem too ;))

-> no hurry, for you to look into it, just wanted to note that there is something not quite right

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 2:02 pm

No problem, Selur, I'll take care of it for you [it's probably a wart on ShellExecute()]. Rock on and thanks for the great thread!

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sat Aug 20, 2016 2:09 pm

Thanks! Will do some testing with the filter in comparison to KNLMeansCL tomorrow. :) (9pm here on Saturday -> family&friends time ;))

Cu Selur

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sat Aug 20, 2016 2:50 pm

Family and friends time, what a blessing.

Don't ignore kernel=1 if you like things to be as fast as possible. I don't see big image quality gains with NLM over KNN. Most video is well-localized. Prove me wrong. :twisted:

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sun Aug 21, 2016 4:43 am

Playing around with the filter atm. and the first real downer is that it requires to turn off the MT support.

Code: Select all

SetMemoryMax(768)
SetMTMode(5,8) # change MT mode
LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
SetMTMode(6) # change MT mode
ConvertToRGB32(interlaced=false)
DGDenoise()
return last
simply is stuck and

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
ConvertToRGB32(interlaced=false)
DGDenoise()
return last
works fine.
On the other hand:

Code: Select all

SetMTMode(5,8) # change MT mode
LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\KNLMeansCL.dll")
LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
SetMTMode(5) # change MT mode
KNLMeansCL(device_type = "GPU", device_id = 1)
return last
works fine, sure as long as one only uses DGDenoise or KNLMeansCL it doesn't really matter since instead of using MT with mode 5 it's faster to disable MT, but when using a script with multiple filters, MT compatibility would be nice.

----
using:

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\KNLMeansCL.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
src = LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
src = src.Crop(0,140,0,-140)
knl = src.KNLMeansCL(device_type="GPU")
knl = knl.ConvertToRGB32(interlaced=false)
src = src.ConvertToRGB32(interlaced=false)
dg = src.DGDenoise()
StackVertical(StackHorizontal(knl, dg), StackHorizontal(src, src))
return last
to compare the effect at the default values of DGDenoise and KNLMeansCL one clearly sees that using the default values DGDenoise is WAY more aggressive.
Settings strength=0.2 seems to produce more similar effects.

Running a small benchmark using AVSMeter:

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
ConvertToRGB32(interlaced=true)
DGDenoise(strength=0.2)
return last
gives:

Code: Select all

AviSynth 2.60, build:Feb 20 2015 [03:16:45] (2.6.0.5)

Number of frames:                 1081
Length (hh:mm:ss.ms):     00:00:45.087
Frame width:                      1920
Frame height:                     1080
Framerate:                      23.976 (24000/1001)
Colorspace:                      RGB32
Active MT Mode:                      0

Frames processed:               1081 (0 - 1080)
FPS (min | max | average):      46.97 | 66.71 | 65.38
Memory usage (phys | virt):     333 | 327 MiB
Thread count:                   18
CPU usage (average):            22%

GPU core clock / memory clock:  1025 / 1652
GPU usage (average):            24%
VPU usage (average):            0%
GPU memory usage:               1536 MiB

Time (elapsed):                 00:00:16.535
with kernel=2 (same strength) I get:

Code: Select all

AviSynth 2.60, build:Feb 20 2015 [03:16:45] (2.6.0.5)

Number of frames:                 1081
Length (hh:mm:ss.ms):     00:00:45.087
Frame width:                      1920
Frame height:                     1080
Framerate:                      23.976 (24000/1001)
Colorspace:                      RGB32
Active MT Mode:                      0

Frames processed:               1081 (0 - 1080)
FPS (min | max | average):      8.363 | 16.19 | 15.87
Memory usage (phys | virt):     333 | 328 MiB
Thread count:                   15
CPU usage (average):            5%

GPU core clock / memory clock:  1215 / 1753
GPU usage (average):            82%
VPU usage (average):            0%
GPU memory usage:               1536 MiB

Time (elapsed):                 00:01:08.105
and with kernel = 1 (same strength) I get:

Code: Select all

AviSynth 2.60, build:Feb 20 2015 [03:16:45] (2.6.0.5)

Number of frames:                 1081
Length (hh:mm:ss.ms):     00:00:45.087
Frame width:                      1920
Frame height:                     1080
Framerate:                      23.976 (24000/1001)
Colorspace:                      RGB32
Active MT Mode:                      0

Frames processed:               1081 (0 - 1080)
FPS (min | max | average):      49.52 | 73.35 | 70.73
Memory usage (phys | virt):     333 | 327 MiB
Thread count:                   18
CPU usage (average):            23%

GPU core clock / memory clock:  1025 / 1652
GPU usage (average):            19%
VPU usage (average):            0%
GPU memory usage:               1536 MiB

Time (elapsed):                 00:00:15.284
For KNLMeansCL on the other hand:

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\LSMASHSource.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\KNLMeansCL.dll")
LWLibavVideoSource("F:\TestClips&Co\Transformers - 1080p Sample.mkv",cache=false)
KNLMeansCL(device_type = "GPU", device_id = 1)
return last
produces:

Code: Select all

AviSynth 2.60, build:Feb 20 2015 [03:16:45] (2.6.0.5)

Number of frames:                 1081
Length (hh:mm:ss.ms):     00:00:45.087
Frame width:                      1920
Frame height:                     1080
Framerate:                      23.976 (24000/1001)
Colorspace:                       i420
Active MT Mode:                      0

Frames processed:               1081 (0 - 1080)
FPS (min | max | average):      13.57 | 38.80 | 37.10
Memory usage (phys | virt):     366 | 392 MiB
Thread count:                   25
CPU usage (average):            19%

GPU core clock / memory clock:  1215 / 1652
GPU usage (average):            88%
VPU usage (average):            0%
GPU memory usage:               1558 MiB

Time (elapsed):                 00:00:29.135
so unless kernel=2 is used DGDenoise seems to be faster. From a few samples I looked at so far there wasn't much of a difference between kernel=3 and kernel=1.
(btw. using an i7-4770k with an Intel® HD Graphics 4600 and a GeForce GTX 980 Ti on a HP Z27q 5k display under Windows 10 64bit)

Looking for some nice noisy source to do some more testing.

Cu Selur

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sun Aug 21, 2016 6:17 am

Some annoying things:
a. When opening a script with DGDenoise in it in Virtual Dub, then changeing the script and reopeing it with File->Reopen video file.
Virtual Dub crashes. Closing the video and reopening it works.
b. On can't use multiple instances of DGDenoise inside a script:

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\DGDecodeNV.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
# loading&deinterlace h:\Output\denoise test source 1.mkv  using DGDECNV
source = DGSource(dgi="H:\Temp\mkv_85a16ff1ce25028b388bb8c47890a490_11840.dgi",deinterlace=1)
# cropping the source
source = source.Crop(0,80,-2,-80)
# denoising using DGDenoise
dg = source.ConvertToRGB32(interlaced=false)
dg04 = dg.DGDenoise(strength=0.4).Subtitle("DGDenoise(strength=0.4)", align=9)
dg08 = dg.DGDenoise(strength=0.8).Subtitle("DGDenoise(strength=0.8)", align=9)
StackHorizontal(dg04,dg08)
return last
causes Virtual Dub to simply freeze :/

using:

Code: Select all

LoadPlugin("G:\Hybrid\avisynthPlugins\DGDecodeNV.dll")
LoadPlugin("G:\Hybrid\avisynthPlugins\DGDenoise.dll")
# loading&deinterlace h:\Output\denoise test source 1.mkv  using DGDECNV
source = DGSource(dgi="H:\Temp\mkv_85a16ff1ce25028b388bb8c47890a490_11840.dgi",deinterlace=1)
# cropping the source
source = source.Crop(0,80,-2,-80)
# denoising using DGDenoise
dg = source.ConvertToRGB32(interlaced=false)
dg04 = dg.DGDenoise(strength=0.4).Subtitle("DGDenoise(strength=0.4)", align=9)
#dg08 = dg.DGDenoise(strength=0.8).Subtitle("DGDenoise(strength=0.8)", align=9)
source = source.ConvertToRGB32(interlaced=false).Subtitle("Source", align=9)
StackHorizontal(source,dg04)
return last
I see some unwanted artifacts:
Image
uploaded the sample denoise test source 1.mkv to my GoogleDrive

Cu Selur

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sun Aug 21, 2016 6:33 am

Good morning, Selur. Thanks for your extensive testing. Here are the things you found so far:

1. Short filenames not handled. [FIXED]
2. MT mode problem.
3. Re-open in VirtualDub fails.
4. Cannot have multiple instances per script.
5. Artifacting. [FIXED]
6. Default strength is too high for NLM. [FIXED]

Meanwhile, DGDenoise appears to be about twice as fast as KNLMeansCL, so it seems worthwhile to continue.

Selur
Moose Approved
Posts: 114
Joined: Mon Nov 05, 2012 4:49 pm

Re: About DGDenoise

Post by Selur » Sun Aug 21, 2016 7:06 am

Maybe mod16 or something similar is needed.
With the crop output resolution is 702x416, so width is only mod2.
BTW, you are converting to RGB32 twice.
I know, it's a remainder of a script where I wanted to compare multiple DGDenoise instances with using StackHorizontal/-Vertical calls. ;)
Last edited by Selur on Sun Aug 21, 2016 7:09 am, edited 1 time in total.

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sun Aug 21, 2016 7:08 am

Interesting. The cropping is causing the artifacts. If you remove the cropping they go away. Should be fixable. Probably some size assumptions in the kernel code.

User avatar
admin
Site Admin
Posts: 4415
Joined: Thu Sep 09, 2010 3:08 pm

Re: About DGDenoise

Post by admin » Sun Aug 21, 2016 7:20 am

OK, width must be mod 8 because the kernel blocksize is 8. I may be able to remove this limitation. Investigating...

Post Reply