TCannyMod

From Avisynth wiki
Revision as of 05:03, 8 April 2018 by Yakub2.X (Talk | contribs)

Jump to: navigation, search
Abstract
Author Chikuzen
Version v1.3.0
Download TCannyMod-1.3.0.zip
Category Edge Detection
License GPLv2
Discussion Doom9 Thread

Contents

Description

TCannyMod is a Canny edge detection filter. It's based on tcanny written by Kevin Stone (a.k.a. tritical) but rewritten from scratch exclusively for AviSynth 2.6 / Avisynth+.

  • NOTE: TCannyMod requires appropriate memory alignments. Thus, if you want to crop the left side of your source clip before this filter, you have to set Crop(align=true).


Requirements


*** vcredist_x86.exe required for TCannyMod-x86
*** vcredist_x64.exe required for TCannyMod-x64


Syntax and Parameters


TCannyMod

Builds an edge map using Canny edge detection.

TCannyMod (clip, int "mode", float "sigma", float "t_h", float "t_l", bool "sobel", int "chroma", float "gmmax", int "opt")


clip   =
Input clip; only planar formats are supported.


int  mode = 0
Sets the output format:
  • 0 : thresholded edge map (255 for edge, 0 for non-edge)
  • 1 : gradient magnitude map.
  • 2 : edge pixel only gradient direction map (non-edge pixels set to 0)
  • 3 : gradient direction map
Gradient direction are normalized to 31, 63, 127 and 255.
31 = horizontal
63 = 45' up
127 = vertical
255 = 45' down
  • 4 : Gaussian blurred frame.


float  sigma = 1.5
Standard deviation of Gaussian blur. 0 means no blurring before edge detection.
(0 <= sigma <= 2.83, default = 1.5)


float  t_h = 8.0
float  t_l = 1.0
High and low gradient magnitude threshold for hysteresis; t_h must be greater than t_l.


bool  sobel = false
If set to true, edge detection will use a Sobel operator instead of [1, 0, -1].


int  chroma = 0
Chroma processing:
  • 0 : do not process
  • 1 : process
  • 2 : copy from input clip.
  • 3 : fill with 0x80(128), output is grayscale.
  • 4 : fill with 0.


float  gmmax = 255.0
Used for scaling gradient magnitude into [0,255] for mode=1.
gmmax is internally set to 1.0 if you set it to < 1.0.


opt  int = -1
Specify which CPU optimization are used:
  • 0 - Use SSE2 + SSE routine.
  • 1 - Use SSE4.1 + SSE2 + SSE routine if possible. If SSE4.1 can't be used, fallback to 0.
Others - use AVX2 + FMA3 + AVX routine if possible. If AVX2 can't be used, fallback to 1.




GBlur

Gaussian blur filter. Just an alias for TCannyMod(mode=4).

GBlur (clip, float "sigma", int "chroma", int "opt")


clip   =
Input clip; only planar formats are supported.


float  sigma = 0.5
Standard deviation of Gaussian blur. 0 means no blurring before edge detection.
(0 <= sigma <= 2.83, default = 0.5)


int  chroma = 1
Chroma processing:
  • 0 : do not process
  • 1 : process
  • 2 : copy from input clip.
  • 3 : fill with 0x80(128), output is grayscale.
  • 4 : fill with 0.


opt  int = -1
Specify which CPU optimization are used:
  • 0 - Use SSE2 + SSE routine.
  • 1 - Use SSE4.1 + SSE2 + SSE routine if possible. If SSE4.1 can't be used, fallback to 0.
Others - use AVX2 + FMA3 + AVX routine if possible. If AVX2 can't be used, fallback to 1.


EMask

Generate gradient magnitude edge map. Just an alias for TCannyMod(mode=1).

EMask (clip, float "sigma", float "gmmax", int "chroma", bool "sobel", int "opt")


clip   =
Input clip; only planar formats are supported.


float  sigma = 1.5
Standard deviation of Gaussian blur. 0 means no blurring before edge detection.
(0 <= sigma <= 2.83, default = 0.5)


float  gmmax = 50.0
Used for scaling gradient magnitude into [0,255] for mode=1.
gmmax is internally set to 1.0 if you set it to < 1.0.


int  chroma = 1
Chroma processing:
  • 0 : do not process
  • 1 : process
  • 2 : copy from input clip.
  • 3 : fill with 0x80(128), output is grayscale.
  • 4 : fill with 0.


bool  sobel = false
If set to true, edge detection will use a Sobel operator instead of [1, 0, -1].


opt  int = -1
Specify which CPU optimization are used:
  • 0 - Use SSE2 + SSE routine.
  • 1 - Use SSE4.1 + SSE2 + SSE routine if possible. If SSE4.1 can't be used, fallback to 0.
Others - use AVX2 + FMA3 + AVX routine if possible. If AVX2 can't be used, fallback to 1.


Examples

TCannyMod with default settings:

AviSource("blah.avi")
TCannyMod (mode=0, sigma=1.5, t_h=8.0, t_l=1.0, sobel=false, chroma=0, gmmax=255.0, opt=-1)


GBlur with default settings:

AviSource("blah.avi")
GBlur (sigma=0.5, chroma=1, opt=-1)


EMask with default settings:

AviSource("blah.avi")
EMask (sigma=1.5, gmmax=50.0, chroma=0, sobel=false, opt=-1)


Changelog

Version      Date            Changes
V1.3.0 07/04/2016 - Require AviSynth 2.6.0 / AviSynth+MT r2005 or later.
V1.2.0 05/25/2016 - Disable AVX2/FMA3/AVX code when /arch:AVX2 is not set. - Disable AVX2/FMA3/AVX code on Avisynth2.6. - Set filter mode as MT_NICE_FILTER on Avisynth+ MT. - Use buffer pool on Avisynth+ MT.
V1.1.1 04/03/2016 - Add AVX2 support for 32bit.
v1.1.0 03/28/2016 - Add EMask(). - Implement simd non-maximum-suppression. - a bit optimized gaussian-blur/ hysteresis.
v1.0.0 03/26/2016 - Almost rewrite. - VS2013 to VS2015. - Add AVX2(64bit only) / SSE4.1(both 32bit and 64bit) support. - Change direction values from 1,3,7,15 to 31,63,127,255. - Reduce waste processes.
v0.2.0 09/13/2015 - add option "gmmax" - update avisynth.h - VS2010 to VS2013 and code cosmetics
v0.1.1 08/21/2013 - fix crash when sigma is too large - add new argument 'sobel' - add new function 'GBlur'
v0.1.0 08/017/2013 - Initial release


External Links




Back to External Filters

Personal tools