Opened 15 years ago
Last modified 6 years ago
#804 new enhancement
Implemenation of the Pareto Boundary (to support accuracy assessment of low resolution thematic maps)
Reported by: | nikos | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 7.6.2 |
Component: | Imagery | Version: | unspecified |
Keywords: | pareto boundary, accuracy assessment, low resolution thematic maps, high resolution reference | Cc: | nikos.alexandris@… |
CPU: | Unspecified | Platform: | Unspecified |
Description
It would be nice to have an "i.pareto" (?) module in GRASS which will implement the Pareto Boundary.
The Pareto Boundary can be useful for the accuracy assessment of (all kinds of) low resolution dichotomic maps and theoretically even maps with multiple classes.
Details can be found in a paper of Boschetti et al. [1].
I've wrote some python and R scripts (attached) for my own use which are (very) far from being (what I call) a generally useful program. I wish some real programmer could implement this within grass (and R).
Thanks, Nikos
---
[1] Analysis of the conflict between omission and commission in low
spatial resolution dichotomic thematic products: The Pareto Boundary
Luigi Boschetti, Stephane P. Flasse, Pietro A. Brivio; published in
Remote Sensing of Environment 91 (2004) 280 – 292
Attachments (1)
Change History (11)
by , 15 years ago
Attachment: | pareto_boundary_grass_python_R_scripts.tar.gz added |
---|
comment:1 by , 15 years ago
Testing the scripts within the spearfish60 dataset (warning: too many comments and print-outs):
# testing with spearfish60 data grass64 /geo/grassdb/spearfish60/user1/ # set region to g.region s=4925000 e=593500 n=4927000 w=590000 res=30 -p # use sqlite db-backend db.connect driver=sqlite database=/geo/grassdb/spearfish60/PERMANENT/sqlite.db db.connect -p ### prepare input files # high resolution reference raster map will be g.copy rast=landcover.30m,landcover_ref # high resolution reference Class of Interest (to be assessed) will be (e.g. rangeland) r.mapcalc "landcover_refcoi = if(landcover.30m == 51 || landcover.30m == 71 || landcover.30m == 81 || landcover.30m == 92, 2, null())" # low resolution classification map 1 (to be assessed for accuracy) will be g.region res=100 -pa r.mapcalc "pareto_classification_rangeland_1 = if (vegcover == 2, 2, null())" # prepare a 2nd classification map g.copy rast=pareto_classification_rangeland_1,pareto_classification_rangeland_2 # edit/ change 2nd map d.rast.edit pareto_classification_rangeland_2 out=pareto_classification_rangeland_2_edited g.remove pareto_classification_rangeland_2 g.rename rast=pareto_classification_rangeland_2_edited,pareto_classification_rangeland_2 ### extract omission and commission errors for pareto-optimal maps and classifications # step 1 python pareto_1_vectorise_rasters.py reference_raster=landcover_ref \ reference_coi_rasters=landcover_refcoi \ classification_rasters=pareto_classification_rangeland_1,pareto_classification_rangeland_2 --o # step 2 python pareto_2_create_lowres_vector_grid.py highres=30 lowres=100 --o # step 3 python pareto_3_count_pixels_within_gridcells.py --v # step 4 python pareto_4_calculate_coi_percentages.py --v # step 5 python pareto_5_populate_thresholds_and_classifications.py lowres=100 --v # step 6 python pareto_6_populate_pareto_errors.py --v # step 7 python pareto_7_populate_classification_errors.py --v # step 8 python pareto_8_export_csv___spearfish60.py --o ### use epoxrted csv files to plot the Pareto Boundary (using the R scripts within R)
comment:2 by , 15 years ago
Component: | default → Imagery |
---|---|
Milestone: | 6.4.0 → 7.0.0 |
comment:3 by , 9 years ago
Milestone: | 7.0.0 → 7.0.5 |
---|
comment:4 by , 8 years ago
Milestone: | 7.0.5 → 7.3.0 |
---|
comment:7 by , 6 years ago
Milestone: | 7.4.1 → 7.4.2 |
---|
comment:8 by , 6 years ago
Milestone: | 7.4.2 → 7.6.0 |
---|
All enhancement tickets should be assigned to 7.6 milestone.
python scripts and R code for the pareto boyndary