The NPR Experiments Source Code:

Here's a zip file containing the sources. There are 2 top level directories, 'include' and 'src'. Most of the interesting code is in 'src/npr'. 'src/ms_video' has some wrappers for AVI reading/writing functions, general purpose stuff that anyone interested in video editing might find useful. 'include' has a lot of headers not related to this project (it's my whole 'dev/include' dir, and there didn't seem to be any particularly good reason to prune it down).

IP issues:


My code is all distributed under a BSD-ish license, Dorin Comaniciu's and Jonathan Shewchuk's source files both have more restrictive terms of use. See COPYING.TXT for more details.

Dependencies:

FLTK 1.1.4: By far my favorite GUI library. Some later versions of FLTK (most notably FLTK 2.0), are not backwards compatible with FLTK 1.1.4.

boost: I'm currently using the following sub-libraries from the 1.30.2 distro - boost::regex, boost::filesystem, and boost::numeric. Note that these first two sublibraries will not work out of the box, you'll need to build regex and filesystem yourself.  Though it's treated me poorly in the past, bjam has been working smoothly for me of late, and if your luck is as good, you should just be able to build boost as per the main install instuctions.

OpenCV: Intel's cute little vision library. At the moment I'm only using it for optical flow calculations, but if the "academic use only" part of the licensing terms bothers you, you could probably reimplement Dorin and Jonathan's portions of the code using OpenCV functions.

IFL: SGI's image library. Despite it's age, I still prefer it to devIL (downloading IFL requires free registration).

MTL: An eternally buggy and often very useful matrix library. At the moment, I'm only using MTL for its LU solver, so you could easily get rid of this dependency by changing thinplate.cpp to use a different solver (such as the new boost LU solver or the one now distributed with Jarno Elonen's TPS demo).

DirectX 9: DirectShow is a magnificently useful, miserably designed library that I'm using to capture video frames. DirectShow is not distributed as a stand alone library, so you'll have to install the whole DirectX 9 SDK.

HTML Help: This is a fairly frivolous dependency -- I just wanted to experiment with compiled help files. You can get rid the dependency by making some minor changes to src/npr/main_app/commands/general.cpp.

If you can't get the source to compile send me an email, I may be able to offer some helpful advice.