Soothe

From Avisynth wiki
Revision as of 00:00, 20 May 2013 by Wilbert (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Abstract
Author Didée
Version 1.0
Download
Category Unknown
Requirements
  • YV12
License
Discussion

Soothe(clip sharp, clip orig, int keep)

Contents

Abstract

Lessens the temporal instability and aliasing caused by sharpening, by comparing the original and sharpened clip, leaving a smoother and slightly softer output.

Requires Filters

Description

This is a small postprocessor function for sharpening filters. The goal is temporal stabilization of clips that have been sharpened before. It is reasonably fast (contains 3 different YV12Lutxy operations and one TemporalSoften - that's about the cheapest possibility for what is done. Plugin coders are welcome :) ), and seems to work pretty well.

The introduction of jitter on the temporal axis is a general problem of sharpening operations, since sharpening (usually) considers spatial aspects only. Therefore, Soothe() does a very simple job: get the difference between [source] and [sharpened source], apply a TemporalSoften on this difference BUT allow only changes towards 128 ("neutral"), and then apply this temporally calmed difference back to the original clip. Effectively, this will reduce the overall effect of sharpening - less in static areas, and more in moving areas.

Advantages:

  • more steady appearance (less "nervous")
  • less bitrate required
  • somewhat positive effect on detail that is, due to the sharpening, prone to aliasing
  • smoother motion compaired to plain-sharpening, since motion-blurred edges will be less sharpened
  • less artefacts in moving areas
  • LimitedSharpen can run faster, since one can get away with less supersampling
  • should only help, never harm

Disadvantages:

  • overall sharpening effect is reduced, but this can be compensated by a little more initial sharpening.

Parameters

keep int (0-100, default 24)
Minimum percent of the original sharpening to keep.

Examples

We use LimitedSharpen() as sharpener, and we'll keep at least 20% of its result:

dull   = last
sharp  = dull.LimitedSharpen( ss_x=1.25, ss_y=1.25, strength=150, overshoot=1 )

Soothe( sharp, dull, 20 )

Changelog

Links

Doom9 thread


Soothe.avsi

function Soothe(clip sharp, clip orig, int "keep")
{
Assert(sharp.width == orig.width && sharp.height == orig.height,
 \  "Soothe: clip dimensions must match!")
keep  = default(keep, 24)
keep  = (keep>100) ? 100 : (keep<0) ? 0 : keep
KP    = string(keep)
diff  = mt_makediff(orig,sharp)
diff2 = diff.temporalsoften(1,255,0,32,2)
diff3 = mt_lutxy(diff,diff2,  "x 128 - y 128 - * 0 < x 128 - 100 / "  + KP 
 \                           + " * 128 + x 128 - abs y 128 - abs > x " + KP 
 \                           + " * y 100 " + KP + " - * + 100 / x ? ?")
return( mt_makediff(orig,diff3,chroma="copy first") )
}
# 14th July 2007, http://forum.doom9.org/showthread.php?p=1024318

(from [1])

Personal tools