I'm trying to extract the areas with vegetation as a polygon-shape from a landsat7-image, 30m resolution, RGB, using QGis 1.8 or Bilko or (hopefully in the near future) ArcGIS. The area is in Northern Peru, dry season, so basically I want to extract all the shades of green.

I have never really worked with raster data and don't know what to do. I have found out there are "vegetation indices" which can be calculated, and have found Bilko as a software I could do this with. However, if I got it right I need more bands than RGB to do this - is this true? I'm not sure.

On this website I have also found threads on how to calculate vegetation area in QGis - using GDAL tools or SEXTANTE: Calculating area of vegetation in raster file?

However I would like to not only calculate but extract the data as a polygon.

What would be the best way to do this? I've never worked with Bilko, GDAL or SEXTANTE, of course I will go into that and try to learn, but I would like to know what will work before I spend hours and hours only to find out I can't do it...

P.S.: I will probably have ARCGis in a while, so if it is much easier with ARCGis I might wait for that...

  • 1
    Ideally, you want an image that has a fourth band (NIR) to pull vegetation out. I asked a similar question to yours before regarding using QGIS and feature extraction, see link below: gis.stackexchange.com/questions/9397/…
    – artwork21
    Commented Jan 16, 2013 at 18:54
  • I had found that threat before and looked through the links. They're saying to use GRASS GIS - can I use the SEXTANTE-plugin, where GRASS GIS-commands are included? Commented Jan 16, 2013 at 19:10
  • And I don't have an image with a fourth band... will it work without that? (I believe I have an image with 3 bands, red-green-blue - only these show in the property dialog: channel red = band 1, green = band 2, blue = band3). Commented Jan 16, 2013 at 19:32
  • What standard are you trying to work to? Is it for your own interest just once, or will it be a series of measurements over time (which is the opportunity with the Landsat satellites) to estimate change. High quality analysis can be done with the modules in GRASS, these run natively in linux and I got them to work reliably in GRASS 7 on Win7. I would recommend you use i.landsat.toar and i.landsat.acca before you calculate NDVI, however that is a level of complexity which may waste your time.
    – Willy
    Commented Jan 17, 2013 at 10:39
  • You will likely want the complete original landsat file which has all the bands included. It comes in a packaged file with the suffix tar.gz, so if you have got that you are on the right track.
    – Willy
    Commented Jan 17, 2013 at 10:46

3 Answers 3


There is also another possibility to solve that problem. The software "Monteverdi", which is based on the OTB Library, could handle that. It is a open-source remote sensing software, developed by CNES (French space agency) to process their Pleiades-Imagery.

I suggest Version 1.18.


There is a filtering-module included, which is called "Connected Component Segmentation". It basically does the following (more details can be found here: http://wiki.orfeo-toolbox.org/index.php/Connected_component_segmentation_module):

  1. Masking your image according to your rules (here you would mask out everything with an NDVI below 0.2 for example. The NDVI is a built in function)
  2. Segmentation of the remaining pixels (creating polygons)
  3. If needed discarding small areas (set a minimun size)
  4. Exporting the result as a *.shp

I used this for exactly that purpose. Not on Landsat data, but aerial imagery. A NIR channel is mandatory though.


If you don't have any experience in any of the tools you mentioned I suggest you use R, it has a very user-interface to the gdal tools. You could do what you want in that way:

b.red = 1 # according to your input image
b.nir = 2 # according to your input image
threshold = 0.2 # for vegetation detection
inDs <- 'your_raster.tif'
inRst.red <- raster(inDs, b.red)
inRst.nir <- raster(inDs, b.nir)
NDVI <- (nir-red)/(nir+red)
NDVI[NDVI>=threshold] <- 1
NDVI[NDVI<threshold] <- 0
setNA(NDVI) <- 0
p <- rasterToPolygons(NDVI, dissolve=TRUE)

thanks a lot for the answers - I asked the question a while ago and it all turned out different. I tried to do this for an internship in Peru without having access to a good computer - didn't work. So I did it back in Germany with other programs available.

I finally used an ASTER image (15m resolution, green/ red/ IR band) and calculated an NDVI, which I then classified, using the programs Erdas and ArcMap.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.