[nodes] DepthMap: Update and imporve parameter names and descriptions

This commit is contained in:
Grégoire De Lillo 2023-01-11 15:38:25 +01:00
parent a83b708c2b
commit 6a3309a8c9

View file

@ -12,7 +12,7 @@ class DepthMap(desc.AVCommandLineNode):
category = 'Dense Reconstruction' category = 'Dense Reconstruction'
documentation = ''' documentation = '''
For each camera that have been estimated by the Structure-From-Motion, it estimates the depth value per pixel. Estimate a depth map for each calibrated camera using Plane Sweeping, a multi-view stereo algorithm notable for its efficiency on modern graphics hardware (GPU).
Adjust the downscale factor to compute depth maps at a higher/lower resolution. Adjust the downscale factor to compute depth maps at a higher/lower resolution.
Use a downscale factor of one (full-resolution) only if the quality of the input images is really high (camera on a tripod with high-quality optics). Use a downscale factor of one (full-resolution) only if the quality of the input images is really high (camera on a tripod with high-quality optics).
@ -39,7 +39,10 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.ChoiceParam( desc.ChoiceParam(
name='downscale', name='downscale',
label='Downscale', label='Downscale',
description='Image downscale factor.', description='Downscale the input images to compute the depth map.\n'
'Full resolution (downscale=1) gives the best result,\n'
'but using a larger downscale will reduce computation time at the expense of quality.\n'
'If the images are noisy, blurry or if the surfaces are challenging (weakly-textured or with specularities) a larger downscale may improve.',
value=2, value=2,
values=[1, 2, 4, 8, 16], values=[1, 2, 4, 8, 16],
exclusive=True, exclusive=True,
@ -48,7 +51,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.FloatParam( desc.FloatParam(
name='minViewAngle', name='minViewAngle',
label='Min View Angle', label='Min View Angle',
description='Minimum angle between two views.', description='Minimum angle between two views (select the neighbouring cameras, select depth planes from epipolar segment point).',
value=2.0, value=2.0,
range=(0.0, 10.0, 0.1), range=(0.0, 10.0, 0.1),
uid=[0], uid=[0],
@ -57,16 +60,16 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.FloatParam( desc.FloatParam(
name='maxViewAngle', name='maxViewAngle',
label='Max View Angle', label='Max View Angle',
description='Maximum angle between two views.', description='Maximum angle between two views (select the neighbouring cameras, select depth planes from epipolar segment point).',
value=70.0, value=70.0,
range=(10.0, 120.0, 1.0), range=(10.0, 120.0, 1.0),
uid=[0], uid=[0],
advanced=True, advanced=True,
), ),
desc.GroupAttribute( desc.GroupAttribute(
name="tiling", name='tiling',
label="Tiling Parameters", label='Tiling',
description='Tiling Parameters.', description='Tiles are used to split the computation into fixed buffers to best fit the GPU.',
group=None, group=None,
groupDesc=[ groupDesc=[
desc.IntParam( desc.IntParam(
@ -88,7 +91,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='tilePadding', name='tilePadding',
label='Padding', label='Padding',
description='Tile buffer padding for overlapping.', description='Buffer padding for overlapping tiles.',
value=64, value=64,
range=(0, 500, 1), range=(0, 500, 1),
uid=[0], uid=[0],
@ -96,7 +99,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.BoolParam( desc.BoolParam(
name='autoAdjustSmallImage', name='autoAdjustSmallImage',
label='Auto Adjust Small Image', label='Auto Adjust Small Image',
description='Automatically override depth map parameters if images are smaller than one tile.', description='Automatically adjust depth map parameters if images are smaller than one tile (maxTCamsPerTile=maxTCams, adjust step if needed).',
value=True, value=True,
uid=[0], uid=[0],
advanced=True, advanced=True,
@ -105,7 +108,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.BoolParam( desc.BoolParam(
name='chooseTCamsPerTile', name='chooseTCamsPerTile',
label='Choose Neighbour Cameras Per Tile', label='Choose Neighbour Cameras Per Tile',
description='Choose neighbour cameras per tile.', description='Choose neighbour cameras per tile or globally to the image.',
value=True, value=True,
uid=[0], uid=[0],
advanced=True, advanced=True,
@ -113,21 +116,22 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='maxTCams', name='maxTCams',
label='Max Nb Neighbour Cameras', label='Max Nb Neighbour Cameras',
description='Maximum number of neighbour cameras.', description='Maximum number of neighbour cameras per image.',
value=10, value=10,
range=(1, 20, 1), range=(1, 20, 1),
uid=[0], uid=[0],
), ),
desc.GroupAttribute( desc.GroupAttribute(
name="sgm", name='sgm',
label="SGM Parameters", label='SGM',
description='Semi Global Matching Parameters.', description='Semi-Global Matching (SGM) step computes a similarity volume and extracts the initial low-resolution depth map.\n'
'This method is highly robust but has limited depth precision (banding artifacts due to a limited list of depth planes).',
group=None, group=None,
groupDesc=[ groupDesc=[
desc.IntParam( desc.IntParam(
name='sgmScale', name='sgmScale',
label='Downscale Factor', label='Downscale Factor',
description='Downscale factor used to compute the similarity volume.', description='Downscale factor applied on source images for the SGM step (in addition to the global downscale).',
value=2, value=2,
range=(-1, 10, 1), range=(-1, 10, 1),
uid=[0], uid=[0],
@ -135,7 +139,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='sgmStepXY', name='sgmStepXY',
label='Step XY', label='Step XY',
description='Step used to compute the similarity volume on X and Y axis.', description='The step is used to compute the similarity volume for one pixel over N (in the XY image plane).',
value=2, value=2,
range=(-1, 10, 1), range=(-1, 10, 1),
uid=[0], uid=[0],
@ -143,7 +147,9 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='sgmStepZ', name='sgmStepZ',
label='Step Z', label='Step Z',
description='Step used to compute the similarity volume on Z axis.', description='Initial step used to compute the similarity volume on Z axis (every N pixels on the epilolar line).\n'
'-1 means automatic estimation.\n'
'This value will be adjusted in all case to fit in the max memory (sgmMaxDepths).',
value=-1, value=-1,
range=(-1, 10, 1), range=(-1, 10, 1),
uid=[0], uid=[0],
@ -151,7 +157,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='sgmMaxTCamsPerTile', name='sgmMaxTCamsPerTile',
label='Max Nb Neighbour Cameras Per Tile', label='Max Nb Neighbour Cameras Per Tile',
description='Maximum number of neighbour cameras.', description='Maximum number of neighbour cameras used per tile.',
value=4, value=4,
range=(1, 20, 1), range=(1, 20, 1),
uid=[0], uid=[0],
@ -159,16 +165,24 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='sgmWSH', name='sgmWSH',
label='WSH', label='WSH',
description='Half-size of the patch used to compute the similarity.', description='Half-size of the patch used to compute the similarity. Patch width is wsh*2+1.',
value=4, value=4,
range=(1, 20, 1), range=(1, 20, 1),
uid=[0], uid=[0],
advanced=True, advanced=True,
), ),
desc.BoolParam(
name='sgmUseSfmSeeds',
label='Use SfM Landmarks',
description='Use landmarks from Structure-from-Motion as input seeds to define min/max depth ranges.',
value=True,
uid=[0],
advanced=True,
),
desc.FloatParam( desc.FloatParam(
name='sgmSeedsRangeInflate', name='sgmSeedsRangeInflate',
label='Seeds Range Inflate', label='Seeds Range Inflate',
description='Seeds range inflate factor.', description='Inflate factor to add margins around SfM seeds.',
value=0.2, value=0.2,
range=(0.0, 2.0, 0.1), range=(0.0, 2.0, 0.1),
uid=[0], uid=[0],
@ -195,7 +209,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.FloatParam( desc.FloatParam(
name='sgmP1', name='sgmP1',
label='P1', label='P1',
description='P1 parameter.', description='P1 parameter for SGM filtering.',
value=10.0, value=10.0,
range=(0.0, 255.0, 0.5), range=(0.0, 255.0, 0.5),
uid=[0], uid=[0],
@ -204,7 +218,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.FloatParam( desc.FloatParam(
name='sgmP2Weighting', name='sgmP2Weighting',
label='P2 Weighting', label='P2 Weighting',
description='P2 weighting parameter.', description='P2 weighting parameter for SGM filtering.',
value=100.0, value=100.0,
range=(-255.0, 255.0, 0.5), range=(-255.0, 255.0, 0.5),
uid=[0], uid=[0],
@ -213,7 +227,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.IntParam( desc.IntParam(
name='sgmMaxDepths', name='sgmMaxDepths',
label='Max Depths', label='Max Depths',
description='Max number of depths in the overall similarity volume.', description='Maximum number of depths in the similarity volume.',
value=1500, value=1500,
range=(1, 5000, 1), range=(1, 5000, 1),
uid=[0], uid=[0],
@ -222,102 +236,102 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.StringParam( desc.StringParam(
name='sgmFilteringAxes', name='sgmFilteringAxes',
label='Filtering Axes', label='Filtering Axes',
description="Define axes for the filtering of the similarity volume.", description='Define axes for the filtering of the similarity volume.',
value='YX', value='YX',
uid=[0], uid=[0],
advanced=True, advanced=True,
), ),
desc.BoolParam( desc.BoolParam(
name='sgmUseSfmSeeds', name='sgmDepthListPerTile',
label='Use SfM Landmarks', label='Depth List Per Tile',
description='Use landmarks from SfM to define the ranges for the plane sweeping.', description='Select the list of depth planes per tile or globally to the image.',
value=True,
uid=[0],
advanced=True,
),
desc.BoolParam(
name='sgmChooseDepthListPerTile',
label='Choose Depth List Per Tile',
description='SChoose depth list per tile.',
value=True, value=True,
uid=[0], uid=[0],
advanced=True, advanced=True,
), ),
]), ]),
desc.GroupAttribute( desc.GroupAttribute(
name="refine", name='refine',
label="Refine Parameters", label='Refine',
description='Refine Parameters.', description='The refine step computes a similarity volume in higher resolution but with a small depth range around the SGM depth map.\n'
'This allows to compute a depth map with sub-pixel accuracy.',
group=None, group=None,
groupDesc=[ groupDesc=[
desc.BoolParam(
name='refineEnabled',
label='Enable',
description='Enable depth/similarity map refinement process.',
value=True,
uid=[0],
),
desc.IntParam( desc.IntParam(
name='refineScale', name='refineScale',
label='Downscale factor', label='Downscale factor',
description='Downscale factor.', description='Downscale factor applied on source images for the Refine step (in addition to the global downscale).',
value=1, value=1,
range=(-1, 10, 1), range=(-1, 10, 1),
uid=[0], uid=[0],
enabled= lambda node: node.refine.refineEnabled.value,
), ),
desc.IntParam( desc.IntParam(
name='refineStepXY', name='refineStepXY',
label='Step XY', label='Step XY',
description='Step on X and Y axis.', description='The step is used to compute the refine volume for one pixel over N (in the XY image plane).',
value=1, value=1,
range=(-1, 10, 1), range=(-1, 10, 1),
uid=[0], uid=[0],
), enabled= lambda node: node.refine.refineEnabled.value,
desc.IntParam(
name='refineNSamplesHalf',
label='Number of Samples',
description='Number of samples.',
value=150,
range=(1, 500, 10),
uid=[0],
advanced=True,
),
desc.IntParam(
name='refineNDepthsToRefine',
label='Number of Depths',
description='Number of depths.',
value=31,
range=(1, 100, 1),
uid=[0],
advanced=True,
),
desc.IntParam(
name='refineNiters',
label='Number of Iterations',
description='Number of iterations.',
value=100,
range=(1, 500, 10),
uid=[0],
advanced=True,
), ),
desc.IntParam( desc.IntParam(
name='refineMaxTCamsPerTile', name='refineMaxTCamsPerTile',
label='Max Nb Neighbour Cameras Per Tile', label='Max Nb Neighbour Cameras Per Tile',
description='Maximum number of neighbour cameras.', description='Maximum number of neighbour cameras used per tile.',
value=4, value=4,
range=(1, 20, 1), range=(1, 20, 1),
uid=[0], uid=[0],
enabled= lambda node: node.refine.refineEnabled.value,
),
desc.IntParam(
name='refineSubsampling',
label='Number of Subsamples',
description='The number of subsamples used to extract the best depth from the refine volume (sliding gaussian window precision).',
value=10,
range=(1, 30, 1),
uid=[0],
advanced=True,
enabled= lambda node: node.refine.refineEnabled.value,
),
desc.IntParam(
name='refineHalfNbDepths',
label='Half Number of Depths',
description='The thickness of the refine area around the initial depth map.\n'
'This parameter defines the number of depths in front of and behind the initial value \n'
'for which we evaluate the similarity with a finer z sampling.',
value=15,
range=(1, 50, 1),
uid=[0],
advanced=True,
enabled= lambda node: node.refine.refineEnabled.value,
), ),
desc.IntParam( desc.IntParam(
name='refineWSH', name='refineWSH',
label='WSH', label='WSH',
description='Half-size of the patch used to compute the similarity.', description='Half-size of the patch used to compute the similarity. Patch width is wsh*2+1.',
value=3, value=3,
range=(1, 20, 1), range=(1, 20, 1),
uid=[0], uid=[0],
advanced=True, advanced=True,
enabled= lambda node: node.refine.refineEnabled.value,
), ),
desc.FloatParam( desc.FloatParam(
name='refineSigma', name='refineSigma',
label='Sigma', label='Sigma',
description='Sigma Threshold.', description='Sigma (2*sigma^2) of the gaussian filter used to extract the best depth from the refine volume.',
value=15.0, value=15.0,
range=(0.0, 30.0, 0.5), range=(0.0, 30.0, 0.5),
uid=[0], uid=[0],
advanced=True, advanced=True,
enabled= lambda node: node.refine.refineEnabled.value,
), ),
desc.FloatParam( desc.FloatParam(
name='refineGammaC', name='refineGammaC',
@ -327,6 +341,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
range=(0.0, 30.0, 0.5), range=(0.0, 30.0, 0.5),
uid=[0], uid=[0],
advanced=True, advanced=True,
enabled= lambda node: node.refine.refineEnabled.value,
), ),
desc.FloatParam( desc.FloatParam(
name='refineGammaP', name='refineGammaP',
@ -336,28 +351,38 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
range=(0.0, 30.0, 0.5), range=(0.0, 30.0, 0.5),
uid=[0], uid=[0],
advanced=True, advanced=True,
), enabled= lambda node: node.refine.refineEnabled.value,
desc.BoolParam(
name='refineDoRefineFuse',
label='Refine and Fuse',
description='Perform Refine/Fuse',
value=True,
uid=[0],
advanced=True,
),
desc.BoolParam(
name='refineDoRefineOptimization',
label='Post-Process Optimization',
description='Perform Refine post-process optimization',
value=True,
uid=[0],
advanced=True,
), ),
]), ]),
desc.GroupAttribute( desc.GroupAttribute(
name="intermediateResults", name="colorOptimization",
label="Intermediate Results", label="Color Optimization",
description='Intermediate Results Parameters.', description='Color optimization post-process parameters.',
group=None,
groupDesc=[
desc.BoolParam(
name='colorOptimizationEnabled',
label='Enable',
description='Enable depth/similarity map post-process color optimization.',
value=True,
uid=[0],
),
desc.IntParam(
name='colorOptimizationNbIterations',
label='Number of Iterations',
description='Number of iterations of the optimization.',
value=100,
range=(1, 500, 10),
uid=[0],
advanced=True,
enabled= lambda node: node.colorOptimization.colorOptimizationEnabled.value,
),
]),
desc.GroupAttribute(
name='intermediateResults',
label='Intermediate Results',
description='Intermediate results parameters for debug purposes.\n'
'Warning: Dramatically affect performances and use large amount of storage.',
advanced=True, advanced=True,
group=None, group=None,
groupDesc=[ groupDesc=[
@ -372,7 +397,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.BoolParam( desc.BoolParam(
name='exportIntermediateVolumes', name='exportIntermediateVolumes',
label='Export Volumes', label='Export Volumes',
description='Export intermediate similarity volumes from the SGM and Refine steps.', description='Export intermediate full similarity volumes from the SGM and Refine steps.',
value=False, value=False,
uid=[], uid=[],
advanced=True, advanced=True,
@ -388,7 +413,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.BoolParam( desc.BoolParam(
name='exportIntermediateVolume9pCsv', name='exportIntermediateVolume9pCsv',
label='Export 9 Points', label='Export 9 Points',
description='Export intermediate volumes 9 points CSV from the SGM and Refine steps.', description='Export intermediate volumes 9 points from the SGM and Refine steps in CSV files.',
value=False, value=False,
uid=[], uid=[],
advanced=True, advanced=True,
@ -396,7 +421,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.BoolParam( desc.BoolParam(
name='exportTilePattern', name='exportTilePattern',
label='Export Tile Pattern', label='Export Tile Pattern',
description='Export workflow tile pattern.', description='Export the bounding boxes of tiles volumes as meshes. This allows to visualize the depth map search areas.',
value=False, value=False,
uid=[], uid=[],
advanced=True, advanced=True,
@ -454,7 +479,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.File( desc.File(
name='tilePattern', name='tilePattern',
label='Tile Pattern', label='Tile Pattern',
description='DEBUG: Tile pattern', description='Debug: Tile pattern',
value=desc.Node.internalFolder + '<VIEW_ID>_tilePattern.obj', value=desc.Node.internalFolder + '<VIEW_ID>_tilePattern.obj',
uid=[], uid=[],
group='', # do not export on the command line group='', # do not export on the command line
@ -463,7 +488,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.File( desc.File(
name='depthSgm', name='depthSgm',
label='Depth Maps SGM', label='Depth Maps SGM',
description='DEBUG: Depth maps SGM', description='Debug: Depth maps SGM',
semantic='image', semantic='image',
value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_scale2_sgm.exr', value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_scale2_sgm.exr',
uid=[], uid=[],
@ -473,7 +498,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.File( desc.File(
name='depthSgmUpscaled', name='depthSgmUpscaled',
label='Depth Maps SGM Upscaled', label='Depth Maps SGM Upscaled',
description='DEBUG: Depth maps SGM upscaled', description='Debug: Depth maps SGM upscaled',
semantic='image', semantic='image',
value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_sgmUpscaled.exr', value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_sgmUpscaled.exr',
uid=[], uid=[],
@ -483,7 +508,7 @@ Use a downscale factor of one (full-resolution) only if the quality of the input
desc.File( desc.File(
name='depthRefined', name='depthRefined',
label='Depth Maps Refined', label='Depth Maps Refined',
description='DEBUG: Depth maps after refinement', description='Debug: Depth maps after refinement',
semantic='image', semantic='image',
value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_refinedFused.exr', value=desc.Node.internalFolder + '<VIEW_ID>_depthMap_refinedFused.exr',
uid=[], uid=[],