__version__ = "2.0" from meshroom.core import desc import os.path class ImageProcessing(desc.CommandLineNode): commandLine = 'aliceVision_utils_imageProcessing {allParams}' size = desc.DynamicNodeSize('input') # parallelization = desc.Parallelization(blockSize=40) # commandLineRange = '--rangeStart {rangeStart} --rangeSize {rangeBlockSize}' documentation = ''' Convert or apply filtering to the input images. ''' inputs = [ desc.File( name='input', label='Input', description='SfMData file input, image filenames or regex(es) on the image file path.\nsupported regex: \'#\' matches a single digit, \'@\' one or more digits, \'?\' one character and \'*\' zero or more.', value='', uid=[0], ), desc.ListAttribute( elementDesc=desc.File( name="inputFolder", label="input Folder", description="", value="", uid=[0], ), name="inputFolders", label="Images input Folders", description='Use images from specific folder(s).', ), desc.ListAttribute( elementDesc=desc.StringParam( name="metadataFolder", label="Metadata Folder", description="", value="", uid=[0], ), name="metadataFolders", label="Metadata input Folders", description='Use images metadata from specific folder(s).', advanced=True, ), desc.ChoiceParam( name='extension', label='Output File Extension', description='Output Image File Extension.', value='', values=['', 'exr', 'jpg', 'tiff', 'png'], exclusive=True, uid=[0], ), desc.BoolParam( name='reconstructedViewsOnly', label='Only Reconstructed Views', description='Process Only Reconstructed Views', value=False, uid=[0], ), desc.BoolParam( name='exposureCompensation', label='Exposure Compensation', description='Exposure Compensation', value=False, uid=[0], ), desc.FloatParam( name='scaleFactor', label='ScaleFactor', description='Scale Factor.', value=1.0, range=(0.0, 1.0, 0.01), uid=[0], ), desc.FloatParam( name='contrast', label='Contrast', description='Contrast.', value=1.0, range=(0.0, 100.0, 0.1), uid=[0], ), desc.IntParam( name='medianFilter', label='Median Filter', description='Median Filter.', value=0, range=(0, 10, 1), uid=[0], ), desc.BoolParam( name='fillHoles', label='Fill holes', description='Fill holes.', value=False, uid=[0], ), desc.GroupAttribute(name="sharpenFilter", label="Sharpen Filter", description="Sharpen Filtering Parameters.", joinChar=":", groupDesc=[ desc.BoolParam( name='enabled', label='Enable', description='Use sharpen.', value=False, uid=[0], ), desc.IntParam( name='width', label='Width', description='Sharpen Width.', value=3, range=(1, 9, 2), uid=[0], ), desc.FloatParam( name='contrast', label='Contrast', description='Sharpen Contrast.', value=1.0, range=(0.0, 100.0, 0.1), uid=[0], ), desc.FloatParam( name='threshold', label='Threshold', description='Sharpen Threshold.', value=0.0, range=(0.0, 1.0, 0.01), uid=[0], ), ]), desc.GroupAttribute(name="bilateralFilter", label="Bilateral Filter", description="Bilateral Filtering Parameters.", joinChar=":", groupDesc=[ desc.BoolParam( name='bilateralFilterEnabled', label='Enable', description='Bilateral Filter.', value=False, uid=[0], ), desc.IntParam( name='bilateralFilterDistance', label='Distance', description='Diameter of each pixel neighborhood that is used during bilateral filtering.\nCould be very slow for large filters, so it is recommended to use 5.', value=0, range=(0, 9, 1), uid=[0], ), desc.FloatParam( name='bilateralFilterSigmaSpace', label='Sigma Coordinate Space', description='Bilateral Filter sigma in the coordinate space.', value=0.0, range=(0.0, 150.0, 0.01), uid=[0], ), desc.FloatParam( name='bilateralFilterSigmaColor', label='Sigma Color Space', description='Bilateral Filter sigma in the color space.', value=0.0, range=(0.0, 150.0, 0.01), uid=[0], ), ]), desc.GroupAttribute(name="claheFilter", label="Clahe Filter", description="Clahe Filtering Parameters.", joinChar=":", groupDesc=[ desc.BoolParam( name='claheEnabled', label='Enable', description='Use Contrast Limited Adaptive Histogram Equalization (CLAHE) Filter.', value=False, uid=[0], ), desc.FloatParam( name='claheClipLimit', label='Clip Limit.', description='Sets Threshold For Contrast Limiting.', value=4.0, range=(0.0, 8.0, 1.0), uid=[0], ), desc.IntParam( name='claheTileGridSize', label='Tile Grid Size.', description='Sets Size Of Grid For Histogram Equalization. Input Image Will Be Divided Into Equally Sized Rectangular Tiles.', value=8, range=(4, 64, 4), 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='outSfMData', label='Output sfmData', description='Output sfmData.', value=lambda attr: (desc.Node.internalFolder + os.path.basename(attr.node.input.value)) if (os.path.splitext(attr.node.input.value)[1] in ['.abc', '.sfm']) else '', uid=[], group='', # do not export on the command line ), desc.File( name='output', label='Output Folder', description='Output Images Folder.', value=desc.Node.internalFolder, uid=[], ), desc.File( name='outputImages', label='Output Images', description='Output Image Files.', value=lambda attr: desc.Node.internalFolder + os.path.basename(attr.node.input.value) if (os.path.splitext(attr.node.input.value)[1] not in ['', '.abc', '.sfm']) else (desc.Node.internalFolder + '*.' + (attr.node.extension.value or '*')), group='', # do not export on the command line uid=[], ), ]