__version__ = "1.1" from meshroom.core import desc class FeatureRepeatability(desc.AVCommandLineNode): commandLine = 'aliceVision_samples_repeatabilityDataset {allParams}' size = desc.DynamicNodeSize('input') # parallelization = desc.Parallelization(blockSize=40) # commandLineRange = '--rangeStart {rangeStart} --rangeSize {rangeBlockSize}' category = 'Utils' documentation = ''' Compare feature/descriptor matching repeatability on some dataset with known homography motions. ''' inputs = [ desc.File( name="input", label="Input Folder", description="Input folder with evaluation datasets.", value="", uid=[0], ), desc.ChoiceParam( name="describerTypes", label="Describer Types", description="Describer types used to describe an image.", value=["sift"], values=["sift", "sift_float", "sift_upright", "dspsift", "akaze", "akaze_liop", "akaze_mldb", "cctag3", "cctag4", "sift_ocv", "akaze_ocv"], exclusive=False, uid=[0], joinChar=",", ), desc.ChoiceParam( name="describerPreset", label="Describer Density", description="Control the ImageDescriber density (low, medium, normal, high, ultra).\n" "Warning: Use ULTRA only on small datasets.", value="normal", values=["low", "medium", "normal", "high", "ultra"], exclusive=True, uid=[0], ), desc.ChoiceParam( name="describerQuality", label="Describer Quality", description="Control the ImageDescriber quality (low, medium, normal, high, ultra).", value="normal", values=["low", "medium", "normal", "high", "ultra"], exclusive=True, uid=[0], ), desc.ChoiceParam( name="contrastFiltering", label="Contrast Filtering", description="Contrast filtering method to ignore features with too low contrast that can be considered as noise:\n" " - Static: Fixed threshold.\n" " - AdaptiveToMedianVariance: Based on image content analysis.\n" " - NoFiltering: Disable contrast filtering.\n" " - GridSortOctaves: Grid Sort but per octaves (and only per scale at the end).\n" " - GridSort: Grid sort per octaves and at the end (scale * peakValue).\n" " - GridSortScaleSteps: Grid sort per octaves and at the end (scale and then peakValue).\n" " - NonExtremaFiltering: Filter non-extrema peakValues.", value="Static", values=["Static", "AdaptiveToMedianVariance", "NoFiltering", "GridSortOctaves", "GridSort", "GridSortScaleSteps", "GridSortOctaveSteps", "NonExtremaFiltering"], exclusive=True, advanced=True, uid=[0], ), desc.FloatParam( name="relativePeakThreshold", label="Relative Peak Threshold", description="Peak threashold relative to the median of gradients.", value=0.01, range=(0.01, 1.0, 0.001), advanced=True, uid=[0], enabled=lambda node: (node.contrastFiltering.value == "AdaptiveToMedianVariance"), ), desc.BoolParam( name="gridFiltering", label="Grid Filtering", description="Enable grid filtering. Highly recommended to ensure a usable number of features.", value=True, advanced=True, uid=[0], ), desc.BoolParam( name="forceCpuExtraction", label="Force CPU Extraction", description="Use only CPU feature extraction.", value=True, uid=[], advanced=True, ), desc.IntParam( name="invalidate", label="Invalidate", description="Invalidate.", value=0, range=(0, 10000, 1), group="", uid=[0], ), desc.StringParam( name="comments", label="Comments", description="Comments.", value="", group="", uid=[], ), 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="Folder", description="Output path for the features and descriptors files (*.feat, *.desc).", value=desc.Node.internalFolder, uid=[], ), ]