diff --git a/Applications/Classification/otbFusionOfClassifications.cxx b/Applications/Classification/otbFusionOfClassifications.cxx index efb078c8b8ada53e951676fef9bde2bdb40cadd4..c3bac9637906ee6b202ae567fc645807e2e09244 100644 --- a/Applications/Classification/otbFusionOfClassifications.cxx +++ b/Applications/Classification/otbFusionOfClassifications.cxx @@ -96,9 +96,19 @@ private: void DoInit() { SetName("FusionOfClassifications"); - SetDescription("Fuses several classifications maps of the same image by majority voting on class labels."); + SetDescription("Fuses several classifications maps of the same image on the basis of class labels."); SetDocName("Fusion of Classifications"); - SetDocLongDescription("This application allows to fuse several classifications maps and produce a single more robust classification map. Fusion is done by mean of majority voting on class labels: for each pixel, the class with the highest number of votes is selected. In case of number of votes equality, the undecided label is attributed to the pixel."); + SetDocLongDescription("This application allows to fuse several classification maps and produces a single more robust classification map. " + "Fusion is done either by mean of Majority Voting, or with the Dempster Shafer combination method on class labels.\n " + "-MAJORITY VOTING: for each pixel, the class with the highest number of votes is selected.\n " + "-DEMPSTER SHAFER: for each pixel, the class label for which the Belief Function is maximal is selected. This Belief Function is calculated " + "by mean of the Dempster Shafer combination of Masses of Belief, and indicates the belief that each input classification map presents for each label " + "value. Moreover, the Masses of Belief are based on the input confusion matrices of each classification map, either by using the PRECISION or RECALL " + "rates, or the OVERALL ACCURACY, or the KAPPA coefficient. Thus, each input classification map needs to be associated with its corresponding input " + "confusion matrix file for the Dempster Shafer fusion.\n" + "-Input pixels with the NODATA label are not handled in the fusion of classification maps. Moreover, pixels for which all the input classifiers are set to NODATA " + "keep this value in the output fused image.\n" + "-In case of number of votes equality, the UNDECIDED label is attributed to the pixel."); SetDocLimitations("None"); SetDocAuthors("OTB-Team"); SetDocSeeAlso("SVMImagesClassifier application"); @@ -107,51 +117,57 @@ private: AddDocTag(Tags::Analysis); AddParameter(ParameterType_InputImageList, "il", "Input classifications"); - SetParameterDescription( "il", "List of input classification to fuse. Labels in each classification image must represent the same class." ); + SetParameterDescription( "il", "List of input classification maps to fuse. Labels in each classification image must represent the same class." ); /** GROUP FUSION METHOD */ AddParameter(ParameterType_Choice, "method", "Fusion method"); - SetParameterDescription("method", "Selection of fusion methods and their parameters."); + SetParameterDescription("method", "Selection of the fusion method and its parameters."); // Majority Voting - AddChoice("method.majorityvoting","Fusion from majority voting"); - SetParameterDescription("method.majorityvoting","Fusion of classification maps from majority voting for each output pixel."); + AddChoice("method.majorityvoting","Majority Voting"); + SetParameterDescription("method.majorityvoting","Fusion of classification maps by majority voting for each output pixel."); // Dempster Shafer - AddChoice("method.dempstershafer","Fusion with Dempster Shafer"); - SetParameterDescription("method.dempstershafer","Fusion of classification maps with the Dempster Shafer method."); + AddChoice("method.dempstershafer","Dempster Shafer combination"); + SetParameterDescription("method.dempstershafer","Fusion of classification maps by the Dempster Shafer combination method for each output pixel."); AddParameter(ParameterType_InputFilenameList, "method.dempstershafer.cmfl", "Confusion Matrices"); - SetParameterDescription("method.dempstershafer.cmfl", "A list of confusion matrix files (csv format) to define the masses of belief and the class labels."); + SetParameterDescription("method.dempstershafer.cmfl", "A list of confusion matrix files (*.CSV format) to define the masses of belief and the class labels. Each file should be formatted the following way: " + "the first line, beginning with a '#' symbol, should be a list of the class labels present in the corresponding input classification image, organized in the same order as the confusion matrix rows/columns."); AddParameter(ParameterType_Choice, "method.dempstershafer.mob", "Mass of belief measurement"); - SetParameterDescription("method.dempstershafer.mob","Confusion matrix measurement standing for the masses of belief of each classifier."); + SetParameterDescription("method.dempstershafer.mob","Type of confusion matrix measurement used to compute the masses of belief of each classifier."); AddChoice("method.dempstershafer.mob.precision","Precision"); SetParameterDescription("method.dempstershafer.mob.precision","Masses of belief = Precision rates of each classifier (one rate per class label)."); AddChoice("method.dempstershafer.mob.recall", "Recall"); SetParameterDescription("method.dempstershafer.mob.recall", "Masses of belief = Recall rates of each classifier (one rate per class label)."); AddChoice("method.dempstershafer.mob.accuracy", "Overall Accuracy"); - SetParameterDescription("method.dempstershafer.mob.accuracy", "Mass of belief = Overall Accuracy of each classifier (one unique rate for all the class labels)."); + SetParameterDescription("method.dempstershafer.mob.accuracy", "Mass of belief = Overall Accuracy of each classifier (one unique value for all the class labels)."); AddChoice("method.dempstershafer.mob.kappa", "Kappa"); - SetParameterDescription("method.dempstershafer.mob.kappa", "Mass of belief = Kappa coefficient of each classifier (one unique rate for all the class labels)."); + SetParameterDescription("method.dempstershafer.mob.kappa", "Mass of belief = Kappa coefficient of each classifier (one unique value for all the class labels)."); AddParameter(ParameterType_Int, "nodatalabel", "Label for the NoData class"); - SetParameterDescription("nodatalabel", "Label for the NoData class. Such input pixels keep their NoData label in the output image. By default, 'nodatalabel = 0'."); + SetParameterDescription("nodatalabel", "Label for the NoData class. Such input pixels keep their NoData label in the output image and are not handled in the fusion process. By default, 'nodatalabel = 0'."); SetDefaultParameterInt("nodatalabel", 0); - MandatoryOff("nodatalabel"); + //MandatoryOff("nodatalabel"); AddParameter(ParameterType_Int,"undecidedlabel","Label for the Undecided class"); - SetParameterDescription("undecidedlabel","Label for the Undecided class. Pixels with more than 1 fused class are marked as Undecided. Please note that the Undecided value must be different from existing labels in the input classifications. By default, 'undecidedlabel = 0'."); + SetParameterDescription("undecidedlabel","Label for the Undecided class. Pixels with more than 1 fused class are marked as Undecided. Please note that the Undecided value must be different from existing " + "labels in the input classifications. By default, 'undecidedlabel = 0'."); SetDefaultParameterInt("undecidedlabel",0); AddParameter(ParameterType_OutputImage,"out","The output classification image"); - SetParameterDescription("out","The output classification image resulting from the fusion of the input classification images"); + SetParameterDescription("out","The output classification image resulting from the fusion of the input classification images."); // Doc example parameter settings - SetDocExampleParameterValue("il", "classification1.tif classification2.tif"); - SetDocExampleParameterValue("out","classification_fused.tif"); + SetDocExampleParameterValue("il", "classification1.tif classification2.tif classification3.tif"); + SetDocExampleParameterValue("method", "dempstershafer"); + SetDocExampleParameterValue("method.dempstershafer.cmfl", "classification1.csv classification2.csv classification3.csv"); + SetDocExampleParameterValue("method.dempstershafer.mob", "precision"); + SetDocExampleParameterValue("nodatalabel","0"); SetDocExampleParameterValue("undecidedlabel","10"); + SetDocExampleParameterValue("out","classification_fused.tif"); } void DoUpdateParameters()