I did a tiny little bit of tidy up and uploaded my trivial C program to http://code.google.com/p/imagecarve/
The program simply translates images to G-code. It does nothing else. It assumes that you're capable of editing the resulting G-code to make it usable on your machine, and that you can add minor things to the g-code like feed rates et al.
It's pretty raw. It assumes many things, including that you have a ballnose cutter and that the input is always correctly formatted PGM.
The line I used to generate the (upside down) image from the pic above is:
cat ../IMG_545.JPG | jpegtopnm | ppmtopgm |
./imagecarve --scale=0.25 --toolsize=3.2 --stepover=1.5 > out.g
followed by hand editing of the resulting 'out.g' file to set a feed rate.