I'm trying to create a routine that will trace a road stored in a monochrome bitmap. The road can have any amount of forks and splits in it but it stays a pretty consistent width the whole way though. Heres an example of a bitmap that may be passed to this routine.

However, the routine may also be passed a bitmap full of absolute rubbish. And it needs to detect that. If it is actually a road however, it needs to return a series of points that run along the path... Its kind of like a raster to vector conversion.
Now the problem is, I have no idea how to make this. I've come up with some ideas but I really don't think any of them will turn out very well if I actually start to put them into code, so does anyone know of some examples that deal with something like this. I just need some pointers in the right direction.. I'm very lost as to where to start.