views:

212

answers:

5

I have to start work on application for analysis of satellite imagery to identify some man made structure. I would like to use C or Java for this.

For satellite I am planning to use Google Maps data.

I have three questions here:

  1. What is best source for GIS data besides Google Maps/earth.
  2. Best language to write such an application considering i will have to use third-party APIs
  3. Is there a open image processing engine available which identifies man made structures?

Thats a lot of questions but I hope the smarter guys here can help me here.

+1  A: 

You may find the USGS (United States Geological Survey) website helpful. They provide both GIS information and a wide range of data sets.

Eric J.
+2  A: 

Specifically, check out Glovis: http://glovis.usgs.gov/

You can browse the earth, and download maps from several different satellites and sensors. Even though you have to go through a bogus "ordering" process, the imagery is free.

Ross M Karchner
+1  A: 

Overly processed imagery such as Google or Bing maps is a horrible source of imagery for performing feature extraction or feature recognition. Usually, you want the most unprocessed, raw form possible with camera models... of course, if you don't have access to this sort of data, then you have to work with what you have.

A more important consideration of Google Maps/Earth imagery is that you may run afoul of their License Agreement. I suggest you check it before you decide on their data as your imagery source. In particular, if you bypass their API's, you've violated their license agreement.

As far as libraries and langauges, there are dozens of machine vision libraries available. I can't recommend one over the other as I've only been a down-stream consumer of their results. My understanding of the problem is that the biggest concern is how you build the "models" to compare against... i.e. how do you give the system an "example" of what you're looking for.

Once you've found a library, then you can make a decision on the language. Generally, a high-level language like Python or Matlab is used for this kind of prototyping. Once a method has been found, then conversion to a "higher performance" language is done--if necessary.

Personally, I'd probably use Python because (1) it's freely available, (2) has a significant community in the scientific and research worlds, and (3) can interop with a wide variety of languages and platforms.

James Schek
+1  A: 

I agree with James Schek. Google gives you RGB images - not the most helpful fot your task. Most imagery will have a couple of additional channels that may be better suited for you. Different channels show different features, water, urban areas, types of foliage etc. For example an infra-red channel could be used to pick out buildings in a cool climate. If you contact several data provider they may be able to recommend the best channels to use in their data.

Ariel imagery can be huge, numerous terrabytes for a detailed world database. Carefully consider how much information you need to process. If you are only doing a few square miles performance is not an issue. If you are processing thousands of square miles, performance becomes an issue. Processing millions, performance is mission critical and must be considered from day one.

Knowing the number of channels you need to process, your performance requirements and the file format of your data, look around for libraries that fulfil all your requirements. Many of them are written in C/C++ so using a language that interops with them both could be helpful

Stephen Nutt
A: 

Take a look at this demo: Finding Vegetation in a Multispectral Image , part of the Image Processing Toolbox in MATLAB. It is related to your problem of analysing satellite images to find specific patterns.

I believe it's an excellent example of the sort of things you can achieve easily with MATLAB using very little code.

Amro