FixChromaBleeding
From Avisynth wiki
(Difference between revisions)
m (1 revision) |
(reformat) |
||
Line 1: | Line 1: | ||
− | {{ | + | {{FilterCat4|External_filters|Scripts|Restoration_filters|Chroma correction}} |
− | + | {{Filter3 | |
− | | | + | |ajordan |
− | + | |1.0 | |
+ | |[http://web.archive.org/web/20130118202943/http://avisynth.org/mediawiki/upload/f/f2/FixChromaBleeding.avs FixChromaBleeding.avs] | ||
+ | |Chroma_correction | ||
+ | | | ||
+ | |6=[http://forum.doom9.org/showthread.php?t=77074 Doom9 thread]}} | ||
+ | == Description == | ||
+ | This is a script to fix color bleeding. The colors that bleed most are the ones that lie in the extremes of the chroma scale (the V channel): saturated blue and red. This Avisynth script, which isolates those extremes, makes a mask out of them and uses the mask to shift the chroma (and lower the saturation) only in those areas where the bleeding is more severe. | ||
− | |||
− | |||
− | === | + | == Requirements == |
+ | * AviSynth 2.5.8 or [http://sourceforge.net/projects/avisynth2/ greater] | ||
+ | * Supported color formats: [[YV12]] | ||
+ | ==== Required Plugins ==== | ||
* [[ChromaShift]] | * [[ChromaShift]] | ||
− | |||
− | |||
− | == | + | ==Script== |
<pre> | <pre> | ||
− | + | Function FixChromaBleeding (clip input) { | |
− | + | ||
+ | # prepare to work on the V channel and reduce to speed up and filter noise | ||
+ | area = input.tweak(sat=4.0).VtoY.ReduceBy2 | ||
+ | |||
+ | # select and normalize both extremes of the scale | ||
+ | red = area.Levels(255,1.0,255,255,0) | ||
+ | blue = area.Levels(0,1.0,0,0,255) | ||
+ | |||
+ | # merge both masks | ||
+ | mask = MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) | ||
+ | |||
+ | # expand to cover beyond the bleeding areas and shift to compensate the resizing | ||
+ | mask = mask.ConvertToRGB32.GeneralConvolution(0,"0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0").ConvertToYV12 | ||
+ | |||
+ | # back to full size and binarize (also a trick to expand) | ||
+ | mask = mask.BilinearResize(Width(input),Height(input)).Levels(10,1.0,10,0,255) | ||
+ | |||
+ | # prepare a version of the image that has its chroma shifted and less saturated | ||
+ | input_c = input.ChromaShift(C=-4).tweak(sat=0.8) | ||
+ | |||
+ | # combine both images using the mask | ||
+ | return input.overlay(input_c,mask=mask,mode="blend",opacity=1) | ||
+ | } | ||
</pre> | </pre> | ||
− | |||
− | |||
− | + | == Examples == | |
+ | [[AviSource]]("blah.avi") | ||
+ | FixChromaBleeding() | ||
+ | |||
+ | |||
− | [ | + | ==External Links == |
+ | *[http://forum.doom9.org/showthread.php?t=77074| Doom9 Forum] - discussion. | ||
+ | <br> | ||
+ | <br> | ||
+ | ----------------------------------------------- | ||
+ | '''Back to [[External_filters#Chroma_correction|External Filters]] ←''' |
Revision as of 23:47, 8 August 2015
Abstract | |
---|---|
Author | ajordan |
Version | 1.0 |
Download | FixChromaBleeding.avs |
Category | Chroma_correction |
License | |
Discussion | Doom9 thread |
Contents |
Description
This is a script to fix color bleeding. The colors that bleed most are the ones that lie in the extremes of the chroma scale (the V channel): saturated blue and red. This Avisynth script, which isolates those extremes, makes a mask out of them and uses the mask to shift the chroma (and lower the saturation) only in those areas where the bleeding is more severe.
Requirements
Required Plugins
Script
Function FixChromaBleeding (clip input) { # prepare to work on the V channel and reduce to speed up and filter noise area = input.tweak(sat=4.0).VtoY.ReduceBy2 # select and normalize both extremes of the scale red = area.Levels(255,1.0,255,255,0) blue = area.Levels(0,1.0,0,0,255) # merge both masks mask = MergeLuma(red, blue, 0.5).Levels(250,1.0,250,255,0) # expand to cover beyond the bleeding areas and shift to compensate the resizing mask = mask.ConvertToRGB32.GeneralConvolution(0,"0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0").ConvertToYV12 # back to full size and binarize (also a trick to expand) mask = mask.BilinearResize(Width(input),Height(input)).Levels(10,1.0,10,0,255) # prepare a version of the image that has its chroma shifted and less saturated input_c = input.ChromaShift(C=-4).tweak(sat=0.8) # combine both images using the mask return input.overlay(input_c,mask=mask,mode="blend",opacity=1) }
Examples
AviSource("blah.avi") FixChromaBleeding()
External Links
- Doom9 Forum - discussion.
Back to External Filters ←