OTB.StereoFramework: Compute the ground elevation based on one or multiple stereo pair(s)

Compute the ground elevation with a stereo block matching algorithm between one or multiple stereo pair in sensor geometry. The output is projected in desired geographic or cartographic map projection (WGS84 by default).This application is chaining different processing steps. Some of them are also performed by other applications in the stereo-reconstruction framework: * StereoRectificationGridGenerator [1] : for the generation of deformation grids * GridBasedImageResampling [2] : resampling into epipolar geometry * BlockMatching [3] : estimation of dense disparity mapsThe pipeline executes the following steps on each stereo pair: - compute the epipolar displacement grids from the stereo pair (direct and inverse) - resample the stereo pair into epipolar geometry using BCO interpolation - create masks for each epipolar image : remove black borders and resample input masks - compute horizontal disparities with a block matching algorithm - refine disparities to sub-pixel precision with a dichotomy algorithm - apply an optional median filter - filter disparities based on the correlation score and exploration bounds - translate disparities in sensor geometry - convert disparity to 3D Map.Then all 3D maps are fused to produce DSM. The fusion method in each DEM cell can be chosen between maximum, minimum and average.

Inputs

List of images corresponding to multiple views on a single scene, in sensor geometry.

format
href
Please set a value for input.il.

List of index of couples im image list. Couples must be separated by a comma (index start at 0). For example : 0 1,1 2 will process a first couple composed of the first and the second image in image list, then the second and the third image. Note that images are handled by pairs. If left empty, couples are created from input index i.e. a first couple will be composed of the first and second image, a second couple with third and fourth image etc. (in this case image list must be even).

string

Channel used for block matching (the same for all images)

integer
Please set a value for input.channel.

This parameter allows selecting a directory containing Digital Elevation Model files. Note that this directory should contain only DEM files. Unexpected behaviour might occurs if other images are found in this directory.

string

Use a geoid grid to get the height above the ellipsoid in case there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles. A version of the geoid can be found on the OTB website(https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-data/blob/master/Input/DEM/egm96.grd).

format
href
Please set a value for elev.geoid.

This parameter allows setting the default height above ellipsoid when there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles, and no geoid file has been set. This is also used by some application as an average elevation value.

number
Please set a value for elev.default.

Spatial sampling distance of the output elevation : the cell size (in m)

number
Please set a value for output.res.

DSM empty cells are filled with this value (optional -32768 by default)

number

This parameter allows one to choose the method used to fuse elevation measurements in each output DSM cell

string
Please set a value for output.fusionmethod.

Output elevation image

string
Please set a value for output.out.

output.mode

string
Please set a value for output.mode.

Cartographic X coordinate of upper-left corner (meters for cartographic projections, degrees for geographic ones)

number
Please set a value for output.mode.user.ulx.

Cartographic Y coordinate of the upper-left corner (meters for cartographic projections, degrees for geographic ones)

number
Please set a value for output.mode.user.uly.

Size of projected image along X (in pixels)

integer
Please set a value for output.mode.user.sizex.

Size of projected image along Y (in pixels)

integer
Please set a value for output.mode.user.sizey.

Size of each pixel along X axis (meters for cartographic projections, degrees for geographic ones)

number
Please set a value for output.mode.user.spacingx.

Size of each pixel along Y axis (meters for cartographic projections, degrees for geographic ones)

number
Please set a value for output.mode.user.spacingy.

Defines the map projection to be used.

string
Please set a value for map.

The zone number ranges from 1 to 60 and allows defining the transverse mercator projection (along with the hemisphere)

integer
Please set a value for map.utm.zone.

The transverse mercator projections are defined by their zone number as well as the hemisphere. Activate this parameter if your image is in the northern hemisphere.

boolean
Please set a value for map.utm.northhem.

See www.spatialreference.org to find which EPSG code is associated to your projection

integer
Please set a value for map.epsg.code.

Stereo-rectification displacement grid only varies slowly. Therefore, it is recommended to use a coarser grid (higher step value) in case of large images

integer

Grid inversion is an heavy process that implies spline regression on control points. To avoid eating to much memory, this parameter allows one to first sub-sample the field to invert.

integer

Metric used to compute matching score

string
Please set a value for bm.metric.

Value of the p parameter in Lp pseudo-norm (must be positive)

number
Please set a value for bm.metric.lp.p.

The radius of blocks in Block-Matching (in pixels)

integer

Minimum altitude below the selected elevation source (in meters)

number
Please set a value for bm.minhoffset.

Maximum altitude above the selected elevation source (in meters)

number
Please set a value for bm.maxhoffset.

Use bijection consistency. Right to Left correlation is computed to validate Left to Right disparities. If bijection is not found, the disparity is rejected.

boolean
Please set a value for postproc.bij.

Disparity map can be filtered using median post filtering (disabled by default).

boolean
Please set a value for postproc.med.

Use block matching metric output to discard pixels with low correlation value (disabled by default, float value)

number

Mask for left input image. Pixel with a null mask value are discarded.

format
href
Please set a value for mask.left.

Mask for right input image. Pixel with a null mask value are discarded.

format
href
Please set a value for mask.right.

This parameter allows one to discard pixels whose local variance is too small (the size of the neighborhood is given by the correlation window radius)

number

Available memory for processing (in MB)

integer

Outputs

'schema'

Execute End Point

View the execution endpoint of a process.

View the alternative version in HTML.

{"id": "OTB.StereoFramework", "title": "Compute the ground elevation based on one or multiple stereo pair(s)", "description": "Compute the ground elevation with a stereo block matching algorithm between one or multiple stereo pair in sensor geometry. The output is projected in desired geographic or cartographic map projection (WGS84 by default).This application is chaining different processing steps. Some of them are also performed by other applications in the stereo-reconstruction framework: * StereoRectificationGridGenerator [1] : for the generation of deformation grids * GridBasedImageResampling [2] : resampling into epipolar geometry * BlockMatching [3] : estimation of dense disparity mapsThe pipeline executes the following steps on each stereo pair: - compute the epipolar displacement grids from the stereo pair (direct and inverse) - resample the stereo pair into epipolar geometry using BCO interpolation - create masks for each epipolar image : remove black borders and resample input masks - compute horizontal disparities with a block matching algorithm - refine disparities to sub-pixel precision with a dichotomy algorithm - apply an optional median filter - filter disparities based on the correlation score and exploration bounds - translate disparities in sensor geometry - convert disparity to 3D Map.Then all 3D maps are fused to produce DSM. The fusion method in each DEM cell can be chosen between maximum, minimum and average.", "version": "1.0.0", "jobControlOptions": ["sync-execute", "async-execute", "dismiss"], "outputTransmission": ["value", "reference"], "links": [{"rel": "http://www.opengis.net/def/rel/ogc/1.0/execute", "type": "application/json", "title": "Execute End Point", "href": "http://demo.mapmint.com/ogc-api/processes/OTB.StereoFramework/execution"}, {"rel": "alternate", "type": "text/html", "title": "Execute End Point", "href": "http://demo.mapmint.com/ogc-api/processes/OTB.StereoFramework/execution.html"}], "inputs": {"input.il": {"title": "List of images corresponding to multiple views on a single scene, in sensor geometry.", "description": "List of images corresponding to multiple views on a single scene, in sensor geometry.", "maxOccurs": 1024, "extended-schema": {"type": "array", "minItems": 1, "maxItems": 1024, "items": {"oneOf": [{"allOf": [{"$ref": "http://zoo-project.org/dl/link.json"}, {"type": "object", "properties": {"type": {"enum": ["image/tiff", "image/jpeg", "image/png"]}}}]}, {"type": "object", "required": ["value"], "properties": {"value": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}}}]}}, "schema": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}, "id": "input.il"}, "input.co": {"title": "List of index of couples im image list. Couples must be separated by a comma (index start at 0). For example : 0 1,1 2 will process a first couple composed of the first and the second image in image list, then the second and the third image. Note that images are handled by pairs. If left empty, couples are created from input index i.e. a first couple will be composed of the first and second image, a second couple with third and fourth image etc. (in this case image list must be even).", "description": "List of index of couples im image list. Couples must be separated by a comma (index start at 0). For example : 0 1,1 2 will process a first couple composed of the first and the second image in image list, then the second and the third image. Note that images are handled by pairs. If left empty, couples are created from input index i.e. a first couple will be composed of the first and second image, a second couple with third and fourth image etc. (in this case image list must be even).", "schema": {"type": "string", "default": "Any value", "nullable": true}, "id": "input.co"}, "input.channel": {"title": "Channel used for block matching (the same for all images)", "description": "Channel used for block matching (the same for all images)", "schema": {"type": "integer", "default": 1}, "id": "input.channel"}, "elev.dem": {"title": "This parameter allows selecting a directory containing Digital Elevation Model files. Note that this directory should contain only DEM files. Unexpected behaviour might occurs if other images are found in this directory.", "description": "This parameter allows selecting a directory containing Digital Elevation Model files. Note that this directory should contain only DEM files. Unexpected behaviour might occurs if other images are found in this directory.", "schema": {"type": "string", "default": "Any value", "nullable": true}, "id": "elev.dem"}, "elev.geoid": {"title": "Use a geoid grid to get the height above the ellipsoid in case there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles. A version of the geoid can be found on the OTB website(https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-data/blob/master/Input/DEM/egm96.grd).", "description": "Use a geoid grid to get the height above the ellipsoid in case there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles. A version of the geoid can be found on the OTB website(https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb-data/blob/master/Input/DEM/egm96.grd).", "extended-schema": {"oneOf": [{"allOf": [{"$ref": "http://zoo-project.org/dl/link.json"}, {"type": "object", "properties": {"type": {"enum": ["application/octet-stream"]}}}]}, {"type": "object", "required": ["value"], "properties": {"value": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "application/octet-stream"}]}}}], "nullable": true}, "schema": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "application/octet-stream"}]}, "id": "elev.geoid"}, "elev.default": {"title": "This parameter allows setting the default height above ellipsoid when there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles, and no geoid file has been set. This is also used by some application as an average elevation value.", "description": "This parameter allows setting the default height above ellipsoid when there is no DEM available, no coverage for some points or pixels with no_data in the DEM tiles, and no geoid file has been set. This is also used by some application as an average elevation value.", "schema": {"type": "number", "default": 0, "format": "double"}, "id": "elev.default"}, "output.res": {"title": "Spatial sampling distance of the output elevation : the cell size (in m)", "description": "Spatial sampling distance of the output elevation : the cell size (in m)", "schema": {"type": "number", "default": 1, "format": "double"}, "id": "output.res"}, "output.nodata": {"title": "DSM empty cells are filled with this value (optional -32768 by default)", "description": "DSM empty cells are filled with this value (optional -32768 by default)", "schema": {"type": "number", "default": -32768, "format": "double", "nullable": true}, "id": "output.nodata"}, "output.fusionmethod": {"title": "This parameter allows one to choose the method used to fuse elevation measurements in each output DSM cell", "description": "This parameter allows one to choose the method used to fuse elevation measurements in each output DSM cell", "schema": {"type": "string", "default": "max", "enum": ["max", "min", "mean", "acc"]}, "id": "output.fusionmethod"}, "output.out": {"title": "Output elevation image", "description": "Output elevation image", "schema": {"type": "string", "default": "float", "enum": ["uint8", "uint16", "int16", "int32", "int32", "float", "double"]}, "id": "output.out"}, "output.mode": {"title": "output.mode", "description": "output.mode", "schema": {"type": "string", "default": "fit", "enum": ["fit", "user"]}, "id": "output.mode"}, "output.mode.user.ulx": {"title": "Cartographic X coordinate of upper-left corner (meters for cartographic projections, degrees for geographic ones)", "description": "Cartographic X coordinate of upper-left corner (meters for cartographic projections, degrees for geographic ones)", "schema": {"type": "number"}, "id": "output.mode.user.ulx"}, "output.mode.user.uly": {"title": "Cartographic Y coordinate of the upper-left corner (meters for cartographic projections, degrees for geographic ones)", "description": "Cartographic Y coordinate of the upper-left corner (meters for cartographic projections, degrees for geographic ones)", "schema": {"type": "number"}, "id": "output.mode.user.uly"}, "output.mode.user.sizex": {"title": "Size of projected image along X (in pixels)", "description": "Size of projected image along X (in pixels)", "schema": {"type": "integer"}, "id": "output.mode.user.sizex"}, "output.mode.user.sizey": {"title": "Size of projected image along Y (in pixels)", "description": "Size of projected image along Y (in pixels)", "schema": {"type": "integer"}, "id": "output.mode.user.sizey"}, "output.mode.user.spacingx": {"title": "Size of each pixel along X axis (meters for cartographic projections, degrees for geographic ones)", "description": "Size of each pixel along X axis (meters for cartographic projections, degrees for geographic ones)", "schema": {"type": "number"}, "id": "output.mode.user.spacingx"}, "output.mode.user.spacingy": {"title": "Size of each pixel along Y axis (meters for cartographic projections, degrees for geographic ones)", "description": "Size of each pixel along Y axis (meters for cartographic projections, degrees for geographic ones)", "schema": {"type": "number"}, "id": "output.mode.user.spacingy"}, "map": {"title": "Defines the map projection to be used.", "description": "Defines the map projection to be used.", "schema": {"type": "string", "default": "wgs", "enum": ["utm", "lambert2", "lambert93", "wgs", "epsg"]}, "id": "map"}, "map.utm.zone": {"title": "The zone number ranges from 1 to 60 and allows defining the transverse mercator projection (along with the hemisphere)", "description": "The zone number ranges from 1 to 60 and allows defining the transverse mercator projection (along with the hemisphere)", "schema": {"type": "integer", "default": 31}, "id": "map.utm.zone"}, "map.utm.northhem": {"title": "The transverse mercator projections are defined by their zone number as well as the hemisphere. Activate this parameter if your image is in the northern hemisphere.", "description": "The transverse mercator projections are defined by their zone number as well as the hemisphere. Activate this parameter if your image is in the northern hemisphere.", "schema": {"type": "boolean", "default": false}, "id": "map.utm.northhem"}, "map.epsg.code": {"title": "See www.spatialreference.org to find which EPSG code is associated to your projection", "description": "See www.spatialreference.org to find which EPSG code is associated to your projection", "schema": {"type": "integer", "default": 4326}, "id": "map.epsg.code"}, "stereorect.fwdgridstep": {"title": "Stereo-rectification displacement grid only varies slowly. Therefore, it is recommended to use a coarser grid (higher step value) in case of large images", "description": "Stereo-rectification displacement grid only varies slowly. Therefore, it is recommended to use a coarser grid (higher step value) in case of large images", "schema": {"type": "integer", "default": 16, "nullable": true}, "id": "stereorect.fwdgridstep"}, "stereorect.invgridssrate": {"title": "Grid inversion is an heavy process that implies spline regression on control points. To avoid eating to much memory, this parameter allows one to first sub-sample the field to invert.", "description": "Grid inversion is an heavy process that implies spline regression on control points. To avoid eating to much memory, this parameter allows one to first sub-sample the field to invert.", "schema": {"type": "integer", "default": 10, "nullable": true}, "id": "stereorect.invgridssrate"}, "bm.metric": {"title": "Metric used to compute matching score", "description": "Metric used to compute matching score", "schema": {"type": "string", "default": "ssdmean", "enum": ["ssdmean", "ssd", "ncc", "lp"]}, "id": "bm.metric"}, "bm.metric.lp.p": {"title": "Value of the p parameter in Lp pseudo-norm (must be positive)", "description": "Value of the p parameter in Lp pseudo-norm (must be positive)", "schema": {"type": "number", "default": 1, "format": "double"}, "id": "bm.metric.lp.p"}, "bm.radius": {"title": "The radius of blocks in Block-Matching (in pixels)", "description": "The radius of blocks in Block-Matching (in pixels)", "schema": {"type": "integer", "default": 2, "nullable": true}, "id": "bm.radius"}, "bm.minhoffset": {"title": "Minimum altitude below the selected elevation source (in meters)", "description": "Minimum altitude below the selected elevation source (in meters)", "schema": {"type": "number", "default": -20, "format": "double"}, "id": "bm.minhoffset"}, "bm.maxhoffset": {"title": "Maximum altitude above the selected elevation source (in meters)", "description": "Maximum altitude above the selected elevation source (in meters)", "schema": {"type": "number", "default": 20, "format": "double"}, "id": "bm.maxhoffset"}, "postproc.bij": {"title": "Use bijection consistency. Right to Left correlation is computed to validate Left to Right disparities. If bijection is not found, the disparity is rejected.", "description": "Use bijection consistency. Right to Left correlation is computed to validate Left to Right disparities. If bijection is not found, the disparity is rejected.", "schema": {"type": "boolean", "default": false}, "id": "postproc.bij"}, "postproc.med": {"title": "Disparity map can be filtered using median post filtering (disabled by default).", "description": "Disparity map can be filtered using median post filtering (disabled by default).", "schema": {"type": "boolean", "default": false}, "id": "postproc.med"}, "postproc.metrict": {"title": "Use block matching metric output to discard pixels with low correlation value (disabled by default, float value)", "description": "Use block matching metric output to discard pixels with low correlation value (disabled by default, float value)", "schema": {"type": "number", "default": 0.6, "format": "double", "nullable": true}, "id": "postproc.metrict"}, "mask.left": {"title": "Mask for left input image. Pixel with a null mask value are discarded.", "description": "Mask for left input image. Pixel with a null mask value are discarded.", "extended-schema": {"oneOf": [{"allOf": [{"$ref": "http://zoo-project.org/dl/link.json"}, {"type": "object", "properties": {"type": {"enum": ["image/tiff", "image/jpeg", "image/png"]}}}]}, {"type": "object", "required": ["value"], "properties": {"value": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}}}], "nullable": true}, "schema": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}, "id": "mask.left"}, "mask.right": {"title": "Mask for right input image. Pixel with a null mask value are discarded.", "description": "Mask for right input image. Pixel with a null mask value are discarded.", "extended-schema": {"oneOf": [{"allOf": [{"$ref": "http://zoo-project.org/dl/link.json"}, {"type": "object", "properties": {"type": {"enum": ["image/tiff", "image/jpeg", "image/png"]}}}]}, {"type": "object", "required": ["value"], "properties": {"value": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}}}], "nullable": true}, "schema": {"oneOf": [{"type": "string", "contentEncoding": "base64", "contentMediaType": "image/tiff"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/jpeg"}, {"type": "string", "contentEncoding": "base64", "contentMediaType": "image/png"}]}, "id": "mask.right"}, "mask.variancet": {"title": "This parameter allows one to discard pixels whose local variance is too small (the size of the neighborhood is given by the correlation window radius)", "description": "This parameter allows one to discard pixels whose local variance is too small (the size of the neighborhood is given by the correlation window radius)", "schema": {"type": "number", "default": 50, "format": "double", "nullable": true}, "id": "mask.variancet"}, "ram": {"title": "Available memory for processing (in MB)", "description": "Available memory for processing (in MB)", "schema": {"type": "integer", "default": 128, "nullable": true}, "id": "ram"}}, "outputs": {"output.out": {"title": "Output elevation image", "description": "Output elevation image", "id": "output.out"}}}

http://demo.mapmint.com/ogc-apihttp://localhost/ogc-api/processes/OTB.StereoFramework.html
Last modified: Sat Feb 19 15:43:34 CET 2022