Log in

View Full Version : MSU Cartoonizer 3.0 released


DmitriyV2
28th April 2006, 07:46
MSU Cartoonizer 3.0 released with
* Filled Segments Rendering (added)
* Edge rendering for Faces Improved
* Performance Optimized
* Preview button (added)!

MSU Cartoonizer 2.0 released with AviSynth support!

* Added colored and non-colored Pencil Drawing (NEW TYPE of painting!)
* Improved Edge rendering for Painting
* Added color saturation control
* Added job control (so now AviSynth is supported)

Some examples:

http://www.compression.ru/video/cartoonizer/images/primer2.jpg

http://www.compression.ru/video/cartoonizer/images/lotr1.gif

http://www.compression.ru/video/cartoonizer/images/susi.gif

See other pictures in filter gallery!
http://www.compression.ru/video/cartoonizer/gallery_en.html

Sometimes it's necessary to cut edges or select parameters, but it's
possible to create good pictures. If you will create nice examples and will
be ready to show it to other guys - please let us know (we will add links in
gallery or will make something like "Users gallery")!

Filter page:
http://www.compression.ru/video/cartoonizer/index_en.html

Enjoy! :)

DmitriyV2
28th April 2006, 09:46
And I forgot to add: no logo added to video. (As usual for our filters).

buzzqw
28th April 2006, 12:18
a big big :thanks: !!!


i love this filter !

BHH

Chainmax
28th April 2006, 15:44
drawing mode = ace :). Is there any chance that this will eventually include a mode that will make a picture look like a flash animation, like this:

http://img211.imageshack.us/img211/8876/cartcomp8dl.png (http://imageshack.us)

? I did this rapidly in Paint and therefore didn't put nuances like the different tones in the house, the clown's clothes, the street, etc.

thoralf
28th April 2006, 16:11
hi guys,

this is a great toy! thank you very much ...

with kind regards,
thoralf.

Zarxrax
28th April 2006, 18:18
Wow, nice!

FredThompson
29th April 2006, 06:56
drawing mode = ace :). Is there any chance that this will eventually include a mode that will make a picture look like a flash animation, like this:Do a pallette reduction. Duh.

Chainmax
29th April 2006, 19:25
ŋHave you ever done a palette reduction? Results don't look anything like my example, they look like a pixel soup. This is about replacing entire areas with a basic color that ressembles the most what's inside of them and is most certainly not as simple as you think.

rfmmars
29th April 2006, 20:44
As we alll know you have wonderfull filters but the use is limited by not having the correct VCF code saved in settings in most of them. This means they can't be used in load setting and most important, they can't be used in "Jobs". Please update them.

Richard
photorecall.net

foxyshadis
29th April 2006, 20:48
Chainmax: Celforeground! Particularly "source.ColourGraphByAverage(simplegraph, source)", with an absorbed graph. Note that I haven't tried this on real-life footage, but it's the basic idea, converting toned images into cel-shaded CG, probably more solid with parameter tweaking.

http://people.pwf.cam.ac.uk/mg262/posts/Foreground/Foreground.HTML

But clouded is gone, so I don't know how much he's been able to get done on it, if anything. Hope he licked his carpal tunnel though.

Another option is to just use a really high-radius, hard tresholded filter, like maybe mipsmooth, or smartsmootherhq, or ... drat, not sure what else might, though I regularly use a few photoshop filters for it. I think you'd need some heavy edge enhancement first.

thoralf
29th April 2006, 21:54
@chainmax:

maybe you could also use ffdshow for this sort of stuff ... I found the posterize-options in levels quite useful.

with kind regards,
thoralf.

CruNcher
29th April 2006, 23:15
DmitriyV2 really nice effect filter :)

FredThompson
30th April 2006, 01:41
@Chainmax, I was thinking about 16 colors or so. That might come close. Your mockup didn't change the pants, though.

I wonder if there's an existing way to reduce pixel aberations by comparing them to the surrounding 26 pixels. What if 80% (or so) of the neighbors are all one value (+- a tolerance) and the test pixel is within the tolerance? Force the pixel to the neighbor value...

Look at http://neuron2.net/board/viewtopic.php?t=872 and you'll see screenshots from some of the Charles Schwab ads.

Oh, maybe you should posterize first. That would help flatten the chroma in a more uniform manner. I wonder if there's a way to automate exporting frames to The GIMP to use a refined posterization then importing them. Sure would be cool if that could be done inline...

Try using trevlac's colourlooks VirtualDub filter for posterization. http://www.trevlac.us/FilterDocs/

CeeJay.dk
30th April 2006, 18:37
Hmm .. I need a little help here.

I'd like to try this filter in ffdshow (using it's option to load avisynth filters), but I don't know how.

Could someone help me out and create an example script for ffdshow ?

UPDATE:
Nevermind .. I figured it out on my own.

I used
"
LoadVirtualDubPlugin("MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
ConvertToRGB32.MSU_Cartoonizer(0,1,1,1,1,1,1,1,1,1)
"

to see if it was running , but it kept crashing on me.
Then I realized that I had forgotten to give it the full path to the plugin

I placed the plugin here : C:\Program Files\AutoGK\VDubMod\plugins

So
"
LoadVirtualDubPlugin("C:\Program Files\AutoGK\VDubMod\plugins\MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
ConvertToRGB32.MSU_Cartoonizer(0,1,1,1,1,1,1,1,1,1)
"

worked.

It's not fast enough for realtime though :(

I'm currently using :
"
LoadVirtualDubPlugin("C:\Program Files\AutoGK\VDubMod\plugins\MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
MSU_Cartoonizer(0,4,9,0,5,1,50,2,2,1)
"

.. as I figured out that I could just switch RGB32 on as an input source in ffdshow and dispense with the ConvertToRGB32 part

Chainmax
30th April 2006, 19:52
@Chainmax, I was thinking about 16 colors or so. That might come close. Your mockup didn't change the pants, though.

Yeah, I forgot about the pants :). The number of colors don't make a difference though. I spoke to a friend some time ago and he suggested edge enhancement (via smoothing or plus smoothing), then for each pixel to consider an nxn (with n an odd number) matrix centered on it, calculate the average RGB value of all the pixels in the matrix and substitute that pixel's RGB values for the average. That should help reducing the nasty effect caused by most color conversion methods.

foxyshadis
30th April 2006, 23:23
That's exactly how smart smoother hiq works, back when I used it (pre-avisynth) I'd use diameter 7 or 9 (7x7 or 9x9 square matrix). It goes up to 21 or so. You can reduce the protection thresholds to allow pixels to incorporate wider areas. It's much better than a straight average because it only takes into account pixels below the matrix's average, or median, or something like that. Solid areas won't be perfectly flat, but close. (dct coders don't like perfectly flat areas anyway, because the transitions are too hard.) If you do need it perfectly flat, you'd need an area-filler like celforeground, or maybe one of vchoman's filters.

yuy2 only unless you can convince someone to update it though. :p

Chainmax
1st May 2006, 03:05
But would it yield results similar to my example?

foxyshadis
1st May 2006, 03:49
Ugh, I can't get the avisynth smoothhiq to even work anymore, never mind. It doesn't go high enough radius to match photoshop's smart blur at high radius anyway. Bother.

Fizick
2nd May 2006, 06:03
Almost any Vitrualdub plugin can be used in avisynth.

Cortoonizer is not Avisynth plugin,
so why it discussed in Avisynth forum instead of Virtualub?
Move to?

DmitriyV2
2nd May 2006, 10:40
Hmm .. I need a little help here.

I'd like to try this filter in ffdshow (using it's option to load avisynth filters), but I don't know how.

Could someone help me out and create an example script for ffdshow ?

UPDATE:
Nevermind .. I figured it out on my own.

I used
"
LoadVirtualDubPlugin("MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
ConvertToRGB32.MSU_Cartoonizer(0,1,1,1,1,1,1,1,1,1)
"

to see if it was running , but it kept crashing on me.
Then I realized that I had forgotten to give it the full path to the plugin

I placed the plugin here : C:\Program Files\AutoGK\VDubMod\plugins

So
"
LoadVirtualDubPlugin("C:\Program Files\AutoGK\VDubMod\plugins\MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
ConvertToRGB32.MSU_Cartoonizer(0,1,1,1,1,1,1,1,1,1)
"

worked.

It's not fast enough for realtime though :(

I'm currently using :
"
LoadVirtualDubPlugin("C:\Program Files\AutoGK\VDubMod\plugins\MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)
MSU_Cartoonizer(0,4,9,0,5,1,50,2,2,1)
"

.. as I figured out that I could just switch RGB32 on as an input source in ffdshow and dispense with the ConvertToRGB32 part
Hm... We are not so familiar with avisynth support (but working in this direction).

Thanks for report!

tin3tin
6th January 2007, 12:26
Thanks for this great plugin!

However I've run into promlems when using it more times in the same script. Somehow the first instances turn out black. And if you run it in AvsP, the result will only come out correct the first time you refresh preview. I don't know if it is the plugin which is causing this or something else.

Here is my script:

# Script gererated by DVD slideshow GUI

LoadVirtualDubPlugin("D:\wxbasic2demos01b\bin\MSU_Cartoonizer.vdf","MSU_Cartoonizer",5)

# Definitions:
SafeH = 462
SafeW = 576

SafeAviH = multifour(462) # resizing avis within width and height
SafeAviW = multifour(576)

# Import of background image - the proportions of this will be the proportions of the final film.
bname = "D:\wxbasic2demos01b\background_golden.jpg"
SafebH = 576 # resizing background within width and height
SafebW = 720
rate = 25
bname = LanczosResize(imagesource(bname,1,1,rate),SafeBW,safeBH)


# Import images
fname="D:\wxbasic2demos01b/125_2556.JPG"
fname = SafeSize(imagesource(fname,1,1,rate),SafeW,safeH,rate)
imgout = AddBack(fname,bname,1)
imgout = imgout + imgout
fname="D:\wxbasic2demos01b/125_2558.JPG"
fname = SafeSize(imagesource(fname,1,1,rate),SafeW,safeH,rate)
imgout = imgout + AddBack(fname,bname,1)
fname="D:\wxbasic2demos01b/123_2334.JPG"
fname = SafeSize(imagesource(fname,1,1,rate),SafeW,safeH,rate)
imgout = imgout + AddBack(fname,bname,1)
imgout = imgout.converttoyv12()

SafeH = 576
SafeW = 720


# PROGRAM
inpoint = 1
a = (trim(imgout,000001,000001))
a = loop(a,100)
at = (trim(imgout,000001,000001))
at = loop(at,25)
a = audiodub(a,BlankClip(length=a.framecount, fps = rate, audio_rate=48000, stereo = true))
at = audiodub(at,BlankClip(length=at.framecount, fps = rate, audio_rate=48000, stereo = true))
outpoint = a.framecount+at.framecount

bt = (trim(imgout,000002,000002))
bt = loop(bt,25)
bt = audiodub(bt,BlankClip(length=bt.framecount, fps = rate, audio_rate=48000, stereo = true))
at=at.SSRC(48000)
bt=bt.SSRC(48000)
ft=25
c = (MSUtoToon(at, bt,ft))
c = audiodub(c,BlankClip(length=c.framecount, fps = rate, audio_rate=48000, stereo = true))
d = a + c


a = (trim(imgout,000002,000002))
a = loop(a,100)
at = (trim(imgout,000002,000002))
at = loop(at,25)
a = audiodub(a,BlankClip(length=a.framecount, fps = rate, audio_rate=48000, stereo = true))
at = audiodub(at,BlankClip(length=at.framecount, fps = rate, audio_rate=48000, stereo = true))
outpoint = d.framecount+a.framecount+at.framecount

bt = (trim(imgout,000003,000003))
bt = loop(bt,25)
bt = audiodub(bt,BlankClip(length=bt.framecount, fps = rate, audio_rate=48000, stereo = true))
at=at.SSRC(48000)
bt=bt.SSRC(48000)
ft=25
c = (MSUtoToon(at, bt,ft))
c = audiodub(c,bt).eqaudio()
d = d + a + c


b = (trim(imgout,000003,000003))
b = loop(b,100)
outpoint = d.framecount+b.framecount
b = audiodub(b,BlankClip(length=b.framecount, fps = rate, audio_rate=48000)).eqaudio()
d = d + b
d = pointchk(inpoint, outpoint) ? d : d.trim(0,inpoint)+audiodub(d.trim(inpoint,outpoint),BlankClip(length = (outpoint-inpoint), fps = rate, audio_rate=48000)).eqaudio()

d.trim(2,d.framecount)

#Functions:
#code by tsp - cf=current_frame,fr=framerate
function convert2smpte(int cf,float fr)
{
hh=int(cf/3600/fr)
mm=int((cf-hh*3600*fr)/60/fr)
ss=int((cf-hh*3600*fr-mm*60*fr)/fr)
ff=int((cf-hh*3600*fr-mm*60*fr-ss*fr))
smpte=string(hh,"%02.0f")+":"+string(mm,"%02.0f")+":"+string(ss,"%02.0f")+"."+string(ff,"%02.0f") return smpte }

function convert2srt(int cf,float fr)
{
hh=int(cf/3600/fr)
mm=int((cf-hh*3600*fr)/60/fr)
ss=int((cf-hh*3600*fr-mm*60*fr)/fr)
fftemp=int(cf-hh*3600*fr-mm*60*fr-ss*fr)
ff=((fftemp))
smpte=string(hh,"%02.0f")+":"+string(mm,"%02.0f")+":"+string(ss,"%02.0f")+","+string(ff,"%03.0f")
return smpte
}

function Trim2(clip c, int start, int "end", int "length")
{
Assert(!(Defined(end) && Defined(length)),
\ "Trim2: <end> and <length> parameters cannot be used together")
Assert(!Defined(length) || length >= 0,
\ "Trim2: invalid length: " + String(length))

end = Defined(end)
\ ? ((end < 0) ? (c.FrameCount() + end) : end)
\ : Max(start, c.FrameCount())
end = Defined(length) ? (start + length) : end

Assert(start >= 0, "Trim2: start frame out of bounds: " + String(start))
Assert(end >= start, "Trim2: end frame out of bounds: " + String(end))

start = Min(start, c.FrameCount())
end = Min(end, c.FrameCount())

# we can't use Trim(start, end - 1) in case end == 1
return (start == end)
\ ? c.NullClip()
\ : c.Trim(start, -(end - start))
}

function Trim3(clip c, int start, int "end", int "length")
{
Assert(!(Defined(end) && Defined(length)),
\ "Trim3: <end> and <length> parameters cannot be used together")
Assert(!Defined(length) || length > 0,
\ "Trim3: invalid length: " + String(length))

end = Defined(length) ? (start + length) : Default(end, c.FrameCount())
end = (end < 0) ? (c.FrameCount() + end) : end

Assert(start >= 0 && start < c.FrameCount(),
\ "Trim3: start frame out of bounds: " + String(start))
Assert(end > start && end <= c.FrameCount(),
\ "Trim3: end frame out of bounds: " + String(end))

return c.Trim2(start, end)
}

function Min(val a, val b) { return (a < b) ? a : b }

function Max(val a, val b) { return (a > b) ? a : b }

function Clamp(val n, val low, val high) { return Max(low, Min(n, high)) }

# MaskTransition by stickboy
function MaskTransition(clip c1, clip c2, imgpath , int dur)
{
c2=c2.Lanczos4Resize(c1.Width(),c1.Height())
c1=c1.Lanczos4Resize(c2.Width(),c2.Height())
ramp = imagesource(imgpath, 0, 0, 1, false).ConvertToRGB32()
ramp = ramp.Lanczos4Resize(720,576)
ramp = ramp.AssumeFPS(c1.FrameRate()).Loop(dur)
transitionMask = Animate(ramp, 0, dur, "Levels",
\ 0, 1.0, 20, 0, 235,
\ 235, 1.0, 255, 0, 235)

Assert( c1.Width() == c2.Width()
\ && c1.Width() == transitionMask.Width()
\ && c1.Height() == c2.Height()
\ && c1.Height() == transitionMask.Height(),
\ "JDL_MaskTransition: clips must have identical frame sizes")
Assert( c1.FrameRate() == c2.FrameRate()
\ && c1.FrameRate() == transitionMask.FrameRate(),
\ "JDL_MaskTransition: clips must have identical frame-rates")

overlap = transitionMask.FrameCount()
Assert(overlap > 0, "JDL_MaskTransition: invalid overlap length: " + String(overlap))

Assert(c1.FrameCount() >= overlap && c2.FrameCount() >= overlap,
\ "JDL_MaskTransition: clips must be longer than the transition")

trans1 = c1.Trim3(c1.FrameCount() - overlap)
trans2 = c2.Trim3(0, length=overlap)
Assert(trans1.FrameCount() == trans2.FrameCount(), "JDL_MaskTransition: bad math")
trans = Overlay(trans2, trans1, mask=transitionMask)

video = trans
return video
}

function Min(val a, val b) { return (a < b) ? a : b }

function Max(val a, val b) { return (a > b) ? a : b }

function AddBack(clip imagef, clip imageb, int dur)
{
b = imageB
f = imageF
x = (width(b)/2)-(width(f)/2)
y = (height(b)/2)-(height(f)/2)
c= overlay(b,f,x,y)
return c
}

function SafeSize(image, int SafeW, int SafeH, int fps)
{
a = image
w= Width(a)
h= Height(a)
h = (w > SafeW) ? multifour(h * SafeW/float(w)) : h
w = (w > SafeW) ? SafeW : w
w = (h > SafeH) ? multifour(w * SafeH/float(h)) : w
h = (h > SafeH) ? SafeH : h
return ((Width(a) != w) || (Height(a) != h)) ? a.LanczosResize(multifour(w), multifour(h)) : a
}

function Has169(clip rescheck)
{
return rescheck
}

function HasAudio(clip chkaud)
{
return chkaud.AudioRate() != 0
}

function HasMono (clip mon)
{
return audiochannels(mon)!=2
}

function pointchk (inval, outval)
{
return inval>outval
}

function multifour (val mfour)
{
return (int(mfour/4))*4
}

function eqaudio(clip eqaud)
{
eqaud = eqaud.HasAudio() ? eqaud : audiodub(eqaud,BlankClip(eqaud.framecount, fps = 25, audio_rate=48000))
eqaud = HasMono(eqaud) ? MergeChannels(eqaud.GetChannel(1), eqaud.GetChannel(1)) : eqaud
return eqaud.SSRC(48000)#.SSRC(48000)
}


function MSUtoToon (video,video2,duration)
{
vtrim = Trim(video,framecount(video)-1,framecount(video))
vtrim = loop(vtrim,duration)
vtrim2 = Trim(video2, 0, -1)
MidClip =vtrim2.ConvertToRGB32.MSU_Cartoonizer(1, 1, 1, 1, 1, 1, 1, 1,5,1).ConvertToYV12 ()
vtrim2 = loop(vtrim2,duration)
MidClip = loop(MidClip,duration-2)
return Dissolve(vtrim,MidClip,vtrim2,int(duration/2))
}

SSRC(48000)
AssumeFPS(25, 1, true)

DmitriyV2
6th March 2007, 00:14
MSU Cartoonizer 3.0 released with
* Filled Segments Rendering (added)
* Edge rendering for Faces Improved
* Performance Optimized
* Preview button (added)!
Enjoy! :)
http://compression.ru/video/cartoonizer/index_en.html

2 tin3tin: thanks - we will try to reproduce problem

setarip_old
6th March 2007, 02:16
@DimitriyV2

Hi!

Please clarify - V.3.0 was released in April 2006. If you are now announcing the release of an improved version of the original v.3.0, shouldn't it have a different number/sub-number?

Does "Performance optimized mean (I hope) that it's faster?

(See my post at: http://forum.doom9.org/showthread.php?p=958492#post958492 )

DmitriyV2
6th March 2007, 11:01
@DimitriyV2
Please clarify - V.3.0 was released in April 2006. If you are now announcing the release of an improved version of the original v.3.0, shouldn't it have a different number/sub-number?
In April 2006 version 2.0 was released. I edit first message of this thread to insert information about 3.0.

Does "Performance optimized mean (I hope) that it's faster?

Yes, but main concentration was on new effects.

foxyshadis
6th March 2007, 14:13
It's even better! It's still slow, but the new mode is neat. =D

Interestingly, the Cel Shade mode (called "Filled Segments") with edges turned off is an acceptible substitute for Clouded's CelForeground. Though without CelBackground to back it up, it's still not to useful.

Since I love Cartoonizer, I put together an avisynth interface for ease of use. It sort of follows the readme, but I gave some things new names and orders that I thought were more intuitive... apologies if that's an issue. It has a couple of prototype presets - sorry about the convoluted syntax, avisynth is a bit awkward to work with, and it's still nicer than my first version - but my main motivation was having something to use with AvsP. Feel free to customize as desired.

As mentioned earlier, it still has trouble with multiple copies loaded at once, so don't panic if it comes up black, just exit and reload. (In AvsP, you can put a toggle like "return last" immediately after the Source to reset it.)


LoadVirtualDubPlugin("MSU_Cartoonizer.vdf", "MSU_Cartoonizer", 0)

# Basic modes are: painting, celshade, and pencil. Presets can be developed as below, but must include the basic mode name.
function Cartoonizer(clip c, string "mode") {
mode = LCase(default(mode,""))
assert(mode != "","Must set a mode or preset!")
c
ConvertToRGB32()
Findstr(mode,"painting")>0 ? \
mode == "large brush painting" ? Cartoonizer_Painting(BrushSize=8,EdgeThickness=3) : \
mode == "small brush painting" ? Cartoonizer_Painting(BrushSize=2,EdgeThickness=1) : \
Cartoonizer_Painting() : last
Findstr(mode,"celshade")>0 ? Cartoonizer_CelShade() : last
Findstr(mode,"pencil")>0 ? Cartoonizer_Pencil() : last

c.IsYUY2() ? ConvertBackToYUY2() : last
c.IsYV12() ? ConvertToYV12() : last
}

function Cartoonizer_Painting(clip c, int "BrushSize", int "BrushWetness", int "ColorRandomness", int "Saturation", \
bool "ShowEdges", int "EdgeThreshold", int "EdgeBrightness", int "EdgeThickness", int "EdgeAccuracy", bool "FaceDetection") {
assert(c.IsRGB(),"Cartoonizer: Only RGB accepted.")
ShowEdges = default(ShowEdges,true)?0:1
EdgeThreshold = default(EdgeThreshold,4)
EdgeBrightness = default(EdgeBrightness,5)
EdgeThickness = default(EdgeThickness,2)
EdgeAccuracy = default(EdgeAccuracy,2)
FaceDetection = default(FaceDetection,true)?1:0

BrushSize = default(BrushSize,5)
BrushWetness = default(BrushWetness,4)
ColorRandomness = default(ColorRandomness,3)
Saturation = default(Saturation,5)

c.MSU_Cartoonizer(1, ShowEdges, EdgeThreshold, EdgeBrightness, EdgeThickness, EdgeAccuracy, \
FaceDetection, 1, BrushSize, BrushWetness, ColorRandomness, Saturation)
}

function Cartoonizer_CelShade(clip c, int "SegmentThreshold", int "Saturation", bool "ShowEdges", \
int "EdgeThreshold", int "EdgeBrightness", int "EdgeThickness", int "EdgeAccuracy", bool "FaceDetection") {
assert(c.IsRGB(),"Cartoonizer: Only RGB accepted.")
ShowEdges = default(ShowEdges,true)?0:1
EdgeThreshold = default(EdgeThreshold,4)
EdgeBrightness = default(EdgeBrightness,5)
EdgeThickness = default(EdgeThickness,2)
EdgeAccuracy = default(EdgeAccuracy,2)
FaceDetection = default(FaceDetection,true)?1:0

SegmentThreshold = default(SegmentThreshold,4)
Saturation = default(Saturation,5)

c.MSU_Cartoonizer(1, ShowEdges, EdgeThreshold, EdgeBrightness, EdgeThickness, EdgeAccuracy, \
FaceDetection, 1, SegmentThreshold, Saturation)
}

function Cartoonizer_Pencil(clip c, bool "Color", int "EdgeThreshold", int "EdgeBrightness", \
int "EdgeThickness", int "EdgeAccuracy", bool "FaceDetection") {
assert(c.IsRGB(),"Cartoonizer: Only RGB accepted.")
EdgeThreshold = default(EdgeThreshold,4)
EdgeBrightness = default(EdgeBrightness,5)
EdgeThickness = default(EdgeThickness,2)
EdgeAccuracy = default(EdgeAccuracy,2)
FaceDetection = default(FaceDetection,true)?1:0

PencilType = default(Color,true)?0:1

c.MSU_Cartoonizer(2, PencilType, EdgeThreshold, EdgeBrightness, EdgeThickness, EdgeAccuracy, \
FaceDetection, 1)
}

Lukefwkr
15th August 2007, 00:02
Hello all,

i just wanted to take a look at this msu_cartoonizer plugin for virtualdub, but i didnīt get the chance to download it from compression.ru.

I also searched the internet via google for any mirrors, but all sites i found, were directly linked to compression.ru which is currently not reachable. :confused:

This is the reason i would like to ask you dear people from doom9 forum if anyone could generously provide a mirror with this plugin.

thanks in advance. :thanks:

yours

L.F.

buzzqw
19th August 2007, 15:46
here a mirror http://www.64k.it/andres/data/virtualdub/msu_cartoonizer-3.0.zip

BHH

DmitriyV2
22nd August 2007, 16:26
i just wanted to take a look at this msu_cartoonizer plugin for virtualdub, but i didnīt get the chance to download it from compression.ru.
What problem was with http://compression.ru/video/ ?

buzzqw
22nd August 2007, 19:06
some day ago the site was unavaiable

BHH

DmitriyV2
23rd August 2007, 09:45
some day ago the site was unavaiable

Pretty strange... (statistic's chart is smooth) Maybe problem on provider's level.

Anyway - thanks for info!

LigH
8th October 2009, 07:21
Sorry for wiping some dust...


To recreate the functionality of this VirtualDub filter with native AviSynth filters, I believe one could combine tritical's TEdgeMask filter (as mode "Drawing", and as possible pre-quant overlay for a mode "Cartoon") with some filter which does a "color quantization" (using Heckbert's Median Cut or an Octree algorithm) for mode "Painting"; unfortunately I don't know if such a filter already exists.