diff --git a/Modules/Applications/AppMathParser/app/otbBandMath.cxx b/Modules/Applications/AppMathParser/app/otbBandMath.cxx index f8ecc1bafb051cc231cf61b14c3d2ea7f0669fb1..37a9054ec90fca6c5a9cb629d6d5db56608459c1 100644 --- a/Modules/Applications/AppMathParser/app/otbBandMath.cxx +++ b/Modules/Applications/AppMathParser/app/otbBandMath.cxx @@ -66,22 +66,34 @@ private: SetDocLongDescription( "This application performs a mathematical operation on several multi-band " - "images and outputs the result into a monoband image. Evaluation of the " + "images and outputs the result into a monoband image. The given expression" + " is computed at each pixel position. Evaluation of the " "mathematical formula is done by the muParser libraries.\n\n" - "muParser version superior to 2.0, provides the '&&' and '||' logical " - "operators, and a ternary operator 'boolean_expression ? if_true : " - "if_false'.\n\n" - - "Older versions of muParser (prior to v-2.0) provides only the 'and' and " - "'or' logical operators, and a ternary operator 'if(; ; )'.\n\n" - - "The list of features and operators is available on the muParser website [1]." + "The formula can be written using:\n\n" + " * numerical values ( 2.3, -5, 3.1e4, ...)\n" + " * variables containing pixel values (e.g. : 'im2b3' is the pixel value" + " in 2nd image, 3rd band)\n" + " * binary operators:\n\n" + " * '+' addition, '-' subtraction, '*' multiplication, '/' division\n" + " * '^' raise x to the power of y\n" + " * '<' less than, '>' greater than, '<=' less or equal, '>=' greater or equal\n" + " * '==' equal, '!=' not equal\n" +#ifdef OTB_MUPARSER_HAS_CXX_LOGICAL_OPERATORS + " * '||' logical or, '&&' logical and\n" + " * if-then-else operator: '(condition ? value_true : value_false)'\n" +#else + " * 'or' logical or, 'and' logical and\n" + " * if-then-else operator: 'if(condition;value_true;value_false)'\n" +#endif + " * functions : exp(), log(), sin(), cos(), min(), max(), ...\n\n" + + "The full list of features and operators is available on the muParser website [1]." ); SetDocLimitations( "None" ); SetDocAuthors( "OTB-Team" ); - SetDocSeeAlso("[1] http://muparser.sourceforge.net/"); + SetDocSeeAlso("[1] http://beltoforion.de/article.php?a=muparser"); AddDocTag( "Miscellaneous" ); AddParameter( ParameterType_InputImageList, "il", "Input image-list" ); @@ -101,12 +113,7 @@ private: AddParameter( ParameterType_String, "exp", "Expression"); SetParameterDescription( "exp", - "The muParser mathematical expression to apply on input images.\n" - "Use im1b1 as first band of first image, im1b2 for the second band of " - "first image.\n" - "Use im2b1 as first band of second image, im2b2 for the second band of " - "second image.\n" - "etc." + "The muParser mathematical expression to apply on input images." ); // Doc example parameter settings diff --git a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx index 7c56aa82da09b946c57ecc5225144e89768fb59a..90a7f245a6f3e1adf1976c27634ec5bbb12c28fd 100644 --- a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx +++ b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx @@ -82,44 +82,30 @@ private: "Fundamentals\n" "------------\n\n" - "The i-th input image is identified by the 'im<i+1>' (e.g. 'im1') prefix " - "(please, note the indexing from 1 to N, for N inputs).\n\n" - - "The following list summarizes the available variables of input #0:\n\n" - - "im1\n" - " a pixel from 1st input, made of n components (n bands).\n\n" - - "im1b2\n" - " the 2nd component of a pixel from 1st input (band index is 1-based).\n\n" - - "im1b2N3x4\n" - " a 3x4 pixels 'N'eighbourhood of a pixel the 2nd component of a pixel " - "from the 1st input.\n\n" - - "im1PhyX\n" - " horizontal (X-axis) spacing of the 1st input.\n\n" - - "im1PhyY\n" - " vertical spacing of the 1st input input.\n\n" - - "im1b2Mean\n" - " mean of the 2nd component of the 1st input (global statistics)\n\n" - - "im1b2Mini\n" - " minimum of the 2nd component of the 1st input (global statistics)\n\n" - - "im1b2Maxi\n" - " minimum of the 2nd component of the 1st input (global statistics)\n\n" - - "im1b2Sum\n" - " minimum of the 2nd component of the 1st input (global statistics)\n\n" - - "im1b2Var\n" - " minimum of the 2nd component of the 1st input (global statistics)\n\n" - - "idxX, idxY\n" - " indices of the current pixel (generic variables)\n\n" + "The formula can be written using:\n\n" + " * numerical values ( 2.3, -5, 3.1e4, ...)\n" + " * variables containing pixel values (please, note the indexing of " + "inputs from 1 to N). Examples for the first input image:\n\n" + " * 'im1' a pixel from 1st input, made of n components (n bands)\n" + " * 'im1b2' the 2nd component of a pixel from 1st input (band index is 1-based)\n" + " * 'im1b2N3x4' a 3x4 pixels 'N'eighbourhood of a pixel the 2nd " + "component of a pixel from the 1st input\n" + " * 'im1PhyX' horizontal (X-axis) spacing of the 1st input.\n" + " * 'im1PhyY' vertical spacing of the 1st input input.\n" + " * 'im1b2Mean' mean of the 2nd component of the 1st input (global statistics)\n" + " * 'im1b2Mini' minimum of the 2nd component of the 1st input (global statistics)\n" + " * 'im1b2Maxi' maximum of the 2nd component of the 1st input (global statistics)\n" + " * 'im1b2Sum' sum of the 2nd component of the 1st input (global statistics)\n" + " * 'im1b2Var' variance of the 2nd component of the 1st input (global statistics)\n" + " * 'idxX' and 'idxY' are the indices of the current pixel (generic variables)\n" + " * binary operators:\n\n" + " * '+' addition, '-' subtraction, '*' multiplication, '/' division\n" + " * '^' raise x to the power of y\n" + " * '<' less than, '>' greater than, '<=' less or equal, '>=' greater or equal\n" + " * '==' equal, '!=' not equal\n" + " * logical operators: 'or', 'and', 'xor'\n" + " * if-then-else operator: '(condition ? value_true : value_false)'\n" + " * functions : abs(), exp(), log(), sin(), cos(), min(), max(), ...\n\n" "Always keep in mind that this application only addresses mathematically " "well-defined formulas. For instance, it is not possible to add vectors of" @@ -130,16 +116,16 @@ private: "represented as a row vector.\n\n" "Example:\n" - " im1 + im2 (1)\n" + " im1 + im2\n" " represents the addition of pixels from the 1st and 2nd inputs. This " "expression is consistent only if both inputs have the same number of " "bands.\n\n" "Please, note that it is also possible to use the following expressions" - " to obtain the same result:\n" - " im1b1 + im2b1\n" - " im1b2 + im2b2 (2)\n" - " ...\n\n" + " to obtain the same result:\n\n" + " * im1b1 + im2b1\n" + " * im1b2 + im2b2\n" + " * ...\n\n" "Nevertheless, the first expression is by far much pleaseant. We call " "this new functionality the 'batch mode' (performing the same operation " @@ -150,41 +136,41 @@ private: "Another new feature is the possibility to perform operations that " "involve neighborhoods of pixels. Variables related to such neighborhoods " - "are always defined following the imIbJNKxP pattern, where:\n" - "- I is an number identifying the image input (remember, input #0 = im1, " + "are always defined following the imIbJNKxP pattern, where:\n\n" + " - I is an number identifying the image input (remember, input #0 = im1, " "and so on)\n" - "- J is an number identifying the band (remember, first band is indexed by" + " - J is an number identifying the band (remember, first band is indexed by" "1)\n" - "- KxP are two numbers that represent the size of the neighborhood (first " + " - KxP are two numbers that represent the size of the neighborhood (first " "one is related to the horizontal direction)\n\n" "NB: All neighborhood are centered, thus K and P must be odd numbers.\n\n" - "Many operators come with this new functionality:\n" - "- dotpr\n" - "- mean\n" - "- var\n" - "- median\n" - "- min\n" - "- max\n" - "- etc.\n\n" - - "For instance, if im1 represents the pixel of 3 bands image:\n" - " im1 - mean( im1b1N5x5, im1b2N5x5, im1b3N5x5 ) (3)\n\n" + "Many operators come with this new functionality:\n\n" + " - dotpr\n" + " - mean\n" + " - var\n" + " - median\n" + " - min\n" + " - max\n" + " - etc.\n\n" + + "For instance, if im1 represents the pixel of 3 bands image::\n\n" + " im1 - mean( im1b1N5x5, im1b2N5x5, im1b3N5x5 )\n\n" "could represent a high pass filter (note that by implying three " "neighborhoods, the operator mean returns a row vector of three components" ". It is a typical behaviour for many operators of this application).\n\n" - "In addition to the previous operators, other operators are available:\n" - "- existing operators/functions from muParserX, that were not originally " + "In addition to the previous operators, other operators are available:\n\n" + " - existing operators/functions from muParserX, that were not originally " "defined for vectors and matrices (e.g. cos, sin). These new " "operators/functions keep the original names to which we added the prefix " "'v' for vector (vcos, vsin, etc.)\n" - "- mult, div and pow operators, that perform element-wise multiplication, " + " - mult, div and pow operators, that perform element-wise multiplication, " "division or exponentiation of vector/matrices (e.g. im1 div im2).\n" - "- mlt, dv and pw operators, that perform multiplication, division or " + " - mlt, dv and pw operators, that perform multiplication, division or " "exponentiation of vector/matrices by a scalar (e.g. im1 dv 2.0).\n" - "- bands, which is a very useful operator. It allows selecting specific " + " - bands, which is a very useful operator. It allows selecting specific " "bands from an image, and/or to rearrange them in a new vector (e.g." "bands( im1, { 1, 2, 1, 1 } ) produces a vector of 4 components made of " "band 1, band 2, band 1 and band 1 values from the first input.\n\n" @@ -194,30 +180,19 @@ private: "The application itself\n" "----------------------\n\n" - "The application takes the following parameters:\n" - "-il Sets the list of inputs\n" - "-ext Sets the mathematical expression (see also limitations " - "section below).\n" - "-incontext Sets the text filename containing constants values (syntax: " - "'#type name value')\n\n" - - "An example of such a file is given below:\n" + "The application can use an expression supplied with the 'exp' parameter." + " It can also use an input context file, that defines variables and " + "expressions. An example of context file is given below::\n\n" " #F expo 1.1\n" " #M kernel1 { 0.1 , 0.2 , 0.3; 0.4 , 0.5 , 0.6; 0.7 , 0.8 , 0.9; 1 , 1.1" - ", 1.2; 1.3 , 1.4 , 1.5 }\n\n" + ", 1.2; 1.3 , 1.4 , 1.5 }\n" + " #E $dotpr( kernel1, im1b1N3x5 ); im2b1^expo$\n\n" "As we can see, #I/#F allows the definition of an integer/float constant, " "whereas #M allows the definition of a vector/matrix. In the latter case, " "elements of a row must be separated by commas, and rows must be separated" - " by semicolons.\n\n" - - "It is also possible to define expressions within the same txt file, with " - "#E <expr> (see limitations, below). For instance:\n" - " #E $dotpr( kernel1, im1b1N3x5 ); im2b1^expo$\n\n" - - "-outcontext Output usesr's constants and expressions (context).\n" - "-out Sets output image (multi-outputs is not implemented yet).\n" - "\n" + " by semicolons. It is also possible to define expressions within the same" + " txt file, with #E <expr> (see limitations, below).\n" "Finally, we strongly recommend to read the OTB Cookbook which can be " "found at: http://www.orfeo-toolbox.org/packages/OTBCookBook.pdf"