Merge pull request #1754 from alicevision/dev/minModeTemplates

Add dedicated "minimal" mode for templates
This commit is contained in:
Fabien Castan 2022-09-06 10:41:01 +02:00 committed by GitHub
commit 22b662007b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 191 additions and 1121 deletions

View file

@ -283,7 +283,7 @@ class Attribute(BaseObject):
return copy.copy(self.desc.value)
def _isDefault(self):
return self._value == self.defaultValue()
return self.value == self.defaultValue()
def getPrimitiveValue(self, exportDefault=True):
return self._value

View file

@ -261,6 +261,9 @@ class Graph(BaseObject):
self.header = fileData.get(Graph.IO.Keys.Header, {})
nodesVersions = self.header.get(Graph.IO.Keys.NodesVersions, {})
# check whether the file was saved as a template in minimal mode
isTemplate = self.header.get("template", False)
with GraphModification(self):
# iterate over nodes sorted by suffix index in their names
for nodeName, nodeData in sorted(graphData.items(), key=lambda x: self.getNodeIndexFromName(x[0])):
@ -273,7 +276,8 @@ class Graph(BaseObject):
# 3. fallback to no version "0.0": retro-compatibility
if "version" not in nodeData:
nodeData["version"] = nodesVersions.get(nodeData["nodeType"], "0.0")
n = nodeFactory(nodeData, nodeName)
n = nodeFactory(nodeData, nodeName, template=isTemplate)
# Add node to the graph with raw attributes values
self._addNode(n, nodeName)
@ -999,7 +1003,7 @@ class Graph(BaseObject):
def asString(self):
return str(self.toDict())
def save(self, filepath=None, setupProjectFile=True):
def save(self, filepath=None, setupProjectFile=True, template=False):
path = filepath or self._filepath
if not path:
raise ValueError("filepath must be specified for unsaved files.")
@ -1015,6 +1019,14 @@ class Graph(BaseObject):
for p in usedNodeTypes
}
data = {}
if template:
self.header["template"] = True
data = {
Graph.IO.Keys.Header: self.header,
Graph.IO.Keys.Graph: self.getNonDefaultAttributes()
}
else:
data = {
Graph.IO.Keys.Header: self.header,
Graph.IO.Keys.Graph: self.toDict()
@ -1026,6 +1038,35 @@ class Graph(BaseObject):
if path != self._filepath and setupProjectFile:
self._setFilepath(path)
def getNonDefaultAttributes(self):
"""
Instead of getting all the inputs/outputs attribute keys, only get the keys of
the attributes whose value is not the default one.
Returns:
dict: self.toDict() with all the inputs/outputs attributes with default values removed
"""
graph = self.toDict()
for nodeName in graph.keys():
node = self.node(nodeName)
inputKeys = list(graph[nodeName]["inputs"].keys())
outputKeys = list(graph[nodeName]["outputs"].keys())
for attrName in inputKeys:
attribute = node.attribute(attrName)
# check that attribute is not a link for choice attributes
if attribute.isDefault and not attribute.isLink:
del graph[nodeName]["inputs"][attrName]
for attrName in outputKeys:
attribute = node.attribute(attrName)
# check that attribute is not a link for choice attributes
if attribute.isDefault and not attribute.isLink:
del graph[nodeName]["outputs"][attrName]
return graph
def _setFilepath(self, filepath):
"""
Set the internal filepath of this Graph.

View file

@ -1393,7 +1393,7 @@ class CompatibilityNode(BaseNode):
issueDetails = Property(str, issueDetails.fget, constant=True)
def nodeFactory(nodeDict, name=None):
def nodeFactory(nodeDict, name=None, template=False):
"""
Create a node instance by deserializing the given node data.
If the serialized data matches the corresponding node type description, a Node instance is created.
@ -1437,9 +1437,10 @@ def nodeFactory(nodeDict, name=None):
compatibilityIssue = CompatibilityIssue.VersionConflict
# in other cases, check attributes compatibility between serialized node and its description
else:
# check that the node has the exact same set of inputs/outputs as its description
if sorted([attr.name for attr in nodeDesc.inputs]) != sorted(inputs.keys()) or \
sorted([attr.name for attr in nodeDesc.outputs]) != sorted(outputs.keys()):
# check that the node has the exact same set of inputs/outputs as its description, except if the node
# is described in a template file, in which only non-default parameters are saved
if not template and (sorted([attr.name for attr in nodeDesc.inputs]) != sorted(inputs.keys()) or \
sorted([attr.name for attr in nodeDesc.outputs]) != sorted(outputs.keys())):
compatibilityIssue = CompatibilityIssue.DescriptionConflict
# verify that all inputs match their descriptions
for attrName, value in inputs.items():
@ -1463,5 +1464,7 @@ def nodeFactory(nodeDict, name=None):
if not internalFolder and nodeDesc:
logging.warning("No serialized output data: performing automatic upgrade on '{}'".format(name))
node = node.upgrade()
elif template: # if the node comes from a template file and there is a conflict, it should be upgraded anyway
node = node.upgrade()
return node

View file

@ -3,6 +3,7 @@
"pipelineVersion": "2.2",
"releaseVersion": "2021.1.0",
"fileVersion": "1.1",
"template": true,
"nodesVersions": {
"ExportAnimatedCamera": "2.0",
"FeatureMatching": "2.0",
@ -16,9 +17,7 @@
"graph": {
"DistortionCalibration_1": {
"inputs": {
"verboseLevel": "info",
"input": "{CameraInit_1.output}",
"lensGrid": []
"input": "{CameraInit_1.output}"
},
"nodeType": "DistortionCalibration",
"uids": {
@ -40,15 +39,9 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 10,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 5,
"input": "{FeatureExtraction_1.input}",
"method": "SequentialAndVocabularyTree",
"featuresFolders": [
"{FeatureExtraction_1.output}"
]
@ -73,20 +66,7 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "normal",
"gridFiltering": true,
"input": "{CameraInit_1.output}",
"describerPreset": "normal"
"input": "{CameraInit_1.output}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -108,39 +88,16 @@
},
"StructureFromMotion_1": {
"inputs": {
"localizerEstimatorMaxIterations": 4096,
"minAngleForLandmark": 0.5,
"filterTrackForks": false,
"minNumberOfObservationsForTriangulation": 3,
"maxAngleInitialPair": 40.0,
"observationConstraint": "Scale",
"maxNumberOfMatches": 0,
"localizerEstimator": "acransac",
"describerTypes": "{FeatureMatching_1.describerTypes}",
"lockScenePreviouslyReconstructed": false,
"localBAGraphDistance": 1,
"minNbCamerasToRefinePrincipalPoint": 3,
"lockAllIntrinsics": false,
"input": "{FeatureMatching_1.input}",
"featuresFolders": "{FeatureMatching_1.featuresFolders}",
"useRigConstraint": true,
"rigMinNbCamerasForCalibration": 20,
"initialPairA": "",
"initialPairB": "",
"interFileExtension": ".abc",
"useLocalBA": true,
"computeStructureColor": true,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"minInputTrackLength": 5,
"useOnlyMatchesFromInputFolder": false,
"verboseLevel": "info",
"minAngleForTriangulation": 1.0,
"maxReprojectionError": 4.0,
"minAngleInitialPair": 5.0,
"minNumberOfMatches": 0,
"localizerEstimatorError": 0.0
"minAngleForTriangulation": 1.0
},
"nodeType": "StructureFromMotion",
"uids": {
@ -164,15 +121,7 @@
},
"ExportAnimatedCamera_1": {
"inputs": {
"exportFullROD": false,
"undistortedImageType": "exr",
"exportUVMaps": true,
"verboseLevel": "info",
"sfmDataFilter": "",
"exportUndistortedImages": false,
"input": "{StructureFromMotion_1.output}",
"viewFilter": "",
"correctPrincipalPoint": true
"input": "{StructureFromMotion_1.output}"
},
"nodeType": "ExportAnimatedCamera",
"uids": {
@ -195,28 +144,7 @@
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
"radial3",
"brown",
"fisheye4",
"fisheye1",
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
},
"inputs": {},
"nodeType": "CameraInit",
"uids": {
"0": "f9436e97e444fa71a05aa5cf7639b206df8ba282"
@ -237,23 +165,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{DistortionCalibration_1.outSfMData}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",

View file

@ -6,34 +6,27 @@
"ImageProcessing": "3.0",
"PanoramaCompositing": "2.0",
"LdrToHdrMerge": "4.0",
"LdrToHdrSampling": "4.0",
"LdrToHdrCalibration": "3.0",
"PanoramaEstimation": "1.0",
"LdrToHdrCalibration": "3.0",
"LdrToHdrSampling": "4.0",
"PanoramaInit": "2.0",
"PanoramaMerging": "1.0",
"SfMTransform": "3.0",
"CameraInit": "7.0",
"SfMTransform": "3.0",
"PanoramaMerging": "1.0",
"ImageMatching": "2.0",
"FeatureExtraction": "1.1",
"PanoramaPrepareImages": "1.1",
"PanoramaWarping": "1.0"
},
"releaseVersion": "2021.1.0",
"fileVersion": "1.1"
"fileVersion": "1.1",
"template": true
},
"graph": {
"LdrToHdrMerge_1": {
"inputs": {
"verboseLevel": "info",
"fusionWeight": "gaussian",
"channelQuantizationPower": "{LdrToHdrCalibration_1.channelQuantizationPower}",
"nbBrackets": 0,
"enableHighlight": false,
"offsetRefBracketIndex": 1,
"storageDataType": "float",
"highlightTargetLux": 120000.0,
"byPass": "{LdrToHdrCalibration_1.byPass}",
"highlightCorrectionFactor": 1.0,
"input": "{LdrToHdrCalibration_1.input}",
"userNbBrackets": "{LdrToHdrCalibration_1.userNbBrackets}",
"response": "{LdrToHdrCalibration_1.response}"
@ -58,48 +51,14 @@
},
"ImageProcessing_1": {
"inputs": {
"outputFormat": "rgba",
"sharpenFilter": {
"threshold": 0.0,
"width": 3,
"sharpenFilterEnabled": false,
"contrast": 1.0
},
"extension": "exr",
"exposureCompensation": false,
"storageDataType": "float",
"inputFolders": [],
"verboseLevel": "info",
"metadataFolders": [],
"claheFilter": {
"claheClipLimit": 4.0,
"claheTileGridSize": 8,
"claheEnabled": false
},
"medianFilter": 0,
"fillHoles": true,
"reconstructedViewsOnly": false,
"input": "{PanoramaMerging_1.outputPanorama}",
"noiseFilter": {
"noiseEnabled": false,
"noiseMethod": "uniform",
"noiseB": 1.0,
"noiseMono": true,
"noiseA": 0.0
},
"scaleFactor": 1.0,
"bilateralFilter": {
"bilateralFilterDistance": 0,
"bilateralFilterSigmaColor": 0.0,
"bilateralFilterSigmaSpace": 0.0,
"bilateralFilterEnabled": false
},
"contrast": 1.0,
"fixNonFinite": true
},
"nodeType": "ImageProcessing",
"uids": {
"0": "494b97af203ddbe4767c922a6c5795297cf53eef"
"0": "3b8b39e478a30aa0ef1871576665b2914204a919"
},
"parallelization": {
"blockSize": 0,
@ -108,8 +67,7 @@
},
"outputs": {
"output": "{cache}/{nodeType}/{uid0}/",
"outputImages": "{cache}/{nodeType}/{uid0}/panorama.exr",
"outSfMData": ""
"outputImages": "{cache}/{nodeType}/{uid0}/panorama.exr"
},
"position": [
3000,
@ -119,13 +77,7 @@
},
"PanoramaWarping_1": {
"inputs": {
"panoramaWidth": 10000,
"maxPanoramaWidth": 70000,
"verboseLevel": "info",
"percentUpscale": 50,
"input": "{SfMTransform_1.output}",
"storageDataType": "float",
"estimateResolution": true
"input": "{SfMTransform_1.output}"
},
"nodeType": "PanoramaWarping",
"uids": {
@ -149,11 +101,6 @@
"inputs": {
"samples": "{LdrToHdrSampling_1.output}",
"channelQuantizationPower": "{LdrToHdrSampling_1.channelQuantizationPower}",
"maxTotalPoints": 1000000,
"nbBrackets": 0,
"calibrationMethod": "debevec",
"calibrationWeight": "default",
"verboseLevel": "info",
"byPass": "{LdrToHdrSampling_1.byPass}",
"input": "{LdrToHdrSampling_1.input}",
"userNbBrackets": "{LdrToHdrSampling_1.userNbBrackets}"
@ -178,16 +125,7 @@
},
"LdrToHdrSampling_1": {
"inputs": {
"blockSize": 256,
"nbBrackets": 0,
"verboseLevel": "info",
"radius": 5,
"byPass": false,
"channelQuantizationPower": 10,
"debug": false,
"input": "{PanoramaPrepareImages_1.output}",
"maxCountSample": 200,
"userNbBrackets": 0
"input": "{PanoramaPrepareImages_1.output}"
},
"nodeType": "LdrToHdrSampling",
"uids": {
@ -209,13 +147,6 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 5,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 40,
"input": "{PanoramaInit_1.outSfMData}",
"method": "FrustumOrVocabularyTree",
"featuresFolders": [
@ -242,18 +173,10 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"sift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "high",
"gridFiltering": true,
"input": "{LdrToHdrMerge_1.outSfMData}",
"describerPreset": "high"
},
@ -275,17 +198,14 @@
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaSeams_1": {
"PanoramaMerging_1": {
"inputs": {
"verboseLevel": "info",
"input": "{PanoramaWarping_1.input}",
"warpingFolder": "{PanoramaWarping_1.output}",
"maxWidth": 5000,
"useGraphCut": true
"compositingFolder": "{PanoramaCompositing_1.output}",
"input": "{PanoramaCompositing_1.input}"
},
"nodeType": "PanoramaSeams",
"nodeType": "PanoramaMerging",
"uids": {
"0": "dd02562c5c3b1e18e42561d99590cbf4ff5ba35a"
"0": "70edd7fe8194bf35dcb0b221141cd4abd2354547"
},
"parallelization": {
"blockSize": 0,
@ -293,10 +213,10 @@
"size": 0
},
"outputs": {
"output": "{cache}/{nodeType}/{uid0}/labels.exr"
"outputPanorama": "{cache}/{nodeType}/{uid0}/panorama.{outputFileTypeValue}"
},
"position": [
2400,
2800,
0
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
@ -304,13 +224,8 @@
"PanoramaCompositing_1": {
"inputs": {
"warpingFolder": "{PanoramaSeams_1.warpingFolder}",
"maxThreads": 4,
"labels": "{PanoramaSeams_1.output}",
"verboseLevel": "info",
"overlayType": "none",
"compositerType": "multiband",
"input": "{PanoramaSeams_1.input}",
"storageDataType": "float"
"input": "{PanoramaSeams_1.input}"
},
"nodeType": "PanoramaCompositing",
"uids": {
@ -332,10 +247,6 @@
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
@ -345,12 +256,7 @@
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
]
},
"nodeType": "CameraInit",
"uids": {
@ -372,7 +278,6 @@
},
"PanoramaPrepareImages_1": {
"inputs": {
"verboseLevel": "info",
"input": "{CameraInit_1.output}"
},
"nodeType": "PanoramaPrepareImages",
@ -395,33 +300,8 @@
},
"SfMTransform_1": {
"inputs": {
"applyScale": true,
"scale": 1.0,
"applyTranslation": true,
"landmarksDescriberTypes": [
"sift",
"dspsift",
"akaze"
],
"markers": [],
"method": "manual",
"verboseLevel": "info",
"input": "{PanoramaEstimation_1.output}",
"applyRotation": true,
"manualTransform": {
"manualTranslation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"manualRotation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"manualScale": 1.0
},
"transformation": ""
"input": "{PanoramaEstimation_1.output}"
},
"nodeType": "SfMTransform",
"uids": {
@ -442,17 +322,14 @@
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaMerging_1": {
"PanoramaSeams_1": {
"inputs": {
"verboseLevel": "info",
"compositingFolder": "{PanoramaCompositing_1.output}",
"outputFileType": "exr",
"storageDataType": "float",
"input": "{PanoramaCompositing_1.input}"
"input": "{PanoramaWarping_1.input}",
"warpingFolder": "{PanoramaWarping_1.output}"
},
"nodeType": "PanoramaMerging",
"nodeType": "PanoramaSeams",
"uids": {
"0": "70edd7fe8194bf35dcb0b221141cd4abd2354547"
"0": "dd02562c5c3b1e18e42561d99590cbf4ff5ba35a"
},
"parallelization": {
"blockSize": 0,
@ -460,34 +337,21 @@
"size": 0
},
"outputs": {
"outputPanorama": "{cache}/{nodeType}/{uid0}/panorama.{outputFileTypeValue}"
"output": "{cache}/{nodeType}/{uid0}/labels.exr"
},
"position": [
2800,
2400,
0
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaEstimation_1": {
"inputs": {
"intermediateRefineWithFocalDist": false,
"offsetLongitude": 0.0,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"filterMatches": false,
"rotationAveragingWeighting": true,
"offsetLatitude": 0.0,
"verboseLevel": "info",
"maxAngularError": 100.0,
"lockAllIntrinsics": false,
"refine": true,
"input": "{FeatureMatching_1.input}",
"intermediateRefineWithFocal": false,
"describerTypes": "{FeatureMatching_1.describerTypes}",
"relativeRotation": "rotation_matrix",
"maxAngleToPrior": 20.0,
"rotationAveraging": "L2_minimization",
"featuresFolders": "{FeatureMatching_1.featuresFolders}"
},
"nodeType": "PanoramaEstimation",
@ -512,23 +376,10 @@
"PanoramaInit_1": {
"inputs": {
"useFisheye": true,
"fisheyeCenterOffset": {
"fisheyeCenterOffset_y": 0.0,
"fisheyeCenterOffset_x": 0.0
},
"initializeCameras": "No",
"nbViewsPerLine": [],
"debugFisheyeCircleEstimation": false,
"verboseLevel": "info",
"dependency": [
"{FeatureExtraction_1.output}"
],
"estimateFisheyeCircle": true,
"input": "{FeatureExtraction_1.input}",
"yawCW": 1,
"config": "",
"fisheyeRadius": 96.0,
"inputAngle": "None"
"input": "{FeatureExtraction_1.input}"
},
"nodeType": "PanoramaInit",
"uids": {
@ -550,23 +401,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{ImageMatching_1.input}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",

View file

@ -6,34 +6,27 @@
"ImageProcessing": "3.0",
"PanoramaCompositing": "2.0",
"LdrToHdrMerge": "4.0",
"LdrToHdrSampling": "4.0",
"LdrToHdrCalibration": "3.0",
"PanoramaEstimation": "1.0",
"LdrToHdrCalibration": "3.0",
"LdrToHdrSampling": "4.0",
"PanoramaInit": "2.0",
"PanoramaMerging": "1.0",
"SfMTransform": "3.0",
"CameraInit": "7.0",
"SfMTransform": "3.0",
"PanoramaMerging": "1.0",
"ImageMatching": "2.0",
"FeatureExtraction": "1.1",
"PanoramaPrepareImages": "1.1",
"PanoramaWarping": "1.0"
},
"releaseVersion": "2021.1.0",
"fileVersion": "1.1"
"fileVersion": "1.1",
"template": true
},
"graph": {
"LdrToHdrMerge_1": {
"inputs": {
"verboseLevel": "info",
"fusionWeight": "gaussian",
"channelQuantizationPower": "{LdrToHdrCalibration_1.channelQuantizationPower}",
"nbBrackets": 0,
"enableHighlight": false,
"offsetRefBracketIndex": 1,
"storageDataType": "float",
"highlightTargetLux": 120000.0,
"byPass": "{LdrToHdrCalibration_1.byPass}",
"highlightCorrectionFactor": 1.0,
"input": "{LdrToHdrCalibration_1.input}",
"userNbBrackets": "{LdrToHdrCalibration_1.userNbBrackets}",
"response": "{LdrToHdrCalibration_1.response}"
@ -58,48 +51,14 @@
},
"ImageProcessing_1": {
"inputs": {
"outputFormat": "rgba",
"sharpenFilter": {
"threshold": 0.0,
"width": 3,
"sharpenFilterEnabled": false,
"contrast": 1.0
},
"extension": "exr",
"exposureCompensation": false,
"storageDataType": "float",
"inputFolders": [],
"verboseLevel": "info",
"metadataFolders": [],
"claheFilter": {
"claheClipLimit": 4.0,
"claheTileGridSize": 8,
"claheEnabled": false
},
"medianFilter": 0,
"fillHoles": true,
"reconstructedViewsOnly": false,
"input": "{PanoramaMerging_1.outputPanorama}",
"noiseFilter": {
"noiseEnabled": false,
"noiseMethod": "uniform",
"noiseB": 1.0,
"noiseMono": true,
"noiseA": 0.0
},
"scaleFactor": 1.0,
"bilateralFilter": {
"bilateralFilterDistance": 0,
"bilateralFilterSigmaColor": 0.0,
"bilateralFilterSigmaSpace": 0.0,
"bilateralFilterEnabled": false
},
"contrast": 1.0,
"fixNonFinite": true
},
"nodeType": "ImageProcessing",
"uids": {
"0": "d7845b276d97c3489223cce16a1e9d581d98a832"
"0": "a6d1b7d35fd36828f678e4547e9e267d84586f20"
},
"parallelization": {
"blockSize": 0,
@ -108,8 +67,7 @@
},
"outputs": {
"output": "{cache}/{nodeType}/{uid0}/",
"outputImages": "{cache}/{nodeType}/{uid0}/panorama.exr",
"outSfMData": ""
"outputImages": "{cache}/{nodeType}/{uid0}/panorama.exr"
},
"position": [
3000,
@ -119,13 +77,7 @@
},
"PanoramaWarping_1": {
"inputs": {
"panoramaWidth": 10000,
"maxPanoramaWidth": 70000,
"verboseLevel": "info",
"percentUpscale": 50,
"input": "{SfMTransform_1.output}",
"storageDataType": "float",
"estimateResolution": true
"input": "{SfMTransform_1.output}"
},
"nodeType": "PanoramaWarping",
"uids": {
@ -149,11 +101,6 @@
"inputs": {
"samples": "{LdrToHdrSampling_1.output}",
"channelQuantizationPower": "{LdrToHdrSampling_1.channelQuantizationPower}",
"maxTotalPoints": 1000000,
"nbBrackets": 0,
"calibrationMethod": "debevec",
"calibrationWeight": "default",
"verboseLevel": "info",
"byPass": "{LdrToHdrSampling_1.byPass}",
"input": "{LdrToHdrSampling_1.input}",
"userNbBrackets": "{LdrToHdrSampling_1.userNbBrackets}"
@ -178,16 +125,7 @@
},
"LdrToHdrSampling_1": {
"inputs": {
"blockSize": 256,
"nbBrackets": 0,
"verboseLevel": "info",
"radius": 5,
"byPass": false,
"channelQuantizationPower": 10,
"debug": false,
"input": "{PanoramaPrepareImages_1.output}",
"maxCountSample": 200,
"userNbBrackets": 0
"input": "{PanoramaPrepareImages_1.output}"
},
"nodeType": "LdrToHdrSampling",
"uids": {
@ -209,13 +147,6 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 5,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 40,
"input": "{PanoramaInit_1.outSfMData}",
"method": "FrustumOrVocabularyTree",
"featuresFolders": [
@ -242,20 +173,8 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "high",
"gridFiltering": true,
"input": "{LdrToHdrMerge_1.outSfMData}",
"describerPreset": "normal"
"input": "{LdrToHdrMerge_1.outSfMData}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -275,17 +194,14 @@
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaSeams_1": {
"PanoramaMerging_1": {
"inputs": {
"verboseLevel": "info",
"input": "{PanoramaWarping_1.input}",
"warpingFolder": "{PanoramaWarping_1.output}",
"maxWidth": 5000,
"useGraphCut": true
"compositingFolder": "{PanoramaCompositing_1.output}",
"input": "{PanoramaCompositing_1.input}"
},
"nodeType": "PanoramaSeams",
"nodeType": "PanoramaMerging",
"uids": {
"0": "0ee6da171bd684358b7c64dcc631f81ba743e1fa"
"0": "e007a4eb5fc5937b320638eba667cea183c0c642"
},
"parallelization": {
"blockSize": 0,
@ -293,10 +209,10 @@
"size": 0
},
"outputs": {
"output": "{cache}/{nodeType}/{uid0}/labels.exr"
"outputPanorama": "{cache}/{nodeType}/{uid0}/panorama.{outputFileTypeValue}"
},
"position": [
2400,
2800,
0
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
@ -304,13 +220,8 @@
"PanoramaCompositing_1": {
"inputs": {
"warpingFolder": "{PanoramaSeams_1.warpingFolder}",
"maxThreads": 4,
"labels": "{PanoramaSeams_1.output}",
"verboseLevel": "info",
"overlayType": "none",
"compositerType": "multiband",
"input": "{PanoramaSeams_1.input}",
"storageDataType": "float"
"input": "{PanoramaSeams_1.input}"
},
"nodeType": "PanoramaCompositing",
"uids": {
@ -332,10 +243,6 @@
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
@ -345,12 +252,7 @@
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
]
},
"nodeType": "CameraInit",
"uids": {
@ -372,7 +274,6 @@
},
"PanoramaPrepareImages_1": {
"inputs": {
"verboseLevel": "info",
"input": "{CameraInit_1.output}"
},
"nodeType": "PanoramaPrepareImages",
@ -395,33 +296,8 @@
},
"SfMTransform_1": {
"inputs": {
"applyScale": true,
"scale": 1.0,
"applyTranslation": true,
"landmarksDescriberTypes": [
"sift",
"dspsift",
"akaze"
],
"markers": [],
"method": "manual",
"verboseLevel": "info",
"input": "{PanoramaEstimation_1.output}",
"applyRotation": true,
"manualTransform": {
"manualTranslation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"manualRotation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"manualScale": 1.0
},
"transformation": ""
"input": "{PanoramaEstimation_1.output}"
},
"nodeType": "SfMTransform",
"uids": {
@ -442,17 +318,14 @@
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaMerging_1": {
"PanoramaSeams_1": {
"inputs": {
"verboseLevel": "info",
"compositingFolder": "{PanoramaCompositing_1.output}",
"outputFileType": "exr",
"storageDataType": "float",
"input": "{PanoramaCompositing_1.input}"
"input": "{PanoramaWarping_1.input}",
"warpingFolder": "{PanoramaWarping_1.output}"
},
"nodeType": "PanoramaMerging",
"nodeType": "PanoramaSeams",
"uids": {
"0": "e007a4eb5fc5937b320638eba667cea183c0c642"
"0": "0ee6da171bd684358b7c64dcc631f81ba743e1fa"
},
"parallelization": {
"blockSize": 0,
@ -460,34 +333,21 @@
"size": 0
},
"outputs": {
"outputPanorama": "{cache}/{nodeType}/{uid0}/panorama.{outputFileTypeValue}"
"output": "{cache}/{nodeType}/{uid0}/labels.exr"
},
"position": [
2800,
2400,
0
],
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"PanoramaEstimation_1": {
"inputs": {
"intermediateRefineWithFocalDist": false,
"offsetLongitude": 0.0,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"filterMatches": false,
"rotationAveragingWeighting": true,
"offsetLatitude": 0.0,
"verboseLevel": "info",
"maxAngularError": 100.0,
"lockAllIntrinsics": false,
"refine": true,
"input": "{FeatureMatching_1.input}",
"intermediateRefineWithFocal": false,
"describerTypes": "{FeatureMatching_1.describerTypes}",
"relativeRotation": "rotation_matrix",
"maxAngleToPrior": 20.0,
"rotationAveraging": "L2_minimization",
"featuresFolders": "{FeatureMatching_1.featuresFolders}"
},
"nodeType": "PanoramaEstimation",
@ -511,24 +371,10 @@
},
"PanoramaInit_1": {
"inputs": {
"useFisheye": false,
"fisheyeCenterOffset": {
"fisheyeCenterOffset_y": 0.0,
"fisheyeCenterOffset_x": 0.0
},
"initializeCameras": "No",
"nbViewsPerLine": [],
"debugFisheyeCircleEstimation": false,
"verboseLevel": "info",
"dependency": [
"{FeatureExtraction_1.output}"
],
"estimateFisheyeCircle": true,
"input": "{FeatureExtraction_1.input}",
"yawCW": 1,
"config": "",
"fisheyeRadius": 96.0,
"inputAngle": "None"
"input": "{FeatureExtraction_1.input}"
},
"nodeType": "PanoramaInit",
"uids": {
@ -550,23 +396,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{ImageMatching_1.input}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",

View file

@ -3,17 +3,18 @@
"pipelineVersion": "2.2",
"releaseVersion": "2021.1.0",
"fileVersion": "1.1",
"template": true,
"nodesVersions": {
"FeatureMatching": "2.0",
"MeshFiltering": "3.0",
"Texturing": "6.0",
"PrepareDenseScene": "3.0",
"DepthMap": "2.0",
"Meshing": "7.0",
"StructureFromMotion": "2.0",
"CameraInit": "7.0",
"ImageMatching": "2.0",
"FeatureExtraction": "1.1",
"StructureFromMotion": "2.0",
"Meshing": "7.0",
"DepthMapFilter": "3.0"
}
},
@ -21,47 +22,8 @@
"Texturing_1": {
"inputs": {
"imagesFolder": "{DepthMap_1.imagesFolder}",
"downscale": 2,
"bumpMapping": {
"normalFileType": "exr",
"enable": true,
"bumpType": "Normal",
"heightFileType": "exr"
},
"forceVisibleByAllVertices": false,
"fillHoles": false,
"multiBandDownscale": 4,
"useScore": true,
"displacementMapping": {
"displacementMappingFileType": "exr",
"enable": true
},
"outputMeshFileType": "obj",
"angleHardThreshold": 90.0,
"textureSide": 8192,
"processColorspace": "sRGB",
"input": "{Meshing_1.output}",
"useUDIM": true,
"subdivisionTargetRatio": 0.8,
"padding": 5,
"inputRefMesh": "",
"correctEV": false,
"visibilityRemappingMethod": "PullPush",
"inputMesh": "{MeshFiltering_1.outputMesh}",
"verboseLevel": "info",
"colorMapping": {
"enable": true,
"colorMappingFileType": "exr"
},
"bestScoreThreshold": 0.1,
"unwrapMethod": "Basic",
"multiBandNbContrib": {
"high": 1,
"midHigh": 5,
"low": 0,
"midLow": 10
},
"flipNormals": false
"inputMesh": "{MeshFiltering_1.outputMesh}"
},
"nodeType": "Texturing",
"uids": {
@ -86,67 +48,8 @@
},
"Meshing_1": {
"inputs": {
"exportDebugTetrahedralization": false,
"useBoundingBox": false,
"maxInputPoints": 50000000,
"repartition": "multiResolution",
"helperPointsGridSize": 10,
"seed": 0,
"voteFilteringForWeaklySupportedSurfaces": true,
"verboseLevel": "info",
"outputMeshFileType": "obj",
"simGaussianSizeInit": 10.0,
"nPixelSizeBehind": 4.0,
"fullWeight": 1.0,
"depthMapsFolder": "{DepthMapFilter_1.output}",
"densify": false,
"simFactor": 15.0,
"maskHelperPointsWeight": 1.0,
"densifyScale": 20.0,
"input": "{DepthMapFilter_1.input}",
"addLandmarksToTheDensePointCloud": false,
"voteMarginFactor": 4.0,
"saveRawDensePointCloud": false,
"contributeMarginFactor": 2.0,
"estimateSpaceMinObservationAngle": 10,
"nbSolidAngleFilteringIterations": 2,
"minStep": 2,
"colorizeOutput": false,
"pixSizeMarginFinalCoef": 4.0,
"densifyNbFront": 1,
"boundingBox": {
"bboxScale": {
"y": 1.0,
"x": 1.0,
"z": 1.0
},
"bboxTranslation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"bboxRotation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
}
},
"minSolidAngleRatio": 0.2,
"maxPoints": 5000000,
"addMaskHelperPoints": false,
"maxPointsPerVoxel": 1000000,
"angleFactor": 15.0,
"partitioning": "singleBlock",
"estimateSpaceFromSfM": true,
"minAngleThreshold": 1.0,
"pixSizeMarginInitCoef": 2.0,
"refineFuse": true,
"maxNbConnectedHelperPoints": 50,
"estimateSpaceMinObservations": 3,
"invertTetrahedronBasedOnNeighborsNbIterations": 10,
"maskBorderSize": 4,
"simGaussianSize": 10.0,
"densifyNbBack": 1
"input": "{DepthMapFilter_1.input}"
},
"nodeType": "Meshing",
"uids": {
@ -169,17 +72,7 @@
},
"DepthMapFilter_1": {
"inputs": {
"minNumOfConsistentCamsWithLowSimilarity": 4,
"computeNormalMaps": false,
"minNumOfConsistentCams": 3,
"depthMapsFolder": "{DepthMap_1.output}",
"verboseLevel": "info",
"nNearestCams": 10,
"pixSizeBallWithLowSimilarity": 0,
"pixToleranceFactor": 2.0,
"pixSizeBall": 0,
"minViewAngle": 2.0,
"maxViewAngle": 70.0,
"input": "{DepthMap_1.input}"
},
"nodeType": "DepthMapFilter",
@ -202,15 +95,7 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 5,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 40,
"input": "{FeatureExtraction_1.input}",
"method": "SequentialAndVocabularyTree",
"featuresFolders": [
"{FeatureExtraction_1.output}"
]
@ -235,20 +120,7 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "normal",
"gridFiltering": true,
"input": "{CameraInit_1.output}",
"describerPreset": "normal"
"input": "{CameraInit_1.output}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -270,39 +142,12 @@
},
"StructureFromMotion_1": {
"inputs": {
"localizerEstimatorMaxIterations": 4096,
"minAngleForLandmark": 2.0,
"filterTrackForks": false,
"minNumberOfObservationsForTriangulation": 2,
"maxAngleInitialPair": 40.0,
"observationConstraint": "Scale",
"maxNumberOfMatches": 0,
"localizerEstimator": "acransac",
"describerTypes": "{FeatureMatching_1.describerTypes}",
"lockScenePreviouslyReconstructed": false,
"localBAGraphDistance": 1,
"minNbCamerasToRefinePrincipalPoint": 3,
"lockAllIntrinsics": false,
"input": "{FeatureMatching_1.input}",
"featuresFolders": "{FeatureMatching_1.featuresFolders}",
"useRigConstraint": true,
"rigMinNbCamerasForCalibration": 20,
"initialPairA": "",
"initialPairB": "",
"interFileExtension": ".abc",
"useLocalBA": true,
"computeStructureColor": true,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"minInputTrackLength": 2,
"useOnlyMatchesFromInputFolder": false,
"verboseLevel": "info",
"minAngleForTriangulation": 3.0,
"maxReprojectionError": 4.0,
"minAngleInitialPair": 5.0,
"minNumberOfMatches": 0,
"localizerEstimatorError": 0.0
]
},
"nodeType": "StructureFromMotion",
"uids": {
@ -326,14 +171,7 @@
},
"PrepareDenseScene_1": {
"inputs": {
"imagesFolders": [],
"masksFolders": [],
"outputFileType": "exr",
"verboseLevel": "info",
"saveMatricesTxtFiles": false,
"saveMetadata": true,
"input": "{StructureFromMotion_1.output}",
"evCorrection": false
"input": "{StructureFromMotion_1.output}"
},
"nodeType": "PrepareDenseScene",
"uids": {
@ -355,28 +193,7 @@
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
"radial3",
"brown",
"fisheye4",
"fisheye1",
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
},
"inputs": {},
"nodeType": "CameraInit",
"uids": {
"0": "f9436e97e444fa71a05aa5cf7639b206df8ba282"
@ -397,37 +214,8 @@
},
"DepthMap_1": {
"inputs": {
"sgmMaxDepthsPerTc": 1500,
"sgmP2": 100.0,
"imagesFolder": "{PrepareDenseScene_1.output}",
"downscale": 2,
"refineMaxTCams": 6,
"exportIntermediateResults": false,
"nbGPUs": 0,
"refineNiters": 100,
"refineGammaP": 8.0,
"refineGammaC": 15.5,
"sgmMaxDepths": 3000,
"sgmUseSfmSeeds": true,
"input": "{PrepareDenseScene_1.input}",
"refineWSH": 3,
"sgmP1": 10.0,
"sgmFilteringAxes": "YX",
"sgmMaxTCams": 10,
"refineSigma": 15,
"sgmScale": -1,
"minViewAngle": 2.0,
"maxViewAngle": 70.0,
"sgmGammaC": 5.5,
"sgmWSH": 4,
"refineNSamplesHalf": 150,
"sgmMaxSideXY": 700,
"refineUseTcOrRcPixSize": false,
"verboseLevel": "info",
"sgmGammaP": 8.0,
"sgmStepXY": -1,
"refineNDepthsToRefine": 31,
"sgmStepZ": -1
"input": "{PrepareDenseScene_1.input}"
},
"nodeType": "DepthMap",
"uids": {
@ -449,18 +237,7 @@
},
"MeshFiltering_1": {
"inputs": {
"filteringSubset": "all",
"outputMeshFileType": "obj",
"inputMesh": "{Meshing_1.outputMesh}",
"filterTrianglesRatio": 0.0,
"smoothingSubset": "all",
"verboseLevel": "info",
"smoothingIterations": 5,
"filterLargeTrianglesFactor": 60.0,
"keepLargestMeshOnly": false,
"smoothingBoundariesNeighbours": 0,
"smoothingLambda": 1.0,
"filteringIterations": 1
"inputMesh": "{Meshing_1.outputMesh}"
},
"nodeType": "MeshFiltering",
"uids": {
@ -482,23 +259,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{ImageMatching_1.input}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",

View file

@ -3,6 +3,7 @@
"pipelineVersion": "2.2",
"releaseVersion": "2021.1.0",
"fileVersion": "1.1",
"template": true,
"nodesVersions": {
"ExportAnimatedCamera": "2.0",
"FeatureMatching": "2.0",
@ -17,9 +18,7 @@
"graph": {
"DistortionCalibration_1": {
"inputs": {
"verboseLevel": "info",
"input": "{CameraInit_2.output}",
"lensGrid": []
"input": "{CameraInit_2.output}"
},
"nodeType": "DistortionCalibration",
"uids": {
@ -41,15 +40,7 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 5,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 40,
"input": "{FeatureExtraction_1.input}",
"method": "SequentialAndVocabularyTree",
"featuresFolders": [
"{FeatureExtraction_1.output}"
]
@ -74,20 +65,7 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "normal",
"gridFiltering": true,
"input": "{CameraInit_1.output}",
"describerPreset": "normal"
"input": "{CameraInit_1.output}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -109,39 +87,12 @@
},
"StructureFromMotion_1": {
"inputs": {
"localizerEstimatorMaxIterations": 4096,
"minAngleForLandmark": 2.0,
"filterTrackForks": false,
"minNumberOfObservationsForTriangulation": 2,
"maxAngleInitialPair": 40.0,
"observationConstraint": "Scale",
"maxNumberOfMatches": 0,
"localizerEstimator": "acransac",
"describerTypes": "{FeatureMatching_1.describerTypes}",
"lockScenePreviouslyReconstructed": false,
"localBAGraphDistance": 1,
"minNbCamerasToRefinePrincipalPoint": 3,
"lockAllIntrinsics": false,
"input": "{FeatureMatching_1.input}",
"featuresFolders": "{FeatureMatching_1.featuresFolders}",
"useRigConstraint": true,
"rigMinNbCamerasForCalibration": 20,
"initialPairA": "",
"initialPairB": "",
"interFileExtension": ".abc",
"useLocalBA": true,
"computeStructureColor": true,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"minInputTrackLength": 2,
"useOnlyMatchesFromInputFolder": false,
"verboseLevel": "info",
"minAngleForTriangulation": 3.0,
"maxReprojectionError": 4.0,
"minAngleInitialPair": 5.0,
"minNumberOfMatches": 0,
"localizerEstimatorError": 0.0
]
},
"nodeType": "StructureFromMotion",
"uids": {
@ -165,15 +116,8 @@
},
"ExportAnimatedCamera_1": {
"inputs": {
"exportFullROD": false,
"undistortedImageType": "exr",
"exportUVMaps": true,
"verboseLevel": "info",
"sfmDataFilter": "{StructureFromMotion_1.output}",
"exportUndistortedImages": false,
"input": "{StructureFromMotion_2.output}",
"viewFilter": "",
"correctPrincipalPoint": true
"input": "{StructureFromMotion_2.output}"
},
"nodeType": "ExportAnimatedCamera",
"uids": {
@ -196,28 +140,7 @@
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
"radial3",
"brown",
"fisheye4",
"fisheye1",
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
},
"inputs": {},
"nodeType": "CameraInit",
"uids": {
"0": "f9436e97e444fa71a05aa5cf7639b206df8ba282"
@ -238,17 +161,10 @@
},
"ImageMatchingMultiSfM_1": {
"inputs": {
"minNbImages": 200,
"matchingMode": "a/a+a/b",
"nbNeighbors": 10,
"tree": "${ALICEVISION_VOCTREE}",
"nbMatches": 5,
"verboseLevel": "info",
"weights": "",
"maxDescriptors": 500,
"input": "{FeatureExtraction_2.input}",
"inputB": "{StructureFromMotion_1.output}",
"method": "SequentialAndVocabularyTree",
"featuresFolders": [
"{FeatureExtraction_2.output}"
]
@ -273,28 +189,7 @@
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"CameraInit_2": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
"radial3",
"brown",
"fisheye4",
"fisheye1",
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
},
"inputs": {},
"nodeType": "CameraInit",
"uids": {
"0": "f9436e97e444fa71a05aa5cf7639b206df8ba282"
@ -315,20 +210,7 @@
},
"FeatureExtraction_2": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "normal",
"gridFiltering": true,
"input": "{CameraInit_2.output}",
"describerPreset": "normal"
"input": "{CameraInit_2.output}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -350,23 +232,9 @@
},
"FeatureMatching_2": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_2.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatchingMultiSfM_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{DistortionCalibration_1.outSfMData}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatchingMultiSfM_1.featuresFolders}"
},
"nodeType": "FeatureMatching",
@ -389,23 +257,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{ImageMatching_1.input}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",
@ -428,39 +282,16 @@
},
"StructureFromMotion_2": {
"inputs": {
"localizerEstimatorMaxIterations": 4096,
"minAngleForLandmark": 0.5,
"filterTrackForks": false,
"minNumberOfObservationsForTriangulation": 3,
"maxAngleInitialPair": 40.0,
"observationConstraint": "Scale",
"maxNumberOfMatches": 0,
"localizerEstimator": "acransac",
"describerTypes": "{FeatureMatching_2.describerTypes}",
"lockScenePreviouslyReconstructed": false,
"localBAGraphDistance": 1,
"minNbCamerasToRefinePrincipalPoint": 3,
"lockAllIntrinsics": false,
"input": "{FeatureMatching_2.input}",
"featuresFolders": "{FeatureMatching_2.featuresFolders}",
"useRigConstraint": true,
"rigMinNbCamerasForCalibration": 20,
"initialPairA": "",
"initialPairB": "",
"interFileExtension": ".abc",
"useLocalBA": true,
"computeStructureColor": true,
"matchesFolders": [
"{FeatureMatching_2.output}"
],
"minInputTrackLength": 5,
"useOnlyMatchesFromInputFolder": false,
"verboseLevel": "info",
"minAngleForTriangulation": 1.0,
"maxReprojectionError": 4.0,
"minAngleInitialPair": 5.0,
"minNumberOfMatches": 0,
"localizerEstimatorError": 0.0
"minAngleForTriangulation": 1.0
},
"nodeType": "StructureFromMotion",
"uids": {

View file

@ -4,60 +4,21 @@
"FeatureMatching": "2.0",
"MeshFiltering": "3.0",
"Texturing": "6.0",
"Meshing": "7.0",
"StructureFromMotion": "2.0",
"CameraInit": "7.0",
"ImageMatching": "2.0",
"FeatureExtraction": "1.1",
"StructureFromMotion": "2.0"
"Meshing": "7.0"
},
"releaseVersion": "2021.1.0",
"fileVersion": "1.1"
"fileVersion": "1.1",
"template": true
},
"graph": {
"Texturing_1": {
"inputs": {
"imagesFolder": "",
"downscale": 2,
"bumpMapping": {
"normalFileType": "exr",
"enable": true,
"bumpType": "Normal",
"heightFileType": "exr"
},
"forceVisibleByAllVertices": false,
"fillHoles": false,
"multiBandDownscale": 4,
"useScore": true,
"displacementMapping": {
"displacementMappingFileType": "exr",
"enable": true
},
"outputMeshFileType": "obj",
"angleHardThreshold": 90.0,
"textureSide": 8192,
"processColorspace": "sRGB",
"input": "{Meshing_1.output}",
"useUDIM": true,
"subdivisionTargetRatio": 0.8,
"padding": 5,
"inputRefMesh": "",
"correctEV": false,
"visibilityRemappingMethod": "PullPush",
"inputMesh": "{MeshFiltering_1.outputMesh}",
"verboseLevel": "info",
"colorMapping": {
"enable": true,
"colorMappingFileType": "exr"
},
"bestScoreThreshold": 0.1,
"unwrapMethod": "Basic",
"multiBandNbContrib": {
"high": 1,
"midHigh": 5,
"low": 0,
"midLow": 10
},
"flipNormals": false
"inputMesh": "{MeshFiltering_1.outputMesh}"
},
"nodeType": "Texturing",
"uids": {
@ -82,67 +43,7 @@
},
"Meshing_1": {
"inputs": {
"exportDebugTetrahedralization": false,
"useBoundingBox": false,
"maxInputPoints": 50000000,
"repartition": "multiResolution",
"helperPointsGridSize": 10,
"seed": 0,
"voteFilteringForWeaklySupportedSurfaces": true,
"verboseLevel": "info",
"outputMeshFileType": "obj",
"simGaussianSizeInit": 10.0,
"nPixelSizeBehind": 4.0,
"fullWeight": 1.0,
"depthMapsFolder": "",
"densify": false,
"simFactor": 15.0,
"maskHelperPointsWeight": 1.0,
"densifyScale": 20.0,
"input": "{StructureFromMotion_1.output}",
"addLandmarksToTheDensePointCloud": false,
"voteMarginFactor": 4.0,
"saveRawDensePointCloud": false,
"contributeMarginFactor": 2.0,
"estimateSpaceMinObservationAngle": 10,
"nbSolidAngleFilteringIterations": 2,
"minStep": 2,
"colorizeOutput": false,
"pixSizeMarginFinalCoef": 4.0,
"densifyNbFront": 1,
"boundingBox": {
"bboxScale": {
"y": 1.0,
"x": 1.0,
"z": 1.0
},
"bboxTranslation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
},
"bboxRotation": {
"y": 0.0,
"x": 0.0,
"z": 0.0
}
},
"minSolidAngleRatio": 0.2,
"maxPoints": 5000000,
"addMaskHelperPoints": false,
"maxPointsPerVoxel": 1000000,
"angleFactor": 15.0,
"partitioning": "singleBlock",
"estimateSpaceFromSfM": true,
"minAngleThreshold": 1.0,
"pixSizeMarginInitCoef": 2.0,
"refineFuse": true,
"maxNbConnectedHelperPoints": 50,
"estimateSpaceMinObservations": 3,
"invertTetrahedronBasedOnNeighborsNbIterations": 10,
"maskBorderSize": 4,
"simGaussianSize": 10.0,
"densifyNbBack": 1
"input": "{StructureFromMotion_1.output}"
},
"nodeType": "Meshing",
"uids": {
@ -165,15 +66,7 @@
},
"ImageMatching_1": {
"inputs": {
"minNbImages": 200,
"nbNeighbors": 5,
"tree": "${ALICEVISION_VOCTREE}",
"maxDescriptors": 500,
"verboseLevel": "info",
"weights": "",
"nbMatches": 40,
"input": "{FeatureExtraction_1.input}",
"method": "SequentialAndVocabularyTree",
"featuresFolders": [
"{FeatureExtraction_1.output}"
]
@ -198,20 +91,7 @@
},
"FeatureExtraction_1": {
"inputs": {
"verboseLevel": "info",
"maxThreads": 0,
"describerTypes": [
"dspsift"
],
"maxNbFeatures": 0,
"relativePeakThreshold": 0.01,
"forceCpuExtraction": true,
"masksFolder": "",
"contrastFiltering": "GridSort",
"describerQuality": "normal",
"gridFiltering": true,
"input": "{CameraInit_1.output}",
"describerPreset": "normal"
"input": "{CameraInit_1.output}"
},
"nodeType": "FeatureExtraction",
"uids": {
@ -233,39 +113,12 @@
},
"StructureFromMotion_1": {
"inputs": {
"localizerEstimatorMaxIterations": 4096,
"minAngleForLandmark": 2.0,
"filterTrackForks": false,
"minNumberOfObservationsForTriangulation": 2,
"maxAngleInitialPair": 40.0,
"observationConstraint": "Scale",
"maxNumberOfMatches": 0,
"localizerEstimator": "acransac",
"describerTypes": "{FeatureMatching_1.describerTypes}",
"lockScenePreviouslyReconstructed": false,
"localBAGraphDistance": 1,
"minNbCamerasToRefinePrincipalPoint": 3,
"lockAllIntrinsics": false,
"input": "{FeatureMatching_1.input}",
"featuresFolders": "{FeatureMatching_1.featuresFolders}",
"useRigConstraint": true,
"rigMinNbCamerasForCalibration": 20,
"initialPairA": "",
"initialPairB": "",
"interFileExtension": ".abc",
"useLocalBA": true,
"computeStructureColor": true,
"matchesFolders": [
"{FeatureMatching_1.output}"
],
"minInputTrackLength": 2,
"useOnlyMatchesFromInputFolder": false,
"verboseLevel": "info",
"minAngleForTriangulation": 3.0,
"maxReprojectionError": 4.0,
"minAngleInitialPair": 5.0,
"minNumberOfMatches": 0,
"localizerEstimatorError": 0.0
]
},
"nodeType": "StructureFromMotion",
"uids": {
@ -288,28 +141,7 @@
"internalFolder": "{cache}/{nodeType}/{uid0}/"
},
"CameraInit_1": {
"inputs": {
"groupCameraFallback": "folder",
"intrinsics": [],
"viewIdRegex": ".*?(\\d+)",
"defaultFieldOfView": 45.0,
"allowedCameraModels": [
"pinhole",
"radial1",
"radial3",
"brown",
"fisheye4",
"fisheye1",
"3deanamorphic4",
"3deradial4",
"3declassicld"
],
"verboseLevel": "info",
"viewIdMethod": "metadata",
"viewpoints": [],
"useInternalWhiteBalance": true,
"sensorDatabase": "${ALICEVISION_SENSOR_DB}"
},
"inputs": {},
"nodeType": "CameraInit",
"uids": {
"0": "f9436e97e444fa71a05aa5cf7639b206df8ba282"
@ -330,18 +162,7 @@
},
"MeshFiltering_1": {
"inputs": {
"filteringSubset": "all",
"outputMeshFileType": "obj",
"inputMesh": "{Meshing_1.outputMesh}",
"filterTrianglesRatio": 0.0,
"smoothingSubset": "all",
"verboseLevel": "info",
"smoothingIterations": 5,
"filterLargeTrianglesFactor": 60.0,
"keepLargestMeshOnly": false,
"smoothingBoundariesNeighbours": 0,
"smoothingLambda": 1.0,
"filteringIterations": 1
"inputMesh": "{Meshing_1.outputMesh}"
},
"nodeType": "MeshFiltering",
"uids": {
@ -363,23 +184,9 @@
},
"FeatureMatching_1": {
"inputs": {
"verboseLevel": "info",
"describerTypes": "{FeatureExtraction_1.describerTypes}",
"exportDebugFiles": false,
"crossMatching": false,
"geometricError": 0.0,
"maxMatches": 0,
"matchFromKnownCameraPoses": false,
"savePutativeMatches": false,
"guidedMatching": false,
"imagePairsList": "{ImageMatching_1.output}",
"geometricEstimator": "acransac",
"geometricFilterType": "fundamental_matrix",
"maxIteration": 2048,
"distanceRatio": 0.8,
"input": "{ImageMatching_1.input}",
"photometricMatchingMethod": "ANN_L2",
"knownPosesGeometricErrorMax": 5.0,
"featuresFolders": "{ImageMatching_1.featuresFolders}"
},
"nodeType": "FeatureMatching",

View file

@ -198,6 +198,12 @@ class MeshroomApp(QApplication):
templates.append(variant)
return templates
@Slot()
def reloadTemplateList(self):
for f in meshroom.core.pipelineTemplatesFolders:
meshroom.core.loadPipelineTemplates(f)
self.pipelineTemplateFilesChanged.emit()
def _recentProjectFiles(self):
projects = []
settings = QSettings()

View file

@ -354,6 +354,14 @@ class UIGraph(QObject):
@Slot(QUrl)
def saveAs(self, url):
self._saveAs(url)
@Slot(QUrl)
def saveAsTemplate(self, url):
self._saveAs(url, setupProjectFile=False, template=True)
def _saveAs(self, url, setupProjectFile=True, template=False):
""" Helper function for 'save as' features. """
if isinstance(url, (str)):
localFile = url
else:
@ -361,7 +369,7 @@ class UIGraph(QObject):
# ensure file is saved with ".mg" extension
if os.path.splitext(localFile)[-1] != ".mg":
localFile += ".mg"
self._graph.save(localFile)
self._graph.save(localFile, setupProjectFile=setupProjectFile, template=template)
self._undoStack.setClean()
# saving file on disk impacts cache folder location
# => force re-evaluation of monitored status files paths

View file

@ -142,6 +142,23 @@ ApplicationWindow {
onRejected: closed(Platform.Dialog.Rejected)
}
Platform.FileDialog {
id: saveTemplateDialog
signal closed(var result)
title: "Save Template"
nameFilters: ["Meshroom Graphs (*.mg)"]
defaultSuffix: ".mg"
fileMode: Platform.FileDialog.SaveFile
onAccepted: {
_reconstruction.saveAsTemplate(file)
closed(Platform.Dialog.Accepted)
MeshroomApp.reloadTemplateList()
}
onRejected: closed(Platform.Dialog.Rejected)
}
Item {
id: computeManager
@ -550,6 +567,17 @@ ApplicationWindow {
saveFileDialog.open()
}
}
Action {
id: saveAsTemplateAction
text: "Save As Template..."
shortcut: "Ctrl+Shift+T"
onTriggered: {
if(_reconstruction.graph && _reconstruction.graph.filepath) {
saveTemplateDialog.folder = Filepath.stringToUrl(Filepath.dirname(_reconstruction.graph.filepath))
}
saveTemplateDialog.open()
}
}
MenuSeparator { }
Action {
text: "Quit"