MaskTools v2
Přehled
Autoři : Kurosu, Manao, mg262
Verze : 2.0 alfa 36
Stáhnout : http://manao4.free.fr/,
http://www.avisynth.org/warpenterprises/
Kategorie : Různé pluginy
Požadavky : YV12 barevné prostředí
Obsah
I) Úvod
Soubor mt_masktools.dll obsahuje sadu filtrů navržených pro vytvoření masek, manipulaci a použití masek. Masky jsou ve
zpracování videa cestou jak dát relativní význam každému pixelu. Můžete například vytvořit
masku, která vybírá jen zelené části videa, a pak nahradí tyto části
jiným videem.
Aby byla co největší kontrola nad zacházením s maskami, budou filtry využívat fakt, že každá
jasová (luma) a barevnostní (chroma) plocha může být bez vzájemného vztahu (uncorrelated). To znamená, že jedno video bude vždy
považováno filtry za 3 nezávislé plochy. To platí také pro masky, což znamená
že maskovaný klip bude ve skutečnosti obsahovat 3 masky, jednu pro každou plochu.
Filtry mají sadu běžných parametrů, které se týkají hlavně toho jaké zpracování dělat na
každé ploše. Všechny pracují jen v YV12 ( přestože v Avisynthu 2.6 bude k dispozici podpora
všech planárních formátů ).
II) Běžné parametry
Jak bylo řečeno dříve, všechny filtry - kromě pomocných (helpers) - sdílí sadu běžných parametrů. Tyto parametry jsou použity
proto, aby se řeklo jaké zpracování provést na každé ploše / kanálu, a jakou oblast videa zpracovat.
- int "offx" (0), int "offy" (0)
"offx" a "offy" jsou horní levé souřadnice obdélníku, kde by mělo nastat skutečné zpracování.
Cokoli mimo obdélník bude odpadem.
- int "w" (-1), int "h" (-1)
w a h jsou šířkou a výškou zpracovávaného obdélníku. -1 znamená, že obdélník se rozšíří do
spodního pravého rohu videa. To také znamená, že výchozí nastavení jsou zamýšlena ke zpracování
celého obrazu.
- int "y" (3), int "u" (1), int "v" (1)
Tyto tři hodnoty popisují aktuální režim zpracování, který má být použit na každou plochu / kanál.
Zde je, jak jsou režimy kódovány :
- x=-255..0 : všechny pixely plochy budou nastaveny na -x.
- x=1 : plocha nebude zpracována. To znamená, že obsah plochy po filtru je čistý nesmysl (odpad).
- x=2 : plocha prvního vstupního klipu bude zkopírována.
- x=3 : plocha bude zpracována filtrem který je zadán.
- x=4 (pokud je použitelný) : plocha druhého klipu bude zkopírována.
- x=5 (pokud je použitelný) : plocha třetího klipu bude zkopírována.
Jak vidíte, výchozí parametry jsou voleny jen pro zpracování jasu (luma), a ne pro práci s barevností (chroma). Je to
proto, že většina zpracování videa se při práci s 4:2:0 nedotýká barevnosti.
- string "chroma" ("")
Když je zadán, hodnota obsažená v tomto řetězci přepíše režimy zpracování u & v . To je pěkný
doplněk navržený mg262, který dělá filtr přátelštější k uživateli. Dovolené hodnoty pro chroma jsou :
- "process" : nastaví u = v = 3.
- "copy" nebo "copy first" : nastaví u = v = 2.
- "copy second" : nastaví u = v = 4.
- "copy third" : nastaví u = v = 5.
- "xxx", kde xxx je číslo : nastaví u = v = -xxx.
III) Seznam filtrů
Zde je vyčerpávající seznam filtrů obsažených v této dll :
- Tvorba masek :
- Operace s maskami :
- Slučování masek :
- Morphologický operátor :
- Lut operátor :
- mt_lut : aplikuje výraz na všechny pixely masky / videa.
- mt_lutxy : aplikuje výraz na všechny pixely dvou masek / videí.
- mt_lutxyz : aplikuje výraz na všechny pixely tří masek / videí.
- mt_lutf : vytváří jednolitý obraz z kolekce výpočtu na pixelech dvou klipů.
- mt_luts : aplikuje výraz zahrnutím sousedních pixelů.
- mt_lutsx : aplikuje výraz zahrnutím sousedních pixelů jiným způsobem.
- mt_lutspa : počítá hodnotu pixelu v souladu s jeho prostorovou pozicí.
- Operátor podpory :
- Konvoluce :
- Pomocníci :
IV) Popis filtrů
mt_edge
mt_edge
: string mode("sobel"), int thY1(10), int thY2(10), int thC1(10), int thC2(10)
- mode volí 3x3 convoluční jádro použité pro výpočet masky. Jsou tři předdefinovaná jádra,
"sobel", "roberts" a "laplace", a můžete zadat také 3x3 uživatelské jádro. "sobel" používá
jádro "0 -1 0 -1 0 1 0 1 0", "roberts": "0 0 0 0 2 -1 0 -1 0" a "laplace": "1 1 1 1 -8 1 1 1 1".
Normalizační součinitel jádra je automaticky vypočten a nahrazen nejbližší mocninou 2,
pro umožnění rychlejšího zpracování. Můžete zadat váš vlastní normalizační faktor, jeho přidáním do seznamu
koeficientů ( například "1 1 1 1 -8 1 1 1 1 8" ).
- thX1 je nízká prahová hodnota a thX2 je vysoká prahová hodnota. Pod thX1, je pixel nastaven na nulu, nad thX2,
na 255, a když je mezi zůstane nedotčený.
- Později byly uvedeny tři nová jádra : "prewitt", "cartoon" a "min/max". "prewitt" je robustnější
jádro, zatímco "cartoon" se chová jako "roberts", ale zahrnuje jen záporné hrany.
Nakonec, "min/max" počítá lokální kontrast ( local max - local min ).
mt_motion
mt_motion
: int thY1(10), int thY2(10), int thC1(10), int thC2(10), int thT(10)
- thT rozhoduje zda je snímek změnou scény nebo ne. Maska je prázdná, pokud
je detekována změna scény, jinak je maska vypočítána.
- thX1, thX2 pracují jako u mt_edge.
mt_expand, mt_inpand
mt_xxpand
: int thY(255), int thC(255), string mode("square")
- Nahrazuje pixel lokálním maximem/minimem.
- thX umožňuje omezit maximální změnu.
- mode vybírá lokální okolí. Může brát hodnoty :
- "square" : 3x3 čtvercové okolí - isse optimalizace.
- "horizontal" : 3x1 horizontální okolí.
- "vertical" : 1x3 horizontální okolí.
- "both" : 3-délky napříč ( "horizontální" + "vertikální" ) okolí.
- uživatelský režim, kde udáváte seznam souřadnic. "0 0 -1 0 1 0" je například
ekvivalentní k "horizontal".
mt_inflate, mt_deflate
mt_xxflate
: int thY(255), int thC(255)
- Vypočte lokální průměr zahrnutím jen těch sousedů, jejichž hodnota je vyšší/nižší než hodnota pixelu.
mt_merge
mt_merge
: clip clip1, clip clip2, clip mask, bool "luma"(false)
- Je to páteří konstrukce (framework). Slučuje klipy v souladu s maskou. Čím větší je hodnota masky,
tím více se bude brát druhý klip ( aktuální formule je y = ((256 - m) * x1 + m * x2 + 128) / 256 )
- luma je speciální režim, kde je ke zpracování všech tří kanálů použita jen jasová plocha masky.
- u a v jsou nastaveny na výchozí 2 (tak výsledný klip obsahuje barevnost klipu clip1, a vypadá správně).
mt_lut
mt_lut
: string expr("x"), string yexpr("x"), string uexpr("x"), string vexpr("x")
- Aplikuje funkci definovanou parametrem expr na všechny pixely. Funkce je napsána v obráceném polském zápisu (reverse polish notation).
- Pokud yexpr, uexpr nebo vexpr není definován, použije se místo něj expr .
mt_lutxy
mt_lutxy
: clip clip1, clip clip2, string expr("x"), string yexpr("x"), string uexpr("x"), string vexpr("x")
- Aplikuje dvouparametrovou funkci definovanou parametrem expr na všechny pixely. Funkce je napsána v obráceném polském zápisu.
- Pokud yexpr, uexpr nebo vexpr není definován, použije se místo něj expr .
mt_lutxyz
mt_lutxyz
: clip clip1, clip clip2, clip clip3, string expr("x"), string yexpr("x"), string uexpr("x"), string vexpr("x")
- Aplikuje tříparametrovou funkci definovanou parametrem expr na všechny pixely. Funkce je napsána v obráceném polském zápisu.
- Pokud yexpr, uexpr nebo vexpr není definován, použije se místo něj expr .
mt_lutf
mt_lutf
: clip clip1, clip clip2, string mode("avg"), string expr("y"), string yexpr("y", string uexpr("y"), string vexpr("y")
- Vypočítá hodnotu shromážděním hodnot pixelů klipu clip1, v souladu s mode. Pak použije funkci
definovanou výrazy na všechny pixely klipu clip2 ( které jsou mapovány do proměnné y , zatímco je x shromážděnou hodnotou ).
- mode může být :
- "avg" nebo "average" : počítá průměr hodnot.
- "std" nebo "standard deviation" : počítá standardní odchylku hodnot.
- "min" : počítá minimum z hodnot.
- "max" : počítá maximum z hodnot.
- "range" : počítá "max" - "min".
- "med" nebo "median" : počítá střed (median) z hodnot.
- Možné použití je pro umožnění zvýšení dynamické adaptivity :
mt_lutf(c, c, mode = "range", expr = "y 128 - 256 * range / 128 +")
mt_luts
mt_luts
: clip clip1, clip clip2, string
mode("avg"), string pixels(""), string expr("x"), string yexpr("x"),
string uexpr("x"), string vexpr("x")
- Počítá operaci mode na výsledku funkce definované parametrem expr, kde x je pixel z clip1, a y
je pixel z okolí v klipu clip2, definované parametrem pixels.
- mode může brát stejné hodnoty jako pro
mt_lutf
.
- pixels je seznam souřadnic, relativních k aktuálním pixelům. Může být vytvořen jednou z forem pomocníků (helpers).
- Podívejme se na některá použití :
mt_luts( c, c, mode = "avg", pixels = mt_square( 1 ), expr = "y" )
provádí konvoluci s
3x3 jádrem.
mt_luts( c, c, mode = "min", pixels = mt_square( 1 ), expr = "y" )
provádí smrštění (inpand).
mt_luts( c, c, mode = "range", pixels = mt_square( 1 ), expr = "y" )
provádí mt_edge( mode = "min/max" )
.
mt_luts( c, c, mode = "std", pixels = mt_square( 1 ), expr = "y" )
dává lokální standardní odchylku klipu.
mt_luts( c, c, mode = "max", pixels = mt_square( 1 ), expr = "x y - abs" )
dává
maximální rozdíl mezi okolními pixely a středovým.
mt_luts( c, c, mode = "med", pixels = mt_square( 1 ), expr = "y" )
dává střed (median) pixelů
okolí.
mt_lutsx
mt_lutsx
: clip clip, clip clip1, clip clip2, string mode("avg"), string mode2("none"), string pixels(""), string expr("x"), string yexpr("x"), string uexpr("x"), string vexpr("x")
- Počítá mode na sousedních pixelech v clip1, a mode2 na sousedních pixelech v clip2,
pak použije funkci definovanou parametrem expr s y = mode a z = mode2.
- mode a mode2 mohou brát stejné hodnoty jako pro
mt_lutf
.
- pixels pracuje jako v
mt_luts
.
- Podívejme se na nějaké příklady :
mt_lutsx( c, c, c, mode = "min", mode2 = "max", pixels = mt_square( 1 ), expr = "z y -" )
počítá lokální max - min hodnotu.
mt_lutsx( c, c, c, mode = "min", mode2 = "max", pixels = mt_square( 1 ), expr = "x y - 256 * z y - /" )
mění lokální jasnost a konstrast tak, že lokální minimum je černé a lokální maximum je bílé.
mt_lutspa
mt_lutspa
: clip clip, bool("relative"), string expr("x"), string yexpr("x"), string uexpr("x"), string vexpr("x")
- Počítá hodnotu každého pixelu v souladu s jeho souřadnicemi a danou lut. Proměnné x a y v lut odpovídají
příslušným souřadnicím pixelu. relative, je výchozí true, indikuje zda
x & y by měly být absolutní (x v rozsahu 0 až šířka klipu, y od 0 až do výšky klipu), nebo relativní (x & y v rozsahu
od 0 do 1). Klip je použit jako šablona (pro výpočet snímku, šířky, výšky a barevného prostředí).
- Podívejme se na nějaké příklady :
mt_lutspa( c, relative = true, "x y + 256 * 2 /", chroma = "128" )
vytváří diagonální gradient.
mt_average
mt_average
: clip clip1, clip clip2
- Ekvivalent k
mt_lutxy("x y + 2 /")
, ale rychlejší.
mt_makediff
mt_makediff
: clip clip1, clip clip2
- Ekvivalent k
mt_lutxy("x y - 128 +")
, ale rychlejší.
mt_adddiff
mt_adddiff
: clip clip1, clip clip2
- Ekvivalent k
mt_lutxy("x y + 128 -")
, ale rychlejší.
mt_clamp
mt_clamp
: clip c, clip bright_limit, clip dark_limit, int overshoot(0), int undershoot(0)
- Vynutí, aby byla hodnota prvního klipu mezi bright_limit + overshoot a dark_limit - undershoot.
- Dává nežádoucí výsledky pokud je bright_limit + overshoot < dark_limit - undershoot.
mt_invert
mt_invert
: clip c
- Invertuje (obrací) hodnoty pixelů.
- Ekvivalent k
mt_lut("255 x -")
, ale rychlejší.
mt_binarize
mt_binarize
: clip c, int threshold(128), bool upper(false)
- Pokud je upper false, vynutí, aby všechny hodnoty, které jsou zjevně nad threshold byly 0, a všechny ostatní 255.
- Jinak vynutí, aby všechny hodnoty, které jsou zjevně nad threshold byly 255, a jinak 0.
- upper = true je ekvivalent pro
mt_lut("x threshold > 0 255 ?")
, ale rychlejší.
- upper = false je ekvivalent pro
mt_lut("x threshold > 255 0 ?")
, ale rychlejší.
mt_logic
mt_logic
: clip clip1, clip clip2, string mode("and")
- Aplikuje funkci definovanou parametrem mode na clip1 a clip2.
- Možné hodnoty pro mode jsou :
- "and" : provádí binární "and" na každém páru pixelů ( 11
& 5 je počítáno jejich převedním na binární číslo, a logickým součinem (and) všech
bitů : 11 = 1011, 5 = 101, 11 & 5 = 1 ).
- "or" : provádí binární "or" na každém páru pixelů ( 11 | 5 = 1011 | 101 = 1111 = 15 ).
- "xor" : provádí binární "xor" na každém páru pixelů ( 11 ^ 5 = 1011 ^ 101 = 1110 = 14 ).
- "andn" : provádí binární "and not" na každém páru pixelů ( 11 & ~5 = 1011 & ~101 = 1011 & 11111010 = 1010 = 10 ).
- "min" : dává minimum každého páru pixelů.
- "max" : dává maximum každého páru pixelů.
mt_hysteresis
mt_hysteresis
: clip small_mask, clip big_mask
- Prorůstá malou masku do velké masky spojovacími komponentami. To umožňuje sestavovat robustnější masky hran (obrysů).
mt_convolution
mt_convolution
: clip c, string horizontal("1 1 1"), string vertical("1 1 1"), bool saturate(true), float total(1.0f)
- Aplikuje na video konvoluci definovanou jádrem horizontalT x vertical.
- Jak horizontal tak vertical musí mít lichou délku.
- Výchozí normalizační hodnota je suma absolutních hodnot koeficientů jádra.
- Pokud je saturate true, výsledek konvoluce je oříznut do [0..255], jinak je oříznuta jeho absolutní hodnota do [0..255].
- Pokud je definováno total přepíše výchozí normalizační hodnotu.
- Výpočty se provádí jako desetinné jakmile je jeden element z horizontal nebo vertical desetinný (float).
mt_mappedblur
mt_mappedblur
: clip c, clip map, string kernel("1 1 1 1 1 1 1 1 1"), string mode("replace")
- Aplikuje konvoluční jádro na klip, ale zvláštním způsobem, v souladu s mode :
- "replace" : pokud se pixel liší o více než map od středového pixelu konvoluce, je nahrazen středovou hodnotou.
- "dump" : pokud se pixel liší o více než map od středového pixelu konvoluce, není zahrnut.
mt_square, mt_circle, mt_diamond
mt_square
: int radius(1), bool zero(true)
mt_circle
: int radius(1), bool zero(true)
mt_diamond
: int radius(1), bool zero(true)
- Vytváří seznam relativních souřadnic, který může být použit v
luts
, mt_expand
a mt_inpand
- zero rozhoduje zda střed formy je zahrnut nebo ne.
mt_rectangle, mt_ellipse, mt_losange
mt_rectangle
: int hor_radius(1), int ver_radius(1), bool zero(true)
mt_ellipse
: int hor_radius(1), int ver_radius(1), bool zero(true)
mt_losange
: int hor_radius(1), int ver_radius(1), bool zero(true)
- Vytváří seznam relativních souřadnic, který může být použit v
luts
, mt_expand
a mt_inpand
- zero rozhoduje zda střed formy je zahrnut nebo ne.
mt_freerectangle, mt_freeellipse, mt_freelosange
mt_freerectangle
: int top_x(-1), int top_y(-1), int bottom_x(1), int bottom_y(1), bool zero(true)
mt_freeellipse
: int top_x(-1), int top_y(-1), int bottom_x(1), int bottom_y(1), bool zero(true)
mt_freelosange
: int top_x(-1), int top_y(-1), int bottom_x(1), int bottom_y(1), bool zero(true)
- Vytváří seznam relativních souřadnic, který může být použit v
luts
, mt_expand
a mt_inpand
- zero rozhoduje zda (0,0) pixel je zahrnut nebo ne.
mt_polish
mt_polish
: string expr("x")
- Vytváří obrácený polský výraz (reverse polish expression) z běžného (infix).
V) Obrácený polský zápis (Reverse polish notation).
Hodně filtrů přijímá uživatelské funkce definované výrazem zapsaným v obráceném polském
zápisu. Nemusíte být zvyklí na tento zápis, takže zde je několik vodítek :
- Základní koncept zápisu je zapsat operátor / funkci za argumenty.
Takže, "x + y" v běžném zápisu se stane v obráceném polském "x y +". "(3 + 5) * x" by se stalo
"3 5 + x *".
- Jak jste si všimli v posledním příkladu, velkou výhodou tohoto zápisu je,
že nepotřebuje závorky. Výraz, který by byl uzavřen
v závorkách ( "3 + 5" ) je správně vypočítán, protože čteme
vyraz zleva doprava, a proto když se setkáme s "+" , jeho dva
operandy jsou neomylně známy.
- Podporované operátory jsou : "+", "-", "*", "/", "%" ( modulo ) a "^" (
power )
- Podporované funkce jsou : "sin", "cos", "tan", "asin", "acos", "atan",
"exp", "log", "abs", "round", "clip", "min", "max".
- Když budeme předpokládat, že kladné desetinné (float) číslo je "true", a záporné
je "false", můžeme také definovat logické operátory : "&", "|", "&!" (
a not ), "Â" ( xor ).
- Můžeme vytvořit logické hodnoty s následujícími operátory srovnávání:
"<", ">", "<=", ">=", "!=", "==", "=".
- Proměnné "x" a "y" ( když je použitelná ) obsahují hodnotu
pixelu. Je to celé číslo v rozsahu od 0 do 255.
- Může být použita konstanta "pi" .
- Nakonec, existuje trojitý (ternary) operátor : "?", který pracuje jako "if .. then
.. else .." ("jestliže .. pak .. jinak ..")
- Všechny výpočty jsou prováděny v desetinných číslech (floats), a konečný výsledek je zaokrouhlen
na nejbližší celé číslo v rozsahu [0..255].
- V celé dokumentaci najdete mnoho
příkladů.
VI) Seznam změn
Alpha 36 :
- fixed : "pi" wasn't properly defined for all luts
Alpha 35 :
Alpha 34 :
- added : support for interleaved2planar hack, enabling 422 support
- changed : both avisynth 2.5 and 2.6 version are built
Alpha 32 :
- added : mt_lutxyz
- added : mt_lutsx
- fixed : small memory leak in mt_luts
Alpha 31 :
- fixed : mt_hysteresis was randomly crashing.
- fixed : mt_polish is back.
- added : round, clip, min, max and = for lut.
- adapted : to msvc8 / yasm.
Alpha 30 :
- fixed : luts was crashing if some pixels didn't have any neighbours in the pixels list.
- added : mt_freerectangle, mt_freeellipse and mt_freelosange helpers.
Alpha 29 :
- fixed : intern float to integer conversion that were badly rounding negative number. That resulted in -1.0 been rounded into 0 (!). Most notably affected was mt_convolution. Thanks redfordxx for pointing that out.
Alpha 28 :
- fixed : mt_expand / mt_inpand / mt_convolution / mt_edge optimizations ( were borked
when width-16 was mod 64, and that could be noticed only with avs 2.5.7 )
Alpha 27 :
- fixed : mt_binarize asm optimizations that borked with some thresholds
Alpha 26 :
- fixed : avs closing issue.
Alpha 25 :
- added : new html documentation.
- fixed : wrong frame issue.
- fixed : mt_merge with luma=true.
Alpha 24 :
- fixed : issues with MT.dll ( thanks tsp, Boulder, vanessam and all those who suffered the bug ).
- fixed : check for YV12 colorspace, and report an error if it isn't ( thanks Boulder ).
- speed up : median mode for luts ( once again, thanks to tsp ).
Alpha 23 :
- fix & speed up : median mode, thanks to tsp's insightfull remark. Note to self : think
less like a mathematician, and more like a programmer. Simpler, faster & not bugged.
Alpha 22 :
- added : "med"/"median" mode to luts/lutf.
- changed : luts doesn't necessarily consider the center pixel.
- changed back : forms helpers prepends (0, 0).
- changed : forms helpers now have a bool "zero" parameter, defaulted to true.
- added : bool "luma" parameter to mt_merge, which makes it use the luma mask for
all three planes, and which forces chroma modes to "process" ( u=v=3 ).
Alpha 21 :
- fixed : two & three input clips filters where requesting wrong frames
leading to ghost artefacts.
Alpha 20 :
- fixed : huge bug preventing most filters from working.
Alpha 19 :
- code refactoring.
- fixed : bug with asm and width lower than 64.
- fixed : doesn't prepend (0, 0) pixel to the forms helpers.
- added : "min/max" mode to mt_edge. The edge value is local max - local min ( taken on a
3x3 square ).
- added : mt_lutf : a frame lut, see the description above.
- added : mt_luts : a spatial lut, see the description above.
Alpha 18 :
- added : mt_makediff, mt_adddiff, mt_average and mt_clamp, ported from mg262's
limitedsupport plugin. The asm code is his, though it has been ported to nasm. They
respectively amount to MakeDiff, AddDiff, SimpleAverage and Clamp.
- added : mt_edge : "prewitt" kernel, taken from mg262's Prewitt filter. Unlike mg262's filter,
there's no multiplier ( it's always 1 ), but mt_edge's thresholds still apply. Results,
and speed, are identical except for the borders, which are now filtered.
- added : "chroma" parameter, taken from mg262's excellent idea. It's a string that,
if used, overrides U and V values. It can be either "process", "copy", "copy first",
"copy second" or a number. "copy" and "copy second" work alike.
- added : vmToon-0.74, adapted to masktools 2.0.
- added : LimitedSharpenFaster, with LimitedSupport functions imported into the masktools.
Alpha 17 :
- changed : behavior of mt_edge with a custom kernel : the automatic normalization factor
is now the sum of the absolute value of the coefficients, ceiled to the next power of two
if that power is <= 128 ( else, it isn't ceiled ).
- added : cartoon mode for mt_edge.
- added : modified mfToon script, for masktools v2. mfToonLite's speed goes from 30 fps
to 70 fps, mfToon from 4.5 to 6.5.
Alpha 16 :
- fixed : some asm code used in invert, binarize and memset to a particular value.
Bug made the first 8 pixels of the picture to be incorrect. Also, avoid another nasty issue
that arise when cropping ( not my fault this time, though ).
Alpha 15 :
- fixed : bugs from inflate & deflate ( thx you know you ).
- reversed : inflate and deflate now match their masktools' v1 counterparts' behavior.
( if anybody used the new buggy one, let him speak quickly ).
Alpha 14 :
- fixed : random crashes with some width and asm functions ( thx Didee ).
Alpha 13 :
- fixed : mt_merge order swapped for mask operation ( no comment... ).
Alpha 12 :
- fixed : bug with some width ( mod4 ) for the non processing mode ( != 1 or 3 ).
- changed : mt_merge order swapped for mask operation.
Alpha 11 :
- fixed : mt_convolution's multiple instanciation bug.
Alpha 10 :
- fixed : offY was always set to offX.
- fixed : offset quirk.
- fixed : mt_convolution was crashing with floats.
- changed : luts' equal operator is now equivalent to abs(x-y) < 0.000001.
- added : bool saturate(true) parameter to mt_convolution.
- added : float total(1.0) parameter to mt_convolution.
Alpha 9 :
- fixed : mt_lut, mt_lutxy : even faster loading.
- fixed : mt_convolution : negative coefficients were offseted by 1.
- fixed : mt_convolution : division by zero if the sum of the coefficients was 0.
Alpha 8 :
- fixed : mt_edge in custom mode wasn't working properly.
- fixed : mt_edge in custom mode, optimized wasn't working properly either.
- fixed : mt_lutxy was slow to load, it's better now.
Alpha 7 :
- fixed : forgot to add functions to the parser. Thanks Didee for pointing that out.
Alpha 6 :
- fixed : mt_polish was having some trouble with functions.
Alpha 5 :
- added : helpers for creating string for inpand / expand custom modes :
- mt_circle
- mt_square
- mt_diamond
- mt_ellipse
- mt_rectangle
- mt_losange
- added : helper for lut : consersion from infix to reverse polish notation :
Alpha 4 :
- added : custom modes for inpand / expand.
Alpha 3 :
- Fixed : mt_invert, mt_binarize, mt_lutxy, which weren't working properly anymore.
- Fixed : offset created by incorrect rounding in mt_convolution.
- Fixed : mmx version of edges filters ( soft thresholding, and roberts ).
- Fixed : mmx version of motion edge ( soft thresholding ).
- added : mt_mappedblur.
Alpha 2 :
- added functions to luts : sin, abs, cos, tan, exp, log, acos, atan, asin.
- added "vertical", "horizontal" and "both" mode to mt_inpand / mt_expand.
- added mt_convolution.
- fixed mt_merge behavior for y, u, v = 2.
- added y, u, v = 4, for masked merge : copy the second clip channel. It's worth for any two clips input filters.
- internal changes ( code reorganization ).
Alpha 1 :
Český překlad:22.5.2009