[GRASS-dev] Unexpected EVI range from "i.vi"
Nikos Alexandris
nik at nikosalexandris.net
Tue Jun 11 15:02:51 PDT 2013
Markus Neteler wrote:
> if you have a i.landsat.toar corrected scene, please extract the
> values for
Landsat scene: LE71610432005160ASN00
> - water pixel
e.g. WaterCoordinates=765525.446097,2756869.46097
# DNs
r.what
map=B.Trimmed.1,B.Trimmed.2,B.Trimmed.3,B.Trimmed.4,B.Trimmed.5,B.Trimmed.7,B.Trimmed.8
coordinates=${WaterCoordinates}
765525.446097|2756869.46097||62|39|30|18|14|12|26
# uncorrected
r.what
map=B.Trimmed.ToAR.1,B.Trimmed.ToAR.2,B.Trimmed.ToAR.3,B.Trimmed.ToAR.4,B.Trimmed.ToAR.5,B.Trimmed.ToAR.7,B.Trimmed.ToAR.8
coordinates=765525.446097,2756869.46097
765525.446097|2756869.46097||0.118040401828469|0.0759433089269006|
0.0508433154533196|0.0384822843294042|0.0232458453463901|
0.0164118682715267|0.0508219851689881
# DOS1
r.what
map=B.Trimmed.ToCR.DOS1.1,B.Trimmed.ToCR.DOS1.2,B.Trimmed.ToCR.DOS1.3,B.Trimmed.ToCR.DOS1.4,B.Trimmed.ToCR.DOS1.5,B.Trimmed.ToCR.DOS1.7,B.Trimmed.ToCR.DOS1.8
coordinates=765525.446097,2756869.46097
765525.446097|2756869.46097||0.0328866250195922|0.0295187172229351|
0.0254622287384144|0.0257491107226925|0.056707690279387|
0.0271800219947907|0.0311700429776789
> - green vegetation
e.g. VegetationCoordinates=732730.388415,2691278.87464
# DNs
r.what
map=B.Trimmed.1,B.Trimmed.2,B.Trimmed.3,B.Trimmed.4,B.Trimmed.5,B.Trimmed.7,B.Trimmed.8
coordinates=732730.388415,2691278.87464
732730.388415|2691278.87464||123|132|138|128|35|18|140
# uncorrected
r.what
map=B.Trimmed.ToAR.1,B.Trimmed.ToAR.2,B.Trimmed.ToAR.3,B.Trimmed.ToAR.4,B.Trimmed.ToAR.5,B.Trimmed.ToAR.7,B.Trimmed.ToAR.8
coordinates=732730.388415,2691278.87464
732730.388415|2691278.87464||0.247199226586371|0.291862470817408|
0.282582569007011|0.399097240803081|0.0860689419202952|
0.0335775069404968|0.337889173730889
# DOS1
r.what
map=B.Trimmed.ToCR.DOS1.1,B.Trimmed.ToCR.DOS1.2,B.Trimmed.ToCR.DOS1.3,B.Trimmed.ToCR.DOS1.4,B.Trimmed.ToCR.DOS1.5,B.Trimmed.ToCR.DOS1.7,B.Trimmed.ToCR.DOS1.8
coordinates=732730.388415,2691278.87464
732730.388415|2691278.87464||0.188007083485717|0.288838817470502|
0.303782346029874|0.458849655596738|0.132158574576858|
0.0477960483885396|0.37593931432845
> - asphalt
e.g. AsphaltCoordinates=857330.701903,2702202.81571
### quick choice, maybe I didn't pick a good-one...
# DNs
r.what
map=B.Trimmed.1,B.Trimmed.2,B.Trimmed.3,B.Trimmed.4,B.Trimmed.5,B.Trimmed.7,B.Trimmed.8
coordinates=857330.701903,2702202.81571
857330.701903|2702202.81571||77|70|77|81|97|67|80
# uncorrected
r.what
map=B.Trimmed.ToAR.1,B.Trimmed.ToAR.2,B.Trimmed.ToAR.3,B.Trimmed.ToAR.4,B.Trimmed.ToAR.5,B.Trimmed.ToAR.7,B.Trimmed.ToAR.8
coordinates=857330.701903,2702202.81571
857330.701903|2702202.81571||0.149800768572215|0.147916362890403|
0.151692805425759|0.245016304855237|0.271546655614681|
0.173763556070419|0.186801179750941
# DOS1
r.what
map=B.Trimmed.ToCR.DOS1.1,B.Trimmed.ToCR.DOS1.2,B.Trimmed.ToCR.DOS1.3,B.Trimmed.ToCR.DOS1.4,B.Trimmed.ToCR.DOS1.5,B.Trimmed.ToCR.DOS1.7,B.Trimmed.ToCR.DOS1.8
coordinates=857330.701903,2702202.81571
857330.701903|2702202.81571||0.0710310000522459|0.115958750638791|
0.146583020522661|0.2737976046051|0.354918328217012|0.216160263937489|
0.194481803091202
> ... all bands except for TIR.
>
> I want then to synthetic channels of one pixel to do
> the i.vi testing:
>
> # prepare comp. region
> g.region rast=lsat7_2002_10 rows=1 cols=1 -p
g.region rast=B.Trimmed.1 rows=1 cols=1 -p
projection: 1 (UTM)
zone: 39
datum: wgs84
ellipsoid: wgs84
north: 2815470
south: 2621340
west: 658560
east: 875880
nsres: 194130
ewres: 217320
rows: 1
cols: 1
cells: 1
> # create synthetic channels (for the letters, we need your values)
> r.mapcalc "water_b7 = aa"
> r.mapcalc "water_b5 = bb"
> r.mapcalc "water_b4 = cc"
> r.mapcalc "water_b3 = dd"
> r.mapcalc "water_b2 = ee"
> r.mapcalc "water_b1 = ff"
Something like...
# for the water pixel
g.region e=765525.446097 n=2756869.46097 rows=1 cols=1 -p
..
for BAND in `g.mlist rast pat=B.Trimmed.ToCR.DOS1.[1234567]`; do r.mapcalc --o
"Water_${BAND} = `r.what map=${BAND} coordinates=${WaterCoordinates}
separator=space | cut -d" " -f4`"; done
> Likewise for the other "landuses".
# for the vegetation pixel
g.region e=732730.388415 n=2691278.87464 rows=1 cols=1 -p
..
for BAND in `g.mlist rast pat=B.Trimmed.ToCR.DOS1.[1234567]`; do r.mapcalc --o
"Vegetation_${BAND} = `r.what map=${BAND} coordinates=${VegetationCoordinates}
separator=space | cut -d" " -f4`"; done
# for the Asphalt pixel
g.region e=857330.701903 n=2702202.81571 rows=1 cols=1 -p
..
for BAND in `g.mlist rast pat=B.Trimmed.ToCR.DOS1.[1234567]`; do r.mapcalc --o
"Asphalt_${BAND} = `r.what map=${BAND} coordinates=${AsphaltCoordinates}
separator=space | cut -d" " -f4`"; done
> This allows us to create a tiny
> test environment to check the output. I am just lacking a prepared
> Landsat scene (and the time to process it). Since you already have it,
> you may extract the values easily with r.what or the wxGUI.
And a small bash script to loop over all VIs and over all One-Pixel-Samples
[*]. Finally, the results are (min == max in this "rows=1 cols=1" case!):
for BAND in `g.mlist rast pat=Water_B.Trimmed.ToCR.DOS1.[1234567]`; do r.info
-r ${BAND} | grep min; done
raster map(s) available in mapset <LE71610432005160ASN00>:
min=0.0481443750326537
min=0.0490374344458703
min=0.046078533722967
min=0.0454354991260582
min=0.0782650857929503
min=0.0409240395906233
and
g.mlist rast pat=Water*[i2r]raster map(s) available in mapset
<LE71610432005160ASN00>:
Water_B.Trimmed.ToCR.DOS1.2 ## this line erased below!
Water_arvi
Water_dvi
Water_evi
Water_evi2
Water_gari
Water_gemi
Water_gvi
Water_ipvi
Water_msavi
Water_ndvi
Water_pvi
Water_savi
Water_sr
Water_vari
Water_wdvi
and
for BAND in `g.mlist rast pat=Water*[i2r]`; do r.info -r ${BAND} | grep min;
done
raster map(s) available in mapset <LE71610432005160ASN00>:
min=-0.00104585171625509
min=-0.0048671942618601
min=-0.0128935704898675 < evi
min=-0.011069571524947 < evi2
min=-0.197757064195647
min=0.191012824457828
min=-0.0196695823724785
min=0.456824639712233
min=1.63041663127611e-322
min=-0.0863507205755333 < ndvi
min=1.30982050129005
min=-0.0131222955034138
min=0.841026072077743
min=0.189696175424249
min=-0.0048671942618601
For vegetation
min=-0.109202427083821
min=0.091932325419388
min=0.0906057329745037 < evi
min=0.0890674653350201 < evi2
min=-0.0101650844110309
min=0.0907088977409898
min=-0.0233998614337842
min=0.54750980461334
min=2.27270197086973e-322
min=0.0950196092266791 < ndvi
min=1.88445187922905
min=0.0939677302110911
min=1.20999263673654
min=-0.658097689747127
min=0.091932325419388
and for Asphalt
min=-0.112886677245694
min=0.087995047738715
min=0.0868600935258041 < evi
min=0.0853831642974438 < evi2
min=-0.0115058252232626
min=0.0862210729152634
min=-0.0252559818827325
min=0.54566087158789
min=2.27270197086973e-322
min=0.0913217431757802 < ndvi
min=1.87044523200757
min=0.0901852442168926
min=1.20099907198164
min=-0.652697895300491
min=0.087995047738715
Salutations, Nikos
[*]:
##############################################################################
# loop over all vegetation indices
for VI in \
arvi \
dvi \
evi \
evi2 \
gvi \
gari \
gemi \
ipvi \
msavi \
ndvi \
pvi \
savi \
sr \
vari \
wdvi
do
for SAMPLE in \
Water \
Vegetation \
Asphalt
do
# set resolution and extent
g.region rast=${SAMPLE}_B.Trimmed.ToCR.DOS1.1 rows=1 cols=1 -pa
# derive vegetation indice
echo "Deriving ${VI}..."
i.vi viname=${VI} --o \
blue=${SAMPLE}_B.Trimmed.ToCR.DOS1.1\
green=${SAMPLE}_B.Trimmed.ToCR.DOS1.2 \
red=${SAMPLE}_B.Trimmed.ToCR.DOS1.3 \
nir=${SAMPLE}_B.Trimmed.ToCR.DOS1.4 \
chan5=${SAMPLE}_B.Trimmed.ToCR.DOS1.5 \
chan7=${SAMPLE}_B.Trimmed.ToCR.DOS1.7 \
output=${SAMPLE}_${VI}
done
done
##############################################################################
More information about the grass-dev
mailing list