From c9d69fdc7538f921646c7ffe005f0b51117eaf0c Mon Sep 17 00:00:00 2001 From: Theo Date: Thu, 23 Jan 2020 12:22:30 +0100 Subject: [PATCH 1/5] [nodes] FeatureMatching : Add options knownCameraPoses --- meshroom/nodes/aliceVision/FeatureMatching.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/meshroom/nodes/aliceVision/FeatureMatching.py b/meshroom/nodes/aliceVision/FeatureMatching.py index 43f1e21608..0b4c00d7f9 100644 --- a/meshroom/nodes/aliceVision/FeatureMatching.py +++ b/meshroom/nodes/aliceVision/FeatureMatching.py @@ -116,6 +116,16 @@ class FeatureMatching(desc.CommandLineNode): uid=[0], advanced=True, ), + desc.FloatParam( + name='knownPosesGeometricErrorMax', + label='Known Poses Geometric Error Max', + description='Maximum error (in pixels) allowed for features matching guided by geometric information from known camera poses.\n' + 'If set to 0 it lets the ACRansac select an optimal value.', + value=5.0, + range=(0.0, 100.0, 1.0), + uid=[0], + advanced=True, + ), desc.IntParam( name='maxMatches', label='Max Matches', @@ -140,6 +150,14 @@ class FeatureMatching(desc.CommandLineNode): value=False, uid=[0], ), + desc.BoolParam( + name='matchFromKnownCameraPoses', + label='Match From Known Camera Poses', + description='Enable the usage of geometric information from known camera poses to guide the feature matching.\n' + 'If some cameras have unknown poses (so there is no geometric prior), the standard feature matching will be performed.', + value=False, + uid=[0], + ), desc.BoolParam( name='exportDebugFiles', label='Export Debug Files', From bc877616e216839f273e54884ec4935e40e749a2 Mon Sep 17 00:00:00 2001 From: Theo Date: Thu, 23 Jan 2020 12:24:46 +0100 Subject: [PATCH 2/5] [nodes] StructureFromMotion: Add option filterTrackForks --- meshroom/nodes/aliceVision/StructureFromMotion.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/meshroom/nodes/aliceVision/StructureFromMotion.py b/meshroom/nodes/aliceVision/StructureFromMotion.py index e592df5501..2cdff69760 100644 --- a/meshroom/nodes/aliceVision/StructureFromMotion.py +++ b/meshroom/nodes/aliceVision/StructureFromMotion.py @@ -207,6 +207,14 @@ class StructureFromMotion(desc.CommandLineNode): value=False, uid=[0], ), + desc.BoolParam( + name='filterTrackForks', + label='Filter Track Forks', + description='Enable/Disable the track forks removal. A track contains a fork when incoherent matches \n' + 'lead to multiple features in the same image for a single track. \n', + value=True, + uid=[0], + ), desc.File( name='initialPairA', label='Initial Pair A', From b07594526668f47f33cde115f002a22f31ca0993 Mon Sep 17 00:00:00 2001 From: Theo Date: Thu, 23 Jan 2020 12:25:21 +0100 Subject: [PATCH 3/5] [nodes] StructureFromMotion: Add option minNumberOfMatches --- meshroom/nodes/aliceVision/StructureFromMotion.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/meshroom/nodes/aliceVision/StructureFromMotion.py b/meshroom/nodes/aliceVision/StructureFromMotion.py index 2cdff69760..c0f960abb5 100644 --- a/meshroom/nodes/aliceVision/StructureFromMotion.py +++ b/meshroom/nodes/aliceVision/StructureFromMotion.py @@ -116,6 +116,15 @@ class StructureFromMotion(desc.CommandLineNode): range=(0, 50000, 1), uid=[0], ), + desc.IntParam( + name='minNumberOfMatches', + label='Minimum Number of Matches', + description='Minimum number of matches per image pair (and per feature type). \n' + 'This can be useful to have a meaningful reconstruction with accurate keypoints. 0 means no limit.', + value=0, + range=(0, 50000, 1), + uid=[0], + ), desc.IntParam( name='minInputTrackLength', label='Min Input Track Length', From c1cedd50a39e6d2f6e7039cba9bcdd94f26bda0a Mon Sep 17 00:00:00 2001 From: Theo Date: Thu, 23 Jan 2020 12:26:17 +0100 Subject: [PATCH 4/5] [nodes] ImageMatching: Add methods and option nbNeighbors --- meshroom/nodes/aliceVision/ImageMatching.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/meshroom/nodes/aliceVision/ImageMatching.py b/meshroom/nodes/aliceVision/ImageMatching.py index 8d4ec51536..54344d6fba 100644 --- a/meshroom/nodes/aliceVision/ImageMatching.py +++ b/meshroom/nodes/aliceVision/ImageMatching.py @@ -1,4 +1,4 @@ -__version__ = "1.0" +__version__ = "1.1" import os from meshroom.core import desc @@ -28,6 +28,15 @@ class ImageMatching(desc.CommandLineNode): label="Features Folders", description="Folder(s) containing the extracted features and descriptors." ), + desc.ChoiceParam( + name='method', + label='Method', + description='Method used to select the image pairs to match.', + value='VocabularyTree', + values=['VocabularyTree', 'Sequential', 'SequentialAndVocabularyTree','Exhaustive','Frustum'], + exclusive=True, + uid=[0], + ), desc.File( name='tree', label='Tree', @@ -70,6 +79,15 @@ class ImageMatching(desc.CommandLineNode): uid=[0], advanced=True, ), + desc.IntParam( + name='nbNeighbors', + label='Nb Neighbors', + description='The number of neighbors to retrieve for each image (If 0 it will retrieve all the neighbors).', + value=50, + range=(0, 1000, 1), + uid=[0], + advanced=True, + ), desc.ChoiceParam( name='verboseLevel', label='Verbose Level', From 4afa3c51c16c35972fc6055927d1c9316ab5ae50 Mon Sep 17 00:00:00 2001 From: Theo Date: Fri, 31 Jan 2020 10:59:53 +0100 Subject: [PATCH 5/5] [nodes] imageMatching: rename label and add methods to MultiSfM --- meshroom/nodes/aliceVision/ImageMatching.py | 12 ++++---- .../aliceVision/ImageMatchingMultiSfM.py | 28 +++++++++++++++---- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/meshroom/nodes/aliceVision/ImageMatching.py b/meshroom/nodes/aliceVision/ImageMatching.py index 54344d6fba..3e1ffb409c 100644 --- a/meshroom/nodes/aliceVision/ImageMatching.py +++ b/meshroom/nodes/aliceVision/ImageMatching.py @@ -39,14 +39,14 @@ class ImageMatching(desc.CommandLineNode): ), desc.File( name='tree', - label='Tree', + label='Voc Tree: Tree', description='Input name for the vocabulary tree file.', value=os.environ.get('ALICEVISION_VOCTREE', ''), uid=[], ), desc.File( name='weights', - label='Weights', + label='Voc Tree: Weights', description='Input name for the weight file, if not provided the weights will be computed on the database built with the provided set.', value='', uid=[0], @@ -54,7 +54,7 @@ class ImageMatching(desc.CommandLineNode): ), desc.IntParam( name='minNbImages', - label='Minimal Number of Images', + label='Voc Tree: Minimal Number of Images', description='Minimal number of images to use the vocabulary tree. If we have less features than this threshold, we will compute all matching combinations.', value=200, range=(0, 500, 1), @@ -63,7 +63,7 @@ class ImageMatching(desc.CommandLineNode): ), desc.IntParam( name='maxDescriptors', - label='Max Descriptors', + label='Voc Tree: Max Descriptors', description='Limit the number of descriptors you load per image. Zero means no limit.', value=500, range=(0, 100000, 1), @@ -72,7 +72,7 @@ class ImageMatching(desc.CommandLineNode): ), desc.IntParam( name='nbMatches', - label='Nb Matches', + label='Voc Tree: Nb Matches', description='The number of matches to retrieve for each image (If 0 it will retrieve all the matches).', value=50, range=(0, 1000, 1), @@ -81,7 +81,7 @@ class ImageMatching(desc.CommandLineNode): ), desc.IntParam( name='nbNeighbors', - label='Nb Neighbors', + label='Sequential: Nb Neighbors', description='The number of neighbors to retrieve for each image (If 0 it will retrieve all the neighbors).', value=50, range=(0, 1000, 1), diff --git a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py index 2a0b56a1e6..b5601c840f 100644 --- a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py +++ b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py @@ -36,16 +36,25 @@ class ImageMatchingMultiSfM(desc.CommandLineNode): label="Features Folders", description="Folder(s) containing the extracted features and descriptors." ), + desc.ChoiceParam( + name='method', + label='Method', + description='Method used to select the image pairs to match.', + value='VocabularyTree', + values=['VocabularyTree', 'Sequential', 'SequentialAndVocabularyTree','Exhaustive','Frustum'], + exclusive=True, + uid=[0], + ), desc.File( name='tree', - label='Tree', + label='Voc Tree: Tree', description='Input name for the vocabulary tree file.', value=os.environ.get('ALICEVISION_VOCTREE', ''), uid=[], ), desc.File( name='weights', - label='Weights', + label='Voc Tree: Weights', description='Input name for the weight file, if not provided the weights will be computed on the database built with the provided set.', value='', uid=[0], @@ -62,7 +71,7 @@ class ImageMatchingMultiSfM(desc.CommandLineNode): ), desc.IntParam( name='minNbImages', - label='Minimal Number of Images', + label='Voc Tree: Minimal Number of Images', description='Minimal number of images to use the vocabulary tree. If we have less features than this threshold, we will compute all matching combinations.', value=200, range=(0, 500, 1), @@ -71,7 +80,7 @@ class ImageMatchingMultiSfM(desc.CommandLineNode): ), desc.IntParam( name='maxDescriptors', - label='Max Descriptors', + label='Voc Tree: Max Descriptors', description='Limit the number of descriptors you load per image. Zero means no limit.', value=500, range=(0, 100000, 1), @@ -80,13 +89,22 @@ class ImageMatchingMultiSfM(desc.CommandLineNode): ), desc.IntParam( name='nbMatches', - label='Nb Matches', + label='Voc Tree: Nb Matches', description='The number of matches to retrieve for each image (If 0 it will retrieve all the matches).', value=50, range=(0, 1000, 1), uid=[0], advanced=True, ), + desc.IntParam( + name='nbNeighbors', + label='Sequential: Nb Neighbors', + description='The number of neighbors to retrieve for each image (If 0 it will retrieve all the neighbors).', + value=50, + range=(0, 1000, 1), + uid=[0], + advanced=True, + ), desc.ChoiceParam( name='verboseLevel', label='Verbose Level',