Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. Doom9's Forum New Sharpening Function
 Register FAQ Calendar Search Today's Posts Mark Forums Read  9th June 2010, 08:58 #1  |  Link *.mp4 guy Registered User   Join Date: Feb 2004 Posts: 1,350 New Sharpening Function Examples : 4x nnedi2, 4x nnedi2 New Sharpening, 4x nnedi2 limitedsharpenfaster smode4, 4x nnedi2 ssssharp. Edit:Additional examples added, as requested. After reading this post by Didée I decided to take a crack at the problem of sharpening an interpolated or lowpassed image. Out of curiosity I tried the resulting function on a few difficult to sharpen non-interpolated sources (GITS R1 Special eddition, etc.), and it did very well (imo, of course). So here is a new, general sharpening function. Right now its named "blah". Because naming things is difficult, and naming it after what it is actually doing would require a paragraph long function call. Code: ```Function blah(Clip c, Int "str", int "strv", int "strh", float "de", float "dev", float "deh", float "re", float "rev", float "reh", float "cstr", float "cstrv", float "cstrh") {# A sharpening function, Version 0.0 str = Default(Str, 4) strv = Default(strv, str) strh = Default(strh, str) de = Default(de, 0.2) dev = Default(dev, de) deh = Default(deh, de) re = Default(re, de/2) rev = Default(rev, re) reh = Default(reh, re) cstr = Default(cstr, 0.5) cstrv = Default(cstrv, cstr) cstrh = Default(cstrh, cstr) de = 20/de dev = 20/dev deh = 20/deh re = 20/re rev = 20/rev reh = 20/reh thrc = 72 thrcv = thrc thrcH = thrc thr2gv = 1/sqrt(thrcv) thr2gh = 1/sqrt(thrch) lp_V = C.NLLV_Variant4() Diff_V = mt_makediff(C, lp_V) lp_H = lp_V.NLLH_Variant4() Diff_H = mt_makediff(lp_V, lp_H) dev_ = string(rev) deh_ = string(reh) DeEmphasis = lp_H.yahr.yahr.Mt_Convolution(Horizontal=" 1 6 15 "+deh_+" 15 6 1 ", vertical =" 1 6 15 "+dev_+" 15 6 1 ", u=1, v=1) STRV_ = string(strv) Max_V = mt_luts( C, C, mode = "max", pixels = " 1 0 -1 0 ", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+STRV_+" 1 >= "+STRV_+" 0.5 ^ "+STRV_+" ? + / - 128 +", u=1, v=1) Min_V = mt_luts( C, C, mode = "min", pixels = " 1 0 -1 0 ", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+STRV_+" 1 >= "+STRV_+" 0.5 ^ "+STRV_+" ? + / - 128 +", u=1, v=1) MinMax_High_V = mt_lutXY( Max_V, Min_V, expr = "x 128 - abs y 128 - abs > x y ? 128 - abs", u=1, v=1) MinMax_Low_V = mt_lutXY( Max_V, Min_V, expr = "x 128 - abs y 128 - abs > y x ? 128 - abs", u=1, v=1) minmax_UL_V = mt_lutXY( MinMax_Low_V, MinMax_High_V, expr = "x y x - -", u=1, v=1) minmax_G_V = Average(MinMax_High_V, 0.1, MinMax_Low_V, 0.35, minmax_UL_V, 0.275, minmax_UL_V, 0.275) STRH_ = string(strh) Max_H = mt_luts( C, C, mode = "max", pixels = " 0 1 0 -1 ", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+STRH_+" 1 >= "+STRH_+" 0.5 ^ "+STRH_+" ? + / - 128 +", u=1, v=1) Min_H = mt_luts( C, C, mode = "min", pixels = " 0 1 0 -1 ", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+STRH_+" 1 >= "+STRH_+" 0.5 ^ "+STRH_+" ? + / - 128 +", u=1, v=1) MinMax_High_H = mt_lutXY( Max_H, Min_H, expr = "x 128 - abs y 128 - abs > x y ? 128 - abs", u=1, v=1) MinMax_Low_H = mt_lutXY( Max_H, Min_H, expr = "x 128 - abs y 128 - abs > y x ? 128 - abs", u=1, v=1) minmax_UL_H = mt_lutXY( MinMax_Low_H, MinMax_High_H, expr = "x y x - -" ) minmax_G_H = Average(MinMax_High_H, 0.1, MinMax_Low_H, 0.35, minmax_UL_H, 0.275, minmax_UL_H, 0.275) Diff_V = mt_lutXY( Diff_V, minmax_G_V, expr = " x 128 - y 1 > y 1 ? * y x 128 - abs - 1 > y x 128 - abs - 1 ? / 128 + ", u=1, v=1) Diff_H = mt_lutXY( Diff_H, minmax_G_H, expr = " x 128 - y 1 > y 1 ? * y x 128 - abs - 1 > y x 128 - abs - 1 ? / 128 + ", u=1, v=1) Diff_HV = mt_adddiff(Diff_H, Diff_V) HPSharp = mt_adddiff(DeEmphasis, Diff_HV) rev_ = string(rev) reh_ = string(reh) ReEmphasis = HPSharp.Mt_Convolution(Horizontal=" 1 6 15 -"+reh_+" 15 6 1 ", vertical =" 1 6 15 -"+rev_+" 15 6 1 ", u=1, v=1) thrcv_ = string(thrcv) V = MT_Luts(ReEmphasis, ReEmphasis, mode="med", pixels = " 0 0 0 1 0 -1 0 2 0 -2 " ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrcv_+" 1 >= "+thrcv_+" 0.5 ^ "+thrcv_+" ? + / - 128 +", u=1,v=1).mt_Lut("X 128 - abs", u=1, v=1) thrch_ = string(thrch) H = MT_Luts(ReEmphasis, ReEmphasis, mode="med", pixels = " 0 0 1 0 -1 0 2 0 -2 0 " ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrch_+" 1 >= "+thrch_+" 0.5 ^ "+thrch_+" ? + / - 128 +", u=1,v=1).mt_Lut("X 128 - abs", u=1, v=1) Gauss_V = mt_Makediff(ReEmphasis, ReEmphasis.Mt_Convolution(Horizontal=" 1 ", vertical =" 1 6 15 20 15 6 1 ", u=1, v=1)) thr2gv_ = string(thr2gv) cstrv_ = string(cstrv) Gauss_V = mt_lutXY( Gauss_V, V, expr = " x 128 - y * "+thr2gv_+" * "+cstrv_+" * 128 + ", u=1, v=1) Gauss_H = mt_Makediff(ReEmphasis, ReEmphasis.Mt_Convolution(Horizontal=" 1 6 15 20 15 6 1 ", vertical =" 1 ", u=1, v=1)) thr2gh_ = string(thr2gh) cstrh_ = string(cstrh) Gauss_H = mt_lutXY(Gauss_H, H, expr = " x 128 - y * "+thr2gh_+" * "+cstrh_+" * 128 + ", u=1, v=1) Gauss_VH = mt_adddiff(Gauss_V, Gauss_H) contrast = mt_adddiff(ReEmphasis, Gauss_VH) Return(mergechroma(contrast, C, 1)) }``` Required Functions: Code: ```Function blurH(clip c, int "rad", Float "CW") { Rad = Default(rad, 1) CW = Default(CW, 0.5) Center = C Left = C.PointResize(C.width, C.height, -rad, 0, C.width, C.height) Right = C.PointResize(C.width, C.height, rad, 0, C.width, C.height) Average(Center, CW/2, Left, (1-CW)/2, Right, (1-CW)/2, Center, CW/2) Return(last) } Function BlurV(clip c, int "rad", Float "CW") { Rad = Default(rad, 1) CW = Default(CW, 0.5) Center = C Down = C.PointResize(C.width, C.height, 0, -rad, C.width, C.height) Up = C.PointResize(C.width, C.height, 0, rad, C.width, C.height) Average(Center, CW/2, Down, (1-CW)/2, Up, (1-CW)/2, Center, CW/2) Return(last) } Function NLLH_Variant4(Clip C, int "rad") { Rad = Default(Rad, 1) B1 = C.BlurH(1*rad, 0.439) B2 = C.BlurH(2*rad, 0.833) B3 = C.BlurH(3*rad, 0.934) B4= C.BlurH(4*rad, 0.983) B1_D = Mt_Makediff(B1, C, u=1, v=1) B2_D = Mt_MakeDiff(C, B2, u=1, v=1) B3_D = Mt_MakeDiff(B3, C, u=1, v=1) B4_D = Mt_MakeDiff(C, B4, u=1, v=1) B2_DT = Mt_LutXY(B1_D, B2_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 1.915 * X 128 - abs - 0 > \ Y 128 - abs 1.915 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) B3_DT = Mt_LutXY(B2_DT, B3_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 2.025 * X 128 - abs - 0 > \ Y 128 - abs 2.025 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) B4_DT = Mt_LutXY(B3_DT, B4_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 2.077 * X 128 - abs - 0 > \ Y 128 - abs 2.077 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) Mt_AddDiff(B4_DT, C) Return(last) } Function NLLV_Variant4(Clip C, int "rad") { Rad = Default(Rad, 1) B1 = C.BlurV(1*rad, 0.439) B2 = C.BlurV(2*rad, 0.833) B3 = C.BlurV(3*rad, 0.934) B4= C.BlurV(4*rad, 0.983) B1_D = Mt_Makediff(B1, C, u=1, v=1) B2_D = Mt_MakeDiff(C, B2, u=1, v=1) B3_D = Mt_MakeDiff(B3, C, u=1, v=1) B4_D = Mt_MakeDiff(C, B4, u=1, v=1) B2_DT = Mt_LutXY(B1_D, B2_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 1.915 * X 128 - abs - 0 > \ Y 128 - abs 1.915 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) B3_DT = Mt_LutXY(B2_DT, B3_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 2.025 * X 128 - abs - 0 > \ Y 128 - abs 2.025 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) B4_DT = Mt_LutXY(B3_DT, B4_D, " X 128 - Y 128 - X 128 - abs Y 128 - abs * 1 + * X 128 - abs Y 128 - abs * Y 128 - abs 2.077 * X 128 - abs - 0 > \ Y 128 - abs 2.077 * X 128 - abs - 0 ? X 128 - abs 0 > X 128 - abs -1 X 128 - abs 0 > X 128 - 1 ? / ^ 1 ? / 1 * + 1 + / + 128 + ", u=1, v=1) Mt_AddDiff(B4_DT, C) Return(last) } # Y'et A'nother H'alo R'educing script function YAHR(clip clp) { b1 = clp.minblur(2).removegrain(11,-1) b1D = mt_makediff(clp,b1) w1 = clp.aWarpSharp(depth=32,blurlevel=2,thresh=0.5) w1b1 = w1.minblur(2,1).removegrain(11,-1) w1b1D = mt_makediff(w1,w1b1) DD = b1D.repair(w1b1D,13) DD2 = mt_makediff(b1D,DD) clp.mt_makediff(DD2,U=2,V=2) } function MinBlur(clip clp, int r, int "uv") { uv = default(uv,3) uv2 = (uv==2) ? 1 : uv rg4 = (uv==3) ? 4 : -1 rg11 = (uv==3) ? 11 : -1 rg20 = (uv==3) ? 20 : -1 medf = (uv==3) ? 1 : -200 RG11D = (r==1) ? mt_makediff(clp,clp.removegrain(11,rg11),U=uv2,V=uv2) \ : (r==2) ? mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20),U=uv2,V=uv2) \ : mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20).removegrain(20,rg20),U=uv2,V=uv2) RG4D = (r==1) ? mt_makediff(clp,clp.removegrain(4,rg4),U=uv2,V=uv2) \ : (r==2) ? mt_makediff(clp,clp.medianblur(2,2*medf,2*medf),U=uv2,V=uv2) \ : mt_makediff(clp,clp.medianblur(3,3*medf,3*medf),U=uv2,V=uv2) DD = mt_lutxy(RG11D,RG4D,"x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?",U=uv2,V=uv2) clp.mt_makediff(DD,U=uv,V=uv) return(last) }``` Required plugins: Mt_Masktools, Average, Removegrain, aWarpSharp, Medianblur and Repair. Defaults are intended for strong sharpening on 2x upscaled material. For normal sharpening, set de to 0.02, str to 3 and cstr to 0.75 and go from there. The failure modes are as graceful as I can reasonably get them, considering the strength of the sharpening required. Also, the degree of sharpening that can be "gotten away with" varies pretty wildly by source. parameters: str = strength of highpass sharpening default 4 strv = vertical version of str defaults to str strh = horizontal version of str defaults to str de = de-emphasis strength default 0.2 dev = vertical version of de defaults to de deh = horizontal version of de defaults to de re = re-emphasis strength defaults to de/2 rev = vertical version of re defaults to re reh = horizontal version of re defaults to re cstr = strength of contrast sharpening default 1, values above 1 will cause halos cstrv = vertical version of cstr defaults to cstr cstrh = horizontal version of cstr defaults to cstr edit: thanks to Archimedes and Gavino for spotting two mistakes, both should now be fixed. edit2: Changed non-linear lowpass function, new one should be generally more consistent Last edited by *.mp4 guy; 10th June 2010 at 23:47.   9th June 2010, 14:21 #2  |  Link rkalwaitis Robert   Join Date: Jan 2008 Location: Stuttgart Posts: 407 Medianblur function?   9th June 2010, 15:03 #3  |  Link Archimedes Registered User   Join Date: Apr 2005 Posts: 213 Requirements should be: Code: ```LoadPlugin("plugins\Average\src\Release\Average.dll") LoadPlugin("plugins\aWarpSharp\aWarpSharp.dll") LoadPlugin("plugins\MaskTools 2\mt_masktools.dll") LoadPlugin("plugins\MedianBlur\medianblur.dll") LoadPlugin("plugins\RemoveGrain 1.0\RemoveGrain.dll") LoadPlugin("plugins\RemoveGrain 1.0\Repair.dll")```   9th June 2010, 15:39 #4  |  Link Gser Registered User   Join Date: Apr 2008 Posts: 417 How about adding LSFmod and SSSharpen to the comparison?   9th June 2010, 15:57   #5  |  Link
Gavino
Avisynth language lover

Join Date: Dec 2007
Location: Spain
Posts: 3,420
Quote:
 Originally Posted by *.mp4 guy Code: ``` strv = Default(Str, 4) strh = Default(Str, 4)```
There's an obvious bug there; any values explicitly supplied for strv and strh are ignored and str used in their place. Should be
Code:
```		strv = Default(strv, str)
strh = Default(strh, str)```   10th June 2010, 00:43 #6  |  Link foxyshadis ангел смерти Join Date: Nov 2004 Location: Lost Posts: 9,565 I always like your style, mp4 guy. Keep throwing luts at the problem, pare it down to what works, figure out why and use that to start the process again. I'll give this a shot tonight, though I have a feeling it's not going to work in realtime at all.   10th June 2010, 23:43   #7  |  Link
*.mp4 guy
Registered User

Join Date: Feb 2004
Posts: 1,350
Examples from GITS

Code:
```MPEG2Source("K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", cpu=0, info=3).colormatrix(hints=true).crop(8, 16, -8, -16)
TFM(slow=2, clip2=clip2, d2v="K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", pp=7)
tdecimate()```

Code:
```MPEG2Source("K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", cpu=0, info=3).colormatrix(hints=true).crop(8, 16, -8, -16)
TFM(slow=2, clip2=clip2, d2v="K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", pp=7)
tdecimate()

Mt_Convolution(Horizontal=" 1 6 15 -112 15 6 1 ", vertical =" 1 ", u=2, v=2)#horizontal unsharpmask

limitedsharpenfaster(smode=4, strength=100)```

Code:
```MPEG2Source("K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", cpu=0, info=3).colormatrix(hints=true).crop(8, 16, -8, -16)
TFM(slow=2, clip2=clip2, d2v="K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", pp=7)
tdecimate()

Mt_Convolution(Horizontal=" 1 6 15 -112 15 6 1 ", vertical =" 1 ", u=2, v=2)#horizontal unsharpmask

sssharp(denoise=0)```

Code:
```MPEG2Source("K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", cpu=0, info=3).colormatrix(hints=true).crop(8, 16, -8, -16)
TFM(slow=2, clip2=clip2, d2v="K:\GITS_D1\VIDEO_TS\VTS_01_1.d2v", pp=7)
tdecimate()

Mt_Convolution(Horizontal=" 1 6 15 -112 15 6 1 ", vertical =" 1 ", u=2, v=2)#horizontal unsharpmask

blah(de=0.2, deh=0.025, rev=0.025, str=3, strh=12, cstrv=0.66, cstrh=1)```

Aster some testing I've switched out the non linear lowpass with a different variant (updated in first post). Also, If blah doesn't work for you guys, tell me now so I can see if its tunable, or if its just too fiddly to get good results. If you just don't like what it does, that's fine too. Basically what I want to know is if its usable for anyone else.

Quote:
 Originally Posted by foxyshadis I'll give this a shot tonight, though I have a feeling it's not going to work in realtime at all.
I was thinking about calling it epochsharpen, but I think its actually turned out faster then sssharp. It really pays to avoid that 4x supersampling, especially in RAM usage.

Last edited by *.mp4 guy; 11th June 2010 at 00:12. Reason: clarity   16th June 2010, 00:58 #8  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 To my eyes blah has less haloing at the expense of less texture in relation to lsf and sssharp.   16th June 2010, 03:22   #9  |  Link
*.mp4 guy
Registered User

Join Date: Feb 2004
Posts: 1,350
Quote:
 Originally Posted by markanini To my eyes blah has less haloing at the expense of less texture in relation to lsf and sssharp.
When it sharpens texture it usually does it better imo, but it is less likely to sharpen texture then sssharp, and to an extent, lsf as well. However, I almost always prefer non-sharpened texture when doing upscaling as compared to what sssharp and lsf can do, so for me it is an all around improvement. The reduction in haloing is not directly linked to the difference in texture sharpening. It's possible to get similar texture sharpening from the underlying mechanisms, without halos, but its bad for other reasons.

Edit: Here is a question in return.

Is the reduction in sharpening strength good or bad in your opinion?

Last edited by *.mp4 guy; 16th June 2010 at 06:34.   16th June 2010, 21:18 #10  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 I mostly use sharpening in avsynth on upscaled still images via FritzPhoto, much like the examples you posted. I found the lack of texture was a let down to be honest. Also it seem to overemphasize speckle like features and "stray pixels". But then it's remarkably immune to halos so I'll keep my eye on any developments.   18th June 2010, 10:26 #11  |  Link *.mp4 guy Registered User   Join Date: Feb 2004 Posts: 1,350 Alright, new spin off function. Pretty much just a general purpose sharpener now, but imo better then medsharp or sssharp. Also, better name then blah. Code: ```Function ReCon(clip c, float "str", float "strv", float "strh", float "rad", float "radh", float "radv", int "lmode", int "thresh") {#Reconvolution - makes things sharp by mixing pixels together str = Default(str, 4) strv = Default(strv, str) strh = Default(strh, str) Rad = Default(Rad, 2) Radv = Default(Radv, Rad) Radh = Default(Radh, Rad) lmode = Default(lmode, 1) thresh = Default(thresh, 720) thrc = thresh thrcv = thrc thrcH = thrc thr2gv = 1/sqrt(thrcv) thr2gh = 1/sqrt(thrch) str_ = thresh strv_ =str_ strh_ = str_ thrm = thresh thrm_ = string(thrm) Max_V = Radv == 0.5 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : C Max_V = Radv == 1 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Max_V = Radv == 1.5 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Max_V = Radv == 2 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Max_V = Radv == 2.5 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Max_V = Radv == 3 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Max_V = Radv == 4 ? mt_luts( C, C, mode = "max", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_V Min_V = Radv == 0.5 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : C Min_V = Radv == 1 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V Min_V = Radv == 1.5 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V Min_V = Radv == 2 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V Min_V = Radv == 2.5 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V Min_V = Radv == 3 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V Min_V = Radv == 4 ? mt_luts( C, C, mode = "min", pixels = "0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_V thrcv_ = string(thrcv) Med_V = Radv == 0.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : C Med_V = Radv == 1 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Radv == 1.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2 0 3 0 -3" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Radv == 2 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Radv == 2.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Radv == 3 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Radv == 4 ? MT_Luts(C, C, mode="med", pixels = "0 0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_V Med_V = Med_V.mt_Lut("X 128 - abs", u=1, v=1) MinMax_High_V = mt_lutXY( Max_V, Min_V, expr = "x 128 - abs y 128 - abs > x y ? 128 - abs", u=1, v=1) MinMax_Low_V = mt_lutXY( Max_V, Min_V, expr = "x 128 - abs y 128 - abs > y x ? 128 - abs", u=1, v=1) minmax_UL_V = mt_lutXY( MinMax_Low_V, MinMax_High_V, expr = "x y x - -", u=1, v=1) minmaxmed_v = Average(MinMax_High_V, 0.0625, MinMax_Low_V, 0.25, minmax_UL_V, 0.34375, Med_V, 0.34375) STRH_ = string(strh_) Max_H = Radh == 0.5 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : C Max_H = Radh == 1 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Max_H = Radh == 1.5 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Max_H = Radh == 2 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Max_H = Radh == 2.5 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Max_H = Radh == 3 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Max_H = Radh == 4 ? mt_luts( C, C, mode = "max", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Max_H Min_H = Radh == 0.5 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : C Min_H = Radh == 1 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H Min_H = Radh == 1.5 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H Min_H = Radh == 2 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H Min_H = Radh == 2.5 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H Min_H = Radh == 3 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H Min_H = Radh == 4 ? mt_luts( C, C, mode = "min", pixels = "1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8 0", expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1, v=1) : Min_H thrch_ = string(thrch) Med_H = Radh == 0.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : C Med_H = Radh == 1 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Radh == 1.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Radh == 2 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Radh == 2.5 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Radh == 3 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Radh == 4 ? MT_Luts(C, C, mode="med", pixels = "0 0 1 0 -1 0 2 0 -2 0 3 0 -3 0 4 0 -4 0 5 0 -5 0 6 0 -6 0 7 0 -7 0 8 0 -8 0" ,expr = "X Y - X Y - X Y - abs 1 + * X Y - abs 1 + "+thrm_+" 1 >= "+thrm_+" 0.5 ^ "+thrm_+" ? + / - 128 +", u=1,v=1) : Med_H Med_H = Med_H.mt_Lut("X 128 - abs", u=1, v=1) MinMax_High_H = mt_lutXY( Max_H, Min_H, expr = "x 128 - abs y 128 - abs > x y ? 128 - abs", u=1, v=1) MinMax_Low_H = mt_lutXY( Max_H, Min_H, expr = "x 128 - abs y 128 - abs > y x ? 128 - abs", u=1, v=1) minmax_UL_H = mt_lutXY( MinMax_Low_H, MinMax_High_H, expr = "x y x - -" ) minmaxmed_h = Average(MinMax_High_h, 0.0625, MinMax_Low_h, 0.25, minmax_UL_h, 0.34375, Med_h, 0.34375) Blur_V = C.NLLV_variant4() Blur_V = Rad > 1 ? Blur_V.NLLV_variant4(2) : Blur_V Blur_V = Rad > 2 ? Blur_V.NLLV_variant4(3) : Blur_V Blur_V = Rad > 3 ? Blur_V.NLLV_variant4(4) : Blur_V Sharp_Diff_V = mt_Makediff(C, Blur_V) thr2gv_ = string(thr2gv) cstrv_ = string(strv) Sharp_V = lmode == 0 ? mt_lutXY(Sharp_Diff_V, minmaxmed_v, expr = " x 128 - y * "+thr2gv_+" * "+cstrv_+" * 128 + ", u=1, v=1) : C Sharp_V = lmode == 1 ? mt_lutXY(Sharp_Diff_V, minmaxmed_v, expr = " x 128 - abs y > x 128 - y * "+thr2gv_+" * "+cstrv_+" * 128 + X 128 - y 0.5 ^ * "+thr2gv_+" 0.5 ^ * "+cstrv_+" * 128 + ? ", u=1, v=1) : Sharp_V Sharp_V = lmode == 2 ? mt_lutXY(Sharp_Diff_V, minmaxmed_v, expr = " x 128 - abs y > x 128 - y * "+thr2gv_+" * "+cstrv_+" * 128 + Y 0 > X 128 - "+cstrv_+" * 128 + 128 ? ? ", u=1, v=1) : Sharp_V Sharp_V = lmode == 3 ? mt_lutXY(Sharp_Diff_V, minmaxmed_v, expr = " x 128 - abs y > x 128 - y * "+thr2gv_+" * "+cstrv_+" * 128 + X 128 - "+cstrv_+" * 128 + ? ", u=1, v=1) : Sharp_V Sharp_V = lmode == 4 ? mt_lutXY(Sharp_Diff_V, minmaxmed_v, expr = " x 128 - "+cstrv_+" * 128 + ", u=1, v=1) : Sharp_V Blur_H = C.NLLH_variant4() Blur_H = Rad > 1 ? Blur_H.NLLH_variant4(2) : Blur_H Blur_H = Rad > 2 ? Blur_H.NLLH_variant4(3) : Blur_H Blur_H = Rad > 3 ? Blur_H.NLLH_variant4(4) : Blur_H Sharp_Diff_H = mt_Makediff(C, Blur_H) thr2gh_ = string(thr2gh) cstrh_ = string(strh) Sharp_H = lmode == 0 ? mt_lutXY(Sharp_Diff_H, minmaxmed_h, expr = " x 128 - y * "+thr2gh_+" * "+cstrh_+" * 128 + ", u=1, v=1) : C Sharp_H = lmode == 1 ? mt_lutXY(Sharp_Diff_H, minmaxmed_h, expr = " x 128 - abs y > x 128 - y * "+thr2gh_+" * "+cstrh_+" * 128 + X 128 - y 0.5 ^ * "+thr2gh_+" 0.5 ^ * "+cstrh_+" * 128 + ? ", u=1, v=1) : Sharp_H Sharp_H = lmode == 2 ? mt_lutXY(Sharp_Diff_H, minmaxmed_h, expr = " x 128 - abs y > x 128 - y * "+thr2gh_+" * "+cstrh_+" * 128 + Y 0 > X 128 - "+cstrh_+" * 128 + 128 ? ? ", u=1, v=1) : Sharp_H Sharp_H = lmode == 3 ? mt_lutXY(Sharp_Diff_H, minmaxmed_h, expr = " x 128 - abs y > x 128 - y * "+thr2gh_+" * "+cstrh_+" * 128 + X 128 - "+cstrh_+" * 128 + ? ", u=1, v=1) : Sharp_H Sharp_H = lmode == 4 ? mt_lutXY(Sharp_Diff_H, minmaxmed_h, expr = " x 128 - "+cstrh_+" * 128 + ", u=1, v=1) : Sharp_H Sharp_VH = mt_adddiff(Sharp_V, Sharp_H) sharpened = mt_adddiff(C, Sharp_VH) sharpened.mergechroma(C, 1) Return(last) }``` Same depdendencies as blah, minus yahr and minblur related stuff. Rad - radius of sharpening str - strength lmode - limit mode, 0 strong limiting, 3 minimal limiting. Default 1. Also, I'm curious if rad 4 ever works better then rad 3. update: added lmode 4 Last edited by *.mp4 guy; 20th June 2010 at 07:35.   18th June 2010, 11:14 #12  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 Hmm, no function named NLLV_variant4. What am I missing? NEVERMIND: Missed the 'required functions' in OP. Last edited by markanini; 18th June 2010 at 11:17.   19th June 2010, 17:17 #13  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 Been testing Recon on a few web sized digicam and camera phone photos and I'm finding results are really pleasant and settings are simple and intuitive. I can see my self reachng for ReCon for most photos now. I'll still use lsfmod and sssharp for difficult sources and maximizing texture respectively. ReCon is in my eye the better general purpose sharpener now. Hats off for you *.mp4 guy!   20th June 2010, 06:42 #14  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 I tested ReCon on a highly defocused digicam photo. Scaled down to 1/6th for speedy processing and levels tweaked with smoothlevels: With ReCon I settled on str=3, rad=28, lmode=2:    20th June 2010, 07:33 #15  |  Link *.mp4 guy Registered User   Join Date: Feb 2004 Posts: 1,350 Using a radius above 4 is not supported. If a radius above 4 is selected, mask generation is disabled (clip c is used instead). Radii above 4 are not supported because they become unusably slow, and the limiting method breaks down. In this case, the blur is too much, and the limiting fails. In light of this I have added an unlimited mode, lmode=4, as upon further testing, the sharpening kernel performs better then unsharp masking on this source. try theses settings with the updated version: ReCon(rad=4, str=3, lmode=4) Also, let me restate, rads that are not equal to 0.5, 1, 1.5, 2, 2.5, 3 or 4 do not function properly. Last edited by *.mp4 guy; 20th June 2010 at 07:36.   22nd June 2010, 07:32 #16  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 I like the lmode range in the updated version ! I tried the blurry butterfly photo wih the new version was ab improvement. But I'm guessing you'd have to downscale that image further for a 4 pixel radius to fit.... Rather than talking about my special case I want to report that ReCon seems susceptible to alising in some sources, more so than lsfmod and sssharp. Last edited by markanini; 22nd June 2010 at 07:58.   22nd June 2010, 07:56 #17  |  Link markanini Registered User   Join Date: Apr 2006 Posts: 299 Notice how transitions beteen white spots look cleaner in updated version.   22nd June 2010, 14:53   #18  |  Link
Archimedes
Registered User

Join Date: Apr 2005
Posts: 213
Quote:
 Originally Posted by markanini Rather than talking about my special case I want to report that ReCon seems susceptible to alising in some sources, more so than lsfmod and sssharp.
Seems, supersampling is needed. Normally, I don't like the results, when supersampling was used beforehand on normal sharpening tasks. That's why I prefer SSSharp(ssw=False) or SeeSaw for normal sharpening tasks (even with stronger settings you don't need any supersampling). But that's a question of personal taste.

However, on such blurred sources, antialiasing with supersampling afterwards (e. g. with NNEDI2) is not bad at all (if supersampling beforehand isn't a choice).

ReCon(rad=4, str=4, lmode=4) + NNEDI2 + Spline36Resize >>

Last edited by Archimedes; 22nd June 2010 at 14:58.   22nd June 2010, 15:41   #19  |  Link
Didée
Registered User

Join Date: Apr 2002
Location: Germany
Posts: 5,393
Quote:
 Originally Posted by Archimedes Normally, I don't like the results, when supersampling was used beforehand on normal sharpening tasks.
There's always the possibility to perform supersampling without affecting the basic source by the supersampling process. It's not even much more difficult.

source -> upsize -> filter -> downsize

one would do

1) source -> upsize -> filter
2) get difference(upsize,filtered)
3) source.apply(difference.downsize)

This way, the supersampling process affects only (well, mostly) the difference of the filter, not the source material in itself.
__________________
- We´re at the beginning of the end of mankind´s childhood -

My little flickr gallery. (Yes indeed, I do have hobbies other than digital video!)   22nd June 2010, 16:53 #20  |  Link Archimedes Registered User   Join Date: Apr 2005 Posts: 213 Things can be so easy. That will minimize the blur causing by the interpolation (up- and downscaling), indeed. But that's not the fly in the ointment (© http://www.leo.org). It's much more the "difference.downsize" which I dislike in combination with normal sharpening.   Thread Tools Search this Thread Show Printable Version Email this Page Search this Thread: Advanced Search Display Modes Linear Mode Switch to Hybrid Mode Switch to Threaded Mode Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is Off Forum Rules
 Forum Jump User Control Panel Private Messages Subscriptions Who's Online Search Forums Forums Home Announcements and Chat     General Discussion     News     Forum / Site Suggestions & Help General     Decrypting     Newbies     DVD2AVI / DGIndex     Audio encoding     Subtitles     Linux, Mac OS X, & Co Capturing and Editing Video     Avisynth Usage     Avisynth Development     VapourSynth     Capturing Video     DV     HDTV / DVB / TiVo     NLE - Non Linear Editing     VirtualDub, VDubMod & AviDemux     New and alternative a/v containers Video Encoding     (Auto) Gordian Knot     MPEG-4 ASP     MPEG-4 Encoder GUIs     MPEG-4 AVC / H.264     High Efficiency Video Coding (HEVC)     New and alternative video codecs     MPEG-2 Encoding     VP9 and AV1 (HD) DVD, Blu-ray & (S)VCD     One click suites for DVD backup and DVD creation     DVD & BD Rebuilder     (HD) DVD & Blu-ray authoring     Advanced authoring     IFO/VOB Editors     DVD burning Hardware & Software     Software players     Hardware players     PC Hard & Software Programming and Hacking     Development     Translations

All times are GMT +1. The time now is 16:22.

 Doom9.org - Archive - Top