I think the open-source command-line program potrace, might do what you want. It converts bitmaps to bezier curves and has a bunch of options allowing you to trade off smoothness and accuracy.
The open-source Inkscape vector (svg) editor has potrace built in (under the Path->Trace Bitmap menu option.) The result of applying your example in Inkscape, (I used the mode Inkscape calls "Brightness cutoff" with the default threshold of .45, since your image was already black-and-white rather than grayscale) scaling the size of the resulting bezier curves up a bit, and then having Inkscape output a bitmap is:
One of the cute side-effects of converting to bezier and then back to grayscale is that you get nice anti-aliasing around the curves.
With grayscale input images I find that the "Edge detection" mode works a little better. There are also options for choosing less or more smoothing, and less or more speckle elimination.