开发者

Image processing of Satellite Images

开发者 https://www.devze.com 2022-12-18 06:34 出处:网络
Is it possible to analyze the satellite images to find the possibility of rainfall ares, moisture landscapes such as water bodies, forest areas, wasteland, etc by using c开发者_JAVA技巧omputer languag

Is it possible to analyze the satellite images to find the possibility of rainfall ares, moisture landscapes such as water bodies, forest areas, wasteland, etc by using c开发者_JAVA技巧omputer languages such as C, C++, Java? Which is the best among these? Is It Complicated?

Is there any other option to do this project using advanced C, C++, Java versions? Do these languages have any special function to read pixel values without using tools such as MATLAB, LABVIEW?


alt text http://xs.to/thumb-1F0D_4B62DE2C.jpgalt text http://xs.to/thumb-0C7F_4B62DFCB.jpg

There is a section in the book "Digital Image Processing 3rd Edition" about land-mass analysis if I recall correctly. Also check out "Digital Image Processing in C" which you can download here.

IIRC and this NASA page seems to confirm, and I am no physicist, you will need satallite images with the complete (not just visible) electromagnetic spectrum. This allows you to pick out water, vegitation and so on.

Landsat 7 images are color composites, made by assigning the three primary colors to three bands of the Enhanced Thematic Mapper (ETM+) sensor. These images are not color photographs, they are "false color" images (green fields won't necessarily look green in the image).

The landsat bands will help:

1 coastal water mapping, soil/vegetation discrimination, forest classification, man-made feature identification
2 vegetation discrimination and health monitoring, man-made feature identification
3 plant species identification, man-made feature identification
4 soil moisture monitoring, vegetation monitoring, water body discrimination
5 vegetation moisture content monitoring
6 surface temperature, vegetation stress monitoring, soil moisture monitoring, cloud differentiation, volcanic monitoring
7 mineral and rock discrimination, vegetation moisture content

For more details see: Lillesand, T. and Kiefer, R., 1994. Remote Sensing and Image Interpretation. John Wiley and Sons, Inc., New York, p. 468.

You might also want to create a 3D relief of the images and try and relate the spectrum data with valleys, likely river points, coastal regions and so on. In short there is data to make estimates through image analysis


Texture operators can differentiate geographical regions in satellite imagery. Here is a paper from Robert Haralick describing classic texture operators to identify water bodies, grass regions, metropolitan areas, etc.

I've had some success with the open source Orfeo toolbox, which is a C++ image processing library based on ITK, but specifically for satellite imagery. You can see some implementation examples of texture operators in the documentation here.

Image processing of Satellite Images

Image processing of Satellite Images


I would recommend python for this as the language, in my expeicence, is more user friendly and there a growing number of python modules for processing remotely sensed data. Furthermore, python is open source so you can avoid MATLAB etc.

The RSGISLib software has python bindings and is ideal for processing remote sensing data. I used it entirely throughout my PhD. The software can be found here http://www.rsgislib.org and a great blog demonstrating its applications can be found here https://spectraldifferences.wordpress.com

I have a background in Geography but was able to use python with ease. C++ and JAVA etc are more complicated in my opinion, as python often has modules that do the tricky bits (accessing imagery, checking projections etc) for you.


paniwani's answer is a good start--insofar as he suggests texture analysis. Imagemagick is not often used for texture analysis, but it's definitely a possible tool for doing so. Check this out:

$ cat get_images.sh 
#!/bin/bash

base_url='http://maps.googleapis.com/maps/api/staticmap?center='
other_params='&zoom=12&size=400x400&maptype=satellite&sensor=false'

curl -o desert1.png   "$base_url"'41.660000,112.900000'"$other_params" 2>/dev/null
curl -o desert2.png   "$base_url"'40.660000,112.900000'"$other_params" 2>/dev/null
curl -o rural1.png    "$base_url"'40.714728,-74.400000'"$other_params" 2>/dev/null
curl -o rural2.png    "$base_url"'41.714728,-74.400000'"$other_params" 2>/dev/null
curl -o suburban1.png "$base_url"'40.614728,-74.300000'"$other_params" 2>/dev/null
curl -o suburban2.png "$base_url"'40.714728,-74.200000'"$other_params" 2>/dev/null
curl -o urban1.png    "$base_url"'40.744728,-73.831672'"$other_params" 2>/dev/null
curl -o urban2.png    "$base_url"'40.754728,-73.930672'"$other_params" 2>/dev/null

echo -e "\nEntropy:"
for t in "desert1" "desert2" "rural1" "rural2" "suburban1" "suburban2" "urban1" "urban2"; do 
  echo -e "  " $t "\t" `./entropy "$t".png | grep Aver | sed -e 's/.*= //'`
done

echo -e "\nStd Dev:"
for t in "desert1" "desert2" "rural1" "rural2" "suburban1" "suburban2" "urban1" "urban2"; do 
  echo -e "  " $t "\t" `convert "$t".png -format '%[fx:standard_deviation]' info:`
done

echo -e "\nRatio of hi freq to low freq:"
for t in "desert1" "desert2" "rural1" "rural2" "suburban1" "suburban2" "urban1" "urban2"; do 
  convert "$t".png -fft +depth +adjoin "$t"_fft_%d.png
  convert "$t"_fft_1.png -fill none -stroke black -strokewidth 100 -draw "rectangle 50,50,350,350" "$t"_fft_1b.png
  convert "$t"_fft_1.png -fill none -stroke black -strokewidth 100 -draw "rectangle 150,150,250,250" "$t"_fft_1c.png
  lo=`./entropy "$t"_fft_1b.png | grep Average | sed -e 's/.*= //'`
  hi=`./entropy "$t"_fft_1c.png | grep Average | sed -e 's/.*= //'`
  echo -e "  " $t "\t" `echo "scale=8; $lo / $hi" | bc`
done

$ ./get_images.sh 

Entropy:
   desert1   0.557244
   desert2   0.586651
   rural1    0.652486
   rural2    0.709812
   suburban1 0.69883
   suburban2 0.727527
   urban1    0.746479
   urban2    0.765279

Std Dev:
   desert1   0.0756219
   desert2   0.0881424
   rural1    0.107279
   rural2    0.140878
   suburban1 0.125647
   suburban2 0.143765
   urban1    0.150628
   urban2    0.185245

Ratio of hi freq to low freq:
   desert1    .41319501
   desert2    .41337079
   rural1     .41333309
   rural2     .41335422
   suburban1  .41326120
   suburban2  .41339882
   urban1     .41327271
   urban2     .41326168

Those three different metrics (image entropy, image standard deviation, ratio of hi freq to lo freq content in an image) are each decently correlated with a spectrum from desert-to-rural-to-suburban-to-urban. If you put these into a classifier (e.g., a neural network), I bet you could develop a decent predictor of whether a google map satellite image is desert, rural, suburban, or urban land.

0

精彩评论

暂无评论...
验证码 换一张
取 消