Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
![]() |
#1 | Link |
Registered User
Join Date: Feb 2004
Posts: 1,350
|
ungibbs, a gibbs artifact remover
Code:
function blurfunction2(clip c){ c dctlimit(dct2=1.625, dct3=0, dct4=0, dct5=0, dct6=0, dct7=0, dct8=0, use64dct=false, use32dct=false, use8dct=true, use4dct=false) } function ungibbs(clip c){ thresh = 224 c predict = c.blurfunction2 sharp1 = c.limitedsharpenfaster(smode=4, strength=100, overshoot=0)#Xsharpen(31, 255) blur1 = c.removegrain(4) sharp2 = c.limitedsharpenfaster(smode=3, strength=100, overshoot=0) blur2 = c.quantile(2) blur3 = c.spline36resize(width*2, height*2).removegrain(4).spline36resize(c.width, c.height) bp0 = mt_makediff(predict, c) bp1 = mt_makediff(sharp1.blurfunction2, c) bp2 = mt_makediff(blur1.blurfunction2, c) bp3 = mt_makediff(sharp2.blurfunction2, c) bp4 = mt_makediff(blur2.blurfunction2, c) bp5 = mt_makediff(blur3.blurfunction2, c) cp1 = mt_merge(c, sharp1, MT_lutxy(bp0, bp1, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m100 = mt_makediff(c, cp1.blurfunction2, u=1, v=1) cp2 = mt_merge(cp1, blur1, MT_lutxy(m100, bp2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m101 = mt_makediff(c, cp2.blurfunction2, u=1, v=1) cp3 = mt_merge(cp2, sharp2, MT_lutxy(m101, bp3, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m102 = mt_makediff(c, cp3.blurfunction2, u=1, v=1) cp4 = mt_merge(cp3, blur2, MT_lutxy(m102, bp4, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m103 = mt_makediff(c, cp4.blurfunction2, u=1, v=1) cp5 = mt_merge(cp4, blur3, MT_lutxy(m103, bp5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m104 = mt_makediff(c, cp5.blurfunction, u=1, v=1) #cp6 = mt_merge(cp5, blur3, MT_lutxy(m100, bp2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1)) #m105 = mt_makediff(c, cp2.blurfunction, u=1, v=1) cp5} This is here (development as opposed to usage) because, its slow, it causes artifacts sometimes, and because I am lazy and don't want to spend all of my time explaining how to make it work. example script: Code:
#source ungibbs().ungibbs() spline36resize(1280, 720) example: processed, unprocessed Last edited by *.mp4 guy; 7th February 2008 at 15:53. |
![]() |
![]() |
![]() |
#3 | Link |
Registered User
Join Date: Feb 2004
Posts: 1,350
|
The line(s) are darker because of the selective sharpening, via LSF, which is necessary to balance out the bluring. If no sharpening is used, the picture looks too soft/flat, even though the ringing removal is good at avoiding bluring lines.
|
![]() |
![]() |
![]() |
#4 | Link | |
N00B !
Join Date: Jun 2006
Posts: 223
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#5 | Link |
Moderator
![]() Join Date: Nov 2001
Location: Netherlands
Posts: 6,354
|
I was looking at a good deringing filter but i couldn't find any (guess the footage from the phone is just crap with ringing all over the place). So i was trying yours:
Code:
cp5 = mt_merge(cp4, blur3, MT_lutxy(m103, bp5, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1).frfun7(0.51, 256, 256)) m104 = mt_makediff(c, cp5.blurfunction, u=1, v=1) #cp6 = mt_merge(cp5, blur3, MT_lutxy(m100, bp2, "x 128 - abs y 128 - abs - "+string(thresh)+" *", u=1, v=1)) #m105 = mt_makediff(c, cp2.blurfunction, u=1, v=1) I see that yours removes some deringing. Which parameters do i need to tune to make it much stronger? Last edited by Wilbert; 14th June 2015 at 17:43. |
![]() |
![]() |
![]() |
#8 | Link |
Anime addict
Join Date: Feb 2009
Location: Spain
Posts: 675
|
That server of images is a crap.
__________________
Intel i7-6700K + Noctua NH-D15 + Z170A XPower G. Titanium + Kingston HyperX Savage DDR4 2x8GB + Radeon RX580 8GB DDR5 + ADATA SX8200 Pro 1 TB + Antec EDG750 80 Plus Gold Mod + Corsair 780T Graphite |
![]() |
![]() |
![]() |
#9 | Link |
Registered User
Join Date: Feb 2004
Posts: 1,350
|
There were fewer good image hosts back then. Also, some of the ones which are bad now used to be better. That said, I quite agree with you that it isn't very good.
General Information: There are a lot of things that get lumped in as ringing, this particular filter was intended for use on the stuff that shows up on analog captures, that is why it has a lowpass filter derived blur function. The blur function is used to estimate how to treat various areas of the image, it is not ever applied to the output directly. @Wilbert blurfunction is probably a dependency I forgot to post (and no one used the function, so I never caught it). Replacing it with blurfunction2 should work acceptably. As far as strength goes, you just have to run it multiple times, it is an extremely brute force method, but at the time it was much better than anything else on the material it was written for. If you care to post a sample of some kind I could probably dig up something much faster with similar or perhaps better quality. One of the main problems is that you really need to know what you're doing to set up deringing filters properly, which is why I haven't posted any besides this - they are too difficult to use and there is very little interest. |
![]() |
![]() |
![]() |
#11 | Link | |
HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,571
|
Quote:
EDIT: And you'll need DctFilter:- http://avisynth.nl/index.php/Externa...tial_Denoisers
__________________
I sometimes post sober. StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace "Some infinities are bigger than other infinities", but how many of them are infinitely bigger ??? Last edited by StainlessS; 26th October 2021 at 23:54. |
|
![]() |
![]() |
![]() |
#13 | Link | |
Registered User
Join Date: Oct 2011
Location: Dans le nord
Posts: 62
|
Quote:
But thanks for sending me these! Edit: I still don't know shit But to make it work (i.e. stop giving me errors) in blurfunction 2 I changed dctlimit(dct2=1.625[...]) for dctlimit(dct2=0.0625[...]) I picked 0.0625 because it seemed to be a recurring number in these functions. In dfilter I reactivated the c.pointresize line while removing offx and offy in dctfilter and I pounded the c.dctfilter line. Code:
function dfilter(clip c, int offx, int offy, float dc, float dct2, float dct3, float dct4, float dct5, float dct6, float dct7, float dct8) { c.PointResize(c.width,c.height,offx,offy,c.width,c.height).dctfilter(dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8,chroma=0).PointResize(c.width,c.height,-offx,-offy,c.width,c.height) # c.dctfilter(dc,dct2,dct3,dct4,dct5,dct6,dct7,dct8,chroma=0) } Last edited by Blankmedia; 2nd November 2021 at 19:50. |
|
![]() |
![]() |
![]() |
#14 | Link |
Registered User
Join Date: Oct 2011
Location: Dans le nord
Posts: 62
|
Well with the changes I made it doesn't give me good results.
But this one here seems to work for my needs. I put mode 27 instead of 17 because it's supposed to retain thin edges better. Code:
### Gibbs Noise Block ### function GibbsNoiseBlock( clip IN ) { Edge=MT_Edge( IN, "prewitt", ThY1=20, ThY2=40).RemoveGrain(27) # RemoveGrain(17) Mask=MT_Logic( Edge.MT_Expand().MT_Expand().MT_Expand().MT_Expand(),Edge.MT_Inflate().MT_Inpand(),"xor").Blur(1.0) MT_Merge( IN, Minblur( IN ), Mask, Luma = True) } Last edited by Blankmedia; 15th November 2021 at 21:43. |
![]() |
![]() |
![]() |
Thread Tools | Search this Thread |
Display Modes | |
|
|