Per pixel supervised classification

From AWF-Wiki
(Difference between revisions)
Jump to: navigation, search
(Postprocessing)
 
(36 intermediate revisions by one user not shown)
Line 1: Line 1:
 
=Using QGIS and OTB processing toolbox=
 
=Using QGIS and OTB processing toolbox=
  
* Using OTB version 7.2.0, input vector file format of training data can be GeoPackage GPKG or ESRI Shapefile.
+
* Using OTB version > 7.2.0, input vector file format of training data can be GeoPackage GPKG or ESRI Shapefile.
 
* The column containing class label needs to be an integer (whole number).
 
* The column containing class label needs to be an integer (whole number).
  
 
==Training phase==
 
==Training phase==
 
* In the search engine of Processing Toolbox, type {{typed|text=TrainImages}} and open '''TrainImagesClassifer'''.
 
* In the search engine of Processing Toolbox, type {{typed|text=TrainImages}} and open '''TrainImagesClassifer'''.
* In the {{button|text=Input Image List}} select a (or optional: several) multispectral images: '''mosaic_S2A_MSIL2A_20200521T102031_N0214_R065_T32UNC_UNB_UPC.tif'''.
+
* In the {{button|text=Input Image List}} select one (or optional: several) multi-band raster (multispectral images).
* In the {{button|text=Input Vector Data List}} '''do not''' select a vector file from the list of files which might be already loaded in the QGIS Viewer. There is a current bug in QGIS 3.16 which leads to failure during file import. Instead please select a vector file by using [[File:Qgis_add_file.png|20px]] and browse to the file containing training area polygons in format GPKG or SHP.
+
* In the {{button|text=Input Vector Data List}} select a file containing training area polygons in format GPKG or SHP.
* In the {{button|text=Validation Vector Data List}} and choose a vector polygon file with an independent sample of validation areas: leave empty.
+
* If you do not have independent validation data: leave {{button|text=Validation Vector Data List}} empty.
 +
* Bound sample number ba minimum: {{typed|text=1}}. The class with the minimum number of pixels determines the sample size of all other classes. Changing this value to {{typed|text=0}} does not have an effect (current bug in QGIS3.16).  
 
* Training and validation sample ratio: {{typed|text=0.25}}. This is a 4-fold cross-validation with split 0.75 per cent  for training and 0.25 per cent for testing.
 
* Training and validation sample ratio: {{typed|text=0.25}}. This is a 4-fold cross-validation with split 0.75 per cent  for training and 0.25 per cent for testing.
* Type {{typed|text=Code}} in the {{button|text=Field Name}} text field.
+
* Type {{typed|text=Code}} in the {{button|text=Field containing the class integer label for supervision}} text field.
* Choose Support Vector Machine Classifer {{button|text=libsvm}} from the drop down list.
+
* As Classifier to use for training choose Support Vector Machine {{button|text=libsvm}} from the drop down list.
* SVM Model Type is {{button|text=csvc}}
+
* User defined input centroids: Type any character, no need for a filename. This field is required and but ignored (a bug in the OTB plugin!)
+
 
* The SVM Kernel Type is {{button|text=Linear}}.
 
* The SVM Kernel Type is {{button|text=Linear}}.
 +
* SVM Model Type is {{button|text=csvc}}
 
* Switch checkbox {{button|text=Parameters optimization}} '''off'''. The optimization results in a higher accuracy but takes much time (> 1 hour computation).
 
* Switch checkbox {{button|text=Parameters optimization}} '''off'''. The optimization results in a higher accuracy but takes much time (> 1 hour computation).
* In the {{button|text=Output model}} specify an model file: e.g. '''svm.model'''
+
* In the {{button|text=Output model}} specify a model file: e.g. '''svm.model'''
* Define an output file for {{button|text=Output confusion matrix or contingency table}} (e.g.'''svm_matrix.csv''').
+
 
* Click {{button|text=Run}}.
 
* Click {{button|text=Run}}.
 
* Click on the {{button|text=Log}} tab and inspect the '''model quality''' measures: Precision, Recall, F-score and Kappa index.
 
* Click on the {{button|text=Log}} tab and inspect the '''model quality''' measures: Precision, Recall, F-score and Kappa index.
Line 24: Line 23:
 
==Classification phase==
 
==Classification phase==
 
* In the search engine of Processing Toolbox, type {{typed|text=ImageClassifier}} and double click '''ImageClassifier'''.
 
* In the search engine of Processing Toolbox, type {{typed|text=ImageClassifier}} and double click '''ImageClassifier'''.
* Set ''mosaic_S2A_MSIL2A_20200521T102031_N0214_R065_T32UNC_UNB_UPC.tif'' as {{button|text=Input image}}.
+
* Set an multiband image as {{button|text=Input image}}.
 
* Set {{button|text=Input _mask}} to blank (top of drop-down list).
 
* Set {{button|text=Input _mask}} to blank (top of drop-down list).
* Set '''lucc_svm.model''' as {{button|text=Model file}}.
+
* Set '''svm.model''' as {{button|text=Model file}}.
* Set the number of classes in your model: this is the number of unique classes in your training file.
+
* Set the number of classes in your model: this is the number of unique classes in your training vector file.
 
* Set {{button|text=Output pixel type}} to '''uint16'''
 
* Set {{button|text=Output pixel type}} to '''uint16'''
 
* Save the {{button|text=Output image}} as '''svm_classification.tif'''.
 
* Save the {{button|text=Output image}} as '''svm_classification.tif'''.
 
* Uncheck Confidence map: ''Open output file after running algorithm''.
 
* Uncheck Confidence map: ''Open output file after running algorithm''.
* Uncheck Probability map: ''Open output file after running algorithm''.
+
* Uncheck Probability map: ''Open output file after running algorithm''. {{button|text=Run}}.
* Add ''svm_classification.tif'' to QGIS canvas.
+
 
* Find the prepared style file '''rast_classifcation.qml''' in the Tutorial data of Workshop 05.
+
* Right click ''svm_classification.tif'' in the [[TOC]] and select {{mitem|text=Properties --> Symbology --> Style --> Load Style}}.
+
* Select the style file '''svm_classification.tif'''. {{button|text=OK}}.
+
 
[[File:qgis_otb_imageclassifier.png|400px]]
 
[[File:qgis_otb_imageclassifier.png|400px]]
 +
 +
* Find the output ''svm_classification.tif'' in the QGIS map canvas.
 +
* Right click on the layer ''svm_classification'' and select {{mitem|text=Properties --> Symbology --> Style --> Load Style}}.
 +
* Select the style file  '''classified.qml'''. {{button|text=OK}}.
  
 
==Postprocessing==
 
==Postprocessing==
This application uses a majority filter with a circular structure element.
+
"Sieve" removes raster polygons smaller than a provided threshold size (in pixels) and replaces them with the pixel value of the largest neighbour polygon. This is useful if you want to generalize a map and have a large amount of very small areas on your raster map
* In the search engine of Processing Toolbox, type {{typed|text=regularization}} and double click '''ClassificationMapRegularization'''.
+
 
* Define {{button|text=Input classification image}} as an classification output raster.
+
This application uses a the "Sieve" algorithm.
* Set {{button|text=Structuring element radius}} to {{typed|text=2}} pixels.
+
* In the search engine of Processing Toolbox, type {{typed|text=sieve}} and double click Gdal > Raster analysis > ''' Sieve'''.
* Set {{button|text=Output pixel type}} to {{button|text=uint16}}.
+
* Define {{button|text=Input layer}} as an thematic raster map.
* Save the {{button|text=Output regularizd image}} as '''svm_classification_majority.tif'''.
+
* Only raster polygons smaller than the size defined by {{button|text=Trheshold}} will be removed. Set to {{typed|text=2}} pixels.
 +
* Click checkbox {{button|text=Use 8-connectedness}} on.
 +
* Save the {{button|text=Sieved}} as '''svm_classification_sieve.tif'''.
 
* Click {{button|text=Run}}.
 
* Click {{button|text=Run}}.
[[File:qgis_otb_majority.png|400px]]
+
 
 +
[[File:qgis_gdal_sieve.png|400px]]
 +
 
 +
* Find the output ''svm_classification_sieve.tif'' in the QGIS map canvas.
 +
* Right click on the layer ''svm_classification_sieve'' in the and select {{mitem|text=Properties --> Symbology --> Style --> Load Style}}.
 +
* Select the style file  '''rast_classified.qml'''. {{button|text=OK}}
  
 
=Using OTB standalone=
 
=Using OTB standalone=
 
==Training phase==
 
==Training phase==
* Type into the search box of the Windows taskbar: {{typed|text=mapla.bat}}. Click on mapla.bat to open Monteverdi Application Launcher.
+
* Navigate in the Windows explorer to your Folder OTB-7.2.0-Win64. Double click the Windows-Batchdatei mapla to open Monteverdi Application Launcher.
 
* In the search engine of mapla, type {{typed|text=TrainImages}} and double click '''TrainImagesClassifer'''.
 
* In the search engine of mapla, type {{typed|text=TrainImages}} and double click '''TrainImagesClassifer'''.
 
* In the {{button|text=Input Image List}} click on {{button|text=+}} and select a (or optional: several) multispectral images: '''Subset_S2A_MSIL2A_20170619T_MUL.tif '''.
 
* In the {{button|text=Input Image List}} click on {{button|text=+}} and select a (or optional: several) multispectral images: '''Subset_S2A_MSIL2A_20170619T_MUL.tif '''.
* In the {{button|text=Input Vector Data List}} choose a vector polygon file with training areas: '''lucc_training_input.shp'''.
+
* In the {{button|text=Input Vector Data List}} choose a vector polygon file with training areas in file format GPKG or SHP.
* Activate the checkbox {{button|text=Validation Vector Data List}} and choose a vector polygon file with an independent sample of validation areas: '''lucc_validation.shp'''
+
* In the {{button|text=Output model}} specify an output model file: e.g. '''lucc_rf.model'''
* In the {{button|text=Output model}} specify an output model file: e.g. '''lucc_svm.model'''
+
* In the {{button|text=Bound sample number by minimum}} field type {{typed|text=0}}.  
* Activate the checkbox and save the {{button|text=Output confusion matrix or contingency table}} as '''lucc_svm_confusion.csv'''.
+
* Set the {{button|text=training and validation sample ratio}} to {{typed|text=0.25}}.
* In the {{button|text=Bound sample number by minimum}} field type {{typed|text=1}}.
+
* Set the {{button|text=training and validation sample ratio}} to {{typed|text=0 }}. (0 = all training data).
+
 
* Mark  ''C_ID''  in the {{button|text=Field containing the class integer label}} (C_ID refers to the column that contains the LUC code in the training and validation vector file).
 
* Mark  ''C_ID''  in the {{button|text=Field containing the class integer label}} (C_ID refers to the column that contains the LUC code in the training and validation vector file).
* Choose {{button|text=LibSVM classifier}} from the drop down list as Classifier to use for the training.
+
* Choose {{button|text=Shark Random forests classifier}} from the drop down list as Classifier to use for the training.
* The SVM Kernel Type is {{button|text=Linear}}.
+
* Check user defined Random seed and enter any positive integer value. This initializes a pseudorandom number generator which may be used to reproduce results.
* The SVM Model Type is {{button|text=C support vector classification}}.
+
* Switch the Parameters optimization to {{button|text=on}}.
+
* Check user defined seed and enter an integer value.
+
 
* Click on {{button|text=Execute}}.
 
* Click on {{button|text=Execute}}.
* Click on the {{button|text=Log}} tab and inspect the quality measures: Precision, Recall, F-score and Kappa index.
+
* Click on the {{button|text=Log}} tab and inspect the model quality measures: Precision, Recall, F-score and Kappa index.
[[File:otb_trainimages.png|500px]]
+
[[File:otb_Trainrf.png|500px]]
 +
 
 
==Classification phase==
 
==Classification phase==
* In the search engine of mapla, type {{typed|text=ImageClassifier}} and double click '''ClassifcationMapRegularization'''
+
* In the search engine of mapla, type {{typed|text=ImageClassifier}} and double click '''ImageClassifier'''
 
* Set ''Subset_S2A_MSIL2A_20170619T_MUL.tif'' as {{button|text=Input image}}.
 
* Set ''Subset_S2A_MSIL2A_20170619T_MUL.tif'' as {{button|text=Input image}}.
* Set '''SVM.model''' as {{button|text=Model file}}.
+
* Set '''lucc_rf.model''' as {{button|text=Model file}}.
* Save the {{button|text=Output image}} as '''svm_classification.tif'''.
+
* Save the {{button|text=Output image}} as '''rf_classification.tif'''.
 +
* Adjust the {{button|text=Number of classes in the model}} to the number of unique classes in the training vector file.
 +
 
 
[[File:otb_imageclassifier.png|500px]]
 
[[File:otb_imageclassifier.png|500px]]
* Evaluate classification results:
+
 
* Add ''svm_classification.tif'' to QGIS canvas.
+
* Add ''rf_classification.tif'' to QGIS canvas.
* Download the style file '''classifcation.qml''' from Stud.IP.
+
* Download the style file '''classified.qml''' from Stud.IP.
* Right click ''svm_classification.tif'' in the [[TOC]] and select {{mitem|text=Properties --> Style --> Style --> Load Style}}.
+
* Right click on the layer ''rf_classification'' and select {{mitem|text=Properties --> Style --> Style --> Load Style}}.
* Select the style file '''\lucc\classification.qml'''. {{button|text=OK}}.
+
* Select the style file '''classified.qml'''. {{button|text=OK}}.
* Open the text file '''lucc_svm_confusion.csv''' with LibreOffice Calc or MS Excel and calculate overall, user, producer accuracy and kappa index.  
+
  
 
==Postprocessing==
 
==Postprocessing==
 
This application uses a majority with a circular structure element.
 
This application uses a majority with a circular structure element.
 
* In the search engine of mapla, type, {{typed|text=regular}} and double click '''ClassifcationMapRegularization'''.
 
* In the search engine of mapla, type, {{typed|text=regular}} and double click '''ClassifcationMapRegularization'''.
* Define {{button|text=Input classification image}} as ans classification output raster.
+
* As the{{button|text=Input classification image}} define the output raster file of the classification phase.
* Save the {{button|text=Output regularizd image}} as '''svm_classification_majority.tif'''.
+
* Save the {{button|text=Output regularizd image}} as '''rf_classification_majority.tif'''.
* Set {{button|text=Structuring element radius}} to {{typed|text=3}} pixels.
+
* Set {{button|text=Structuring element radius}} to {{typed|text=2}} pixels.
 
* Set {{button|text=Output pixel type}} to {{button|text=uint8}}.
 
* Set {{button|text=Output pixel type}} to {{button|text=uint8}}.
 
* Click {{button|text=Execute}}.
 
* Click {{button|text=Execute}}.
 +
 
[[File:otb_majority.png|400px]]
 
[[File:otb_majority.png|400px]]
 +
 +
* Add ''rf_classification_majority.tif'' to QGIS canvas.
 +
* Download the style file '''classified.qml''' from Stud.IP.
 +
* Right click on the layer ''rf_classification_majority'' and select {{mitem|text=Properties --> Style --> Style --> Load Style}}.
 +
* Select the style file '''classified.qml'''. {{button|text=OK}}.
  
 
[[Category:QGIS Tutorial]]
 
[[Category:QGIS Tutorial]]

Latest revision as of 06:41, 6 June 2022

Contents

[edit] Using QGIS and OTB processing toolbox

  • Using OTB version > 7.2.0, input vector file format of training data can be GeoPackage GPKG or ESRI Shapefile.
  • The column containing class label needs to be an integer (whole number).

[edit] Training phase

  • In the search engine of Processing Toolbox, type TrainImages and open TrainImagesClassifer.
  • In the Input Image List select one (or optional: several) multi-band raster (multispectral images).
  • In the Input Vector Data List select a file containing training area polygons in format GPKG or SHP.
  • If you do not have independent validation data: leave Validation Vector Data List empty.
  • Bound sample number ba minimum: 1. The class with the minimum number of pixels determines the sample size of all other classes. Changing this value to 0 does not have an effect (current bug in QGIS3.16).
  • Training and validation sample ratio: 0.25. This is a 4-fold cross-validation with split 0.75 per cent for training and 0.25 per cent for testing.
  • Type Code in the Field containing the class integer label for supervision text field.
  • As Classifier to use for training choose Support Vector Machine libsvm from the drop down list.
  • The SVM Kernel Type is Linear.
  • SVM Model Type is csvc
  • Switch checkbox Parameters optimization off. The optimization results in a higher accuracy but takes much time (> 1 hour computation).
  • In the Output model specify a model file: e.g. svm.model
  • Click Run.
  • Click on the Log tab and inspect the model quality measures: Precision, Recall, F-score and Kappa index.

Qgis otb trainimages.png

[edit] Classification phase

  • In the search engine of Processing Toolbox, type ImageClassifier and double click ImageClassifier.
  • Set an multiband image as Input image.
  • Set Input _mask to blank (top of drop-down list).
  • Set svm.model as Model file.
  • Set the number of classes in your model: this is the number of unique classes in your training vector file.
  • Set Output pixel type to uint16
  • Save the Output image as svm_classification.tif.
  • Uncheck Confidence map: Open output file after running algorithm.
  • Uncheck Probability map: Open output file after running algorithm. Run.

Qgis otb imageclassifier.png

  • Find the output svm_classification.tif in the QGIS map canvas.
  • Right click on the layer svm_classification and select Properties --> Symbology --> Style --> Load Style.
  • Select the style file classified.qml. OK.

[edit] Postprocessing

"Sieve" removes raster polygons smaller than a provided threshold size (in pixels) and replaces them with the pixel value of the largest neighbour polygon. This is useful if you want to generalize a map and have a large amount of very small areas on your raster map

This application uses a the "Sieve" algorithm.

  • In the search engine of Processing Toolbox, type sieve and double click Gdal > Raster analysis > Sieve.
  • Define Input layer as an thematic raster map.
  • Only raster polygons smaller than the size defined by Trheshold will be removed. Set to 2 pixels.
  • Click checkbox Use 8-connectedness on.
  • Save the Sieved as svm_classification_sieve.tif.
  • Click Run.

400px

  • Find the output svm_classification_sieve.tif in the QGIS map canvas.
  • Right click on the layer svm_classification_sieve in the and select Properties --> Symbology --> Style --> Load Style.
  • Select the style file rast_classified.qml. OK

[edit] Using OTB standalone

[edit] Training phase

  • Navigate in the Windows explorer to your Folder OTB-7.2.0-Win64. Double click the Windows-Batchdatei mapla to open Monteverdi Application Launcher.
  • In the search engine of mapla, type TrainImages and double click TrainImagesClassifer.
  • In the Input Image List click on + and select a (or optional: several) multispectral images: Subset_S2A_MSIL2A_20170619T_MUL.tif .
  • In the Input Vector Data List choose a vector polygon file with training areas in file format GPKG or SHP.
  • In the Output model specify an output model file: e.g. lucc_rf.model
  • In the Bound sample number by minimum field type 0.
  • Set the training and validation sample ratio to 0.25.
  • Mark C_ID in the Field containing the class integer label (C_ID refers to the column that contains the LUC code in the training and validation vector file).
  • Choose Shark Random forests classifier from the drop down list as Classifier to use for the training.
  • Check user defined Random seed and enter any positive integer value. This initializes a pseudorandom number generator which may be used to reproduce results.
  • Click on Execute.
  • Click on the Log tab and inspect the model quality measures: Precision, Recall, F-score and Kappa index.

Otb Trainrf.png

[edit] Classification phase

  • In the search engine of mapla, type ImageClassifier and double click ImageClassifier
  • Set Subset_S2A_MSIL2A_20170619T_MUL.tif as Input image.
  • Set lucc_rf.model as Model file.
  • Save the Output image as rf_classification.tif.
  • Adjust the Number of classes in the model to the number of unique classes in the training vector file.

Otb imageclassifier.png

  • Add rf_classification.tif to QGIS canvas.
  • Download the style file classified.qml from Stud.IP.
  • Right click on the layer rf_classification and select Properties --> Style --> Style --> Load Style.
  • Select the style file classified.qml. OK.

[edit] Postprocessing

This application uses a majority with a circular structure element.

  • In the search engine of mapla, type, regular and double click ClassifcationMapRegularization.
  • As theInput classification image define the output raster file of the classification phase.
  • Save the Output regularizd image as rf_classification_majority.tif.
  • Set Structuring element radius to 2 pixels.
  • Set Output pixel type to uint8.
  • Click Execute.

Otb majority.png

  • Add rf_classification_majority.tif to QGIS canvas.
  • Download the style file classified.qml from Stud.IP.
  • Right click on the layer rf_classification_majority and select Properties --> Style --> Style --> Load Style.
  • Select the style file classified.qml. OK.
Personal tools
Namespaces

Variants
Actions
Navigation
Development
Toolbox
Print/export