Meshroom/meshroom/nodes/aliceVision/ImageMasking.py

147 lines
4.9 KiB
Python

__version__ = "3.0"
from meshroom.core import desc
class ImageMasking(desc.CommandLineNode):
commandLine = 'aliceVision_imageMasking {allParams}'
size = desc.DynamicNodeSize('input')
parallelization = desc.Parallelization(blockSize=40)
commandLineRange = '--rangeStart {rangeStart} --rangeSize {rangeBlockSize}'
inputs = [
desc.File(
name='input',
label='Input',
description='''SfMData file.''',
value='',
uid=[0],
),
desc.ChoiceParam(
name='algorithm',
label='Algorithm',
description='',
value='HSV',
values=['HSV', 'AutoGrayscaleThreshold'],
exclusive=True,
uid=[0],
),
desc.GroupAttribute(
name="hsv",
label="HSV Parameters",
description="""Values to select:
- Green: default values
- White: Tolerance = 1, minSaturation = 0, maxSaturation = 0.1, minValue = 0.8, maxValue = 1
- Black: Tolerance = 1, minSaturation = 0, maxSaturation = 0.1, minValue = 0, maxValue = 0.2
""",
group=None,
enabled=lambda node: node.algorithm.value == 'HSV',
groupDesc=[
desc.FloatParam(
name='hsvHue',
label='Hue',
description='Hue value to isolate in [0,1] range. 0 = red, 0.33 = green, 0.66 = blue, 1 = red.',
semantic='color/hue',
value=0.33,
range=(0.0, 1.0, 0.01),
uid=[0]
),
desc.FloatParam(
name='hsvHueRange',
label='Tolerance',
description='Tolerance around the hue value to isolate.',
value=0.1,
range=(0.0, 1.0, 0.01),
uid=[0]
),
desc.FloatParam(
name='hsvMinSaturation',
label='Min Saturation',
description='Hue is meaningless if saturation is low. Do not mask pixels below this threshold.',
value=0.3,
range=(0.0, 1.0, 0.01),
uid=[0]
),
desc.FloatParam(
name='hsvMaxSaturation',
label='Max Saturation',
description='Do not mask pixels above this threshold. It might be useful to mask white/black pixels.',
value=1.0,
range=(0.0, 1.0, 0.01),
uid=[0]
),
desc.FloatParam(
name='hsvMinValue',
label='Min Value',
description='Hue is meaningless if value is low. Do not mask pixels below this threshold.',
value=0.3,
range=(0.0, 1.0, 0.01),
uid=[0]
),
desc.FloatParam(
name='hsvMaxValue',
label='Max Value',
description='Do not mask pixels above this threshold. It might be useful to mask white/black pixels.',
value=1.0,
range=(0.0, 1.0, 0.01),
uid=[0]
),
]),
desc.BoolParam(
name='invert',
label='Invert',
description='''If ticked, the selected area is ignored.
If not, only the selected area is considered.''',
value=True,
uid=[0]
),
desc.IntParam(
name='growRadius',
label='Grow Radius',
description='Grow the selected area. It might be used to fill the holes: then use shrinkRadius to restore the initial coutours.',
value=0,
range=(0, 50, 1),
uid=[0]
),
desc.IntParam(
name='shrinkRadius',
label='Shrink Radius',
description='Shrink the selected area.',
value=0,
range=(0, 50, 1),
uid=[0]
),
desc.File(
name='depthMapFolder',
label='Depth Mask Folder',
description='''Depth Mask Folder''',
value='',
uid=[0],
),
desc.StringParam(
name='depthMapExp',
label='Depth Mask Expression',
description='''Depth Mask Expression, like "{inputFolder}/{stem}-depth.{ext}".''',
value='',
uid=[0],
),
desc.ChoiceParam(
name='verboseLevel',
label='Verbose Level',
description='''verbosity level (fatal, error, warning, info, debug, trace).''',
value='info',
values=['fatal', 'error', 'warning', 'info', 'debug', 'trace'],
exclusive=True,
uid=[],
),
]
outputs = [
desc.File(
name='output',
label='Output',
description='''Output folder.''',
value=desc.Node.internalFolder,
uid=[],
),
]