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.
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.
精彩评论