views:

3419

answers:

8

Maybe you have noticed, but cartoon-ifying your photos is the latest rage on the internet. My boss now wants our product, which works with photos and videos of people, to cartoonify them. So I need an algorithm to do it manually (we use c++/Qt for our product, which has image manipulation classes) or perhaps some CLI program that will do it for me that I can call and use from our own app. I've done some prelimanary searches on the internet, but did not come up with much...

Thanks!

A: 

actually i dont know a tool but you can look to osg (openSceneGraph)

there is a osgFX library and there is cartoon effect... maybe you can inspire from that library...


maybe (i dont know) imagemagick has many features, maybe it has a feature like that but i dont know...

ufukgun
A scenegraph is part of a display system, it handles storing a graph of objects to show - not manipulating images.Something like openCV would be more appropriate
Martin Beckett
+3  A: 

I have not done this myself, but thinking about two steps that might give the image a cartoonish look.

  1. Detect edges, and draw a fairly fairly thick line (a few pixels) on those edges.

  2. Decrease the number of colours in your image.

martiert
actually i tried this algorithm but i could not get success. maybe there is something missing?
ufukgun
A: 

Not sure if this will help, but this is the tutorial I use for Photoshop... I would imagine that you could do the same in your program to mimic the steps.

How To

IPX Ares
Could not find a tutorial there, the website looks more like a link-farm... please fix the link.
redtuna
Weird, that was working when I posted it. Fixed it to what it is now, and appears to be working again. Thanks for the heads up.
IPX Ares
+13  A: 

You could try rotoscopy, like this program does.

mooware
sweet. source code, too!
bryanbcook
from FAQ: "Rotoscope requires human input in order to work properly."
Josip
@Josip: You're right, I overlooked that point. Still, rotoscopy in general seems to do what he asked for.
mooware
+10  A: 

Here's some algorithms to play with:

  • Median or repeated box blur filter to obtain cartoonish color palette
    • Edit: Bilateral filtering should suit your needs even better
  • Min filter (zeroth percentile) to enhance some types of edges
  • Color image segmentation using either small subcube or sphere in the RGB color cube
  • Generic edge enhancement on segmented image using edge detection such as Sobel kernels or 8-way edge tracing
  • Composit blurred/median-filtered image with enhanced edges

These are fairly basic and all very easy to implement. Keep in mind that median and box blur filters can be implemented with linear time complexity w.r.t. the kernel radius.

More edits:

Once you get the idea of Huang's algorithm, implementing a box blur filter is a delicious piece of cake.

Reading material:

  • Fast Median and Bilateral Filtering (get the PDF)
  • Median Filtering Constant time (get the PDF) Note: I have an implementation of this in C# using Mono/SIMD to accelerate histogram coalescence, however it only seems better than the O(r) algorithm when the diameter exceeds ~60 pixels due to the comparable number of add/sub instructions (the break-even point), a C++ implementation is probably much better suited to harness SIMD.

Other reading materials include Gonzalez & Woods' Digital Image Processing (seems to be an older edition) for segmentation and edge tracing. 8-way edge tracing can be really hard to bend your head around (choosing between on-pixel or between-pixel edges and how to latch onto edges). I'd be happy to share some code, but the hundred-liners don't exactly fit smoothly in here.

Cecil Has a Name
This seems to suit my purposes best - do you happen to know any good online resources for these algorithms we could post here, for completeness?
JimDaniel
Of course, I'll come back to it a little bit later.
Cecil Has a Name
Cool, thanks a lot!
JimDaniel
Posterizing Maybe?
Mk12
Posterization is quantization transform that doesn't take geometrical information into consideration.
Cecil Has a Name
Anyone got a sample using ImageMagick, or Gimp in batch mode? I'm trying to figure this out on Ubuntu Linux for a project.
Volomike
A: 

To get more search results, papers etc look for "non photorealistic rendering (2d)".

felix
+3  A: 

If there's some set of parameters which achieve the desired effect in the GIMP's Cartoon filter (or some other combination of filters) it can be run in a batch processing mode.

John Barrett
+4  A: 
unwind
+1 - That's a great image, particularly with the lines which dramatically help the look and interpretation of the image.
tom10