Supervised classification (Tutorial)

From AWF-Wiki
(Difference between revisions)
Jump to: navigation, search
 
(97 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{construction}}
+
=Per pixel classification with QGIS and OTB processing plugin=
:''This article is part of the [[QGIS tutorial 2013/14]].<br/>In this article, you will learn how to conduct a supervised image classification in [[QGIS]] 2.0''
+
In '''OTB Version 7.0.0''' the requirements for the input training vector data are very restrictive because of some bugs.
 +
** File format needs to be Shapefile (GPKG does not work).
 +
** The column containing the class label needs to integer (whole number). '''Data type Integer 64bit does not work!'''
 +
** Any other columns with other data types (real or text (string) with umlauts or blank are not correctly imported which leads to failure of the modul TrainImagesClassifier.
 +
A work around is to make a copy of your training data and delete all other columns than the class label column
  
# First, you need to install the ''Semi Automatic Class Plugin''
+
All these issues have been fixed in '''OTB Version 7.1.0'''!
## Click {{button|text=Manage and install plugins}}.
+
## In the appearing menu, select {{button|text=Add more}}.
+
## Browse for the plugin (it's most comfortable to use the search-field).
+
## Click {{button|text=Install}}
+
# Testing the plugin
+
## For the plugin to work, you need to make sure that your [[:wikipedia:GRASS GIS|GRASS GIS]] installation is working properly:
+
## With the plugin installed, select {{mitem|text=Raster --> Semi Automatic Class Plugin}}.
+
## In the appearing menu, select the {{button|text=Settings}} tab (figure '''A'''). Click {{button|text=Test Grass GIS}} and wait until the message {{button|text=Test OK}} appears.
+
## Click the {{button|text=Test QGIS Algorithm}} button and wait again until the {{button|text=Test OK}} message appears.
+
## Do the same for the Orfeo Toolbox and Saga algorithms.
+
# Classification
+
## Add the raster map ''188_pca_indices.tif'' from the [[course data]] (see previous exercises).
+
## Also add the vector layer ''Training_manual_poly.shp''.
+
## In the {{button|text=Semi Automatic Class Plugin}}, go to the {{button|text=Semi Automatic ROI Creation}} tab.
+
## In the {{button|text=ROI Definition}} section select {{button|text=ID: 1}} and for {{button|text=Information}} enter {{typed|text=Urban area}} and click {{button|text=+}} to add a ROI (figure '''B'''). {{red|text=Not sure about this...}} [[User:Lburgr|- Levent]] ([[User talk:Lburgr|talk]])
+
## In the {{button|text=Classification algorithm}} section, choose {{button|text=Minimum distance}}. Click {{button|text=+}} in the {{button|text=Classification preview}} section.
+
## For {{button|text=Classification style}} click {{button|text=Select qml}} and browse for the file ''classification.qml'' from the [[course data]]. Click {{button|text=+}} to confirm and select any part of the image. A message will appear that the algorithm is executing. Wait until it has finished.
+
## In the {{button|text=Classification output}} section, check the {{button|text=Classificatin report}} and {{button|text=Calculate accuracy}} boxes.
+
## Click {{button|text=Perform classification}}. Enter name and path for the output map (e.g. ''ml_classification.tif'') and wait for the classification to finish (figure '''C''').
+
# Trying alternative algorithms
+
#* To get an impression of results depending on the alorithm selected, try the {{button|text=Maximum likelihood}} classifier as {{button|text=Classification algorithm}}.
+
# Assessing classification accuracy: the error matrix
+
#* In the {{button|text=Semi Automatic classification}} dialogue (figure '''D'''), select the {{button|text=Post processing}} tab to view the error matrix. If desired, it can be saved for future reference.
+
  
==Figures==
+
==Training phase==
{| class="wikitable" style="border:0pt"
+
* In the search engine of Processing Toolbox, type {{typed|text=TrainImages}} and open '''TrainImagesClassifer'''.
|style="border:0pt"|[[Image:RemSens_Exercise08_01.png|thumb|450px|'''Figure A''': The ''Semi-Automatic Classification Plugin'' menu]]
+
* In the {{button|text=Input Image List}} select a (or optional: several) multispectral images: '''mosaic_S2A_MSIL2A_20200521T102031_N0214_R065_T32UNC_UNB_UPC.tif'''.
|style="border:0pt"|[[Image:RemSens_Exercise08_02.png|thumb|450px|'''Figure B''': Dialogues of the ''Semi-Automatic Classification Plugin]]
+
* In the {{button|text=Input Vector Data List}} choose a vector polygon file with training areas: '''lucc_training_2020-05-21.shp'''.
|-
+
* In the {{button|text=Validation Vector Data List}} and choose a vector polygon file with an independent sample of validation areas: leave empty.
|style="border:0pt"|[[Image:RemSens_Exercise08_04.png|thumb|450px|'''Figure C''': The classified landcover map]]
+
* 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.
|style="border:0pt"|[[Image:RemSens_Exercise08_05.png|thumb|450px|'''Figure D''': The ''Accuracy'' menu with error matrix]]
+
* Type {{typed|text=Code}} in the {{button|text=Field Name}} text field.
|}
+
* Choose Support Vector Machine Classifer {{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}}.
 +
* 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'''
 +
* Define an output file for {{button|text=Output confusion matrix or contingency table}} (e.g.'''svm_matrix.csv''').
 +
* Click {{button|text=Run}}.
 +
* Click on the {{button|text=Log}} tab and inspect the '''model quality''' measures: Precision, Recall, F-score and Kappa index.
 +
[[File:qgis_otb_trainimages.png|400px]]
 +
 
 +
==Classification phase==
 +
* 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 {{button|text=Input _mask}} to blank (top of drop-down list).
 +
* Set '''lucc_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 {{button|text=Output pixel type}} to '''uint16'''
 +
* Save the {{button|text=Output image}} as '''svm_classification.tif'''.
 +
* Uncheck Confidence map: ''Open output file after running algorithm''.
 +
* Uncheck Probability map: ''Open output file after running algorithm''.
 +
* 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]]
 +
 
 +
==Postprocessing==
 +
This application uses a majority filter with a circular structure element.
 +
* 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.
 +
* Set {{button|text=Structuring element radius}} to {{typed|text=2}} pixels.
 +
* Set {{button|text=Output pixel type}} to {{button|text=uint16}}.
 +
* Save the {{button|text=Output regularizd image}} as '''svm_classification_majority.tif'''.
 +
* Click {{button|text=Run}}.
 +
[[File:qgis_otb_majority.png|400px]]
 +
 
 +
=Per pixel classification with OTB standalone=
 +
==Training phase==
 +
* Type into the search box of the Windows taskbar: {{typed|text=mapla.bat}}. Click on mapla.bat to open  Monteverdi Application Launcher.
 +
* 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 Vector Data List}} choose a vector polygon file with training areas: '''lucc_training_input.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_svm.model'''
 +
* Activate the checkbox and save the {{button|text=Output confusion matrix or contingency table}} as '''lucc_svm_confusion.csv'''.
 +
* 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).
 +
* Choose {{button|text=LibSVM classifier}} from the drop down list as Classifier to use for the training.
 +
* The SVM Kernel Type is {{button|text=Linear}}.
 +
* 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 the {{button|text=Log}} tab and inspect the quality measures: Precision, Recall, F-score and Kappa index.
 +
[[File:otb_trainimages.png|500px]]
 +
 
 +
==Classification phase==
 +
* In the search engine of mapla, type {{typed|text=ImageClassifier}} and double click '''ClassifcationMapRegularization'''
 +
* Set ''Subset_S2A_MSIL2A_20170619T_MUL.tif'' as {{button|text=Input image}}.
 +
* Set '''SVM.model''' as {{button|text=Model file}}.
 +
* Save the {{button|text=Output image}} as '''svm_classification.tif'''.
 +
[[File:otb_imageclassifier.png|500px]]
 +
* Evaluate classification results:
 +
* Add ''svm_classification.tif'' to QGIS canvas.
 +
* Download the style file '''classifcation.qml''' from Stud.IP.
 +
* Right click ''svm_classification.tif'' in the [[TOC]] and select {{mitem|text=Properties --> Style --> Style --> Load Style}}.
 +
* Select the style file '''\lucc\classification.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==
 +
This application uses a majority with a circular structure element.
 +
* 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.
 +
* Save the {{button|text=Output regularizd image}} as '''svm_classification_majority.tif'''.
 +
* Set {{button|text=Structuring element radius}} to {{typed|text=3}} pixels.
 +
* Set {{button|text=Output pixel type}} to {{button|text=uint8}}.
 +
* Click {{button|text=Execute}}.
 +
[[File:otb_majority.png|400px]]

Latest revision as of 14:12, 1 December 2020

Contents

[edit] Per pixel classification with QGIS and OTB processing plugin

In OTB Version 7.0.0 the requirements for the input training vector data are very restrictive because of some bugs.

    • File format needs to be Shapefile (GPKG does not work).
    • The column containing the class label needs to integer (whole number). Data type Integer 64bit does not work!
    • Any other columns with other data types (real or text (string) with umlauts or blank are not correctly imported which leads to failure of the modul TrainImagesClassifier.

A work around is to make a copy of your training data and delete all other columns than the class label column

All these issues have been fixed in OTB Version 7.1.0!

[edit] Training phase

  • In the search engine of Processing Toolbox, type TrainImages and open TrainImagesClassifer.
  • In the Input Image List select a (or optional: several) multispectral images: mosaic_S2A_MSIL2A_20200521T102031_N0214_R065_T32UNC_UNB_UPC.tif.
  • In the Input Vector Data List choose a vector polygon file with training areas: lucc_training_2020-05-21.shp.
  • In the Validation Vector Data List and choose a vector polygon file with an independent sample of validation areas: leave empty.
  • 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 Name text field.
  • Choose Support Vector Machine Classifer libsvm from the drop down list.
  • SVM Model Type is 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 Linear.
  • Switch checkbox Parameters optimization off. The optimization results in a higher accuracy but takes much time (> 1 hour computation).
  • In the Output model specify an model file: e.g. svm.model
  • Define an output file for Output confusion matrix or contingency table (e.g.svm_matrix.csv).
  • 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 mosaic_S2A_MSIL2A_20200521T102031_N0214_R065_T32UNC_UNB_UPC.tif as Input image.
  • Set Input _mask to blank (top of drop-down list).
  • Set lucc_svm.model as Model file.
  • Set the number of classes in your model: this is the number of unique classes in your training 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.
  • 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 Properties --> Symbology --> Style --> Load Style.
  • Select the style file svm_classification.tif. OK.

Qgis otb imageclassifier.png

[edit] Postprocessing

This application uses a majority filter with a circular structure element.

  • In the search engine of Processing Toolbox, type regularization and double click ClassificationMapRegularization.
  • Define Input classification image as an classification output raster.
  • Set Structuring element radius to 2 pixels.
  • Set Output pixel type to uint16.
  • Save the Output regularizd image as svm_classification_majority.tif.
  • Click Run.

Qgis otb majority.png

[edit] Per pixel classification with OTB standalone

[edit] Training phase

  • Type into the search box of the Windows taskbar: mapla.bat. Click on mapla.bat 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: lucc_training_input.shp.
  • Activate the checkbox Validation Vector Data List and choose a vector polygon file with an independent sample of validation areas: lucc_validation.shp
  • In the Output model specify an output model file: e.g. lucc_svm.model
  • Activate the checkbox and save the Output confusion matrix or contingency table as lucc_svm_confusion.csv.
  • In the Bound sample number by minimum field type 1.
  • Set the training and validation sample ratio to 0. (0 = all training data).
  • 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 LibSVM classifier from the drop down list as Classifier to use for the training.
  • The SVM Kernel Type is Linear.
  • The SVM Model Type is C support vector classification.
  • Switch the Parameters optimization to on.
  • Check user defined seed and enter an integer value.
  • Click on Execute.
  • Click on the Log tab and inspect the quality measures: Precision, Recall, F-score and Kappa index.

Otb trainimages.png

[edit] Classification phase

  • In the search engine of mapla, type ImageClassifier and double click ClassifcationMapRegularization
  • Set Subset_S2A_MSIL2A_20170619T_MUL.tif as Input image.
  • Set SVM.model as Model file.
  • Save the Output image as svm_classification.tif.

Otb imageclassifier.png

  • Evaluate classification results:
  • Add svm_classification.tif to QGIS canvas.
  • Download the style file classifcation.qml from Stud.IP.
  • Right click svm_classification.tif in the TOC and select Properties --> Style --> Style --> Load Style.
  • Select the style file \lucc\classification.qml. OK.
  • Open the text file lucc_svm_confusion.csv with LibreOffice Calc or MS Excel and calculate overall, user, producer accuracy and kappa index.

[edit] Postprocessing

This application uses a majority with a circular structure element.

  • In the search engine of mapla, type, regular and double click ClassifcationMapRegularization.
  • Define Input classification image as ans classification output raster.
  • Save the Output regularizd image as svm_classification_majority.tif.
  • Set Structuring element radius to 3 pixels.
  • Set Output pixel type to uint8.
  • Click Execute.

Otb majority.png

Personal tools
Namespaces

Variants
Actions
Navigation
Development
Toolbox
Print/export