For a study into the expansion of road networks in the rainforest I am trying to extract roads out of Landsat images. We already have sharp and cloud-free composites on which the roads are clearly visible by eye but extracting those into line features is proving difficult so i was wondering if anyone knows a good algorithm or method that can handle the large images that Landsat provides? I've tried Grass's r.thin but this doesn't seem to work.
I would recommend using image segmentation with the free software SPRING, available from the Brazilian National Institute for Space Research. Documentation is available here and tutorials are available here. Image segmentation produces high classification accuracy compared to purely pixel based classification methods (e.g. ISODATA, Maximum Likelihood, etc). To help better elucidate my answer, I performed image segmentation on imagery (nIR, 1m resolution) that had a road running through rangeland in eastern Oregon. The general workflow to perform image segmentation with SPRING is as follows:
- Import imagery
- Perform segmentation (Results shown in image 1)
- Create training set by selecting which regions belong to which class.
- Perform classification on the segmented regions.
The first image shows the results of the actual segmentation. The road is highlighted in blue and was used during step 3 (training). I lumped all of the other classes (e.g. grass, trees, etc) into another category. The final image shows the results of the image segmentation and classification algorithm. As you can see, image segmentation produced very good results with the sample imagery.
With Landsat imagery, you will have less spatial resolution than my sample imagery, yet you will have greater spectral resolution and will thus be able to detect greater differences between vegetated and non vegetated areas. Since SPRING takes into account spectral bands in addition to shapes, you should see very good results using your Landsat imagery. Best of luck and thanks for researching such an important topic.
Segmented object (aka trained) classification can be used very succesfully for this problem, but I don't know GRASS enough to tell you what capabilities it has in this area. You'd get polygons though, so you'd still have to thin them or use a mean or some other transformation.
You'll get even better results if you have a near-infrared band or composite available, since the reflectivity of roads and other barren ground is significantly different from that of vegetation, plus shadows and to a smaller extent canopies (over roads) affect the result less.