TComb
m (→Requirements) |
(v2.3 update) |
||
(One intermediate revision by one user not shown) | |||
Line 1: | Line 1: | ||
{{FilterCat4|External_filters|Plugins|Plugins_x64|Restoration_filters|Rainbow & Dot Crawl Removal}} | {{FilterCat4|External_filters|Plugins|Plugins_x64|Restoration_filters|Rainbow & Dot Crawl Removal}} | ||
{{Filter3 | {{Filter3 | ||
− | | {{Author/tritical}}, [http://github.com/Elegant996 Elegant] | + | |1={{Author/tritical}}, [http://github.com/Elegant996 Elegant], {{Author/pinterf}} |
− | | v2. | + | |2=v2.3 |
− | | | + | |3=[https://github.com/pinterf/TComb/releases TComb-v2.1.7z] |
− | [ | + | |4=Rainbow & Dot Crawl Removal |
− | + | |5=[http://www.gnu.org/licenses/gpl-2.0.txt GPLv2] | |
− | + | |6=[https://forum.doom9.org/showthread.php?t=172372 Doom9 Forum]}} | |
− | | Rainbow & Dot Crawl Removal | + | |
− | | [http://www.gnu.org/licenses/gpl-2.0.txt GPLv2] | + | |
− | |}} | + | |
== Description == | == Description == | ||
Line 15: | Line 12: | ||
TComb does support seeking... that is, jumping to a random frame will produce the same result as if you had linearly run up to that frame. For dot crawl removal TComb requires at least 3 static fields of the same parity and for rainbow removal TComb requires at least 5 static fields of the same parity. | TComb does support seeking... that is, jumping to a random frame will produce the same result as if you had linearly run up to that frame. For dot crawl removal TComb requires at least 3 static fields of the same parity and for rainbow removal TComb requires at least 5 static fields of the same parity. | ||
− | |||
− | |||
− | |||
<br> | <br> | ||
− | + | <br> | |
== Requirements == | == Requirements == | ||
* [x86]: [[AviSynth+]] or [http://sourceforge.net/projects/avisynth2/ AviSynth 2.6] | * [x86]: [[AviSynth+]] or [http://sourceforge.net/projects/avisynth2/ AviSynth 2.6] | ||
* [x64]: [[AviSynth+]] | * [x64]: [[AviSynth+]] | ||
− | * Supported color formats: [[ | + | * Supported color formats: [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]], [[YUY2]] |
+ | |||
+ | * [https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads Microsoft Visual C++ 2019 Redistributable Package (x86 / x64)] | ||
+ | :<span style="color:red">***</span> <tt>vc_redist.x86.exe</tt> is required for <tt>TComb-x86</tt> | ||
+ | :<span style="color:red">***</span> <tt>vc_redist.x64.exe</tt> is required for <tt>TComb-x64</tt> | ||
<br> | <br> | ||
Line 77: | Line 75: | ||
:::The frame numbers in the debug output correspond to the input clip after a [[SeparateFields]]() call. TComb internally invokes SeparateFields() before itself and [[weave]]() after itself. | :::The frame numbers in the debug output correspond to the input clip after a [[SeparateFields]]() call. TComb internally invokes SeparateFields() before itself and [[weave]]() after itself. | ||
<br> | <br> | ||
− | ::{{Par2|opt|int| | + | ::{{Par2|opt|int|-1}} |
:::Controls which cpu optimizations are used. | :::Controls which cpu optimizations are used. | ||
:::Possible settings: | :::Possible settings: | ||
::::*0 - use C routines | ::::*0 - use C routines | ||
− | ::::* | + | ::::*other - automatically choose [[SSE2]] or C |
− | + | ||
− | + | ||
− | + | ||
<br> | <br> | ||
− | == Basic Setup/Usage | + | == Basic Setup/Usage == |
Setting up TComb is pretty simple. The only values that would ever really need adjusting are fthreshL/fthreshC, othreshL/othreshC, and mode. | Setting up TComb is pretty simple. The only values that would ever really need adjusting are fthreshL/fthreshC, othreshL/othreshC, and mode. | ||
Line 116: | Line 111: | ||
<br> | <br> | ||
== Changelog == | == Changelog == | ||
− | + | ||
− | + | v2.3 (20210224 pinterf) | |
− | + | Y8, YV16, YV24, YV411 support<br> | |
− | + | v2.2 (20210223 - pinterf) | |
− | + | Fix: unsave register x64 assembler causing artifacts | |
− | + | Drop all external asm | |
− | + | Rewrite assembler in SIMD intrinsics (old stuff is not removed yet, only conditionally ignored) | |
− | + | Add CMake build system | |
+ | Add MinGW/gcc support | ||
+ | Add linux support (with ENABLE_INTEL_SIMD=off option as well) | ||
+ | Add build instructions to README.md<br> | ||
+ | v2.1 (20210221 - pinterf) | ||
+ | project forked to https://github.com/pinterf/TComb/ | ||
+ | param 'opt' is back for debug. 0 means pure C code | ||
+ | Fix bug in x64 assembler buildFinalMask_SSE2 | ||
+ | Fix crash in 32bit version of VerticalBlur3_SSE2 | ||
+ | Fix: scenechange SSE2 did not work | ||
+ | Fix: x64 assembler HorizontalBlur6_SSE2 | ||
+ | Fix: HorizontalBlur6: C only did top 2 lines. SSE2 bad top 2 lines | ||
+ | Fix: HorizontalBlur3_SSE2 artifacts (both x86 and x64) | ||
+ | Fix: HorizontalBlur3_SSE2 missing rounder (both x86 and x64) | ||
+ | (now C and SSE2 is giving identical results) | ||
+ | Code: | ||
+ | Update to Visual Studio 2019 | ||
+ | update to actual Avisynth+ headers | ||
+ | clang-friendly code | ||
+ | removed memcpy and bitblt variants | ||
+ | replaced planarframes module with the one I updated in tivtc project for Avisynth+ and hbd preparation | ||
+ | Fix debug build configuration in VS project settings<br> | ||
+ | 07/26/2015 v2.0.0.1 (Elegant996) | ||
+ | + Corrected the masks used in HorizontalBlur6 for x64.<br> | ||
+ | 07/17/2015 v2.0 (Elegant996) | ||
+ | * project moved to https://github.com/Elegant996/TComb/ | ||
+ | + Removed buffering of frames/info that weren't actually used (was there for | ||
+ | development/testing purposes). Should save a lot of RAM usage. | ||
+ | + Switched to AVS 2.6 API since AviSynth 2.6.0 was released. | ||
+ | + Added x64 support which also utilizes SSE2. This also includes some missing | ||
+ | SSE2 functions (andNeighborsInPlace_SSE2). | ||
+ | + Restructured debug and error messages so that it was apparent that TComb was responsible. | ||
+ | - Removed MMX/ISSE support as times have changed and the support was not going to be carried over to x64. | ||
+ | - Removed "opt" parameter. TComb will now use SSE2 if available and will fallback | ||
+ | on C++ if it is not supported.<br> | ||
+ | 05/16/2006 v2.0 Beta 2 | ||
+ | + Stricter checking of othreshL/othreshC when looking for oscillation | ||
+ | + For dot crawl detection require at least one vertical neighbor (y-1/y+1, x-1/x/x+1) | ||
+ | - fixed possible crash with yuy2 input (sse2 planar<->packed conversions)<br> | ||
+ | 03/31/2006 v2.0 Beta 1 | ||
+ | - complete rewrite<br> | ||
+ | 06/24/2005 v0.9.0 | ||
+ | - Initial Release | ||
<br> | <br> | ||
− | == | + | == Archived Downloads == |
− | + | {| class="wikitable" border="1"; width="600px" | |
− | + | |- | |
− | + | !!width="100px"| Version | |
+ | !!width="150px"| Download | ||
+ | !!width="150px"| Mirror | ||
+ | |- | ||
+ | !v2.0 Beta 2 | ||
+ | |[http://web.archive.org/web/20151125175557/http://bengal.missouri.edu/~kes25c/TCombv2B2.zip TCombv2B2.zip] | ||
+ | | | ||
+ | |} | ||
<br> | <br> | ||
+ | |||
== External Links == | == External Links == | ||
*[http://www.aquilinestudios.org/avsfilters/dotcrawl.html#tcomb Scintilla's Guide] - Additional usage information mainly for dot crawl. | *[http://www.aquilinestudios.org/avsfilters/dotcrawl.html#tcomb Scintilla's Guide] - Additional usage information mainly for dot crawl. | ||
+ | *[https://github.com/Elegant996/TComb GitHub] - Source code repository (v2.0 - Elegant996) | ||
+ | *[https://github.com/pinterf/TComb GitHub] - Source code repository (v2.1 - pinterf) | ||
<br> | <br> | ||
<br> | <br> |
Latest revision as of 19:02, 24 February 2021
Abstract | |
---|---|
Author | tritical, Elegant, pinterf |
Version | v2.3 |
Download | TComb-v2.1.7z |
Category | Rainbow & Dot Crawl Removal |
License | GPLv2 |
Discussion | Doom9 Forum |
Contents |
[edit] Description
TComb is a temporal comb filter (it reduces cross-luminance (dot crawl) and cross-chrominance (rainbows) artifacts in static areas of the picture). It will ONLY work with NTSC material, and WILL NOT work with telecined material where the rainbowing/dotcrawl was introduced prior to the telecine process! It must be used before IVTC or deinterlace in order to work. In terms of what it does it is similar to GuavaComb/DeDot.
TComb does support seeking... that is, jumping to a random frame will produce the same result as if you had linearly run up to that frame. For dot crawl removal TComb requires at least 3 static fields of the same parity and for rainbow removal TComb requires at least 5 static fields of the same parity.
[edit] Requirements
- [x86]: AviSynth+ or AviSynth 2.6
- [x64]: AviSynth+
- Supported color formats: Y8, YV12, YV16, YV24, YV411, YUY2
- *** vc_redist.x86.exe is required for TComb-x86
- *** vc_redist.x64.exe is required for TComb-x64
[edit] Syntax and Parameters
- TComb (clip, int "mode", int "fthreshL", int "fthreshC", int "othreshL", int "othreshC", bool "map", float "scthresh", bool "debug", int "opt")
- clip =
- Input clip.
- clip =
- int mode = 2
- Controls whether both luma/chroma are processed or only one or the other.
- Possible settings:
- int mode = 2
- 0 - process luma only (dot crawl removal)
- 1 - process chroma only (rainbow removal)
- 2 - process both
- int fthreshL = 4
- int fthreshC = 5
- Filtered pixel correlation thresholds.
- int fthreshL = 4
- One of the things TComb checks for is correlation between filtered values over the length of the filtering window. If all values differ by less than fthreshL (for luma) or fthreshC (for chroma) then the filtered values are considered to be correlated.
- Larger values will allow more filtering (will be more effective at removing rainbowing/dot crawl), but will also create more artifacts.
- Smaller values will produce less artifacts, but will be less effective in removing rainbowing/dot crawl. A good range of values is between 4 and 7.
- int othreshL = 5
- int othreshC = 6
- Original pixel correlation thresholds.
- int othreshL = 5
- One of the things TComb checks for is correlation between original pixel values from every other field of the same parity. Due to the oscillation period, these values should be equal or very similar in static areas containing dot crawl or rainbowing.
- If the pixel values differ by less than othreshL (for luma) or othreshC (for chroma) then the pixels are considered to be correlated.
- Larger values will allow more filtering (will be more effective at removing rainbowing/dotcrawl), but will also create more artifacts.
- Smaller values will produce less artifacts, but will be less effective in removing rainbowing/dotcrawl. A good range of values is between 4 and 8.
- bool map = false
- Identifies pixels that are being replaced with filtered values.
- Each pixel in the output frame will have one of the following values indicating how it is being filtered:
- bool map = false
- 0 - not being filtered
- 85 - [1 2 1] average of (n,n+1,n+2)
- 170 - [1 2 1] average of (n-2,n-1,n)
- 255 - [1 2 1] average of (n-1,n,n+1)
- ** n = current frame
- float scthresh = 12.0
- Scenechange threshold; sets the scenechange detection threshold as a percentage of maximum change on the luma plane.
- Use the debug output to see which frames are detected as scenechanges and the scenechange statistics.
- float scthresh = 12.0
- bool debug = false
- Will enable debug output. The only thing it shows are the scenechange stats.
- The info is output via OutputDebugString(). You can use the utility "DebugView" from sysinternals to view the output.
- The frame numbers in the debug output correspond to the input clip after a SeparateFields() call. TComb internally invokes SeparateFields() before itself and weave() after itself.
- bool debug = false
- int opt = -1
- Controls which cpu optimizations are used.
- Possible settings:
- int opt = -1
- 0 - use C routines
- other - automatically choose SSE2 or C
[edit] Basic Setup/Usage
Setting up TComb is pretty simple. The only values that would ever really need adjusting are fthreshL/fthreshC, othreshL/othreshC, and mode.
Set mode to 0 if you want to do dot crawl removal only, set it to 1 if you want to do rainbow removal only, or set it to 2 to do both.
Dot Crawl Removal Tweaking (fthreshL/othreshL):
To find good values for fthreshL/othreshL, start with the following line:
TComb(mode=0, fthreshL=255, othreshL=255)
Now, keep othreshL at 255 but set fthreshL down to 1. Keep increasing fthreshL in steps of 1 to 2 until you find the point at which all dot crawl is removed. Remember that value.
Next, set fthreshL back to 255, and set othreshL to 1. Now, increase othreshL in steps of 1 or 2 until you find the point at which all dot crawl is removed. You've now got values for fthreshL/othreshL.
Rainbowing Removal Tweaking (fthreshC/othreshC):
To find good values for fthreshC/othreshC, start with the following line:
TComb(mode=1, fthreshC=255, othreshC=255)
Now, keep othreshC at 255 but set fthreshC down to 1. Keep increasing fthreshC in steps of 1 to 2 until you find the point at which all (or most) rainbowing is removed. Remember that value.
Next, set fthreshC back to 255, and set othreshC to 1. Now, increase othreshC in steps of 1 or 2 until you find the point at which all (or most) rainbowing is removed. You've now got values for fthreshC/othreshC.
Once you've got values for mode, fthreshL/fthreshC, and othreshL/othreshC, add the necessary TComb() line into your script and run through part of it. If you see any artifacts try lowering your fthresh/othresh values.
[edit] Changelog
v2.3 (20210224 pinterf) Y8, YV16, YV24, YV411 support
v2.2 (20210223 - pinterf) Fix: unsave register x64 assembler causing artifacts Drop all external asm Rewrite assembler in SIMD intrinsics (old stuff is not removed yet, only conditionally ignored) Add CMake build system Add MinGW/gcc support Add linux support (with ENABLE_INTEL_SIMD=off option as well) Add build instructions to README.md
v2.1 (20210221 - pinterf) project forked to https://github.com/pinterf/TComb/ param 'opt' is back for debug. 0 means pure C code Fix bug in x64 assembler buildFinalMask_SSE2 Fix crash in 32bit version of VerticalBlur3_SSE2 Fix: scenechange SSE2 did not work Fix: x64 assembler HorizontalBlur6_SSE2 Fix: HorizontalBlur6: C only did top 2 lines. SSE2 bad top 2 lines Fix: HorizontalBlur3_SSE2 artifacts (both x86 and x64) Fix: HorizontalBlur3_SSE2 missing rounder (both x86 and x64) (now C and SSE2 is giving identical results) Code: Update to Visual Studio 2019 update to actual Avisynth+ headers clang-friendly code removed memcpy and bitblt variants replaced planarframes module with the one I updated in tivtc project for Avisynth+ and hbd preparation Fix debug build configuration in VS project settings
07/26/2015 v2.0.0.1 (Elegant996) + Corrected the masks used in HorizontalBlur6 for x64.
07/17/2015 v2.0 (Elegant996) * project moved to https://github.com/Elegant996/TComb/ + Removed buffering of frames/info that weren't actually used (was there for development/testing purposes). Should save a lot of RAM usage. + Switched to AVS 2.6 API since AviSynth 2.6.0 was released. + Added x64 support which also utilizes SSE2. This also includes some missing SSE2 functions (andNeighborsInPlace_SSE2). + Restructured debug and error messages so that it was apparent that TComb was responsible. - Removed MMX/ISSE support as times have changed and the support was not going to be carried over to x64. - Removed "opt" parameter. TComb will now use SSE2 if available and will fallback on C++ if it is not supported.
05/16/2006 v2.0 Beta 2 + Stricter checking of othreshL/othreshC when looking for oscillation + For dot crawl detection require at least one vertical neighbor (y-1/y+1, x-1/x/x+1) - fixed possible crash with yuy2 input (sse2 planar<->packed conversions)
03/31/2006 v2.0 Beta 1 - complete rewrite
06/24/2005 v0.9.0 - Initial Release
[edit] Archived Downloads
Version | Download | Mirror |
---|---|---|
v2.0 Beta 2 | TCombv2B2.zip |
[edit] External Links
- Scintilla's Guide - Additional usage information mainly for dot crawl.
- GitHub - Source code repository (v2.0 - Elegant996)
- GitHub - Source code repository (v2.1 - pinterf)
Back to External Filters ←