LineDarkenToon
Filtro para Avisynth 2.5 destinado a oscurecer y refinar las líneas de los contornos o similares de los dibujos animados. Pero no posee sólo esta única función, al utilizar masktools, warpsharp y awarpsharp cumple con funcionalidades de limpieza y enfoque, logrando un mejoramiento de imagen bastante bueno, logrando mejorar ciertos desperfectos como por ejemplo los cuadros decolorados a partir de la información de la imagen deja el dibujo completo en forma óptima colorada como siempre debió ser.
Ejemplos:
Ejemplo 1
Original:
[
http://img38.imagefra.me/i57k/jcmc/dpoy_b69_ucgf5.png ]
Procesada:
[
http://img38.imagefra.me/i57k/jcmc/208r_111_ucgf5.png ]
Ejemplo 2
Original:
[
http://img38.imagefra.me/i57k/jcmc/dpoy_b5b_ucgf5.png ]
Procesada:
[
http://img38.imagefra.me/i57k/jcmc/208r_993_ucgf5.png ]
Filtros Necesarios:
WarpSharp
MaskTools2
aWarpSharp
Sintaxis:
linedarken_toon(sstrength, sdboost, srange, warpdepth, fast)
sstrength: Fuerza del filtro. Valores 255 a 0)
Por defecto: 180
sdboost: por lo que entendí, impulso o potencia de la profundidad que se aplica.
Por defecto: 1.0
Nota: si alguno de ustedes (MundoDivX) descubre bien a que hace referencia no como función, sino como término, corrijan la descripción de éste por favor. Gracias.
srange: lo que abarcará el filtrado.
Por defecto: 0
wdepth: hace referencia a la profundidad en que actuará el filtrado.
Por defecto: 8
fast: acelera, desacelera el filtrado. Valores: true, false.
Por defecto: false
*Para mejores resultados dejar el parámetro en false.
LineDarkenToon trabaja a una velocidad de entre 7 a 9 fps.
Ahora bien, dentro de este mismo filtro de funcionalidad, ya que es un filtro .avsi, que requiere de otros para funcionar y a su vez realizar un import con este mismo .avsi, podemos utilizar la funcionalidad de sharpen de forma independiente, el que nombrare de inmediato.
UnSharpMask(0, 0, 0)
La primera cifra hace referencia a la fuerza del enfoque que nos producirá en la imagen
La segunda cifra hace referencia a un borde blanquecino que ayuda a resaltar los bordes, siendo muy, muy leve su aparición.
La tercera cifra realmente no puedo decir a que va dirigido, porque lo he probado hasta con un valor de 300 y no sucede absolutamente nada, a menos que sea un complemento de la segunda cifra en cuanto a marcado, pero la verdad que no he notado cambio alguno ya sea dejando en 0, -1 o valores positivos superiores a 0 esta cifra.
Recomiendo usar la siguiente configuración:
1ra cifra: un mínimo de 10 con un máximo extremo de 23 a 24, después de 24 comienza a eliminar detalle de color por el sobrefiltrado, presentándose como puntos sin color en el cuerpo de la imagen. Siempre y cuando se trabaje junto con otros filtros pero al realizarlo de forma independiente (aplicando únicamente UnSharpMask) pueden trabajar fácilmente a un valor de 28 sin perder detalle alguno, lo que logra un mejor enfoque.
2da cifra: a partir de 0 hasta un máximo de 4 es suficiente, esto para que no afecte al video y no resalte tanto a l ojo humano, se verá si observamos con una lupa.
3ra cifra: dejarla en 0
Recomendado, trabajando junto con otros filtros:
UnSharpMask(20, 2, 0)
Trabaja a una velocidad de entre 12 a 28 fps, todo dependerá del valor que coloquen en el primer valor. A menor valor más rápido, a mayor valor más lento.
Script:
####################
## LineDarkenToon ##
####################
# LineDarkenToon use the idea of mf_toon (0.5) for linedarken.
# I wanted a really small fast code like FastLineDarken but with similar output like
# mf_toon and this is the result.
#
# needed filters:
# - WarpSharp
# - MaskTools v2
# - AWarpSharp
#
# Common parameters are sstrength, sdboost and srange.
# If speed is most important for you, test fast=true.
# With fast=true no edgemask will be created, just a simple fast weighting.
# But this looks imho still better than FastLineDarken.
function linedarken_toon(clip orig, float "sstrength", "sdboost", int "srange", "warpdepth", bool "fast")
{
###### parameters ######
sstr = string(default(sstrength, 180)/255.0)
srange = default(srange, 0)
sdboost = default(sdboost, 1.0)
wdepth = default(warpdepth, 8)
fast = default(fast, false)
###### filtering ######
sharp = orig.Unsharpmask(300, 4, 0)
orig.mt_edge(thy1=3,thy2=255,mode="prewitt",Y=3,V=1,U=1)
mt_lut("x "+string(srange)+" + 195 / 1.0 "+string(sdboost)+" / ^ 255 *",U=1,V=1).mt_inflate().mt_inflate().mt_inflate()
linemask = mt_lutxy(orig, last, yexpr="300 1 x 255 / - 255 y - * x 1.14 ^ + - "+sstr+" *", uexpr="x", vexpr="x")
fast==false ? mt_merge(orig, sharp, linemask, Y=3, U=2, V=2) :
\ mt_lutxy(orig,sharp,"x y < 40 y < | x y x - 1 x 255 / - 2 ^ * 1 y 128 / - 4 ^ * "+sstr+" * x + ?",U=2,V=2)
final = wdepth<=0 ? last : awarpsharp(last,cm=1,depth=wdepth,blurlevel=1)
return final
}