Currently our expert user classifies locations by viewing the Google earth satellite image of a location. They consider circular areas of a 5km radius at a set zoom level. They evaluate the image for density of buildings or trees in within the circle and assign the location a classification. We get data in the form:

location         | Classification
(lat-long)       |
123.123, 12.34   | B
122.123, 12.34   | A
121.123, 12.34   | C
120.123, 12.34   | A
119.123, 12.34   | A

I want to use this as training data to build a system that can automatically classify a location based on the satellite image.

To train the system, I would need to extract relevant parameters from the satellite images. I guess the image parameters would need to be rotation independent. Possible parameters:

  • total intensity for RGB values,
  • histogram
  • count of edges
  • ??

I plan on using C# and available AI & image processing libraries (e.g. opencv, encog, AForge) to do implement the training and classification stages.

Some of the image processing tutorials concentrate on object recognition but that's not really what I'm after (I think). It's more about grouping the images into different categories based on more general properties of the image.

Can anyone advise on a) the feasibility of this plan and b) what parameters I should be extracting from the images?


2 Answers 2


The first thing you will want to do is look at the Google Terms of Use and Licensing. Google is very particular on how their data and software can be used. I would look at this first as it may be a show-stopper.

The second thing I would consider is that the imagery in Google isn`t raw imagery; they are chips or tiles of data saved in a web tiling format. Why does this matter? When you are classifying imagery in an automated way, by looking at the pixel values etc. you are reading the DN (digital number) of each pixel on each band. The image tiles made for web maps, such as Google, are compressed images, meaning the DN values have been changed and do not have the raw DN value stored. There are peer-reviewed papers that discuss the validity of using non-raw imagery for classification purposes.

Thirdly, the data on Google is RGB, meaning the imagery represents data from the visual spectrum of the electro-magnetic spectrum. Unfortunately this part of the spectrum is difficult to get accurate classifications from. While it is possible, it may introduce more issues than if you were to use raw data from a satellite or aerial photography source.

  • Thanks. Assuming I can get some RGB satellite images without any tiling or licensing issues, would you be able to suggest what parameters to extract from the image to train my classifier? Commented Jul 17, 2014 at 22:13
  • That will depend on what you are using to classify. If I assume correctly, you are making your own? You will want to look at the pixel values of each band. But you may want to do a neighbour search (3x3, 5x5, 7x7, etc.). Object oriented classification looks at the direction, orientation, proximity, and other aspects of pixels. Commented Jul 18, 2014 at 0:55
  • Yes making my own. My idea was library to do create some sort of a neural network which would do the classification. I've had some experience with Neural Nets before but not for classifying images. I had assumed that I would extract a set of parameters from each image and use this as training data. e.g. image @ location 1 = { totalRed: 1230, totalGreen: 1000, totalBlue: 5000, maxRed: 40, ...}; image @ location 2 = { totalRed: 2222, totalGreen: 3000, totalBlue: 4000, maxRed: 30, ...}; Would the results a neighbor search for each X*X block something I could add to the list of image parameters? Commented Jul 18, 2014 at 4:35
  • You could do that, but be careful about having hard and fast rules. One of the issues with classification is that it uses real world imagery; and real world imagery has variation. Setting a RGB value may result in different classes depending on the temporal and spatial location of the image. If you will be using a repetitive location (ie: time series analysis) then you may be ok. But if you are not, or you will be looking at temporal change, then you will have to deal with a feature having different pixel values at different times of the year (ie: trees). Also don't forget about clouds, etc. Commented Jul 18, 2014 at 13:54
  • Right...the example parameters I made up (totalRed etc) would obviously be vulnerable to the kinds of issues you describe and probably not very helpful for classification. Do you know of parameters you can extract from images that are better at coping with these kinds of issue? Maybe LBP and HOG are something to look into but I don't understand how these work yet or if they are relevant. Commented Jul 24, 2014 at 4:47

The problem is one of "image segmentation" and there has been a lot of progress in this area in the last 5 years.

DeepLab is a tensorflow implementation and we had success in retraining the models to our classifcations. Looking at the example data sets will give a good indication on how to prepare training data.

Hardware requirements are hefty so you'll probably want to make use some of the cloud ML offerings for training. We used an AWS EC2 instance with loads of cpu, ram and 4 GPUS. A simpler option is AWS Sagemaker which has a prebuilt image segmentation model available. I've not used this but it looks promising. I'm sure there are similar offerings in the other cloud providers but I'm not familiar with them.

Hardware requirements for prediction/inference is much lower.

All of this is assuming you can obtain correctly licensed images of course.

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.