Quantcast Avisynth: Gibbs Effect - How to? - Page 2 - digitalFAQ.com Forums [Archives]
  #21  
05-29-2005, 08:29 AM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
Rui,

if you want to get rid of ringing or gibbs artifacts in sources you could do the following ... (just for explaing I do use an "explaining-syntax")

input = YourSource(hagdjsgdjahgj.xxx)
mask1 = Edgemask(input, highthreshold)
mask2 = Edgemask(input, lowerthreshold)
maskaroundegdes = subtract the highthresh mask from the lowthreshmask
filtered = Spatialfilter(input)
MaskedMerge(input,filtered, maskaroundedges)

So what does that logic above do.

The "maskaroundegdes" should look like a bold silhouette around (not ON!) the edges where normally the gibbs/ringing does appear. This mask will be used to only put THAT by a spatial filter treatened Area back ONTO the input stream.

So u have to look into the documentation of masktools where Edgemasks can be produced using threshold and also these masks can be modded by using expand and inpand commands etc. Edgemask() can be used by "sobel", "Laplace" etc masks and its quite fast. But the best masks can be archived by using a "double soble" like didée uses them in his functions.
THAT DoubleSoble mask you can also find in the masking section af ADS() remember the HQ mask parameter? Where Logic() does generate the double sobel out of two DeEdgemask() generated Sobel 3x3 Convolution/Kernels.
Reply With Quote
Someday, 12:01 PM
admin's Avatar
Site Staff / Ad Manager
 
Join Date: Dec 2002
Posts: 42
Thanks: ∞
Thanked 42 Times in 42 Posts
  #22  
05-29-2005, 09:22 AM
rds_correia rds_correia is offline
Free Member
 
Join Date: Apr 2003
Location: Chinese Democracy starts now!
Posts: 2,563
Thanks: 1
Thanked 0 Times in 0 Posts
Hi Andrej ,
Thank you so much for the explanation.
I am sorry to say that my scripting capabilities are not enough to understand what you explained .
When it comes to avs scripting I'm a complete noob .
I also did use the ADS with HQmask=true and I got similar results from those I obtained with HQmask=false plus treshold=8.
Unfortunately the HQ feature slows down the encoding a lot.
But I guess I could use it on the worst cases/sources that I find.
Also tried to add noise with Blockbuster but unfortunately it added too many grain to the picture in order to get rid of the Gibbs.
I would use the EdgeMask if I really knew how to use/tweak it.
In that case should I add it to the script after or before ADS?
Say, you're not planning on enhancing the ADS function to incorporate such a feature, are you ?
Just kidding .
But I'd like you to think about putting something similar on the "To do" list for ADS .
Thanks for your help, though.

Cheers
__________________
Rui
Reply With Quote
  #23  
05-29-2005, 10:12 AM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
ADS() does NOT mask areas AROUND edges but the edges theirselfes! and so also the plain areas. So the masks out of ADS() wont serve you as there are no two of them which will be subtracted.


The workaround/explanation above in pictures:

First the image:




Now we build a mask using a low Threshold




... and a one using a high Threshold




Now we do subtract the Low- from the High-mask




.... and these White parts in the mask are "theoretically" the areas where the gibbs or ringings primary do appear. So we do let work the spatial- or whatever filter on THESE white masked parts only.

Reply With Quote
  #24  
05-29-2005, 10:37 AM
rds_correia rds_correia is offline
Free Member
 
Join Date: Apr 2003
Location: Chinese Democracy starts now!
Posts: 2,563
Thanks: 1
Thanked 0 Times in 0 Posts
Hi Andrej
This a fantastic and ilustrated demonstartion of what you had told me to do in your previous post.
This, I had more or less understood already.
But it is the scripting part that I lack knowledge on how to do what you just showed.
Could you show a "real" script for such an example?
Then I would just have to choose the spatial filter that I most like to do the dirty job.
You really don't have to do so.
By now I should already had learnt a little bit more than I have about avisynth filtering...
One odd thing is that you said ADS can't help me but in fact it can .
Well to be honest it's killing me a lot of details in the picture but Gibbs is hardly noticed that way.
One day, just one day, I'll learn to script and I won't be bugging you guys for help anymore .
Cheers
__________________
Rui
Reply With Quote
  #25  
05-29-2005, 11:39 AM
kwag kwag is offline
Free Member
 
Join Date: Apr 2002
Location: Puerto Rico, USA
Posts: 13,537
Thanks: 0
Thanked 0 Times in 0 Posts
Excelent sample and explanation Andrej

-kwag
Reply With Quote
  #26  
05-29-2005, 11:58 AM
danpos danpos is offline
Free Member
 
Join Date: May 2004
Location: Rio de Janeiro - Brasil
Posts: 538
Thanks: 0
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by kwag
Excelent sample and explanation Andrej

-kwag
I do agree with you, Karl ! Andrej's explanations were very precise and technically perfect ! Kudos for him !

See ya !!
Reply With Quote
  #27  
05-29-2005, 01:15 PM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
Ahhhh ... now licking blood.
The meal is called "masktools", an avisynth dll from manao, also used by HybridFupp, ADS, iip, limitedsharpen, etc.

First: ADS() may help on the first look AS it keeps edges and denoises all around the edges (weel thats the purpose, like hybrid fupp) means the less detailed areas, so that would be logically done using the fine mask above. BUT we JUST WANT to treat the areas AROUND edges and not the plain areas (and shurely not edges/details). ADS() is very sensible in killing fewer recognisable details as these very fast do drop into the plain (black) area of the mask. So EVERYTHING depends on HOW you fine-tune the mask, like using levels() etc.

Second: (like explained in the last sentence of the point above) ... THESE explanation masks above are NO reference how a good mask should look!
These are builded in a fast/dirty way just for explaining. Good masks (like the double sobel approach from didée) are MORE detail keeping, in comparison the ones above, as these would kill too much details, means the man above would be totally shaved!

Reply With Quote
  #28  
05-29-2005, 03:35 PM
Prodater64 Prodater64 is offline
Free Member
 
Join Date: Mar 2003
Location: Palma de Mallorca - España
Posts: 2,925
Thanks: 0
Thanked 0 Times in 0 Posts
Now I really thinking to change my Phillipshave for this new Masktoolshave.

Thats good Inc, thats really a good explanation!

How about a script example?
Reply With Quote
  #29  
05-29-2005, 04:20 PM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
ok rui

The following script is a fast done, means no big testing and so on. The masks really need some optimizations, but youll see whats possible.
Caution: That script IS slow ... as a double sobel mask building via Logic() needs CPU power

First well have a look at an original mpeg source using too much compression where ugly gibbs and artifacts do occur (that picture is scaled by 200%!!)

Original:




Now we do apply the degibbs routine:




And finally the degibbs routine plus a general Blindpp() BUT cpu=4 used (no deringing as it blurs too much the edges)





I think that fast approach already shows whats possible


The script:

Code:
#-------------- Fast deringing method, slow and not at final stage!
#-----------------------------------------------------------------------------

MPEG2Source("G:\Bad-Compessed-MPEG-Source\gibbs.d2v")
g = last
c = last
#-------------- If wanted, do postprocess using CPU=4 everything, if not put a "#" before the following line
#c = c.blindPP(cpu=4,quant=4)

#-------------- Now building a double sobel mask (method by didée), finetuned using the levels
mask_edges = logic( DEdgeMask(c,0,255,0,255,"5 10 5 0 0 0 -5 -10 -5", divisor=2),
\            DEdgeMask(c,0,255,0,255,"5 0 -5 10 0 -10 5 0 -5", divisor=2),"max").
\            levels(150,0.8,200,0,255,false)

#-------------- Applying a blur on the mask, so the filters won't perform hard-edged
mask_edges = mask_edges.blur(0.5)

#-------------- Using the last mask and expand it - quickn dirty this should be updated!
#--------------  Also here we do "break" the edges of that mask for avoiding hard edged filtering
mask_more = blur(levels(expand(expand(mask_edges)),80,1,100,0,255,false),1.58)
mask_final = greyscale(overlay(mask_more,mask_edges, mode="exclusion"))

#-------------- How the ring/gibbs area will be filtered we do assign here:
d = removegrain(c,4)

#-------------- Now applying the filtered area back to the orig clip using the mask ;-)
overlay(c,d,mask=mask_final) # If you want to use avisynths overlay
#masktools_maskedmerge(c,d,mask_final) # OR Masktools Maskedmerge

#---------------------- Lets make a fashion check, unmark the "#" at the beginning if you want to see:
#return g # ----------- The original Clip or ...
#return mask_final #--- the final mask or ...
#return mask_edges #--- ... the edgemask or ..
#return mask_more  #--- ... the expanded edgemask
Masktools is needed:
http://manao4.free.fr/MaskTools-v1.5.6.zip
Masktools explained:
http://manao4.free.fr/MaskTools.htm
Removegrain needed (in my filtering):
www.removegrain.de.tf
Reply With Quote
  #30  
05-29-2005, 04:31 PM
rds_correia rds_correia is offline
Free Member
 
Join Date: Apr 2003
Location: Chinese Democracy starts now!
Posts: 2,563
Thanks: 1
Thanked 0 Times in 0 Posts
Great stuff Andrej
I will try this tomorrow and let you know how it goes.
I can't thank you enough for helping me with this Gibbs effect.
Cheers buddy.
__________________
Rui
Reply With Quote
  #31  
05-29-2005, 05:15 PM
danpos danpos is offline
Free Member
 
Join Date: May 2004
Location: Rio de Janeiro - Brasil
Posts: 538
Thanks: 0
Thanked 0 Times in 0 Posts
@All

In this SITE there is comments and java applets about Gibbs Effect and topics related. Just for cultural general purposes ...

Cheers,
Reply With Quote
  #32  
06-01-2005, 05:01 PM
rds_correia rds_correia is offline
Free Member
 
Join Date: Apr 2003
Location: Chinese Democracy starts now!
Posts: 2,563
Thanks: 1
Thanked 0 Times in 0 Posts
Hi guys ,
Sorry for taking so long.
I've finished my tests.
It just took me a very long time because I wanted to test it under many different conditions and at least with more than one encoder.
Plus I wanted to "experiment" a little with it, and as I've emphasized here already I am very bad at scripting .
To cut to the point, Andrej's script is just like he presented it to us "slow and not at final stage!"
But it sure shows us a different approach to the problem from many other people that I've shared my problem and that have given their oppinion.
Not that other people gave me bad advise, on the contrary
It's just that most have pointed in the same direction, which BTW is the one that I will use.
Well, at least untill Andrej doesn't work a bit more on some issues.
I'm not going to present you with a lot of info from all my testings but I surely will give you a pattern based on my last trials using HC 0.14.
The movie I used for this testing was The Matrix.
The script used was very similar to Andrej's DeGibbs script but I added a Slicer on it for 1% which gave me 1980 frames to encode.
As said I used HC 0.14 in OPV mode with a q=5.575 (don't ask me why ).
Code:
MPEG2Source("G:\Bad-Compessed-MPEG-Source\gibbs.d2v")
g = last
c = last
#c = c.blindPP(cpu=4,quant=4)
mask_edges = logic( DEdgeMask(c,0,255,0,255,"5 10 5 0 0 0 -5 -10 -5", divisor=2),
\            DEdgeMask(c,0,255,0,255,"5 0 -5 10 0 -10 5 0 -5", divisor=2),"max").
\            levels(150,0.8,200,0,255,false)
mask_edges = mask_edges.blur(0.5)
mask_more = blur(levels(expand(expand(mask_edges)),80,1,100,0,255,false),1.58)
mask_final = greyscale(overlay(mask_more,mask_edges, mode="exclusion"))
d = removegrain(c,4)
overlay(c,d,mask=mask_final) # If you want to use avisynths overlay
#masktools_maskedmerge(c,d,mask_final) # OR Masktools Maskedmerge

#---------------------- Lets make a fashion check, unmark the "#" at the beginning if you want to see:
#return g # ----------- The original Clip or ...
#return mask_final #--- the final mask or ...
#return mask_edges #--- ... the edgemask or ..
#return mask_more  #--- ... the expanded edgemask
Slicer(1,15,2,"ping")
Usually without the scrip it would take me 2 and a half minutes to encode the mini clip but with DeGibbs - what I nice name, huh? - it took me more than 30 minutes to encode.
But that's not the point here!
My problem was not about speed, it was about quality.
So I opened both outputs (with and without DeGibbs) in VDubMod and I noticed how it only touched the hard edges in the picture.
It is very nice that all the rest remains pretty much like the real thing because I checked without the script.
Then I noticed how the ringing was all gone - it works
So I browsed the whole clip and then I started to notice some strange artifacts - would they be named microblocs?
Especially when a very dark color meets a medium bright color - e.g. a brown dark hair near the color of human skin.
There I noticed something very strange at 150%.
So I amplified it to 200% and there it was!
Tiny little blocks bluring the picture.
I mean I could hardly tell that I was looking at the hair contour near somebody's hears.
Without zooming in it looks strange but it isn't much noticable.
As said I played with the toy for a long time.
Used different encoders but the result was very similar.
To be honest I rather stay with some ringing on 10% of the movie but still have very nice and detailed picture.
But I bet my money as Andrej can improove this baby a lot
Maybe in some months I'll be telling a different story.
Oh, I almost forgot.
I've found that the Gibbs is intimately related to grainy/noisy sources that use high bitrates >=6000Kbit.
I have some movies where I notice it a lot and I have some (more softened) movies where it is almost impossible to notice it.
Bottom line1: keep using a small touch of DCTFilter which actually helps a bit to cut the gibbs and it slmost doesn't hurt the encoding speed.
Bottom line2: keep bugging Andrej so that he improoves DeGibbs over the next couple of months .
Thanks everybody for all your help.
Cheers
__________________
Rui
Reply With Quote
  #33  
06-02-2005, 01:09 PM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
Quote:
Originally Posted by Rui
Usually without the scrip it would take me 2 and a half minutes to encode the mini clip but with DeGibbs - what I nice name, huh? - it took me more than 30 minutes to encode.
He he, .... u should test Didées ipp script ... THATs slow but effective!
If youre going into adaptive (masked) selections it could result in a very slow encoding, BUT as said above a use of "Logic(....)" makes things very slow ... but the positive sideeffect is that the mask is much more precise so you will loose less details. But maybe a simple mask generating is also ok, so Ill take a look at it these days. (maybe you also can take a look into Hybridfupp as fupp also generates masks in his script which can be very useful for our needs. So taking an edgemask from hybridfupp, expanding it and subtracting the edgemask from the expanded version of the same edgemask. Thats the approach


Quote:
So I browsed the whole clip and then I started to notice some strange artifacts - would they be named microblocs?
Especially when a very dark color meets a medium bright color - e.g. a brown dark hair near the color of human skin.
There I noticed something very strange at 150%.
So I amplified it to 200% and there it was!
Tiny little blocks bluring the picture.
Hmmmmm .... I have no "Vision" ... I only can assume,
So please do upload via Vdub safed Images in jpeg (90% Quality - so no recognisable artifacts will be that added) using Imageshack.com

Refering to Artifacts like blocks:
Quote:
Especially when a very dark color meets a medium bright color
.... IF I do build a fading surface from dark to medium dark in Photoshop ... it even there happens that artifacts do occur no matter how much Colors your system is settet to display.
That is during incorrect math or whatever. These artifacts will be blown away IF you add a tiny minimal bit of noise ... just for the applications internal algorhythm.

And that has been so often done also in here ... applying a minimal blockbuster() so the encoding wont rise that much in its bits but less blocks on dark surfaces will be immideately the result - its worth!



Quote:
Bottom line1: keep using a small touch of DCTFilter which actually helps a bit to cut the gibbs
Hmmmm .... dont use DCTfilter on sources which do result in Problems like you mentioned in you last point! Applying that one results on grainy sources in minimal microblocks at high freqs - maybe not recognisable but if that output out of avisynth again apsses a DCT in your encoder ---- well Microblocks will get blocks and so on.
Im not shure if DCTfilter is coded properly as many issues have been mentioned in here ... maybe not comparable to your issue but ... maybe an indicate that DCTFilter has to be used with caution?!

DCTFIlter does not do anything proper! against an existing ringing in the source as DCTfilter touches ALL high freqs (depends on the integers you set to zero) .. and gibbs are mostly no highest details but up to 2-5px bold ugly trashborders around edges.

Unfortunately (is that unfortune!?) I've never had to deal with Gibbs'y sources except DVB-T captures, but these are that quantizated that such a function just improves 20% of 100% that have to be improved
ipp from Didée often is used to build a good! looking anamorph source from a non-anamorph letterboxed 4:3 source .. IF the source is in a good state like DVB-S high bitrate ones or DVD ones (like my Titanic - a cheap mastering of a 2.35:1 non! anamorph *grrrrrrrrrr ) or you can use it just to improve DVD sources no matter wich AR. Also limitedsharpen brings out details that you cant beleive



I also found this one on doom9 by Krieger .... I never tried it or get into it so I dont know what dlls are needed etc.
Code:
Maybe you are try this one:


code:
------------------------------------------------------------------------
function CleanEdges(clip c, int "dering_luma", int "dering_floor", bool "use_old_chroma", int "sharpen_cycles", int "blur_cycles", int "thin", bool "mask", int "edgeinfluence"){c
EdgeBias = 16
dering_floor= default(dering_floor,13)
dering_luma = default(dering_luma, 78)
use_old_chroma = default(use_old_chroma,true)
mask=default(mask,false)
diff=default(edgeinfluence,22)

faktor=float(c.height)*float(c.width)/400000.0
sharpen_cycles=default(sharpen_cycles,round(faktor*4))
blur_cycles=default(blur_cycles,round(faktor*4))
thin = default(thin,round(faktor*2))

blurr = deen(rad=3, thrY=30, thrUV=40).hqdn3d(60,60,0,0)

u = c.utoy.blur(1.5).blur(1.5).blur(1.5).temporalsoften(2,255,0,3,2).xsharpen(155)
v = c.vtoy.blur(1.5).blur(1.5).blur(1.5).temporalsoften(2,255,0,3,2).xsharpen(155)
y = c.removeGrain(2).deen(thrY=33, thrUV=37, rad=3).xsharpen(35)

clean= ytouv(u, v, y)
     \.hqdn3d(9,3,5,2)
     \.RemoveDirt(mthreshold=70, pthreshold=2, tolerance=7)
     \.removeGrain(2)
     \.UnSharpMask(50,1,0)

sharpy=DeRing_getSharp(blurr,sharpen_cycles)
blurry=DeRing_getBlur(blurr,blur_cycles)

edge1a = YV12subtract( sharpy, blurry)
edge1b = yv12subtract( edge1a,
 \                     edge1a.unsharpMask(120,1,0),tol=1,wideRange=true )
 \                     .yv12lut(yexpr="x 128 - abs "+string(dering_floor)+" *")
edge1ba = blurr.FineEdge(EdgeBias)
edge1bb = edge1a.FineEdge(EdgeBias).inflate.inflate.inflate.blur(1)
 \              .DeRing_ExpandToThin(thin)
 \              .greyscale.Ylevels(19,1.6,dering_luma,0,255)
 \              .Blur(1.5)
edge1bc = c.FineEdge(EdgeBias+2)

z=edge1bb
z=YV12LUTxy(edge1ba,z,"x "+string(diff)+" > y x 1.5 * - y ?")
z=YV12LUTxy(edge1bc,z,"x "+string(diff)+" > y x 1.1 * - y ?")
z=FitY2UV(z)

use_old_chroma ? mask ? z : maskedmerge( c, clean, z, Y=3,U=1,V=1, useMMX=true ) :
               \ mask ? z : maskedmerge( c, clean, z, Y=3,U=3,V=3, useMMX=true )
}

#------------ Different Help functions -----------------------#
function DeRing_getSharp(clip c, int sharp_cycles){
 s1= c.sharpen(0.6)
 s2=s1.sharpen(0.6)
 s3=s2.sharpen(0.6)
 s4=s3.sharpen(0.6)
 s5=s4.sharpen(0.6)
 sharp_cycles <= 5 ?  Select(sharp_cycles-1,s1,s2,s3,s4,s5) 
                  \:  DeRing_getSharp(s5,sharp_cycles-5)
 return last
}

function DeRing_getBlur(clip c, int blur_cycles){
 b1= c.Blur(0.6)
 b2=b1.Blur(0.6)
 b3=b2.Blur(0.6)
 b4=b3.Blur(0.6)
 b5=b4.Blur(0.6)

 blur_cycles <= 5 ? Select(blur_cycles-1,b1,b2,b3,b4,b5) 
                 \: DeRing_getBlur(b5,blur_cycles-5)
 return last
}

function DeRing_ExpandToThin(clip c, int thin){
 q=c.LanczosResize(m4(5/float(thin)*c.width),
                  \m4(5/float(thin)*c.height))
 q=q.expand()
 q=q.LanczosResize(c.width,c.height)
 q=Logic(c,q,"max")

 thin <= 5 ? q : DeRing_ExpandToThin(q,thin-5)
 return last
}


function FineEdge( clip clp, int "div" )
       {
         logic(  clp.DEdgeMask(0,255,0,255,"5 10 5 0 0 0 -5 -10 -5", setdivisor=true, divisor=div)
          \     ,clp.DEdgeMask(0,255,0,255,"5 0 -5 10 0 -10 5 0 -5", setdivisor=true, divisor=div), "max", Y=3,U=1,V=1 )
         }
------------------------------------------------------------------------

Many Code... I use the following call for a very overcompressed movie:


code:
------------------------------------------------------------------------
CleanEdges(40,dering_floor=16, mask=false, thin=10)
------------------------------------------------------------------------

If you have blendings use "use_old_chroma=false"

* "dering_luma" in the call-sample above set to 40 is "hardness" of the deringing. Lower values let more deringing (use mask=true to see this)
* "thin" is the thin of dering (bluring near by the edge).
* "dering_floor" with higher values find more edges to dering.
* "mask=true" show you the parts, which were deringing

I should say, that this is a modified version of the dering-algorithm of "Didée's" IIP. The "deblending" i stolen  from a thread here somewhere (sorry guys) and build it in because use quite the same technique to reduce chroma-artifacts (reduce by edge-masks).

PS: The most usefull variable is "thin". Here is "thin" 10, so very hard. a value of 3-5 should be ok for cleaning. The script is much slower as Didée's BlindDeHalo but can be used on very hard deringing

krieger205
Reply With Quote
  #34  
06-02-2005, 03:40 PM
incredible incredible is offline
Free Member
 
Join Date: May 2003
Location: Germany
Posts: 3,189
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to incredible
There was already an approach by mf, have a look at it ....

Code:
######
##
## HQDering v0.1 by mf
##
## Applies derining by using a smart smoother near edges (where ringing occurs) only.
##
## Usage: Import("HQDering-v0.1.avs")
##        HQDering()
##
####

function HQDering(clip input, int "strength", int "overall", string "smoother", string "params") {

 strength = Default(strength, 255)	# strength, 0-255
 overall  = Default(overall, 0)		# overall smoothing, 0-255
 smoother = Default(smoother, "Deen")	# filter that smooths
#params   = default defined below	# filter parameters - use Chr(34) for quotes

defaultnull = Default(params, "")
defaultdeen = Default(params, Chr(34)+"a3d"+Chr(34)+", 4, 15, 15, 20")

params = (smoother=="Deen") ? defaultdeen : defaultnull

try {
smoothedwparams = Eval(smoother + "(input, " + params + ")")
}
catch(err_msg) {
smoothedwoparams = Eval(smoother + "(input)")
}

smoothed = (params=="") ? smoothedwoparams : smoothedwparams

input.EdgeMask(3, 255, 255, 255, "sobel", Y=3, V=1, U=1)
normalmask = last

normalmask.Levels(0, 3.3, 90, 0, 255).Blur(1.0)
amplifiedmask = last

normalmask.Inflate().Inflate().Inflate().Levels(0, 3.3, 90, 0, 255).Blur(1.0).Inflate().Inflate().Inflate().Levels(0, 3.3, 255, 0, 255).Inflate().Inflate()
thickmask = last

#YV12Layer(amplifiedmask.Invert(), thickmask, "mul", 255, chroma=false, Y=3, V=1, U=1)
Overlay(amplifiedmask.Invert(), thickmask, mode="multiply").greyscale
Levels(60, 3.0, 140, overall, strength)

ringingmask = last

MaskedMerge(input, smoothed, ringingmask)

}
mf's functions can be found here:
http://mf.creations.nl/avs/functions/
Reply With Quote
Reply




Similar Threads
Thread Thread Starter Forum Replies Last Post
Avisynth: Rainbow effect? Krassi Avisynth Scripting 7 09-18-2006 01:29 AM
The butterfly effect vmesquita Off-topic Lounge 5 05-24-2004 03:25 AM
zero all frequency components above a cutoff frequency (Gibbs) GFR Avisynth Scripting 0 01-13-2003 12:28 PM
KVCD: Trouble with gibbs effect? segfault Video Encoding and Conversion 0 12-30-2002 11:14 AM
Avisynth: Gibbs Effect LadyMiles Avisynth Scripting 0 11-29-2002 08:56 PM

Thread Tools



 
All times are GMT -5. The time now is 09:15 AM  —  vBulletin © Jelsoft Enterprises Ltd