-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1483 from alicevision/dev/masking
New ImageMasking and MeshMasking nodes
- Loading branch information
Showing
11 changed files
with
442 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
__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, 1, 0.01), | ||
uid=[0] | ||
), | ||
desc.FloatParam( | ||
name='hsvHueRange', | ||
label='Tolerance', | ||
description='Tolerance around the hue value to isolate.', | ||
value=0.1, | ||
range=(0, 1, 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, 1, 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, | ||
range=(0, 1, 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, 1, 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, | ||
range=(0, 1, 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=[], | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
__version__ = "1.0" | ||
|
||
from meshroom.core import desc | ||
|
||
|
||
class MeshMasking(desc.CommandLineNode): | ||
commandLine = 'aliceVision_meshMasking {allParams}' | ||
category = 'Mesh Post-Processing' | ||
documentation = ''' | ||
Decimate triangles based on image masks. | ||
''' | ||
|
||
inputs = [ | ||
desc.File( | ||
name='input', | ||
label='Dense SfMData', | ||
description='SfMData file.', | ||
value='', | ||
uid=[0], | ||
), | ||
desc.File( | ||
name='inputMesh', | ||
label='Input Mesh', | ||
description='''Input Mesh (OBJ file format).''', | ||
value='', | ||
uid=[0], | ||
), | ||
desc.ListAttribute( | ||
elementDesc=desc.File( | ||
name="masksFolder", | ||
label="Masks Folder", | ||
description="", | ||
value="", | ||
uid=[0], | ||
), | ||
name="masksFolders", | ||
label="Masks Folders", | ||
description='Use masks from specific folder(s). Filename should be the same or the image uid.', | ||
), | ||
desc.IntParam( | ||
name='threshold', | ||
label='Threshold', | ||
description='The minimum number of visibility to keep a vertex.', | ||
value=1, | ||
range=(1, 100, 1), | ||
uid=[0] | ||
), | ||
desc.BoolParam( | ||
name='smoothBoundary', | ||
label='Smooth Boundary', | ||
description='Modify the triangles at the boundary to fit the masks.', | ||
value=False, | ||
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=False, | ||
uid=[0] | ||
), | ||
desc.BoolParam( | ||
name='undistortMasks', | ||
label='Undistort Masks', | ||
description='''Undistort the masks with the same parameters as the matching image. | ||
Tick it if the masks are drawn on the original images.''', | ||
value=False, | ||
uid=[0] | ||
), | ||
desc.BoolParam( | ||
name='usePointsVisibilities', | ||
label='Use points visibilities', | ||
description='''Use the points visibilities from the meshing to filter triangles. | ||
Example: when they are occluded, back-face, etc.''', | ||
value=False, | ||
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='outputMesh', | ||
label='Output Mesh', | ||
description='''Output mesh (OBJ file format).''', | ||
value=desc.Node.internalFolder + 'mesh.obj', | ||
uid=[], | ||
), | ||
] |
Oops, something went wrong.